CMS 3D CMS Logo

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

Go to the documentation of this file.
00001 
00010 #include <string>
00011 #include "HLTrigger/JetMET/interface/HLTAcoFilter.h"
00012 
00013 #include "DataFormats/Common/interface/Handle.h"
00014 
00015 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00016 
00017 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00018 
00019 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00020 #include "DataFormats/METReco/interface/CaloMET.h"
00021 
00022 #include "FWCore/Framework/interface/ESHandle.h"
00023 #include "FWCore/Framework/interface/EventSetup.h"
00024 
00025 
00026 //
00027 // constructors and destructor
00028 //
00029 HLTAcoFilter::HLTAcoFilter(const edm::ParameterSet& iConfig)
00030 {
00031    inputJetTag_ = iConfig.getParameter< edm::InputTag > ("inputJetTag");
00032    inputMETTag_ = iConfig.getParameter< edm::InputTag > ("inputMETTag");
00033    saveTags_    = iConfig.getUntrackedParameter<bool>("saveTags",false);
00034    minDPhi_     = iConfig.getParameter<double> ("minDeltaPhi");
00035    maxDPhi_     = iConfig.getParameter<double> ("maxDeltaPhi");
00036    minEtjet1_   = iConfig.getParameter<double> ("minEtJet1"); 
00037    minEtjet2_   = iConfig.getParameter<double> ("minEtJet2"); 
00038    AcoString_   = iConfig.getParameter<std::string> ("Acoplanar");
00039 
00040    //register your products
00041    produces<trigger::TriggerFilterObjectWithRefs>();
00042 }
00043 
00044 HLTAcoFilter::~HLTAcoFilter(){}
00045 
00046 
00047 // ------------ method called to produce the data  ------------
00048 bool
00049 HLTAcoFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00050 {
00051   using namespace std;
00052   using namespace edm;
00053   using namespace reco;
00054   using namespace trigger;
00055 
00056   // The filter object
00057   auto_ptr<trigger::TriggerFilterObjectWithRefs> 
00058     filterobject (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00059   if (saveTags_) {
00060     filterobject->addCollectionTag(inputJetTag_);
00061     filterobject->addCollectionTag(inputMETTag_);
00062   }
00063 
00064   Handle<CaloJetCollection> recocalojets;
00065   iEvent.getByLabel(inputJetTag_,recocalojets);
00066   Handle<trigger::TriggerFilterObjectWithRefs> metcal;
00067   iEvent.getByLabel(inputMETTag_,metcal);
00068 
00069   // look at all candidates,  check cuts and add to filter object
00070   int n(0);
00071   int JetNum = recocalojets->size();
00072 
00073   // events with two or more jets
00074 
00075   double etjet1=0.;
00076   double etjet2=0.;
00077   double phijet1=0.;
00078   double phijet2=0.;
00079   double etmiss=0.;
00080   double phimiss=0.;
00081    
00082   VRcalomet vrefMET; 
00083   metcal->getObjects(TriggerMET,vrefMET);
00084   CaloMETRef metRef=vrefMET.at(0);
00085   etmiss  = vrefMET.at(0)->et();
00086   phimiss = vrefMET.at(0)->phi();
00087 
00088   CaloJetRef ref1,ref2;
00089 
00090   if (JetNum>0) {
00091     CaloJetCollection::const_iterator recocalojet = recocalojets->begin(); 
00092         
00093     etjet1 = recocalojet->et();
00094     phijet1 = recocalojet->phi();
00095     ref1  = CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet));
00096     
00097     if(JetNum>1) {
00098       recocalojet++;
00099       etjet2 = recocalojet->et();
00100       phijet2 = recocalojet->phi();
00101       ref2  = CaloJetRef(recocalojets,distance(recocalojets->begin(),recocalojet));
00102     }
00103     double Dphi= -1.;
00104     int JetSel = 0;
00105     
00106     if (AcoString_ == "Jet2Met") {
00107       Dphi = fabs(phimiss-phijet2);
00108       if (JetNum>=2 && etjet1>minEtjet1_  && etjet2>minEtjet2_) {JetSel=1;} 
00109     }
00110     if (AcoString_ == "Jet1Jet2") {
00111       Dphi = fabs(phijet1-phijet2);
00112       if (JetNum>=2 && etjet1>minEtjet1_  && etjet2>minEtjet2_) {JetSel=1;} 
00113     }
00114     if (AcoString_ == "Jet1Met") { 
00115       Dphi = fabs(phimiss-phijet1);
00116       if (JetNum>=1 && etjet1>minEtjet1_ ) {JetSel=1;} 
00117     }
00118     
00119       
00120     if (Dphi>M_PI) {Dphi=2.0*M_PI-Dphi;}
00121     if(JetSel>0 && Dphi>=minDPhi_ && Dphi<=maxDPhi_){
00122       
00123       if (AcoString_=="Jet2Met" || AcoString_=="Jet1Met")  {filterobject->addObject(TriggerMET,metRef);}
00124       if (AcoString_=="Jet1Met" || AcoString_=="Jet1Jet2") {filterobject->addObject(TriggerJet,ref1);}
00125       if (AcoString_=="Jet2Met" || AcoString_=="Jet1Jet2") {filterobject->addObject(TriggerJet,ref2);}
00126       n++;
00127     }
00128     
00129 
00130   } // at least one jet
00131   
00132     
00133   // filter decision
00134   bool accept(n>=1);
00135     
00136   // put filter object into the Event
00137   iEvent.put(filterobject);
00138     
00139   return accept;
00140 }