CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/HLTrigger/JetMET/src/HLTRapGapFilter.cc

Go to the documentation of this file.
00001 
00009 #include "HLTrigger/JetMET/interface/HLTRapGapFilter.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/JetReco/interface/CaloJetCollection.h"
00018 
00019 #include "FWCore/Framework/interface/ESHandle.h"
00020 #include "FWCore/Framework/interface/EventSetup.h"
00021 
00022 
00023 //
00024 // constructors and destructor
00025 //
00026 HLTRapGapFilter::HLTRapGapFilter(const edm::ParameterSet& iConfig)
00027 {
00028    inputTag_   = iConfig.getParameter< edm::InputTag > ("inputTag");
00029    saveTag_    = iConfig.getUntrackedParameter<bool>("saveTag",false);
00030    absEtaMin_  = iConfig.getParameter<double> ("minEta");
00031    absEtaMax_  = iConfig.getParameter<double> ("maxEta"); 
00032    caloThresh_ = iConfig.getParameter<double> ("caloThresh"); 
00033 
00034    //register your products
00035    produces<trigger::TriggerFilterObjectWithRefs>();
00036 }
00037 
00038 HLTRapGapFilter::~HLTRapGapFilter(){}
00039 
00040 
00041 // ------------ method called to produce the data  ------------
00042 bool
00043 HLTRapGapFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00044 {
00045   using namespace reco;
00046   using namespace trigger;
00047 
00048   // The filter object
00049   std::auto_ptr<trigger::TriggerFilterObjectWithRefs> 
00050     filterobject (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00051   if (saveTag_) filterobject->addCollectionTag(inputTag_);
00052 
00053   edm::Handle<CaloJetCollection> recocalojets;
00054   iEvent.getByLabel(inputTag_,recocalojets);
00055 
00056   // look at all candidates,  check cuts and add to filter object
00057   int n(0);
00058   
00059   //std::cout << "Found " << recocalojets->size() << " jets in this event" << std::endl;
00060 
00061   if(recocalojets->size() > 1){
00062     // events with two or more jets
00063 
00064     double etjet=0.;
00065     double etajet=0.;
00066     double sumets=0.;
00067     int countjets =0;
00068 
00069     for (CaloJetCollection::const_iterator recocalojet = recocalojets->begin(); 
00070          recocalojet!=(recocalojets->end()); recocalojet++) {
00071       
00072       etjet = recocalojet->energy();
00073       etajet = recocalojet->eta();
00074       
00075       if(fabs(etajet) > absEtaMin_ && fabs(etajet) < absEtaMax_)
00076         {
00077           sumets += etjet;
00078           //std::cout << "Adding jet with eta = " << etajet << ", and e = " 
00079           //        << etjet << std::endl;
00080         }
00081       countjets++;
00082     }
00083 
00084     //std::cout << "Sum jet energy = " << sumets << std::endl;
00085     if(sumets<=caloThresh_){
00086       //std::cout << "Passed filter!" << std::endl;
00087       for (CaloJetCollection::const_iterator recocalojet = recocalojets->begin(); 
00088            recocalojet!=(recocalojets->end()); recocalojet++) {
00089         CaloJetRef ref(CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet)));
00090         filterobject->addObject(TriggerJet,ref);
00091         n++;
00092       }
00093     }
00094     
00095   } // events with two or more jets
00096   
00097   
00098   
00099   // filter decision
00100   bool accept(n>0);
00101   
00102   // put filter object into the Event
00103   iEvent.put(filterobject);
00104   
00105   return accept;
00106 }