CMS 3D CMS Logo

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

Go to the documentation of this file.
00001 
00008 #include "HLTrigger/JetMET/interface/HLTDiJetAveFilter.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 "DataFormats/Math/interface/deltaPhi.h"
00022 
00023 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
00024 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
00025 #include "FWCore/Utilities/interface/InputTag.h"
00026 
00027 //
00028 // constructors and destructor
00029 //
00030 HLTDiJetAveFilter::HLTDiJetAveFilter(const edm::ParameterSet& iConfig)
00031 {
00032    inputJetTag_ = iConfig.getParameter< edm::InputTag > ("inputJetTag");
00033    saveTag_     = iConfig.getUntrackedParameter<bool>("saveTag");
00034    minPtAve_    = iConfig.getParameter<double> ("minPtAve"); 
00035    minPtJet3_   = iConfig.getParameter<double> ("minPtJet3"); 
00036    minDphi_     = iConfig.getParameter<double> ("minDphi"); 
00037    //register your products
00038    produces<trigger::TriggerFilterObjectWithRefs>();
00039 }
00040 
00041 HLTDiJetAveFilter::~HLTDiJetAveFilter(){}
00042 
00043 void
00044 HLTDiJetAveFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
00045   edm::ParameterSetDescription desc;
00046   desc.add<edm::InputTag>("inputJetTag",edm::InputTag("hltIterativeCone5CaloJets"));
00047   desc.addUntracked<bool>("saveTag",false);
00048   desc.add<double>("minPtAve",100.0);
00049   desc.add<double>("minPtJet3",99999.0);
00050   desc.add<double>("minDphi",-1.0);
00051   descriptions.add("hltDiJetAveFilter",desc);
00052 }
00053 
00054 // ------------ method called to produce the data  ------------
00055 bool
00056 HLTDiJetAveFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00057 {
00058   using namespace std;
00059   using namespace edm;
00060   using namespace reco;
00061   using namespace trigger;
00062   // The filter object
00063   auto_ptr<trigger::TriggerFilterObjectWithRefs> 
00064     filterobject (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00065   if (saveTag_) filterobject->addCollectionTag(inputJetTag_);
00066 
00067   Handle<CaloJetCollection> recocalojets;
00068   iEvent.getByLabel(inputJetTag_,recocalojets);
00069 
00070   // look at all candidates,  check cuts and add to filter object
00071   int n(0);
00072 
00073   if(recocalojets->size() > 1){
00074     // events with two or more jets
00075 
00076     double ptjet1=0., ptjet2=0.,ptjet3=0.;
00077     double phijet1=0.,phijet2=0;
00078     int countjets =0;
00079 
00080     int nmax=1;
00081     if (recocalojets->size() > 2) nmax=2;
00082 
00083     CaloJetRef JetRef1,JetRef2;
00084 
00085     for (CaloJetCollection::const_iterator recocalojet = recocalojets->begin(); 
00086          recocalojet<=(recocalojets->begin()+nmax); ++recocalojet) {
00087       
00088       if(countjets==0) {
00089         ptjet1 = recocalojet->pt();
00090         phijet1 = recocalojet->phi();
00091         JetRef1 = CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet));
00092       }
00093       if(countjets==1) {
00094         ptjet2 = recocalojet->pt();
00095         phijet2 = recocalojet->phi();
00096         JetRef2 = CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet));
00097       }
00098       if(countjets==2) {
00099         ptjet3 = recocalojet->pt();
00100       }
00101       ++countjets;
00102     }
00103     
00104     double PtAve=(ptjet1 + ptjet2) / 2.;
00105     double Dphi = fabs(deltaPhi(phijet1,phijet2));
00106 
00107     if( PtAve>minPtAve_  && ptjet3<minPtJet3_ && Dphi>minDphi_){
00108       filterobject->addObject(TriggerJet,JetRef1);
00109       filterobject->addObject(TriggerJet,JetRef2);
00110       ++n;
00111     }
00112     
00113   } // events with two or more jets
00114   
00115   
00116   
00117   // filter decision
00118   bool accept(n>=1);
00119   
00120   // put filter object into the Event
00121   iEvent.put(filterobject);
00122   
00123   return accept;
00124 }