CMS 3D CMS Logo

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

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