CMS 3D CMS Logo

HLTTauValidation.cc

Go to the documentation of this file.
00001 #include "HLTriggerOffline/Tau/interface/HLTTauValidation.h"
00002 #include "Math/GenVector/VectorUtil.h"
00003 
00004 HLTTauValidation::HLTTauValidation(const edm::ParameterSet& ps) : 
00005   triggerEventObject_(ps.getUntrackedParameter<edm::InputTag>("triggerEventObject")),
00006   refCollection_(ps.getUntrackedParameter<edm::InputTag>("refTauCollection")),
00007   refLeptonCollection_(ps.getUntrackedParameter<edm::InputTag>("refLeptonCollection")),
00008   triggerTag_(ps.getUntrackedParameter<std::string>("DQMFolder","DoubleTau")),
00009   filter_(ps.getUntrackedParameter<std::vector<edm::InputTag> >("Filter")),
00010   TauType_(ps.getUntrackedParameter<std::vector<int> >("TauType")),
00011   LeptonType_(ps.getUntrackedParameter<std::vector<int> >("LeptonType")),
00012   nTriggeredTaus_(ps.getUntrackedParameter<std::vector<unsigned> >("NTriggeredTaus")),
00013   nTriggeredLeptons_(ps.getUntrackedParameter<std::vector<unsigned> >("NTriggeredLeptons")),
00014   doRefAnalysis_(ps.getUntrackedParameter<bool>("DoReferenceAnalysis",false)),
00015   matchDeltaR_(ps.getUntrackedParameter<std::vector<double> >("MatchDeltaR"))
00016 {
00017   //initialize 
00018 
00019   //  for(size_t k=0;k<filter_.size();++k)
00020   //   NEventsPassed.push_back(0);
00021 
00022   //  for(size_t k=0;k<=filter_.size();++k)
00023   //    NEventsPassedMatched.push_back(0);
00024 
00025   //Declare DQM Store
00026   DQMStore* store = &*edm::Service<DQMStore>();
00027 
00028   if(store)
00029     {
00030       //Create the histograms
00031       store->setCurrentFolder(triggerTag_);
00032       accepted_events = store->book1D("Triggers","Accepted Events per path",filter_.size(),0,filter_.size());
00033       for(size_t k=0;k<filter_.size();++k)
00034         accepted_events->setBinLabel(k+1,filter_[k].label(),1);
00035 
00036       if(doRefAnalysis_)
00037         {
00038           accepted_events_matched = store->book1D("MatchedTriggers","Accepted +Matched Events per path",filter_.size()+1,0,filter_.size()+1);
00039           accepted_events_matched->setBinLabel(1,"RefEvents",1);
00040           for(size_t k=0;k<filter_.size();++k)
00041             accepted_events_matched->setBinLabel(k+2,filter_[k].label(),1);
00042         }
00043 
00044 
00045 
00046     }
00047 
00048 }
00049 
00050 HLTTauValidation::~HLTTauValidation()
00051 {
00052 }
00053 
00054 //
00055 // member functions
00056 //
00057 
00058 void
00059 HLTTauValidation::endJob()
00060 {
00061   //Fill histograms
00062   //  for(size_t i=0;i<filter_.size();++i)
00063   //     accepted_events->setBinContent(i+1,NEventsPassed[i]);
00064 
00065 
00066   //For the matched events the zeroth bin is used to put the reference events
00067   // for(size_t i=0;i<filter_.size();++i)
00068   //    accepted_events_matched->setBinContent(i+1,NEventsPassedMatched[i+1]);
00069 }
00070 
00071 
00072 void
00073 HLTTauValidation::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00074 {
00075   using namespace std;
00076   using namespace edm;
00077   using namespace reco;
00078   using namespace l1extra;
00079   using namespace trigger;
00080 
00081   //Look at the reference collection (i.e MC)
00082   Handle<LVColl> refC;
00083   Handle<LVColl> refCL;
00084 
00085   bool tau_ok=true;
00086   bool lepton_ok=true;
00087 
00088   bool isGoodReferenceEvent=false;
00089 
00090   if(doRefAnalysis_)
00091     {
00092       //Tau reference
00093       if(iEvent.getByLabel(refCollection_,refC))
00094         if(refC->size()<nTriggeredTaus_[0])
00095           {
00096             tau_ok = false;
00097           }
00098         else
00099           {
00100             double et=0.;
00101             double eta=0.;
00102             
00103             for(size_t j = 0;j<refC->size();++j)
00104               {
00105                 if((*refC)[j].Et()>et)
00106                   {
00107                     et=(*refC)[j].Et();
00108                     eta = (*refC)[j].Eta();
00109                   }
00110                 
00111               }
00112          
00113         }
00114   
00115       //lepton reference
00116       if(iEvent.getByLabel(refLeptonCollection_,refCL))
00117         if(refCL->size()<nTriggeredLeptons_[0])
00118           {
00119             lepton_ok = false;
00120           }
00121     
00122       
00123       if(lepton_ok&&tau_ok)
00124         {
00125           accepted_events_matched->Fill(0.5);
00126           isGoodReferenceEvent=true;
00127         }
00128     }
00129 
00130 
00131   //get The triggerEvent
00132 
00133 
00134   Handle<TriggerEventWithRefs> trigEv;
00135   if(iEvent.getByLabel(triggerEventObject_,trigEv))
00136     {
00137 
00138       if (trigEv.isValid()) 
00139         {
00140 
00141           //Loop through the filters
00142           for(size_t i=0;i<filter_.size();++i)
00143             {
00144         
00145               size_t ID =trigEv->filterIndex(filter_[i]);
00146               if(ID!=trigEv->size())
00147                 {
00148                       LVColl leptons = getFilterCollection(ID,LeptonType_[i],*trigEv);
00149                       LVColl taus = getFilterCollection(ID,TauType_[i],*trigEv);
00150 
00151                       //Fired
00152                       if(leptons.size()>=nTriggeredLeptons_[i+1]&&taus.size()>=nTriggeredTaus_[i+1])
00153                         {
00154                           accepted_events->Fill(i+0.5);
00155                           //Now do the matching only though if we have a good reference event
00156                           if(doRefAnalysis_)
00157                           if(isGoodReferenceEvent)
00158                             {
00159                               
00160                               size_t nT=0;
00161                                 for(size_t j=0;j<taus.size();++j)
00162                                   {
00163                                     if(match(taus[j],*refC,matchDeltaR_[i]))
00164                                       nT++;
00165 
00166                                   }
00167                               size_t nL=0;
00168                                 for(size_t j=0;j<leptons.size();++j)
00169                                   {
00170                                     if(match(leptons[j],*refCL,matchDeltaR_[i]))
00171                                       nL++;
00172 
00173                                   }
00174                                 if(nT>=nTriggeredTaus_[i+1]&&nL>=nTriggeredLeptons_[i+1])
00175                                   accepted_events_matched->Fill(i+1.5);
00176                         }
00177                     }
00178                 }
00179             }
00180         }
00181     }
00182 }
00183 
00184 
00185 
00186 
00187 
00188 bool 
00189 HLTTauValidation::match(const LV& jet,const LVColl& McInfo,double dr)
00190 {
00191  
00192   bool matched=false;
00193 
00194   if(McInfo.size()>0)
00195     for(std::vector<LV>::const_iterator it = McInfo.begin();it!=McInfo.end();++it)
00196       {
00197         double delta = ROOT::Math::VectorUtil::DeltaR(jet,*it);
00198         if(delta<dr)
00199           {
00200             matched=true;
00201           }
00202       }
00203 
00204   return matched;
00205 }
00206 
00207 
00208 
00209 LVColl HLTTauValidation::getFilterCollection(size_t filterID,int id,const trigger::TriggerEventWithRefs& trigEv)
00210 {
00211   using namespace trigger;
00212 
00213   LVColl out;
00214 
00215 
00216           if(id==trigger::TriggerL1IsoEG ||trigger::TriggerL1NoIsoEG) 
00217             {
00218               VRl1em obj;
00219               trigEv.getObjects(filterID,id,obj);
00220               for(size_t i=0;i<obj.size();++i)
00221                     out.push_back(obj[i]->p4());
00222             }
00223 
00224           if(id==trigger::TriggerL1Mu) 
00225             {
00226               VRl1muon obj;
00227               trigEv.getObjects(filterID,id,obj);
00228               for(size_t i=0;i<obj.size();++i)
00229                     out.push_back(obj[i]->p4());
00230             }
00231 
00232 
00233           if(id==trigger::TriggerMuon) 
00234             {
00235               VRmuon obj;
00236               trigEv.getObjects(filterID,id,obj);
00237               for(size_t i=0;i<obj.size();++i)
00238                     out.push_back(obj[i]->p4());
00239             }
00240 
00241           if(id==trigger::TriggerElectron) 
00242             {
00243               VRelectron obj;
00244               trigEv.getObjects(filterID,id,obj);
00245               for(size_t i=0;i<obj.size();++i)
00246                     out.push_back(obj[i]->p4());
00247             }
00248 
00249           if(id==trigger::TriggerL1TauJet) 
00250             {
00251               VRl1jet obj;
00252               trigEv.getObjects(filterID,id,obj);
00253               for(size_t i=0;i<obj.size();++i)
00254                     out.push_back(obj[i]->p4());
00255             }
00256 
00257           if(id==trigger::TriggerTau) 
00258             {
00259               VRjet obj;
00260               trigEv.getObjects(filterID,id,obj);
00261               for(size_t i=0;i<obj.size();++i)
00262                     out.push_back(obj[i]->p4());
00263             }
00264 
00265           return out;
00266 }

Generated on Tue Jun 9 17:38:06 2009 for CMSSW by  doxygen 1.5.4