![]() |
![]() |
00001 00008 #include "HLTrigger/Egamma/interface/HLTElectronEtFilter.h" 00009 00010 #include "DataFormats/Common/interface/Handle.h" 00011 00012 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" 00013 00014 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00015 00016 #include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" 00017 #include "DataFormats/EgammaCandidates/interface/Electron.h" 00018 #include "DataFormats/EgammaCandidates/interface/ElectronIsolationAssociation.h" 00019 #include "DataFormats/EgammaReco/interface/SuperCluster.h" 00020 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" 00021 00022 #include "DataFormats/Common/interface/AssociationMap.h" 00023 #include "DataFormats/RecoCandidate/interface/RecoCandidate.h" 00024 00025 // 00026 // constructors and destructor 00027 // 00028 HLTElectronEtFilter::HLTElectronEtFilter(const edm::ParameterSet& iConfig){ 00029 candTag_ = iConfig.getParameter< edm::InputTag > ("candTag"); 00030 EtEB_ = iConfig.getParameter<double> ("EtCutEB"); 00031 EtEE_ = iConfig.getParameter<double> ("EtCutEE"); 00032 00033 ncandcut_ = iConfig.getParameter<int> ("ncandcut"); 00034 doIsolated_ = iConfig.getParameter<bool> ("doIsolated"); 00035 00036 store_ = iConfig.getUntrackedParameter<bool> ("SaveTag",false) ; 00037 L1IsoCollTag_= iConfig.getParameter< edm::InputTag > ("L1IsoCand"); 00038 L1NonIsoCollTag_= iConfig.getParameter< edm::InputTag > ("L1NonIsoCand"); 00039 00040 //register your products 00041 produces<trigger::TriggerFilterObjectWithRefs>(); 00042 } 00043 00044 HLTElectronEtFilter::~HLTElectronEtFilter(){} 00045 00046 00047 // ------------ method called to produce the data ------------ 00048 bool HLTElectronEtFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) 00049 { 00050 using namespace trigger; 00051 std::auto_ptr<trigger::TriggerFilterObjectWithRefs> filterproduct (new trigger::TriggerFilterObjectWithRefs(path(),module())); 00052 if( store_ ){filterproduct->addCollectionTag(L1IsoCollTag_);} 00053 if( store_ && !doIsolated_){filterproduct->addCollectionTag(L1NonIsoCollTag_);} 00054 00055 // Ref to Candidate object to be recorded in filter object 00056 reco::ElectronRef ref; 00057 00058 edm::Handle<trigger::TriggerFilterObjectWithRefs> PrevFilterOutput; 00059 00060 iEvent.getByLabel (candTag_,PrevFilterOutput); 00061 00062 std::vector<edm::Ref<reco::ElectronCollection> > elecands; 00063 PrevFilterOutput->getObjects(TriggerElectron, elecands); 00064 00065 00066 00067 // look at all photons, check cuts and add to filter object 00068 int n = 0; 00069 00070 for (unsigned int i=0; i<elecands.size(); i++) { 00071 00072 ref = elecands[i]; 00073 float Pt = ref->pt(); 00074 float Eta = fabs(ref->eta()); 00075 00076 if ( (Eta < 1.479 && Pt > EtEB_) || (Eta >= 1.479 && Pt > EtEE_) ) { 00077 n++; 00078 filterproduct->addObject(TriggerElectron, ref); 00079 } 00080 00081 } 00082 // filter decision 00083 bool accept(n>=ncandcut_); 00084 00085 // put filter object into the Event 00086 iEvent.put(filterproduct); 00087 00088 return accept; 00089 } 00090