![]() |
![]() |
00001 #include "HLTrigger/special/interface/HLTEcalIsolationFilter.h" 00002 00003 #include "DataFormats/HcalIsolatedTrack/interface/IsolatedPixelTrackCandidate.h" 00004 00005 #include "DataFormats/Common/interface/Handle.h" 00006 00007 #include "DataFormats/Common/interface/RefToBase.h" 00008 00009 //#include "DataFormats/HLTReco/interface/HLTFilterObject.h" 00010 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" 00011 00012 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00013 00014 00015 HLTEcalIsolationFilter::HLTEcalIsolationFilter(const edm::ParameterSet& iConfig) 00016 { 00017 candTag_ = iConfig.getParameter<edm::InputTag> ("EcalIsolatedParticleSource"); 00018 maxhitout = iConfig.getParameter<int> ("MaxNhitOuterCone"); 00019 maxhitin = iConfig.getParameter<int> ("MaxNhitInnerCone"); 00020 maxenin = iConfig.getParameter<double> ("MaxEnergyInnerCone"); 00021 maxenout = iConfig.getParameter<double> ("MaxEnergyOuterCone"); 00022 maxetacand = iConfig.getParameter<double> ("MaxEtaCandidate"); 00023 00024 //register products 00025 produces<trigger::TriggerFilterObjectWithRefs>(); 00026 } 00027 00028 HLTEcalIsolationFilter::~HLTEcalIsolationFilter(){} 00029 00030 bool HLTEcalIsolationFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) 00031 { 00032 00033 // The Filter object 00034 std::auto_ptr<trigger::TriggerFilterObjectWithRefs> filterproduct (new trigger::TriggerFilterObjectWithRefs(path(),module())); 00035 00036 // Ref to Candidate object to be recorded in filter object 00037 edm::Ref<reco::IsolatedPixelTrackCandidateCollection> candref; 00038 00039 // get hold of filtered candidates 00040 edm::Handle<reco::IsolatedPixelTrackCandidateCollection> ecIsolCands; 00041 iEvent.getByLabel(candTag_,ecIsolCands); 00042 00043 //Filtering 00044 00045 unsigned int n=0; 00046 for (unsigned int i=0; i<ecIsolCands->size(); i++) 00047 { 00048 candref = edm::Ref<reco::IsolatedPixelTrackCandidateCollection>(ecIsolCands, i); 00049 00050 if ((candref->nHitIn()<=maxhitin)&&(candref->nHitOut()<=maxhitout)&&(candref->energyOut()<maxenout)&&(candref->energyIn()<maxenin)&&fabs(candref->eta())<maxetacand) 00051 { 00052 filterproduct->addObject(trigger::TriggerTrack, candref); 00053 n++; 00054 } 00055 } 00056 00057 00058 bool accept(n>0); 00059 00060 iEvent.put(filterproduct); 00061 00062 return accept; 00063 00064 } 00065