CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/HLTrigger/special/src/HLTEcalIsolationFilter.cc

Go to the documentation of this file.
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