CMS 3D CMS Logo

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

Go to the documentation of this file.
00001 
00008 #include "HLTrigger/JetMET/interface/HLTForwardBackwardJetsFilter.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/JetReco/interface/CaloJetCollection.h"
00017 
00018 #include "FWCore/Framework/interface/ESHandle.h"
00019 #include "FWCore/Framework/interface/EventSetup.h"
00020 
00021 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
00022 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
00023 #include "FWCore/Utilities/interface/InputTag.h"
00024 
00025 //
00026 // constructors and destructor
00027 //
00028 HLTForwardBackwardJetsFilter::HLTForwardBackwardJetsFilter(const edm::ParameterSet& iConfig)
00029 {
00030    inputTag_    = iConfig.getParameter< edm::InputTag > ("inputTag");
00031    saveTag_     = iConfig.getUntrackedParameter<bool>("saveTag");
00032    minPt_       = iConfig.getParameter<double> ("minPt");
00033    minEta_ = iConfig.getParameter<double> ("minEta"); 
00034    maxEta_ = iConfig.getParameter<double> ("maxEta"); 
00035 
00036    //register your products
00037    produces<trigger::TriggerFilterObjectWithRefs>();
00038 }
00039 
00040 HLTForwardBackwardJetsFilter::~HLTForwardBackwardJetsFilter(){}
00041 
00042 void
00043 HLTForwardBackwardJetsFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
00044   edm::ParameterSetDescription desc;
00045   desc.add<edm::InputTag>("inputTag",edm::InputTag("hltIterativeCone5CaloJetsRegional"));
00046   desc.addUntracked<bool>("saveTag",false);
00047   desc.add<double>("minPt",15.0);
00048   desc.add<double>("minEta",3.0);
00049   desc.add<double>("maxEta",5.1);
00050   descriptions.add("hltForwardBackwardJetsFilter",desc);
00051 }
00052 
00053 // ------------ method called to produce the data  ------------
00054 bool
00055 HLTForwardBackwardJetsFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00056 {
00057   using namespace trigger;
00058   // The filter object
00059   std::auto_ptr<trigger::TriggerFilterObjectWithRefs> 
00060     filterobject (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00061   if (saveTag_) filterobject->addCollectionTag(inputTag_);
00062 
00063   edm::Handle<reco::CaloJetCollection> recocalojets;
00064   iEvent.getByLabel(inputTag_,recocalojets);
00065 
00066   // look at all candidates,  check cuts and add to filter object
00067   int nplusjets(0);
00068   int nminusjets(0);
00069 
00070   if(recocalojets->size() > 1){
00071     // events with two or more jets
00072 
00073     // look for jets satifying pt and eta cuts; first on the plus side, then the minus side
00074     for (reco::CaloJetCollection::const_iterator recocalojet = recocalojets->begin(); 
00075          recocalojet!=(recocalojets->end()); recocalojet++) {
00076 
00077       float ptjet=recocalojet->pt();
00078       float etajet=recocalojet->eta();
00079       if( ptjet > minPt_ ){
00080         if ( etajet > minEta_ && etajet < maxEta_ ){
00081           nplusjets++;
00082           reco::CaloJetRef ref(reco::CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet)));
00083           filterobject->addObject(TriggerJet,ref);
00084         }
00085       }
00086     }
00087     if (nplusjets > 0) {   
00088       for (reco::CaloJetCollection::const_iterator recocalojet = recocalojets->begin(); 
00089            recocalojet!=(recocalojets->end()); recocalojet++) {
00090 
00091         float ptjet=recocalojet->pt();
00092         float etajet=recocalojet->eta();
00093 
00094         if( ptjet > minPt_ ){
00095           if ( etajet < -minEta_ && etajet > -maxEta_ ){
00096             nminusjets++;
00097             reco::CaloJetRef ref(reco::CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet)));
00098             filterobject->addObject(TriggerJet,ref);
00099           }
00100         }
00101       }
00102     }
00103   } // events with two or more jets
00104   
00105   
00106   
00107   // filter decision
00108   bool accept(nplusjets>0 && nminusjets>0);  
00109   // put filter object into the Event
00110   iEvent.put(filterobject);
00111   
00112   return accept;
00113 }