CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/HLTrigger/Egamma/src/HLTElectronEtFilter.cc

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