![]() |
![]() |
00001 00009 #include "HLTrigger/Egamma/interface/HLTEgammaEtFilter.h" 00010 00011 #include "DataFormats/Common/interface/Handle.h" 00012 00013 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" 00014 00015 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00016 00017 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" 00018 00019 // 00020 // constructors and destructor 00021 // 00022 HLTEgammaEtFilter::HLTEgammaEtFilter(const edm::ParameterSet& iConfig) 00023 { 00024 inputTag_ = iConfig.getParameter< edm::InputTag > ("inputTag"); 00025 etcutEB_ = iConfig.getParameter<double> ("etcutEB"); 00026 etcutEE_ = iConfig.getParameter<double> ("etcutEE"); 00027 ncandcut_ = iConfig.getParameter<int> ("ncandcut"); 00028 store_ = iConfig.getUntrackedParameter<bool> ("SaveTag",false) ; 00029 relaxed_ = iConfig.getUntrackedParameter<bool> ("relaxed",true) ; 00030 L1IsoCollTag_= iConfig.getParameter< edm::InputTag > ("L1IsoCand"); 00031 L1NonIsoCollTag_= iConfig.getParameter< edm::InputTag > ("L1NonIsoCand"); 00032 00033 //register your products 00034 produces<trigger::TriggerFilterObjectWithRefs>(); 00035 } 00036 00037 HLTEgammaEtFilter::~HLTEgammaEtFilter(){} 00038 00039 00040 // ------------ method called to produce the data ------------ 00041 bool 00042 HLTEgammaEtFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) 00043 { 00044 using namespace trigger; 00045 // The filter object 00046 std::auto_ptr<trigger::TriggerFilterObjectWithRefs> filterproduct (new trigger::TriggerFilterObjectWithRefs(path(),module())); 00047 if( store_ ){filterproduct->addCollectionTag(L1IsoCollTag_);} 00048 if( store_ && relaxed_){filterproduct->addCollectionTag(L1NonIsoCollTag_);} 00049 00050 // Ref to Candidate object to be recorded in filter object 00051 edm::Ref<reco::RecoEcalCandidateCollection> ref; 00052 00053 // get hold of filtered candidates 00054 //edm::Handle<reco::HLTFilterObjectWithRefs> recoecalcands; 00055 edm::Handle<trigger::TriggerFilterObjectWithRefs> PrevFilterOutput; 00056 00057 iEvent.getByLabel (inputTag_,PrevFilterOutput); 00058 00059 std::vector<edm::Ref<reco::RecoEcalCandidateCollection> > recoecalcands; // vref with your specific C++ collection type 00060 PrevFilterOutput->getObjects(TriggerCluster, recoecalcands); 00061 00062 // look at all candidates, check cuts and add to filter object 00063 int n(0); 00064 00065 for (unsigned int i=0; i<recoecalcands.size(); i++) { 00066 00067 ref = recoecalcands[i] ; 00068 00069 if( ( fabs(ref->eta()) < 1.479 && ref->et() >= etcutEB_ ) || ( fabs(ref->eta()) >= 1.479 && ref->et() >= etcutEE_ ) ){ 00070 n++; 00071 // std::cout << "Passed eta: " << ref->eta() << std::endl; 00072 filterproduct->addObject(TriggerCluster, ref); 00073 } 00074 } 00075 00076 00077 // filter decision 00078 bool accept(n>=ncandcut_); 00079 00080 // put filter object into the Event 00081 iEvent.put(filterproduct); 00082 00083 return accept; 00084 }