- Timestamp:
- Aug 26, 2016, 4:53:30 PM (8 years ago)
- Branches:
- ImprovedOutputFile, Timing, dual_readout, llp, master
- Children:
- d0f661b
- Parents:
- 14fe596
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
examples/Validation.cpp
r14fe596 r32677fb 343 343 } 344 344 } 345 346 347 template<typename T> 348 void GetPtres(std::vector<resolPlot> *histos, TClonesArray *branchReco, TClonesArray *branchParticle, int pdgID, ExRootTreeReader *treeReader) 349 { 350 Long64_t allEntries = treeReader->GetEntries(); 351 352 cout << "** Computing pt resolution of " << branchReco->GetName() << " induced by " << branchParticle->GetName() << " with PID " << pdgID << endl; 353 354 GenParticle *particle; 355 T* recoObj; 356 357 TLorentzVector recoMomentum, genMomentum, bestGenMomentum; 358 359 Float_t deltaR; 360 Float_t pt, eta; 361 Long64_t entry; 362 363 Int_t i, j, bin; 364 365 // Loop over all events 366 for(entry = 0; entry < allEntries; ++entry) 367 { 368 // Load selected branches with data from specified event 369 treeReader->ReadEntry(entry); 370 371 // Loop over all reconstructed jets in event 372 for(i = 0; i < branchReco->GetEntriesFast(); ++i) 373 { 374 recoObj = (T*) branchReco->At(i); 375 recoMomentum = recoObj->P4(); 376 377 deltaR = 999; 378 379 // Loop over all hard partons in event 380 for(j = 0; j < branchParticle->GetEntriesFast(); ++j) 381 { 382 particle = (GenParticle*) branchParticle->At(j); 383 if (particle->PID == pdgID && particle->Status == 1) 384 { 385 genMomentum = particle->P4(); 386 387 // this is simply to avoid warnings from initial state particle 388 // having infite rapidity ... 389 if(genMomentum.Px() == 0 && genMomentum.Py() == 0) continue; 390 391 // take the closest parton candidate 392 if(genMomentum.DeltaR(recoMomentum) < deltaR) 393 { 394 deltaR = genMomentum.DeltaR(recoMomentum); 395 bestGenMomentum = genMomentum; 396 } 397 } 398 } 399 400 if(deltaR < 0.3) 401 { 402 pt = bestGenMomentum.Pt(); 403 eta = TMath::Abs(bestGenMomentum.Eta()); 404 405 for (bin = 0; bin < Nbins; bin++) 406 { 407 if(pt > histos->at(bin).ptmin && pt < histos->at(bin).ptmax && eta < 2.5) 408 { 409 if (eta < 1.5) {histos->at(bin).cenResolHist->Fill(recoMomentum.Pt()/bestGenMomentum.Pt());} 410 else if (eta < 2.5) {histos->at(bin).fwdResolHist->Fill(recoMomentum.Pt()/bestGenMomentum.Pt());} 411 } 412 } 413 } 414 } 415 } 416 } 417 418 345 419 void GetJetsEres(std::vector<resolPlot> *histos, TClonesArray *branchJet, TClonesArray *branchGenJet, ExRootTreeReader *treeReader) 346 420 { … … 398 472 if(deltaR < 0.25) 399 473 { 400 pt = genJetMomentum. Pt();474 pt = genJetMomentum.E(); 401 475 eta = TMath::Abs(genJetMomentum.Eta()); 402 476 … … 405 479 if(pt > histos->at(bin).ptmin && pt < histos->at(bin).ptmax && eta < 1.5) 406 480 { 407 histos->at(bin).cenResolHist->Fill(jetMomentum. Pt()/bestGenJetMomentum.Pt());481 histos->at(bin).cenResolHist->Fill(jetMomentum.E()/bestGenJetMomentum.E()); 408 482 } 409 483 else if(pt > histos->at(bin).ptmin && pt < histos->at(bin).ptmax && eta < 2.5) 410 484 { 411 histos->at(bin).fwdResolHist->Fill(jetMomentum. Pt()/bestGenJetMomentum.Pt());485 histos->at(bin).fwdResolHist->Fill(jetMomentum.E()/bestGenJetMomentum.E()); 412 486 } 413 414 487 } 415 488 } … … 484 557 485 558 delete f1; 559 delete f2; 486 560 return make_pair (sig, sigErr); 487 561 } … … 615 689 } 616 690 617 void DrawAxis(TMultiGraph *mg, TLegend *leg, double max )691 void DrawAxis(TMultiGraph *mg, TLegend *leg, double max, int type = 0) 618 692 { 619 693 mg->SetMinimum(0.); … … 621 695 mg->GetXaxis()->SetLimits(ptrangemin,ptrangemax); 622 696 mg->GetYaxis()->SetTitle("resolution"); 623 mg->GetXaxis()->SetTitle("p_{T} [GeV]"); 697 if (type == 0) mg->GetXaxis()->SetTitle("E [GeV]"); 698 else mg->GetXaxis()->SetTitle("p_{T} [GeV]"); 624 699 mg->GetYaxis()->SetTitleSize(0.07); 625 700 mg->GetXaxis()->SetTitleSize(0.07); … … 646 721 } 647 722 648 void DrawAxis(TH1D *h, TLegend *leg, int type )723 void DrawAxis(TH1D *h, TLegend *leg, int type = 0) 649 724 { 650 725 651 726 h->GetYaxis()->SetRangeUser(0,1.0); 652 if (type == 0) h->GetXaxis()->SetTitle(" p_{T}[GeV]");653 else h->GetXaxis()->SetTitle(" #eta");727 if (type == 0) h->GetXaxis()->SetTitle("E [GeV]"); 728 else h->GetXaxis()->SetTitle("p_{T} [GeV]"); 654 729 h->GetYaxis()->SetTitle("efficiency"); 655 730 h->GetYaxis()->SetTitleSize(0.07); … … 787 862 histos_el.first->Draw("same ]["); 788 863 addHist(histos_el.first, leg_el1, 1); 789 DrawAxis(histos_eltrack.first, leg_el1, 0);864 DrawAxis(histos_eltrack.first, leg_el1,1); 790 865 791 866 leg_el1->Draw(); … … 802 877 addHist(histos_el.second, leg_el2, 1); 803 878 804 DrawAxis(histos_eltrack.second, leg_el2, 0);879 DrawAxis(histos_eltrack.second, leg_el2, 1); 805 880 leg_el2->Draw(); 806 881 … … 855 930 std::pair <TH1D*,TH1D*> histos_mutrack = GetEff<Track>(branchTrackMuon, branchParticleMuon, "muonTrack", muID, treeReaderMuon); 856 931 857 // Muon EnergyResolution932 // Muon Pt Resolution 858 933 std::vector<resolPlot> plots_mu; 859 934 HistogramsCollection(&plots_mu, TMath::Log10(ptrangemin), TMath::Log10(ptrangemax), "muons"); 860 Get Eres<Muon>(&plots_mu, branchMuon, branchParticleMuon, muID, treeReaderMuon);935 GetPtres<Muon>(&plots_mu, branchMuon, branchParticleMuon, muID, treeReaderMuon); 861 936 TGraphErrors gr_mu = EresGraph(&plots_mu, true); 862 937 TGraphErrors gr_muFwd = EresGraph(&plots_mu, false); … … 867 942 std::vector<resolPlot> plots_mutrack; 868 943 HistogramsCollection(&plots_mutrack, TMath::Log10(ptrangemin), TMath::Log10(ptrangemax), "muonsTracks"); 869 Get Eres<Track>(&plots_mutrack, branchTrackMuon, branchParticleMuon, muID, treeReaderMuon);944 GetPtres<Track>(&plots_mutrack, branchTrackMuon, branchParticleMuon, muID, treeReaderMuon); 870 945 TGraphErrors gr_mutrack = EresGraph(&plots_mutrack, true); 871 946 TGraphErrors gr_mutrackFwd = EresGraph(&plots_mutrack, false); … … 889 964 addHist(histos_mu.first, leg_mu1, 1); 890 965 891 DrawAxis(histos_mutrack.first, leg_mu1, 0);966 DrawAxis(histos_mutrack.first, leg_mu1, 1); 892 967 893 968 leg_mu1->Draw(); … … 924 999 leg_mu->Draw(); 925 1000 926 DrawAxis(mg_mu, leg_mu, 0.3 );1001 DrawAxis(mg_mu, leg_mu, 0.3, 1); 927 1002 928 1003 C_mu->cd(2); … … 938 1013 leg_muFwd->Draw(); 939 1014 940 DrawAxis(mg_muFwd, leg_muFwd, 0.3 );1015 DrawAxis(mg_muFwd, leg_muFwd, 0.3, 1); 941 1016 942 1017 C_mu1->Print("delphes_validation.pdf","pdf"); … … 990 1065 addHist(histos_ph.first, leg_ph1, 1); 991 1066 992 DrawAxis(histos_phtower.first, leg_ph1, 0);1067 DrawAxis(histos_phtower.first, leg_ph1, 1); 993 1068 leg_ph1->Draw(); 994 1069 … … 1025 1100 leg_ph->Draw(); 1026 1101 1027 DrawAxis(mg_ph, leg_ph, 0. 3);1102 DrawAxis(mg_ph, leg_ph, 0.1); 1028 1103 1029 1104 C_ph->cd(2); … … 1039 1114 leg_phFwd->Draw(); 1040 1115 1041 DrawAxis(mg_phFwd, leg_phFwd, 0. 3);1116 DrawAxis(mg_phFwd, leg_phFwd, 0.1); 1042 1117 1043 1118 C_ph1->Print("delphes_validation.pdf","pdf"); … … 1096 1171 addHist(histos_btag.first, leg_btag1, 0); 1097 1172 1098 DrawAxis(histos_btag.first, leg_btag1, 0);1173 DrawAxis(histos_btag.first, leg_btag1, 1); 1099 1174 leg_btag1->Draw(); 1100 1175 … … 1108 1183 addHist(histos_btag.second, leg_btag2, 0); 1109 1184 1110 DrawAxis(histos_btag.second, leg_btag2, 0);1185 DrawAxis(histos_btag.second, leg_btag2, 1); 1111 1186 leg_btag2->Draw(); 1112 1187 C_btag1->cd(0); … … 1124 1199 addHist(histos_tautag.first, leg_tautag1, 0); 1125 1200 1126 DrawAxis(histos_tautag.first, leg_tautag1, 0);1201 DrawAxis(histos_tautag.first, leg_tautag1, 1); 1127 1202 leg_tautag1->Draw(); 1128 1203 … … 1136 1211 addHist(histos_tautag.second, leg_tautag2, 0); 1137 1212 1138 DrawAxis(histos_tautag.second, leg_tautag2, 0);1213 DrawAxis(histos_tautag.second, leg_tautag2, 1); 1139 1214 leg_tautag2->Draw(); 1140 1215 C_tautag1->cd(0); … … 1154 1229 addGraph(mg_jet, &gr_pfjets, leg_jet, 1); 1155 1230 1156 mg_jet->Draw("A CX");1231 mg_jet->Draw("ALX"); 1157 1232 leg_jet->Draw(); 1158 1233 1159 DrawAxis(mg_jet, leg_jet, 0. 25);1234 DrawAxis(mg_jet, leg_jet, 0.5); 1160 1235 1161 1236 C_jet->cd(2); 1162 1237 TMultiGraph *mg_jetFwd = new TMultiGraph(jetResFwd,jetResFwd); 1163 1238 TLegend *leg_jetFwd = new TLegend(resLegXmin,resLegYmin,resLegXmax,resLegYmax); 1164 leg_jetFwd->SetHeader("#splitline{jets}{ |#eta| < 1.5}");1239 leg_jetFwd->SetHeader("#splitline{jets}{1.5 < |#eta| < 2.5}"); 1165 1240 leg_jetFwd->AddEntry("","",""); 1166 1241 … … 1168 1243 addGraph(mg_jetFwd, &gr_pfjetsFwd, leg_jetFwd, 1); 1169 1244 1170 mg_jetFwd->Draw("A CX");1245 mg_jetFwd->Draw("ALX"); 1171 1246 leg_jetFwd->Draw(); 1172 1247 1173 DrawAxis(mg_jetFwd, leg_jetFwd, 0. 25);1248 DrawAxis(mg_jetFwd, leg_jetFwd, 0.5); 1174 1249 1175 1250 TString metRes = "MetRes"; … … 1217 1292 C_el1->Write(); 1218 1293 C_el2->Write(); 1294 1295 for (int bin = 0; bin < Nbins; bin++) 1296 { 1297 plots_mu.at(bin).cenResolHist->Write(); 1298 plots_mutrack.at(bin).cenResolHist->Write(); 1299 plots_mu.at(bin).fwdResolHist->Write(); 1300 plots_mutrack.at(bin).fwdResolHist->Write(); 1301 } 1219 1302 1220 1303 histos_mu.first->Write();
Note:
See TracChangeset
for help on using the changeset viewer.