CMS 3D CMS Logo

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

Go to the documentation of this file.
00001 
00007 #include "HLTrigger/JetMET/interface/HLT2jetGapFilter.h"
00008 
00009 #include "DataFormats/Common/interface/Handle.h"
00010 
00011 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00012 
00013 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00014 
00015 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00016 
00017 #include "FWCore/Framework/interface/ESHandle.h"
00018 #include "FWCore/Framework/interface/EventSetup.h"
00019 
00020 
00021 //
00022 // constructors and destructor
00023 //
00024 HLT2jetGapFilter::HLT2jetGapFilter(const edm::ParameterSet& iConfig)
00025 {
00026    inputTag_ = iConfig.getParameter< edm::InputTag > ("inputTag");
00027    saveTag_    = iConfig.getUntrackedParameter<bool>("saveTag",false);
00028    minEt_   = iConfig.getParameter<double> ("minEt");
00029    minEta_= iConfig.getParameter<double> ("minEta"); 
00030 
00031    //register your products
00032    produces<trigger::TriggerFilterObjectWithRefs>();
00033 }
00034 
00035 HLT2jetGapFilter::~HLT2jetGapFilter(){}
00036 
00037 
00038 // ------------ method called to produce the data  ------------
00039 bool
00040 HLT2jetGapFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00041 {
00042   using namespace trigger;
00043   // The filter object
00044   std::auto_ptr<trigger::TriggerFilterObjectWithRefs> 
00045     filterobject (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00046   if (saveTag_) filterobject->addCollectionTag(inputTag_);
00047 
00048   edm::Handle<reco::CaloJetCollection> recocalojets;
00049   iEvent.getByLabel(inputTag_,recocalojets);
00050 
00051   // look at all candidates,  check cuts and add to filter object
00052   int n(0);
00053 
00054 //  std::cout << "HLT2jetGapFilter " << recocalojets->size() << " jets in this event" << std::endl;
00055 
00056 
00057   if(recocalojets->size() > 1){
00058     // events with two or more jets
00059 
00060     double etjet1=0.;
00061     double etjet2=0.;
00062     double etajet1=0.;
00063     double etajet2=0.;
00064     int countjets =0;
00065 
00066     for (reco::CaloJetCollection::const_iterator recocalojet = recocalojets->begin(); 
00067          recocalojet<=(recocalojets->begin()+1); recocalojet++) {
00068       
00069       if(countjets==0) {
00070         etjet1 = recocalojet->et();
00071         etajet1 = recocalojet->eta();
00072       }
00073       if(countjets==1) {
00074         etjet2 = recocalojet->et();
00075         etajet2 = recocalojet->eta();
00076       }
00077       countjets++;
00078     }
00079 
00080   if(etjet1>minEt_ && etjet2>minEt_ && (etajet1*etajet2)<0 && fabs(etajet1)>minEta_ && fabs(etajet2)>minEta_){
00081       for (reco::CaloJetCollection::const_iterator recocalojet = recocalojets->begin(); 
00082            recocalojet<=(recocalojets->begin()+1); recocalojet++) {
00083         reco::CaloJetRef ref(reco::CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet)));
00084         filterobject->addObject(TriggerJet,ref);
00085         n++;
00086       }
00087     }
00088     
00089   } // events with two or more jets
00090   
00091   
00092   
00093   // filter decision
00094   bool accept(n>=2);
00095   
00096   // put filter object into the Event
00097   iEvent.put(filterobject);
00098   
00099   return accept;
00100 }