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
00018
00019
00020
00021
00022
00023
00024
00025
00026 DQMStore* store = &*edm::Service<DQMStore>();
00027
00028 if(store)
00029 {
00030
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
00056
00057
00058 void
00059 HLTTauValidation::endJob()
00060 {
00061
00062
00063
00064
00065
00066
00067
00068
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
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
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
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
00132
00133
00134 Handle<TriggerEventWithRefs> trigEv;
00135 if(iEvent.getByLabel(triggerEventObject_,trigEv))
00136 {
00137
00138 if (trigEv.isValid())
00139 {
00140
00141
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
00152 if(leptons.size()>=nTriggeredLeptons_[i+1]&&taus.size()>=nTriggeredTaus_[i+1])
00153 {
00154 accepted_events->Fill(i+0.5);
00155
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 }