86 mTrackNumberOfClusters = std::make_unique<TH1F>(
"mGlobalFwdNumberOfMFTClusters",
87 "Number Of Clusters Per Track; # clusters; # entries", 10, 0.5, 10.5);
89 mTrackInvQPt = std::make_unique<TH1F>(
"mGlobalFwdInvQPt",
"Track q/p_{T}; q/p_{T} [1/GeV]; # entries", 100, -5, 5);
91 mTrackChi2 = std::make_unique<TH1F>(
"mGlobalFwdChi2",
"Track #chi^{2}; #chi^{2}; # entries", 202, -0.5, 100.5);
93 mTrackCharge = std::make_unique<TH1F>(
"mGlobalFwdCharge",
"Track Charge; q; # entries", 3, -1.5, 1.5);
95 mTrackPhi = std::make_unique<TH1F>(
"mGlobalFwdPhi",
"Track #phi; #phi; # entries", 100, -3.2, 3.2);
97 mTrackEta = std::make_unique<TH1F>(
"mGlobalFwdEta",
"Track #eta; #eta; # entries", 50, -4, -2);
99 for (
auto minNClusters : sMinNClustersList) {
100 auto nHisto = minNClusters - sMinNClustersList[0];
101 mTrackEtaNCls[nHisto] = std::make_unique<TH1F>(Form(
"mGlobalFwdEta_%d_MinClusters", minNClusters), Form(
"Track #eta (NCls >= %d); #eta; # entries", minNClusters), 50, -4, -2);
103 mTrackPhiNCls[nHisto] = std::make_unique<TH1F>(Form(
"mGlobalFwdPhi_%d_MinClusters", minNClusters), Form(
"Track #phi (NCls >= %d); #phi; # entries", minNClusters), 100, -3.2, 3.2);
105 mTrackXYNCls[nHisto] = std::make_unique<TH2F>(Form(
"mGlobalFwdXY_%d_MinClusters", minNClusters), Form(
"Track Position (NCls >= %d); x; y", minNClusters), 320, -16, 16, 320, -16, 16);
106 mTrackXYNCls[nHisto]->SetOption(
"COLZ");
108 mTrackEtaPhiNCls[nHisto] = std::make_unique<TH2F>(Form(
"mGlobalFwdEtaPhi_%d_MinClusters", minNClusters), Form(
"Track #eta , #phi (NCls >= %d); #eta; #phi", minNClusters), 50, -4, -2, 100, -3.2, 3.2);
109 mTrackEtaPhiNCls[nHisto]->SetOption(
"COLZ");
112 mTrackCotl = std::make_unique<TH1F>(
"mGlobalFwdCotl",
"Track cot #lambda; cot #lambda; # entries", 100, -0.25, 0);
117 LOG(info) <<
"Initializing MC Reader";
119 throw std::invalid_argument(
"initialization of MCKinematicsReader failed");
122 mHistPhiRecVsPhiGen = std::make_unique<TH2F>(
"mGMTrackPhiRecVsPhiGen",
"Phi Rec Vs Phi Gen of true reco tracks ", 24, -TMath::Pi(), TMath::Pi(), 24, -TMath::Pi(), TMath::Pi());
123 mHistPhiRecVsPhiGen->SetXTitle((std::string(
"#phi of ") + mNameOfTrackTypes[
kGen]).c_str());
124 mHistPhiRecVsPhiGen->SetYTitle((std::string(
"#phi of ") + mNameOfTrackTypes[
kRecoTrue]).c_str());
125 mHistPhiRecVsPhiGen->Sumw2();
126 mHistPhiRecVsPhiGen->SetOption(
"COLZ");
128 mHistEtaRecVsEtaGen = std::make_unique<TH2F>(
"mGMTrackEtaRecVsEtaGen",
"Eta Rec Vs Eta Gen of true reco tracks ", 35, 1.0, 4.5, 35, 1.0, 4.5);
129 mHistEtaRecVsEtaGen->SetXTitle((std::string(
"#eta of ") + mNameOfTrackTypes[
kGen]).c_str());
130 mHistEtaRecVsEtaGen->SetYTitle((std::string(
"#eta of ") + mNameOfTrackTypes[
kRecoTrue]).c_str());
131 mHistEtaRecVsEtaGen->Sumw2();
132 mHistEtaRecVsEtaGen->SetOption(
"COLZ");
136 mHistPhiVsEta[trackType] = std::make_unique<TH2F>((std::string(
"mGMTrackPhiVsEta") + mNameOfTrackTypes[trackType]).c_str(), (std::string(
"Phi Vs Eta of ") + mNameOfTrackTypes[trackType]).c_str(), 35, 1.0, 4.5, 24, -TMath::Pi(), TMath::Pi());
137 mHistPhiVsEta[trackType]->SetXTitle((std::string(
"#eta of ") + mNameOfTrackTypes[trackType]).c_str());
138 mHistPhiVsEta[trackType]->SetYTitle((std::string(
"#phi of ") + mNameOfTrackTypes[trackType]).c_str());
139 mHistPhiVsEta[trackType]->Sumw2();
140 mHistPhiVsEta[trackType]->SetOption(
"COLZ");
143 mHistPtVsEta[trackType] = std::make_unique<TH2F>((std::string(
"mGMTrackPtVsEta") + mNameOfTrackTypes[trackType]).c_str(), (std::string(
"Pt Vs Eta of ") + mNameOfTrackTypes[trackType]).c_str(), 35, 1.0, 4.5, 40, 0., 10.);
144 mHistPtVsEta[trackType]->SetXTitle((std::string(
"#eta of ") + mNameOfTrackTypes[trackType]).c_str());
145 mHistPtVsEta[trackType]->SetYTitle((std::string(
"p_{T} (GeV/c) of ") + mNameOfTrackTypes[trackType]).c_str());
146 mHistPtVsEta[trackType]->Sumw2();
147 mHistPtVsEta[trackType]->SetOption(
"COLZ");
150 mHistPhiVsPt[trackType] = std::make_unique<TH2F>((std::string(
"mGMTrackPhiVsPt") + mNameOfTrackTypes[trackType]).c_str(), (std::string(
"Phi Vs Pt of ") + mNameOfTrackTypes[trackType]).c_str(), 40, 0., 10., 24, -TMath::Pi(), TMath::Pi());
151 mHistPhiVsPt[trackType]->SetXTitle((std::string(
"p_{T} (GeV/c) of ") + mNameOfTrackTypes[trackType]).c_str());
152 mHistPhiVsPt[trackType]->SetYTitle((std::string(
"#phi of ") + mNameOfTrackTypes[trackType]).c_str());
153 mHistPhiVsPt[trackType]->Sumw2();
154 mHistPhiVsPt[trackType]->SetOption(
"COLZ");
156 if (trackType !=
kReco) {
158 mHistZvtxVsEta[trackType] = std::make_unique<TH2F>((std::string(
"mGMTrackZvtxVsEta") + mNameOfTrackTypes[trackType]).c_str(), (std::string(
"Z_{vtx} Vs Eta of ") + mNameOfTrackTypes[trackType]).c_str(), 35, 1.0, 4.5, 15, -15, 15);
159 mHistZvtxVsEta[trackType]->SetXTitle((std::string(
"#eta of ") + mNameOfTrackTypes[trackType]).c_str());
160 mHistZvtxVsEta[trackType]->SetYTitle((std::string(
"z_{vtx} (cm) of ") + mNameOfTrackTypes[trackType]).c_str());
161 mHistZvtxVsEta[trackType]->Sumw2();
162 mHistZvtxVsEta[trackType]->SetOption(
"COLZ");
166 mHistRVsZ[trackType] = std::make_unique<TH2F>((std::string(
"mGMTrackRVsZ") + mNameOfTrackTypes[trackType]).c_str(), (std::string(
"R Vs Z of ") + mNameOfTrackTypes[trackType]).c_str(), 400, -80., 20., 400, 0., 80.);
167 mHistRVsZ[trackType]->SetXTitle((std::string(
"z (cm) origin of ") + mNameOfTrackTypes[trackType]).c_str());
168 mHistRVsZ[trackType]->SetYTitle((std::string(
"R (cm) radius of origin of ") + mNameOfTrackTypes[trackType]).c_str());
169 mHistRVsZ[trackType]->Sumw2();
170 mHistRVsZ[trackType]->SetOption(
"COLZ");
176 mChargeMatchEff = std::make_unique<TEfficiency>(
"mGMTrackQMatchEff",
"Charge Match;p_t [GeV];#epsilon", 50, 0, 20);
178 const int nTH3Histos = TH3Names.size();
180 for (
auto&
h : mTH3Histos) {
181 h = std::make_unique<TH3F>(TH3Names[n3Histo], TH3Titles[n3Histo],
182 (
int)TH3Binning[n3Histo][0],
183 TH3Binning[n3Histo][1],
184 TH3Binning[n3Histo][2],
185 (
int)TH3Binning[n3Histo][3],
186 TH3Binning[n3Histo][4],
187 TH3Binning[n3Histo][5],
188 (
int)TH3Binning[n3Histo][6],
189 TH3Binning[n3Histo][7],
190 TH3Binning[n3Histo][8]);
191 h->GetXaxis()->SetTitle(TH3XaxisTitles[n3Histo]);
192 h->GetYaxis()->SetTitle(TH3YaxisTitles[n3Histo]);
193 h->GetZaxis()->SetTitle(TH3ZaxisTitles[n3Histo]);
355 const auto& zVtx = evH.GetZ();
357 for (
const auto& trueFwdTrackID : mTrueTracksMap[
src][
event]) {
358 auto fwdTrack = mGlobalFwdTracks[trueFwdTrackID];
359 if (mMIDFilterEnabled and (fwdTrack.getMIDMatchingChi2() < 0)) {
363 const auto& trackLabel = mFwdTrackLabels[trueFwdTrackID];
364 if (trackLabel.isCorrect()) {
366 auto const* mcParticle = mcReader.
getTrack(trackLabel);
367 const auto etaGen = std::abs(mcParticle->GetEta());
368 const auto phiGen = TMath::ATan2(mcParticle->Py(), mcParticle->Px());
369 const auto& ptGen = mcParticle->GetPt();
370 const auto& vxGen = mcParticle->GetStartVertexCoordinatesX();
371 const auto& vyGen = mcParticle->GetStartVertexCoordinatesY();
372 const auto& vzGen = mcParticle->GetStartVertexCoordinatesZ();
373 auto tanlGen = mcParticle->Pz() / mcParticle->GetPt();
375 const auto& pdgcode_MC = mcParticle->GetPdgCode();
377 if (TDatabasePDG::Instance()->GetParticle(pdgcode_MC)) {
378 Q_Gen = TDatabasePDG::Instance()->GetParticle(pdgcode_MC)->Charge() / 3;
382 const auto invQPtGen = 1.0 * Q_Gen / ptGen;
383 fwdTrack.propagateToZ(vzGen, mBz);
385 const auto& pt_Rec = fwdTrack.getPt();
386 const auto& invQPt_Rec = fwdTrack.getInvQPt();
387 const auto& px_mch = mMCHTracks[fwdTrack.getMCHTrackID()].getPx();
388 const auto& py_mch = mMCHTracks[fwdTrack.getMCHTrackID()].getPy();
389 const auto& invQPt_MCH = mMCHTracks[fwdTrack.getMCHTrackID()].getSign() / sqrt(px_mch * px_mch + py_mch * py_mch);
390 const auto& eta_Rec = std::abs(fwdTrack.getEta());
391 const auto& phi_Rec = fwdTrack.getPhi();
392 const auto& nMFTClusters = mMFTTracks[fwdTrack.getMFTTrackID()].getNumberOfPoints();
393 const auto& Chi2_Rec = fwdTrack.getTrackChi2();
394 const int Q_Rec = fwdTrack.getCharge();
395 const auto& matchChi2 = fwdTrack.getMFTMCHMatchingChi2();
396 const auto& matchMatchScore = fwdTrack.getMFTMCHMatchingScore();
399 const auto x_res = fwdTrack.getX() - vxGen;
400 const auto y_res = fwdTrack.getY() - vyGen;
401 const auto eta_res = fwdTrack.getEta() - etaGen;
402 const auto phi_res = fwdTrack.getPhi() - phiGen;
403 const auto cotl_res = (1. / fwdTrack.getTanl()) - (1. / tanlGen);
404 const auto invQPt_res = invQPt_Rec - invQPtGen;
405 mHistPtVsEta[
kRecoTrue]->Fill(eta_Rec, pt_Rec);
406 mHistPhiVsEta[
kRecoTrue]->Fill(eta_Rec, phi_Rec);
407 mHistPhiVsPt[
kRecoTrue]->Fill(pt_Rec, phi_Rec);
408 mHistZvtxVsEta[
kRecoTrue]->Fill(eta_Rec, zVtx);
410 mHistPhiRecVsPhiGen->Fill(phiGen, phi_Rec);
411 mHistEtaRecVsEtaGen->Fill(etaGen, eta_Rec);
414 auto d_Charge = Q_Rec - Q_Gen;
415 mChargeMatchEff->Fill(!d_Charge, ptGen);
417 mTH3Histos[kTH3GMTrackDeltaXVertexPtEta]->Fill(ptGen, etaGen, 1e4 * x_res);
418 mTH3Histos[kTH3GMTrackDeltaYVertexPtEta]->Fill(ptGen, etaGen, 1e4 * y_res);
419 mTH3Histos[kTH3GMTrackDeltaXDeltaYEta]->Fill(etaGen, 1e4 * x_res, 1e4 * y_res);
420 mTH3Histos[kTH3GMTrackDeltaXDeltaYPt]->Fill(ptGen, 1e4 * x_res, 1e4 * y_res);
421 mTH3Histos[kTH3GMTrackXPullPtEta]->Fill(ptGen, etaGen, x_res / sqrt(fwdTrack.getCovariances()(0, 0)));
422 mTH3Histos[kTH3GMTrackYPullPtEta]->Fill(ptGen, etaGen, y_res / sqrt(fwdTrack.getCovariances()(1, 1)));
423 mTH3Histos[kTH3GMTrackPhiPullPtEta]->Fill(ptGen, etaGen, phi_res / sqrt(fwdTrack.getCovariances()(2, 2)));
424 mTH3Histos[kTH3GMTrackCotlPullPtEta]->Fill(ptGen, etaGen, cotl_res / sqrt(1. / fwdTrack.getCovariances()(3, 3)));
425 mTH3Histos[kTH3GMTrackInvQPtPullPtEta]->Fill(ptGen, etaGen, invQPt_res / sqrt(fwdTrack.getCovariances()(4, 4)));
426 mTH3Histos[kTH3GMTrackInvQPtResolutionPtEta]->Fill(ptGen, etaGen, (invQPt_Rec - invQPtGen) / invQPtGen);
427 mTH3Histos[kTH3GMTrackInvQPtResMCHPtEta]->Fill(ptGen, etaGen, (invQPt_MCH - invQPtGen) / invQPtGen);
428 mTH3Histos[kTH3GMTrackReducedChi2PtEta]->Fill(ptGen, etaGen, Chi2_Rec / (2 * nMFTClusters - 5));
429 mTH3Histos[kTH3GMTruePtEtaChi2]->Fill(pt_Rec, eta_Rec, matchChi2);
430 mTH3Histos[kTH3GMTruePtEtaMatchScore]->Fill(pt_Rec, eta_Rec, matchMatchScore);
431 mTH3Histos[kTH3GMTruePtEtaMatchScore_MC]->Fill(ptGen, etaGen, matchMatchScore);
654 gStyle->SetOptTitle(kFALSE);
655 gStyle->SetOptStat(0);
656 gStyle->SetMarkerStyle(kFullCircle);
657 gStyle->SetMarkerSize(1.0);
659 auto& Reco = mTH3Histos[kTH3GMTrackPtEtaMatchScore];
660 auto& hTrue = mTH3Histos[kTH3GMTruePtEtaMatchScore];
661 auto& hTrue_MC = mTH3Histos[kTH3GMTruePtEtaMatchScore_MC];
662 auto& hPairable = mTH3Histos[kTH3GMPairablePtEtaZ];
665 auto minBin = Reco->GetYaxis()->FindBin(2.4);
666 auto midBin = Reco->GetYaxis()->FindBin(3.0);
667 auto maxBin = Reco->GetYaxis()->FindBin(3.6);
668 auto PairablePtProjInner = (TH1*)hPairable->ProjectionX(
"PairableInner", midBin, maxBin);
669 auto PairablePtProjOuter = (TH1*)hPairable->ProjectionX(
"PairableOuter", minBin, midBin);
671 auto RecoEtaPt = (TH2D*)Reco->Project3D(
"xy COLZ");
672 auto TrueEtaPt = (TH2D*)hTrue->Project3D(
"xy COLZ");
673 auto TrueEtaPt_MC = (TH2D*)hTrue_MC->Project3D(
"xy COLZ");
674 auto PairableEtaPt = (TH2D*)hPairable->Project3D(
"xy COLZ");
675 auto PairablePt = (TH1D*)hPairable->Project3D(
"x");
678 float scoreStep = (mFinalizeMaxCut - mFinalizeMinCut) / mNFinalizeSteps;
679 for (
float scoreCut = mFinalizeMinCut; scoreCut <= mFinalizeMaxCut; scoreCut += scoreStep) {
681 auto RecoPtProj = (TH1*)Reco->ProjectionX(Form(
"_RecoPtProj%.2f", scoreCut));
682 auto TruePtProj = (TH1*)hTrue->ProjectionX(Form(
"_TruePtProj%.2f", scoreCut));
683 auto TruePtProj_MC = (TH1*)hTrue_MC->ProjectionX(Form(
"_TruePtProj_MC%.2f", scoreCut));
686 auto maxScoreBin = Reco->GetZaxis()->FindBin(scoreCut);
687 auto RecoPtProjInner = (TH1*)Reco->ProjectionX(Form(
"_InnerRecoCut_%.2f", scoreCut), midBin, maxBin, 0, maxScoreBin);
688 auto TruePtProjInner = (TH1*)hTrue->ProjectionX(Form(
"_InnerTrueCut_%.2f", scoreCut), midBin, maxBin, 0, maxScoreBin);
689 auto TruePtProjInner_MC = (TH1*)hTrue_MC->ProjectionX(Form(
"_InnerTrueCut_MC_%.2f", scoreCut), midBin, maxBin, 0, maxScoreBin);
691 auto& hPurityInner = mPurityPtInnerVecTH2.emplace_back((std::unique_ptr<TH2D>)
static_cast<TH2D*
>(TruePtProjInner->Clone()));
692 hPurityInner->Divide(RecoPtProjInner);
693 hPurityInner->SetNameTitle(Form(
"TH2GMTrackPurityInnerEtaCut_%.2f", scoreCut), Form(
"%.2f cut", scoreCut));
694 hPurityInner->GetYaxis()->SetTitle(
"Pairing Purity [ N_{True} / N_{Rec}]");
695 hPurityInner->SetOption(
"COLZ");
696 hPurityInner->SetMarkerStyle(kFullCircle);
697 hPurityInner->SetMinimum(0.0);
698 hPurityInner->SetMaximum(1.2);
700 auto& hPairingEffInner = mPairingPtInnerVecTH1.emplace_back((std::unique_ptr<TH1D>)
static_cast<TH1D*
>(RecoPtProjInner->Clone()));
701 hPairingEffInner->Divide(PairablePtProjInner);
702 hPairingEffInner->SetNameTitle(Form(
"GMTrackPairingEffInnerPtCut_%.2f", scoreCut), Form(
"%.2f cut", scoreCut));
703 hPairingEffInner->GetYaxis()->SetTitle(
"Pairing Efficiency [ N_{Rec} / N_{pairable}]");
704 hPairingEffInner->SetOption(
"COLZ");
705 hPairingEffInner->SetMarkerStyle(kFullCircle);
706 hPairingEffInner->SetMinimum(0.0);
707 hPairingEffInner->SetMaximum(1.8);
709 auto& hTruePairingEffInner = mTruePairingPtInnerVecTH1.emplace_back((std::unique_ptr<TH1D>)
static_cast<TH1D*
>(TruePtProjInner_MC->Clone()));
710 hTruePairingEffInner->Divide(PairablePtProjInner);
711 hTruePairingEffInner->SetNameTitle(Form(
"GMTrackTruePairingEffInnerPtCut_%.2f", scoreCut), Form(
"%.2f cut", scoreCut));
712 hTruePairingEffInner->GetYaxis()->SetTitle(
"True Pairing Efficiency [ N_{True} / N_{pairable}]");
713 hTruePairingEffInner->SetOption(
"COLZ");
714 hTruePairingEffInner->SetMarkerStyle(kFullCircle);
715 hTruePairingEffInner->SetMinimum(0.0);
716 hTruePairingEffInner->SetMaximum(1.2);
719 auto RecoPtProjOuter = (TH1*)Reco->ProjectionX(Form(
"_OuterRecoCut_%.2f", scoreCut), minBin, midBin, 0, maxScoreBin);
720 auto TruePtProjOuter = (TH1*)hTrue->ProjectionX(Form(
"_OuterTrueCut_%.2f", scoreCut), minBin, midBin, 0, maxScoreBin);
721 auto TruePtProjOuter_MC = (TH1*)hTrue_MC->ProjectionX(Form(
"_OuterTrueCut_MC_%.2f", scoreCut), minBin, midBin, 0, maxScoreBin);
723 auto& hPurityOuter = mPurityPtOuterVecTH2.emplace_back((std::unique_ptr<TH2D>)
static_cast<TH2D*
>(TruePtProjOuter->Clone()));
724 hPurityOuter->Divide(RecoPtProjOuter);
725 hPurityOuter->SetNameTitle(Form(
"TH2GMTrackPurityOuterEtaCut_%.2f", scoreCut), Form(
"%.2f cut", scoreCut));
726 hPurityOuter->GetYaxis()->SetTitle(
"Pairing Purity [ N_{True} / N_{Rec}]");
727 hPurityOuter->SetOption(
"COLZ");
728 hPurityOuter->SetMarkerStyle(kFullTriangleUp);
729 hPurityOuter->SetMinimum(0.0);
730 hPurityOuter->SetMaximum(1.2);
732 auto& hPairingEffOuter = mPairingPtOuterVecTH1.emplace_back((std::unique_ptr<TH1D>)
static_cast<TH1D*
>(RecoPtProjOuter->Clone()));
733 hPairingEffOuter->Divide(PairablePtProjInner);
734 hPairingEffOuter->SetNameTitle(Form(
"GMTrackPairingEffOuterPtCut_%.2f", scoreCut), Form(
"%.2f cut", scoreCut));
735 hPairingEffOuter->GetYaxis()->SetTitle(
"Pairing Efficiency [ N_{Rec} / N_{pairable}]");
736 hPairingEffOuter->SetOption(
"COLZ");
737 hPairingEffOuter->SetMarkerStyle(kFullTriangleUp);
738 hPairingEffOuter->SetMinimum(0.0);
739 hPairingEffOuter->SetMaximum(1.8);
741 auto& hTruePairingEffOuter = mTruePairingPtOuterVecTH1.emplace_back((std::unique_ptr<TH1D>)
static_cast<TH1D*
>(TruePtProjOuter_MC->Clone()));
742 hTruePairingEffOuter->Divide(PairablePtProjOuter);
743 hTruePairingEffOuter->SetNameTitle(Form(
"GMTrackTruePairingEffOuterPtCut_%.2f", scoreCut), Form(
"%.2f cut", scoreCut));
744 hTruePairingEffOuter->GetYaxis()->SetTitle(
"True Pairing Efficiency [ N_{True} / N_{pairable}]");
745 hTruePairingEffOuter->SetOption(
"COLZ");
746 hTruePairingEffOuter->SetMarkerStyle(kFullTriangleUp);
747 hTruePairingEffOuter->SetMinimum(0.0);
748 hTruePairingEffOuter->SetMaximum(1.2);
750 mPairingEtaPtVec.emplace_back((std::unique_ptr<TH2D>)
static_cast<TH2D*
>(RecoEtaPt->Clone()));
751 mPairingEtaPtVec.back()->Divide(PairableEtaPt);
752 mPairingEtaPtVec.back()->SetNameTitle(Form(
"GMTrackPairingEffEtaPtCut_%.2f", scoreCut), Form(
"%.2f", scoreCut));
753 mPairingEtaPtVec.back()->SetOption(
"COLZ");
755 mTruePairingEtaPtVec.emplace_back((std::unique_ptr<TH2D>)
static_cast<TH2D*
>(TrueEtaPt_MC->Clone()));
756 mTruePairingEtaPtVec.back()->Divide(PairableEtaPt);
757 mTruePairingEtaPtVec.back()->SetNameTitle(Form(
"GMTrackTruePairingEffEtaPtCut_%.2f", scoreCut), Form(
"%.2f", scoreCut));
758 mTruePairingEtaPtVec.back()->SetOption(
"COLZ");
761 auto nCanvas = kPurityPtOuter;
762 auto canvasName = GMAssesmentNames[nCanvas];
763 mAssessmentCanvas[nCanvas] =
new TCanvas(canvasName, canvasName, 1080, 800);
764 mAssessmentCanvas[nCanvas]->UseCurrentStyle();
765 mAssessmentCanvas[nCanvas]->cd();
769 std::vector<float> verylowPtOuterPurity;
770 std::vector<float> verylowPtInnerPurity;
771 std::vector<float> verylowPtOuterEff;
772 std::vector<float> verylowPtInnerEff;
773 std::vector<float> veryLowPtOuterTrueEff;
774 std::vector<float> veryLowPtInnerTrueEff;
775 std::vector<float> lowPtOuterPurity;
776 std::vector<float> lowPtInnerPurity;
777 std::vector<float> lowPtOuterEff;
778 std::vector<float> lowPtInnerEff;
779 std::vector<float> lowPtOuterTrueEff;
780 std::vector<float> lowPtInnerTrueEff;
781 std::vector<float> highPtOuterPurity;
782 std::vector<float> highPtInnerPurity;
783 std::vector<float> highPtOuterEff;
784 std::vector<float> highPtInnerEff;
785 std::vector<float> highPtOuterTrueEff;
786 std::vector<float> highPtInnerTrueEff;
788 auto veryLowptBin = mPurityPtOuterVecTH2.front()->GetXaxis()->FindBin(0.25);
789 auto lowptBin = mPurityPtOuterVecTH2.front()->GetXaxis()->FindBin(0.75);
790 auto highptBin = mPurityPtOuterVecTH2.front()->GetXaxis()->FindBin(2.25);
792 for (
auto& th2 : mPurityPtOuterVecTH2) {
794 option =
"hist P PMC";
796 option =
"hist SAME P PMC";
799 th2->Draw(option.c_str());
801 verylowPtOuterPurity.push_back(th2->GetBinContent(veryLowptBin));
802 lowPtOuterPurity.push_back(th2->GetBinContent(lowptBin));
803 highPtOuterPurity.push_back(th2->GetBinContent(highptBin));
805 TPaveText* t =
new TPaveText(0.2223748, 0.9069355, 0.7776252, 0.965,
"brNDC");
807 t->SetFillColor(gStyle->GetTitleFillColor());
808 t->AddText(
"Global Muon Track Purity (2.4 < #eta < 3.0)");
811 mAssessmentCanvas[nCanvas]->BuildLegend(.8, .15, .96, .87);
812 mAssessmentCanvas[nCanvas]->SetTicky();
813 mAssessmentCanvas[nCanvas]->SetGridy();
815 nCanvas = kPurityPtInner;
816 canvasName = GMAssesmentNames[nCanvas];
817 mAssessmentCanvas[nCanvas] =
new TCanvas(canvasName, canvasName, 1080, 800);
818 mAssessmentCanvas[nCanvas]->UseCurrentStyle();
819 mAssessmentCanvas[nCanvas]->cd();
822 for (
auto& th2 : mPurityPtInnerVecTH2) {
824 option =
"hist P PMC";
826 option =
"hist SAME P PMC";
829 th2->Draw(option.c_str());
831 verylowPtInnerPurity.push_back(th2->GetBinContent(veryLowptBin));
832 lowPtInnerPurity.push_back(th2->GetBinContent(lowptBin));
833 highPtInnerPurity.push_back(th2->GetBinContent(highptBin));
835 t =
new TPaveText(0.2223748, 0.9069355, 0.7776252, 0.965,
"brNDC");
837 t->SetFillColor(gStyle->GetTitleFillColor());
838 t->AddText(
"Global Muon Track Purity (3.0 < #eta < 3.6)");
841 mAssessmentCanvas[nCanvas]->BuildLegend(.8, .15, .96, .87);
842 mAssessmentCanvas[nCanvas]->SetTicky();
843 mAssessmentCanvas[nCanvas]->SetGridy();
845 nCanvas = kPairingEffPtOuter;
846 canvasName = GMAssesmentNames[nCanvas];
847 mAssessmentCanvas[nCanvas] =
new TCanvas(canvasName, canvasName, 1080, 800);
848 mAssessmentCanvas[nCanvas]->UseCurrentStyle();
849 mAssessmentCanvas[nCanvas]->cd();
852 for (
auto& th2 : mPairingPtOuterVecTH1) {
854 option =
"hist P PMC";
856 option =
"hist SAME P PMC";
859 verylowPtOuterEff.push_back(th2->GetBinContent(veryLowptBin));
860 lowPtOuterEff.push_back(th2->GetBinContent(lowptBin));
861 highPtOuterEff.push_back(th2->GetBinContent(highptBin));
862 th2->Draw(option.c_str());
864 t =
new TPaveText(0.2223748, 0.9069355, 0.7776252, 0.965,
"brNDC");
866 t->SetFillColor(gStyle->GetTitleFillColor());
867 t->AddText(
"Global Muon Track Pairing Efficiency (2.4 < #eta < 3.0)");
870 mAssessmentCanvas[nCanvas]->BuildLegend(.8, .15, .96, .87);
871 mAssessmentCanvas[nCanvas]->SetTicky();
872 mAssessmentCanvas[nCanvas]->SetGridy();
874 nCanvas = kPairingEffPtInner;
875 canvasName = GMAssesmentNames[nCanvas];
876 mAssessmentCanvas[nCanvas] =
new TCanvas(canvasName, canvasName, 1080, 800);
877 mAssessmentCanvas[nCanvas]->UseCurrentStyle();
878 mAssessmentCanvas[nCanvas]->cd();
881 for (
auto& th2 : mPairingPtInnerVecTH1) {
883 option =
"hist P PMC";
885 option =
"hist SAME P PMC";
888 verylowPtInnerEff.push_back(th2->GetBinContent(veryLowptBin));
889 lowPtInnerEff.push_back(th2->GetBinContent(lowptBin));
890 highPtInnerEff.push_back(th2->GetBinContent(highptBin));
891 th2->Draw(option.c_str());
893 t =
new TPaveText(0.2223748, 0.9069355, 0.7776252, 0.965,
"brNDC");
895 t->SetFillColor(gStyle->GetTitleFillColor());
896 t->AddText(
"Global Muon Track Pairing Efficiency (3.0 < #eta < 3.6 )");
899 mAssessmentCanvas[nCanvas]->BuildLegend(.8, .15, .96, .87);
900 mAssessmentCanvas[nCanvas]->SetTicky();
901 mAssessmentCanvas[nCanvas]->SetGridy();
903 nCanvas = kTruePairingEffPtOuter;
904 canvasName = GMAssesmentNames[nCanvas];
905 mAssessmentCanvas[nCanvas] =
new TCanvas(canvasName, canvasName, 1080, 800);
906 mAssessmentCanvas[nCanvas]->UseCurrentStyle();
907 mAssessmentCanvas[nCanvas]->cd();
910 for (
auto& th2 : mTruePairingPtOuterVecTH1) {
912 option =
"hist P PMC";
914 option =
"hist SAME P PMC";
917 veryLowPtOuterTrueEff.push_back(th2->GetBinContent(veryLowptBin));
918 lowPtOuterTrueEff.push_back(th2->GetBinContent(lowptBin));
919 highPtOuterTrueEff.push_back(th2->GetBinContent(highptBin));
920 th2->Draw(option.c_str());
922 t =
new TPaveText(0.2223748, 0.9069355, 0.7776252, 0.965,
"brNDC");
924 t->SetFillColor(gStyle->GetTitleFillColor());
925 t->AddText(
"Global Muon Track True Pairing Efficiency (2.4 < #eta < 3.0)");
928 mAssessmentCanvas[nCanvas]->BuildLegend(.8, .15, .96, .87);
929 mAssessmentCanvas[nCanvas]->SetTicky();
930 mAssessmentCanvas[nCanvas]->SetGridy();
932 nCanvas = kTruePairingEffPtInner;
933 canvasName = GMAssesmentNames[nCanvas];
934 mAssessmentCanvas[nCanvas] =
new TCanvas(canvasName, canvasName, 1080, 800);
935 mAssessmentCanvas[nCanvas]->UseCurrentStyle();
936 mAssessmentCanvas[nCanvas]->cd();
939 for (
auto& th2 : mTruePairingPtInnerVecTH1) {
941 option =
"hist P PMC";
943 option =
"hist SAME P PMC";
946 veryLowPtInnerTrueEff.push_back(th2->GetBinContent(veryLowptBin));
947 lowPtInnerTrueEff.push_back(th2->GetBinContent(lowptBin));
948 highPtInnerTrueEff.push_back(th2->GetBinContent(highptBin));
949 th2->Draw(option.c_str());
951 t =
new TPaveText(0.2223748, 0.9069355, 0.7776252, 0.965,
"brNDC");
953 t->SetFillColor(gStyle->GetTitleFillColor());
954 t->AddText(
"Global Muon Track True Pairing Efficiency (3.0 < #eta < 3.6 )");
957 mAssessmentCanvas[nCanvas]->BuildLegend(.8, .15, .96, .87);
958 mAssessmentCanvas[nCanvas]->SetTicky();
959 mAssessmentCanvas[nCanvas]->SetGridy();
961 nCanvas = kPurityVsEfficiency;
962 canvasName = GMAssesmentNames[nCanvas];
963 mAssessmentCanvas[nCanvas] =
new TCanvas(canvasName, canvasName, 1080, 800);
965 TGraph* gr =
new TGraph(highPtInnerEff.size(), &highPtInnerEff[0], &highPtInnerPurity[0]);
967 gr->SetMaximum(1.01);
969 gr->SetMarkerStyle(kFullCircle);
971 gr->GetXaxis()->SetTitle(
"Global Muon Pairing Efficiency [ N_{Rec} / N_{pairable}]");
972 gr->GetXaxis()->SetLimits(0.f, 1.6);
973 gr->GetYaxis()->SetTitle(
"Pairing Purity [ N_{True} / N_{Rec}]");
974 gr->SetTitle(
"p_{t} = 2.25 || (3.0 < #eta < 3.6 )");
976 gr =
new TGraph(highPtOuterEff.size(), &highPtOuterEff[0], &highPtOuterPurity[0]);
977 gr->Draw(
"P PMC SAME");
978 gr->SetMarkerStyle(kFullTriangleUp);
980 gr->SetTitle(
"p_{t} = 2.25 || (2.4 < #eta < 3.0)");
982 gr =
new TGraph(lowPtInnerEff.size(), &lowPtInnerEff[0], &lowPtInnerPurity[0]);
983 gr->Draw(
"P PMC SAME");
984 gr->SetTitle(
"p_{t} = 0.75 || (3.0 < #eta < 3.6 )");
986 gr =
new TGraph(lowPtOuterEff.size(), &lowPtOuterEff[0], &lowPtOuterPurity[0]);
987 gr->Draw(
"P PMC SAME");
988 gr->SetMarkerStyle(kFullTriangleUp);
989 gr->SetTitle(
"p_{t} = 0.75 || (2.4 < #eta < 3.0)");
991 gr =
new TGraph(verylowPtInnerEff.size(), &verylowPtInnerEff[0], &verylowPtInnerPurity[0]);
992 gr->Draw(
"P PMC SAME");
993 gr->SetTitle(
"p_{t} = 0.25 || (3.0 < #eta < 3.6)");
995 gr =
new TGraph(verylowPtOuterEff.size(), &verylowPtOuterEff[0], &verylowPtOuterPurity[0]);
996 gr->Draw(
"P PMC SAME");
997 gr->SetMarkerStyle(kFullTriangleUp);
999 gr->SetTitle(
"p_{t} = 0.25 || (2.4 < #eta < 3.0)");
1001 mAssessmentCanvas[nCanvas]->BuildLegend();
1002 mAssessmentCanvas[nCanvas]->SetTicky();
1003 mAssessmentCanvas[nCanvas]->SetGridy();
1005 nCanvas = kPurityVsTrueEfficiency;
1006 canvasName = GMAssesmentNames[nCanvas];
1007 mAssessmentCanvas[nCanvas] =
new TCanvas(canvasName, canvasName, 1080, 800);
1009 TGraph* gr2 =
new TGraph(highPtInnerTrueEff.size(), &highPtInnerTrueEff[0], &highPtInnerPurity[0]);
1011 gr2->SetMaximum(1.01);
1013 gr2->SetMarkerStyle(kFullCircle);
1014 gr2->Draw(
"A P PMC");
1015 gr2->GetXaxis()->SetTitle(
"Global Muon True Pairing Efficiency [ N_{True} / N_{pairable}]");
1016 gr2->GetXaxis()->SetLimits(0.f, 1.01);
1017 gr2->GetYaxis()->SetTitle(
"Pairing Purity [ N_{True} / N_{Rec}]");
1018 gr2->SetTitle(
"p_{t} = 2.25 || (3.0 < #eta < 3.6 )");
1020 gr2 =
new TGraph(highPtOuterTrueEff.size(), &highPtOuterTrueEff[0], &highPtOuterPurity[0]);
1021 gr2->Draw(
"P PMC SAME");
1022 gr2->SetMarkerStyle(kFullTriangleUp);
1024 gr2->SetTitle(
"p_{t} = 2.25 || (2.4 < #eta < 3.0)");
1026 gr2 =
new TGraph(lowPtInnerTrueEff.size(), &lowPtInnerTrueEff[0], &lowPtInnerPurity[0]);
1027 gr2->Draw(
"P PMC SAME");
1028 gr2->SetTitle(
"p_{t} = 0.75 || (3.0 < #eta < 3.6 )");
1030 gr2 =
new TGraph(lowPtOuterTrueEff.size(), &lowPtOuterTrueEff[0], &lowPtOuterPurity[0]);
1031 gr2->Draw(
"P PMC SAME");
1032 gr2->SetMarkerStyle(kFullTriangleUp);
1033 gr2->SetTitle(
"p_{t} = 0.75 || (2.4 < #eta < 3.0)");
1035 gr2 =
new TGraph(veryLowPtInnerTrueEff.size(), &veryLowPtInnerTrueEff[0], &verylowPtInnerPurity[0]);
1036 gr2->Draw(
"P PMC SAME");
1037 gr2->SetTitle(
"p_{t} = 0.25 || (3.0 < #eta < 3.6)");
1039 gr2 =
new TGraph(veryLowPtOuterTrueEff.size(), &veryLowPtOuterTrueEff[0], &verylowPtOuterPurity[0]);
1040 gr2->Draw(
"P PMC SAME");
1041 gr2->SetMarkerStyle(kFullTriangleUp);
1043 gr2->SetTitle(
"p_{t} = 0.25 || (2.4 < #eta < 3.0)");
1045 mAssessmentCanvas[nCanvas]->BuildLegend();
1046 mAssessmentCanvas[nCanvas]->SetTicky();
1047 mAssessmentCanvas[nCanvas]->SetGridy();