![]() |
![]() |
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);