CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch12/src/RecoTauTag/TauTagTools/plugins/PFTauViewRefDiscriminantSelector.cc

Go to the documentation of this file.
00001 /*
00002  * Produce a RefVector of PFTaus that pass a given selection on
00003  * the input discriminator collection.
00004  *
00005  * Parameters:
00006  *  InputTag src = View of PFTaus
00007  *  InputTag disc = discriinator
00008  *  double cut
00009  *
00010  * Author: Evan K. Friis (UC Davis)
00011  *
00012  */
00013 
00014 #include <boost/foreach.hpp>
00015 #include <memory>
00016 
00017 #include "FWCore/Framework/interface/EDFilter.h"
00018 #include "FWCore/Framework/interface/EventSetup.h"
00019 #include "FWCore/Framework/interface/ESHandle.h"
00020 #include "FWCore/Framework/interface/Event.h"
00021 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00022 #include "DataFormats/TauReco/interface/PFTauFwd.h"
00023 #include "DataFormats/TauReco/interface/PFTauDiscriminator.h"
00024 #include "RecoTauTag/RecoTau/interface/RecoTauCommonUtilities.h"
00025 
00026 class RecoTauDiscriminatorRefSelector : public edm::EDFilter {
00027   public:
00028     explicit RecoTauDiscriminatorRefSelector(const edm::ParameterSet &pset);
00029     ~RecoTauDiscriminatorRefSelector() {}
00030     bool filter(edm::Event &evt, const edm::EventSetup &es);
00031   private:
00032     typedef edm::RefToBaseVector<reco::PFTau> OutputType;
00033     edm::InputTag src_;
00034     edm::InputTag discriminatorSrc_;
00035     double cut_;
00036     bool filter_;
00037 };
00038 
00039 RecoTauDiscriminatorRefSelector::RecoTauDiscriminatorRefSelector(
00040     const edm::ParameterSet &pset) {
00041   src_ = pset.getParameter<edm::InputTag>("src");
00042   discriminatorSrc_ = pset.getParameter<edm::InputTag>("discriminator");
00043   cut_ = pset.getParameter<double>("cut");
00044   filter_ = pset.getParameter<bool>("filter");
00045   //produces<reco::PFTauRefVector>();
00046   produces<OutputType>();
00047 }
00048 
00049 
00050 bool RecoTauDiscriminatorRefSelector::filter(edm::Event& evt,
00051                                            const edm::EventSetup &es) {
00052   edm::Handle<reco::CandidateView> input;
00053   evt.getByLabel(src_, input);
00054   reco::PFTauRefVector inputRefs =
00055       reco::tau::castView<reco::PFTauRefVector>(input);
00056 
00057   edm::Handle<reco::PFTauDiscriminator> disc;
00058   evt.getByLabel(discriminatorSrc_, disc);
00059 
00060 //  std::auto_ptr<reco::PFTauRefVector> output(
00061 //      new reco::PFTauRefVector(inputRefs.id()));
00062   //std::auto_ptr<OutputType> output(
00063   //    new OutputType(inputRefs.id()));
00064   std::auto_ptr<OutputType> output(new OutputType);
00065 
00066   BOOST_FOREACH(reco::PFTauRef ref, inputRefs) {
00067     if ( (*disc)[ref] > cut_ )
00068       output->push_back(edm::RefToBase<reco::PFTau>(ref));
00069   }
00070   size_t selected = output->size();
00071   evt.put(output);
00072   return (!filter_ || selected);
00073 }
00074 
00075 #include "FWCore/Framework/interface/MakerMacros.h"
00076 DEFINE_FWK_MODULE(RecoTauDiscriminatorRefSelector);