00001 #include "DQM/HLTEvF/interface/HLTTauDQMCaloPlotter.h"
00002 #include "Math/GenVector/VectorUtil.h"
00003 #include <iostream>
00004 #include <iomanip>
00005 #include <fstream>
00006
00007 HLTTauDQMCaloPlotter::HLTTauDQMCaloPlotter(const edm::ParameterSet& iConfig,int etbins,int etabins,int phibins,double maxpt,bool ref,double dr):
00008 l2preJets_(iConfig.getParameter<std::vector<edm::InputTag> >("L2RegionalJets")),
00009 l2TauInfoAssoc_(iConfig.getParameter<edm::InputTag>("L2InfoAssociationInput")),
00010 doRef_(ref),
00011 matchDeltaRMC_(dr),
00012 triggerTag_(iConfig.getParameter<std::string>("DQMFolder")),
00013 l2Isolated_(iConfig.getParameter<edm::InputTag>("L2IsolatedJets")),
00014 EtMax_(maxpt),
00015 NPtBins_(etbins),
00016 NEtaBins_(etabins),
00017 NPhiBins_(phibins)
00018 {
00019 store = &*edm::Service<DQMStore>();
00020
00021 if(store)
00022 {
00023
00024
00025 store->setCurrentFolder(triggerTag_);
00026
00027 preJetEt= store->book1D("L2PreTauEt","L2 regional #tau E_{t}",NPtBins_,0,EtMax_);
00028 preJetEt->getTH1F()->GetXaxis()->SetTitle("L2 regional Jet E_{T}");
00029 preJetEt->getTH1F()->GetYaxis()->SetTitle("entries");
00030
00031 preJetEta= store->book1D("L2PreTauEta","L2 regional #tau #eta",NEtaBins_,-2.5,2.5);
00032 preJetEta->getTH1F()->GetXaxis()->SetTitle("L2 regional Jet #eta");
00033 preJetEta->getTH1F()->GetYaxis()->SetTitle("entries");
00034
00035 preJetPhi= store->book1D("L2PreTauPhi","L2 regional #tau #phi",NPhiBins_,-3.2,3.2);
00036 preJetPhi->getTH1F()->GetXaxis()->SetTitle("L2 regional Jet #phi");
00037 preJetPhi->getTH1F()->GetYaxis()->SetTitle("entries");
00038
00039 jetEt= store->book1D("L2TauEt","L2 #tau E_{t}",NPtBins_,0,EtMax_);
00040 jetEt->getTH1F()->GetXaxis()->SetTitle("L2 selected Jet E_{T}");
00041 jetEt->getTH1F()->GetYaxis()->SetTitle("entries");
00042
00043 jetEta= store->book1D("L2TauEta","L2 #tau #eta",NEtaBins_,-2.5,2.5);
00044 jetEta->getTH1F()->GetXaxis()->SetTitle("L2 selected Jet #eta");
00045 jetEta->getTH1F()->GetYaxis()->SetTitle("entries");
00046
00047 jetPhi= store->book1D("L2TauPhi","L2 #tau #phi",NPhiBins_,-3.2,3.2);
00048 jetPhi->getTH1F()->GetXaxis()->SetTitle("L2 selected Jet #phi");
00049 jetPhi->getTH1F()->GetYaxis()->SetTitle("entries");
00050
00051 jetEtRes= store->book1D("L2TauEtResol","L2 #tau E_{t} resolution",40,-2,2);
00052 jetEtRes->getTH1F()->GetXaxis()->SetTitle("L2 selected Jet #phi");
00053 jetEtRes->getTH1F()->GetYaxis()->SetTitle("entries");
00054
00055 isoJetEt= store->book1D("L2IsoTauEt","L2 isolated #tau E_{t}",NPtBins_,0,EtMax_);
00056 isoJetEt->getTH1F()->GetXaxis()->SetTitle("L2 isolated Jet E_{T}");
00057 isoJetEt->getTH1F()->GetYaxis()->SetTitle("entries");
00058
00059 isoJetEta= store->book1D("L2IsoTauEta","L2 isolated #tau #eta",NEtaBins_,-2.5,2.5);
00060 isoJetEta->getTH1F()->GetXaxis()->SetTitle("L2 isolated Jet #eta");
00061 isoJetEta->getTH1F()->GetYaxis()->SetTitle("entries");
00062
00063 isoJetPhi= store->book1D("L2IsoTauPhi","L2 isolated #tau #phi",NPhiBins_,-3.2,3.2);
00064 isoJetPhi->getTH1F()->GetXaxis()->SetTitle("L2 isolated Jet #phi");
00065 isoJetPhi->getTH1F()->GetYaxis()->SetTitle("entries");
00066
00067 ecalIsolEt=store->book1D("L2EcalIsolation","ECAL Isolation",40,0,20);
00068 ecalIsolEt->getTH1F()->GetXaxis()->SetTitle("L2 ECAL isolation E_{T}");
00069 ecalIsolEt->getTH1F()->GetYaxis()->SetTitle("entries");
00070
00071 hcalIsolEt=store->book1D("L2HcalIsolation","HCAL Isolation",40,0,20);
00072 hcalIsolEt->getTH1F()->GetXaxis()->SetTitle("L2 HCAL isolation E_{T}");
00073 hcalIsolEt->getTH1F()->GetYaxis()->SetTitle("entries");
00074
00075 seedHcalEt=store->book1D("L2HighestHCALCluster","Highest HCAL Cluster",40,0,80);
00076 seedHcalEt->getTH1F()->GetXaxis()->SetTitle("HCAL seed E_{T}");
00077 seedHcalEt->getTH1F()->GetYaxis()->SetTitle("entries");
00078
00079 seedEcalEt=store->book1D("L2HighestECALCluster","Highest ECAL Cluster",25,0,50);
00080 seedEcalEt->getTH1F()->GetXaxis()->SetTitle("ECAL seed E_{T}");
00081 seedEcalEt->getTH1F()->GetYaxis()->SetTitle("entries");
00082
00083 nEcalClusters=store->book1D("L2NEcalClusters","Nucmber of ECAL Clusters",20,0,20);
00084 nEcalClusters->getTH1F()->GetXaxis()->SetTitle("n. of ECAL Clusters");
00085 nEcalClusters->getTH1F()->GetYaxis()->SetTitle("entries");
00086
00087 ecalClusterEtaRMS=store->book1D("L2EcalEtaRMS","ECAL Cluster #eta RMS",15,0,0.05);
00088 ecalClusterEtaRMS->getTH1F()->GetXaxis()->SetTitle("ECAL cluster #eta RMS");
00089 ecalClusterEtaRMS->getTH1F()->GetYaxis()->SetTitle("entries");
00090
00091 ecalClusterPhiRMS=store->book1D("L2EcalPhiRMS","ECAL Cluster #phi RMS",30,0,0.1);
00092 ecalClusterPhiRMS->getTH1F()->GetXaxis()->SetTitle("ECAL cluster #phi RMS");
00093 ecalClusterPhiRMS->getTH1F()->GetYaxis()->SetTitle("entries");
00094
00095
00096 ecalClusterDeltaRRMS=store->book1D("L2EcalDeltaRRMS","ECAL Cluster #DeltaR RMS",30,0,0.1);
00097 ecalClusterDeltaRRMS->getTH1F()->GetXaxis()->SetTitle("ECAL cluster #DeltaR RMS");
00098 ecalClusterDeltaRRMS->getTH1F()->GetYaxis()->SetTitle("entries");
00099
00100 nHcalClusters=store->book1D("L2NHcalClusters","Nucmber of HCAL Clusters",20,0,20);
00101 nHcalClusters->getTH1F()->GetXaxis()->SetTitle("n. of ECAL Clusters");
00102 nHcalClusters->getTH1F()->GetYaxis()->SetTitle("entries");
00103
00104 hcalClusterEtaRMS=store->book1D("L2HcalEtaRMS","HCAL Cluster #eta RMS",15,0,0.05);
00105 hcalClusterEtaRMS->getTH1F()->GetXaxis()->SetTitle("HCAL cluster #eta RMS");
00106 hcalClusterEtaRMS->getTH1F()->GetYaxis()->SetTitle("entries");
00107
00108 hcalClusterPhiRMS=store->book1D("L2HcalPhiRMS","HCAL Cluster #phi RMS",30,0,0.1);
00109 hcalClusterPhiRMS->getTH1F()->GetXaxis()->SetTitle("HCAL cluster #phi RMS");
00110 hcalClusterPhiRMS->getTH1F()->GetYaxis()->SetTitle("entries");
00111
00112 hcalClusterDeltaRRMS=store->book1D("L2HcalDeltaRRMS","HCAL Cluster #DeltaR RMS",30,0,0.1);
00113 hcalClusterDeltaRRMS->getTH1F()->GetXaxis()->SetTitle("HCAL cluster #DeltaR RMS");
00114 hcalClusterDeltaRRMS->getTH1F()->GetYaxis()->SetTitle("entries");
00115
00116
00117 store->setCurrentFolder(triggerTag_+"/EfficiencyHelpers");
00118
00119 recoEtEffNum=store->book1D("L2RecoTauEtEffNum","Efficiency vs E_{t}(Numerator)",NPtBins_,0,EtMax_);
00120 recoEtEffNum->getTH1F()->Sumw2();
00121
00122 recoEtEffDenom=store->book1D("L2RecoTauEtEffDenom","Efficiency vs E_{t}(Denominator)",NPtBins_,0,EtMax_);
00123 recoEtEffDenom->getTH1F()->Sumw2();
00124
00125 recoEtaEffNum=store->book1D("L2RecoTauEtaEffNum","Efficiency vs #eta (Numerator)",NEtaBins_,-2.5,2.5);
00126 recoEtaEffNum->getTH1F()->Sumw2();
00127
00128 recoEtaEffDenom=store->book1D("L2RecoTauEtaEffDenom","Efficiency vs #eta(Denominator)",NEtaBins_,-2.5,2.5);
00129 recoEtaEffDenom->getTH1F()->Sumw2();
00130
00131 recoPhiEffNum=store->book1D("L2RecoTauPhiEffNum","Efficiency vs #phi (Numerator)",NPhiBins_,-3.2,3.2);
00132 recoPhiEffNum->getTH1F()->Sumw2();
00133
00134 recoPhiEffDenom=store->book1D("L2RecoTauPhiEffDenom","Efficiency vs #phi(Denominator)",NPhiBins_,-3.2,3.2);
00135 recoPhiEffDenom->getTH1F()->Sumw2();
00136
00137 isoEtEffNum=store->book1D("L2IsoTauEtEffNum","Efficiency vs E_{t}(Numerator)",NPtBins_,0,EtMax_);
00138 isoEtEffNum->getTH1F()->Sumw2();
00139
00140 isoEtEffDenom=store->book1D("L2IsoTauEtEffDenom","Efficiency vs E_{t}(Denominator)",NPtBins_,0,EtMax_);
00141 isoEtEffDenom->getTH1F()->Sumw2();
00142
00143 isoEtaEffNum=store->book1D("L2IsoTauEtaEffNum","Efficiency vs #eta (Numerator)",NEtaBins_,-2.5,2.5);
00144 isoEtaEffNum->getTH1F()->Sumw2();
00145
00146 isoEtaEffDenom=store->book1D("L2IsoTauEtaEffDenom","Efficiency vs #eta(Denominator)",NEtaBins_,-2.5,2.5);
00147 isoEtaEffDenom->getTH1F()->Sumw2();
00148
00149 isoPhiEffNum=store->book1D("L2IsoTauPhiEffNum","Efficiency vs #phi (Numerator)",NPhiBins_,-3.2,3.2);
00150 isoPhiEffNum->getTH1F()->Sumw2();
00151
00152 isoPhiEffDenom=store->book1D("L2IsoTauPhiEffDenom","Efficiency vs #phi(Denominator)",NPhiBins_,-3.2,3.2);
00153 isoPhiEffDenom->getTH1F()->Sumw2();
00154 }
00155
00156 }
00157
00158 HLTTauDQMCaloPlotter::~HLTTauDQMCaloPlotter()
00159 {
00160 }
00161
00162 void
00163 HLTTauDQMCaloPlotter::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup,const LVColl& McInfo)
00164 {
00165 edm::Handle<reco::L2TauInfoAssociation> l2TauInfoAssoc;
00166 edm::Handle<reco::CaloJetCollection> l2Isolated;
00167 edm::Handle<reco::CaloJetCollection> l2Regional;
00168 reco::CaloJetCollection l2RegionalJets;
00169
00170
00171
00172
00173 reco::CaloJetCollection l2MergedJets;
00174
00175 for(unsigned int j=0;j<l2preJets_.size();++j) {
00176
00177 bool gotPreJets= iEvent.getByLabel(l2preJets_[j],l2Regional) &&l2Regional.isValid();
00178
00179 if(gotPreJets)
00180 if((!l2Regional.failedToGet())) {
00181 for(unsigned int i=0;i<l2Regional->size();++i)
00182 l2MergedJets.push_back(l2Regional->at(i));
00183
00184 }
00185 }
00186
00187
00188 SorterByPt sorter;
00189 std::sort(l2MergedJets.begin(),l2MergedJets.end(),sorter);
00190
00191
00192 reco::CaloJetCollection l2CleanJets;
00193 while(l2MergedJets.size()>0) {
00194 l2CleanJets.push_back(l2MergedJets.at(0));
00195 reco::CaloJetCollection tmp;
00196 for(unsigned int i=1 ;i<l2MergedJets.size();++i) {
00197 double DR = ROOT::Math::VectorUtil::DeltaR(l2MergedJets.at(0).p4(),l2MergedJets.at(i).p4());
00198 if(DR>0.1)
00199 tmp.push_back(l2MergedJets.at(i));
00200 }
00201
00202 l2MergedJets.swap(tmp);
00203 tmp.clear();
00204 }
00205
00206
00207
00208
00209
00210 if(doRef_) {
00211 for(unsigned int i=0;i<McInfo.size();++i) {
00212 std::pair<bool,reco::CaloJet> m = inverseMatch(McInfo.at(i),l2CleanJets);
00213 if(m.first) {
00214 preJetEt->Fill(m.second.pt());
00215 preJetEta->Fill(m.second.eta());
00216 preJetPhi->Fill(m.second.phi());
00217 recoEtEffDenom->Fill(McInfo.at(i).pt());
00218 recoEtaEffDenom->Fill(McInfo.at(i).eta());
00219 recoPhiEffDenom->Fill(McInfo.at(i).phi());
00220 l2RegionalJets.push_back(m.second);
00221 }
00222 }
00223 }
00224 else {
00225 for(unsigned int i=0;i<l2CleanJets.size();++i) {
00226 reco::CaloJet jet = l2CleanJets.at(i);
00227 preJetEt->Fill(jet.pt());
00228 preJetEta->Fill(jet.eta());
00229 preJetPhi->Fill(jet.phi());
00230 recoEtEffDenom->Fill(jet.pt());
00231 recoEtaEffDenom->Fill(jet.eta());
00232 recoPhiEffDenom->Fill(jet.phi());
00233 l2RegionalJets.push_back(jet);
00234 }
00235 }
00236
00237
00238
00239
00240
00241 bool gotL2=iEvent.getByLabel(l2TauInfoAssoc_,l2TauInfoAssoc) && l2TauInfoAssoc.isValid();
00242
00243
00244
00245 if(gotL2) {
00246
00247 if(l2TauInfoAssoc->size()>0)
00248 for(reco::L2TauInfoAssociation::const_iterator p = l2TauInfoAssoc->begin();p!=l2TauInfoAssoc->end();++p)
00249 {
00250
00251 const reco::L2TauIsolationInfo l2info = p->val;
00252
00253
00254 const reco::Jet& jet =*(p->key);
00255
00256 std::pair<bool,LV> m =match(jet,McInfo);
00257
00258 if((doRef_&&m.first)||(!doRef_))
00259 {
00260 ecalIsolEt->Fill(l2info.ecalIsolEt());
00261 hcalIsolEt->Fill(l2info.hcalIsolEt());
00262 seedEcalEt->Fill(l2info.seedEcalHitEt());
00263 seedHcalEt->Fill(l2info.seedHcalHitEt());
00264
00265 nEcalClusters->Fill(l2info.nEcalHits());
00266 ecalClusterEtaRMS->Fill(l2info.ecalClusterShape()[0]);
00267 ecalClusterPhiRMS->Fill(l2info.ecalClusterShape()[1]);
00268 ecalClusterDeltaRRMS->Fill(l2info.ecalClusterShape()[2]);
00269
00270 nHcalClusters->Fill(l2info.nHcalHits());
00271 hcalClusterEtaRMS->Fill(l2info.hcalClusterShape()[0]);
00272 hcalClusterPhiRMS->Fill(l2info.hcalClusterShape()[1]);
00273 hcalClusterDeltaRRMS->Fill(l2info.hcalClusterShape()[2]);
00274
00275 jetEt->Fill(jet.et());
00276 jetEta->Fill(jet.eta());
00277 jetPhi->Fill(jet.phi());
00278
00279 LV refLV;
00280 if(doRef_)
00281 refLV = m.second;
00282 else
00283 refLV = jet.p4();
00284
00285 if(doRef_)
00286 jetEtRes->Fill((jet.pt()-refLV.pt())/refLV.pt());
00287
00288 if(matchJet(jet,l2RegionalJets))
00289 {
00290 recoEtEffNum->Fill(refLV.pt());
00291 recoEtaEffNum->Fill(refLV.eta());
00292 recoPhiEffNum->Fill(refLV.phi());
00293 }
00294
00295 isoEtEffDenom->Fill(refLV.pt());
00296 isoEtaEffDenom->Fill(refLV.eta());
00297 isoPhiEffDenom->Fill(refLV.phi());
00298
00299
00300 bool gotIsoL2=iEvent.getByLabel(l2Isolated_,l2Isolated) &&l2Isolated.isValid();
00301
00302
00303
00304
00305 if(gotIsoL2)
00306 if(l2Isolated.isValid());
00307 {
00308 if(matchJet(jet,*l2Isolated))
00309 {
00310 isoJetEt->Fill(jet.et());
00311 isoJetEta->Fill(jet.eta());
00312 isoJetPhi->Fill(jet.phi());
00313
00314 isoEtEffNum->Fill(refLV.pt());
00315 isoEtaEffNum->Fill(refLV.eta());
00316 isoPhiEffNum->Fill(refLV.phi());
00317 }
00318 }
00319 }
00320 }
00321
00322 }
00323
00324 }
00325
00326
00327
00328
00329 std::pair<bool,LV>
00330 HLTTauDQMCaloPlotter::match(const reco::Jet& jet,const LVColl& McInfo)
00331 {
00332
00333
00334
00335
00336 bool matched=false;
00337 LV mLV;
00338
00339 if(McInfo.size()>0)
00340 for(LVColl::const_iterator it = McInfo.begin();it!=McInfo.end();++it)
00341 {
00342 double delta = ROOT::Math::VectorUtil::DeltaR(jet.p4(),*it);
00343 if(delta<matchDeltaRMC_)
00344 {
00345 matched=true;
00346 mLV=*it;
00347 }
00348 }
00349
00350
00351 std::pair<bool,LV> p = std::make_pair(matched,mLV);
00352 return p;
00353 }
00354
00355
00356 std::pair<bool,reco::CaloJet>
00357 HLTTauDQMCaloPlotter::inverseMatch(const LV& jet,const reco::CaloJetCollection& jets)
00358 {
00359
00360
00361
00362
00363
00364 bool matched=false;
00365 reco::CaloJet mjet;
00366 double distance=100000;
00367 if(jets.size()>0)
00368 for(reco::CaloJetCollection::const_iterator it = jets.begin();it!=jets.end();++it)
00369 if(ROOT::Math::VectorUtil::DeltaR(it->p4(),jet)<matchDeltaRMC_)
00370 {
00371 matched=true;
00372 double delta=fabs(jet.pt()-it->pt());
00373 if(delta<distance)
00374 {
00375 distance=delta;
00376 mjet = *it;
00377 }
00378 }
00379
00380 std::pair<bool,reco::CaloJet> p = std::make_pair(matched,mjet);
00381 return p;
00382 }
00383
00384
00385 bool
00386 HLTTauDQMCaloPlotter::matchJet(const reco::Jet& jet,const reco::CaloJetCollection& McInfo)
00387 {
00388
00389
00390
00391 bool matched=false;
00392
00393 if(McInfo.size()>0)
00394 for(reco::CaloJetCollection::const_iterator it = McInfo.begin();it!=McInfo.end();++it)
00395 {
00396
00397
00398 if(jet.p4()==it->p4())
00399 {
00400 matched=true;
00401
00402 }
00403 }
00404 return matched;
00405 }
00406
00407
00408
00409