From e1da4643cd4cbb0701d1d41824bf25bf9092be70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Tue, 4 Oct 2022 22:43:36 +0200 Subject: [PATCH 01/14] Fix efficiency --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 455 +++++++++------------------- 1 file changed, 142 insertions(+), 313 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index e327c6e81e1..922203f47c1 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -39,17 +39,10 @@ struct QaEfficiency { static constexpr const char* particleTitle[nSpecies] = {"e", "#mu", "#pi", "K", "p", "d", "t", "^{3}He", "#alpha", "All"}; static constexpr int PDGs[nSpecies] = {kElectron, kMuonMinus, kPiPlus, kKPlus, kProton, 1000010020, 1000010030, 1000020030, 1000020040, 0}; // Track/particle selection - Configurable etaMin{"eta-min", -3.f, "Lower limit in eta"}; - Configurable etaMax{"eta-max", 3.f, "Upper limit in eta"}; - Configurable phiMin{"phi-min", 0.f, "Lower limit in phi"}; - Configurable phiMax{"phi-max", 6.284f, "Upper limit in phi"}; Configurable yMin{"y-min", -0.5f, "Lower limit in y"}; Configurable yMax{"y-max", 0.5f, "Upper limit in y"}; - Configurable ptMin{"pt-min", 0.f, "Lower limit in pT"}; - Configurable ptMax{"pt-max", 5.f, "Upper limit in pT"}; Configurable noFakes{"noFakes", false, "Flag to reject tracks that have fake hits"}; // Charge selection - Configurable doSumPDG{"doSumPDG", true, "Flag to fill histograms for summed PDG codes. Required to fill the efficiencies"}; Configurable doPositivePDG{"doPositivePDG", false, "Flag to fill histograms for positive PDG codes."}; Configurable doNegativePDG{"doNegativePDG", false, "Flag to fill histograms for negative PDG codes."}; // Particle only selection @@ -70,38 +63,31 @@ struct QaEfficiency { Configurable vertexZMin{"vertex-z-min", -10.f, "Minimum position of the generated vertez in Z (cm)"}; Configurable vertexZMax{"vertex-z-max", 10.f, "Maximum position of the generated vertez in Z (cm)"}; // Histogram configuration - Configurable ptBins{"pt-bins", 500, "Number of pT bins"}; + ConfigurableAxis ptBins{"ptBins", {200, 0.f, 5.f}, "Pt binning"}; Configurable logPt{"log-pt", 0, "Flag to use a logarithmic pT axis"}; - Configurable etaBins{"eta-bins", 500, "Number of eta bins"}; - Configurable yBins{"y-bins", 500, "Number of eta bins"}; - Configurable phiBins{"phi-bins", 500, "Number of phi bins"}; + ConfigurableAxis etaBins{"etaBins", {200, -3.f, 3.f}, "Eta binning"}; + ConfigurableAxis phiBins{"phiBins", {200, 0.f, 6.284f}, "Phi binning"}; + ConfigurableAxis yBins{"yBins", {200, -0.5f, 0.5f}, "Y binning"}; // Task configuration Configurable makeEff{"make-eff", false, "Flag to produce the efficiency with TEfficiency"}; + Configurable doPtEta{"doPtEta", false, "Flag to produce the efficiency vs pT and Eta"}; Configurable applyEvSel{"applyEvSel", 0, "Flag to apply event selection: 0 -> no event selection, 1 -> Run 2 event selection, 2 -> Run 3 event selection"}; OutputObj listEfficiencyMC{"EfficiencyMC"}; OutputObj listEfficiencyData{"EfficiencyData"}; // Histograms HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; - static constexpr int nHistograms = nSpecies * 3; + static constexpr int nHistograms = nSpecies * 2; // Pt - static constexpr std::string_view hPtNum[nHistograms] = {"MC/el/sum/pt/num", "MC/mu/sum/pt/num", "MC/pi/sum/pt/num", - "MC/ka/sum/pt/num", "MC/pr/sum/pt/num", "MC/de/sum/pt/num", - "MC/tr/sum/pt/num", "MC/he/sum/pt/num", "MC/al/sum/pt/num", - "MC/all/sum/pt/num", - "MC/el/pos/pt/num", "MC/mu/pos/pt/num", "MC/pi/pos/pt/num", - "MC/ka/pos/pt/num", "MC/pr/pos/pt/num", "MC/de/pos/pt/num", - "MC/tr/pos/pt/num", "MC/he/pos/pt/num", "MC/al/pos/pt/num", - "MC/all/pos/pt/num", - "MC/el/neg/pt/num", "MC/mu/neg/pt/num", "MC/pi/neg/pt/num", - "MC/ka/neg/pt/num", "MC/pr/neg/pt/num", "MC/de/neg/pt/num", - "MC/tr/neg/pt/num", "MC/he/neg/pt/num", "MC/al/neg/pt/num", - "MC/all/neg/pt/num"}; - static constexpr std::string_view hPtNumTrk[nHistograms] = {"MC/el/sum/pt/numtrk", "MC/mu/sum/pt/numtrk", "MC/pi/sum/pt/numtrk", - "MC/ka/sum/pt/numtrk", "MC/pr/sum/pt/numtrk", "MC/de/sum/pt/numtrk", - "MC/tr/sum/pt/numtrk", "MC/he/sum/pt/numtrk", "MC/al/sum/pt/numtrk", - "MC/all/sum/pt/numtrk", - "MC/el/pos/pt/numtrk", "MC/mu/pos/pt/numtrk", "MC/pi/pos/pt/numtrk", + // static constexpr std::string_view hPt_ITS_TPC[nHistograms] = {"MC/el/pos/pt/its_tpc", "MC/mu/pos/pt/its_tpc", "MC/pi/pos/pt/its_tpc", + // "MC/ka/pos/pt/its_tpc", "MC/pr/pos/pt/its_tpc", "MC/de/pos/pt/its_tpc", + // "MC/tr/pos/pt/its_tpc", "MC/he/pos/pt/its_tpc", "MC/al/pos/pt/its_tpc", + // "MC/all/pos/pt/its_tpc", + // "MC/el/neg/pt/its_tpc", "MC/mu/neg/pt/its_tpc", "MC/pi/neg/pt/its_tpc", + // "MC/ka/neg/pt/its_tpc", "MC/pr/neg/pt/its_tpc", "MC/de/neg/pt/its_tpc", + // "MC/tr/neg/pt/its_tpc", "MC/he/neg/pt/its_tpc", "MC/al/neg/pt/its_tpc", + // "MC/all/neg/pt/its_tpc"}; + static constexpr std::string_view hPtNumTrk[nHistograms] = {"MC/el/pos/pt/numtrk", "MC/mu/pos/pt/numtrk", "MC/pi/pos/pt/numtrk", "MC/ka/pos/pt/numtrk", "MC/pr/pos/pt/numtrk", "MC/de/pos/pt/numtrk", "MC/tr/pos/pt/numtrk", "MC/he/pos/pt/numtrk", "MC/al/pos/pt/numtrk", "MC/all/pos/pt/numtrk", @@ -109,23 +95,15 @@ struct QaEfficiency { "MC/ka/neg/pt/numtrk", "MC/pr/neg/pt/numtrk", "MC/de/neg/pt/numtrk", "MC/tr/neg/pt/numtrk", "MC/he/neg/pt/numtrk", "MC/al/neg/pt/numtrk", "MC/all/neg/pt/numtrk"}; - static constexpr std::string_view hPtNumTof[nHistograms] = {"MC/el/sum/pt/numtof", "MC/mu/sum/pt/numtof", "MC/pi/sum/pt/numtof", - "MC/ka/sum/pt/numtof", "MC/pr/sum/pt/numtof", "MC/de/sum/pt/numtof", - "MC/tr/sum/pt/numtof", "MC/he/sum/pt/numtof", "MC/al/sum/pt/numtof", - "MC/all/sum/pt/numtof", - "MC/el/pos/pt/numtof", "MC/mu/pos/pt/numtof", "MC/pi/pos/pt/numtof", + static constexpr std::string_view hPtNumTof[nHistograms] = {"MC/el/pos/pt/numtof", "MC/mu/pos/pt/numtof", "MC/pi/pos/pt/numtof", "MC/ka/pos/pt/numtof", "MC/pr/pos/pt/numtof", "MC/de/pos/pt/numtof", "MC/tr/pos/pt/numtof", "MC/he/pos/pt/numtof", "MC/al/pos/pt/numtof", "MC/all/pos/pt/numtof", - "MC/el/sum/pt/numtof", "MC/mu/sum/pt/numtof", "MC/pi/sum/pt/numtof", - "MC/ka/sum/pt/numtof", "MC/pr/sum/pt/numtof", "MC/de/sum/pt/numtof", - "MC/tr/sum/pt/numtof", "MC/he/sum/pt/numtof", "MC/al/sum/pt/numtof", - "MC/all/sum/pt/numtof"}; - static constexpr std::string_view hPtDen[nHistograms] = {"MC/el/sum/pt/den", "MC/mu/sum/pt/den", "MC/pi/sum/pt/den", - "MC/ka/sum/pt/den", "MC/pr/sum/pt/den", "MC/de/sum/pt/den", - "MC/tr/sum/pt/den", "MC/he/sum/pt/den", "MC/al/sum/pt/den", - "MC/all/sum/pt/den", - "MC/el/pos/pt/den", "MC/mu/pos/pt/den", "MC/pi/pos/pt/den", + "MC/el/neg/pt/numtof", "MC/mu/neg/pt/numtof", "MC/pi/neg/pt/numtof", + "MC/ka/neg/pt/numtof", "MC/pr/neg/pt/numtof", "MC/de/neg/pt/numtof", + "MC/tr/neg/pt/numtof", "MC/he/neg/pt/numtof", "MC/al/neg/pt/numtof", + "MC/all/neg/pt/numtof"}; + static constexpr std::string_view hPtDen[nHistograms] = {"MC/el/pos/pt/den", "MC/mu/pos/pt/den", "MC/pi/pos/pt/den", "MC/ka/pos/pt/den", "MC/pr/pos/pt/den", "MC/de/pos/pt/den", "MC/tr/pos/pt/den", "MC/he/pos/pt/den", "MC/al/pos/pt/den", "MC/all/pos/pt/den", @@ -134,11 +112,7 @@ struct QaEfficiency { "MC/tr/neg/pt/den", "MC/he/neg/pt/den", "MC/al/neg/pt/den", "MC/all/neg/pt/den"}; // Pt for primaries - static constexpr std::string_view hPtPrmNum[nHistograms] = {"MC/el/sum/prm/pt/num", "MC/mu/sum/prm/pt/num", "MC/pi/sum/prm/pt/num", - "MC/ka/sum/prm/pt/num", "MC/pr/sum/prm/pt/num", "MC/de/sum/prm/pt/num", - "MC/tr/sum/prm/pt/num", "MC/he/sum/prm/pt/num", "MC/al/sum/prm/pt/num", - "MC/all/sum/prm/pt/num", - "MC/el/pos/prm/pt/num", "MC/mu/pos/prm/pt/num", "MC/pi/pos/prm/pt/num", + static constexpr std::string_view hPtPrmNum[nHistograms] = {"MC/el/pos/prm/pt/num", "MC/mu/pos/prm/pt/num", "MC/pi/pos/prm/pt/num", "MC/ka/pos/prm/pt/num", "MC/pr/pos/prm/pt/num", "MC/de/pos/prm/pt/num", "MC/tr/pos/prm/pt/num", "MC/he/pos/prm/pt/num", "MC/al/pos/prm/pt/num", "MC/all/pos/prm/pt/num", @@ -146,11 +120,7 @@ struct QaEfficiency { "MC/ka/neg/prm/pt/num", "MC/pr/neg/prm/pt/num", "MC/de/neg/prm/pt/num", "MC/tr/neg/prm/pt/num", "MC/he/neg/prm/pt/num", "MC/al/neg/prm/pt/num", "MC/all/neg/prm/pt/num"}; - static constexpr std::string_view hPtPrmNumTrk[nHistograms] = {"MC/el/sum/prm/pt/numtrk", "MC/mu/sum/prm/pt/numtrk", "MC/pi/sum/prm/pt/numtrk", - "MC/ka/sum/prm/pt/numtrk", "MC/pr/sum/prm/pt/numtrk", "MC/de/sum/prm/pt/numtrk", - "MC/tr/sum/prm/pt/numtrk", "MC/he/sum/prm/pt/numtrk", "MC/al/sum/prm/pt/numtrk", - "MC/all/sum/prm/pt/numtrk", - "MC/el/pos/prm/pt/numtrk", "MC/mu/pos/prm/pt/numtrk", "MC/pi/pos/prm/pt/numtrk", + static constexpr std::string_view hPtPrmNumTrk[nHistograms] = {"MC/el/pos/prm/pt/numtrk", "MC/mu/pos/prm/pt/numtrk", "MC/pi/pos/prm/pt/numtrk", "MC/ka/pos/prm/pt/numtrk", "MC/pr/pos/prm/pt/numtrk", "MC/de/pos/prm/pt/numtrk", "MC/tr/pos/prm/pt/numtrk", "MC/he/pos/prm/pt/numtrk", "MC/al/pos/prm/pt/numtrk", "MC/all/pos/prm/pt/numtrk", @@ -158,11 +128,7 @@ struct QaEfficiency { "MC/ka/neg/prm/pt/numtrk", "MC/pr/neg/prm/pt/numtrk", "MC/de/neg/prm/pt/numtrk", "MC/tr/neg/prm/pt/numtrk", "MC/he/neg/prm/pt/numtrk", "MC/al/neg/prm/pt/numtrk", "MC/all/neg/prm/pt/numtrk"}; - static constexpr std::string_view hPtPrmNumTof[nHistograms] = {"MC/el/sum/prm/pt/numtof", "MC/mu/sum/prm/pt/numtof", "MC/pi/sum/prm/pt/numtof", - "MC/ka/sum/prm/pt/numtof", "MC/pr/sum/prm/pt/numtof", "MC/de/sum/prm/pt/numtof", - "MC/tr/sum/prm/pt/numtof", "MC/he/sum/prm/pt/numtof", "MC/al/sum/prm/pt/numtof", - "MC/all/sum/prm/pt/numtof", - "MC/el/pos/prm/pt/numtof", "MC/mu/pos/prm/pt/numtof", "MC/pi/pos/prm/pt/numtof", + static constexpr std::string_view hPtPrmNumTof[nHistograms] = {"MC/el/pos/prm/pt/numtof", "MC/mu/pos/prm/pt/numtof", "MC/pi/pos/prm/pt/numtof", "MC/ka/pos/prm/pt/numtof", "MC/pr/pos/prm/pt/numtof", "MC/de/pos/prm/pt/numtof", "MC/tr/pos/prm/pt/numtof", "MC/he/pos/prm/pt/numtof", "MC/al/pos/prm/pt/numtof", "MC/all/pos/prm/pt/numtof", @@ -170,11 +136,7 @@ struct QaEfficiency { "MC/ka/neg/prm/pt/numtof", "MC/pr/neg/prm/pt/numtof", "MC/de/neg/prm/pt/numtof", "MC/tr/neg/prm/pt/numtof", "MC/he/neg/prm/pt/numtof", "MC/al/neg/prm/pt/numtof", "MC/all/neg/prm/pt/numtof"}; - static constexpr std::string_view hPtPrmDen[nHistograms] = {"MC/el/sum/prm/pt/den", "MC/mu/sum/prm/pt/den", "MC/pi/sum/prm/pt/den", - "MC/ka/sum/prm/pt/den", "MC/pr/sum/prm/pt/den", "MC/de/sum/prm/pt/den", - "MC/tr/sum/prm/pt/den", "MC/he/sum/prm/pt/den", "MC/al/sum/prm/pt/den", - "MC/all/sum/prm/pt/den", - "MC/el/pos/prm/pt/den", "MC/mu/pos/prm/pt/den", "MC/pi/pos/prm/pt/den", + static constexpr std::string_view hPtPrmDen[nHistograms] = {"MC/el/pos/prm/pt/den", "MC/mu/pos/prm/pt/den", "MC/pi/pos/prm/pt/den", "MC/ka/pos/prm/pt/den", "MC/pr/pos/prm/pt/den", "MC/de/pos/prm/pt/den", "MC/tr/pos/prm/pt/den", "MC/he/pos/prm/pt/den", "MC/al/pos/prm/pt/den", "MC/all/pos/prm/pt/den", @@ -183,11 +145,7 @@ struct QaEfficiency { "MC/tr/neg/prm/pt/den", "MC/he/neg/prm/pt/den", "MC/al/neg/prm/pt/den", "MC/all/neg/prm/pt/den"}; // Pt for secondaries from weak decay - static constexpr std::string_view hPtDecNum[nHistograms] = {"MC/el/sum/dec/pt/num", "MC/mu/sum/dec/pt/num", "MC/pi/sum/dec/pt/num", - "MC/ka/sum/dec/pt/num", "MC/pr/sum/dec/pt/num", "MC/de/sum/dec/pt/num", - "MC/tr/sum/dec/pt/num", "MC/he/sum/dec/pt/num", "MC/al/sum/dec/pt/num", - "MC/all/sum/dec/pt/num", - "MC/el/pos/dec/pt/num", "MC/mu/pos/dec/pt/num", "MC/pi/pos/dec/pt/num", + static constexpr std::string_view hPtDecNum[nHistograms] = {"MC/el/pos/dec/pt/num", "MC/mu/pos/dec/pt/num", "MC/pi/pos/dec/pt/num", "MC/ka/pos/dec/pt/num", "MC/pr/pos/dec/pt/num", "MC/de/pos/dec/pt/num", "MC/tr/pos/dec/pt/num", "MC/he/pos/dec/pt/num", "MC/al/pos/dec/pt/num", "MC/all/pos/dec/pt/num", @@ -195,11 +153,7 @@ struct QaEfficiency { "MC/ka/neg/dec/pt/num", "MC/pr/neg/dec/pt/num", "MC/de/neg/dec/pt/num", "MC/tr/neg/dec/pt/num", "MC/he/neg/dec/pt/num", "MC/al/neg/dec/pt/num", "MC/all/neg/dec/pt/num"}; - static constexpr std::string_view hPtDecNumTrk[nHistograms] = {"MC/el/sum/dec/pt/numtrk", "MC/mu/sum/dec/pt/numtrk", "MC/pi/sum/dec/pt/numtrk", - "MC/ka/sum/dec/pt/numtrk", "MC/pr/sum/dec/pt/numtrk", "MC/de/sum/dec/pt/numtrk", - "MC/tr/sum/dec/pt/numtrk", "MC/he/sum/dec/pt/numtrk", "MC/al/sum/dec/pt/numtrk", - "MC/all/sum/dec/pt/numtrk", - "MC/el/pos/dec/pt/numtrk", "MC/mu/pos/dec/pt/numtrk", "MC/pi/pos/dec/pt/numtrk", + static constexpr std::string_view hPtDecNumTrk[nHistograms] = {"MC/el/pos/dec/pt/numtrk", "MC/mu/pos/dec/pt/numtrk", "MC/pi/pos/dec/pt/numtrk", "MC/ka/pos/dec/pt/numtrk", "MC/pr/pos/dec/pt/numtrk", "MC/de/pos/dec/pt/numtrk", "MC/tr/pos/dec/pt/numtrk", "MC/he/pos/dec/pt/numtrk", "MC/al/pos/dec/pt/numtrk", "MC/all/pos/dec/pt/numtrk", @@ -207,11 +161,7 @@ struct QaEfficiency { "MC/ka/neg/dec/pt/numtrk", "MC/pr/neg/dec/pt/numtrk", "MC/de/neg/dec/pt/numtrk", "MC/tr/neg/dec/pt/numtrk", "MC/he/neg/dec/pt/numtrk", "MC/al/neg/dec/pt/numtrk", "MC/all/neg/dec/pt/numtrk"}; - static constexpr std::string_view hPtDecNumTof[nHistograms] = {"MC/el/sum/dec/pt/numtof", "MC/mu/sum/dec/pt/numtof", "MC/pi/sum/dec/pt/numtof", - "MC/ka/sum/dec/pt/numtof", "MC/pr/sum/dec/pt/numtof", "MC/de/sum/dec/pt/numtof", - "MC/tr/sum/dec/pt/numtof", "MC/he/sum/dec/pt/numtof", "MC/al/sum/dec/pt/numtof", - "MC/all/sum/dec/pt/numtof", - "MC/el/pos/dec/pt/numtof", "MC/mu/pos/dec/pt/numtof", "MC/pi/pos/dec/pt/numtof", + static constexpr std::string_view hPtDecNumTof[nHistograms] = {"MC/el/pos/dec/pt/numtof", "MC/mu/pos/dec/pt/numtof", "MC/pi/pos/dec/pt/numtof", "MC/ka/pos/dec/pt/numtof", "MC/pr/pos/dec/pt/numtof", "MC/de/pos/dec/pt/numtof", "MC/tr/pos/dec/pt/numtof", "MC/he/pos/dec/pt/numtof", "MC/al/pos/dec/pt/numtof", "MC/all/pos/dec/pt/numtof", @@ -219,11 +169,7 @@ struct QaEfficiency { "MC/ka/neg/dec/pt/numtof", "MC/pr/neg/dec/pt/numtof", "MC/de/neg/dec/pt/numtof", "MC/tr/neg/dec/pt/numtof", "MC/he/neg/dec/pt/numtof", "MC/al/neg/dec/pt/numtof", "MC/all/neg/dec/pt/numtof"}; - static constexpr std::string_view hPtDecDen[nHistograms] = {"MC/el/sum/dec/pt/den", "MC/mu/sum/dec/pt/den", "MC/pi/sum/dec/pt/den", - "MC/ka/sum/dec/pt/den", "MC/pr/sum/dec/pt/den", "MC/de/sum/dec/pt/den", - "MC/tr/sum/dec/pt/den", "MC/he/sum/dec/pt/den", "MC/al/sum/dec/pt/den", - "MC/all/sum/dec/pt/den", - "MC/el/pos/dec/pt/den", "MC/mu/pos/dec/pt/den", "MC/pi/pos/dec/pt/den", + static constexpr std::string_view hPtDecDen[nHistograms] = {"MC/el/pos/dec/pt/den", "MC/mu/pos/dec/pt/den", "MC/pi/pos/dec/pt/den", "MC/ka/pos/dec/pt/den", "MC/pr/pos/dec/pt/den", "MC/de/pos/dec/pt/den", "MC/tr/pos/dec/pt/den", "MC/he/pos/dec/pt/den", "MC/al/pos/dec/pt/den", "MC/all/pos/dec/pt/den", @@ -232,11 +178,7 @@ struct QaEfficiency { "MC/tr/neg/dec/pt/den", "MC/he/neg/dec/pt/den", "MC/al/neg/dec/pt/den", "MC/all/neg/dec/pt/den"}; // Pt for secondaries from material - static constexpr std::string_view hPtMatNum[nHistograms] = {"MC/el/sum/mat/pt/num", "MC/mu/sum/mat/pt/num", "MC/pi/sum/mat/pt/num", - "MC/ka/sum/mat/pt/num", "MC/pr/sum/mat/pt/num", "MC/de/sum/mat/pt/num", - "MC/tr/sum/mat/pt/num", "MC/he/sum/mat/pt/num", "MC/al/sum/mat/pt/num", - "MC/all/sum/mat/pt/num", - "MC/el/pos/mat/pt/num", "MC/mu/pos/mat/pt/num", "MC/pi/pos/mat/pt/num", + static constexpr std::string_view hPtMatNum[nHistograms] = {"MC/el/pos/mat/pt/num", "MC/mu/pos/mat/pt/num", "MC/pi/pos/mat/pt/num", "MC/ka/pos/mat/pt/num", "MC/pr/pos/mat/pt/num", "MC/de/pos/mat/pt/num", "MC/tr/pos/mat/pt/num", "MC/he/pos/mat/pt/num", "MC/al/pos/mat/pt/num", "MC/all/pos/mat/pt/num", @@ -244,11 +186,7 @@ struct QaEfficiency { "MC/ka/neg/mat/pt/num", "MC/pr/neg/mat/pt/num", "MC/de/neg/mat/pt/num", "MC/tr/neg/mat/pt/num", "MC/he/neg/mat/pt/num", "MC/al/neg/mat/pt/num", "MC/all/neg/mat/pt/num"}; - static constexpr std::string_view hPtMatNumTrk[nHistograms] = {"MC/el/sum/mat/pt/numtrk", "MC/mu/sum/mat/pt/numtrk", "MC/pi/sum/mat/pt/numtrk", - "MC/ka/sum/mat/pt/numtrk", "MC/pr/sum/mat/pt/numtrk", "MC/de/sum/mat/pt/numtrk", - "MC/tr/sum/mat/pt/numtrk", "MC/he/sum/mat/pt/numtrk", "MC/al/sum/mat/pt/numtrk", - "MC/all/sum/mat/pt/numtrk", - "MC/el/pos/mat/pt/numtrk", "MC/mu/pos/mat/pt/numtrk", "MC/pi/pos/mat/pt/numtrk", + static constexpr std::string_view hPtMatNumTrk[nHistograms] = {"MC/el/pos/mat/pt/numtrk", "MC/mu/pos/mat/pt/numtrk", "MC/pi/pos/mat/pt/numtrk", "MC/ka/pos/mat/pt/numtrk", "MC/pr/pos/mat/pt/numtrk", "MC/de/pos/mat/pt/numtrk", "MC/tr/pos/mat/pt/numtrk", "MC/he/pos/mat/pt/numtrk", "MC/al/pos/mat/pt/numtrk", "MC/all/pos/mat/pt/numtrk", @@ -256,11 +194,7 @@ struct QaEfficiency { "MC/ka/neg/mat/pt/numtrk", "MC/pr/neg/mat/pt/numtrk", "MC/de/neg/mat/pt/numtrk", "MC/tr/neg/mat/pt/numtrk", "MC/he/neg/mat/pt/numtrk", "MC/al/neg/mat/pt/numtrk", "MC/all/neg/mat/pt/numtrk"}; - static constexpr std::string_view hPtMatNumTof[nHistograms] = {"MC/el/sum/mat/pt/numtof", "MC/mu/sum/mat/pt/numtof", "MC/pi/sum/mat/pt/numtof", - "MC/ka/sum/mat/pt/numtof", "MC/pr/sum/mat/pt/numtof", "MC/de/sum/mat/pt/numtof", - "MC/tr/sum/mat/pt/numtof", "MC/he/sum/mat/pt/numtof", "MC/al/sum/mat/pt/numtof", - "MC/all/sum/mat/pt/numtof", - "MC/el/pos/mat/pt/numtof", "MC/mu/pos/mat/pt/numtof", "MC/pi/pos/mat/pt/numtof", + static constexpr std::string_view hPtMatNumTof[nHistograms] = {"MC/el/pos/mat/pt/numtof", "MC/mu/pos/mat/pt/numtof", "MC/pi/pos/mat/pt/numtof", "MC/ka/pos/mat/pt/numtof", "MC/pr/pos/mat/pt/numtof", "MC/de/pos/mat/pt/numtof", "MC/tr/pos/mat/pt/numtof", "MC/he/pos/mat/pt/numtof", "MC/al/pos/mat/pt/numtof", "MC/all/pos/mat/pt/numtof", @@ -268,11 +202,7 @@ struct QaEfficiency { "MC/ka/neg/mat/pt/numtof", "MC/pr/neg/mat/pt/numtof", "MC/de/neg/mat/pt/numtof", "MC/tr/neg/mat/pt/numtof", "MC/he/neg/mat/pt/numtof", "MC/al/neg/mat/pt/numtof", "MC/all/neg/mat/pt/numtof"}; - static constexpr std::string_view hPtMatDen[nHistograms] = {"MC/el/sum/mat/pt/den", "MC/mu/sum/mat/pt/den", "MC/pi/sum/mat/pt/den", - "MC/ka/sum/mat/pt/den", "MC/pr/sum/mat/pt/den", "MC/de/sum/mat/pt/den", - "MC/tr/sum/mat/pt/den", "MC/he/sum/mat/pt/den", "MC/al/sum/mat/pt/den", - "MC/all/sum/mat/pt/den", - "MC/el/pos/mat/pt/den", "MC/mu/pos/mat/pt/den", "MC/pi/pos/mat/pt/den", + static constexpr std::string_view hPtMatDen[nHistograms] = {"MC/el/pos/mat/pt/den", "MC/mu/pos/mat/pt/den", "MC/pi/pos/mat/pt/den", "MC/ka/pos/mat/pt/den", "MC/pr/pos/mat/pt/den", "MC/de/pos/mat/pt/den", "MC/tr/pos/mat/pt/den", "MC/he/pos/mat/pt/den", "MC/al/pos/mat/pt/den", "MC/all/pos/mat/pt/den", @@ -281,11 +211,7 @@ struct QaEfficiency { "MC/tr/neg/mat/pt/den", "MC/he/neg/mat/pt/den", "MC/al/neg/mat/pt/den", "MC/all/neg/mat/pt/den"}; // P - static constexpr std::string_view hPNum[nHistograms] = {"MC/el/sum/p/num", "MC/mu/sum/p/num", "MC/pi/sum/p/num", - "MC/ka/sum/p/num", "MC/pr/sum/p/num", "MC/de/sum/p/num", - "MC/tr/sum/p/num", "MC/he/sum/p/num", "MC/al/sum/p/num", - "MC/all/sum/p/num", - "MC/el/pos/p/num", "MC/mu/pos/p/num", "MC/pi/pos/p/num", + static constexpr std::string_view hPNum[nHistograms] = {"MC/el/pos/p/num", "MC/mu/pos/p/num", "MC/pi/pos/p/num", "MC/ka/pos/p/num", "MC/pr/pos/p/num", "MC/de/pos/p/num", "MC/tr/pos/p/num", "MC/he/pos/p/num", "MC/al/pos/p/num", "MC/all/pos/p/num", @@ -293,11 +219,7 @@ struct QaEfficiency { "MC/ka/neg/p/num", "MC/pr/neg/p/num", "MC/de/neg/p/num", "MC/tr/neg/p/num", "MC/he/neg/p/num", "MC/al/neg/p/num", "MC/all/neg/p/num"}; - static constexpr std::string_view hPNumTrk[nHistograms] = {"MC/el/sum/p/numtrk", "MC/mu/sum/p/numtrk", "MC/pi/sum/p/numtrk", - "MC/ka/sum/p/numtrk", "MC/pr/sum/p/numtrk", "MC/de/sum/p/numtrk", - "MC/tr/sum/p/numtrk", "MC/he/sum/p/numtrk", "MC/al/sum/p/numtrk", - "MC/all/sum/p/numtrk", - "MC/el/pos/p/numtrk", "MC/mu/pos/p/numtrk", "MC/pi/pos/p/numtrk", + static constexpr std::string_view hPNumTrk[nHistograms] = {"MC/el/pos/p/numtrk", "MC/mu/pos/p/numtrk", "MC/pi/pos/p/numtrk", "MC/ka/pos/p/numtrk", "MC/pr/pos/p/numtrk", "MC/de/pos/p/numtrk", "MC/tr/pos/p/numtrk", "MC/he/pos/p/numtrk", "MC/al/pos/p/numtrk", "MC/all/pos/p/numtrk", @@ -305,23 +227,15 @@ struct QaEfficiency { "MC/ka/neg/p/numtrk", "MC/pr/neg/p/numtrk", "MC/de/neg/p/numtrk", "MC/tr/neg/p/numtrk", "MC/he/neg/p/numtrk", "MC/al/neg/p/numtrk", "MC/all/neg/p/numtrk"}; - static constexpr std::string_view hPNumTof[nHistograms] = {"MC/el/sum/p/numtof", "MC/mu/sum/p/numtof", "MC/pi/sum/p/numtof", - "MC/ka/sum/p/numtof", "MC/pr/sum/p/numtof", "MC/de/sum/p/numtof", - "MC/tr/sum/p/numtof", "MC/he/sum/p/numtof", "MC/al/sum/p/numtof", - "MC/all/sum/p/numtof", - "MC/el/pos/p/numtof", "MC/mu/pos/p/numtof", "MC/pi/pos/p/numtof", + static constexpr std::string_view hPNumTof[nHistograms] = {"MC/el/pos/p/numtof", "MC/mu/pos/p/numtof", "MC/pi/pos/p/numtof", "MC/ka/pos/p/numtof", "MC/pr/pos/p/numtof", "MC/de/pos/p/numtof", "MC/tr/pos/p/numtof", "MC/he/pos/p/numtof", "MC/al/pos/p/numtof", "MC/all/pos/p/numtof", - "MC/el/sum/p/numtof", "MC/mu/sum/p/numtof", "MC/pi/sum/p/numtof", - "MC/ka/sum/p/numtof", "MC/pr/sum/p/numtof", "MC/de/sum/p/numtof", - "MC/tr/sum/p/numtof", "MC/he/sum/p/numtof", "MC/al/sum/p/numtof", - "MC/all/sum/p/numtof"}; - static constexpr std::string_view hPDen[nHistograms] = {"MC/el/sum/p/den", "MC/mu/sum/p/den", "MC/pi/sum/p/den", - "MC/ka/sum/p/den", "MC/pr/sum/p/den", "MC/de/sum/p/den", - "MC/tr/sum/p/den", "MC/he/sum/p/den", "MC/al/sum/p/den", - "MC/all/sum/p/den", - "MC/el/pos/p/den", "MC/mu/pos/p/den", "MC/pi/pos/p/den", + "MC/el/neg/p/numtof", "MC/mu/neg/p/numtof", "MC/pi/neg/p/numtof", + "MC/ka/neg/p/numtof", "MC/pr/neg/p/numtof", "MC/de/neg/p/numtof", + "MC/tr/neg/p/numtof", "MC/he/neg/p/numtof", "MC/al/neg/p/numtof", + "MC/all/neg/p/numtof"}; + static constexpr std::string_view hPDen[nHistograms] = {"MC/el/pos/p/den", "MC/mu/pos/p/den", "MC/pi/pos/p/den", "MC/ka/pos/p/den", "MC/pr/pos/p/den", "MC/de/pos/p/den", "MC/tr/pos/p/den", "MC/he/pos/p/den", "MC/al/pos/p/den", "MC/all/pos/p/den", @@ -330,11 +244,7 @@ struct QaEfficiency { "MC/tr/neg/p/den", "MC/he/neg/p/den", "MC/al/neg/p/den", "MC/all/neg/p/den"}; // Eta - static constexpr std::string_view hEtaNum[nHistograms] = {"MC/el/sum/eta/num", "MC/mu/sum/eta/num", "MC/pi/sum/eta/num", - "MC/ka/sum/eta/num", "MC/pr/sum/eta/num", "MC/de/sum/eta/num", - "MC/tr/sum/eta/num", "MC/he/sum/eta/num", "MC/al/sum/eta/num", - "MC/all/sum/eta/num", - "MC/el/pos/eta/num", "MC/mu/pos/eta/num", "MC/pi/pos/eta/num", + static constexpr std::string_view hEtaNum[nHistograms] = {"MC/el/pos/eta/num", "MC/mu/pos/eta/num", "MC/pi/pos/eta/num", "MC/ka/pos/eta/num", "MC/pr/pos/eta/num", "MC/de/pos/eta/num", "MC/tr/pos/eta/num", "MC/he/pos/eta/num", "MC/al/pos/eta/num", "MC/all/pos/eta/num", @@ -342,11 +252,7 @@ struct QaEfficiency { "MC/ka/neg/eta/num", "MC/pr/neg/eta/num", "MC/de/neg/eta/num", "MC/tr/neg/eta/num", "MC/he/neg/eta/num", "MC/al/neg/eta/num", "MC/all/neg/eta/num"}; - static constexpr std::string_view hEtaNumTrk[nHistograms] = {"MC/el/sum/eta/numtrk", "MC/mu/sum/eta/numtrk", "MC/pi/sum/eta/numtrk", - "MC/ka/sum/eta/numtrk", "MC/pr/sum/eta/numtrk", "MC/de/sum/eta/numtrk", - "MC/tr/sum/eta/numtrk", "MC/he/sum/eta/numtrk", "MC/al/sum/eta/numtrk", - "MC/all/sum/eta/numtrk", - "MC/el/pos/eta/numtrk", "MC/mu/pos/eta/numtrk", "MC/pi/pos/eta/numtrk", + static constexpr std::string_view hEtaNumTrk[nHistograms] = {"MC/el/pos/eta/numtrk", "MC/mu/pos/eta/numtrk", "MC/pi/pos/eta/numtrk", "MC/ka/pos/eta/numtrk", "MC/pr/pos/eta/numtrk", "MC/de/pos/eta/numtrk", "MC/tr/pos/eta/numtrk", "MC/he/pos/eta/numtrk", "MC/al/pos/eta/numtrk", "MC/all/pos/eta/numtrk", @@ -354,23 +260,15 @@ struct QaEfficiency { "MC/ka/neg/eta/numtrk", "MC/pr/neg/eta/numtrk", "MC/de/neg/eta/numtrk", "MC/tr/neg/eta/numtrk", "MC/he/neg/eta/numtrk", "MC/al/neg/eta/numtrk", "MC/all/neg/eta/numtrk"}; - static constexpr std::string_view hEtaNumTof[nHistograms] = {"MC/el/sum/eta/numtof", "MC/mu/sum/eta/numtof", "MC/pi/sum/eta/numtof", - "MC/ka/sum/eta/numtof", "MC/pr/sum/eta/numtof", "MC/de/sum/eta/numtof", - "MC/tr/sum/eta/numtof", "MC/he/sum/eta/numtof", "MC/al/sum/eta/numtof", - "MC/all/sum/eta/numtof", - "MC/el/pos/eta/numtof", "MC/mu/pos/eta/numtof", "MC/pi/pos/eta/numtof", + static constexpr std::string_view hEtaNumTof[nHistograms] = {"MC/el/pos/eta/numtof", "MC/mu/pos/eta/numtof", "MC/pi/pos/eta/numtof", "MC/ka/pos/eta/numtof", "MC/pr/pos/eta/numtof", "MC/de/pos/eta/numtof", "MC/tr/pos/eta/numtof", "MC/he/pos/eta/numtof", "MC/al/pos/eta/numtof", "MC/all/pos/eta/numtof", - "MC/el/sum/eta/numtof", "MC/mu/sum/eta/numtof", "MC/pi/sum/eta/numtof", - "MC/ka/sum/eta/numtof", "MC/pr/sum/eta/numtof", "MC/de/sum/eta/numtof", - "MC/tr/sum/eta/numtof", "MC/he/sum/eta/numtof", "MC/al/sum/eta/numtof", - "MC/all/sum/eta/numtof"}; - static constexpr std::string_view hEtaDen[nHistograms] = {"MC/el/sum/eta/den", "MC/mu/sum/eta/den", "MC/pi/sum/eta/den", - "MC/ka/sum/eta/den", "MC/pr/sum/eta/den", "MC/de/sum/eta/den", - "MC/tr/sum/eta/den", "MC/he/sum/eta/den", "MC/al/sum/eta/den", - "MC/all/sum/eta/den", - "MC/el/pos/eta/den", "MC/mu/pos/eta/den", "MC/pi/pos/eta/den", + "MC/el/neg/eta/numtof", "MC/mu/neg/eta/numtof", "MC/pi/neg/eta/numtof", + "MC/ka/neg/eta/numtof", "MC/pr/neg/eta/numtof", "MC/de/neg/eta/numtof", + "MC/tr/neg/eta/numtof", "MC/he/neg/eta/numtof", "MC/al/neg/eta/numtof", + "MC/all/neg/eta/numtof"}; + static constexpr std::string_view hEtaDen[nHistograms] = {"MC/el/pos/eta/den", "MC/mu/pos/eta/den", "MC/pi/pos/eta/den", "MC/ka/pos/eta/den", "MC/pr/pos/eta/den", "MC/de/pos/eta/den", "MC/tr/pos/eta/den", "MC/he/pos/eta/den", "MC/al/pos/eta/den", "MC/all/pos/eta/den", @@ -379,11 +277,7 @@ struct QaEfficiency { "MC/tr/neg/eta/den", "MC/he/neg/eta/den", "MC/al/neg/eta/den", "MC/all/neg/eta/den"}; // Y - static constexpr std::string_view hYNum[nHistograms] = {"MC/el/sum/y/num", "MC/mu/sum/y/num", "MC/pi/sum/y/num", - "MC/ka/sum/y/num", "MC/pr/sum/y/num", "MC/de/sum/y/num", - "MC/tr/sum/y/num", "MC/he/sum/y/num", "MC/al/sum/y/num", - "MC/all/sum/y/num", - "MC/el/pos/y/num", "MC/mu/pos/y/num", "MC/pi/pos/y/num", + static constexpr std::string_view hYNum[nHistograms] = {"MC/el/pos/y/num", "MC/mu/pos/y/num", "MC/pi/pos/y/num", "MC/ka/pos/y/num", "MC/pr/pos/y/num", "MC/de/pos/y/num", "MC/tr/pos/y/num", "MC/he/pos/y/num", "MC/al/pos/y/num", "MC/all/pos/y/num", @@ -391,23 +285,15 @@ struct QaEfficiency { "MC/ka/neg/y/num", "MC/pr/neg/y/num", "MC/de/neg/y/num", "MC/tr/neg/y/num", "MC/he/neg/y/num", "MC/al/neg/y/num", "MC/all/neg/y/num"}; - static constexpr std::string_view hYNumTof[nHistograms] = {"MC/el/sum/y/numtof", "MC/mu/sum/y/numtof", "MC/pi/sum/y/numtof", - "MC/ka/sum/y/numtof", "MC/pr/sum/y/numtof", "MC/de/sum/y/numtof", - "MC/tr/sum/y/numtof", "MC/he/sum/y/numtof", "MC/al/sum/y/numtof", - "MC/all/sum/y/numtof", - "MC/el/pos/y/numtof", "MC/mu/pos/y/numtof", "MC/pi/pos/y/numtof", + static constexpr std::string_view hYNumTof[nHistograms] = {"MC/el/pos/y/numtof", "MC/mu/pos/y/numtof", "MC/pi/pos/y/numtof", "MC/ka/pos/y/numtof", "MC/pr/pos/y/numtof", "MC/de/pos/y/numtof", "MC/tr/pos/y/numtof", "MC/he/pos/y/numtof", "MC/al/pos/y/numtof", "MC/all/pos/y/numtof", - "MC/el/sum/y/numtof", "MC/mu/sum/y/numtof", "MC/pi/sum/y/numtof", - "MC/ka/sum/y/numtof", "MC/pr/sum/y/numtof", "MC/de/sum/y/numtof", - "MC/tr/sum/y/numtof", "MC/he/sum/y/numtof", "MC/al/sum/y/numtof", - "MC/all/sum/y/numtof"}; - static constexpr std::string_view hYDen[nHistograms] = {"MC/el/sum/y/den", "MC/mu/sum/y/den", "MC/pi/sum/y/den", - "MC/ka/sum/y/den", "MC/pr/sum/y/den", "MC/de/sum/y/den", - "MC/tr/sum/y/den", "MC/he/sum/y/den", "MC/al/sum/y/den", - "MC/all/sum/y/den", - "MC/el/pos/y/den", "MC/mu/pos/y/den", "MC/pi/pos/y/den", + "MC/el/neg/y/numtof", "MC/mu/neg/y/numtof", "MC/pi/neg/y/numtof", + "MC/ka/neg/y/numtof", "MC/pr/neg/y/numtof", "MC/de/neg/y/numtof", + "MC/tr/neg/y/numtof", "MC/he/neg/y/numtof", "MC/al/neg/y/numtof", + "MC/all/neg/y/numtof"}; + static constexpr std::string_view hYDen[nHistograms] = {"MC/el/pos/y/den", "MC/mu/pos/y/den", "MC/pi/pos/y/den", "MC/ka/pos/y/den", "MC/pr/pos/y/den", "MC/de/pos/y/den", "MC/tr/pos/y/den", "MC/he/pos/y/den", "MC/al/pos/y/den", "MC/all/pos/y/den", @@ -416,11 +302,7 @@ struct QaEfficiency { "MC/tr/neg/y/den", "MC/he/neg/y/den", "MC/al/neg/y/den", "MC/all/neg/y/den"}; // Phi - static constexpr std::string_view hPhiNum[nHistograms] = {"MC/el/sum/phi/num", "MC/mu/sum/phi/num", "MC/pi/sum/phi/num", - "MC/ka/sum/phi/num", "MC/pr/sum/phi/num", "MC/de/sum/phi/num", - "MC/tr/sum/phi/num", "MC/he/sum/phi/num", "MC/al/sum/phi/num", - "MC/all/sum/phi/num", - "MC/el/pos/phi/num", "MC/mu/pos/phi/num", "MC/pi/pos/phi/num", + static constexpr std::string_view hPhiNum[nHistograms] = {"MC/el/pos/phi/num", "MC/mu/pos/phi/num", "MC/pi/pos/phi/num", "MC/ka/pos/phi/num", "MC/pr/pos/phi/num", "MC/de/pos/phi/num", "MC/tr/pos/phi/num", "MC/he/pos/phi/num", "MC/al/pos/phi/num", "MC/all/pos/phi/num", @@ -428,11 +310,7 @@ struct QaEfficiency { "MC/ka/neg/phi/num", "MC/pr/neg/phi/num", "MC/de/neg/phi/num", "MC/tr/neg/phi/num", "MC/he/neg/phi/num", "MC/al/neg/phi/num", "MC/all/neg/phi/num"}; - static constexpr std::string_view hPhiNumTrk[nHistograms] = {"MC/el/sum/phi/numtrk", "MC/mu/sum/phi/numtrk", "MC/pi/sum/phi/numtrk", - "MC/ka/sum/phi/numtrk", "MC/pr/sum/phi/numtrk", "MC/de/sum/phi/numtrk", - "MC/tr/sum/phi/numtrk", "MC/he/sum/phi/numtrk", "MC/al/sum/phi/numtrk", - "MC/all/sum/phi/numtrk", - "MC/el/pos/phi/numtrk", "MC/mu/pos/phi/numtrk", "MC/pi/pos/phi/numtrk", + static constexpr std::string_view hPhiNumTrk[nHistograms] = {"MC/el/pos/phi/numtrk", "MC/mu/pos/phi/numtrk", "MC/pi/pos/phi/numtrk", "MC/ka/pos/phi/numtrk", "MC/pr/pos/phi/numtrk", "MC/de/pos/phi/numtrk", "MC/tr/pos/phi/numtrk", "MC/he/pos/phi/numtrk", "MC/al/pos/phi/numtrk", "MC/all/pos/phi/numtrk", @@ -440,23 +318,15 @@ struct QaEfficiency { "MC/ka/neg/phi/numtrk", "MC/pr/neg/phi/numtrk", "MC/de/neg/phi/numtrk", "MC/tr/neg/phi/numtrk", "MC/he/neg/phi/numtrk", "MC/al/neg/phi/numtrk", "MC/all/neg/phi/numtrk"}; - static constexpr std::string_view hPhiNumTof[nHistograms] = {"MC/el/sum/phi/numtof", "MC/mu/sum/phi/numtof", "MC/pi/sum/phi/numtof", - "MC/ka/sum/phi/numtof", "MC/pr/sum/phi/numtof", "MC/de/sum/phi/numtof", - "MC/tr/sum/phi/numtof", "MC/he/sum/phi/numtof", "MC/al/sum/phi/numtof", - "MC/all/sum/phi/numtof", - "MC/el/pos/phi/numtof", "MC/mu/pos/phi/numtof", "MC/pi/pos/phi/numtof", + static constexpr std::string_view hPhiNumTof[nHistograms] = {"MC/el/pos/phi/numtof", "MC/mu/pos/phi/numtof", "MC/pi/pos/phi/numtof", "MC/ka/pos/phi/numtof", "MC/pr/pos/phi/numtof", "MC/de/pos/phi/numtof", "MC/tr/pos/phi/numtof", "MC/he/pos/phi/numtof", "MC/al/pos/phi/numtof", "MC/all/pos/phi/numtof", - "MC/el/sum/phi/numtof", "MC/mu/sum/phi/numtof", "MC/pi/sum/phi/numtof", - "MC/ka/sum/phi/numtof", "MC/pr/sum/phi/numtof", "MC/de/sum/phi/numtof", - "MC/tr/sum/phi/numtof", "MC/he/sum/phi/numtof", "MC/al/sum/phi/numtof", - "MC/all/sum/phi/numtof"}; - static constexpr std::string_view hPhiDen[nHistograms] = {"MC/el/sum/phi/den", "MC/mu/sum/phi/den", "MC/pi/sum/phi/den", - "MC/ka/sum/phi/den", "MC/pr/sum/phi/den", "MC/de/sum/phi/den", - "MC/tr/sum/phi/den", "MC/he/sum/phi/den", "MC/al/sum/phi/den", - "MC/all/sum/phi/den", - "MC/el/pos/phi/den", "MC/mu/pos/phi/den", "MC/pi/pos/phi/den", + "MC/el/neg/phi/numtof", "MC/mu/neg/phi/numtof", "MC/pi/neg/phi/numtof", + "MC/ka/neg/phi/numtof", "MC/pr/neg/phi/numtof", "MC/de/neg/phi/numtof", + "MC/tr/neg/phi/numtof", "MC/he/neg/phi/numtof", "MC/al/neg/phi/numtof", + "MC/all/neg/phi/numtof"}; + static constexpr std::string_view hPhiDen[nHistograms] = {"MC/el/pos/phi/den", "MC/mu/pos/phi/den", "MC/pi/pos/phi/den", "MC/ka/pos/phi/den", "MC/pr/pos/phi/den", "MC/de/pos/phi/den", "MC/tr/pos/phi/den", "MC/he/pos/phi/den", "MC/al/pos/phi/den", "MC/all/pos/phi/den", @@ -465,11 +335,7 @@ struct QaEfficiency { "MC/tr/neg/phi/den", "MC/he/neg/phi/den", "MC/al/neg/phi/den", "MC/all/neg/phi/den"}; // Pt-Eta - static constexpr std::string_view hPtEtaNum[nHistograms] = {"MC/el/sum/pteta/num", "MC/mu/sum/pteta/num", "MC/pi/sum/pteta/num", - "MC/ka/sum/pteta/num", "MC/pr/sum/pteta/num", "MC/de/sum/pteta/num", - "MC/tr/sum/pteta/num", "MC/he/sum/pteta/num", "MC/al/sum/pteta/num", - "MC/all/sum/pteta/num", - "MC/el/pos/pteta/num", "MC/mu/pos/pteta/num", "MC/pi/pos/pteta/num", + static constexpr std::string_view hPtEtaNum[nHistograms] = {"MC/el/pos/pteta/num", "MC/mu/pos/pteta/num", "MC/pi/pos/pteta/num", "MC/ka/pos/pteta/num", "MC/pr/pos/pteta/num", "MC/de/pos/pteta/num", "MC/tr/pos/pteta/num", "MC/he/pos/pteta/num", "MC/al/pos/pteta/num", "MC/all/pos/pteta/num", @@ -477,11 +343,7 @@ struct QaEfficiency { "MC/ka/neg/pteta/num", "MC/pr/neg/pteta/num", "MC/de/neg/pteta/num", "MC/tr/neg/pteta/num", "MC/he/neg/pteta/num", "MC/al/neg/pteta/num", "MC/all/neg/pteta/num"}; - static constexpr std::string_view hPtEtaNumTrk[nHistograms] = {"MC/el/sum/pteta/numtrk", "MC/mu/sum/pteta/numtrk", "MC/pi/sum/pteta/numtrk", - "MC/ka/sum/pteta/numtrk", "MC/pr/sum/pteta/numtrk", "MC/de/sum/pteta/numtrk", - "MC/tr/sum/pteta/numtrk", "MC/he/sum/pteta/numtrk", "MC/al/sum/pteta/numtrk", - "MC/all/sum/pteta/numtrk", - "MC/el/pos/pteta/numtrk", "MC/mu/pos/pteta/numtrk", "MC/pi/pos/pteta/numtrk", + static constexpr std::string_view hPtEtaNumTrk[nHistograms] = {"MC/el/pos/pteta/numtrk", "MC/mu/pos/pteta/numtrk", "MC/pi/pos/pteta/numtrk", "MC/ka/pos/pteta/numtrk", "MC/pr/pos/pteta/numtrk", "MC/de/pos/pteta/numtrk", "MC/tr/pos/pteta/numtrk", "MC/he/pos/pteta/numtrk", "MC/al/pos/pteta/numtrk", "MC/all/pos/pteta/numtrk", @@ -489,23 +351,15 @@ struct QaEfficiency { "MC/ka/neg/pteta/numtrk", "MC/pr/neg/pteta/numtrk", "MC/de/neg/pteta/numtrk", "MC/tr/neg/pteta/numtrk", "MC/he/neg/pteta/numtrk", "MC/al/neg/pteta/numtrk", "MC/all/neg/pteta/numtrk"}; - static constexpr std::string_view hPtEtaNumTof[nHistograms] = {"MC/el/sum/pteta/numtof", "MC/mu/sum/pteta/numtof", "MC/pi/sum/pteta/numtof", - "MC/ka/sum/pteta/numtof", "MC/pr/sum/pteta/numtof", "MC/de/sum/pteta/numtof", - "MC/tr/sum/pteta/numtof", "MC/he/sum/pteta/numtof", "MC/al/sum/pteta/numtof", - "MC/all/sum/pteta/numtof", - "MC/el/pos/pteta/numtof", "MC/mu/pos/pteta/numtof", "MC/pi/pos/pteta/numtof", + static constexpr std::string_view hPtEtaNumTof[nHistograms] = {"MC/el/pos/pteta/numtof", "MC/mu/pos/pteta/numtof", "MC/pi/pos/pteta/numtof", "MC/ka/pos/pteta/numtof", "MC/pr/pos/pteta/numtof", "MC/de/pos/pteta/numtof", "MC/tr/pos/pteta/numtof", "MC/he/pos/pteta/numtof", "MC/al/pos/pteta/numtof", "MC/all/pos/pteta/numtof", - "MC/el/sum/pteta/numtof", "MC/mu/sum/pteta/numtof", "MC/pi/sum/pteta/numtof", - "MC/ka/sum/pteta/numtof", "MC/pr/sum/pteta/numtof", "MC/de/sum/pteta/numtof", - "MC/tr/sum/pteta/numtof", "MC/he/sum/pteta/numtof", "MC/al/sum/pteta/numtof", - "MC/all/sum/pteta/numtof"}; - static constexpr std::string_view hPtEtaDen[nHistograms] = {"MC/el/sum/pteta/den", "MC/mu/sum/pteta/den", "MC/pi/sum/pteta/den", - "MC/ka/sum/pteta/den", "MC/pr/sum/pteta/den", "MC/de/sum/pteta/den", - "MC/tr/sum/pteta/den", "MC/he/sum/pteta/den", "MC/al/sum/pteta/den", - "MC/all/sum/pteta/den", - "MC/el/pos/pteta/den", "MC/mu/pos/pteta/den", "MC/pi/pos/pteta/den", + "MC/el/neg/pteta/numtof", "MC/mu/neg/pteta/numtof", "MC/pi/neg/pteta/numtof", + "MC/ka/neg/pteta/numtof", "MC/pr/neg/pteta/numtof", "MC/de/neg/pteta/numtof", + "MC/tr/neg/pteta/numtof", "MC/he/neg/pteta/numtof", "MC/al/neg/pteta/numtof", + "MC/all/neg/pteta/numtof"}; + static constexpr std::string_view hPtEtaDen[nHistograms] = {"MC/el/pos/pteta/den", "MC/mu/pos/pteta/den", "MC/pi/pos/pteta/den", "MC/ka/pos/pteta/den", "MC/pr/pos/pteta/den", "MC/de/pos/pteta/den", "MC/tr/pos/pteta/den", "MC/he/pos/pteta/den", "MC/al/pos/pteta/den", "MC/all/pos/pteta/den", @@ -520,15 +374,15 @@ struct QaEfficiency { if (!doMakeHistograms) { return; } - AxisSpec axisPt{ptBins, ptMin, ptMax, "#it{p}_{T} (GeV/#it{c})"}; - AxisSpec axisP{ptBins, ptMin, ptMax, "#it{p} (GeV/#it{c})"}; + AxisSpec axisPt{ptBins, "#it{p}_{T} (GeV/#it{c})"}; + AxisSpec axisP{ptBins, "#it{p} (GeV/#it{c})"}; if (logPt) { axisPt.makeLogarithmic(); axisP.makeLogarithmic(); } - const AxisSpec axisEta{etaBins, etaMin, etaMax, "#it{#eta}"}; - const AxisSpec axisY{yBins, yMin, yMax, "#it{y}"}; - const AxisSpec axisPhi{phiBins, phiMin, phiMax, "#it{#varphi} (rad)"}; + const AxisSpec axisEta{etaBins, "#it{#eta}"}; + const AxisSpec axisY{yBins, "#it{y}"}; + const AxisSpec axisPhi{phiBins, "#it{#varphi} (rad)"}; const char* partName = id == o2::track::PID::NIDs ? "All" : o2::track::PID::getName(id); LOG(debug) << "Preparing histograms for particle: " << partName; @@ -603,18 +457,19 @@ struct QaEfficiency { histos.add(hPhiNumTof[histogramIndex].data(), "Numerator TOF " + tagPhi, kTH1D, {axisPhi}); histos.add(hPhiDen[histogramIndex].data(), "Denominator " + tagPhi, kTH1D, {axisPhi}); - histos.add(hPtEtaNum[histogramIndex].data(), "Numerator " + tagPtEta, kTH2D, {axisPt, axisEta}); - histos.add(hPtEtaDen[histogramIndex].data(), "Denominator " + tagPtEta, kTH2D, {axisPt, axisEta}); + if (doPtEta) { + histos.add(hPtEtaNum[histogramIndex].data(), "Numerator " + tagPtEta, kTH2D, {axisPt, axisEta}); + histos.add(hPtEtaNumTrk[histogramIndex].data(), "Numerator Track " + tagPtEta, kTH2D, {axisPt, axisEta}); + histos.add(hPtEtaNumTof[histogramIndex].data(), "Numerator TOF " + tagPtEta, kTH2D, {axisPt, axisEta}); + histos.add(hPtEtaDen[histogramIndex].data(), "Denominator " + tagPtEta, kTH2D, {axisPt, axisEta}); + } }; - if (doSumPDG) { // Sum - makeHistogramsPerCharge(0); - } if (doPositivePDG) { // Positive - makeHistogramsPerCharge(1); + makeHistogramsPerCharge(0); } if (doNegativePDG) { // Negative - makeHistogramsPerCharge(2); + makeHistogramsPerCharge(1); } if (makeEff && doSumPDG) { @@ -659,7 +514,9 @@ struct QaEfficiency { subList->Add(new TEfficiency(effname, efftitle, axisX->GetNbins(), axisX->GetXmin(), axisX->GetXmax(), axisY->GetNbins(), axisY->GetXmin(), axisY->GetXmax())); } }; - makeEfficiency2D("efficiencyVsPtVsEta", HIST(hPtEtaNum[id])); + if (doPtEta) { + makeEfficiency2D("efficiencyVsPtVsEta", HIST(hPtEtaNum[id])); + } } LOG(debug) << "Done with particle: " << partName; } @@ -756,70 +613,54 @@ struct QaEfficiency { histos.add("Data/trackLength", "Track length;Track length (cm)", kTH1D, {{2000, -1000, 1000}}); // ITS-TPC-TOF - histos.add("Data/sum/pt/its_tpc_tof", "ITS-TPC-TOF " + tagPt, kTH1D, {axisPt}); histos.add("Data/pos/pt/its_tpc_tof", "ITS-TPC-TOF Positive " + tagPt, kTH1D, {axisPt}); histos.add("Data/neg/pt/its_tpc_tof", "ITS-TPC-TOF Negative " + tagPt, kTH1D, {axisPt}); - histos.add("Data/sum/eta/its_tpc_tof", "ITS-TPC-TOF " + tagEta, kTH1D, {axisEta}); histos.add("Data/pos/eta/its_tpc_tof", "ITS-TPC-TOF Positive " + tagEta, kTH1D, {axisEta}); histos.add("Data/neg/eta/its_tpc_tof", "ITS-TPC-TOF Negative " + tagEta, kTH1D, {axisEta}); - histos.add("Data/sum/phi/its_tpc_tof", "ITS-TPC-TOF " + tagPhi, kTH1D, {axisPhi}); histos.add("Data/pos/phi/its_tpc_tof", "ITS-TPC-TOF Positive " + tagPhi, kTH1D, {axisPhi}); histos.add("Data/neg/phi/its_tpc_tof", "ITS-TPC-TOF Negative " + tagPhi, kTH1D, {axisPhi}); - histos.add("Data/sum/etaphi/its_tpc_tof", "ITS-TPC-TOF " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/pos/etaphi/its_tpc_tof", "ITS-TPC-TOF Positive " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/neg/etaphi/its_tpc_tof", "ITS-TPC-TOF Negative " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); // ITS-TPC - histos.add("Data/sum/pt/its_tpc", "ITS-TPC " + tagPt, kTH1D, {axisPt}); histos.add("Data/pos/pt/its_tpc", "ITS-TPC Positive " + tagPt, kTH1D, {axisPt}); histos.add("Data/neg/pt/its_tpc", "ITS-TPC Negative " + tagPt, kTH1D, {axisPt}); - histos.add("Data/sum/eta/its_tpc", "ITS-TPC " + tagEta, kTH1D, {axisEta}); histos.add("Data/pos/eta/its_tpc", "ITS-TPC Positive " + tagEta, kTH1D, {axisEta}); histos.add("Data/neg/eta/its_tpc", "ITS-TPC Negative " + tagEta, kTH1D, {axisEta}); - histos.add("Data/sum/phi/its_tpc", "ITS-TPC " + tagPhi, kTH1D, {axisPhi}); histos.add("Data/pos/phi/its_tpc", "ITS-TPC Positive " + tagPhi, kTH1D, {axisPhi}); histos.add("Data/neg/phi/its_tpc", "ITS-TPC Negative " + tagPhi, kTH1D, {axisPhi}); - histos.add("Data/sum/etaphi/its_tpc", "ITS-TPC " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/pos/etaphi/its_tpc", "ITS-TPC Positive " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/neg/etaphi/its_tpc", "ITS-TPC Negative " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); // TPC - histos.add("Data/sum/pt/tpc", "TPC " + tagPt, kTH1D, {axisPt}); histos.add("Data/pos/pt/tpc", "TPC Positive " + tagPt, kTH1D, {axisPt}); histos.add("Data/neg/pt/tpc", "TPC Negative " + tagPt, kTH1D, {axisPt}); - histos.add("Data/sum/eta/tpc", "TPC " + tagEta, kTH1D, {axisEta}); histos.add("Data/pos/eta/tpc", "TPC Positive " + tagEta, kTH1D, {axisEta}); histos.add("Data/neg/eta/tpc", "TPC Negative " + tagEta, kTH1D, {axisEta}); - histos.add("Data/sum/phi/tpc", "TPC " + tagPhi, kTH1D, {axisPhi}); histos.add("Data/pos/phi/tpc", "TPC Positive " + tagPhi, kTH1D, {axisPhi}); histos.add("Data/neg/phi/tpc", "TPC Negative " + tagPhi, kTH1D, {axisPhi}); - histos.add("Data/sum/etaphi/tpc", "TPC " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/pos/etaphi/tpc", "TPC Positive " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/neg/etaphi/tpc", "TPC Negative " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); // ITS - histos.add("Data/sum/pt/its", "ITS " + tagPt, kTH1D, {axisPt}); histos.add("Data/pos/pt/its", "ITS Positive " + tagPt, kTH1D, {axisPt}); histos.add("Data/neg/pt/its", "ITS Negative " + tagPt, kTH1D, {axisPt}); - histos.add("Data/sum/eta/its", "ITS " + tagEta, kTH1D, {axisEta}); histos.add("Data/pos/eta/its", "ITS Positive " + tagEta, kTH1D, {axisEta}); histos.add("Data/neg/eta/its", "ITS Negative " + tagEta, kTH1D, {axisEta}); - histos.add("Data/sum/phi/its", "ITS " + tagPhi, kTH1D, {axisPhi}); histos.add("Data/pos/phi/its", "ITS Positive " + tagPhi, kTH1D, {axisPhi}); histos.add("Data/neg/phi/its", "ITS Negative " + tagPhi, kTH1D, {axisPhi}); - histos.add("Data/sum/etaphi/its", "ITS " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/pos/etaphi/its", "ITS Positive " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/neg/etaphi/its", "ITS Negative " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); @@ -870,51 +711,39 @@ struct QaEfficiency { template bool isPdgSelected(particleType mcParticle) { - static_assert(pdgSign == 0 || pdgSign == 1 || pdgSign == 2); + static_assert(pdgSign == 0 || pdgSign == 1); + // Selecting PDG code - if constexpr (PDGs[id] == 0) { + if constexpr (PDGs[id] == 0) { // All PDGs if constexpr (pdgSign == 0) { - return true; - } else if constexpr (pdgSign == 1) { - return mcParticle.pdgCode() > 0; - } - if constexpr (pdgSign == 2) { - return mcParticle.pdgCode() < 0; + return mcParticle.pdgCode() > 0; // Positive + } else { + return mcParticle.pdgCode() < 0; // Negative } } + // Specific PDGs if constexpr (pdgSign == 0) { - if (abs(mcParticle.pdgCode()) != PDGs[id]) { - return false; - } - } else if constexpr (pdgSign == 1) { - if (mcParticle.pdgCode() != PDGs[id]) { - return false; - } - } else if constexpr (pdgSign == 2) { - if (mcParticle.pdgCode() != -PDGs[id]) { - return false; - } + return mcParticle.pdgCode() == PDGs[id]; + } else { + return mcParticle.pdgCode() == -PDGs[id]; } - return true; } template void fillMCTrackHistograms(const trackType& track) { - static_assert(pdgSign == 0 || pdgSign == 1 || pdgSign == 2); + static_assert(pdgSign == 0 || pdgSign == 1); + if constexpr (pdgSign == 0) { - if (!doSumPDG) { - return; - } - } else if constexpr (pdgSign == 1) { if (!doPositivePDG) { return; } - } else if constexpr (pdgSign == 2) { + } else { if (!doNegativePDG) { return; } } + constexpr int histogramIndex = id + pdgSign * nSpecies; LOG(debug) << "Filling track histograms for id " << static_cast(id); const auto mcParticle = track.mcParticle(); @@ -930,7 +759,9 @@ struct QaEfficiency { histos.fill(HIST(hEtaNum[histogramIndex]), mcParticle.eta()); histos.fill(HIST(hYNum[histogramIndex]), mcParticle.y()); histos.fill(HIST(hPhiNum[histogramIndex]), mcParticle.phi()); - histos.fill(HIST(hPtEtaNum[histogramIndex]), mcParticle.pt(), mcParticle.eta()); + if (doPtEta) { + histos.fill(HIST(hPtEtaNum[histogramIndex]), mcParticle.pt(), mcParticle.eta()); + } histos.fill(HIST(hPNumTrk[histogramIndex]), track.p()); histos.fill(HIST(hPtNumTrk[histogramIndex]), track.pt()); @@ -971,20 +802,17 @@ struct QaEfficiency { template void fillMCParticleHistograms(const particleType& mcParticle) { - static_assert(pdgSign == 0 || pdgSign == 1 || pdgSign == 2); + static_assert(pdgSign == 0 || pdgSign == 1); if constexpr (pdgSign == 0) { - if (!doSumPDG) { - return; - } - } else if constexpr (pdgSign == 1) { if (!doPositivePDG) { return; } - } else if constexpr (pdgSign == 2) { + } else { if (!doNegativePDG) { return; } } + constexpr int histogramIndex = id + pdgSign * nSpecies; LOG(debug) << "Filling particle histograms for id " << static_cast(id); if (!isPdgSelected(mcParticle)) { // Selecting PDG code @@ -1008,18 +836,30 @@ struct QaEfficiency { histos.fill(HIST(hEtaDen[histogramIndex]), mcParticle.eta()); histos.fill(HIST(hYDen[histogramIndex]), mcParticle.y()); histos.fill(HIST(hPhiDen[histogramIndex]), mcParticle.phi()); - histos.fill(HIST(hPtEtaDen[histogramIndex]), mcParticle.pt(), mcParticle.eta()); + if (doPtEta) { + histos.fill(HIST(hPtEtaDen[histogramIndex]), mcParticle.pt(), mcParticle.eta()); + } } - template + template void fillMCEfficiency() { - if (!makeEff) { - return; + static_assert(pdgSign == 0 || pdgSign == 1); + if constexpr (pdgSign == 0) { + if (!doPositivePDG) { + return; + } + } else { + if (!doNegativePDG) { + return; + } } - if (!doSumPDG) { + if (!makeEff) { return; } + + constexpr int histogramIndex = id + pdgSign * nSpecies; + const char* partName = id == o2::track::PID::NIDs ? "All" : o2::track::PID::getName(id); LOG(debug) << "Filling efficiency for particle " << static_cast(id) << " " << partName; TList* subList = static_cast(listEfficiencyMC->FindObject(partName)); @@ -1028,6 +868,7 @@ struct QaEfficiency { return; } + // Filling 1D efficiencies auto doFillEfficiency = [&](TString effname, auto num, auto den) { effname = partName + effname; TEfficiency* eff = static_cast(subList->FindObject(effname)); @@ -1039,13 +880,19 @@ struct QaEfficiency { eff->SetPassedHistogram(*histos.get(num).get(), "f"); }; - doFillEfficiency("efficiencyVsPt", HIST(hPtNum[id]), HIST(hPtDen[id])); - doFillEfficiency("efficiencyVsPtPrm", HIST(hPtPrmNum[id]), HIST(hPtPrmDen[id])); - doFillEfficiency("efficiencyVsPtDec", HIST(hPtDecNum[id]), HIST(hPtDecDen[id])); - doFillEfficiency("efficiencyVsPtMat", HIST(hPtMatNum[id]), HIST(hPtMatDen[id])); - doFillEfficiency("efficiencyVsP", HIST(hPNum[id]), HIST(hPDen[id])); - doFillEfficiency("efficiencyVsEta", HIST(hEtaNum[id]), HIST(hEtaDen[id])); - doFillEfficiency("efficiencyVsPhi", HIST(hPhiNum[id]), HIST(hPhiDen[id])); + doFillEfficiency("efficiencyVsPt", HIST(hPtNum[histogramIndex]), HIST(hPtDen[histogramIndex])); + doFillEfficiency("efficiencyVsPtPrm", HIST(hPtPrmNum[histogramIndex]), HIST(hPtPrmDen[histogramIndex])); + doFillEfficiency("efficiencyVsPtDec", HIST(hPtDecNum[histogramIndex]), HIST(hPtDecDen[histogramIndex])); + doFillEfficiency("efficiencyVsPtMat", HIST(hPtMatNum[histogramIndex]), HIST(hPtMatDen[histogramIndex])); + doFillEfficiency("efficiencyVsP", HIST(hPNum[histogramIndex]), HIST(hPDen[histogramIndex])); + doFillEfficiency("efficiencyVsEta", HIST(hEtaNum[histogramIndex]), HIST(hEtaDen[histogramIndex])); + doFillEfficiency("efficiencyVsPhi", HIST(hPhiNum[histogramIndex]), HIST(hPhiDen[histogramIndex])); + + if (!doPtEta) { + return; + } + + // Filling 2D efficiencies auto fillEfficiency2D = [&](TString effname, auto num, auto den) { effname = partName + effname; TEfficiency* eff = static_cast(subList->FindObject(effname)); @@ -1056,7 +903,7 @@ struct QaEfficiency { eff->SetTotalHistogram(*histos.get(den).get(), "f"); eff->SetPassedHistogram(*histos.get(num).get(), "f"); }; - fillEfficiency2D("efficiencyVsPtVsEta", HIST(hPtEtaNum[id]), HIST(hPtEtaDen[id])); + fillEfficiency2D("efficiencyVsPtVsEta", HIST(hPtEtaNum[histogramIndex]), HIST(hPtEtaDen[histogramIndex])); } template @@ -1111,6 +958,8 @@ struct QaEfficiency { return track.isQualityTrack(); case 5: return track.isInAcceptanceTrack(); + default: + LOG(fatal) << "Can't interpret track asked selection"; } return false; } @@ -1199,52 +1048,42 @@ struct QaEfficiency { if (doEl) { fillMCTrackHistograms<0, o2::track::PID::Electron>(track); fillMCTrackHistograms<1, o2::track::PID::Electron>(track); - fillMCTrackHistograms<2, o2::track::PID::Electron>(track); } if (doMu) { fillMCTrackHistograms<0, o2::track::PID::Muon>(track); fillMCTrackHistograms<1, o2::track::PID::Muon>(track); - fillMCTrackHistograms<2, o2::track::PID::Muon>(track); } if (doPi) { fillMCTrackHistograms<0, o2::track::PID::Pion>(track); fillMCTrackHistograms<1, o2::track::PID::Pion>(track); - fillMCTrackHistograms<2, o2::track::PID::Pion>(track); } if (doKa) { fillMCTrackHistograms<0, o2::track::PID::Kaon>(track); fillMCTrackHistograms<1, o2::track::PID::Kaon>(track); - fillMCTrackHistograms<2, o2::track::PID::Kaon>(track); } if (doPr) { fillMCTrackHistograms<0, o2::track::PID::Proton>(track); fillMCTrackHistograms<1, o2::track::PID::Proton>(track); - fillMCTrackHistograms<2, o2::track::PID::Proton>(track); } if (doDe) { fillMCTrackHistograms<0, o2::track::PID::Deuteron>(track); fillMCTrackHistograms<1, o2::track::PID::Deuteron>(track); - fillMCTrackHistograms<2, o2::track::PID::Deuteron>(track); } if (doTr) { fillMCTrackHistograms<0, o2::track::PID::Triton>(track); fillMCTrackHistograms<1, o2::track::PID::Triton>(track); - fillMCTrackHistograms<2, o2::track::PID::Triton>(track); } if (doHe) { fillMCTrackHistograms<0, o2::track::PID::Helium3>(track); fillMCTrackHistograms<1, o2::track::PID::Helium3>(track); - fillMCTrackHistograms<2, o2::track::PID::Helium3>(track); } if (doAl) { fillMCTrackHistograms<0, o2::track::PID::Alpha>(track); fillMCTrackHistograms<1, o2::track::PID::Alpha>(track); - fillMCTrackHistograms<2, o2::track::PID::Alpha>(track); } if (doUnId) { fillMCTrackHistograms<0, o2::track::PID::NIDs>(track); fillMCTrackHistograms<1, o2::track::PID::NIDs>(track); - fillMCTrackHistograms<2, o2::track::PID::NIDs>(track); } } @@ -1260,52 +1099,42 @@ struct QaEfficiency { if (doEl) { fillMCParticleHistograms<0, o2::track::PID::Electron>(mcParticle); fillMCParticleHistograms<1, o2::track::PID::Electron>(mcParticle); - fillMCParticleHistograms<2, o2::track::PID::Electron>(mcParticle); } if (doMu) { fillMCParticleHistograms<0, o2::track::PID::Muon>(mcParticle); fillMCParticleHistograms<1, o2::track::PID::Muon>(mcParticle); - fillMCParticleHistograms<2, o2::track::PID::Muon>(mcParticle); } if (doPi) { fillMCParticleHistograms<0, o2::track::PID::Pion>(mcParticle); fillMCParticleHistograms<1, o2::track::PID::Pion>(mcParticle); - fillMCParticleHistograms<2, o2::track::PID::Pion>(mcParticle); } if (doKa) { fillMCParticleHistograms<0, o2::track::PID::Kaon>(mcParticle); fillMCParticleHistograms<1, o2::track::PID::Kaon>(mcParticle); - fillMCParticleHistograms<2, o2::track::PID::Kaon>(mcParticle); } if (doPr) { fillMCParticleHistograms<0, o2::track::PID::Proton>(mcParticle); fillMCParticleHistograms<1, o2::track::PID::Proton>(mcParticle); - fillMCParticleHistograms<2, o2::track::PID::Proton>(mcParticle); } if (doDe) { fillMCParticleHistograms<0, o2::track::PID::Deuteron>(mcParticle); fillMCParticleHistograms<1, o2::track::PID::Deuteron>(mcParticle); - fillMCParticleHistograms<2, o2::track::PID::Deuteron>(mcParticle); } if (doTr) { fillMCParticleHistograms<0, o2::track::PID::Triton>(mcParticle); fillMCParticleHistograms<1, o2::track::PID::Triton>(mcParticle); - fillMCParticleHistograms<2, o2::track::PID::Triton>(mcParticle); } if (doHe) { fillMCParticleHistograms<0, o2::track::PID::Helium3>(mcParticle); fillMCParticleHistograms<1, o2::track::PID::Helium3>(mcParticle); - fillMCParticleHistograms<2, o2::track::PID::Helium3>(mcParticle); } if (doAl) { fillMCParticleHistograms<0, o2::track::PID::Alpha>(mcParticle); fillMCParticleHistograms<1, o2::track::PID::Alpha>(mcParticle); - fillMCParticleHistograms<2, o2::track::PID::Alpha>(mcParticle); } if (doUnId) { fillMCParticleHistograms<0, o2::track::PID::NIDs>(mcParticle); fillMCParticleHistograms<1, o2::track::PID::NIDs>(mcParticle); - fillMCParticleHistograms<2, o2::track::PID::NIDs>(mcParticle); } } histos.fill(HIST("MC/eventMultiplicity"), dNdEta * 0.5f / 2.f); From 5fd77b68522bd6e6e838ade1a36ce0921e531cf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Tue, 4 Oct 2022 22:51:10 +0200 Subject: [PATCH 02/14] U --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 126 ++++++++++++---------------- 1 file changed, 52 insertions(+), 74 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index 922203f47c1..2193b4fdf5c 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -79,14 +79,14 @@ struct QaEfficiency { HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; static constexpr int nHistograms = nSpecies * 2; // Pt - // static constexpr std::string_view hPt_ITS_TPC[nHistograms] = {"MC/el/pos/pt/its_tpc", "MC/mu/pos/pt/its_tpc", "MC/pi/pos/pt/its_tpc", - // "MC/ka/pos/pt/its_tpc", "MC/pr/pos/pt/its_tpc", "MC/de/pos/pt/its_tpc", - // "MC/tr/pos/pt/its_tpc", "MC/he/pos/pt/its_tpc", "MC/al/pos/pt/its_tpc", - // "MC/all/pos/pt/its_tpc", - // "MC/el/neg/pt/its_tpc", "MC/mu/neg/pt/its_tpc", "MC/pi/neg/pt/its_tpc", - // "MC/ka/neg/pt/its_tpc", "MC/pr/neg/pt/its_tpc", "MC/de/neg/pt/its_tpc", - // "MC/tr/neg/pt/its_tpc", "MC/he/neg/pt/its_tpc", "MC/al/neg/pt/its_tpc", - // "MC/all/neg/pt/its_tpc"}; + static constexpr std::string_view hPt_ITS_TPC[nHistograms] = {"MC/el/pos/pt/its_tpc", "MC/mu/pos/pt/its_tpc", "MC/pi/pos/pt/its_tpc", + "MC/ka/pos/pt/its_tpc", "MC/pr/pos/pt/its_tpc", "MC/de/pos/pt/its_tpc", + "MC/tr/pos/pt/its_tpc", "MC/he/pos/pt/its_tpc", "MC/al/pos/pt/its_tpc", + "MC/all/pos/pt/its_tpc", + "MC/el/neg/pt/its_tpc", "MC/mu/neg/pt/its_tpc", "MC/pi/neg/pt/its_tpc", + "MC/ka/neg/pt/its_tpc", "MC/pr/neg/pt/its_tpc", "MC/de/neg/pt/its_tpc", + "MC/tr/neg/pt/its_tpc", "MC/he/neg/pt/its_tpc", "MC/al/neg/pt/its_tpc", + "MC/all/neg/pt/its_tpc"}; static constexpr std::string_view hPtNumTrk[nHistograms] = {"MC/el/pos/pt/numtrk", "MC/mu/pos/pt/numtrk", "MC/pi/pos/pt/numtrk", "MC/ka/pos/pt/numtrk", "MC/pr/pos/pt/numtrk", "MC/de/pos/pt/numtrk", "MC/tr/pos/pt/numtrk", "MC/he/pos/pt/numtrk", "MC/al/pos/pt/numtrk", @@ -472,7 +472,7 @@ struct QaEfficiency { makeHistogramsPerCharge(1); } - if (makeEff && doSumPDG) { + if (makeEff) { LOG(debug) << "Making TEfficiency for MC"; TList* subList = new TList(); subList->SetName(partName); @@ -684,14 +684,14 @@ struct QaEfficiency { listEfficiencyData->Add(new TEfficiency(effname, efftitle, axisX->GetNbins(), axisX->GetXmin(), axisX->GetXmax(), axisY->GetNbins(), axisY->GetXmin(), axisY->GetXmax())); } }; - makeEfficiency("ITSTPCMatchingEfficiencyVsPt", "ITS-TPC M.E. in data " + tagPt + ";#it{p}_{T} (GeV/#it{c});Efficiency", HIST("Data/sum/pt/its_tpc_tof")); - makeEfficiency("TPCTOFMatchingEfficiencyVsPt", "TPC-TOF M.E. in data " + tagPt + ";#it{p}_{T} (GeV/#it{c});Efficiency", HIST("Data/sum/pt/its_tpc_tof")); - makeEfficiency("TPCTOFMatchingEfficiencyVsP", "TPC-TOF M.E. in data " + tagPt + ";#it{p} (GeV/#it{c});Efficiency", HIST("Data/sum/pt/its_tpc_tof")); - makeEfficiency("TPCTOFMatchingEfficiencyVsEta", "TPC-TOF M.E. in data " + tagEta + ";#it{#eta};Efficiency", HIST("Data/sum/eta/its_tpc_tof")); - makeEfficiency("TPCTOFMatchingEfficiencyVsPhi", "TPC-TOF M.E. in data " + tagPhi + ";#it{#varphi} (rad);Efficiency", HIST("Data/sum/phi/its_tpc_tof")); - - makeEfficiency2D("TPCTOFMatchingEfficiencyVsPtVsEta", Form("TPC-TOF M.E. in data #it{#varphi} [%.2f,%.2f];%s;%s;Efficiency", phiMin.value, phiMax.value, "#it{p}_{T} (GeV/#it{c})", "#it{#eta}"), HIST("Data/sum/pt/its_tpc_tof"), HIST("Data/sum/eta/its_tpc_tof")); - makeEfficiency2D("TPCTOFMatchingEfficiencyVsPtVsPhi", Form("TPC-TOF M.E. in data #it{#eta} [%.2f,%.2f];%s;%s;Efficiency", etaMin.value, etaMax.value, "#it{p}_{T} (GeV/#it{c})", "#it{#varphi} (rad)"), HIST("Data/sum/pt/its_tpc_tof"), HIST("Data/sum/phi/its_tpc_tof")); + makeEfficiency("ITSTPCMatchingEfficiencyVsPt", "ITS-TPC M.E. in data " + tagPt + ";#it{p}_{T} (GeV/#it{c});Efficiency", HIST("Data/pos/pt/its_tpc_tof")); + makeEfficiency("TPCTOFMatchingEfficiencyVsPt", "TPC-TOF M.E. in data " + tagPt + ";#it{p}_{T} (GeV/#it{c});Efficiency", HIST("Data/pos/pt/its_tpc_tof")); + makeEfficiency("TPCTOFMatchingEfficiencyVsP", "TPC-TOF M.E. in data " + tagPt + ";#it{p} (GeV/#it{c});Efficiency", HIST("Data/pos/pt/its_tpc_tof")); + makeEfficiency("TPCTOFMatchingEfficiencyVsEta", "TPC-TOF M.E. in data " + tagEta + ";#it{#eta};Efficiency", HIST("Data/pos/eta/its_tpc_tof")); + makeEfficiency("TPCTOFMatchingEfficiencyVsPhi", "TPC-TOF M.E. in data " + tagPhi + ";#it{#varphi} (rad);Efficiency", HIST("Data/pos/phi/its_tpc_tof")); + + makeEfficiency2D("TPCTOFMatchingEfficiencyVsPtVsEta", Form("TPC-TOF M.E. in data #it{#varphi} [%.2f,%.2f];%s;%s;Efficiency", phiMin.value, phiMax.value, "#it{p}_{T} (GeV/#it{c})", "#it{#eta}"), HIST("Data/pos/pt/its_tpc_tof"), HIST("Data/pos/eta/its_tpc_tof")); + makeEfficiency2D("TPCTOFMatchingEfficiencyVsPtVsPhi", Form("TPC-TOF M.E. in data #it{#eta} [%.2f,%.2f];%s;%s;Efficiency", etaMin.value, etaMax.value, "#it{p}_{T} (GeV/#it{c})", "#it{#varphi} (rad)"), HIST("Data/pos/pt/its_tpc_tof"), HIST("Data/pos/phi/its_tpc_tof")); } } @@ -1245,79 +1245,57 @@ struct QaEfficiency { histos.fill(HIST("Data/trackLength"), track.length()); if (passedITSCuts) { - histos.fill(HIST("Data/sum/pt/its"), track.pt()); - histos.fill(HIST("Data/sum/eta/its"), track.eta()); - histos.fill(HIST("Data/sum/phi/its"), track.phi()); - histos.fill(HIST("Data/sum/etaphi/its"), track.eta(), track.phi()); - } - if (passedTPCCuts) { - histos.fill(HIST("Data/sum/pt/tpc"), track.pt()); - histos.fill(HIST("Data/sum/eta/tpc"), track.eta()); - histos.fill(HIST("Data/sum/phi/tpc"), track.phi()); - histos.fill(HIST("Data/sum/etaphi/tpc"), track.eta(), track.phi()); - } - if (passedITSCuts && passedTPCCuts) { - histos.fill(HIST("Data/sum/pt/its_tpc"), track.pt()); - histos.fill(HIST("Data/sum/eta/its_tpc"), track.eta()); - histos.fill(HIST("Data/sum/phi/its_tpc"), track.phi()); - histos.fill(HIST("Data/sum/etaphi/its_tpc"), track.eta(), track.phi()); - } - if (passedITSCuts && passedTPCCuts && track.hasTOF()) { - histos.fill(HIST("Data/sum/pt/its_tpc_tof"), track.pt()); - histos.fill(HIST("Data/sum/eta/its_tpc_tof"), track.eta()); - histos.fill(HIST("Data/sum/phi/its_tpc_tof"), track.phi()); - histos.fill(HIST("Data/sum/etaphi/its_tpc_tof"), track.eta(), track.phi()); - } - - if (track.sign() > 0) { - if (passedITSCuts) { + if (track.sign() > 0) { histos.fill(HIST("Data/pos/pt/its"), track.pt()); histos.fill(HIST("Data/pos/eta/its"), track.eta()); histos.fill(HIST("Data/pos/phi/its"), track.phi()); histos.fill(HIST("Data/pos/etaphi/its"), track.eta(), track.phi()); - } - if (passedTPCCuts) { - histos.fill(HIST("Data/pos/pt/tpc"), track.pt()); - histos.fill(HIST("Data/pos/eta/tpc"), track.eta()); - histos.fill(HIST("Data/pos/phi/tpc"), track.phi()); - histos.fill(HIST("Data/pos/etaphi/tpc"), track.eta(), track.phi()); - } - if (passedITSCuts && passedTPCCuts) { - histos.fill(HIST("Data/pos/pt/its_tpc"), track.pt()); - histos.fill(HIST("Data/pos/eta/its_tpc"), track.eta()); - histos.fill(HIST("Data/pos/phi/its_tpc"), track.phi()); - histos.fill(HIST("Data/pos/etaphi/its_tpc"), track.eta(), track.phi()); - } - if (track.hasITS() && passedTPCCuts && track.hasTOF()) { - histos.fill(HIST("Data/pos/pt/its_tpc_tof"), track.pt()); - histos.fill(HIST("Data/pos/eta/its_tpc_tof"), track.eta()); - histos.fill(HIST("Data/pos/phi/its_tpc_tof"), track.phi()); - histos.fill(HIST("Data/pos/etaphi/its_tpc_tof"), track.eta(), track.phi()); - } - } else { - if (passedITSCuts) { + } else { histos.fill(HIST("Data/neg/pt/its"), track.pt()); histos.fill(HIST("Data/neg/eta/its"), track.eta()); histos.fill(HIST("Data/neg/phi/its"), track.phi()); histos.fill(HIST("Data/neg/etaphi/its"), track.eta(), track.phi()); } - if (passedTPCCuts) { + } + if (passedTPCCuts) { + if (track.sign() > 0) { + histos.fill(HIST("Data/pos/pt/tpc"), track.pt()); + histos.fill(HIST("Data/pos/eta/tpc"), track.eta()); + histos.fill(HIST("Data/pos/phi/tpc"), track.phi()); + histos.fill(HIST("Data/pos/etaphi/tpc"), track.eta(), track.phi()); + } else { histos.fill(HIST("Data/neg/pt/tpc"), track.pt()); histos.fill(HIST("Data/neg/eta/tpc"), track.eta()); histos.fill(HIST("Data/neg/phi/tpc"), track.phi()); histos.fill(HIST("Data/neg/etaphi/tpc"), track.eta(), track.phi()); } + if (passedITSCuts && passedTPCCuts) { - histos.fill(HIST("Data/neg/pt/its_tpc"), track.pt()); - histos.fill(HIST("Data/neg/eta/its_tpc"), track.eta()); - histos.fill(HIST("Data/neg/phi/its_tpc"), track.phi()); - histos.fill(HIST("Data/neg/etaphi/its_tpc"), track.eta(), track.phi()); + if (track.sign() > 0) { + histos.fill(HIST("Data/pos/pt/its_tpc"), track.pt()); + histos.fill(HIST("Data/pos/eta/its_tpc"), track.eta()); + histos.fill(HIST("Data/pos/phi/its_tpc"), track.phi()); + histos.fill(HIST("Data/pos/etaphi/its_tpc"), track.eta(), track.phi()); + } else { + histos.fill(HIST("Data/neg/pt/its_tpc"), track.pt()); + histos.fill(HIST("Data/neg/eta/its_tpc"), track.eta()); + histos.fill(HIST("Data/neg/phi/its_tpc"), track.phi()); + histos.fill(HIST("Data/neg/etaphi/its_tpc"), track.eta(), track.phi()); + } } - if (passedITSCuts && passedTPCCuts && track.hasTOF()) { - histos.fill(HIST("Data/neg/pt/its_tpc_tof"), track.pt()); - histos.fill(HIST("Data/neg/eta/its_tpc_tof"), track.eta()); - histos.fill(HIST("Data/neg/phi/its_tpc_tof"), track.phi()); - histos.fill(HIST("Data/neg/etaphi/its_tpc_tof"), track.eta(), track.phi()); + + if (track.hasITS() && passedTPCCuts && track.hasTOF()) { + if (track.sign() > 0) { + histos.fill(HIST("Data/pos/pt/its_tpc_tof"), track.pt()); + histos.fill(HIST("Data/pos/eta/its_tpc_tof"), track.eta()); + histos.fill(HIST("Data/pos/phi/its_tpc_tof"), track.phi()); + histos.fill(HIST("Data/pos/etaphi/its_tpc_tof"), track.eta(), track.phi()); + } else { + histos.fill(HIST("Data/neg/pt/its_tpc_tof"), track.pt()); + histos.fill(HIST("Data/neg/eta/its_tpc_tof"), track.eta()); + histos.fill(HIST("Data/neg/phi/its_tpc_tof"), track.phi()); + histos.fill(HIST("Data/neg/etaphi/its_tpc_tof"), track.eta(), track.phi()); + } } } From a9b3b5a6864411ba44cbbb0909bdbf9544fe2d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Wed, 5 Oct 2022 11:52:14 +0200 Subject: [PATCH 03/14] Update efficiency --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 1256 +++++++++++++++------------ 1 file changed, 686 insertions(+), 570 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index 2193b4fdf5c..d66299d2ac4 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -39,9 +39,7 @@ struct QaEfficiency { static constexpr const char* particleTitle[nSpecies] = {"e", "#mu", "#pi", "K", "p", "d", "t", "^{3}He", "#alpha", "All"}; static constexpr int PDGs[nSpecies] = {kElectron, kMuonMinus, kPiPlus, kKPlus, kProton, 1000010020, 1000010030, 1000020030, 1000020040, 0}; // Track/particle selection - Configurable yMin{"y-min", -0.5f, "Lower limit in y"}; - Configurable yMax{"y-max", 0.5f, "Upper limit in y"}; - Configurable noFakes{"noFakes", false, "Flag to reject tracks that have fake hits"}; + Configurable noFakesHits{"noFakesHits", false, "Flag to reject tracks that have fake hits"}; // Charge selection Configurable doPositivePDG{"doPositivePDG", false, "Flag to fill histograms for positive PDG codes."}; Configurable doNegativePDG{"doNegativePDG", false, "Flag to fill histograms for negative PDG codes."}; @@ -78,295 +76,330 @@ struct QaEfficiency { // Histograms HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; static constexpr int nHistograms = nSpecies * 2; + // Pt - static constexpr std::string_view hPt_ITS_TPC[nHistograms] = {"MC/el/pos/pt/its_tpc", "MC/mu/pos/pt/its_tpc", "MC/pi/pos/pt/its_tpc", - "MC/ka/pos/pt/its_tpc", "MC/pr/pos/pt/its_tpc", "MC/de/pos/pt/its_tpc", - "MC/tr/pos/pt/its_tpc", "MC/he/pos/pt/its_tpc", "MC/al/pos/pt/its_tpc", - "MC/all/pos/pt/its_tpc", - "MC/el/neg/pt/its_tpc", "MC/mu/neg/pt/its_tpc", "MC/pi/neg/pt/its_tpc", - "MC/ka/neg/pt/its_tpc", "MC/pr/neg/pt/its_tpc", "MC/de/neg/pt/its_tpc", - "MC/tr/neg/pt/its_tpc", "MC/he/neg/pt/its_tpc", "MC/al/neg/pt/its_tpc", - "MC/all/neg/pt/its_tpc"}; - static constexpr std::string_view hPtNumTrk[nHistograms] = {"MC/el/pos/pt/numtrk", "MC/mu/pos/pt/numtrk", "MC/pi/pos/pt/numtrk", - "MC/ka/pos/pt/numtrk", "MC/pr/pos/pt/numtrk", "MC/de/pos/pt/numtrk", - "MC/tr/pos/pt/numtrk", "MC/he/pos/pt/numtrk", "MC/al/pos/pt/numtrk", - "MC/all/pos/pt/numtrk", - "MC/el/neg/pt/numtrk", "MC/mu/neg/pt/numtrk", "MC/pi/neg/pt/numtrk", - "MC/ka/neg/pt/numtrk", "MC/pr/neg/pt/numtrk", "MC/de/neg/pt/numtrk", - "MC/tr/neg/pt/numtrk", "MC/he/neg/pt/numtrk", "MC/al/neg/pt/numtrk", - "MC/all/neg/pt/numtrk"}; - static constexpr std::string_view hPtNumTof[nHistograms] = {"MC/el/pos/pt/numtof", "MC/mu/pos/pt/numtof", "MC/pi/pos/pt/numtof", - "MC/ka/pos/pt/numtof", "MC/pr/pos/pt/numtof", "MC/de/pos/pt/numtof", - "MC/tr/pos/pt/numtof", "MC/he/pos/pt/numtof", "MC/al/pos/pt/numtof", - "MC/all/pos/pt/numtof", - "MC/el/neg/pt/numtof", "MC/mu/neg/pt/numtof", "MC/pi/neg/pt/numtof", - "MC/ka/neg/pt/numtof", "MC/pr/neg/pt/numtof", "MC/de/neg/pt/numtof", - "MC/tr/neg/pt/numtof", "MC/he/neg/pt/numtof", "MC/al/neg/pt/numtof", - "MC/all/neg/pt/numtof"}; - static constexpr std::string_view hPtDen[nHistograms] = {"MC/el/pos/pt/den", "MC/mu/pos/pt/den", "MC/pi/pos/pt/den", - "MC/ka/pos/pt/den", "MC/pr/pos/pt/den", "MC/de/pos/pt/den", - "MC/tr/pos/pt/den", "MC/he/pos/pt/den", "MC/al/pos/pt/den", - "MC/all/pos/pt/den", - "MC/el/neg/pt/den", "MC/mu/neg/pt/den", "MC/pi/neg/pt/den", - "MC/ka/neg/pt/den", "MC/pr/neg/pt/den", "MC/de/neg/pt/den", - "MC/tr/neg/pt/den", "MC/he/neg/pt/den", "MC/al/neg/pt/den", - "MC/all/neg/pt/den"}; + static constexpr std::string_view hPtIts[nHistograms] = {"MC/el/pos/pt/its", "MC/mu/pos/pt/its", "MC/pi/pos/pt/its", + "MC/ka/pos/pt/its", "MC/pr/pos/pt/its", "MC/de/pos/pt/its", + "MC/tr/pos/pt/its", "MC/he/pos/pt/its", "MC/al/pos/pt/its", + "MC/all/pos/pt/its", + "MC/el/neg/pt/its", "MC/mu/neg/pt/its", "MC/pi/neg/pt/its", + "MC/ka/neg/pt/its", "MC/pr/neg/pt/its", "MC/de/neg/pt/its", + "MC/tr/neg/pt/its", "MC/he/neg/pt/its", "MC/al/neg/pt/its", + "MC/all/neg/pt/its"}; + static constexpr std::string_view hPtTpc[nHistograms] = {"MC/el/pos/pt/tpc", "MC/mu/pos/pt/tpc", "MC/pi/pos/pt/tpc", + "MC/ka/pos/pt/tpc", "MC/pr/pos/pt/tpc", "MC/de/pos/pt/tpc", + "MC/tr/pos/pt/tpc", "MC/he/pos/pt/tpc", "MC/al/pos/pt/tpc", + "MC/all/pos/pt/tpc", + "MC/el/neg/pt/tpc", "MC/mu/neg/pt/tpc", "MC/pi/neg/pt/tpc", + "MC/ka/neg/pt/tpc", "MC/pr/neg/pt/tpc", "MC/de/neg/pt/tpc", + "MC/tr/neg/pt/tpc", "MC/he/neg/pt/tpc", "MC/al/neg/pt/tpc", + "MC/all/neg/pt/tpc"}; + static constexpr std::string_view hPtItsTpc[nHistograms] = {"MC/el/pos/pt/its_tpc", "MC/mu/pos/pt/its_tpc", "MC/pi/pos/pt/its_tpc", + "MC/ka/pos/pt/its_tpc", "MC/pr/pos/pt/its_tpc", "MC/de/pos/pt/its_tpc", + "MC/tr/pos/pt/its_tpc", "MC/he/pos/pt/its_tpc", "MC/al/pos/pt/its_tpc", + "MC/all/pos/pt/its_tpc", + "MC/el/neg/pt/its_tpc", "MC/mu/neg/pt/its_tpc", "MC/pi/neg/pt/its_tpc", + "MC/ka/neg/pt/its_tpc", "MC/pr/neg/pt/its_tpc", "MC/de/neg/pt/its_tpc", + "MC/tr/neg/pt/its_tpc", "MC/he/neg/pt/its_tpc", "MC/al/neg/pt/its_tpc", + "MC/all/neg/pt/its_tpc"}; + static constexpr std::string_view hPtItsTof[nHistograms] = {"MC/el/pos/pt/its_tof", "MC/mu/pos/pt/its_tof", "MC/pi/pos/pt/its_tof", + "MC/ka/pos/pt/its_tof", "MC/pr/pos/pt/its_tof", "MC/de/pos/pt/its_tof", + "MC/tr/pos/pt/its_tof", "MC/he/pos/pt/its_tof", "MC/al/pos/pt/its_tof", + "MC/all/pos/pt/its_tof", + "MC/el/neg/pt/its_tof", "MC/mu/neg/pt/its_tof", "MC/pi/neg/pt/its_tof", + "MC/ka/neg/pt/its_tof", "MC/pr/neg/pt/its_tof", "MC/de/neg/pt/its_tof", + "MC/tr/neg/pt/its_tof", "MC/he/neg/pt/its_tof", "MC/al/neg/pt/its_tof", + "MC/all/neg/pt/its_tof"}; + static constexpr std::string_view hPtTpcTof[nHistograms] = {"MC/el/pos/pt/tpc_tof", "MC/mu/pos/pt/tpc_tof", "MC/pi/pos/pt/tpc_tof", + "MC/ka/pos/pt/tpc_tof", "MC/pr/pos/pt/tpc_tof", "MC/de/pos/pt/tpc_tof", + "MC/tr/pos/pt/tpc_tof", "MC/he/pos/pt/tpc_tof", "MC/al/pos/pt/tpc_tof", + "MC/all/pos/pt/tpc_tof", + "MC/el/neg/pt/tpc_tof", "MC/mu/neg/pt/tpc_tof", "MC/pi/neg/pt/tpc_tof", + "MC/ka/neg/pt/tpc_tof", "MC/pr/neg/pt/tpc_tof", "MC/de/neg/pt/tpc_tof", + "MC/tr/neg/pt/tpc_tof", "MC/he/neg/pt/tpc_tof", "MC/al/neg/pt/tpc_tof", + "MC/all/neg/pt/tpc_tof"}; + static constexpr std::string_view hPtItsTpcTof[nHistograms] = {"MC/el/pos/pt/its_tpc_tof", "MC/mu/pos/pt/its_tpc_tof", "MC/pi/pos/pt/its_tpc_tof", + "MC/ka/pos/pt/its_tpc_tof", "MC/pr/pos/pt/its_tpc_tof", "MC/de/pos/pt/its_tpc_tof", + "MC/tr/pos/pt/its_tpc_tof", "MC/he/pos/pt/its_tpc_tof", "MC/al/pos/pt/its_tpc_tof", + "MC/all/pos/pt/its_tpc_tof", + "MC/el/neg/pt/its_tpc_tof", "MC/mu/neg/pt/its_tpc_tof", "MC/pi/neg/pt/its_tpc_tof", + "MC/ka/neg/pt/its_tpc_tof", "MC/pr/neg/pt/its_tpc_tof", "MC/de/neg/pt/its_tpc_tof", + "MC/tr/neg/pt/its_tpc_tof", "MC/he/neg/pt/its_tpc_tof", "MC/al/neg/pt/its_tpc_tof", + "MC/all/neg/pt/its_tpc_tof"}; + static constexpr std::string_view hPtTrkItsTpc[nHistograms] = {"MC/el/pos/pt/its_tpc/trk", "MC/mu/pos/pt/its_tpc/trk", "MC/pi/pos/pt/its_tpc/trk", + "MC/ka/pos/pt/its_tpc/trk", "MC/pr/pos/pt/its_tpc/trk", "MC/de/pos/pt/its_tpc/trk", + "MC/tr/pos/pt/its_tpc/trk", "MC/he/pos/pt/its_tpc/trk", "MC/al/pos/pt/its_tpc/trk", + "MC/all/pos/pt/its_tpc/trk", + "MC/el/neg/pt/its_tpc/trk", "MC/mu/neg/pt/its_tpc/trk", "MC/pi/neg/pt/its_tpc/trk", + "MC/ka/neg/pt/its_tpc/trk", "MC/pr/neg/pt/its_tpc/trk", "MC/de/neg/pt/its_tpc/trk", + "MC/tr/neg/pt/its_tpc/trk", "MC/he/neg/pt/its_tpc/trk", "MC/al/neg/pt/its_tpc/trk", + "MC/all/neg/pt/its_tpc/trk"}; + static constexpr std::string_view hPtGenerated[nHistograms] = {"MC/el/pos/pt/generated", "MC/mu/pos/pt/generated", "MC/pi/pos/pt/generated", + "MC/ka/pos/pt/generated", "MC/pr/pos/pt/generated", "MC/de/pos/pt/generated", + "MC/tr/pos/pt/generated", "MC/he/pos/pt/generated", "MC/al/pos/pt/generated", + "MC/all/pos/pt/generated", + "MC/el/neg/pt/generated", "MC/mu/neg/pt/generated", "MC/pi/neg/pt/generated", + "MC/ka/neg/pt/generated", "MC/pr/neg/pt/generated", "MC/de/neg/pt/generated", + "MC/tr/neg/pt/generated", "MC/he/neg/pt/generated", "MC/al/neg/pt/generated", + "MC/all/neg/pt/generated"}; // Pt for primaries - static constexpr std::string_view hPtPrmNum[nHistograms] = {"MC/el/pos/prm/pt/num", "MC/mu/pos/prm/pt/num", "MC/pi/pos/prm/pt/num", - "MC/ka/pos/prm/pt/num", "MC/pr/pos/prm/pt/num", "MC/de/pos/prm/pt/num", - "MC/tr/pos/prm/pt/num", "MC/he/pos/prm/pt/num", "MC/al/pos/prm/pt/num", - "MC/all/pos/prm/pt/num", - "MC/el/neg/prm/pt/num", "MC/mu/neg/prm/pt/num", "MC/pi/neg/prm/pt/num", - "MC/ka/neg/prm/pt/num", "MC/pr/neg/prm/pt/num", "MC/de/neg/prm/pt/num", - "MC/tr/neg/prm/pt/num", "MC/he/neg/prm/pt/num", "MC/al/neg/prm/pt/num", - "MC/all/neg/prm/pt/num"}; - static constexpr std::string_view hPtPrmNumTrk[nHistograms] = {"MC/el/pos/prm/pt/numtrk", "MC/mu/pos/prm/pt/numtrk", "MC/pi/pos/prm/pt/numtrk", - "MC/ka/pos/prm/pt/numtrk", "MC/pr/pos/prm/pt/numtrk", "MC/de/pos/prm/pt/numtrk", - "MC/tr/pos/prm/pt/numtrk", "MC/he/pos/prm/pt/numtrk", "MC/al/pos/prm/pt/numtrk", - "MC/all/pos/prm/pt/numtrk", - "MC/el/neg/prm/pt/numtrk", "MC/mu/neg/prm/pt/numtrk", "MC/pi/neg/prm/pt/numtrk", - "MC/ka/neg/prm/pt/numtrk", "MC/pr/neg/prm/pt/numtrk", "MC/de/neg/prm/pt/numtrk", - "MC/tr/neg/prm/pt/numtrk", "MC/he/neg/prm/pt/numtrk", "MC/al/neg/prm/pt/numtrk", - "MC/all/neg/prm/pt/numtrk"}; - static constexpr std::string_view hPtPrmNumTof[nHistograms] = {"MC/el/pos/prm/pt/numtof", "MC/mu/pos/prm/pt/numtof", "MC/pi/pos/prm/pt/numtof", - "MC/ka/pos/prm/pt/numtof", "MC/pr/pos/prm/pt/numtof", "MC/de/pos/prm/pt/numtof", - "MC/tr/pos/prm/pt/numtof", "MC/he/pos/prm/pt/numtof", "MC/al/pos/prm/pt/numtof", - "MC/all/pos/prm/pt/numtof", - "MC/el/neg/prm/pt/numtof", "MC/mu/neg/prm/pt/numtof", "MC/pi/neg/prm/pt/numtof", - "MC/ka/neg/prm/pt/numtof", "MC/pr/neg/prm/pt/numtof", "MC/de/neg/prm/pt/numtof", - "MC/tr/neg/prm/pt/numtof", "MC/he/neg/prm/pt/numtof", "MC/al/neg/prm/pt/numtof", - "MC/all/neg/prm/pt/numtof"}; - static constexpr std::string_view hPtPrmDen[nHistograms] = {"MC/el/pos/prm/pt/den", "MC/mu/pos/prm/pt/den", "MC/pi/pos/prm/pt/den", - "MC/ka/pos/prm/pt/den", "MC/pr/pos/prm/pt/den", "MC/de/pos/prm/pt/den", - "MC/tr/pos/prm/pt/den", "MC/he/pos/prm/pt/den", "MC/al/pos/prm/pt/den", - "MC/all/pos/prm/pt/den", - "MC/el/neg/prm/pt/den", "MC/mu/neg/prm/pt/den", "MC/pi/neg/prm/pt/den", - "MC/ka/neg/prm/pt/den", "MC/pr/neg/prm/pt/den", "MC/de/neg/prm/pt/den", - "MC/tr/neg/prm/pt/den", "MC/he/neg/prm/pt/den", "MC/al/neg/prm/pt/den", - "MC/all/neg/prm/pt/den"}; + static constexpr std::string_view hPtItsTpcPrm[nHistograms] = {"MC/el/pos/pt/its_tpc/prm", "MC/mu/pos/pt/its_tpc/prm", "MC/pi/pos/pt/its_tpc/prm", + "MC/ka/pos/pt/its_tpc/prm", "MC/pr/pos/pt/its_tpc/prm", "MC/de/pos/pt/its_tpc/prm", + "MC/tr/pos/pt/its_tpc/prm", "MC/he/pos/pt/its_tpc/prm", "MC/al/pos/pt/its_tpc/prm", + "MC/all/pos/pt/its_tpc/prm", + "MC/el/neg/pt/its_tpc/prm", "MC/mu/neg/pt/its_tpc/prm", "MC/pi/neg/pt/its_tpc/prm", + "MC/ka/neg/pt/its_tpc/prm", "MC/pr/neg/pt/its_tpc/prm", "MC/de/neg/pt/its_tpc/prm", + "MC/tr/neg/pt/its_tpc/prm", "MC/he/neg/pt/its_tpc/prm", "MC/al/neg/pt/its_tpc/prm", + "MC/all/neg/pt/its_tpc/prm"}; + static constexpr std::string_view hPtTrkItsTpcPrm[nHistograms] = {"MC/el/pos/pt/its_tpc/trk/prm", "MC/mu/pos/pt/its_tpc/trk/prm", "MC/pi/pos/pt/its_tpc/trk/prm", + "MC/ka/pos/pt/its_tpc/trk/prm", "MC/pr/pos/pt/its_tpc/trk/prm", "MC/de/pos/pt/its_tpc/trk/prm", + "MC/tr/pos/pt/its_tpc/trk/prm", "MC/he/pos/pt/its_tpc/trk/prm", "MC/al/pos/pt/its_tpc/trk/prm", + "MC/all/pos/pt/its_tpc/trk/prm", + "MC/el/neg/pt/its_tpc/trk/prm", "MC/mu/neg/pt/its_tpc/trk/prm", "MC/pi/neg/pt/its_tpc/trk/prm", + "MC/ka/neg/pt/its_tpc/trk/prm", "MC/pr/neg/pt/its_tpc/trk/prm", "MC/de/neg/pt/its_tpc/trk/prm", + "MC/tr/neg/pt/its_tpc/trk/prm", "MC/he/neg/pt/its_tpc/trk/prm", "MC/al/neg/pt/its_tpc/trk/prm", + "MC/all/neg/pt/its_tpc/trk/prm"}; + static constexpr std::string_view hPtItsTpcTofPrm[nHistograms] = {"MC/el/pos/pt/its_tpc_tof/prm", "MC/mu/pos/pt/its_tpc_tof/prm", "MC/pi/pos/pt/its_tpc_tof/prm", + "MC/ka/pos/pt/its_tpc_tof/prm", "MC/pr/pos/pt/its_tpc_tof/prm", "MC/de/pos/pt/its_tpc_tof/prm", + "MC/tr/pos/pt/its_tpc_tof/prm", "MC/he/pos/pt/its_tpc_tof/prm", "MC/al/pos/pt/its_tpc_tof/prm", + "MC/all/pos/pt/its_tpc_tof/prm", + "MC/el/neg/pt/its_tpc_tof/prm", "MC/mu/neg/pt/its_tpc_tof/prm", "MC/pi/neg/pt/its_tpc_tof/prm", + "MC/ka/neg/pt/its_tpc_tof/prm", "MC/pr/neg/pt/its_tpc_tof/prm", "MC/de/neg/pt/its_tpc_tof/prm", + "MC/tr/neg/pt/its_tpc_tof/prm", "MC/he/neg/pt/its_tpc_tof/prm", "MC/al/neg/pt/its_tpc_tof/prm", + "MC/all/neg/pt/its_tpc_tof/prm"}; + static constexpr std::string_view hPtGeneratedPrm[nHistograms] = {"MC/el/pos/pt/den/prm", "MC/mu/pos/pt/den/prm", "MC/pi/pos/pt/den/prm", + "MC/ka/pos/pt/den/prm", "MC/pr/pos/pt/den/prm", "MC/de/pos/pt/den/prm", + "MC/tr/pos/pt/den/prm", "MC/he/pos/pt/den/prm", "MC/al/pos/pt/den/prm", + "MC/all/pos/pt/den/prm", + "MC/el/neg/pt/den/prm", "MC/mu/neg/pt/den/prm", "MC/pi/neg/pt/den/prm", + "MC/ka/neg/pt/den/prm", "MC/pr/neg/pt/den/prm", "MC/de/neg/pt/den/prm", + "MC/tr/neg/pt/den/prm", "MC/he/neg/pt/den/prm", "MC/al/neg/pt/den/prm", + "MC/all/neg/pt/den/prm"}; // Pt for secondaries from weak decay - static constexpr std::string_view hPtDecNum[nHistograms] = {"MC/el/pos/dec/pt/num", "MC/mu/pos/dec/pt/num", "MC/pi/pos/dec/pt/num", - "MC/ka/pos/dec/pt/num", "MC/pr/pos/dec/pt/num", "MC/de/pos/dec/pt/num", - "MC/tr/pos/dec/pt/num", "MC/he/pos/dec/pt/num", "MC/al/pos/dec/pt/num", - "MC/all/pos/dec/pt/num", - "MC/el/neg/dec/pt/num", "MC/mu/neg/dec/pt/num", "MC/pi/neg/dec/pt/num", - "MC/ka/neg/dec/pt/num", "MC/pr/neg/dec/pt/num", "MC/de/neg/dec/pt/num", - "MC/tr/neg/dec/pt/num", "MC/he/neg/dec/pt/num", "MC/al/neg/dec/pt/num", - "MC/all/neg/dec/pt/num"}; - static constexpr std::string_view hPtDecNumTrk[nHistograms] = {"MC/el/pos/dec/pt/numtrk", "MC/mu/pos/dec/pt/numtrk", "MC/pi/pos/dec/pt/numtrk", - "MC/ka/pos/dec/pt/numtrk", "MC/pr/pos/dec/pt/numtrk", "MC/de/pos/dec/pt/numtrk", - "MC/tr/pos/dec/pt/numtrk", "MC/he/pos/dec/pt/numtrk", "MC/al/pos/dec/pt/numtrk", - "MC/all/pos/dec/pt/numtrk", - "MC/el/neg/dec/pt/numtrk", "MC/mu/neg/dec/pt/numtrk", "MC/pi/neg/dec/pt/numtrk", - "MC/ka/neg/dec/pt/numtrk", "MC/pr/neg/dec/pt/numtrk", "MC/de/neg/dec/pt/numtrk", - "MC/tr/neg/dec/pt/numtrk", "MC/he/neg/dec/pt/numtrk", "MC/al/neg/dec/pt/numtrk", - "MC/all/neg/dec/pt/numtrk"}; - static constexpr std::string_view hPtDecNumTof[nHistograms] = {"MC/el/pos/dec/pt/numtof", "MC/mu/pos/dec/pt/numtof", "MC/pi/pos/dec/pt/numtof", - "MC/ka/pos/dec/pt/numtof", "MC/pr/pos/dec/pt/numtof", "MC/de/pos/dec/pt/numtof", - "MC/tr/pos/dec/pt/numtof", "MC/he/pos/dec/pt/numtof", "MC/al/pos/dec/pt/numtof", - "MC/all/pos/dec/pt/numtof", - "MC/el/neg/dec/pt/numtof", "MC/mu/neg/dec/pt/numtof", "MC/pi/neg/dec/pt/numtof", - "MC/ka/neg/dec/pt/numtof", "MC/pr/neg/dec/pt/numtof", "MC/de/neg/dec/pt/numtof", - "MC/tr/neg/dec/pt/numtof", "MC/he/neg/dec/pt/numtof", "MC/al/neg/dec/pt/numtof", - "MC/all/neg/dec/pt/numtof"}; - static constexpr std::string_view hPtDecDen[nHistograms] = {"MC/el/pos/dec/pt/den", "MC/mu/pos/dec/pt/den", "MC/pi/pos/dec/pt/den", - "MC/ka/pos/dec/pt/den", "MC/pr/pos/dec/pt/den", "MC/de/pos/dec/pt/den", - "MC/tr/pos/dec/pt/den", "MC/he/pos/dec/pt/den", "MC/al/pos/dec/pt/den", - "MC/all/pos/dec/pt/den", - "MC/el/neg/dec/pt/den", "MC/mu/neg/dec/pt/den", "MC/pi/neg/dec/pt/den", - "MC/ka/neg/dec/pt/den", "MC/pr/neg/dec/pt/den", "MC/de/neg/dec/pt/den", - "MC/tr/neg/dec/pt/den", "MC/he/neg/dec/pt/den", "MC/al/neg/dec/pt/den", - "MC/all/neg/dec/pt/den"}; + static constexpr std::string_view hPtItsTpcStr[nHistograms] = {"MC/el/pos/str/pt/num", "MC/mu/pos/str/pt/num", "MC/pi/pos/str/pt/num", + "MC/ka/pos/str/pt/num", "MC/pr/pos/str/pt/num", "MC/de/pos/str/pt/num", + "MC/tr/pos/str/pt/num", "MC/he/pos/str/pt/num", "MC/al/pos/str/pt/num", + "MC/all/pos/str/pt/num", + "MC/el/neg/str/pt/num", "MC/mu/neg/str/pt/num", "MC/pi/neg/str/pt/num", + "MC/ka/neg/str/pt/num", "MC/pr/neg/str/pt/num", "MC/de/neg/str/pt/num", + "MC/tr/neg/str/pt/num", "MC/he/neg/str/pt/num", "MC/al/neg/str/pt/num", + "MC/all/neg/str/pt/num"}; + static constexpr std::string_view hPtTrkItsTpcStr[nHistograms] = {"MC/el/pos/str/pt/numtrk", "MC/mu/pos/str/pt/numtrk", "MC/pi/pos/str/pt/numtrk", + "MC/ka/pos/str/pt/numtrk", "MC/pr/pos/str/pt/numtrk", "MC/de/pos/str/pt/numtrk", + "MC/tr/pos/str/pt/numtrk", "MC/he/pos/str/pt/numtrk", "MC/al/pos/str/pt/numtrk", + "MC/all/pos/str/pt/numtrk", + "MC/el/neg/str/pt/numtrk", "MC/mu/neg/str/pt/numtrk", "MC/pi/neg/str/pt/numtrk", + "MC/ka/neg/str/pt/numtrk", "MC/pr/neg/str/pt/numtrk", "MC/de/neg/str/pt/numtrk", + "MC/tr/neg/str/pt/numtrk", "MC/he/neg/str/pt/numtrk", "MC/al/neg/str/pt/numtrk", + "MC/all/neg/str/pt/numtrk"}; + static constexpr std::string_view hPtItsTpcTofStr[nHistograms] = {"MC/el/pos/str/pt/numtof", "MC/mu/pos/str/pt/numtof", "MC/pi/pos/str/pt/numtof", + "MC/ka/pos/str/pt/numtof", "MC/pr/pos/str/pt/numtof", "MC/de/pos/str/pt/numtof", + "MC/tr/pos/str/pt/numtof", "MC/he/pos/str/pt/numtof", "MC/al/pos/str/pt/numtof", + "MC/all/pos/str/pt/numtof", + "MC/el/neg/str/pt/numtof", "MC/mu/neg/str/pt/numtof", "MC/pi/neg/str/pt/numtof", + "MC/ka/neg/str/pt/numtof", "MC/pr/neg/str/pt/numtof", "MC/de/neg/str/pt/numtof", + "MC/tr/neg/str/pt/numtof", "MC/he/neg/str/pt/numtof", "MC/al/neg/str/pt/numtof", + "MC/all/neg/str/pt/numtof"}; + static constexpr std::string_view hPtGeneratedStr[nHistograms] = {"MC/el/pos/str/pt/den", "MC/mu/pos/str/pt/den", "MC/pi/pos/str/pt/den", + "MC/ka/pos/str/pt/den", "MC/pr/pos/str/pt/den", "MC/de/pos/str/pt/den", + "MC/tr/pos/str/pt/den", "MC/he/pos/str/pt/den", "MC/al/pos/str/pt/den", + "MC/all/pos/str/pt/den", + "MC/el/neg/str/pt/den", "MC/mu/neg/str/pt/den", "MC/pi/neg/str/pt/den", + "MC/ka/neg/str/pt/den", "MC/pr/neg/str/pt/den", "MC/de/neg/str/pt/den", + "MC/tr/neg/str/pt/den", "MC/he/neg/str/pt/den", "MC/al/neg/str/pt/den", + "MC/all/neg/str/pt/den"}; // Pt for secondaries from material - static constexpr std::string_view hPtMatNum[nHistograms] = {"MC/el/pos/mat/pt/num", "MC/mu/pos/mat/pt/num", "MC/pi/pos/mat/pt/num", - "MC/ka/pos/mat/pt/num", "MC/pr/pos/mat/pt/num", "MC/de/pos/mat/pt/num", - "MC/tr/pos/mat/pt/num", "MC/he/pos/mat/pt/num", "MC/al/pos/mat/pt/num", - "MC/all/pos/mat/pt/num", - "MC/el/neg/mat/pt/num", "MC/mu/neg/mat/pt/num", "MC/pi/neg/mat/pt/num", - "MC/ka/neg/mat/pt/num", "MC/pr/neg/mat/pt/num", "MC/de/neg/mat/pt/num", - "MC/tr/neg/mat/pt/num", "MC/he/neg/mat/pt/num", "MC/al/neg/mat/pt/num", - "MC/all/neg/mat/pt/num"}; - static constexpr std::string_view hPtMatNumTrk[nHistograms] = {"MC/el/pos/mat/pt/numtrk", "MC/mu/pos/mat/pt/numtrk", "MC/pi/pos/mat/pt/numtrk", - "MC/ka/pos/mat/pt/numtrk", "MC/pr/pos/mat/pt/numtrk", "MC/de/pos/mat/pt/numtrk", - "MC/tr/pos/mat/pt/numtrk", "MC/he/pos/mat/pt/numtrk", "MC/al/pos/mat/pt/numtrk", - "MC/all/pos/mat/pt/numtrk", - "MC/el/neg/mat/pt/numtrk", "MC/mu/neg/mat/pt/numtrk", "MC/pi/neg/mat/pt/numtrk", - "MC/ka/neg/mat/pt/numtrk", "MC/pr/neg/mat/pt/numtrk", "MC/de/neg/mat/pt/numtrk", - "MC/tr/neg/mat/pt/numtrk", "MC/he/neg/mat/pt/numtrk", "MC/al/neg/mat/pt/numtrk", - "MC/all/neg/mat/pt/numtrk"}; - static constexpr std::string_view hPtMatNumTof[nHistograms] = {"MC/el/pos/mat/pt/numtof", "MC/mu/pos/mat/pt/numtof", "MC/pi/pos/mat/pt/numtof", - "MC/ka/pos/mat/pt/numtof", "MC/pr/pos/mat/pt/numtof", "MC/de/pos/mat/pt/numtof", - "MC/tr/pos/mat/pt/numtof", "MC/he/pos/mat/pt/numtof", "MC/al/pos/mat/pt/numtof", - "MC/all/pos/mat/pt/numtof", - "MC/el/neg/mat/pt/numtof", "MC/mu/neg/mat/pt/numtof", "MC/pi/neg/mat/pt/numtof", - "MC/ka/neg/mat/pt/numtof", "MC/pr/neg/mat/pt/numtof", "MC/de/neg/mat/pt/numtof", - "MC/tr/neg/mat/pt/numtof", "MC/he/neg/mat/pt/numtof", "MC/al/neg/mat/pt/numtof", - "MC/all/neg/mat/pt/numtof"}; - static constexpr std::string_view hPtMatDen[nHistograms] = {"MC/el/pos/mat/pt/den", "MC/mu/pos/mat/pt/den", "MC/pi/pos/mat/pt/den", - "MC/ka/pos/mat/pt/den", "MC/pr/pos/mat/pt/den", "MC/de/pos/mat/pt/den", - "MC/tr/pos/mat/pt/den", "MC/he/pos/mat/pt/den", "MC/al/pos/mat/pt/den", - "MC/all/pos/mat/pt/den", - "MC/el/neg/mat/pt/den", "MC/mu/neg/mat/pt/den", "MC/pi/neg/mat/pt/den", - "MC/ka/neg/mat/pt/den", "MC/pr/neg/mat/pt/den", "MC/de/neg/mat/pt/den", - "MC/tr/neg/mat/pt/den", "MC/he/neg/mat/pt/den", "MC/al/neg/mat/pt/den", - "MC/all/neg/mat/pt/den"}; + static constexpr std::string_view hPtItsTpcMat[nHistograms] = {"MC/el/pos/mat/pt/num", "MC/mu/pos/mat/pt/num", "MC/pi/pos/mat/pt/num", + "MC/ka/pos/mat/pt/num", "MC/pr/pos/mat/pt/num", "MC/de/pos/mat/pt/num", + "MC/tr/pos/mat/pt/num", "MC/he/pos/mat/pt/num", "MC/al/pos/mat/pt/num", + "MC/all/pos/mat/pt/num", + "MC/el/neg/mat/pt/num", "MC/mu/neg/mat/pt/num", "MC/pi/neg/mat/pt/num", + "MC/ka/neg/mat/pt/num", "MC/pr/neg/mat/pt/num", "MC/de/neg/mat/pt/num", + "MC/tr/neg/mat/pt/num", "MC/he/neg/mat/pt/num", "MC/al/neg/mat/pt/num", + "MC/all/neg/mat/pt/num"}; + static constexpr std::string_view hPtTrkItsTpcMat[nHistograms] = {"MC/el/pos/mat/pt/numtrk", "MC/mu/pos/mat/pt/numtrk", "MC/pi/pos/mat/pt/numtrk", + "MC/ka/pos/mat/pt/numtrk", "MC/pr/pos/mat/pt/numtrk", "MC/de/pos/mat/pt/numtrk", + "MC/tr/pos/mat/pt/numtrk", "MC/he/pos/mat/pt/numtrk", "MC/al/pos/mat/pt/numtrk", + "MC/all/pos/mat/pt/numtrk", + "MC/el/neg/mat/pt/numtrk", "MC/mu/neg/mat/pt/numtrk", "MC/pi/neg/mat/pt/numtrk", + "MC/ka/neg/mat/pt/numtrk", "MC/pr/neg/mat/pt/numtrk", "MC/de/neg/mat/pt/numtrk", + "MC/tr/neg/mat/pt/numtrk", "MC/he/neg/mat/pt/numtrk", "MC/al/neg/mat/pt/numtrk", + "MC/all/neg/mat/pt/numtrk"}; + static constexpr std::string_view hPtItsTpcTofMat[nHistograms] = {"MC/el/pos/mat/pt/numtof", "MC/mu/pos/mat/pt/numtof", "MC/pi/pos/mat/pt/numtof", + "MC/ka/pos/mat/pt/numtof", "MC/pr/pos/mat/pt/numtof", "MC/de/pos/mat/pt/numtof", + "MC/tr/pos/mat/pt/numtof", "MC/he/pos/mat/pt/numtof", "MC/al/pos/mat/pt/numtof", + "MC/all/pos/mat/pt/numtof", + "MC/el/neg/mat/pt/numtof", "MC/mu/neg/mat/pt/numtof", "MC/pi/neg/mat/pt/numtof", + "MC/ka/neg/mat/pt/numtof", "MC/pr/neg/mat/pt/numtof", "MC/de/neg/mat/pt/numtof", + "MC/tr/neg/mat/pt/numtof", "MC/he/neg/mat/pt/numtof", "MC/al/neg/mat/pt/numtof", + "MC/all/neg/mat/pt/numtof"}; + static constexpr std::string_view hPtGeneratedMat[nHistograms] = {"MC/el/pos/mat/pt/den", "MC/mu/pos/mat/pt/den", "MC/pi/pos/mat/pt/den", + "MC/ka/pos/mat/pt/den", "MC/pr/pos/mat/pt/den", "MC/de/pos/mat/pt/den", + "MC/tr/pos/mat/pt/den", "MC/he/pos/mat/pt/den", "MC/al/pos/mat/pt/den", + "MC/all/pos/mat/pt/den", + "MC/el/neg/mat/pt/den", "MC/mu/neg/mat/pt/den", "MC/pi/neg/mat/pt/den", + "MC/ka/neg/mat/pt/den", "MC/pr/neg/mat/pt/den", "MC/de/neg/mat/pt/den", + "MC/tr/neg/mat/pt/den", "MC/he/neg/mat/pt/den", "MC/al/neg/mat/pt/den", + "MC/all/neg/mat/pt/den"}; + // P - static constexpr std::string_view hPNum[nHistograms] = {"MC/el/pos/p/num", "MC/mu/pos/p/num", "MC/pi/pos/p/num", - "MC/ka/pos/p/num", "MC/pr/pos/p/num", "MC/de/pos/p/num", - "MC/tr/pos/p/num", "MC/he/pos/p/num", "MC/al/pos/p/num", - "MC/all/pos/p/num", - "MC/el/neg/p/num", "MC/mu/neg/p/num", "MC/pi/neg/p/num", - "MC/ka/neg/p/num", "MC/pr/neg/p/num", "MC/de/neg/p/num", - "MC/tr/neg/p/num", "MC/he/neg/p/num", "MC/al/neg/p/num", - "MC/all/neg/p/num"}; - static constexpr std::string_view hPNumTrk[nHistograms] = {"MC/el/pos/p/numtrk", "MC/mu/pos/p/numtrk", "MC/pi/pos/p/numtrk", - "MC/ka/pos/p/numtrk", "MC/pr/pos/p/numtrk", "MC/de/pos/p/numtrk", - "MC/tr/pos/p/numtrk", "MC/he/pos/p/numtrk", "MC/al/pos/p/numtrk", - "MC/all/pos/p/numtrk", - "MC/el/neg/p/numtrk", "MC/mu/neg/p/numtrk", "MC/pi/neg/p/numtrk", - "MC/ka/neg/p/numtrk", "MC/pr/neg/p/numtrk", "MC/de/neg/p/numtrk", - "MC/tr/neg/p/numtrk", "MC/he/neg/p/numtrk", "MC/al/neg/p/numtrk", - "MC/all/neg/p/numtrk"}; - static constexpr std::string_view hPNumTof[nHistograms] = {"MC/el/pos/p/numtof", "MC/mu/pos/p/numtof", "MC/pi/pos/p/numtof", - "MC/ka/pos/p/numtof", "MC/pr/pos/p/numtof", "MC/de/pos/p/numtof", - "MC/tr/pos/p/numtof", "MC/he/pos/p/numtof", "MC/al/pos/p/numtof", - "MC/all/pos/p/numtof", - "MC/el/neg/p/numtof", "MC/mu/neg/p/numtof", "MC/pi/neg/p/numtof", - "MC/ka/neg/p/numtof", "MC/pr/neg/p/numtof", "MC/de/neg/p/numtof", - "MC/tr/neg/p/numtof", "MC/he/neg/p/numtof", "MC/al/neg/p/numtof", - "MC/all/neg/p/numtof"}; - static constexpr std::string_view hPDen[nHistograms] = {"MC/el/pos/p/den", "MC/mu/pos/p/den", "MC/pi/pos/p/den", - "MC/ka/pos/p/den", "MC/pr/pos/p/den", "MC/de/pos/p/den", - "MC/tr/pos/p/den", "MC/he/pos/p/den", "MC/al/pos/p/den", - "MC/all/pos/p/den", - "MC/el/neg/p/den", "MC/mu/neg/p/den", "MC/pi/neg/p/den", - "MC/ka/neg/p/den", "MC/pr/neg/p/den", "MC/de/neg/p/den", - "MC/tr/neg/p/den", "MC/he/neg/p/den", "MC/al/neg/p/den", - "MC/all/neg/p/den"}; + static constexpr std::string_view hPItsTpc[nHistograms] = {"MC/el/pos/p/num", "MC/mu/pos/p/num", "MC/pi/pos/p/num", + "MC/ka/pos/p/num", "MC/pr/pos/p/num", "MC/de/pos/p/num", + "MC/tr/pos/p/num", "MC/he/pos/p/num", "MC/al/pos/p/num", + "MC/all/pos/p/num", + "MC/el/neg/p/num", "MC/mu/neg/p/num", "MC/pi/neg/p/num", + "MC/ka/neg/p/num", "MC/pr/neg/p/num", "MC/de/neg/p/num", + "MC/tr/neg/p/num", "MC/he/neg/p/num", "MC/al/neg/p/num", + "MC/all/neg/p/num"}; + static constexpr std::string_view hPTrkItsTpc[nHistograms] = {"MC/el/pos/p/numtrk", "MC/mu/pos/p/numtrk", "MC/pi/pos/p/numtrk", + "MC/ka/pos/p/numtrk", "MC/pr/pos/p/numtrk", "MC/de/pos/p/numtrk", + "MC/tr/pos/p/numtrk", "MC/he/pos/p/numtrk", "MC/al/pos/p/numtrk", + "MC/all/pos/p/numtrk", + "MC/el/neg/p/numtrk", "MC/mu/neg/p/numtrk", "MC/pi/neg/p/numtrk", + "MC/ka/neg/p/numtrk", "MC/pr/neg/p/numtrk", "MC/de/neg/p/numtrk", + "MC/tr/neg/p/numtrk", "MC/he/neg/p/numtrk", "MC/al/neg/p/numtrk", + "MC/all/neg/p/numtrk"}; + static constexpr std::string_view hPItsTpcTof[nHistograms] = {"MC/el/pos/p/numtof", "MC/mu/pos/p/numtof", "MC/pi/pos/p/numtof", + "MC/ka/pos/p/numtof", "MC/pr/pos/p/numtof", "MC/de/pos/p/numtof", + "MC/tr/pos/p/numtof", "MC/he/pos/p/numtof", "MC/al/pos/p/numtof", + "MC/all/pos/p/numtof", + "MC/el/neg/p/numtof", "MC/mu/neg/p/numtof", "MC/pi/neg/p/numtof", + "MC/ka/neg/p/numtof", "MC/pr/neg/p/numtof", "MC/de/neg/p/numtof", + "MC/tr/neg/p/numtof", "MC/he/neg/p/numtof", "MC/al/neg/p/numtof", + "MC/all/neg/p/numtof"}; + static constexpr std::string_view hPGenerated[nHistograms] = {"MC/el/pos/p/den", "MC/mu/pos/p/den", "MC/pi/pos/p/den", + "MC/ka/pos/p/den", "MC/pr/pos/p/den", "MC/de/pos/p/den", + "MC/tr/pos/p/den", "MC/he/pos/p/den", "MC/al/pos/p/den", + "MC/all/pos/p/den", + "MC/el/neg/p/den", "MC/mu/neg/p/den", "MC/pi/neg/p/den", + "MC/ka/neg/p/den", "MC/pr/neg/p/den", "MC/de/neg/p/den", + "MC/tr/neg/p/den", "MC/he/neg/p/den", "MC/al/neg/p/den", + "MC/all/neg/p/den"}; + // Eta - static constexpr std::string_view hEtaNum[nHistograms] = {"MC/el/pos/eta/num", "MC/mu/pos/eta/num", "MC/pi/pos/eta/num", - "MC/ka/pos/eta/num", "MC/pr/pos/eta/num", "MC/de/pos/eta/num", - "MC/tr/pos/eta/num", "MC/he/pos/eta/num", "MC/al/pos/eta/num", - "MC/all/pos/eta/num", - "MC/el/neg/eta/num", "MC/mu/neg/eta/num", "MC/pi/neg/eta/num", - "MC/ka/neg/eta/num", "MC/pr/neg/eta/num", "MC/de/neg/eta/num", - "MC/tr/neg/eta/num", "MC/he/neg/eta/num", "MC/al/neg/eta/num", - "MC/all/neg/eta/num"}; - static constexpr std::string_view hEtaNumTrk[nHistograms] = {"MC/el/pos/eta/numtrk", "MC/mu/pos/eta/numtrk", "MC/pi/pos/eta/numtrk", - "MC/ka/pos/eta/numtrk", "MC/pr/pos/eta/numtrk", "MC/de/pos/eta/numtrk", - "MC/tr/pos/eta/numtrk", "MC/he/pos/eta/numtrk", "MC/al/pos/eta/numtrk", - "MC/all/pos/eta/numtrk", - "MC/el/neg/eta/numtrk", "MC/mu/neg/eta/numtrk", "MC/pi/neg/eta/numtrk", - "MC/ka/neg/eta/numtrk", "MC/pr/neg/eta/numtrk", "MC/de/neg/eta/numtrk", - "MC/tr/neg/eta/numtrk", "MC/he/neg/eta/numtrk", "MC/al/neg/eta/numtrk", - "MC/all/neg/eta/numtrk"}; - static constexpr std::string_view hEtaNumTof[nHistograms] = {"MC/el/pos/eta/numtof", "MC/mu/pos/eta/numtof", "MC/pi/pos/eta/numtof", - "MC/ka/pos/eta/numtof", "MC/pr/pos/eta/numtof", "MC/de/pos/eta/numtof", - "MC/tr/pos/eta/numtof", "MC/he/pos/eta/numtof", "MC/al/pos/eta/numtof", - "MC/all/pos/eta/numtof", - "MC/el/neg/eta/numtof", "MC/mu/neg/eta/numtof", "MC/pi/neg/eta/numtof", - "MC/ka/neg/eta/numtof", "MC/pr/neg/eta/numtof", "MC/de/neg/eta/numtof", - "MC/tr/neg/eta/numtof", "MC/he/neg/eta/numtof", "MC/al/neg/eta/numtof", - "MC/all/neg/eta/numtof"}; - static constexpr std::string_view hEtaDen[nHistograms] = {"MC/el/pos/eta/den", "MC/mu/pos/eta/den", "MC/pi/pos/eta/den", - "MC/ka/pos/eta/den", "MC/pr/pos/eta/den", "MC/de/pos/eta/den", - "MC/tr/pos/eta/den", "MC/he/pos/eta/den", "MC/al/pos/eta/den", - "MC/all/pos/eta/den", - "MC/el/neg/eta/den", "MC/mu/neg/eta/den", "MC/pi/neg/eta/den", - "MC/ka/neg/eta/den", "MC/pr/neg/eta/den", "MC/de/neg/eta/den", - "MC/tr/neg/eta/den", "MC/he/neg/eta/den", "MC/al/neg/eta/den", - "MC/all/neg/eta/den"}; + static constexpr std::string_view hEtaItsTpc[nHistograms] = {"MC/el/pos/eta/num", "MC/mu/pos/eta/num", "MC/pi/pos/eta/num", + "MC/ka/pos/eta/num", "MC/pr/pos/eta/num", "MC/de/pos/eta/num", + "MC/tr/pos/eta/num", "MC/he/pos/eta/num", "MC/al/pos/eta/num", + "MC/all/pos/eta/num", + "MC/el/neg/eta/num", "MC/mu/neg/eta/num", "MC/pi/neg/eta/num", + "MC/ka/neg/eta/num", "MC/pr/neg/eta/num", "MC/de/neg/eta/num", + "MC/tr/neg/eta/num", "MC/he/neg/eta/num", "MC/al/neg/eta/num", + "MC/all/neg/eta/num"}; + static constexpr std::string_view hEtaTrkItsTpc[nHistograms] = {"MC/el/pos/eta/numtrk", "MC/mu/pos/eta/numtrk", "MC/pi/pos/eta/numtrk", + "MC/ka/pos/eta/numtrk", "MC/pr/pos/eta/numtrk", "MC/de/pos/eta/numtrk", + "MC/tr/pos/eta/numtrk", "MC/he/pos/eta/numtrk", "MC/al/pos/eta/numtrk", + "MC/all/pos/eta/numtrk", + "MC/el/neg/eta/numtrk", "MC/mu/neg/eta/numtrk", "MC/pi/neg/eta/numtrk", + "MC/ka/neg/eta/numtrk", "MC/pr/neg/eta/numtrk", "MC/de/neg/eta/numtrk", + "MC/tr/neg/eta/numtrk", "MC/he/neg/eta/numtrk", "MC/al/neg/eta/numtrk", + "MC/all/neg/eta/numtrk"}; + static constexpr std::string_view hEtaItsTpcTof[nHistograms] = {"MC/el/pos/eta/numtof", "MC/mu/pos/eta/numtof", "MC/pi/pos/eta/numtof", + "MC/ka/pos/eta/numtof", "MC/pr/pos/eta/numtof", "MC/de/pos/eta/numtof", + "MC/tr/pos/eta/numtof", "MC/he/pos/eta/numtof", "MC/al/pos/eta/numtof", + "MC/all/pos/eta/numtof", + "MC/el/neg/eta/numtof", "MC/mu/neg/eta/numtof", "MC/pi/neg/eta/numtof", + "MC/ka/neg/eta/numtof", "MC/pr/neg/eta/numtof", "MC/de/neg/eta/numtof", + "MC/tr/neg/eta/numtof", "MC/he/neg/eta/numtof", "MC/al/neg/eta/numtof", + "MC/all/neg/eta/numtof"}; + static constexpr std::string_view hEtaGenerated[nHistograms] = {"MC/el/pos/eta/den", "MC/mu/pos/eta/den", "MC/pi/pos/eta/den", + "MC/ka/pos/eta/den", "MC/pr/pos/eta/den", "MC/de/pos/eta/den", + "MC/tr/pos/eta/den", "MC/he/pos/eta/den", "MC/al/pos/eta/den", + "MC/all/pos/eta/den", + "MC/el/neg/eta/den", "MC/mu/neg/eta/den", "MC/pi/neg/eta/den", + "MC/ka/neg/eta/den", "MC/pr/neg/eta/den", "MC/de/neg/eta/den", + "MC/tr/neg/eta/den", "MC/he/neg/eta/den", "MC/al/neg/eta/den", + "MC/all/neg/eta/den"}; // Y - static constexpr std::string_view hYNum[nHistograms] = {"MC/el/pos/y/num", "MC/mu/pos/y/num", "MC/pi/pos/y/num", - "MC/ka/pos/y/num", "MC/pr/pos/y/num", "MC/de/pos/y/num", - "MC/tr/pos/y/num", "MC/he/pos/y/num", "MC/al/pos/y/num", - "MC/all/pos/y/num", - "MC/el/neg/y/num", "MC/mu/neg/y/num", "MC/pi/neg/y/num", - "MC/ka/neg/y/num", "MC/pr/neg/y/num", "MC/de/neg/y/num", - "MC/tr/neg/y/num", "MC/he/neg/y/num", "MC/al/neg/y/num", - "MC/all/neg/y/num"}; - static constexpr std::string_view hYNumTof[nHistograms] = {"MC/el/pos/y/numtof", "MC/mu/pos/y/numtof", "MC/pi/pos/y/numtof", - "MC/ka/pos/y/numtof", "MC/pr/pos/y/numtof", "MC/de/pos/y/numtof", - "MC/tr/pos/y/numtof", "MC/he/pos/y/numtof", "MC/al/pos/y/numtof", - "MC/all/pos/y/numtof", - "MC/el/neg/y/numtof", "MC/mu/neg/y/numtof", "MC/pi/neg/y/numtof", - "MC/ka/neg/y/numtof", "MC/pr/neg/y/numtof", "MC/de/neg/y/numtof", - "MC/tr/neg/y/numtof", "MC/he/neg/y/numtof", "MC/al/neg/y/numtof", - "MC/all/neg/y/numtof"}; - static constexpr std::string_view hYDen[nHistograms] = {"MC/el/pos/y/den", "MC/mu/pos/y/den", "MC/pi/pos/y/den", - "MC/ka/pos/y/den", "MC/pr/pos/y/den", "MC/de/pos/y/den", - "MC/tr/pos/y/den", "MC/he/pos/y/den", "MC/al/pos/y/den", - "MC/all/pos/y/den", - "MC/el/neg/y/den", "MC/mu/neg/y/den", "MC/pi/neg/y/den", - "MC/ka/neg/y/den", "MC/pr/neg/y/den", "MC/de/neg/y/den", - "MC/tr/neg/y/den", "MC/he/neg/y/den", "MC/al/neg/y/den", - "MC/all/neg/y/den"}; + static constexpr std::string_view hYItsTpc[nHistograms] = {"MC/el/pos/y/num", "MC/mu/pos/y/num", "MC/pi/pos/y/num", + "MC/ka/pos/y/num", "MC/pr/pos/y/num", "MC/de/pos/y/num", + "MC/tr/pos/y/num", "MC/he/pos/y/num", "MC/al/pos/y/num", + "MC/all/pos/y/num", + "MC/el/neg/y/num", "MC/mu/neg/y/num", "MC/pi/neg/y/num", + "MC/ka/neg/y/num", "MC/pr/neg/y/num", "MC/de/neg/y/num", + "MC/tr/neg/y/num", "MC/he/neg/y/num", "MC/al/neg/y/num", + "MC/all/neg/y/num"}; + static constexpr std::string_view hYItsTpcTof[nHistograms] = {"MC/el/pos/y/numtof", "MC/mu/pos/y/numtof", "MC/pi/pos/y/numtof", + "MC/ka/pos/y/numtof", "MC/pr/pos/y/numtof", "MC/de/pos/y/numtof", + "MC/tr/pos/y/numtof", "MC/he/pos/y/numtof", "MC/al/pos/y/numtof", + "MC/all/pos/y/numtof", + "MC/el/neg/y/numtof", "MC/mu/neg/y/numtof", "MC/pi/neg/y/numtof", + "MC/ka/neg/y/numtof", "MC/pr/neg/y/numtof", "MC/de/neg/y/numtof", + "MC/tr/neg/y/numtof", "MC/he/neg/y/numtof", "MC/al/neg/y/numtof", + "MC/all/neg/y/numtof"}; + static constexpr std::string_view hYGenerated[nHistograms] = {"MC/el/pos/y/den", "MC/mu/pos/y/den", "MC/pi/pos/y/den", + "MC/ka/pos/y/den", "MC/pr/pos/y/den", "MC/de/pos/y/den", + "MC/tr/pos/y/den", "MC/he/pos/y/den", "MC/al/pos/y/den", + "MC/all/pos/y/den", + "MC/el/neg/y/den", "MC/mu/neg/y/den", "MC/pi/neg/y/den", + "MC/ka/neg/y/den", "MC/pr/neg/y/den", "MC/de/neg/y/den", + "MC/tr/neg/y/den", "MC/he/neg/y/den", "MC/al/neg/y/den", + "MC/all/neg/y/den"}; // Phi - static constexpr std::string_view hPhiNum[nHistograms] = {"MC/el/pos/phi/num", "MC/mu/pos/phi/num", "MC/pi/pos/phi/num", - "MC/ka/pos/phi/num", "MC/pr/pos/phi/num", "MC/de/pos/phi/num", - "MC/tr/pos/phi/num", "MC/he/pos/phi/num", "MC/al/pos/phi/num", - "MC/all/pos/phi/num", - "MC/el/neg/phi/num", "MC/mu/neg/phi/num", "MC/pi/neg/phi/num", - "MC/ka/neg/phi/num", "MC/pr/neg/phi/num", "MC/de/neg/phi/num", - "MC/tr/neg/phi/num", "MC/he/neg/phi/num", "MC/al/neg/phi/num", - "MC/all/neg/phi/num"}; - static constexpr std::string_view hPhiNumTrk[nHistograms] = {"MC/el/pos/phi/numtrk", "MC/mu/pos/phi/numtrk", "MC/pi/pos/phi/numtrk", - "MC/ka/pos/phi/numtrk", "MC/pr/pos/phi/numtrk", "MC/de/pos/phi/numtrk", - "MC/tr/pos/phi/numtrk", "MC/he/pos/phi/numtrk", "MC/al/pos/phi/numtrk", - "MC/all/pos/phi/numtrk", - "MC/el/neg/phi/numtrk", "MC/mu/neg/phi/numtrk", "MC/pi/neg/phi/numtrk", - "MC/ka/neg/phi/numtrk", "MC/pr/neg/phi/numtrk", "MC/de/neg/phi/numtrk", - "MC/tr/neg/phi/numtrk", "MC/he/neg/phi/numtrk", "MC/al/neg/phi/numtrk", - "MC/all/neg/phi/numtrk"}; - static constexpr std::string_view hPhiNumTof[nHistograms] = {"MC/el/pos/phi/numtof", "MC/mu/pos/phi/numtof", "MC/pi/pos/phi/numtof", - "MC/ka/pos/phi/numtof", "MC/pr/pos/phi/numtof", "MC/de/pos/phi/numtof", - "MC/tr/pos/phi/numtof", "MC/he/pos/phi/numtof", "MC/al/pos/phi/numtof", - "MC/all/pos/phi/numtof", - "MC/el/neg/phi/numtof", "MC/mu/neg/phi/numtof", "MC/pi/neg/phi/numtof", - "MC/ka/neg/phi/numtof", "MC/pr/neg/phi/numtof", "MC/de/neg/phi/numtof", - "MC/tr/neg/phi/numtof", "MC/he/neg/phi/numtof", "MC/al/neg/phi/numtof", - "MC/all/neg/phi/numtof"}; - static constexpr std::string_view hPhiDen[nHistograms] = {"MC/el/pos/phi/den", "MC/mu/pos/phi/den", "MC/pi/pos/phi/den", - "MC/ka/pos/phi/den", "MC/pr/pos/phi/den", "MC/de/pos/phi/den", - "MC/tr/pos/phi/den", "MC/he/pos/phi/den", "MC/al/pos/phi/den", - "MC/all/pos/phi/den", - "MC/el/neg/phi/den", "MC/mu/neg/phi/den", "MC/pi/neg/phi/den", - "MC/ka/neg/phi/den", "MC/pr/neg/phi/den", "MC/de/neg/phi/den", - "MC/tr/neg/phi/den", "MC/he/neg/phi/den", "MC/al/neg/phi/den", - "MC/all/neg/phi/den"}; + static constexpr std::string_view hPhiItsTpc[nHistograms] = {"MC/el/pos/phi/num", "MC/mu/pos/phi/num", "MC/pi/pos/phi/num", + "MC/ka/pos/phi/num", "MC/pr/pos/phi/num", "MC/de/pos/phi/num", + "MC/tr/pos/phi/num", "MC/he/pos/phi/num", "MC/al/pos/phi/num", + "MC/all/pos/phi/num", + "MC/el/neg/phi/num", "MC/mu/neg/phi/num", "MC/pi/neg/phi/num", + "MC/ka/neg/phi/num", "MC/pr/neg/phi/num", "MC/de/neg/phi/num", + "MC/tr/neg/phi/num", "MC/he/neg/phi/num", "MC/al/neg/phi/num", + "MC/all/neg/phi/num"}; + static constexpr std::string_view hPhiTrkItsTpc[nHistograms] = {"MC/el/pos/phi/numtrk", "MC/mu/pos/phi/numtrk", "MC/pi/pos/phi/numtrk", + "MC/ka/pos/phi/numtrk", "MC/pr/pos/phi/numtrk", "MC/de/pos/phi/numtrk", + "MC/tr/pos/phi/numtrk", "MC/he/pos/phi/numtrk", "MC/al/pos/phi/numtrk", + "MC/all/pos/phi/numtrk", + "MC/el/neg/phi/numtrk", "MC/mu/neg/phi/numtrk", "MC/pi/neg/phi/numtrk", + "MC/ka/neg/phi/numtrk", "MC/pr/neg/phi/numtrk", "MC/de/neg/phi/numtrk", + "MC/tr/neg/phi/numtrk", "MC/he/neg/phi/numtrk", "MC/al/neg/phi/numtrk", + "MC/all/neg/phi/numtrk"}; + static constexpr std::string_view hPhiItsTpcTof[nHistograms] = {"MC/el/pos/phi/numtof", "MC/mu/pos/phi/numtof", "MC/pi/pos/phi/numtof", + "MC/ka/pos/phi/numtof", "MC/pr/pos/phi/numtof", "MC/de/pos/phi/numtof", + "MC/tr/pos/phi/numtof", "MC/he/pos/phi/numtof", "MC/al/pos/phi/numtof", + "MC/all/pos/phi/numtof", + "MC/el/neg/phi/numtof", "MC/mu/neg/phi/numtof", "MC/pi/neg/phi/numtof", + "MC/ka/neg/phi/numtof", "MC/pr/neg/phi/numtof", "MC/de/neg/phi/numtof", + "MC/tr/neg/phi/numtof", "MC/he/neg/phi/numtof", "MC/al/neg/phi/numtof", + "MC/all/neg/phi/numtof"}; + static constexpr std::string_view hPhiGenerated[nHistograms] = {"MC/el/pos/phi/den", "MC/mu/pos/phi/den", "MC/pi/pos/phi/den", + "MC/ka/pos/phi/den", "MC/pr/pos/phi/den", "MC/de/pos/phi/den", + "MC/tr/pos/phi/den", "MC/he/pos/phi/den", "MC/al/pos/phi/den", + "MC/all/pos/phi/den", + "MC/el/neg/phi/den", "MC/mu/neg/phi/den", "MC/pi/neg/phi/den", + "MC/ka/neg/phi/den", "MC/pr/neg/phi/den", "MC/de/neg/phi/den", + "MC/tr/neg/phi/den", "MC/he/neg/phi/den", "MC/al/neg/phi/den", + "MC/all/neg/phi/den"}; // Pt-Eta - static constexpr std::string_view hPtEtaNum[nHistograms] = {"MC/el/pos/pteta/num", "MC/mu/pos/pteta/num", "MC/pi/pos/pteta/num", - "MC/ka/pos/pteta/num", "MC/pr/pos/pteta/num", "MC/de/pos/pteta/num", - "MC/tr/pos/pteta/num", "MC/he/pos/pteta/num", "MC/al/pos/pteta/num", - "MC/all/pos/pteta/num", - "MC/el/neg/pteta/num", "MC/mu/neg/pteta/num", "MC/pi/neg/pteta/num", - "MC/ka/neg/pteta/num", "MC/pr/neg/pteta/num", "MC/de/neg/pteta/num", - "MC/tr/neg/pteta/num", "MC/he/neg/pteta/num", "MC/al/neg/pteta/num", - "MC/all/neg/pteta/num"}; - static constexpr std::string_view hPtEtaNumTrk[nHistograms] = {"MC/el/pos/pteta/numtrk", "MC/mu/pos/pteta/numtrk", "MC/pi/pos/pteta/numtrk", - "MC/ka/pos/pteta/numtrk", "MC/pr/pos/pteta/numtrk", "MC/de/pos/pteta/numtrk", - "MC/tr/pos/pteta/numtrk", "MC/he/pos/pteta/numtrk", "MC/al/pos/pteta/numtrk", - "MC/all/pos/pteta/numtrk", - "MC/el/neg/pteta/numtrk", "MC/mu/neg/pteta/numtrk", "MC/pi/neg/pteta/numtrk", - "MC/ka/neg/pteta/numtrk", "MC/pr/neg/pteta/numtrk", "MC/de/neg/pteta/numtrk", - "MC/tr/neg/pteta/numtrk", "MC/he/neg/pteta/numtrk", "MC/al/neg/pteta/numtrk", - "MC/all/neg/pteta/numtrk"}; - static constexpr std::string_view hPtEtaNumTof[nHistograms] = {"MC/el/pos/pteta/numtof", "MC/mu/pos/pteta/numtof", "MC/pi/pos/pteta/numtof", - "MC/ka/pos/pteta/numtof", "MC/pr/pos/pteta/numtof", "MC/de/pos/pteta/numtof", - "MC/tr/pos/pteta/numtof", "MC/he/pos/pteta/numtof", "MC/al/pos/pteta/numtof", - "MC/all/pos/pteta/numtof", - "MC/el/neg/pteta/numtof", "MC/mu/neg/pteta/numtof", "MC/pi/neg/pteta/numtof", - "MC/ka/neg/pteta/numtof", "MC/pr/neg/pteta/numtof", "MC/de/neg/pteta/numtof", - "MC/tr/neg/pteta/numtof", "MC/he/neg/pteta/numtof", "MC/al/neg/pteta/numtof", - "MC/all/neg/pteta/numtof"}; - static constexpr std::string_view hPtEtaDen[nHistograms] = {"MC/el/pos/pteta/den", "MC/mu/pos/pteta/den", "MC/pi/pos/pteta/den", - "MC/ka/pos/pteta/den", "MC/pr/pos/pteta/den", "MC/de/pos/pteta/den", - "MC/tr/pos/pteta/den", "MC/he/pos/pteta/den", "MC/al/pos/pteta/den", - "MC/all/pos/pteta/den", - "MC/el/neg/pteta/den", "MC/mu/neg/pteta/den", "MC/pi/neg/pteta/den", - "MC/ka/neg/pteta/den", "MC/pr/neg/pteta/den", "MC/de/neg/pteta/den", - "MC/tr/neg/pteta/den", "MC/he/neg/pteta/den", "MC/al/neg/pteta/den", - "MC/all/neg/pteta/den"}; + static constexpr std::string_view hPtEtaItsTpc[nHistograms] = {"MC/el/pos/pteta/num", "MC/mu/pos/pteta/num", "MC/pi/pos/pteta/num", + "MC/ka/pos/pteta/num", "MC/pr/pos/pteta/num", "MC/de/pos/pteta/num", + "MC/tr/pos/pteta/num", "MC/he/pos/pteta/num", "MC/al/pos/pteta/num", + "MC/all/pos/pteta/num", + "MC/el/neg/pteta/num", "MC/mu/neg/pteta/num", "MC/pi/neg/pteta/num", + "MC/ka/neg/pteta/num", "MC/pr/neg/pteta/num", "MC/de/neg/pteta/num", + "MC/tr/neg/pteta/num", "MC/he/neg/pteta/num", "MC/al/neg/pteta/num", + "MC/all/neg/pteta/num"}; + static constexpr std::string_view hPtEtaTrkItsTpc[nHistograms] = {"MC/el/pos/pteta/numtrk", "MC/mu/pos/pteta/numtrk", "MC/pi/pos/pteta/numtrk", + "MC/ka/pos/pteta/numtrk", "MC/pr/pos/pteta/numtrk", "MC/de/pos/pteta/numtrk", + "MC/tr/pos/pteta/numtrk", "MC/he/pos/pteta/numtrk", "MC/al/pos/pteta/numtrk", + "MC/all/pos/pteta/numtrk", + "MC/el/neg/pteta/numtrk", "MC/mu/neg/pteta/numtrk", "MC/pi/neg/pteta/numtrk", + "MC/ka/neg/pteta/numtrk", "MC/pr/neg/pteta/numtrk", "MC/de/neg/pteta/numtrk", + "MC/tr/neg/pteta/numtrk", "MC/he/neg/pteta/numtrk", "MC/al/neg/pteta/numtrk", + "MC/all/neg/pteta/numtrk"}; + static constexpr std::string_view hPtEtaItsTpcTof[nHistograms] = {"MC/el/pos/pteta/numtof", "MC/mu/pos/pteta/numtof", "MC/pi/pos/pteta/numtof", + "MC/ka/pos/pteta/numtof", "MC/pr/pos/pteta/numtof", "MC/de/pos/pteta/numtof", + "MC/tr/pos/pteta/numtof", "MC/he/pos/pteta/numtof", "MC/al/pos/pteta/numtof", + "MC/all/pos/pteta/numtof", + "MC/el/neg/pteta/numtof", "MC/mu/neg/pteta/numtof", "MC/pi/neg/pteta/numtof", + "MC/ka/neg/pteta/numtof", "MC/pr/neg/pteta/numtof", "MC/de/neg/pteta/numtof", + "MC/tr/neg/pteta/numtof", "MC/he/neg/pteta/numtof", "MC/al/neg/pteta/numtof", + "MC/all/neg/pteta/numtof"}; + static constexpr std::string_view hPtEtaGenerated[nHistograms] = {"MC/el/pos/pteta/den", "MC/mu/pos/pteta/den", "MC/pi/pos/pteta/den", + "MC/ka/pos/pteta/den", "MC/pr/pos/pteta/den", "MC/de/pos/pteta/den", + "MC/tr/pos/pteta/den", "MC/he/pos/pteta/den", "MC/al/pos/pteta/den", + "MC/all/pos/pteta/den", + "MC/el/neg/pteta/den", "MC/mu/neg/pteta/den", "MC/pi/neg/pteta/den", + "MC/ka/neg/pteta/den", "MC/pr/neg/pteta/den", "MC/de/neg/pteta/den", + "MC/tr/neg/pteta/den", "MC/he/neg/pteta/den", "MC/al/neg/pteta/den", + "MC/all/neg/pteta/den"}; template void makeMCHistograms(const bool doMakeHistograms) @@ -389,79 +422,84 @@ struct QaEfficiency { const TString tagPt = Form("%s #it{#eta} [%.2f,%.2f] #it{y} [%.2f,%.2f] #it{#varphi} [%.2f,%.2f]", partName, - etaMin.value, etaMax.value, - yMin.value, yMax.value, - phiMin.value, phiMax.value); + etaMin, etaMax, + yMin, yMax, + phiMin, phiMax); const TString tagEta = Form("%s #it{p}_{T} [%.2f,%.2f] #it{y} [%.2f,%.2f] #it{#varphi} [%.2f,%.2f]", partName, - ptMin.value, ptMax.value, - yMin.value, yMax.value, - phiMin.value, phiMax.value); + ptMin, ptMax, + yMin, yMax, + phiMin, phiMax); const TString tagY = Form("%s #it{p}_{T} [%.2f,%.2f] #it{#eta} [%.2f,%.2f] #it{#varphi} [%.2f,%.2f]", partName, - ptMin.value, ptMax.value, - etaMin.value, etaMax.value, - phiMin.value, phiMax.value); + ptMin, ptMax, + etaMin, etaMax, + phiMin, phiMax); const TString tagPhi = Form("%s #it{p}_{T} [%.2f,%.2f] #it{#eta} [%.2f,%.2f] #it{y} [%.2f,%.2f]", partName, - ptMin.value, ptMax.value, - etaMin.value, etaMax.value, - yMin.value, yMax.value); + ptMin, ptMax, + etaMin, etaMax, + yMin, yMax); const TString tagPtEta = Form("%s #it{#varphi} [%.2f,%.2f] #it{y} [%.2f,%.2f]", partName, - phiMin.value, phiMax.value, - yMin.value, yMax.value); + phiMin, phiMax, + yMin, yMax); auto makeHistogramsPerCharge = [&](const int chargeIndex) { const int histogramIndex = id + chargeIndex * nSpecies; - histos.add(hPtNum[histogramIndex].data(), "Numerator " + tagPt, kTH1D, {axisPt}); - histos.add(hPtNumTrk[histogramIndex].data(), "Numerator Track " + tagPt, kTH1D, {axisPt}); - histos.add(hPtNumTof[histogramIndex].data(), "Numerator TOF " + tagPt, kTH1D, {axisPt}); - histos.add(hPtDen[histogramIndex].data(), "Denominator " + tagPt, kTH1D, {axisPt}); - - histos.add(hPtPrmNum[histogramIndex].data(), "Numerator " + tagPt + " Primaries", kTH1D, {axisPt}); - histos.add(hPtPrmNumTrk[histogramIndex].data(), "Numerator Track " + tagPt + " Primaries", kTH1D, {axisPt}); - histos.add(hPtPrmNumTof[histogramIndex].data(), "Numerator TOF " + tagPt + " Primaries", kTH1D, {axisPt}); - histos.add(hPtPrmDen[histogramIndex].data(), "Denominator " + tagPt + " Primaries", kTH1D, {axisPt}); - - histos.add(hPtDecNum[histogramIndex].data(), "Numerator " + tagPt + " Sec. from decays", kTH1D, {axisPt}); - histos.add(hPtDecNumTrk[histogramIndex].data(), "Numerator Track " + tagPt + " Sec. from decays", kTH1D, {axisPt}); - histos.add(hPtDecNumTof[histogramIndex].data(), "Numerator TOF " + tagPt + " Sec. from decays", kTH1D, {axisPt}); - histos.add(hPtDecDen[histogramIndex].data(), "Denominator " + tagPt + " Sec. from decays", kTH1D, {axisPt}); - - histos.add(hPtMatNum[histogramIndex].data(), "Numerator " + tagPt + " Sec. from material", kTH1D, {axisPt}); - histos.add(hPtMatNumTrk[histogramIndex].data(), "Numerator Track " + tagPt + " Sec. from material", kTH1D, {axisPt}); - histos.add(hPtMatNumTof[histogramIndex].data(), "Numerator TOF " + tagPt + " Sec. from material", kTH1D, {axisPt}); - histos.add(hPtMatDen[histogramIndex].data(), "Denominator " + tagPt + " Sec. from material", kTH1D, {axisPt}); - - histos.add(hPNum[histogramIndex].data(), "Numerator " + tagPt, kTH1D, {axisP}); - histos.add(hPNumTrk[histogramIndex].data(), "Numerator Track " + tagPt, kTH1D, {axisP}); - histos.add(hPNumTof[histogramIndex].data(), "Numerator TOF " + tagPt, kTH1D, {axisP}); - histos.add(hPDen[histogramIndex].data(), "Denominator " + tagPt, kTH1D, {axisP}); - - histos.add(hEtaNum[histogramIndex].data(), "Numerator " + tagEta, kTH1D, {axisEta}); - histos.add(hEtaNumTrk[histogramIndex].data(), "Numerator Track " + tagEta, kTH1D, {axisEta}); - histos.add(hEtaNumTof[histogramIndex].data(), "Numerator TOF " + tagEta, kTH1D, {axisEta}); - histos.add(hEtaDen[histogramIndex].data(), "Denominator " + tagEta, kTH1D, {axisEta}); - - histos.add(hYNum[histogramIndex].data(), "Numerator " + tagY, kTH1D, {axisY}); - histos.add(hYNumTof[histogramIndex].data(), "Numerator TOF " + tagY, kTH1D, {axisY}); - histos.add(hYDen[histogramIndex].data(), "Denominator " + tagY, kTH1D, {axisY}); - - histos.add(hPhiNum[histogramIndex].data(), "Numerator " + tagPhi, kTH1D, {axisPhi}); - histos.add(hPhiNumTrk[histogramIndex].data(), "Numerator Track " + tagPhi, kTH1D, {axisPhi}); - histos.add(hPhiNumTof[histogramIndex].data(), "Numerator TOF " + tagPhi, kTH1D, {axisPhi}); - histos.add(hPhiDen[histogramIndex].data(), "Denominator " + tagPhi, kTH1D, {axisPhi}); + + histos.add(hPtIts[histogramIndex].data(), "ITS tracks " + tagPt, kTH1F, {axisPt}); + histos.add(hPtTpc[histogramIndex].data(), "TPC tracks " + tagPt, kTH1F, {axisPt}); + histos.add(hPtItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPt, kTH1F, {axisPt}); + histos.add(hPtItsTof[histogramIndex].data(), "ITS-TOF tracks " + tagPt, kTH1F, {axisPt}); + histos.add(hPtTpcTof[histogramIndex].data(), "TPC-TOF tracks " + tagPt, kTH1F, {axisPt}); + histos.add(hPtItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPt, kTH1F, {axisPt}); + histos.add(hPtTrkItsTpc[histogramIndex].data(), "ITS-TPC track (reco) " + tagPt, kTH1F, {axisPt}); + histos.add(hPtGenerated[histogramIndex].data(), "Generated " + tagPt, kTH1F, {axisPt}); + + histos.add(hPtItsTpcPrm[histogramIndex].data(), "ITS-TPC tracks (primaries) " + tagPt, kTH1F, {axisPt}); + histos.add(hPtTrkItsTpcPrm[histogramIndex].data(), "ITS-TPC tracks (reco primaries) " + tagPt, kTH1F, {axisPt}); + histos.add(hPtItsTpcTofPrm[histogramIndex].data(), "ITS-TPC-TOF tracks (primaries) " + tagPt, kTH1F, {axisPt}); + histos.add(hPtGeneratedPrm[histogramIndex].data(), "Generated (primaries) " + tagPt, kTH1F, {axisPt}); + + histos.add(hPtItsTpcStr[histogramIndex].data(), "ITS-TPC tracks (from weak decays) " + tagPt, kTH1F, {axisPt}); + histos.add(hPtTrkItsTpcStr[histogramIndex].data(), "ITS-TPC tracks (reco from weak decays) " + tagPt, kTH1F, {axisPt}); + histos.add(hPtItsTpcTofStr[histogramIndex].data(), "ITS-TPC-TOF tracks (from weak decays) " + tagPt, kTH1F, {axisPt}); + histos.add(hPtGeneratedStr[histogramIndex].data(), "Generated (from weak decays) " + tagPt, kTH1F, {axisPt}); + + histos.add(hPtItsTpcMat[histogramIndex].data(), "ITS-TPC tracks (from material)" + tagPt, kTH1F, {axisPt}); + histos.add(hPtTrkItsTpcMat[histogramIndex].data(), "ITS-TPC tracks (reco from material) " + tagPt, kTH1F, {axisPt}); + histos.add(hPtItsTpcTofMat[histogramIndex].data(), "ITS-TPC-TOF tracks ( from material) " + tagPt, kTH1F, {axisPt}); + histos.add(hPtGeneratedMat[histogramIndex].data(), "Generated ( from material) " + tagPt, kTH1F, {axisPt}); + + histos.add(hPItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPt, kTH1F, {axisP}); + histos.add(hPTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagPt, kTH1F, {axisP}); + histos.add(hPItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPt, kTH1F, {axisP}); + histos.add(hPGenerated[histogramIndex].data(), "Generated " + tagPt, kTH1F, {axisP}); + + histos.add(hEtaItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagEta, kTH1F, {axisEta}); + histos.add(hEtaTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagEta, kTH1F, {axisEta}); + histos.add(hEtaItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagEta, kTH1F, {axisEta}); + histos.add(hEtaGenerated[histogramIndex].data(), "Generated " + tagEta, kTH1F, {axisEta}); + + histos.add(hYItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagY, kTH1F, {axisY}); + histos.add(hYItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagY, kTH1F, {axisY}); + histos.add(hYGenerated[histogramIndex].data(), "Generated " + tagY, kTH1F, {axisY}); + + histos.add(hPhiItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPhi, kTH1F, {axisPhi}); + histos.add(hPhiTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagPhi, kTH1F, {axisPhi}); + histos.add(hPhiItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPhi, kTH1F, {axisPhi}); + histos.add(hPhiGenerated[histogramIndex].data(), "Generated " + tagPhi, kTH1F, {axisPhi}); if (doPtEta) { - histos.add(hPtEtaNum[histogramIndex].data(), "Numerator " + tagPtEta, kTH2D, {axisPt, axisEta}); - histos.add(hPtEtaNumTrk[histogramIndex].data(), "Numerator Track " + tagPtEta, kTH2D, {axisPt, axisEta}); - histos.add(hPtEtaNumTof[histogramIndex].data(), "Numerator TOF " + tagPtEta, kTH2D, {axisPt, axisEta}); - histos.add(hPtEtaDen[histogramIndex].data(), "Denominator " + tagPtEta, kTH2D, {axisPt, axisEta}); + histos.add(hPtEtaItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPtEta, kTH2D, {axisPt, axisEta}); + histos.add(hPtEtaTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagPtEta, kTH2D, {axisPt, axisEta}); + histos.add(hPtEtaItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPtEta, kTH2D, {axisPt, axisEta}); + histos.add(hPtEtaGenerated[histogramIndex].data(), "Generated " + tagPtEta, kTH2D, {axisPt, axisEta}); } }; @@ -491,13 +529,13 @@ struct QaEfficiency { subList->Add(new TEfficiency(effname, efftitle, axis->GetNbins(), axis->GetXmin(), axis->GetXmax())); } }; - makeEfficiency("efficiencyVsPt", HIST(hPtNum[id])); - makeEfficiency("efficiencyVsPtPrm", HIST(hPtPrmNum[id])); - makeEfficiency("efficiencyVsPtDec", HIST(hPtDecNum[id])); - makeEfficiency("efficiencyVsPtMat", HIST(hPtMatNum[id])); - makeEfficiency("efficiencyVsP", HIST(hPNum[id])); - makeEfficiency("efficiencyVsEta", HIST(hEtaNum[id])); - makeEfficiency("efficiencyVsPhi", HIST(hPhiNum[id])); + makeEfficiency("efficiencyVsPt", HIST(hPtItsTpc[id])); + makeEfficiency("efficiencyVsPtPrm", HIST(hPtItsTpcPrm[id])); + makeEfficiency("efficiencyVsPtDec", HIST(hPtItsTpcStr[id])); + makeEfficiency("efficiencyVsPtMat", HIST(hPtItsTpcMat[id])); + makeEfficiency("efficiencyVsP", HIST(hPItsTpc[id])); + makeEfficiency("efficiencyVsEta", HIST(hEtaItsTpc[id])); + makeEfficiency("efficiencyVsPhi", HIST(hPhiItsTpc[id])); auto makeEfficiency2D = [&](TString effname, auto templateHisto) { effname = partName + effname; @@ -515,7 +553,7 @@ struct QaEfficiency { } }; if (doPtEta) { - makeEfficiency2D("efficiencyVsPtVsEta", HIST(hPtEtaNum[id])); + makeEfficiency2D("efficiencyVsPtVsEta", HIST(hPtEtaItsTpc[id])); } } LOG(debug) << "Done with particle: " << partName; @@ -527,7 +565,7 @@ struct QaEfficiency { return; } - auto h = histos.add("MC/trackSelection", "Track Selection", kTH1D, {axisSel}); + auto h = histos.add("MC/trackSelection", "Track Selection", kTH1F, {axisSel}); h->GetXaxis()->SetBinLabel(1, "Tracks read"); h->GetXaxis()->SetBinLabel(2, "Passed has MC part."); h->GetXaxis()->SetBinLabel(3, "Passed Ev. Reco."); @@ -541,9 +579,9 @@ struct QaEfficiency { for (int i = 0; i < nSpecies; i++) { h->GetXaxis()->SetBinLabel(11 + i, Form("Passed PDG %i %s", PDGs[i], particleTitle[i])); } - histos.add("MC/fakeTrackNoiseHits", "Fake tracks from noise hits", kTH1D, {{1, 0, 1}}); + histos.add("MC/fakeTrackNoiseHits", "Fake tracks from noise hits", kTH1F, {{1, 0, 1}}); - h = histos.add("MC/particleSelection", "Particle Selection", kTH1D, {axisSel}); + h = histos.add("MC/particleSelection", "Particle Selection", kTH1F, {axisSel}); h->GetXaxis()->SetBinLabel(1, "Particles read"); h->GetXaxis()->SetBinLabel(2, "Passed Ev. Reco."); h->GetXaxis()->SetBinLabel(3, "Passed #it{p}_{T}"); @@ -553,9 +591,9 @@ struct QaEfficiency { for (int i = 0; i < nSpecies; i++) { h->GetXaxis()->SetBinLabel(7 + i, Form("Passed PDG %i %s", PDGs[i], particleTitle[i])); } - histos.add("MC/eventMultiplicity", "Event Selection", kTH1D, {{1000, 0, 5000}}); + histos.add("MC/eventMultiplicity", "Event Selection", kTH1F, {{1000, 0, 5000}}); - histos.add("MC/trackLength", "Track length;Track length (cm)", kTH1D, {{2000, -1000, 1000}}); + histos.add("MC/trackLength", "Track length;Track length (cm)", kTH1F, {{2000, -1000, 1000}}); listEfficiencyMC.setObject(new TList); makeMCHistograms(doEl); @@ -576,7 +614,7 @@ struct QaEfficiency { return; } - auto h = histos.add("Data/trackSelection", "Track Selection", kTH1D, {axisSel}); + auto h = histos.add("Data/trackSelection", "Track Selection", kTH1F, {axisSel}); h->GetXaxis()->SetBinLabel(1, "Tracks read"); h->GetXaxis()->SetBinLabel(2, "Passed #it{p}_{T}"); h->GetXaxis()->SetBinLabel(3, "Passed #it{#eta}"); @@ -590,76 +628,76 @@ struct QaEfficiency { h->GetXaxis()->SetBinLabel(11, "Passed quality cuts"); const TString tagPt = Form("#it{#eta} [%.2f,%.2f] #it{#varphi} [%.2f,%.2f]", - etaMin.value, etaMax.value, - phiMin.value, phiMax.value); - AxisSpec axisPt{ptBins, ptMin, ptMax, "#it{p}_{T} (GeV/#it{c})"}; + etaMin, etaMax, + phiMin, phiMax); + AxisSpec axisPt{ptBins, "#it{p}_{T} (GeV/#it{c})"}; if (logPt) { axisPt.makeLogarithmic(); } const TString tagEta = Form("#it{p}_{T} [%.2f,%.2f] #it{#varphi} [%.2f,%.2f]", - ptMin.value, ptMax.value, - phiMin.value, phiMax.value); - const AxisSpec axisEta{etaBins, etaMin, etaMax, "#it{#eta}"}; + ptMin, ptMax, + phiMin, phiMax); + const AxisSpec axisEta{etaBins, "#it{#eta}"}; const TString tagPhi = Form("#it{#eta} [%.2f,%.2f] #it{p}_{T} [%.2f,%.2f]", - etaMin.value, etaMax.value, - ptMin.value, ptMax.value); - const AxisSpec axisPhi{phiBins, phiMin, phiMax, "#it{#varphi} (rad)"}; + etaMin, etaMax, + ptMin, ptMax); + const AxisSpec axisPhi{phiBins, "#it{#varphi} (rad)"}; const TString tagEtaPhi = Form("#it{p}_{T} [%.2f,%.2f]", - ptMin.value, ptMax.value); + ptMin, ptMax); - histos.add("Data/trackLength", "Track length;Track length (cm)", kTH1D, {{2000, -1000, 1000}}); + histos.add("Data/trackLength", "Track length;Track length (cm)", kTH1F, {{2000, -1000, 1000}}); // ITS-TPC-TOF - histos.add("Data/pos/pt/its_tpc_tof", "ITS-TPC-TOF Positive " + tagPt, kTH1D, {axisPt}); - histos.add("Data/neg/pt/its_tpc_tof", "ITS-TPC-TOF Negative " + tagPt, kTH1D, {axisPt}); + histos.add("Data/pos/pt/its_tpc_tof", "ITS-TPC-TOF Positive " + tagPt, kTH1F, {axisPt}); + histos.add("Data/neg/pt/its_tpc_tof", "ITS-TPC-TOF Negative " + tagPt, kTH1F, {axisPt}); - histos.add("Data/pos/eta/its_tpc_tof", "ITS-TPC-TOF Positive " + tagEta, kTH1D, {axisEta}); - histos.add("Data/neg/eta/its_tpc_tof", "ITS-TPC-TOF Negative " + tagEta, kTH1D, {axisEta}); + histos.add("Data/pos/eta/its_tpc_tof", "ITS-TPC-TOF Positive " + tagEta, kTH1F, {axisEta}); + histos.add("Data/neg/eta/its_tpc_tof", "ITS-TPC-TOF Negative " + tagEta, kTH1F, {axisEta}); - histos.add("Data/pos/phi/its_tpc_tof", "ITS-TPC-TOF Positive " + tagPhi, kTH1D, {axisPhi}); - histos.add("Data/neg/phi/its_tpc_tof", "ITS-TPC-TOF Negative " + tagPhi, kTH1D, {axisPhi}); + histos.add("Data/pos/phi/its_tpc_tof", "ITS-TPC-TOF Positive " + tagPhi, kTH1F, {axisPhi}); + histos.add("Data/neg/phi/its_tpc_tof", "ITS-TPC-TOF Negative " + tagPhi, kTH1F, {axisPhi}); histos.add("Data/pos/etaphi/its_tpc_tof", "ITS-TPC-TOF Positive " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/neg/etaphi/its_tpc_tof", "ITS-TPC-TOF Negative " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); // ITS-TPC - histos.add("Data/pos/pt/its_tpc", "ITS-TPC Positive " + tagPt, kTH1D, {axisPt}); - histos.add("Data/neg/pt/its_tpc", "ITS-TPC Negative " + tagPt, kTH1D, {axisPt}); + histos.add("Data/pos/pt/its_tpc", "ITS-TPC Positive " + tagPt, kTH1F, {axisPt}); + histos.add("Data/neg/pt/its_tpc", "ITS-TPC Negative " + tagPt, kTH1F, {axisPt}); - histos.add("Data/pos/eta/its_tpc", "ITS-TPC Positive " + tagEta, kTH1D, {axisEta}); - histos.add("Data/neg/eta/its_tpc", "ITS-TPC Negative " + tagEta, kTH1D, {axisEta}); + histos.add("Data/pos/eta/its_tpc", "ITS-TPC Positive " + tagEta, kTH1F, {axisEta}); + histos.add("Data/neg/eta/its_tpc", "ITS-TPC Negative " + tagEta, kTH1F, {axisEta}); - histos.add("Data/pos/phi/its_tpc", "ITS-TPC Positive " + tagPhi, kTH1D, {axisPhi}); - histos.add("Data/neg/phi/its_tpc", "ITS-TPC Negative " + tagPhi, kTH1D, {axisPhi}); + histos.add("Data/pos/phi/its_tpc", "ITS-TPC Positive " + tagPhi, kTH1F, {axisPhi}); + histos.add("Data/neg/phi/its_tpc", "ITS-TPC Negative " + tagPhi, kTH1F, {axisPhi}); histos.add("Data/pos/etaphi/its_tpc", "ITS-TPC Positive " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/neg/etaphi/its_tpc", "ITS-TPC Negative " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); // TPC - histos.add("Data/pos/pt/tpc", "TPC Positive " + tagPt, kTH1D, {axisPt}); - histos.add("Data/neg/pt/tpc", "TPC Negative " + tagPt, kTH1D, {axisPt}); + histos.add("Data/pos/pt/tpc", "TPC Positive " + tagPt, kTH1F, {axisPt}); + histos.add("Data/neg/pt/tpc", "TPC Negative " + tagPt, kTH1F, {axisPt}); - histos.add("Data/pos/eta/tpc", "TPC Positive " + tagEta, kTH1D, {axisEta}); - histos.add("Data/neg/eta/tpc", "TPC Negative " + tagEta, kTH1D, {axisEta}); + histos.add("Data/pos/eta/tpc", "TPC Positive " + tagEta, kTH1F, {axisEta}); + histos.add("Data/neg/eta/tpc", "TPC Negative " + tagEta, kTH1F, {axisEta}); - histos.add("Data/pos/phi/tpc", "TPC Positive " + tagPhi, kTH1D, {axisPhi}); - histos.add("Data/neg/phi/tpc", "TPC Negative " + tagPhi, kTH1D, {axisPhi}); + histos.add("Data/pos/phi/tpc", "TPC Positive " + tagPhi, kTH1F, {axisPhi}); + histos.add("Data/neg/phi/tpc", "TPC Negative " + tagPhi, kTH1F, {axisPhi}); histos.add("Data/pos/etaphi/tpc", "TPC Positive " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/neg/etaphi/tpc", "TPC Negative " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); // ITS - histos.add("Data/pos/pt/its", "ITS Positive " + tagPt, kTH1D, {axisPt}); - histos.add("Data/neg/pt/its", "ITS Negative " + tagPt, kTH1D, {axisPt}); + histos.add("Data/pos/pt/its", "ITS Positive " + tagPt, kTH1F, {axisPt}); + histos.add("Data/neg/pt/its", "ITS Negative " + tagPt, kTH1F, {axisPt}); - histos.add("Data/pos/eta/its", "ITS Positive " + tagEta, kTH1D, {axisEta}); - histos.add("Data/neg/eta/its", "ITS Negative " + tagEta, kTH1D, {axisEta}); + histos.add("Data/pos/eta/its", "ITS Positive " + tagEta, kTH1F, {axisEta}); + histos.add("Data/neg/eta/its", "ITS Negative " + tagEta, kTH1F, {axisEta}); - histos.add("Data/pos/phi/its", "ITS Positive " + tagPhi, kTH1D, {axisPhi}); - histos.add("Data/neg/phi/its", "ITS Negative " + tagPhi, kTH1D, {axisPhi}); + histos.add("Data/pos/phi/its", "ITS Positive " + tagPhi, kTH1F, {axisPhi}); + histos.add("Data/neg/phi/its", "ITS Negative " + tagPhi, kTH1F, {axisPhi}); histos.add("Data/pos/etaphi/its", "ITS Positive " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/neg/etaphi/its", "ITS Negative " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); @@ -690,15 +728,32 @@ struct QaEfficiency { makeEfficiency("TPCTOFMatchingEfficiencyVsEta", "TPC-TOF M.E. in data " + tagEta + ";#it{#eta};Efficiency", HIST("Data/pos/eta/its_tpc_tof")); makeEfficiency("TPCTOFMatchingEfficiencyVsPhi", "TPC-TOF M.E. in data " + tagPhi + ";#it{#varphi} (rad);Efficiency", HIST("Data/pos/phi/its_tpc_tof")); - makeEfficiency2D("TPCTOFMatchingEfficiencyVsPtVsEta", Form("TPC-TOF M.E. in data #it{#varphi} [%.2f,%.2f];%s;%s;Efficiency", phiMin.value, phiMax.value, "#it{p}_{T} (GeV/#it{c})", "#it{#eta}"), HIST("Data/pos/pt/its_tpc_tof"), HIST("Data/pos/eta/its_tpc_tof")); - makeEfficiency2D("TPCTOFMatchingEfficiencyVsPtVsPhi", Form("TPC-TOF M.E. in data #it{#eta} [%.2f,%.2f];%s;%s;Efficiency", etaMin.value, etaMax.value, "#it{p}_{T} (GeV/#it{c})", "#it{#varphi} (rad)"), HIST("Data/pos/pt/its_tpc_tof"), HIST("Data/pos/phi/its_tpc_tof")); + makeEfficiency2D("TPCTOFMatchingEfficiencyVsPtVsEta", Form("TPC-TOF M.E. in data #it{#varphi} [%.2f,%.2f];%s;%s;Efficiency", phiMin, phiMax, "#it{p}_{T} (GeV/#it{c})", "#it{#eta}"), HIST("Data/pos/pt/its_tpc_tof"), HIST("Data/pos/eta/its_tpc_tof")); + makeEfficiency2D("TPCTOFMatchingEfficiencyVsPtVsPhi", Form("TPC-TOF M.E. in data #it{#eta} [%.2f,%.2f];%s;%s;Efficiency", etaMin, etaMax, "#it{p}_{T} (GeV/#it{c})", "#it{#varphi} (rad)"), HIST("Data/pos/pt/its_tpc_tof"), HIST("Data/pos/phi/its_tpc_tof")); } } + // Selection cuts defined from the binning + double ptMin, ptMax; + double etaMin, etaMax; + double phiMin, phiMax; + double yMin, yMax; + void init(InitContext&) { + auto doLimits = [&](double& min, double& max, const ConfigurableAxis& binning) { + const AxisSpec a{binning, "dummy"}; + min = a.binEdges[1]; + max = a.binEdges[a.getNbins() - 1]; + }; + + doLimits(ptMin, ptMax, ptBins); + doLimits(etaMin, etaMax, etaBins); + doLimits(phiMin, phiMax, phiBins); + doLimits(yMin, yMax, yBins); + const AxisSpec axisSel{30, 0.5, 30.5, "Selection"}; - histos.add("eventSelection", "Event Selection", kTH1D, {axisSel}); + histos.add("eventSelection", "Event Selection", kTH1F, {axisSel}); histos.get(HIST("eventSelection"))->GetXaxis()->SetBinLabel(1, "Events read"); histos.get(HIST("eventSelection"))->GetXaxis()->SetBinLabel(2, "Passed Ev. Sel."); histos.get(HIST("eventSelection"))->GetXaxis()->SetBinLabel(3, "Passed Contrib."); @@ -754,49 +809,49 @@ struct QaEfficiency { histos.fill(HIST("MC/trackSelection"), 11 + id); - histos.fill(HIST(hPNum[histogramIndex]), mcParticle.p()); - histos.fill(HIST(hPtNum[histogramIndex]), mcParticle.pt()); - histos.fill(HIST(hEtaNum[histogramIndex]), mcParticle.eta()); - histos.fill(HIST(hYNum[histogramIndex]), mcParticle.y()); - histos.fill(HIST(hPhiNum[histogramIndex]), mcParticle.phi()); + histos.fill(HIST(hPItsTpc[histogramIndex]), mcParticle.p()); + histos.fill(HIST(hPtItsTpc[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hEtaItsTpc[histogramIndex]), mcParticle.eta()); + histos.fill(HIST(hYItsTpc[histogramIndex]), mcParticle.y()); + histos.fill(HIST(hPhiItsTpc[histogramIndex]), mcParticle.phi()); if (doPtEta) { - histos.fill(HIST(hPtEtaNum[histogramIndex]), mcParticle.pt(), mcParticle.eta()); + histos.fill(HIST(hPtEtaItsTpc[histogramIndex]), mcParticle.pt(), mcParticle.eta()); } - histos.fill(HIST(hPNumTrk[histogramIndex]), track.p()); - histos.fill(HIST(hPtNumTrk[histogramIndex]), track.pt()); - histos.fill(HIST(hEtaNumTrk[histogramIndex]), track.eta()); - histos.fill(HIST(hPhiNumTrk[histogramIndex]), track.phi()); + histos.fill(HIST(hPTrkItsTpc[histogramIndex]), track.p()); + histos.fill(HIST(hPtTrkItsTpc[histogramIndex]), track.pt()); + histos.fill(HIST(hEtaTrkItsTpc[histogramIndex]), track.eta()); + histos.fill(HIST(hPhiTrkItsTpc[histogramIndex]), track.phi()); if (mcParticle.isPhysicalPrimary()) { - histos.fill(HIST(hPtPrmNum[histogramIndex]), mcParticle.pt()); - histos.fill(HIST(hPtPrmNumTrk[histogramIndex]), track.pt()); + histos.fill(HIST(hPtItsTpcPrm[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hPtTrkItsTpcPrm[histogramIndex]), track.pt()); if (track.hasTOF()) { - histos.fill(HIST(hPtPrmNumTof[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hPtItsTpcTofPrm[histogramIndex]), mcParticle.pt()); } } else { if (mcParticle.getProcess() == 4) { // Particle deday - histos.fill(HIST(hPtDecNum[histogramIndex]), mcParticle.pt()); - histos.fill(HIST(hPtDecNumTrk[histogramIndex]), track.pt()); + histos.fill(HIST(hPtItsTpcStr[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hPtTrkItsTpcStr[histogramIndex]), track.pt()); if (track.hasTOF()) { - histos.fill(HIST(hPtDecNumTof[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hPtItsTpcTofStr[histogramIndex]), mcParticle.pt()); } } else { // Material - histos.fill(HIST(hPtMatNum[histogramIndex]), mcParticle.pt()); - histos.fill(HIST(hPtMatNumTrk[histogramIndex]), track.pt()); + histos.fill(HIST(hPtItsTpcMat[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hPtTrkItsTpcMat[histogramIndex]), track.pt()); if (track.hasTOF()) { - histos.fill(HIST(hPtMatNumTof[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hPtItsTpcTofMat[histogramIndex]), mcParticle.pt()); } } } if (!track.hasTOF()) { return; } - histos.fill(HIST(hPNumTof[histogramIndex]), mcParticle.p()); - histos.fill(HIST(hPtNumTof[histogramIndex]), mcParticle.pt()); - histos.fill(HIST(hEtaNumTof[histogramIndex]), mcParticle.eta()); - histos.fill(HIST(hYNumTof[histogramIndex]), mcParticle.y()); - histos.fill(HIST(hPhiNumTof[histogramIndex]), mcParticle.phi()); + histos.fill(HIST(hPItsTpcTof[histogramIndex]), mcParticle.p()); + histos.fill(HIST(hPtItsTpcTof[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hEtaItsTpcTof[histogramIndex]), mcParticle.eta()); + histos.fill(HIST(hYItsTpcTof[histogramIndex]), mcParticle.y()); + histos.fill(HIST(hPhiItsTpcTof[histogramIndex]), mcParticle.phi()); } template @@ -820,24 +875,24 @@ struct QaEfficiency { } histos.fill(HIST("MC/particleSelection"), 7 + id); - histos.fill(HIST(hPDen[histogramIndex]), mcParticle.p()); - histos.fill(HIST(hPtDen[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hPGenerated[histogramIndex]), mcParticle.p()); + histos.fill(HIST(hPtGenerated[histogramIndex]), mcParticle.pt()); if (mcParticle.isPhysicalPrimary()) { - histos.fill(HIST(hPtPrmDen[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hPtGeneratedPrm[histogramIndex]), mcParticle.pt()); } else { if (mcParticle.getProcess() == 4) { // Particle deday - histos.fill(HIST(hPtDecDen[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hPtGeneratedStr[histogramIndex]), mcParticle.pt()); } else { // Material - histos.fill(HIST(hPtMatDen[histogramIndex]), mcParticle.pt()); + histos.fill(HIST(hPtGeneratedMat[histogramIndex]), mcParticle.pt()); } } - histos.fill(HIST(hEtaDen[histogramIndex]), mcParticle.eta()); - histos.fill(HIST(hYDen[histogramIndex]), mcParticle.y()); - histos.fill(HIST(hPhiDen[histogramIndex]), mcParticle.phi()); + histos.fill(HIST(hEtaGenerated[histogramIndex]), mcParticle.eta()); + histos.fill(HIST(hYGenerated[histogramIndex]), mcParticle.y()); + histos.fill(HIST(hPhiGenerated[histogramIndex]), mcParticle.phi()); if (doPtEta) { - histos.fill(HIST(hPtEtaDen[histogramIndex]), mcParticle.pt(), mcParticle.eta()); + histos.fill(HIST(hPtEtaGenerated[histogramIndex]), mcParticle.pt(), mcParticle.eta()); } } @@ -880,13 +935,13 @@ struct QaEfficiency { eff->SetPassedHistogram(*histos.get(num).get(), "f"); }; - doFillEfficiency("efficiencyVsPt", HIST(hPtNum[histogramIndex]), HIST(hPtDen[histogramIndex])); - doFillEfficiency("efficiencyVsPtPrm", HIST(hPtPrmNum[histogramIndex]), HIST(hPtPrmDen[histogramIndex])); - doFillEfficiency("efficiencyVsPtDec", HIST(hPtDecNum[histogramIndex]), HIST(hPtDecDen[histogramIndex])); - doFillEfficiency("efficiencyVsPtMat", HIST(hPtMatNum[histogramIndex]), HIST(hPtMatDen[histogramIndex])); - doFillEfficiency("efficiencyVsP", HIST(hPNum[histogramIndex]), HIST(hPDen[histogramIndex])); - doFillEfficiency("efficiencyVsEta", HIST(hEtaNum[histogramIndex]), HIST(hEtaDen[histogramIndex])); - doFillEfficiency("efficiencyVsPhi", HIST(hPhiNum[histogramIndex]), HIST(hPhiDen[histogramIndex])); + doFillEfficiency("efficiencyVsPt", HIST(hPtItsTpc[histogramIndex]), HIST(hPtGenerated[histogramIndex])); + doFillEfficiency("efficiencyVsPtPrm", HIST(hPtItsTpcPrm[histogramIndex]), HIST(hPtGeneratedPrm[histogramIndex])); + doFillEfficiency("efficiencyVsPtDec", HIST(hPtItsTpcStr[histogramIndex]), HIST(hPtGeneratedStr[histogramIndex])); + doFillEfficiency("efficiencyVsPtMat", HIST(hPtItsTpcMat[histogramIndex]), HIST(hPtGeneratedMat[histogramIndex])); + doFillEfficiency("efficiencyVsP", HIST(hPItsTpc[histogramIndex]), HIST(hPGenerated[histogramIndex])); + doFillEfficiency("efficiencyVsEta", HIST(hEtaItsTpc[histogramIndex]), HIST(hEtaGenerated[histogramIndex])); + doFillEfficiency("efficiencyVsPhi", HIST(hPhiItsTpc[histogramIndex]), HIST(hPhiGenerated[histogramIndex])); if (!doPtEta) { return; @@ -903,7 +958,7 @@ struct QaEfficiency { eff->SetTotalHistogram(*histos.get(den).get(), "f"); eff->SetPassedHistogram(*histos.get(num).get(), "f"); }; - fillEfficiency2D("efficiencyVsPtVsEta", HIST(hPtEtaNum[histogramIndex]), HIST(hPtEtaDen[histogramIndex])); + fillEfficiency2D("efficiencyVsPtVsEta", HIST(hPtEtaItsTpc[histogramIndex]), HIST(hPtEtaGenerated[histogramIndex])); } template @@ -934,6 +989,7 @@ struct QaEfficiency { } return true; } + // Global process void process(o2::soa::Join::iterator const& collision, const o2::soa::Join& tracks) @@ -941,10 +997,127 @@ struct QaEfficiency { isCollisionSelected(collision); } + // Function to apply particle selection + template + bool isInAcceptance(const particleType& particle, const histoType& countingHisto, const int offset = 0) + { + histos.fill(countingHisto, 1 + offset); + if ((particle.pt() < ptMin || particle.pt() > ptMax)) { // Check pt + return false; + } + histos.fill(countingHisto, 2 + offset); + if ((particle.eta() < etaMin || particle.eta() > etaMax)) { // Check eta + return false; + } + histos.fill(countingHisto, 3 + offset); + if ((particle.phi() < phiMin || particle.phi() > phiMax)) { // Check phi + return false; + } + histos.fill(countingHisto, 4 + offset); + if constexpr (isMC) { + if ((particle.y() < yMin || particle.y() > yMax)) { // Check rapidity + return false; + } + histos.fill(countingHisto, 5 + offset); + } + + return true; + } + // Function to apply track selection - template - bool isTrackSelected(trackType track) + bool passedITS = false; + bool passedTPC = false; + bool passedTOF = false; + template + bool isTrackSelected(trackType& track, const histoType& countingHisto) { + // Reset selections + passedITS = false; + passedTPC = false; + passedTOF = false; + + histos.fill(countingHisto, 1); // Read tracks + + if constexpr (isMC) { // MC only + if (!track.has_mcParticle()) { + histos.fill(HIST("MC/fakeTrackNoiseHits"), 0.5); + return false; + } + histos.fill(countingHisto, 2); // Tracks with particles (i.e. no fakes) + const auto mcParticle = track.mcParticle(); + if (!isInAcceptance(mcParticle, countingHisto, 2)) { + return false; + } + + if (noFakesHits) { // Selecting tracks with no fake hits + bool hasFakeHit = false; + for (int i = 0; i < 10; i++) { // From ITS to TPC + if (track.mcMask() & 1 << i) { + hasFakeHit = true; + break; + } + } + if (hasFakeHit) { + return false; + } + } + histos.fill(countingHisto, 8); + } else { // Data only + if (!isInAcceptance(track, countingHisto, 2)) { + return false; + } + } + + if (!track.has_collision()) { + return false; + } + histos.fill(countingHisto, 9); + + if (trackSelection.value > 0) { // Check general cuts + if (!track.passedTrackType()) { + return false; + } + histos.fill(countingHisto, 5); + if (!track.passedPtRange()) { + return false; + } + histos.fill(countingHisto, 6); + if (!track.passedEtaRange()) { + return false; + } + histos.fill(countingHisto, 7); + if (!track.passedDCAxy()) { + return false; + } + histos.fill(countingHisto, 8); + if (!track.passedDCAz()) { + return false; + } + histos.fill(countingHisto, 9); + if (!track.passedGoldenChi2()) { + return false; + } + histos.fill(countingHisto, 10); + + passedITS = track.passedITSNCls() && + track.passedITSChi2NDF() && + track.passedITSRefit() && + track.passedITSHits() && + track.hasITS(); + + passedTPC = track.passedTPCNCls() && + track.passedTPCCrossedRows() && + track.passedTPCCrossedRowsOverNCls() && + track.passedTPCChi2NDF() && + track.passedTPCRefit() && + track.hasTPC(); + passedTOF = track.hasTOF(); + } else { + passedITS = track.hasITS(); + passedTPC = track.hasTPC(); + passedTOF = track.hasTOF(); + } + switch (trackSelection.value) { case 0: return true; @@ -965,134 +1138,79 @@ struct QaEfficiency { } // MC process - void processMC(const o2::aod::McParticles& mcParticles, - const o2::soa::Join& collisions, - const o2::soa::Join& tracks, - const o2::aod::McCollisions&) + Preslice perCollision = o2::aod::track::collisionId; + void processMC(o2::aod::McCollision const& mcCollision, + o2::soa::SmallGroups> const& collisions, + o2::soa::Join const& tracks, + o2::aod::McParticles const& mcParticles) { + if (collisions.size() < 1) { // Skipping MC events that have no reconstructed collisions + return; + } - std::vector recoEvt(collisions.size()); - int nevts = 0; for (const auto& collision : collisions) { if (!isCollisionSelected(collision)) { continue; } - recoEvt[nevts++] = collision.mcCollision().globalIndex(); - } - recoEvt.resize(nevts); - - auto rejectParticle = [&](const auto& p, auto h, const int& offset = 0) { - histos.fill(h, 1 + offset); - const auto evtReconstructed = std::find(recoEvt.begin(), recoEvt.end(), p.mcCollision().globalIndex()) != recoEvt.end(); - if (!evtReconstructed) { // Check that the event is reconstructed - return true; - } - - histos.fill(h, 2 + offset); - if ((p.pt() < ptMin || p.pt() > ptMax)) { // Check pt - return true; - } - histos.fill(h, 3 + offset); - if ((p.eta() < etaMin || p.eta() > etaMax)) { // Check eta - return true; - } - histos.fill(h, 4 + offset); - if ((p.phi() < phiMin || p.phi() > phiMax)) { // Check phi - return true; - } - histos.fill(h, 5 + offset); - if ((p.y() < yMin || p.y() > yMax)) { // Check rapidity - return true; - } - histos.fill(h, 6 + offset); - - return false; - }; - - // Track loop - for (const auto& track : tracks) { - histos.fill(HIST("MC/trackSelection"), 1); - if (!track.has_mcParticle()) { - histos.fill(HIST("MC/fakeTrackNoiseHits"), 0.5); - continue; - } - const auto mcParticle = track.mcParticle(); - if (rejectParticle(mcParticle, HIST("MC/trackSelection"), 1)) { - continue; - } + const auto groupedTracks = tracks.sliceBy(perCollision, collision.globalIndex()); - if (noFakes) { // Selecting tracks with no fake hits - bool hasFake = false; - for (int i = 0; i < 10; i++) { // From ITS to TPC - if (track.mcMask() & 1 << i) { - hasFake = true; - break; - } - } - if (hasFake) { + // Track loop + for (const auto& track : groupedTracks) { + if (!isTrackSelected(track, HIST("MC/trackSelection"))) { continue; } - } - - histos.fill(HIST("MC/trackSelection"), 10); - if (!isTrackSelected(track)) { // Check general cuts - continue; - } - histos.fill(HIST("MC/trackSelection"), 9); - if (!track.has_collision()) { - continue; - } - histos.fill(HIST("MC/trackSelection"), 10); - // Filling variable histograms - histos.fill(HIST("MC/trackLength"), track.length()); - if (doEl) { - fillMCTrackHistograms<0, o2::track::PID::Electron>(track); - fillMCTrackHistograms<1, o2::track::PID::Electron>(track); - } - if (doMu) { - fillMCTrackHistograms<0, o2::track::PID::Muon>(track); - fillMCTrackHistograms<1, o2::track::PID::Muon>(track); - } - if (doPi) { - fillMCTrackHistograms<0, o2::track::PID::Pion>(track); - fillMCTrackHistograms<1, o2::track::PID::Pion>(track); - } - if (doKa) { - fillMCTrackHistograms<0, o2::track::PID::Kaon>(track); - fillMCTrackHistograms<1, o2::track::PID::Kaon>(track); - } - if (doPr) { - fillMCTrackHistograms<0, o2::track::PID::Proton>(track); - fillMCTrackHistograms<1, o2::track::PID::Proton>(track); - } - if (doDe) { - fillMCTrackHistograms<0, o2::track::PID::Deuteron>(track); - fillMCTrackHistograms<1, o2::track::PID::Deuteron>(track); - } - if (doTr) { - fillMCTrackHistograms<0, o2::track::PID::Triton>(track); - fillMCTrackHistograms<1, o2::track::PID::Triton>(track); - } - if (doHe) { - fillMCTrackHistograms<0, o2::track::PID::Helium3>(track); - fillMCTrackHistograms<1, o2::track::PID::Helium3>(track); - } - if (doAl) { - fillMCTrackHistograms<0, o2::track::PID::Alpha>(track); - fillMCTrackHistograms<1, o2::track::PID::Alpha>(track); - } - if (doUnId) { - fillMCTrackHistograms<0, o2::track::PID::NIDs>(track); - fillMCTrackHistograms<1, o2::track::PID::NIDs>(track); + // Filling variable histograms + histos.fill(HIST("MC/trackLength"), track.length()); + if (doEl) { + fillMCTrackHistograms<0, o2::track::PID::Electron>(track); + fillMCTrackHistograms<1, o2::track::PID::Electron>(track); + } + if (doMu) { + fillMCTrackHistograms<0, o2::track::PID::Muon>(track); + fillMCTrackHistograms<1, o2::track::PID::Muon>(track); + } + if (doPi) { + fillMCTrackHistograms<0, o2::track::PID::Pion>(track); + fillMCTrackHistograms<1, o2::track::PID::Pion>(track); + } + if (doKa) { + fillMCTrackHistograms<0, o2::track::PID::Kaon>(track); + fillMCTrackHistograms<1, o2::track::PID::Kaon>(track); + } + if (doPr) { + fillMCTrackHistograms<0, o2::track::PID::Proton>(track); + fillMCTrackHistograms<1, o2::track::PID::Proton>(track); + } + if (doDe) { + fillMCTrackHistograms<0, o2::track::PID::Deuteron>(track); + fillMCTrackHistograms<1, o2::track::PID::Deuteron>(track); + } + if (doTr) { + fillMCTrackHistograms<0, o2::track::PID::Triton>(track); + fillMCTrackHistograms<1, o2::track::PID::Triton>(track); + } + if (doHe) { + fillMCTrackHistograms<0, o2::track::PID::Helium3>(track); + fillMCTrackHistograms<1, o2::track::PID::Helium3>(track); + } + if (doAl) { + fillMCTrackHistograms<0, o2::track::PID::Alpha>(track); + fillMCTrackHistograms<1, o2::track::PID::Alpha>(track); + } + if (doUnId) { + fillMCTrackHistograms<0, o2::track::PID::NIDs>(track); + fillMCTrackHistograms<1, o2::track::PID::NIDs>(track); + } } } - float dNdEta = 0; - for (const auto& mcParticle : mcParticles) { // Loop on particles to fill the denominator + // Loop on particles to fill the denominator + float dNdEta = 0; // Multiplicity + for (const auto& mcParticle : mcParticles) { if (TMath::Abs(mcParticle.eta()) <= 2.f && !mcParticle.has_daughters()) { dNdEta += 1.f; } - if (rejectParticle(mcParticle, HIST("MC/particleSelection"))) { + if (!isInAcceptance(mcParticle, HIST("MC/particleSelection"))) { continue; } @@ -1141,34 +1259,44 @@ struct QaEfficiency { // Fill TEfficiencies if (doEl) { - fillMCEfficiency(); + fillMCEfficiency<0, o2::track::PID::Electron>(); + fillMCEfficiency<1, o2::track::PID::Electron>(); } if (doMu) { - fillMCEfficiency(); + fillMCEfficiency<0, o2::track::PID::Muon>(); + fillMCEfficiency<1, o2::track::PID::Muon>(); } if (doPi) { - fillMCEfficiency(); + fillMCEfficiency<0, o2::track::PID::Pion>(); + fillMCEfficiency<1, o2::track::PID::Pion>(); } if (doKa) { - fillMCEfficiency(); + fillMCEfficiency<0, o2::track::PID::Kaon>(); + fillMCEfficiency<1, o2::track::PID::Kaon>(); } if (doPr) { - fillMCEfficiency(); + fillMCEfficiency<0, o2::track::PID::Proton>(); + fillMCEfficiency<1, o2::track::PID::Proton>(); } if (doDe) { - fillMCEfficiency(); + fillMCEfficiency<0, o2::track::PID::Deuteron>(); + fillMCEfficiency<1, o2::track::PID::Deuteron>(); } if (doTr) { - fillMCEfficiency(); + fillMCEfficiency<0, o2::track::PID::Triton>(); + fillMCEfficiency<1, o2::track::PID::Triton>(); } if (doHe) { - fillMCEfficiency(); + fillMCEfficiency<0, o2::track::PID::Helium3>(); + fillMCEfficiency<1, o2::track::PID::Helium3>(); } if (doAl) { - fillMCEfficiency(); + fillMCEfficiency<0, o2::track::PID::Alpha>(); + fillMCEfficiency<1, o2::track::PID::Alpha>(); } if (doUnId) { - fillMCEfficiency(); + fillMCEfficiency<0, o2::track::PID::NIDs>(); + fillMCEfficiency<1, o2::track::PID::NIDs>(); } } PROCESS_SWITCH(QaEfficiency, processMC, "process MC", false); @@ -1181,22 +1309,10 @@ struct QaEfficiency { return; } - bool passedITSCuts = true; - bool passedTPCCuts = true; for (const auto& track : tracks) { - histos.fill(HIST("Data/trackSelection"), 1); - if ((track.pt() < ptMin || track.pt() > ptMax)) { // Check pt - continue; - } - histos.fill(HIST("Data/trackSelection"), 2); - if ((track.eta() < etaMin || track.eta() > etaMax)) { // Check eta - continue; - } - histos.fill(HIST("Data/trackSelection"), 3); - if ((track.phi() < phiMin || track.phi() > phiMax)) { // Check phi + if (!isTrackSelected(track, HIST("Data/trackSelection"))) { continue; } - histos.fill(HIST("Data/trackSelection"), 4); if (trackSelection.value > 0) { // Check general cuts if (!track.passedTrackType()) { continue; From 0c9f699658c9b1daa5fe2f3135f487bda570893e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Wed, 5 Oct 2022 11:52:37 +0200 Subject: [PATCH 04/14] Fix spectra task --- PWGLF/Tasks/spectraTOF.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGLF/Tasks/spectraTOF.cxx b/PWGLF/Tasks/spectraTOF.cxx index ff0e45a07fe..603159e4a75 100644 --- a/PWGLF/Tasks/spectraTOF.cxx +++ b/PWGLF/Tasks/spectraTOF.cxx @@ -176,7 +176,7 @@ struct tofSpectra { void init(o2::framework::InitContext&) { - if (doprocessRun2 == true && doprocessRun2 == true) { + if (doprocessRun2 == true && doprocessRun3 == true) { LOGF(fatal, "Cannot enable processRun2 and processRun3 at the same time. Please choose one."); } if (doprocessFullEl == true && doprocessTinyEl == true) { @@ -493,13 +493,13 @@ struct tofSpectra { } } - template + template bool isEventSelected(CollisionType const& collision) { if constexpr (fillHistograms) { histos.fill(HIST("evsel"), 1); } - if (doprocessRun2 && !collision.sel7()) { + if (doprocessRun2 == true && !collision.sel7()) { return false; } else if (!collision.sel8()) { From 670c76a41eaf65fda84e48932e06d64a365e068c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Wed, 5 Oct 2022 11:53:52 +0200 Subject: [PATCH 05/14] U --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index d66299d2ac4..07593052697 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -142,6 +142,7 @@ struct QaEfficiency { "MC/ka/neg/pt/generated", "MC/pr/neg/pt/generated", "MC/de/neg/pt/generated", "MC/tr/neg/pt/generated", "MC/he/neg/pt/generated", "MC/al/neg/pt/generated", "MC/all/neg/pt/generated"}; + // Pt for primaries static constexpr std::string_view hPtItsTpcPrm[nHistograms] = {"MC/el/pos/pt/its_tpc/prm", "MC/mu/pos/pt/its_tpc/prm", "MC/pi/pos/pt/its_tpc/prm", "MC/ka/pos/pt/its_tpc/prm", "MC/pr/pos/pt/its_tpc/prm", "MC/de/pos/pt/its_tpc/prm", @@ -175,6 +176,7 @@ struct QaEfficiency { "MC/ka/neg/pt/den/prm", "MC/pr/neg/pt/den/prm", "MC/de/neg/pt/den/prm", "MC/tr/neg/pt/den/prm", "MC/he/neg/pt/den/prm", "MC/al/neg/pt/den/prm", "MC/all/neg/pt/den/prm"}; + // Pt for secondaries from weak decay static constexpr std::string_view hPtItsTpcStr[nHistograms] = {"MC/el/pos/str/pt/num", "MC/mu/pos/str/pt/num", "MC/pi/pos/str/pt/num", "MC/ka/pos/str/pt/num", "MC/pr/pos/str/pt/num", "MC/de/pos/str/pt/num", @@ -208,6 +210,7 @@ struct QaEfficiency { "MC/ka/neg/str/pt/den", "MC/pr/neg/str/pt/den", "MC/de/neg/str/pt/den", "MC/tr/neg/str/pt/den", "MC/he/neg/str/pt/den", "MC/al/neg/str/pt/den", "MC/all/neg/str/pt/den"}; + // Pt for secondaries from material static constexpr std::string_view hPtItsTpcMat[nHistograms] = {"MC/el/pos/mat/pt/num", "MC/mu/pos/mat/pt/num", "MC/pi/pos/mat/pt/num", "MC/ka/pos/mat/pt/num", "MC/pr/pos/mat/pt/num", "MC/de/pos/mat/pt/num", @@ -309,6 +312,7 @@ struct QaEfficiency { "MC/ka/neg/eta/den", "MC/pr/neg/eta/den", "MC/de/neg/eta/den", "MC/tr/neg/eta/den", "MC/he/neg/eta/den", "MC/al/neg/eta/den", "MC/all/neg/eta/den"}; + // Y static constexpr std::string_view hYItsTpc[nHistograms] = {"MC/el/pos/y/num", "MC/mu/pos/y/num", "MC/pi/pos/y/num", "MC/ka/pos/y/num", "MC/pr/pos/y/num", "MC/de/pos/y/num", @@ -334,6 +338,7 @@ struct QaEfficiency { "MC/ka/neg/y/den", "MC/pr/neg/y/den", "MC/de/neg/y/den", "MC/tr/neg/y/den", "MC/he/neg/y/den", "MC/al/neg/y/den", "MC/all/neg/y/den"}; + // Phi static constexpr std::string_view hPhiItsTpc[nHistograms] = {"MC/el/pos/phi/num", "MC/mu/pos/phi/num", "MC/pi/pos/phi/num", "MC/ka/pos/phi/num", "MC/pr/pos/phi/num", "MC/de/pos/phi/num", @@ -367,6 +372,7 @@ struct QaEfficiency { "MC/ka/neg/phi/den", "MC/pr/neg/phi/den", "MC/de/neg/phi/den", "MC/tr/neg/phi/den", "MC/he/neg/phi/den", "MC/al/neg/phi/den", "MC/all/neg/phi/den"}; + // Pt-Eta static constexpr std::string_view hPtEtaItsTpc[nHistograms] = {"MC/el/pos/pteta/num", "MC/mu/pos/pteta/num", "MC/pi/pos/pteta/num", "MC/ka/pos/pteta/num", "MC/pr/pos/pteta/num", "MC/de/pos/pteta/num", From 67ae9850d1143f8a90c70ddba90ece16f561838b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Wed, 5 Oct 2022 12:29:33 +0200 Subject: [PATCH 06/14] Move to THashlist --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 140 +++++++++++++++++----------- 1 file changed, 83 insertions(+), 57 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index 07593052697..1ccc57ac505 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -29,7 +29,7 @@ // ROOT includes #include "TPDGCode.h" #include "TEfficiency.h" -#include "TList.h" +#include "THashList.h" using namespace o2::framework; @@ -71,8 +71,8 @@ struct QaEfficiency { Configurable doPtEta{"doPtEta", false, "Flag to produce the efficiency vs pT and Eta"}; Configurable applyEvSel{"applyEvSel", 0, "Flag to apply event selection: 0 -> no event selection, 1 -> Run 2 event selection, 2 -> Run 3 event selection"}; - OutputObj listEfficiencyMC{"EfficiencyMC"}; - OutputObj listEfficiencyData{"EfficiencyData"}; + OutputObj listEfficiencyMC{"EfficiencyMC"}; + OutputObj listEfficiencyData{"EfficiencyData"}; // Histograms HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; static constexpr int nHistograms = nSpecies * 2; @@ -507,6 +507,76 @@ struct QaEfficiency { histos.add(hPtEtaItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPtEta, kTH2D, {axisPt, axisEta}); histos.add(hPtEtaGenerated[histogramIndex].data(), "Generated " + tagPtEta, kTH2D, {axisPt, axisEta}); } + + if (makeEff) { + LOG(debug) << "Making TEfficiency for MC"; + THashList* subList = new THashList(); + subList->SetName(Form("%s_%s", chargeIndex == 0 ? "Positive" : "Negative", partName)); + listEfficiencyMC->Add(subList); + + auto makeEfficiency = [&](TString effname, auto templateHisto) { // 1D efficiencies + effname = partName + effname; + LOG(debug) << " - " << effname; + const auto h = histos.get(templateHisto); + const TAxis* axis = h->GetXaxis(); + TString efftitle = h->GetTitle(); + efftitle.ReplaceAll("Numerator", "").Strip(TString::kBoth); + efftitle = Form("%s;%s;Efficiency", efftitle.Data(), axis->GetTitle()); + if (axis->IsVariableBinSize()) { + subList->Add(new TEfficiency(effname, efftitle, axis->GetNbins(), axis->GetXbins()->GetArray())); + } else { + subList->Add(new TEfficiency(effname, efftitle, axis->GetNbins(), axis->GetXmin(), axis->GetXmax())); + } + }; + + makeEfficiency("ITS_vsPt", HIST(hPtIts[histogramIndex])); + makeEfficiency("TPC_vsPt", HIST(hPtTpc[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt", HIST(hPtItsTpc[histogramIndex])); + makeEfficiency("ITS-TOF_vsPt", HIST(hPtItsTof[histogramIndex])); + makeEfficiency("Tpc-TOF_vsPt", HIST(hPtTpcTof[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsPt", HIST(hPtItsTpcTof[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Trk", HIST(hPtTrkItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Prm", HIST(hPtItsTpcPrm[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Prm_Trk", HIST(hPtTrkItsTpcPrm[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsPt_Prm", HIST(hPtItsTpcTofPrm[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Str", HIST(hPtItsTpcStr[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Str_Trk", HIST(hPtTrkItsTpcStr[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsPt_Str", HIST(hPtItsTpcTofStr[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Mat", HIST(hPtItsTpcMat[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Mat_Trk", HIST(hPtTrkItsTpcMat[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsPt_Mat", HIST(hPtItsTpcTofMat[histogramIndex])); + makeEfficiency("ITS-TPC_vsP", HIST(hPItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC_vsP_Trk", HIST(hPTrkItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsP", HIST(hPItsTpcTof[histogramIndex])); + makeEfficiency("ITS-TPC_vsEta", HIST(hEtaItsTpc[histogramIndex])); + makeEfficiency("ITS-Tpc_vsEta_Trk", HIST(hEtaTrkItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsEta", HIST(hEtaItsTpcTof[histogramIndex])); + makeEfficiency("ITS-TPC_vsY", HIST(hYItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsY", HIST(hYItsTpcTof[histogramIndex])); + makeEfficiency("ITS-TPC_vsPhi", HIST(hPhiItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC_vsPhi_Trk", HIST(hPhiTrkItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsPhi", HIST(hPhiItsTpcTof[histogramIndex])); + + auto makeEfficiency2D = [&](TString effname, auto templateHisto) { // 2D efficiencies + effname = partName + effname; + LOG(debug) << " - " << effname; + const auto h = histos.get(templateHisto); + const TAxis* axisX = h->GetXaxis(); + const TAxis* axisY = h->GetYaxis(); + TString efftitle = h->GetTitle(); + efftitle.ReplaceAll("Numerator", "").Strip(TString::kBoth); + efftitle = Form("%s;%s;%s;Efficiency", efftitle.Data(), axisX->GetTitle(), axisY->GetTitle()); + if (axisX->IsVariableBinSize() || axisY->IsVariableBinSize()) { + subList->Add(new TEfficiency(effname, efftitle, axisX->GetNbins(), axisX->GetXbins()->GetArray(), axisY->GetNbins(), axisY->GetXbins()->GetArray())); + } else { + subList->Add(new TEfficiency(effname, efftitle, axisX->GetNbins(), axisX->GetXmin(), axisX->GetXmax(), axisY->GetNbins(), axisY->GetXmin(), axisY->GetXmax())); + } + }; + + if (doPtEta) { + makeEfficiency2D("ITS-TPC_vsPt_vsEta", HIST(hPtEtaItsTpc[histogramIndex])); + } + } }; if (doPositivePDG) { // Positive @@ -516,52 +586,6 @@ struct QaEfficiency { makeHistogramsPerCharge(1); } - if (makeEff) { - LOG(debug) << "Making TEfficiency for MC"; - TList* subList = new TList(); - subList->SetName(partName); - listEfficiencyMC->Add(subList); - auto makeEfficiency = [&](TString effname, auto templateHisto) { - effname = partName + effname; - LOG(debug) << " - " << effname; - const auto h = histos.get(templateHisto); - const TAxis* axis = h->GetXaxis(); - TString efftitle = h->GetTitle(); - efftitle.ReplaceAll("Numerator", "").Strip(TString::kBoth); - efftitle = Form("%s;%s;Efficiency", efftitle.Data(), axis->GetTitle()); - if (axis->IsVariableBinSize()) { - subList->Add(new TEfficiency(effname, efftitle, axis->GetNbins(), axis->GetXbins()->GetArray())); - } else { - subList->Add(new TEfficiency(effname, efftitle, axis->GetNbins(), axis->GetXmin(), axis->GetXmax())); - } - }; - makeEfficiency("efficiencyVsPt", HIST(hPtItsTpc[id])); - makeEfficiency("efficiencyVsPtPrm", HIST(hPtItsTpcPrm[id])); - makeEfficiency("efficiencyVsPtDec", HIST(hPtItsTpcStr[id])); - makeEfficiency("efficiencyVsPtMat", HIST(hPtItsTpcMat[id])); - makeEfficiency("efficiencyVsP", HIST(hPItsTpc[id])); - makeEfficiency("efficiencyVsEta", HIST(hEtaItsTpc[id])); - makeEfficiency("efficiencyVsPhi", HIST(hPhiItsTpc[id])); - - auto makeEfficiency2D = [&](TString effname, auto templateHisto) { - effname = partName + effname; - LOG(debug) << " - " << effname; - const auto h = histos.get(templateHisto); - const TAxis* axisX = h->GetXaxis(); - const TAxis* axisY = h->GetYaxis(); - TString efftitle = h->GetTitle(); - efftitle.ReplaceAll("Numerator", "").Strip(TString::kBoth); - efftitle = Form("%s;%s;%s;Efficiency", efftitle.Data(), axisX->GetTitle(), axisY->GetTitle()); - if (axisX->IsVariableBinSize() || axisY->IsVariableBinSize()) { - subList->Add(new TEfficiency(effname, efftitle, axisX->GetNbins(), axisX->GetXbins()->GetArray(), axisY->GetNbins(), axisY->GetXbins()->GetArray())); - } else { - subList->Add(new TEfficiency(effname, efftitle, axisX->GetNbins(), axisX->GetXmin(), axisX->GetXmax(), axisY->GetNbins(), axisY->GetXmin(), axisY->GetXmax())); - } - }; - if (doPtEta) { - makeEfficiency2D("efficiencyVsPtVsEta", HIST(hPtEtaItsTpc[id])); - } - } LOG(debug) << "Done with particle: " << partName; } @@ -601,7 +625,7 @@ struct QaEfficiency { histos.add("MC/trackLength", "Track length;Track length (cm)", kTH1F, {{2000, -1000, 1000}}); - listEfficiencyMC.setObject(new TList); + listEfficiencyMC.setObject(new THashList); makeMCHistograms(doEl); makeMCHistograms(doMu); makeMCHistograms(doPi); @@ -708,7 +732,7 @@ struct QaEfficiency { histos.add("Data/pos/etaphi/its", "ITS Positive " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); histos.add("Data/neg/etaphi/its", "ITS Negative " + tagEtaPhi, kTH2D, {axisEta, axisPhi}); - listEfficiencyData.setObject(new TList); + listEfficiencyData.setObject(new THashList); if (makeEff) { LOG(debug) << "Making TEfficiency for Data"; auto makeEfficiency = [&](TString effname, TString efftitle, auto templateHisto) { @@ -719,6 +743,13 @@ struct QaEfficiency { listEfficiencyData->Add(new TEfficiency(effname, efftitle, axis->GetNbins(), axis->GetXmin(), axis->GetXmax())); } }; + + makeEfficiency("ITSTPCMatchingEfficiencyVsPt", "ITS-TPC M.E. in data " + tagPt + ";#it{p}_{T} (GeV/#it{c});Efficiency", HIST("Data/pos/pt/its_tpc_tof")); + makeEfficiency("TPCTOFMatchingEfficiencyVsPt", "TPC-TOF M.E. in data " + tagPt + ";#it{p}_{T} (GeV/#it{c});Efficiency", HIST("Data/pos/pt/its_tpc_tof")); + makeEfficiency("TPCTOFMatchingEfficiencyVsP", "TPC-TOF M.E. in data " + tagPt + ";#it{p} (GeV/#it{c});Efficiency", HIST("Data/pos/pt/its_tpc_tof")); + makeEfficiency("TPCTOFMatchingEfficiencyVsEta", "TPC-TOF M.E. in data " + tagEta + ";#it{#eta};Efficiency", HIST("Data/pos/eta/its_tpc_tof")); + makeEfficiency("TPCTOFMatchingEfficiencyVsPhi", "TPC-TOF M.E. in data " + tagPhi + ";#it{#varphi} (rad);Efficiency", HIST("Data/pos/phi/its_tpc_tof")); + auto makeEfficiency2D = [&](TString effname, TString efftitle, auto templateHistoX, auto templateHistoY) { TAxis* axisX = histos.get(templateHistoX)->GetXaxis(); TAxis* axisY = histos.get(templateHistoY)->GetYaxis(); @@ -728,11 +759,6 @@ struct QaEfficiency { listEfficiencyData->Add(new TEfficiency(effname, efftitle, axisX->GetNbins(), axisX->GetXmin(), axisX->GetXmax(), axisY->GetNbins(), axisY->GetXmin(), axisY->GetXmax())); } }; - makeEfficiency("ITSTPCMatchingEfficiencyVsPt", "ITS-TPC M.E. in data " + tagPt + ";#it{p}_{T} (GeV/#it{c});Efficiency", HIST("Data/pos/pt/its_tpc_tof")); - makeEfficiency("TPCTOFMatchingEfficiencyVsPt", "TPC-TOF M.E. in data " + tagPt + ";#it{p}_{T} (GeV/#it{c});Efficiency", HIST("Data/pos/pt/its_tpc_tof")); - makeEfficiency("TPCTOFMatchingEfficiencyVsP", "TPC-TOF M.E. in data " + tagPt + ";#it{p} (GeV/#it{c});Efficiency", HIST("Data/pos/pt/its_tpc_tof")); - makeEfficiency("TPCTOFMatchingEfficiencyVsEta", "TPC-TOF M.E. in data " + tagEta + ";#it{#eta};Efficiency", HIST("Data/pos/eta/its_tpc_tof")); - makeEfficiency("TPCTOFMatchingEfficiencyVsPhi", "TPC-TOF M.E. in data " + tagPhi + ";#it{#varphi} (rad);Efficiency", HIST("Data/pos/phi/its_tpc_tof")); makeEfficiency2D("TPCTOFMatchingEfficiencyVsPtVsEta", Form("TPC-TOF M.E. in data #it{#varphi} [%.2f,%.2f];%s;%s;Efficiency", phiMin, phiMax, "#it{p}_{T} (GeV/#it{c})", "#it{#eta}"), HIST("Data/pos/pt/its_tpc_tof"), HIST("Data/pos/eta/its_tpc_tof")); makeEfficiency2D("TPCTOFMatchingEfficiencyVsPtVsPhi", Form("TPC-TOF M.E. in data #it{#eta} [%.2f,%.2f];%s;%s;Efficiency", etaMin, etaMax, "#it{p}_{T} (GeV/#it{c})", "#it{#varphi} (rad)"), HIST("Data/pos/pt/its_tpc_tof"), HIST("Data/pos/phi/its_tpc_tof")); @@ -923,7 +949,7 @@ struct QaEfficiency { const char* partName = id == o2::track::PID::NIDs ? "All" : o2::track::PID::getName(id); LOG(debug) << "Filling efficiency for particle " << static_cast(id) << " " << partName; - TList* subList = static_cast(listEfficiencyMC->FindObject(partName)); + THashList* subList = static_cast(listEfficiencyMC->FindObject(partName)); if (!subList) { LOG(warning) << "Cannot find list of efficiency objects for particle " << partName; return; From 730fd97cb435ac52ce044a6f0ec3dafb53923d56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Wed, 5 Oct 2022 16:34:43 +0200 Subject: [PATCH 07/14] UU --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 670 +++++++++++++++------------- 1 file changed, 354 insertions(+), 316 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index 1ccc57ac505..41db19eedfa 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -19,6 +19,7 @@ #include "Framework/AnalysisTask.h" #include "Framework/runDataProcessing.h" #include "Framework/HistogramRegistry.h" +#include "Framework/StaticFor.h" #include "ReconstructionDataFormats/DCA.h" #include "ReconstructionDataFormats/Track.h" #include "Common/Core/TrackSelection.h" @@ -168,244 +169,244 @@ struct QaEfficiency { "MC/ka/neg/pt/its_tpc_tof/prm", "MC/pr/neg/pt/its_tpc_tof/prm", "MC/de/neg/pt/its_tpc_tof/prm", "MC/tr/neg/pt/its_tpc_tof/prm", "MC/he/neg/pt/its_tpc_tof/prm", "MC/al/neg/pt/its_tpc_tof/prm", "MC/all/neg/pt/its_tpc_tof/prm"}; - static constexpr std::string_view hPtGeneratedPrm[nHistograms] = {"MC/el/pos/pt/den/prm", "MC/mu/pos/pt/den/prm", "MC/pi/pos/pt/den/prm", - "MC/ka/pos/pt/den/prm", "MC/pr/pos/pt/den/prm", "MC/de/pos/pt/den/prm", - "MC/tr/pos/pt/den/prm", "MC/he/pos/pt/den/prm", "MC/al/pos/pt/den/prm", - "MC/all/pos/pt/den/prm", - "MC/el/neg/pt/den/prm", "MC/mu/neg/pt/den/prm", "MC/pi/neg/pt/den/prm", - "MC/ka/neg/pt/den/prm", "MC/pr/neg/pt/den/prm", "MC/de/neg/pt/den/prm", - "MC/tr/neg/pt/den/prm", "MC/he/neg/pt/den/prm", "MC/al/neg/pt/den/prm", - "MC/all/neg/pt/den/prm"}; + static constexpr std::string_view hPtGeneratedPrm[nHistograms] = {"MC/el/pos/pt/generated/prm", "MC/mu/pos/pt/generated/prm", "MC/pi/pos/pt/generated/prm", + "MC/ka/pos/pt/generated/prm", "MC/pr/pos/pt/generated/prm", "MC/de/pos/pt/generated/prm", + "MC/tr/pos/pt/generated/prm", "MC/he/pos/pt/generated/prm", "MC/al/pos/pt/generated/prm", + "MC/all/pos/pt/generated/prm", + "MC/el/neg/pt/generated/prm", "MC/mu/neg/pt/generated/prm", "MC/pi/neg/pt/generated/prm", + "MC/ka/neg/pt/generated/prm", "MC/pr/neg/pt/generated/prm", "MC/de/neg/pt/generated/prm", + "MC/tr/neg/pt/generated/prm", "MC/he/neg/pt/generated/prm", "MC/al/neg/pt/generated/prm", + "MC/all/neg/pt/generated/prm"}; // Pt for secondaries from weak decay - static constexpr std::string_view hPtItsTpcStr[nHistograms] = {"MC/el/pos/str/pt/num", "MC/mu/pos/str/pt/num", "MC/pi/pos/str/pt/num", - "MC/ka/pos/str/pt/num", "MC/pr/pos/str/pt/num", "MC/de/pos/str/pt/num", - "MC/tr/pos/str/pt/num", "MC/he/pos/str/pt/num", "MC/al/pos/str/pt/num", - "MC/all/pos/str/pt/num", - "MC/el/neg/str/pt/num", "MC/mu/neg/str/pt/num", "MC/pi/neg/str/pt/num", - "MC/ka/neg/str/pt/num", "MC/pr/neg/str/pt/num", "MC/de/neg/str/pt/num", - "MC/tr/neg/str/pt/num", "MC/he/neg/str/pt/num", "MC/al/neg/str/pt/num", - "MC/all/neg/str/pt/num"}; - static constexpr std::string_view hPtTrkItsTpcStr[nHistograms] = {"MC/el/pos/str/pt/numtrk", "MC/mu/pos/str/pt/numtrk", "MC/pi/pos/str/pt/numtrk", - "MC/ka/pos/str/pt/numtrk", "MC/pr/pos/str/pt/numtrk", "MC/de/pos/str/pt/numtrk", - "MC/tr/pos/str/pt/numtrk", "MC/he/pos/str/pt/numtrk", "MC/al/pos/str/pt/numtrk", - "MC/all/pos/str/pt/numtrk", - "MC/el/neg/str/pt/numtrk", "MC/mu/neg/str/pt/numtrk", "MC/pi/neg/str/pt/numtrk", - "MC/ka/neg/str/pt/numtrk", "MC/pr/neg/str/pt/numtrk", "MC/de/neg/str/pt/numtrk", - "MC/tr/neg/str/pt/numtrk", "MC/he/neg/str/pt/numtrk", "MC/al/neg/str/pt/numtrk", - "MC/all/neg/str/pt/numtrk"}; - static constexpr std::string_view hPtItsTpcTofStr[nHistograms] = {"MC/el/pos/str/pt/numtof", "MC/mu/pos/str/pt/numtof", "MC/pi/pos/str/pt/numtof", - "MC/ka/pos/str/pt/numtof", "MC/pr/pos/str/pt/numtof", "MC/de/pos/str/pt/numtof", - "MC/tr/pos/str/pt/numtof", "MC/he/pos/str/pt/numtof", "MC/al/pos/str/pt/numtof", - "MC/all/pos/str/pt/numtof", - "MC/el/neg/str/pt/numtof", "MC/mu/neg/str/pt/numtof", "MC/pi/neg/str/pt/numtof", - "MC/ka/neg/str/pt/numtof", "MC/pr/neg/str/pt/numtof", "MC/de/neg/str/pt/numtof", - "MC/tr/neg/str/pt/numtof", "MC/he/neg/str/pt/numtof", "MC/al/neg/str/pt/numtof", - "MC/all/neg/str/pt/numtof"}; - static constexpr std::string_view hPtGeneratedStr[nHistograms] = {"MC/el/pos/str/pt/den", "MC/mu/pos/str/pt/den", "MC/pi/pos/str/pt/den", - "MC/ka/pos/str/pt/den", "MC/pr/pos/str/pt/den", "MC/de/pos/str/pt/den", - "MC/tr/pos/str/pt/den", "MC/he/pos/str/pt/den", "MC/al/pos/str/pt/den", - "MC/all/pos/str/pt/den", - "MC/el/neg/str/pt/den", "MC/mu/neg/str/pt/den", "MC/pi/neg/str/pt/den", - "MC/ka/neg/str/pt/den", "MC/pr/neg/str/pt/den", "MC/de/neg/str/pt/den", - "MC/tr/neg/str/pt/den", "MC/he/neg/str/pt/den", "MC/al/neg/str/pt/den", - "MC/all/neg/str/pt/den"}; + static constexpr std::string_view hPtItsTpcStr[nHistograms] = {"MC/el/pos/pt/its_tpc/str", "MC/mu/pos/pt/its_tpc/str", "MC/pi/pos/pt/its_tpc/str", + "MC/ka/pos/pt/its_tpc/str", "MC/pr/pos/pt/its_tpc/str", "MC/de/pos/pt/its_tpc/str", + "MC/tr/pos/pt/its_tpc/str", "MC/he/pos/pt/its_tpc/str", "MC/al/pos/pt/its_tpc/str", + "MC/all/pos/pt/its_tpc/str", + "MC/el/neg/pt/its_tpc/str", "MC/mu/neg/pt/its_tpc/str", "MC/pi/neg/pt/its_tpc/str", + "MC/ka/neg/pt/its_tpc/str", "MC/pr/neg/pt/its_tpc/str", "MC/de/neg/pt/its_tpc/str", + "MC/tr/neg/pt/its_tpc/str", "MC/he/neg/pt/its_tpc/str", "MC/al/neg/pt/its_tpc/str", + "MC/all/neg/pt/its_tpc/str"}; + static constexpr std::string_view hPtTrkItsTpcStr[nHistograms] = {"MC/el/pos/pt/its_tpc/trk/str", "MC/mu/pos/pt/its_tpc/trk/str", "MC/pi/pos/pt/its_tpc/trk/str", + "MC/ka/pos/pt/its_tpc/trk/str", "MC/pr/pos/pt/its_tpc/trk/str", "MC/de/pos/pt/its_tpc/trk/str", + "MC/tr/pos/pt/its_tpc/trk/str", "MC/he/pos/pt/its_tpc/trk/str", "MC/al/pos/pt/its_tpc/trk/str", + "MC/all/pos/pt/its_tpc/trk/str", + "MC/el/neg/pt/its_tpc/trk/str", "MC/mu/neg/pt/its_tpc/trk/str", "MC/pi/neg/pt/its_tpc/trk/str", + "MC/ka/neg/pt/its_tpc/trk/str", "MC/pr/neg/pt/its_tpc/trk/str", "MC/de/neg/pt/its_tpc/trk/str", + "MC/tr/neg/pt/its_tpc/trk/str", "MC/he/neg/pt/its_tpc/trk/str", "MC/al/neg/pt/its_tpc/trk/str", + "MC/all/neg/pt/its_tpc/trk/str"}; + static constexpr std::string_view hPtItsTpcTofStr[nHistograms] = {"MC/el/pos/pt/its_tpc_tof/str", "MC/mu/pos/pt/its_tpc_tof/str", "MC/pi/pos/pt/its_tpc_tof/str", + "MC/ka/pos/pt/its_tpc_tof/str", "MC/pr/pos/pt/its_tpc_tof/str", "MC/de/pos/pt/its_tpc_tof/str", + "MC/tr/pos/pt/its_tpc_tof/str", "MC/he/pos/pt/its_tpc_tof/str", "MC/al/pos/pt/its_tpc_tof/str", + "MC/all/pos/pt/its_tpc_tof/str", + "MC/el/neg/pt/its_tpc_tof/str", "MC/mu/neg/pt/its_tpc_tof/str", "MC/pi/neg/pt/its_tpc_tof/str", + "MC/ka/neg/pt/its_tpc_tof/str", "MC/pr/neg/pt/its_tpc_tof/str", "MC/de/neg/pt/its_tpc_tof/str", + "MC/tr/neg/pt/its_tpc_tof/str", "MC/he/neg/pt/its_tpc_tof/str", "MC/al/neg/pt/its_tpc_tof/str", + "MC/all/neg/pt/its_tpc_tof/str"}; + static constexpr std::string_view hPtGeneratedStr[nHistograms] = {"MC/el/pos/pt/generated/str", "MC/mu/pos/pt/generated/str", "MC/pi/pos/pt/generated/str", + "MC/ka/pos/pt/generated/str", "MC/pr/pos/pt/generated/str", "MC/de/pos/pt/generated/str", + "MC/tr/pos/pt/generated/str", "MC/he/pos/pt/generated/str", "MC/al/pos/pt/generated/str", + "MC/all/pos/pt/generated/str", + "MC/el/neg/pt/generated/str", "MC/mu/neg/pt/generated/str", "MC/pi/neg/pt/generated/str", + "MC/ka/neg/pt/generated/str", "MC/pr/neg/pt/generated/str", "MC/de/neg/pt/generated/str", + "MC/tr/neg/pt/generated/str", "MC/he/neg/pt/generated/str", "MC/al/neg/pt/generated/str", + "MC/all/neg/pt/generated/str"}; // Pt for secondaries from material - static constexpr std::string_view hPtItsTpcMat[nHistograms] = {"MC/el/pos/mat/pt/num", "MC/mu/pos/mat/pt/num", "MC/pi/pos/mat/pt/num", - "MC/ka/pos/mat/pt/num", "MC/pr/pos/mat/pt/num", "MC/de/pos/mat/pt/num", - "MC/tr/pos/mat/pt/num", "MC/he/pos/mat/pt/num", "MC/al/pos/mat/pt/num", - "MC/all/pos/mat/pt/num", - "MC/el/neg/mat/pt/num", "MC/mu/neg/mat/pt/num", "MC/pi/neg/mat/pt/num", - "MC/ka/neg/mat/pt/num", "MC/pr/neg/mat/pt/num", "MC/de/neg/mat/pt/num", - "MC/tr/neg/mat/pt/num", "MC/he/neg/mat/pt/num", "MC/al/neg/mat/pt/num", - "MC/all/neg/mat/pt/num"}; - static constexpr std::string_view hPtTrkItsTpcMat[nHistograms] = {"MC/el/pos/mat/pt/numtrk", "MC/mu/pos/mat/pt/numtrk", "MC/pi/pos/mat/pt/numtrk", - "MC/ka/pos/mat/pt/numtrk", "MC/pr/pos/mat/pt/numtrk", "MC/de/pos/mat/pt/numtrk", - "MC/tr/pos/mat/pt/numtrk", "MC/he/pos/mat/pt/numtrk", "MC/al/pos/mat/pt/numtrk", - "MC/all/pos/mat/pt/numtrk", - "MC/el/neg/mat/pt/numtrk", "MC/mu/neg/mat/pt/numtrk", "MC/pi/neg/mat/pt/numtrk", - "MC/ka/neg/mat/pt/numtrk", "MC/pr/neg/mat/pt/numtrk", "MC/de/neg/mat/pt/numtrk", - "MC/tr/neg/mat/pt/numtrk", "MC/he/neg/mat/pt/numtrk", "MC/al/neg/mat/pt/numtrk", - "MC/all/neg/mat/pt/numtrk"}; - static constexpr std::string_view hPtItsTpcTofMat[nHistograms] = {"MC/el/pos/mat/pt/numtof", "MC/mu/pos/mat/pt/numtof", "MC/pi/pos/mat/pt/numtof", - "MC/ka/pos/mat/pt/numtof", "MC/pr/pos/mat/pt/numtof", "MC/de/pos/mat/pt/numtof", - "MC/tr/pos/mat/pt/numtof", "MC/he/pos/mat/pt/numtof", "MC/al/pos/mat/pt/numtof", - "MC/all/pos/mat/pt/numtof", - "MC/el/neg/mat/pt/numtof", "MC/mu/neg/mat/pt/numtof", "MC/pi/neg/mat/pt/numtof", - "MC/ka/neg/mat/pt/numtof", "MC/pr/neg/mat/pt/numtof", "MC/de/neg/mat/pt/numtof", - "MC/tr/neg/mat/pt/numtof", "MC/he/neg/mat/pt/numtof", "MC/al/neg/mat/pt/numtof", - "MC/all/neg/mat/pt/numtof"}; - static constexpr std::string_view hPtGeneratedMat[nHistograms] = {"MC/el/pos/mat/pt/den", "MC/mu/pos/mat/pt/den", "MC/pi/pos/mat/pt/den", - "MC/ka/pos/mat/pt/den", "MC/pr/pos/mat/pt/den", "MC/de/pos/mat/pt/den", - "MC/tr/pos/mat/pt/den", "MC/he/pos/mat/pt/den", "MC/al/pos/mat/pt/den", - "MC/all/pos/mat/pt/den", - "MC/el/neg/mat/pt/den", "MC/mu/neg/mat/pt/den", "MC/pi/neg/mat/pt/den", - "MC/ka/neg/mat/pt/den", "MC/pr/neg/mat/pt/den", "MC/de/neg/mat/pt/den", - "MC/tr/neg/mat/pt/den", "MC/he/neg/mat/pt/den", "MC/al/neg/mat/pt/den", - "MC/all/neg/mat/pt/den"}; + static constexpr std::string_view hPtItsTpcMat[nHistograms] = {"MC/el/pos/pt/its_tpc/mat", "MC/mu/pos/pt/its_tpc/mat", "MC/pi/pos/pt/its_tpc/mat", + "MC/ka/pos/pt/its_tpc/mat", "MC/pr/pos/pt/its_tpc/mat", "MC/de/pos/pt/its_tpc/mat", + "MC/tr/pos/pt/its_tpc/mat", "MC/he/pos/pt/its_tpc/mat", "MC/al/pos/pt/its_tpc/mat", + "MC/all/pos/pt/its_tpc/mat", + "MC/el/neg/pt/its_tpc/mat", "MC/mu/neg/pt/its_tpc/mat", "MC/pi/neg/pt/its_tpc/mat", + "MC/ka/neg/pt/its_tpc/mat", "MC/pr/neg/pt/its_tpc/mat", "MC/de/neg/pt/its_tpc/mat", + "MC/tr/neg/pt/its_tpc/mat", "MC/he/neg/pt/its_tpc/mat", "MC/al/neg/pt/its_tpc/mat", + "MC/all/neg/pt/its_tpc/mat"}; + static constexpr std::string_view hPtTrkItsTpcMat[nHistograms] = {"MC/el/pos/pt/its_tpc/trk/mat", "MC/mu/pos/pt/its_tpc/trk/mat", "MC/pi/pos/pt/its_tpc/trk/mat", + "MC/ka/pos/pt/its_tpc/trk/mat", "MC/pr/pos/pt/its_tpc/trk/mat", "MC/de/pos/pt/its_tpc/trk/mat", + "MC/tr/pos/pt/its_tpc/trk/mat", "MC/he/pos/pt/its_tpc/trk/mat", "MC/al/pos/pt/its_tpc/trk/mat", + "MC/all/pos/pt/its_tpc/trk/mat", + "MC/el/neg/pt/its_tpc/trk/mat", "MC/mu/neg/pt/its_tpc/trk/mat", "MC/pi/neg/pt/its_tpc/trk/mat", + "MC/ka/neg/pt/its_tpc/trk/mat", "MC/pr/neg/pt/its_tpc/trk/mat", "MC/de/neg/pt/its_tpc/trk/mat", + "MC/tr/neg/pt/its_tpc/trk/mat", "MC/he/neg/pt/its_tpc/trk/mat", "MC/al/neg/pt/its_tpc/trk/mat", + "MC/all/neg/pt/its_tpc/trk/mat"}; + static constexpr std::string_view hPtItsTpcTofMat[nHistograms] = {"MC/el/pos/pt/its_tpc_tof/mat", "MC/mu/pos/pt/its_tpc_tof/mat", "MC/pi/pos/pt/its_tpc_tof/mat", + "MC/ka/pos/pt/its_tpc_tof/mat", "MC/pr/pos/pt/its_tpc_tof/mat", "MC/de/pos/pt/its_tpc_tof/mat", + "MC/tr/pos/pt/its_tpc_tof/mat", "MC/he/pos/pt/its_tpc_tof/mat", "MC/al/pos/pt/its_tpc_tof/mat", + "MC/all/pos/pt/its_tpc_tof/mat", + "MC/el/neg/pt/its_tpc_tof/mat", "MC/mu/neg/pt/its_tpc_tof/mat", "MC/pi/neg/pt/its_tpc_tof/mat", + "MC/ka/neg/pt/its_tpc_tof/mat", "MC/pr/neg/pt/its_tpc_tof/mat", "MC/de/neg/pt/its_tpc_tof/mat", + "MC/tr/neg/pt/its_tpc_tof/mat", "MC/he/neg/pt/its_tpc_tof/mat", "MC/al/neg/pt/its_tpc_tof/mat", + "MC/all/neg/pt/its_tpc_tof/mat"}; + static constexpr std::string_view hPtGeneratedMat[nHistograms] = {"MC/el/pos/pt/generated/mat", "MC/mu/pos/pt/generated/mat", "MC/pi/pos/pt/generated/mat", + "MC/ka/pos/pt/generated/mat", "MC/pr/pos/pt/generated/mat", "MC/de/pos/pt/generated/mat", + "MC/tr/pos/pt/generated/mat", "MC/he/pos/pt/generated/mat", "MC/al/pos/pt/generated/mat", + "MC/all/pos/pt/generated/mat", + "MC/el/neg/pt/generated/mat", "MC/mu/neg/pt/generated/mat", "MC/pi/neg/pt/generated/mat", + "MC/ka/neg/pt/generated/mat", "MC/pr/neg/pt/generated/mat", "MC/de/neg/pt/generated/mat", + "MC/tr/neg/pt/generated/mat", "MC/he/neg/pt/generated/mat", "MC/al/neg/pt/generated/mat", + "MC/all/neg/pt/generated/mat"}; // P - static constexpr std::string_view hPItsTpc[nHistograms] = {"MC/el/pos/p/num", "MC/mu/pos/p/num", "MC/pi/pos/p/num", - "MC/ka/pos/p/num", "MC/pr/pos/p/num", "MC/de/pos/p/num", - "MC/tr/pos/p/num", "MC/he/pos/p/num", "MC/al/pos/p/num", - "MC/all/pos/p/num", - "MC/el/neg/p/num", "MC/mu/neg/p/num", "MC/pi/neg/p/num", - "MC/ka/neg/p/num", "MC/pr/neg/p/num", "MC/de/neg/p/num", - "MC/tr/neg/p/num", "MC/he/neg/p/num", "MC/al/neg/p/num", - "MC/all/neg/p/num"}; - static constexpr std::string_view hPTrkItsTpc[nHistograms] = {"MC/el/pos/p/numtrk", "MC/mu/pos/p/numtrk", "MC/pi/pos/p/numtrk", - "MC/ka/pos/p/numtrk", "MC/pr/pos/p/numtrk", "MC/de/pos/p/numtrk", - "MC/tr/pos/p/numtrk", "MC/he/pos/p/numtrk", "MC/al/pos/p/numtrk", - "MC/all/pos/p/numtrk", - "MC/el/neg/p/numtrk", "MC/mu/neg/p/numtrk", "MC/pi/neg/p/numtrk", - "MC/ka/neg/p/numtrk", "MC/pr/neg/p/numtrk", "MC/de/neg/p/numtrk", - "MC/tr/neg/p/numtrk", "MC/he/neg/p/numtrk", "MC/al/neg/p/numtrk", - "MC/all/neg/p/numtrk"}; - static constexpr std::string_view hPItsTpcTof[nHistograms] = {"MC/el/pos/p/numtof", "MC/mu/pos/p/numtof", "MC/pi/pos/p/numtof", - "MC/ka/pos/p/numtof", "MC/pr/pos/p/numtof", "MC/de/pos/p/numtof", - "MC/tr/pos/p/numtof", "MC/he/pos/p/numtof", "MC/al/pos/p/numtof", - "MC/all/pos/p/numtof", - "MC/el/neg/p/numtof", "MC/mu/neg/p/numtof", "MC/pi/neg/p/numtof", - "MC/ka/neg/p/numtof", "MC/pr/neg/p/numtof", "MC/de/neg/p/numtof", - "MC/tr/neg/p/numtof", "MC/he/neg/p/numtof", "MC/al/neg/p/numtof", - "MC/all/neg/p/numtof"}; - static constexpr std::string_view hPGenerated[nHistograms] = {"MC/el/pos/p/den", "MC/mu/pos/p/den", "MC/pi/pos/p/den", - "MC/ka/pos/p/den", "MC/pr/pos/p/den", "MC/de/pos/p/den", - "MC/tr/pos/p/den", "MC/he/pos/p/den", "MC/al/pos/p/den", - "MC/all/pos/p/den", - "MC/el/neg/p/den", "MC/mu/neg/p/den", "MC/pi/neg/p/den", - "MC/ka/neg/p/den", "MC/pr/neg/p/den", "MC/de/neg/p/den", - "MC/tr/neg/p/den", "MC/he/neg/p/den", "MC/al/neg/p/den", - "MC/all/neg/p/den"}; + static constexpr std::string_view hPItsTpc[nHistograms] = {"MC/el/pos/p/its_tpc", "MC/mu/pos/p/its_tpc", "MC/pi/pos/p/its_tpc", + "MC/ka/pos/p/its_tpc", "MC/pr/pos/p/its_tpc", "MC/de/pos/p/its_tpc", + "MC/tr/pos/p/its_tpc", "MC/he/pos/p/its_tpc", "MC/al/pos/p/its_tpc", + "MC/all/pos/p/its_tpc", + "MC/el/neg/p/its_tpc", "MC/mu/neg/p/its_tpc", "MC/pi/neg/p/its_tpc", + "MC/ka/neg/p/its_tpc", "MC/pr/neg/p/its_tpc", "MC/de/neg/p/its_tpc", + "MC/tr/neg/p/its_tpc", "MC/he/neg/p/its_tpc", "MC/al/neg/p/its_tpc", + "MC/all/neg/p/its_tpc"}; + static constexpr std::string_view hPTrkItsTpc[nHistograms] = {"MC/el/pos/p/its_tpc/trk", "MC/mu/pos/p/its_tpc/trk", "MC/pi/pos/p/its_tpc/trk", + "MC/ka/pos/p/its_tpc/trk", "MC/pr/pos/p/its_tpc/trk", "MC/de/pos/p/its_tpc/trk", + "MC/tr/pos/p/its_tpc/trk", "MC/he/pos/p/its_tpc/trk", "MC/al/pos/p/its_tpc/trk", + "MC/all/pos/p/its_tpc/trk", + "MC/el/neg/p/its_tpc/trk", "MC/mu/neg/p/its_tpc/trk", "MC/pi/neg/p/its_tpc/trk", + "MC/ka/neg/p/its_tpc/trk", "MC/pr/neg/p/its_tpc/trk", "MC/de/neg/p/its_tpc/trk", + "MC/tr/neg/p/its_tpc/trk", "MC/he/neg/p/its_tpc/trk", "MC/al/neg/p/its_tpc/trk", + "MC/all/neg/p/its_tpc/trk"}; + static constexpr std::string_view hPItsTpcTof[nHistograms] = {"MC/el/pos/p/its_tpc_tof", "MC/mu/pos/p/its_tpc_tof", "MC/pi/pos/p/its_tpc_tof", + "MC/ka/pos/p/its_tpc_tof", "MC/pr/pos/p/its_tpc_tof", "MC/de/pos/p/its_tpc_tof", + "MC/tr/pos/p/its_tpc_tof", "MC/he/pos/p/its_tpc_tof", "MC/al/pos/p/its_tpc_tof", + "MC/all/pos/p/its_tpc_tof", + "MC/el/neg/p/its_tpc_tof", "MC/mu/neg/p/its_tpc_tof", "MC/pi/neg/p/its_tpc_tof", + "MC/ka/neg/p/its_tpc_tof", "MC/pr/neg/p/its_tpc_tof", "MC/de/neg/p/its_tpc_tof", + "MC/tr/neg/p/its_tpc_tof", "MC/he/neg/p/its_tpc_tof", "MC/al/neg/p/its_tpc_tof", + "MC/all/neg/p/its_tpc_tof"}; + static constexpr std::string_view hPGenerated[nHistograms] = {"MC/el/pos/p/generated", "MC/mu/pos/p/generated", "MC/pi/pos/p/generated", + "MC/ka/pos/p/generated", "MC/pr/pos/p/generated", "MC/de/pos/p/generated", + "MC/tr/pos/p/generated", "MC/he/pos/p/generated", "MC/al/pos/p/generated", + "MC/all/pos/p/generated", + "MC/el/neg/p/generated", "MC/mu/neg/p/generated", "MC/pi/neg/p/generated", + "MC/ka/neg/p/generated", "MC/pr/neg/p/generated", "MC/de/neg/p/generated", + "MC/tr/neg/p/generated", "MC/he/neg/p/generated", "MC/al/neg/p/generated", + "MC/all/neg/p/generated"}; // Eta - static constexpr std::string_view hEtaItsTpc[nHistograms] = {"MC/el/pos/eta/num", "MC/mu/pos/eta/num", "MC/pi/pos/eta/num", - "MC/ka/pos/eta/num", "MC/pr/pos/eta/num", "MC/de/pos/eta/num", - "MC/tr/pos/eta/num", "MC/he/pos/eta/num", "MC/al/pos/eta/num", - "MC/all/pos/eta/num", - "MC/el/neg/eta/num", "MC/mu/neg/eta/num", "MC/pi/neg/eta/num", - "MC/ka/neg/eta/num", "MC/pr/neg/eta/num", "MC/de/neg/eta/num", - "MC/tr/neg/eta/num", "MC/he/neg/eta/num", "MC/al/neg/eta/num", - "MC/all/neg/eta/num"}; - static constexpr std::string_view hEtaTrkItsTpc[nHistograms] = {"MC/el/pos/eta/numtrk", "MC/mu/pos/eta/numtrk", "MC/pi/pos/eta/numtrk", - "MC/ka/pos/eta/numtrk", "MC/pr/pos/eta/numtrk", "MC/de/pos/eta/numtrk", - "MC/tr/pos/eta/numtrk", "MC/he/pos/eta/numtrk", "MC/al/pos/eta/numtrk", - "MC/all/pos/eta/numtrk", - "MC/el/neg/eta/numtrk", "MC/mu/neg/eta/numtrk", "MC/pi/neg/eta/numtrk", - "MC/ka/neg/eta/numtrk", "MC/pr/neg/eta/numtrk", "MC/de/neg/eta/numtrk", - "MC/tr/neg/eta/numtrk", "MC/he/neg/eta/numtrk", "MC/al/neg/eta/numtrk", - "MC/all/neg/eta/numtrk"}; - static constexpr std::string_view hEtaItsTpcTof[nHistograms] = {"MC/el/pos/eta/numtof", "MC/mu/pos/eta/numtof", "MC/pi/pos/eta/numtof", - "MC/ka/pos/eta/numtof", "MC/pr/pos/eta/numtof", "MC/de/pos/eta/numtof", - "MC/tr/pos/eta/numtof", "MC/he/pos/eta/numtof", "MC/al/pos/eta/numtof", - "MC/all/pos/eta/numtof", - "MC/el/neg/eta/numtof", "MC/mu/neg/eta/numtof", "MC/pi/neg/eta/numtof", - "MC/ka/neg/eta/numtof", "MC/pr/neg/eta/numtof", "MC/de/neg/eta/numtof", - "MC/tr/neg/eta/numtof", "MC/he/neg/eta/numtof", "MC/al/neg/eta/numtof", - "MC/all/neg/eta/numtof"}; - static constexpr std::string_view hEtaGenerated[nHistograms] = {"MC/el/pos/eta/den", "MC/mu/pos/eta/den", "MC/pi/pos/eta/den", - "MC/ka/pos/eta/den", "MC/pr/pos/eta/den", "MC/de/pos/eta/den", - "MC/tr/pos/eta/den", "MC/he/pos/eta/den", "MC/al/pos/eta/den", - "MC/all/pos/eta/den", - "MC/el/neg/eta/den", "MC/mu/neg/eta/den", "MC/pi/neg/eta/den", - "MC/ka/neg/eta/den", "MC/pr/neg/eta/den", "MC/de/neg/eta/den", - "MC/tr/neg/eta/den", "MC/he/neg/eta/den", "MC/al/neg/eta/den", - "MC/all/neg/eta/den"}; + static constexpr std::string_view hEtaItsTpc[nHistograms] = {"MC/el/pos/eta/its_tpc", "MC/mu/pos/eta/its_tpc", "MC/pi/pos/eta/its_tpc", + "MC/ka/pos/eta/its_tpc", "MC/pr/pos/eta/its_tpc", "MC/de/pos/eta/its_tpc", + "MC/tr/pos/eta/its_tpc", "MC/he/pos/eta/its_tpc", "MC/al/pos/eta/its_tpc", + "MC/all/pos/eta/its_tpc", + "MC/el/neg/eta/its_tpc", "MC/mu/neg/eta/its_tpc", "MC/pi/neg/eta/its_tpc", + "MC/ka/neg/eta/its_tpc", "MC/pr/neg/eta/its_tpc", "MC/de/neg/eta/its_tpc", + "MC/tr/neg/eta/its_tpc", "MC/he/neg/eta/its_tpc", "MC/al/neg/eta/its_tpc", + "MC/all/neg/eta/its_tpc"}; + static constexpr std::string_view hEtaTrkItsTpc[nHistograms] = {"MC/el/pos/eta/its_tpc/trk", "MC/mu/pos/eta/its_tpc/trk", "MC/pi/pos/eta/its_tpc/trk", + "MC/ka/pos/eta/its_tpc/trk", "MC/pr/pos/eta/its_tpc/trk", "MC/de/pos/eta/its_tpc/trk", + "MC/tr/pos/eta/its_tpc/trk", "MC/he/pos/eta/its_tpc/trk", "MC/al/pos/eta/its_tpc/trk", + "MC/all/pos/eta/its_tpc/trk", + "MC/el/neg/eta/its_tpc/trk", "MC/mu/neg/eta/its_tpc/trk", "MC/pi/neg/eta/its_tpc/trk", + "MC/ka/neg/eta/its_tpc/trk", "MC/pr/neg/eta/its_tpc/trk", "MC/de/neg/eta/its_tpc/trk", + "MC/tr/neg/eta/its_tpc/trk", "MC/he/neg/eta/its_tpc/trk", "MC/al/neg/eta/its_tpc/trk", + "MC/all/neg/eta/its_tpc/trk"}; + static constexpr std::string_view hEtaItsTpcTof[nHistograms] = {"MC/el/pos/eta/its_tpc_tof", "MC/mu/pos/eta/its_tpc_tof", "MC/pi/pos/eta/its_tpc_tof", + "MC/ka/pos/eta/its_tpc_tof", "MC/pr/pos/eta/its_tpc_tof", "MC/de/pos/eta/its_tpc_tof", + "MC/tr/pos/eta/its_tpc_tof", "MC/he/pos/eta/its_tpc_tof", "MC/al/pos/eta/its_tpc_tof", + "MC/all/pos/eta/its_tpc_tof", + "MC/el/neg/eta/its_tpc_tof", "MC/mu/neg/eta/its_tpc_tof", "MC/pi/neg/eta/its_tpc_tof", + "MC/ka/neg/eta/its_tpc_tof", "MC/pr/neg/eta/its_tpc_tof", "MC/de/neg/eta/its_tpc_tof", + "MC/tr/neg/eta/its_tpc_tof", "MC/he/neg/eta/its_tpc_tof", "MC/al/neg/eta/its_tpc_tof", + "MC/all/neg/eta/its_tpc_tof"}; + static constexpr std::string_view hEtaGenerated[nHistograms] = {"MC/el/pos/eta/generated", "MC/mu/pos/eta/generated", "MC/pi/pos/eta/generated", + "MC/ka/pos/eta/generated", "MC/pr/pos/eta/generated", "MC/de/pos/eta/generated", + "MC/tr/pos/eta/generated", "MC/he/pos/eta/generated", "MC/al/pos/eta/generated", + "MC/all/pos/eta/generated", + "MC/el/neg/eta/generated", "MC/mu/neg/eta/generated", "MC/pi/neg/eta/generated", + "MC/ka/neg/eta/generated", "MC/pr/neg/eta/generated", "MC/de/neg/eta/generated", + "MC/tr/neg/eta/generated", "MC/he/neg/eta/generated", "MC/al/neg/eta/generated", + "MC/all/neg/eta/generated"}; // Y - static constexpr std::string_view hYItsTpc[nHistograms] = {"MC/el/pos/y/num", "MC/mu/pos/y/num", "MC/pi/pos/y/num", - "MC/ka/pos/y/num", "MC/pr/pos/y/num", "MC/de/pos/y/num", - "MC/tr/pos/y/num", "MC/he/pos/y/num", "MC/al/pos/y/num", - "MC/all/pos/y/num", - "MC/el/neg/y/num", "MC/mu/neg/y/num", "MC/pi/neg/y/num", - "MC/ka/neg/y/num", "MC/pr/neg/y/num", "MC/de/neg/y/num", - "MC/tr/neg/y/num", "MC/he/neg/y/num", "MC/al/neg/y/num", - "MC/all/neg/y/num"}; - static constexpr std::string_view hYItsTpcTof[nHistograms] = {"MC/el/pos/y/numtof", "MC/mu/pos/y/numtof", "MC/pi/pos/y/numtof", - "MC/ka/pos/y/numtof", "MC/pr/pos/y/numtof", "MC/de/pos/y/numtof", - "MC/tr/pos/y/numtof", "MC/he/pos/y/numtof", "MC/al/pos/y/numtof", - "MC/all/pos/y/numtof", - "MC/el/neg/y/numtof", "MC/mu/neg/y/numtof", "MC/pi/neg/y/numtof", - "MC/ka/neg/y/numtof", "MC/pr/neg/y/numtof", "MC/de/neg/y/numtof", - "MC/tr/neg/y/numtof", "MC/he/neg/y/numtof", "MC/al/neg/y/numtof", - "MC/all/neg/y/numtof"}; - static constexpr std::string_view hYGenerated[nHistograms] = {"MC/el/pos/y/den", "MC/mu/pos/y/den", "MC/pi/pos/y/den", - "MC/ka/pos/y/den", "MC/pr/pos/y/den", "MC/de/pos/y/den", - "MC/tr/pos/y/den", "MC/he/pos/y/den", "MC/al/pos/y/den", - "MC/all/pos/y/den", - "MC/el/neg/y/den", "MC/mu/neg/y/den", "MC/pi/neg/y/den", - "MC/ka/neg/y/den", "MC/pr/neg/y/den", "MC/de/neg/y/den", - "MC/tr/neg/y/den", "MC/he/neg/y/den", "MC/al/neg/y/den", - "MC/all/neg/y/den"}; + static constexpr std::string_view hYItsTpc[nHistograms] = {"MC/el/pos/y/its_tpc", "MC/mu/pos/y/its_tpc", "MC/pi/pos/y/its_tpc", + "MC/ka/pos/y/its_tpc", "MC/pr/pos/y/its_tpc", "MC/de/pos/y/its_tpc", + "MC/tr/pos/y/its_tpc", "MC/he/pos/y/its_tpc", "MC/al/pos/y/its_tpc", + "MC/all/pos/y/its_tpc", + "MC/el/neg/y/its_tpc", "MC/mu/neg/y/its_tpc", "MC/pi/neg/y/its_tpc", + "MC/ka/neg/y/its_tpc", "MC/pr/neg/y/its_tpc", "MC/de/neg/y/its_tpc", + "MC/tr/neg/y/its_tpc", "MC/he/neg/y/its_tpc", "MC/al/neg/y/its_tpc", + "MC/all/neg/y/its_tpc"}; + static constexpr std::string_view hYItsTpcTof[nHistograms] = {"MC/el/pos/y/its_tpc_tof", "MC/mu/pos/y/its_tpc_tof", "MC/pi/pos/y/its_tpc_tof", + "MC/ka/pos/y/its_tpc_tof", "MC/pr/pos/y/its_tpc_tof", "MC/de/pos/y/its_tpc_tof", + "MC/tr/pos/y/its_tpc_tof", "MC/he/pos/y/its_tpc_tof", "MC/al/pos/y/its_tpc_tof", + "MC/all/pos/y/its_tpc_tof", + "MC/el/neg/y/its_tpc_tof", "MC/mu/neg/y/its_tpc_tof", "MC/pi/neg/y/its_tpc_tof", + "MC/ka/neg/y/its_tpc_tof", "MC/pr/neg/y/its_tpc_tof", "MC/de/neg/y/its_tpc_tof", + "MC/tr/neg/y/its_tpc_tof", "MC/he/neg/y/its_tpc_tof", "MC/al/neg/y/its_tpc_tof", + "MC/all/neg/y/its_tpc_tof"}; + static constexpr std::string_view hYGenerated[nHistograms] = {"MC/el/pos/y/generated", "MC/mu/pos/y/generated", "MC/pi/pos/y/generated", + "MC/ka/pos/y/generated", "MC/pr/pos/y/generated", "MC/de/pos/y/generated", + "MC/tr/pos/y/generated", "MC/he/pos/y/generated", "MC/al/pos/y/generated", + "MC/all/pos/y/generated", + "MC/el/neg/y/generated", "MC/mu/neg/y/generated", "MC/pi/neg/y/generated", + "MC/ka/neg/y/generated", "MC/pr/neg/y/generated", "MC/de/neg/y/generated", + "MC/tr/neg/y/generated", "MC/he/neg/y/generated", "MC/al/neg/y/generated", + "MC/all/neg/y/generated"}; // Phi - static constexpr std::string_view hPhiItsTpc[nHistograms] = {"MC/el/pos/phi/num", "MC/mu/pos/phi/num", "MC/pi/pos/phi/num", - "MC/ka/pos/phi/num", "MC/pr/pos/phi/num", "MC/de/pos/phi/num", - "MC/tr/pos/phi/num", "MC/he/pos/phi/num", "MC/al/pos/phi/num", - "MC/all/pos/phi/num", - "MC/el/neg/phi/num", "MC/mu/neg/phi/num", "MC/pi/neg/phi/num", - "MC/ka/neg/phi/num", "MC/pr/neg/phi/num", "MC/de/neg/phi/num", - "MC/tr/neg/phi/num", "MC/he/neg/phi/num", "MC/al/neg/phi/num", - "MC/all/neg/phi/num"}; - static constexpr std::string_view hPhiTrkItsTpc[nHistograms] = {"MC/el/pos/phi/numtrk", "MC/mu/pos/phi/numtrk", "MC/pi/pos/phi/numtrk", - "MC/ka/pos/phi/numtrk", "MC/pr/pos/phi/numtrk", "MC/de/pos/phi/numtrk", - "MC/tr/pos/phi/numtrk", "MC/he/pos/phi/numtrk", "MC/al/pos/phi/numtrk", - "MC/all/pos/phi/numtrk", - "MC/el/neg/phi/numtrk", "MC/mu/neg/phi/numtrk", "MC/pi/neg/phi/numtrk", - "MC/ka/neg/phi/numtrk", "MC/pr/neg/phi/numtrk", "MC/de/neg/phi/numtrk", - "MC/tr/neg/phi/numtrk", "MC/he/neg/phi/numtrk", "MC/al/neg/phi/numtrk", - "MC/all/neg/phi/numtrk"}; - static constexpr std::string_view hPhiItsTpcTof[nHistograms] = {"MC/el/pos/phi/numtof", "MC/mu/pos/phi/numtof", "MC/pi/pos/phi/numtof", - "MC/ka/pos/phi/numtof", "MC/pr/pos/phi/numtof", "MC/de/pos/phi/numtof", - "MC/tr/pos/phi/numtof", "MC/he/pos/phi/numtof", "MC/al/pos/phi/numtof", - "MC/all/pos/phi/numtof", - "MC/el/neg/phi/numtof", "MC/mu/neg/phi/numtof", "MC/pi/neg/phi/numtof", - "MC/ka/neg/phi/numtof", "MC/pr/neg/phi/numtof", "MC/de/neg/phi/numtof", - "MC/tr/neg/phi/numtof", "MC/he/neg/phi/numtof", "MC/al/neg/phi/numtof", - "MC/all/neg/phi/numtof"}; - static constexpr std::string_view hPhiGenerated[nHistograms] = {"MC/el/pos/phi/den", "MC/mu/pos/phi/den", "MC/pi/pos/phi/den", - "MC/ka/pos/phi/den", "MC/pr/pos/phi/den", "MC/de/pos/phi/den", - "MC/tr/pos/phi/den", "MC/he/pos/phi/den", "MC/al/pos/phi/den", - "MC/all/pos/phi/den", - "MC/el/neg/phi/den", "MC/mu/neg/phi/den", "MC/pi/neg/phi/den", - "MC/ka/neg/phi/den", "MC/pr/neg/phi/den", "MC/de/neg/phi/den", - "MC/tr/neg/phi/den", "MC/he/neg/phi/den", "MC/al/neg/phi/den", - "MC/all/neg/phi/den"}; + static constexpr std::string_view hPhiItsTpc[nHistograms] = {"MC/el/pos/phi/its_tpc", "MC/mu/pos/phi/its_tpc", "MC/pi/pos/phi/its_tpc", + "MC/ka/pos/phi/its_tpc", "MC/pr/pos/phi/its_tpc", "MC/de/pos/phi/its_tpc", + "MC/tr/pos/phi/its_tpc", "MC/he/pos/phi/its_tpc", "MC/al/pos/phi/its_tpc", + "MC/all/pos/phi/its_tpc", + "MC/el/neg/phi/its_tpc", "MC/mu/neg/phi/its_tpc", "MC/pi/neg/phi/its_tpc", + "MC/ka/neg/phi/its_tpc", "MC/pr/neg/phi/its_tpc", "MC/de/neg/phi/its_tpc", + "MC/tr/neg/phi/its_tpc", "MC/he/neg/phi/its_tpc", "MC/al/neg/phi/its_tpc", + "MC/all/neg/phi/its_tpc"}; + static constexpr std::string_view hPhiTrkItsTpc[nHistograms] = {"MC/el/pos/phi/its_tpc/trk", "MC/mu/pos/phi/its_tpc/trk", "MC/pi/pos/phi/its_tpc/trk", + "MC/ka/pos/phi/its_tpc/trk", "MC/pr/pos/phi/its_tpc/trk", "MC/de/pos/phi/its_tpc/trk", + "MC/tr/pos/phi/its_tpc/trk", "MC/he/pos/phi/its_tpc/trk", "MC/al/pos/phi/its_tpc/trk", + "MC/all/pos/phi/its_tpc/trk", + "MC/el/neg/phi/its_tpc/trk", "MC/mu/neg/phi/its_tpc/trk", "MC/pi/neg/phi/its_tpc/trk", + "MC/ka/neg/phi/its_tpc/trk", "MC/pr/neg/phi/its_tpc/trk", "MC/de/neg/phi/its_tpc/trk", + "MC/tr/neg/phi/its_tpc/trk", "MC/he/neg/phi/its_tpc/trk", "MC/al/neg/phi/its_tpc/trk", + "MC/all/neg/phi/its_tpc/trk"}; + static constexpr std::string_view hPhiItsTpcTof[nHistograms] = {"MC/el/pos/phi/its_tpc_tof", "MC/mu/pos/phi/its_tpc_tof", "MC/pi/pos/phi/its_tpc_tof", + "MC/ka/pos/phi/its_tpc_tof", "MC/pr/pos/phi/its_tpc_tof", "MC/de/pos/phi/its_tpc_tof", + "MC/tr/pos/phi/its_tpc_tof", "MC/he/pos/phi/its_tpc_tof", "MC/al/pos/phi/its_tpc_tof", + "MC/all/pos/phi/its_tpc_tof", + "MC/el/neg/phi/its_tpc_tof", "MC/mu/neg/phi/its_tpc_tof", "MC/pi/neg/phi/its_tpc_tof", + "MC/ka/neg/phi/its_tpc_tof", "MC/pr/neg/phi/its_tpc_tof", "MC/de/neg/phi/its_tpc_tof", + "MC/tr/neg/phi/its_tpc_tof", "MC/he/neg/phi/its_tpc_tof", "MC/al/neg/phi/its_tpc_tof", + "MC/all/neg/phi/its_tpc_tof"}; + static constexpr std::string_view hPhiGenerated[nHistograms] = {"MC/el/pos/phi/generated", "MC/mu/pos/phi/generated", "MC/pi/pos/phi/generated", + "MC/ka/pos/phi/generated", "MC/pr/pos/phi/generated", "MC/de/pos/phi/generated", + "MC/tr/pos/phi/generated", "MC/he/pos/phi/generated", "MC/al/pos/phi/generated", + "MC/all/pos/phi/generated", + "MC/el/neg/phi/generated", "MC/mu/neg/phi/generated", "MC/pi/neg/phi/generated", + "MC/ka/neg/phi/generated", "MC/pr/neg/phi/generated", "MC/de/neg/phi/generated", + "MC/tr/neg/phi/generated", "MC/he/neg/phi/generated", "MC/al/neg/phi/generated", + "MC/all/neg/phi/generated"}; // Pt-Eta - static constexpr std::string_view hPtEtaItsTpc[nHistograms] = {"MC/el/pos/pteta/num", "MC/mu/pos/pteta/num", "MC/pi/pos/pteta/num", - "MC/ka/pos/pteta/num", "MC/pr/pos/pteta/num", "MC/de/pos/pteta/num", - "MC/tr/pos/pteta/num", "MC/he/pos/pteta/num", "MC/al/pos/pteta/num", - "MC/all/pos/pteta/num", - "MC/el/neg/pteta/num", "MC/mu/neg/pteta/num", "MC/pi/neg/pteta/num", - "MC/ka/neg/pteta/num", "MC/pr/neg/pteta/num", "MC/de/neg/pteta/num", - "MC/tr/neg/pteta/num", "MC/he/neg/pteta/num", "MC/al/neg/pteta/num", - "MC/all/neg/pteta/num"}; - static constexpr std::string_view hPtEtaTrkItsTpc[nHistograms] = {"MC/el/pos/pteta/numtrk", "MC/mu/pos/pteta/numtrk", "MC/pi/pos/pteta/numtrk", - "MC/ka/pos/pteta/numtrk", "MC/pr/pos/pteta/numtrk", "MC/de/pos/pteta/numtrk", - "MC/tr/pos/pteta/numtrk", "MC/he/pos/pteta/numtrk", "MC/al/pos/pteta/numtrk", - "MC/all/pos/pteta/numtrk", - "MC/el/neg/pteta/numtrk", "MC/mu/neg/pteta/numtrk", "MC/pi/neg/pteta/numtrk", - "MC/ka/neg/pteta/numtrk", "MC/pr/neg/pteta/numtrk", "MC/de/neg/pteta/numtrk", - "MC/tr/neg/pteta/numtrk", "MC/he/neg/pteta/numtrk", "MC/al/neg/pteta/numtrk", - "MC/all/neg/pteta/numtrk"}; - static constexpr std::string_view hPtEtaItsTpcTof[nHistograms] = {"MC/el/pos/pteta/numtof", "MC/mu/pos/pteta/numtof", "MC/pi/pos/pteta/numtof", - "MC/ka/pos/pteta/numtof", "MC/pr/pos/pteta/numtof", "MC/de/pos/pteta/numtof", - "MC/tr/pos/pteta/numtof", "MC/he/pos/pteta/numtof", "MC/al/pos/pteta/numtof", - "MC/all/pos/pteta/numtof", - "MC/el/neg/pteta/numtof", "MC/mu/neg/pteta/numtof", "MC/pi/neg/pteta/numtof", - "MC/ka/neg/pteta/numtof", "MC/pr/neg/pteta/numtof", "MC/de/neg/pteta/numtof", - "MC/tr/neg/pteta/numtof", "MC/he/neg/pteta/numtof", "MC/al/neg/pteta/numtof", - "MC/all/neg/pteta/numtof"}; - static constexpr std::string_view hPtEtaGenerated[nHistograms] = {"MC/el/pos/pteta/den", "MC/mu/pos/pteta/den", "MC/pi/pos/pteta/den", - "MC/ka/pos/pteta/den", "MC/pr/pos/pteta/den", "MC/de/pos/pteta/den", - "MC/tr/pos/pteta/den", "MC/he/pos/pteta/den", "MC/al/pos/pteta/den", - "MC/all/pos/pteta/den", - "MC/el/neg/pteta/den", "MC/mu/neg/pteta/den", "MC/pi/neg/pteta/den", - "MC/ka/neg/pteta/den", "MC/pr/neg/pteta/den", "MC/de/neg/pteta/den", - "MC/tr/neg/pteta/den", "MC/he/neg/pteta/den", "MC/al/neg/pteta/den", - "MC/all/neg/pteta/den"}; + static constexpr std::string_view hPtEtaItsTpc[nHistograms] = {"MC/el/pos/pteta/its_tpc", "MC/mu/pos/pteta/its_tpc", "MC/pi/pos/pteta/its_tpc", + "MC/ka/pos/pteta/its_tpc", "MC/pr/pos/pteta/its_tpc", "MC/de/pos/pteta/its_tpc", + "MC/tr/pos/pteta/its_tpc", "MC/he/pos/pteta/its_tpc", "MC/al/pos/pteta/its_tpc", + "MC/all/pos/pteta/its_tpc", + "MC/el/neg/pteta/its_tpc", "MC/mu/neg/pteta/its_tpc", "MC/pi/neg/pteta/its_tpc", + "MC/ka/neg/pteta/its_tpc", "MC/pr/neg/pteta/its_tpc", "MC/de/neg/pteta/its_tpc", + "MC/tr/neg/pteta/its_tpc", "MC/he/neg/pteta/its_tpc", "MC/al/neg/pteta/its_tpc", + "MC/all/neg/pteta/its_tpc"}; + static constexpr std::string_view hPtEtaTrkItsTpc[nHistograms] = {"MC/el/pos/pteta/its_tpc/trk", "MC/mu/pos/pteta/its_tpc/trk", "MC/pi/pos/pteta/its_tpc/trk", + "MC/ka/pos/pteta/its_tpc/trk", "MC/pr/pos/pteta/its_tpc/trk", "MC/de/pos/pteta/its_tpc/trk", + "MC/tr/pos/pteta/its_tpc/trk", "MC/he/pos/pteta/its_tpc/trk", "MC/al/pos/pteta/its_tpc/trk", + "MC/all/pos/pteta/its_tpc/trk", + "MC/el/neg/pteta/its_tpc/trk", "MC/mu/neg/pteta/its_tpc/trk", "MC/pi/neg/pteta/its_tpc/trk", + "MC/ka/neg/pteta/its_tpc/trk", "MC/pr/neg/pteta/its_tpc/trk", "MC/de/neg/pteta/its_tpc/trk", + "MC/tr/neg/pteta/its_tpc/trk", "MC/he/neg/pteta/its_tpc/trk", "MC/al/neg/pteta/its_tpc/trk", + "MC/all/neg/pteta/its_tpc/trk"}; + static constexpr std::string_view hPtEtaItsTpcTof[nHistograms] = {"MC/el/pos/pteta/its_tpc_tof", "MC/mu/pos/pteta/its_tpc_tof", "MC/pi/pos/pteta/its_tpc_tof", + "MC/ka/pos/pteta/its_tpc_tof", "MC/pr/pos/pteta/its_tpc_tof", "MC/de/pos/pteta/its_tpc_tof", + "MC/tr/pos/pteta/its_tpc_tof", "MC/he/pos/pteta/its_tpc_tof", "MC/al/pos/pteta/its_tpc_tof", + "MC/all/pos/pteta/its_tpc_tof", + "MC/el/neg/pteta/its_tpc_tof", "MC/mu/neg/pteta/its_tpc_tof", "MC/pi/neg/pteta/its_tpc_tof", + "MC/ka/neg/pteta/its_tpc_tof", "MC/pr/neg/pteta/its_tpc_tof", "MC/de/neg/pteta/its_tpc_tof", + "MC/tr/neg/pteta/its_tpc_tof", "MC/he/neg/pteta/its_tpc_tof", "MC/al/neg/pteta/its_tpc_tof", + "MC/all/neg/pteta/its_tpc_tof"}; + static constexpr std::string_view hPtEtaGenerated[nHistograms] = {"MC/el/pos/pteta/generated", "MC/mu/pos/pteta/generated", "MC/pi/pos/pteta/generated", + "MC/ka/pos/pteta/generated", "MC/pr/pos/pteta/generated", "MC/de/pos/pteta/generated", + "MC/tr/pos/pteta/generated", "MC/he/pos/pteta/generated", "MC/al/pos/pteta/generated", + "MC/all/pos/pteta/generated", + "MC/el/neg/pteta/generated", "MC/mu/neg/pteta/generated", "MC/pi/neg/pteta/generated", + "MC/ka/neg/pteta/generated", "MC/pr/neg/pteta/generated", "MC/de/neg/pteta/generated", + "MC/tr/neg/pteta/generated", "MC/he/neg/pteta/generated", "MC/al/neg/pteta/generated", + "MC/all/neg/pteta/generated"}; template void makeMCHistograms(const bool doMakeHistograms) @@ -507,76 +508,6 @@ struct QaEfficiency { histos.add(hPtEtaItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPtEta, kTH2D, {axisPt, axisEta}); histos.add(hPtEtaGenerated[histogramIndex].data(), "Generated " + tagPtEta, kTH2D, {axisPt, axisEta}); } - - if (makeEff) { - LOG(debug) << "Making TEfficiency for MC"; - THashList* subList = new THashList(); - subList->SetName(Form("%s_%s", chargeIndex == 0 ? "Positive" : "Negative", partName)); - listEfficiencyMC->Add(subList); - - auto makeEfficiency = [&](TString effname, auto templateHisto) { // 1D efficiencies - effname = partName + effname; - LOG(debug) << " - " << effname; - const auto h = histos.get(templateHisto); - const TAxis* axis = h->GetXaxis(); - TString efftitle = h->GetTitle(); - efftitle.ReplaceAll("Numerator", "").Strip(TString::kBoth); - efftitle = Form("%s;%s;Efficiency", efftitle.Data(), axis->GetTitle()); - if (axis->IsVariableBinSize()) { - subList->Add(new TEfficiency(effname, efftitle, axis->GetNbins(), axis->GetXbins()->GetArray())); - } else { - subList->Add(new TEfficiency(effname, efftitle, axis->GetNbins(), axis->GetXmin(), axis->GetXmax())); - } - }; - - makeEfficiency("ITS_vsPt", HIST(hPtIts[histogramIndex])); - makeEfficiency("TPC_vsPt", HIST(hPtTpc[histogramIndex])); - makeEfficiency("ITS-TPC_vsPt", HIST(hPtItsTpc[histogramIndex])); - makeEfficiency("ITS-TOF_vsPt", HIST(hPtItsTof[histogramIndex])); - makeEfficiency("Tpc-TOF_vsPt", HIST(hPtTpcTof[histogramIndex])); - makeEfficiency("ITS-TPC-TOF_vsPt", HIST(hPtItsTpcTof[histogramIndex])); - makeEfficiency("ITS-TPC_vsPt_Trk", HIST(hPtTrkItsTpc[histogramIndex])); - makeEfficiency("ITS-TPC_vsPt_Prm", HIST(hPtItsTpcPrm[histogramIndex])); - makeEfficiency("ITS-TPC_vsPt_Prm_Trk", HIST(hPtTrkItsTpcPrm[histogramIndex])); - makeEfficiency("ITS-TPC-TOF_vsPt_Prm", HIST(hPtItsTpcTofPrm[histogramIndex])); - makeEfficiency("ITS-TPC_vsPt_Str", HIST(hPtItsTpcStr[histogramIndex])); - makeEfficiency("ITS-TPC_vsPt_Str_Trk", HIST(hPtTrkItsTpcStr[histogramIndex])); - makeEfficiency("ITS-TPC-TOF_vsPt_Str", HIST(hPtItsTpcTofStr[histogramIndex])); - makeEfficiency("ITS-TPC_vsPt_Mat", HIST(hPtItsTpcMat[histogramIndex])); - makeEfficiency("ITS-TPC_vsPt_Mat_Trk", HIST(hPtTrkItsTpcMat[histogramIndex])); - makeEfficiency("ITS-TPC-TOF_vsPt_Mat", HIST(hPtItsTpcTofMat[histogramIndex])); - makeEfficiency("ITS-TPC_vsP", HIST(hPItsTpc[histogramIndex])); - makeEfficiency("ITS-TPC_vsP_Trk", HIST(hPTrkItsTpc[histogramIndex])); - makeEfficiency("ITS-TPC-TOF_vsP", HIST(hPItsTpcTof[histogramIndex])); - makeEfficiency("ITS-TPC_vsEta", HIST(hEtaItsTpc[histogramIndex])); - makeEfficiency("ITS-Tpc_vsEta_Trk", HIST(hEtaTrkItsTpc[histogramIndex])); - makeEfficiency("ITS-TPC-TOF_vsEta", HIST(hEtaItsTpcTof[histogramIndex])); - makeEfficiency("ITS-TPC_vsY", HIST(hYItsTpc[histogramIndex])); - makeEfficiency("ITS-TPC-TOF_vsY", HIST(hYItsTpcTof[histogramIndex])); - makeEfficiency("ITS-TPC_vsPhi", HIST(hPhiItsTpc[histogramIndex])); - makeEfficiency("ITS-TPC_vsPhi_Trk", HIST(hPhiTrkItsTpc[histogramIndex])); - makeEfficiency("ITS-TPC-TOF_vsPhi", HIST(hPhiItsTpcTof[histogramIndex])); - - auto makeEfficiency2D = [&](TString effname, auto templateHisto) { // 2D efficiencies - effname = partName + effname; - LOG(debug) << " - " << effname; - const auto h = histos.get(templateHisto); - const TAxis* axisX = h->GetXaxis(); - const TAxis* axisY = h->GetYaxis(); - TString efftitle = h->GetTitle(); - efftitle.ReplaceAll("Numerator", "").Strip(TString::kBoth); - efftitle = Form("%s;%s;%s;Efficiency", efftitle.Data(), axisX->GetTitle(), axisY->GetTitle()); - if (axisX->IsVariableBinSize() || axisY->IsVariableBinSize()) { - subList->Add(new TEfficiency(effname, efftitle, axisX->GetNbins(), axisX->GetXbins()->GetArray(), axisY->GetNbins(), axisY->GetXbins()->GetArray())); - } else { - subList->Add(new TEfficiency(effname, efftitle, axisX->GetNbins(), axisX->GetXmin(), axisX->GetXmax(), axisY->GetNbins(), axisY->GetXmin(), axisY->GetXmax())); - } - }; - - if (doPtEta) { - makeEfficiency2D("ITS-TPC_vsPt_vsEta", HIST(hPtEtaItsTpc[histogramIndex])); - } - } }; if (doPositivePDG) { // Positive @@ -585,10 +516,104 @@ struct QaEfficiency { if (doNegativePDG) { // Negative makeHistogramsPerCharge(1); } - LOG(debug) << "Done with particle: " << partName; } + template + void makeMCEfficiency(const bool doMakeHistograms) + { + if (!doMakeHistograms) { + return; + } + + if (!makeEff) { + return; + } + + if constexpr (chargeIndex == 0) { + if (!doPositivePDG) { // Positive + return; + } + } else if constexpr (chargeIndex == 1) { + if (!doNegativePDG) { // Negative + return; + } + } else { + LOG(fatal) << "Can't interpret charge index"; + } + + const char* partName = id == o2::track::PID::NIDs ? "All" : o2::track::PID::getName(id); + LOG(debug) << "Making TEfficiency for MC for particle " << partName; + THashList* subList = new THashList(); + subList->SetName(Form("%s_%s", chargeIndex == 0 ? "Positive" : "Negative", partName)); + listEfficiencyMC->Add(subList); + + auto makeEfficiency = [&](TString effname, auto templateHisto) { // 1D efficiencies + effname = partName + effname; + LOG(debug) << " - " << effname; + const auto h = histos.get(templateHisto); + const TAxis* axis = h->GetXaxis(); + TString efftitle = h->GetTitle(); + efftitle.ReplaceAll("Numerator", "").Strip(TString::kBoth); + efftitle = Form("%s;%s;Efficiency", efftitle.Data(), axis->GetTitle()); + if (axis->IsVariableBinSize()) { + subList->Add(new TEfficiency(effname, efftitle, axis->GetNbins(), axis->GetXbins()->GetArray())); + } else { + subList->Add(new TEfficiency(effname, efftitle, axis->GetNbins(), axis->GetXmin(), axis->GetXmax())); + } + }; + + const int histogramIndex = id + chargeIndex * nSpecies; + + makeEfficiency("ITS_vsPt", HIST(hPtIts[histogramIndex])); + makeEfficiency("TPC_vsPt", HIST(hPtTpc[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt", HIST(hPtItsTpc[histogramIndex])); + makeEfficiency("ITS-TOF_vsPt", HIST(hPtItsTof[histogramIndex])); + makeEfficiency("Tpc-TOF_vsPt", HIST(hPtTpcTof[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsPt", HIST(hPtItsTpcTof[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Trk", HIST(hPtTrkItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Prm", HIST(hPtItsTpcPrm[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Prm_Trk", HIST(hPtTrkItsTpcPrm[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsPt_Prm", HIST(hPtItsTpcTofPrm[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Str", HIST(hPtItsTpcStr[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Str_Trk", HIST(hPtTrkItsTpcStr[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsPt_Str", HIST(hPtItsTpcTofStr[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Mat", HIST(hPtItsTpcMat[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Mat_Trk", HIST(hPtTrkItsTpcMat[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsPt_Mat", HIST(hPtItsTpcTofMat[histogramIndex])); + makeEfficiency("ITS-TPC_vsP", HIST(hPItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC_vsP_Trk", HIST(hPTrkItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsP", HIST(hPItsTpcTof[histogramIndex])); + makeEfficiency("ITS-TPC_vsEta", HIST(hEtaItsTpc[histogramIndex])); + makeEfficiency("ITS-Tpc_vsEta_Trk", HIST(hEtaTrkItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsEta", HIST(hEtaItsTpcTof[histogramIndex])); + makeEfficiency("ITS-TPC_vsY", HIST(hYItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsY", HIST(hYItsTpcTof[histogramIndex])); + makeEfficiency("ITS-TPC_vsPhi", HIST(hPhiItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC_vsPhi_Trk", HIST(hPhiTrkItsTpc[histogramIndex])); + makeEfficiency("ITS-TPC-TOF_vsPhi", HIST(hPhiItsTpcTof[histogramIndex])); + + auto makeEfficiency2D = [&](TString effname, auto templateHisto) { // 2D efficiencies + effname = partName + effname; + LOG(debug) << " - " << effname; + const auto h = histos.get(templateHisto); + const TAxis* axisX = h->GetXaxis(); + const TAxis* axisY = h->GetYaxis(); + TString efftitle = h->GetTitle(); + efftitle.ReplaceAll("Numerator", "").Strip(TString::kBoth); + efftitle = Form("%s;%s;%s;Efficiency", efftitle.Data(), axisX->GetTitle(), axisY->GetTitle()); + if (axisX->IsVariableBinSize() || axisY->IsVariableBinSize()) { + subList->Add(new TEfficiency(effname, efftitle, axisX->GetNbins(), axisX->GetXbins()->GetArray(), axisY->GetNbins(), axisY->GetXbins()->GetArray())); + } else { + subList->Add(new TEfficiency(effname, efftitle, axisX->GetNbins(), axisX->GetXmin(), axisX->GetXmax(), axisY->GetNbins(), axisY->GetXmin(), axisY->GetXmax())); + } + }; + + if (doPtEta) { + makeEfficiency2D("ITS-TPC_vsPt_vsEta", HIST(hPtEtaItsTpc[histogramIndex])); + } + } + void initMC(const AxisSpec& axisSel) { if (!doprocessMC) { @@ -636,6 +661,19 @@ struct QaEfficiency { makeMCHistograms(doHe); makeMCHistograms(doAl); makeMCHistograms(doUnId); + + static_for<0, 1>([&](auto i) { + makeMCEfficiency(doEl); + makeMCEfficiency(doMu); + makeMCEfficiency(doPi); + makeMCEfficiency(doKa); + makeMCEfficiency(doPr); + makeMCEfficiency(doDe); + makeMCEfficiency(doTr); + makeMCEfficiency(doHe); + makeMCEfficiency(doAl); + makeMCEfficiency(doUnId); + }); } void initData(const AxisSpec& axisSel) @@ -1371,28 +1409,28 @@ struct QaEfficiency { } histos.fill(HIST("Data/trackSelection"), 10); - passedITSCuts = track.passedITSNCls() && - track.passedITSChi2NDF() && - track.passedITSRefit() && - track.passedITSHits() && - track.hasITS(); - - passedTPCCuts = track.passedTPCNCls() && - track.passedTPCCrossedRows() && - track.passedTPCCrossedRowsOverNCls() && - track.passedTPCChi2NDF() && - track.passedTPCRefit() && - track.hasTPC(); + passedITS = track.passedITSNCls() && + track.passedITSChi2NDF() && + track.passedITSRefit() && + track.passedITSHits() && + track.hasITS(); + + passedTPC = track.passedTPCNCls() && + track.passedTPCCrossedRows() && + track.passedTPCCrossedRowsOverNCls() && + track.passedTPCChi2NDF() && + track.passedTPCRefit() && + track.hasTPC(); } else { - passedITSCuts = track.hasITS(); - passedTPCCuts = track.hasTPC(); + passedITS = track.hasITS(); + passedTPC = track.hasTPC(); } histos.fill(HIST("Data/trackSelection"), 11); histos.fill(HIST("Data/trackLength"), track.length()); - if (passedITSCuts) { + if (passedITS) { if (track.sign() > 0) { histos.fill(HIST("Data/pos/pt/its"), track.pt()); histos.fill(HIST("Data/pos/eta/its"), track.eta()); @@ -1405,7 +1443,7 @@ struct QaEfficiency { histos.fill(HIST("Data/neg/etaphi/its"), track.eta(), track.phi()); } } - if (passedTPCCuts) { + if (passedTPC) { if (track.sign() > 0) { histos.fill(HIST("Data/pos/pt/tpc"), track.pt()); histos.fill(HIST("Data/pos/eta/tpc"), track.eta()); @@ -1418,7 +1456,7 @@ struct QaEfficiency { histos.fill(HIST("Data/neg/etaphi/tpc"), track.eta(), track.phi()); } - if (passedITSCuts && passedTPCCuts) { + if (passedITS && passedTPC) { if (track.sign() > 0) { histos.fill(HIST("Data/pos/pt/its_tpc"), track.pt()); histos.fill(HIST("Data/pos/eta/its_tpc"), track.eta()); @@ -1432,7 +1470,7 @@ struct QaEfficiency { } } - if (track.hasITS() && passedTPCCuts && track.hasTOF()) { + if (track.hasITS() && passedTPC && track.hasTOF()) { if (track.sign() > 0) { histos.fill(HIST("Data/pos/pt/its_tpc_tof"), track.pt()); histos.fill(HIST("Data/pos/eta/its_tpc_tof"), track.eta()); @@ -1448,10 +1486,10 @@ struct QaEfficiency { } if (makeEff) { - if (passedITSCuts) { - static_cast(listEfficiencyData->At(0))->Fill(passedTPCCuts, track.pt()); + if (passedITS) { + static_cast(listEfficiencyData->At(0))->Fill(passedTPC, track.pt()); } - if (passedITSCuts && passedTPCCuts) { + if (passedITS && passedTPC) { static_cast(listEfficiencyData->At(1))->Fill(track.hasTOF(), track.pt()); static_cast(listEfficiencyData->At(2))->Fill(track.hasTOF(), track.p()); static_cast(listEfficiencyData->At(3))->Fill(track.hasTOF(), track.eta()); From 41840e238f1afacfd382a0648dc1454052692efe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Wed, 5 Oct 2022 17:32:51 +0200 Subject: [PATCH 08/14] Fix histonames --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 284 ++++++++++++++-------------- 1 file changed, 147 insertions(+), 137 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index 41db19eedfa..0dda681fc65 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -127,14 +127,14 @@ struct QaEfficiency { "MC/ka/neg/pt/its_tpc_tof", "MC/pr/neg/pt/its_tpc_tof", "MC/de/neg/pt/its_tpc_tof", "MC/tr/neg/pt/its_tpc_tof", "MC/he/neg/pt/its_tpc_tof", "MC/al/neg/pt/its_tpc_tof", "MC/all/neg/pt/its_tpc_tof"}; - static constexpr std::string_view hPtTrkItsTpc[nHistograms] = {"MC/el/pos/pt/its_tpc/trk", "MC/mu/pos/pt/its_tpc/trk", "MC/pi/pos/pt/its_tpc/trk", - "MC/ka/pos/pt/its_tpc/trk", "MC/pr/pos/pt/its_tpc/trk", "MC/de/pos/pt/its_tpc/trk", - "MC/tr/pos/pt/its_tpc/trk", "MC/he/pos/pt/its_tpc/trk", "MC/al/pos/pt/its_tpc/trk", - "MC/all/pos/pt/its_tpc/trk", - "MC/el/neg/pt/its_tpc/trk", "MC/mu/neg/pt/its_tpc/trk", "MC/pi/neg/pt/its_tpc/trk", - "MC/ka/neg/pt/its_tpc/trk", "MC/pr/neg/pt/its_tpc/trk", "MC/de/neg/pt/its_tpc/trk", - "MC/tr/neg/pt/its_tpc/trk", "MC/he/neg/pt/its_tpc/trk", "MC/al/neg/pt/its_tpc/trk", - "MC/all/neg/pt/its_tpc/trk"}; + static constexpr std::string_view hPtTrkItsTpc[nHistograms] = {"MC/el/pos/pt/trk/its_tpc", "MC/mu/pos/pt/trk/its_tpc", "MC/pi/pos/pt/trk/its_tpc", + "MC/ka/pos/pt/trk/its_tpc", "MC/pr/pos/pt/trk/its_tpc", "MC/de/pos/pt/trk/its_tpc", + "MC/tr/pos/pt/trk/its_tpc", "MC/he/pos/pt/trk/its_tpc", "MC/al/pos/pt/trk/its_tpc", + "MC/all/pos/pt/trk/its_tpc", + "MC/el/neg/pt/trk/its_tpc", "MC/mu/neg/pt/trk/its_tpc", "MC/pi/neg/pt/trk/its_tpc", + "MC/ka/neg/pt/trk/its_tpc", "MC/pr/neg/pt/trk/its_tpc", "MC/de/neg/pt/trk/its_tpc", + "MC/tr/neg/pt/trk/its_tpc", "MC/he/neg/pt/trk/its_tpc", "MC/al/neg/pt/trk/its_tpc", + "MC/all/neg/pt/trk/its_tpc"}; static constexpr std::string_view hPtGenerated[nHistograms] = {"MC/el/pos/pt/generated", "MC/mu/pos/pt/generated", "MC/pi/pos/pt/generated", "MC/ka/pos/pt/generated", "MC/pr/pos/pt/generated", "MC/de/pos/pt/generated", "MC/tr/pos/pt/generated", "MC/he/pos/pt/generated", "MC/al/pos/pt/generated", @@ -145,106 +145,114 @@ struct QaEfficiency { "MC/all/neg/pt/generated"}; // Pt for primaries - static constexpr std::string_view hPtItsTpcPrm[nHistograms] = {"MC/el/pos/pt/its_tpc/prm", "MC/mu/pos/pt/its_tpc/prm", "MC/pi/pos/pt/its_tpc/prm", - "MC/ka/pos/pt/its_tpc/prm", "MC/pr/pos/pt/its_tpc/prm", "MC/de/pos/pt/its_tpc/prm", - "MC/tr/pos/pt/its_tpc/prm", "MC/he/pos/pt/its_tpc/prm", "MC/al/pos/pt/its_tpc/prm", - "MC/all/pos/pt/its_tpc/prm", - "MC/el/neg/pt/its_tpc/prm", "MC/mu/neg/pt/its_tpc/prm", "MC/pi/neg/pt/its_tpc/prm", - "MC/ka/neg/pt/its_tpc/prm", "MC/pr/neg/pt/its_tpc/prm", "MC/de/neg/pt/its_tpc/prm", - "MC/tr/neg/pt/its_tpc/prm", "MC/he/neg/pt/its_tpc/prm", "MC/al/neg/pt/its_tpc/prm", - "MC/all/neg/pt/its_tpc/prm"}; - static constexpr std::string_view hPtTrkItsTpcPrm[nHistograms] = {"MC/el/pos/pt/its_tpc/trk/prm", "MC/mu/pos/pt/its_tpc/trk/prm", "MC/pi/pos/pt/its_tpc/trk/prm", - "MC/ka/pos/pt/its_tpc/trk/prm", "MC/pr/pos/pt/its_tpc/trk/prm", "MC/de/pos/pt/its_tpc/trk/prm", - "MC/tr/pos/pt/its_tpc/trk/prm", "MC/he/pos/pt/its_tpc/trk/prm", "MC/al/pos/pt/its_tpc/trk/prm", - "MC/all/pos/pt/its_tpc/trk/prm", - "MC/el/neg/pt/its_tpc/trk/prm", "MC/mu/neg/pt/its_tpc/trk/prm", "MC/pi/neg/pt/its_tpc/trk/prm", - "MC/ka/neg/pt/its_tpc/trk/prm", "MC/pr/neg/pt/its_tpc/trk/prm", "MC/de/neg/pt/its_tpc/trk/prm", - "MC/tr/neg/pt/its_tpc/trk/prm", "MC/he/neg/pt/its_tpc/trk/prm", "MC/al/neg/pt/its_tpc/trk/prm", - "MC/all/neg/pt/its_tpc/trk/prm"}; - static constexpr std::string_view hPtItsTpcTofPrm[nHistograms] = {"MC/el/pos/pt/its_tpc_tof/prm", "MC/mu/pos/pt/its_tpc_tof/prm", "MC/pi/pos/pt/its_tpc_tof/prm", - "MC/ka/pos/pt/its_tpc_tof/prm", "MC/pr/pos/pt/its_tpc_tof/prm", "MC/de/pos/pt/its_tpc_tof/prm", - "MC/tr/pos/pt/its_tpc_tof/prm", "MC/he/pos/pt/its_tpc_tof/prm", "MC/al/pos/pt/its_tpc_tof/prm", - "MC/all/pos/pt/its_tpc_tof/prm", - "MC/el/neg/pt/its_tpc_tof/prm", "MC/mu/neg/pt/its_tpc_tof/prm", "MC/pi/neg/pt/its_tpc_tof/prm", - "MC/ka/neg/pt/its_tpc_tof/prm", "MC/pr/neg/pt/its_tpc_tof/prm", "MC/de/neg/pt/its_tpc_tof/prm", - "MC/tr/neg/pt/its_tpc_tof/prm", "MC/he/neg/pt/its_tpc_tof/prm", "MC/al/neg/pt/its_tpc_tof/prm", - "MC/all/neg/pt/its_tpc_tof/prm"}; - static constexpr std::string_view hPtGeneratedPrm[nHistograms] = {"MC/el/pos/pt/generated/prm", "MC/mu/pos/pt/generated/prm", "MC/pi/pos/pt/generated/prm", - "MC/ka/pos/pt/generated/prm", "MC/pr/pos/pt/generated/prm", "MC/de/pos/pt/generated/prm", - "MC/tr/pos/pt/generated/prm", "MC/he/pos/pt/generated/prm", "MC/al/pos/pt/generated/prm", - "MC/all/pos/pt/generated/prm", - "MC/el/neg/pt/generated/prm", "MC/mu/neg/pt/generated/prm", "MC/pi/neg/pt/generated/prm", - "MC/ka/neg/pt/generated/prm", "MC/pr/neg/pt/generated/prm", "MC/de/neg/pt/generated/prm", - "MC/tr/neg/pt/generated/prm", "MC/he/neg/pt/generated/prm", "MC/al/neg/pt/generated/prm", - "MC/all/neg/pt/generated/prm"}; + static constexpr std::string_view hPtItsPrm[nHistograms] = {"MC/el/pos/pt/prm/its", "MC/mu/pos/pt/prm/its", "MC/pi/pos/pt/prm/its", + "MC/ka/pos/pt/prm/its", "MC/pr/pos/pt/prm/its", "MC/de/pos/pt/prm/its", + "MC/tr/pos/pt/prm/its", "MC/he/pos/pt/prm/its", "MC/al/pos/pt/prm/its", + "MC/all/pos/pt/prm/its", + "MC/el/neg/pt/prm/its", "MC/mu/neg/pt/prm/its", "MC/pi/neg/pt/prm/its", + "MC/ka/neg/pt/prm/its", "MC/pr/neg/pt/prm/its", "MC/de/neg/pt/prm/its", + "MC/tr/neg/pt/prm/its", "MC/he/neg/pt/prm/its", "MC/al/neg/pt/prm/its", + "MC/all/neg/pt/prm/its"}; + static constexpr std::string_view hPtItsTpcPrm[nHistograms] = {"MC/el/pos/pt/prm/its_tpc", "MC/mu/pos/pt/prm/its_tpc", "MC/pi/pos/pt/prm/its_tpc", + "MC/ka/pos/pt/prm/its_tpc", "MC/pr/pos/pt/prm/its_tpc", "MC/de/pos/pt/prm/its_tpc", + "MC/tr/pos/pt/prm/its_tpc", "MC/he/pos/pt/prm/its_tpc", "MC/al/pos/pt/prm/its_tpc", + "MC/all/pos/pt/prm/its_tpc", + "MC/el/neg/pt/prm/its_tpc", "MC/mu/neg/pt/prm/its_tpc", "MC/pi/neg/pt/prm/its_tpc", + "MC/ka/neg/pt/prm/its_tpc", "MC/pr/neg/pt/prm/its_tpc", "MC/de/neg/pt/prm/its_tpc", + "MC/tr/neg/pt/prm/its_tpc", "MC/he/neg/pt/prm/its_tpc", "MC/al/neg/pt/prm/its_tpc", + "MC/all/neg/pt/prm/its_tpc"}; + static constexpr std::string_view hPtTrkItsTpcPrm[nHistograms] = {"MC/el/pos/pt/prm/trk/its_tpc", "MC/mu/pos/pt/prm/trk/its_tpc", "MC/pi/pos/pt/prm/trk/its_tpc", + "MC/ka/pos/pt/prm/trk/its_tpc", "MC/pr/pos/pt/prm/trk/its_tpc", "MC/de/pos/pt/prm/trk/its_tpc", + "MC/tr/pos/pt/prm/trk/its_tpc", "MC/he/pos/pt/prm/trk/its_tpc", "MC/al/pos/pt/prm/trk/its_tpc", + "MC/all/pos/pt/prm/trk/its_tpc", + "MC/el/neg/pt/prm/trk/its_tpc", "MC/mu/neg/pt/prm/trk/its_tpc", "MC/pi/neg/pt/prm/trk/its_tpc", + "MC/ka/neg/pt/prm/trk/its_tpc", "MC/pr/neg/pt/prm/trk/its_tpc", "MC/de/neg/pt/prm/trk/its_tpc", + "MC/tr/neg/pt/prm/trk/its_tpc", "MC/he/neg/pt/prm/trk/its_tpc", "MC/al/neg/pt/prm/trk/its_tpc", + "MC/all/neg/pt/prm/trk/its_tpc"}; + static constexpr std::string_view hPtItsTpcTofPrm[nHistograms] = {"MC/el/pos/pt/prm/its_tpc_tof", "MC/mu/pos/pt/prm/its_tpc_tof", "MC/pi/pos/pt/prm/its_tpc_tof", + "MC/ka/pos/pt/prm/its_tpc_tof", "MC/pr/pos/pt/prm/its_tpc_tof", "MC/de/pos/pt/prm/its_tpc_tof", + "MC/tr/pos/pt/prm/its_tpc_tof", "MC/he/pos/pt/prm/its_tpc_tof", "MC/al/pos/pt/prm/its_tpc_tof", + "MC/all/pos/pt/prm/its_tpc_tof", + "MC/el/neg/pt/prm/its_tpc_tof", "MC/mu/neg/pt/prm/its_tpc_tof", "MC/pi/neg/pt/prm/its_tpc_tof", + "MC/ka/neg/pt/prm/its_tpc_tof", "MC/pr/neg/pt/prm/its_tpc_tof", "MC/de/neg/pt/prm/its_tpc_tof", + "MC/tr/neg/pt/prm/its_tpc_tof", "MC/he/neg/pt/prm/its_tpc_tof", "MC/al/neg/pt/prm/its_tpc_tof", + "MC/all/neg/pt/prm/its_tpc_tof"}; + static constexpr std::string_view hPtGeneratedPrm[nHistograms] = {"MC/el/pos/pt/prm/generated", "MC/mu/pos/pt/prm/generated", "MC/pi/pos/pt/prm/generated", + "MC/ka/pos/pt/prm/generated", "MC/pr/pos/pt/prm/generated", "MC/de/pos/pt/prm/generated", + "MC/tr/pos/pt/prm/generated", "MC/he/pos/pt/prm/generated", "MC/al/pos/pt/prm/generated", + "MC/all/pos/pt/prm/generated", + "MC/el/neg/pt/prm/generated", "MC/mu/neg/pt/prm/generated", "MC/pi/neg/pt/prm/generated", + "MC/ka/neg/pt/prm/generated", "MC/pr/neg/pt/prm/generated", "MC/de/neg/pt/prm/generated", + "MC/tr/neg/pt/prm/generated", "MC/he/neg/pt/prm/generated", "MC/al/neg/pt/prm/generated", + "MC/all/neg/pt/prm/generated"}; // Pt for secondaries from weak decay - static constexpr std::string_view hPtItsTpcStr[nHistograms] = {"MC/el/pos/pt/its_tpc/str", "MC/mu/pos/pt/its_tpc/str", "MC/pi/pos/pt/its_tpc/str", - "MC/ka/pos/pt/its_tpc/str", "MC/pr/pos/pt/its_tpc/str", "MC/de/pos/pt/its_tpc/str", - "MC/tr/pos/pt/its_tpc/str", "MC/he/pos/pt/its_tpc/str", "MC/al/pos/pt/its_tpc/str", - "MC/all/pos/pt/its_tpc/str", - "MC/el/neg/pt/its_tpc/str", "MC/mu/neg/pt/its_tpc/str", "MC/pi/neg/pt/its_tpc/str", - "MC/ka/neg/pt/its_tpc/str", "MC/pr/neg/pt/its_tpc/str", "MC/de/neg/pt/its_tpc/str", - "MC/tr/neg/pt/its_tpc/str", "MC/he/neg/pt/its_tpc/str", "MC/al/neg/pt/its_tpc/str", - "MC/all/neg/pt/its_tpc/str"}; - static constexpr std::string_view hPtTrkItsTpcStr[nHistograms] = {"MC/el/pos/pt/its_tpc/trk/str", "MC/mu/pos/pt/its_tpc/trk/str", "MC/pi/pos/pt/its_tpc/trk/str", - "MC/ka/pos/pt/its_tpc/trk/str", "MC/pr/pos/pt/its_tpc/trk/str", "MC/de/pos/pt/its_tpc/trk/str", - "MC/tr/pos/pt/its_tpc/trk/str", "MC/he/pos/pt/its_tpc/trk/str", "MC/al/pos/pt/its_tpc/trk/str", - "MC/all/pos/pt/its_tpc/trk/str", - "MC/el/neg/pt/its_tpc/trk/str", "MC/mu/neg/pt/its_tpc/trk/str", "MC/pi/neg/pt/its_tpc/trk/str", - "MC/ka/neg/pt/its_tpc/trk/str", "MC/pr/neg/pt/its_tpc/trk/str", "MC/de/neg/pt/its_tpc/trk/str", - "MC/tr/neg/pt/its_tpc/trk/str", "MC/he/neg/pt/its_tpc/trk/str", "MC/al/neg/pt/its_tpc/trk/str", - "MC/all/neg/pt/its_tpc/trk/str"}; - static constexpr std::string_view hPtItsTpcTofStr[nHistograms] = {"MC/el/pos/pt/its_tpc_tof/str", "MC/mu/pos/pt/its_tpc_tof/str", "MC/pi/pos/pt/its_tpc_tof/str", - "MC/ka/pos/pt/its_tpc_tof/str", "MC/pr/pos/pt/its_tpc_tof/str", "MC/de/pos/pt/its_tpc_tof/str", - "MC/tr/pos/pt/its_tpc_tof/str", "MC/he/pos/pt/its_tpc_tof/str", "MC/al/pos/pt/its_tpc_tof/str", - "MC/all/pos/pt/its_tpc_tof/str", - "MC/el/neg/pt/its_tpc_tof/str", "MC/mu/neg/pt/its_tpc_tof/str", "MC/pi/neg/pt/its_tpc_tof/str", - "MC/ka/neg/pt/its_tpc_tof/str", "MC/pr/neg/pt/its_tpc_tof/str", "MC/de/neg/pt/its_tpc_tof/str", - "MC/tr/neg/pt/its_tpc_tof/str", "MC/he/neg/pt/its_tpc_tof/str", "MC/al/neg/pt/its_tpc_tof/str", - "MC/all/neg/pt/its_tpc_tof/str"}; - static constexpr std::string_view hPtGeneratedStr[nHistograms] = {"MC/el/pos/pt/generated/str", "MC/mu/pos/pt/generated/str", "MC/pi/pos/pt/generated/str", - "MC/ka/pos/pt/generated/str", "MC/pr/pos/pt/generated/str", "MC/de/pos/pt/generated/str", - "MC/tr/pos/pt/generated/str", "MC/he/pos/pt/generated/str", "MC/al/pos/pt/generated/str", - "MC/all/pos/pt/generated/str", - "MC/el/neg/pt/generated/str", "MC/mu/neg/pt/generated/str", "MC/pi/neg/pt/generated/str", - "MC/ka/neg/pt/generated/str", "MC/pr/neg/pt/generated/str", "MC/de/neg/pt/generated/str", - "MC/tr/neg/pt/generated/str", "MC/he/neg/pt/generated/str", "MC/al/neg/pt/generated/str", - "MC/all/neg/pt/generated/str"}; + static constexpr std::string_view hPtItsTpcStr[nHistograms] = {"MC/el/pos/pt/str/its_tpc", "MC/mu/pos/pt/str/its_tpc", "MC/pi/pos/pt/str/its_tpc", + "MC/ka/pos/pt/str/its_tpc", "MC/pr/pos/pt/str/its_tpc", "MC/de/pos/pt/str/its_tpc", + "MC/tr/pos/pt/str/its_tpc", "MC/he/pos/pt/str/its_tpc", "MC/al/pos/pt/str/its_tpc", + "MC/all/pos/pt/str/its_tpc", + "MC/el/neg/pt/str/its_tpc", "MC/mu/neg/pt/str/its_tpc", "MC/pi/neg/pt/str/its_tpc", + "MC/ka/neg/pt/str/its_tpc", "MC/pr/neg/pt/str/its_tpc", "MC/de/neg/pt/str/its_tpc", + "MC/tr/neg/pt/str/its_tpc", "MC/he/neg/pt/str/its_tpc", "MC/al/neg/pt/str/its_tpc", + "MC/all/neg/pt/str/its_tpc"}; + static constexpr std::string_view hPtTrkItsTpcStr[nHistograms] = {"MC/el/pos/pt/str/trk/its_tpc", "MC/mu/pos/pt/str/trk/its_tpc", "MC/pi/pos/pt/str/trk/its_tpc", + "MC/ka/pos/pt/str/trk/its_tpc", "MC/pr/pos/pt/str/trk/its_tpc", "MC/de/pos/pt/str/trk/its_tpc", + "MC/tr/pos/pt/str/trk/its_tpc", "MC/he/pos/pt/str/trk/its_tpc", "MC/al/pos/pt/str/trk/its_tpc", + "MC/all/pos/pt/str/trk/its_tpc", + "MC/el/neg/pt/str/trk/its_tpc", "MC/mu/neg/pt/str/trk/its_tpc", "MC/pi/neg/pt/str/trk/its_tpc", + "MC/ka/neg/pt/str/trk/its_tpc", "MC/pr/neg/pt/str/trk/its_tpc", "MC/de/neg/pt/str/trk/its_tpc", + "MC/tr/neg/pt/str/trk/its_tpc", "MC/he/neg/pt/str/trk/its_tpc", "MC/al/neg/pt/str/trk/its_tpc", + "MC/all/neg/pt/str/trk/its_tpc"}; + static constexpr std::string_view hPtItsTpcTofStr[nHistograms] = {"MC/el/pos/pt/str/its_tpc_tof", "MC/mu/pos/pt/str/its_tpc_tof", "MC/pi/pos/pt/str/its_tpc_tof", + "MC/ka/pos/pt/str/its_tpc_tof", "MC/pr/pos/pt/str/its_tpc_tof", "MC/de/pos/pt/str/its_tpc_tof", + "MC/tr/pos/pt/str/its_tpc_tof", "MC/he/pos/pt/str/its_tpc_tof", "MC/al/pos/pt/str/its_tpc_tof", + "MC/all/pos/pt/str/its_tpc_tof", + "MC/el/neg/pt/str/its_tpc_tof", "MC/mu/neg/pt/str/its_tpc_tof", "MC/pi/neg/pt/str/its_tpc_tof", + "MC/ka/neg/pt/str/its_tpc_tof", "MC/pr/neg/pt/str/its_tpc_tof", "MC/de/neg/pt/str/its_tpc_tof", + "MC/tr/neg/pt/str/its_tpc_tof", "MC/he/neg/pt/str/its_tpc_tof", "MC/al/neg/pt/str/its_tpc_tof", + "MC/all/neg/pt/str/its_tpc_tof"}; + static constexpr std::string_view hPtGeneratedStr[nHistograms] = {"MC/el/pos/pt/str/generated", "MC/mu/pos/pt/str/generated", "MC/pi/pos/pt/str/generated", + "MC/ka/pos/pt/str/generated", "MC/pr/pos/pt/str/generated", "MC/de/pos/pt/str/generated", + "MC/tr/pos/pt/str/generated", "MC/he/pos/pt/str/generated", "MC/al/pos/pt/str/generated", + "MC/all/pos/pt/str/generated", + "MC/el/neg/pt/str/generated", "MC/mu/neg/pt/str/generated", "MC/pi/neg/pt/str/generated", + "MC/ka/neg/pt/str/generated", "MC/pr/neg/pt/str/generated", "MC/de/neg/pt/str/generated", + "MC/tr/neg/pt/str/generated", "MC/he/neg/pt/str/generated", "MC/al/neg/pt/str/generated", + "MC/all/neg/pt/str/generated"}; // Pt for secondaries from material - static constexpr std::string_view hPtItsTpcMat[nHistograms] = {"MC/el/pos/pt/its_tpc/mat", "MC/mu/pos/pt/its_tpc/mat", "MC/pi/pos/pt/its_tpc/mat", - "MC/ka/pos/pt/its_tpc/mat", "MC/pr/pos/pt/its_tpc/mat", "MC/de/pos/pt/its_tpc/mat", - "MC/tr/pos/pt/its_tpc/mat", "MC/he/pos/pt/its_tpc/mat", "MC/al/pos/pt/its_tpc/mat", - "MC/all/pos/pt/its_tpc/mat", - "MC/el/neg/pt/its_tpc/mat", "MC/mu/neg/pt/its_tpc/mat", "MC/pi/neg/pt/its_tpc/mat", - "MC/ka/neg/pt/its_tpc/mat", "MC/pr/neg/pt/its_tpc/mat", "MC/de/neg/pt/its_tpc/mat", - "MC/tr/neg/pt/its_tpc/mat", "MC/he/neg/pt/its_tpc/mat", "MC/al/neg/pt/its_tpc/mat", - "MC/all/neg/pt/its_tpc/mat"}; - static constexpr std::string_view hPtTrkItsTpcMat[nHistograms] = {"MC/el/pos/pt/its_tpc/trk/mat", "MC/mu/pos/pt/its_tpc/trk/mat", "MC/pi/pos/pt/its_tpc/trk/mat", - "MC/ka/pos/pt/its_tpc/trk/mat", "MC/pr/pos/pt/its_tpc/trk/mat", "MC/de/pos/pt/its_tpc/trk/mat", - "MC/tr/pos/pt/its_tpc/trk/mat", "MC/he/pos/pt/its_tpc/trk/mat", "MC/al/pos/pt/its_tpc/trk/mat", - "MC/all/pos/pt/its_tpc/trk/mat", - "MC/el/neg/pt/its_tpc/trk/mat", "MC/mu/neg/pt/its_tpc/trk/mat", "MC/pi/neg/pt/its_tpc/trk/mat", - "MC/ka/neg/pt/its_tpc/trk/mat", "MC/pr/neg/pt/its_tpc/trk/mat", "MC/de/neg/pt/its_tpc/trk/mat", - "MC/tr/neg/pt/its_tpc/trk/mat", "MC/he/neg/pt/its_tpc/trk/mat", "MC/al/neg/pt/its_tpc/trk/mat", - "MC/all/neg/pt/its_tpc/trk/mat"}; - static constexpr std::string_view hPtItsTpcTofMat[nHistograms] = {"MC/el/pos/pt/its_tpc_tof/mat", "MC/mu/pos/pt/its_tpc_tof/mat", "MC/pi/pos/pt/its_tpc_tof/mat", - "MC/ka/pos/pt/its_tpc_tof/mat", "MC/pr/pos/pt/its_tpc_tof/mat", "MC/de/pos/pt/its_tpc_tof/mat", - "MC/tr/pos/pt/its_tpc_tof/mat", "MC/he/pos/pt/its_tpc_tof/mat", "MC/al/pos/pt/its_tpc_tof/mat", - "MC/all/pos/pt/its_tpc_tof/mat", - "MC/el/neg/pt/its_tpc_tof/mat", "MC/mu/neg/pt/its_tpc_tof/mat", "MC/pi/neg/pt/its_tpc_tof/mat", - "MC/ka/neg/pt/its_tpc_tof/mat", "MC/pr/neg/pt/its_tpc_tof/mat", "MC/de/neg/pt/its_tpc_tof/mat", - "MC/tr/neg/pt/its_tpc_tof/mat", "MC/he/neg/pt/its_tpc_tof/mat", "MC/al/neg/pt/its_tpc_tof/mat", - "MC/all/neg/pt/its_tpc_tof/mat"}; - static constexpr std::string_view hPtGeneratedMat[nHistograms] = {"MC/el/pos/pt/generated/mat", "MC/mu/pos/pt/generated/mat", "MC/pi/pos/pt/generated/mat", - "MC/ka/pos/pt/generated/mat", "MC/pr/pos/pt/generated/mat", "MC/de/pos/pt/generated/mat", - "MC/tr/pos/pt/generated/mat", "MC/he/pos/pt/generated/mat", "MC/al/pos/pt/generated/mat", - "MC/all/pos/pt/generated/mat", - "MC/el/neg/pt/generated/mat", "MC/mu/neg/pt/generated/mat", "MC/pi/neg/pt/generated/mat", - "MC/ka/neg/pt/generated/mat", "MC/pr/neg/pt/generated/mat", "MC/de/neg/pt/generated/mat", - "MC/tr/neg/pt/generated/mat", "MC/he/neg/pt/generated/mat", "MC/al/neg/pt/generated/mat", - "MC/all/neg/pt/generated/mat"}; + static constexpr std::string_view hPtItsTpcMat[nHistograms] = {"MC/el/pos/pt/mat/its_tpc", "MC/mu/pos/pt/mat/its_tpc", "MC/pi/pos/pt/mat/its_tpc", + "MC/ka/pos/pt/mat/its_tpc", "MC/pr/pos/pt/mat/its_tpc", "MC/de/pos/pt/mat/its_tpc", + "MC/tr/pos/pt/mat/its_tpc", "MC/he/pos/pt/mat/its_tpc", "MC/al/pos/pt/mat/its_tpc", + "MC/all/pos/pt/mat/its_tpc", + "MC/el/neg/pt/mat/its_tpc", "MC/mu/neg/pt/mat/its_tpc", "MC/pi/neg/pt/mat/its_tpc", + "MC/ka/neg/pt/mat/its_tpc", "MC/pr/neg/pt/mat/its_tpc", "MC/de/neg/pt/mat/its_tpc", + "MC/tr/neg/pt/mat/its_tpc", "MC/he/neg/pt/mat/its_tpc", "MC/al/neg/pt/mat/its_tpc", + "MC/all/neg/pt/mat/its_tpc"}; + static constexpr std::string_view hPtTrkItsTpcMat[nHistograms] = {"MC/el/pos/pt/mat/trk/its_tpc", "MC/mu/pos/pt/mat/trk/its_tpc", "MC/pi/pos/pt/mat/trk/its_tpc", + "MC/ka/pos/pt/mat/trk/its_tpc", "MC/pr/pos/pt/mat/trk/its_tpc", "MC/de/pos/pt/mat/trk/its_tpc", + "MC/tr/pos/pt/mat/trk/its_tpc", "MC/he/pos/pt/mat/trk/its_tpc", "MC/al/pos/pt/mat/trk/its_tpc", + "MC/all/pos/pt/mat/trk/its_tpc", + "MC/el/neg/pt/mat/trk/its_tpc", "MC/mu/neg/pt/mat/trk/its_tpc", "MC/pi/neg/pt/mat/trk/its_tpc", + "MC/ka/neg/pt/mat/trk/its_tpc", "MC/pr/neg/pt/mat/trk/its_tpc", "MC/de/neg/pt/mat/trk/its_tpc", + "MC/tr/neg/pt/mat/trk/its_tpc", "MC/he/neg/pt/mat/trk/its_tpc", "MC/al/neg/pt/mat/trk/its_tpc", + "MC/all/neg/pt/mat/trk/its_tpc"}; + static constexpr std::string_view hPtItsTpcTofMat[nHistograms] = {"MC/el/pos/pt/mat/its_tpc_tof", "MC/mu/pos/pt/mat/its_tpc_tof", "MC/pi/pos/pt/mat/its_tpc_tof", + "MC/ka/pos/pt/mat/its_tpc_tof", "MC/pr/pos/pt/mat/its_tpc_tof", "MC/de/pos/pt/mat/its_tpc_tof", + "MC/tr/pos/pt/mat/its_tpc_tof", "MC/he/pos/pt/mat/its_tpc_tof", "MC/al/pos/pt/mat/its_tpc_tof", + "MC/all/pos/pt/mat/its_tpc_tof", + "MC/el/neg/pt/mat/its_tpc_tof", "MC/mu/neg/pt/mat/its_tpc_tof", "MC/pi/neg/pt/mat/its_tpc_tof", + "MC/ka/neg/pt/mat/its_tpc_tof", "MC/pr/neg/pt/mat/its_tpc_tof", "MC/de/neg/pt/mat/its_tpc_tof", + "MC/tr/neg/pt/mat/its_tpc_tof", "MC/he/neg/pt/mat/its_tpc_tof", "MC/al/neg/pt/mat/its_tpc_tof", + "MC/all/neg/pt/mat/its_tpc_tof"}; + static constexpr std::string_view hPtGeneratedMat[nHistograms] = {"MC/el/pos/pt/mat/generated", "MC/mu/pos/pt/mat/generated", "MC/pi/pos/pt/mat/generated", + "MC/ka/pos/pt/mat/generated", "MC/pr/pos/pt/mat/generated", "MC/de/pos/pt/mat/generated", + "MC/tr/pos/pt/mat/generated", "MC/he/pos/pt/mat/generated", "MC/al/pos/pt/mat/generated", + "MC/all/pos/pt/mat/generated", + "MC/el/neg/pt/mat/generated", "MC/mu/neg/pt/mat/generated", "MC/pi/neg/pt/mat/generated", + "MC/ka/neg/pt/mat/generated", "MC/pr/neg/pt/mat/generated", "MC/de/neg/pt/mat/generated", + "MC/tr/neg/pt/mat/generated", "MC/he/neg/pt/mat/generated", "MC/al/neg/pt/mat/generated", + "MC/all/neg/pt/mat/generated"}; // P static constexpr std::string_view hPItsTpc[nHistograms] = {"MC/el/pos/p/its_tpc", "MC/mu/pos/p/its_tpc", "MC/pi/pos/p/its_tpc", @@ -255,14 +263,14 @@ struct QaEfficiency { "MC/ka/neg/p/its_tpc", "MC/pr/neg/p/its_tpc", "MC/de/neg/p/its_tpc", "MC/tr/neg/p/its_tpc", "MC/he/neg/p/its_tpc", "MC/al/neg/p/its_tpc", "MC/all/neg/p/its_tpc"}; - static constexpr std::string_view hPTrkItsTpc[nHistograms] = {"MC/el/pos/p/its_tpc/trk", "MC/mu/pos/p/its_tpc/trk", "MC/pi/pos/p/its_tpc/trk", - "MC/ka/pos/p/its_tpc/trk", "MC/pr/pos/p/its_tpc/trk", "MC/de/pos/p/its_tpc/trk", - "MC/tr/pos/p/its_tpc/trk", "MC/he/pos/p/its_tpc/trk", "MC/al/pos/p/its_tpc/trk", - "MC/all/pos/p/its_tpc/trk", - "MC/el/neg/p/its_tpc/trk", "MC/mu/neg/p/its_tpc/trk", "MC/pi/neg/p/its_tpc/trk", - "MC/ka/neg/p/its_tpc/trk", "MC/pr/neg/p/its_tpc/trk", "MC/de/neg/p/its_tpc/trk", - "MC/tr/neg/p/its_tpc/trk", "MC/he/neg/p/its_tpc/trk", "MC/al/neg/p/its_tpc/trk", - "MC/all/neg/p/its_tpc/trk"}; + static constexpr std::string_view hPTrkItsTpc[nHistograms] = {"MC/el/pos/p/trk/its_tpc", "MC/mu/pos/p/trk/its_tpc", "MC/pi/pos/p/trk/its_tpc", + "MC/ka/pos/p/trk/its_tpc", "MC/pr/pos/p/trk/its_tpc", "MC/de/pos/p/trk/its_tpc", + "MC/tr/pos/p/trk/its_tpc", "MC/he/pos/p/trk/its_tpc", "MC/al/pos/p/trk/its_tpc", + "MC/all/pos/p/trk/its_tpc", + "MC/el/neg/p/trk/its_tpc", "MC/mu/neg/p/trk/its_tpc", "MC/pi/neg/p/trk/its_tpc", + "MC/ka/neg/p/trk/its_tpc", "MC/pr/neg/p/trk/its_tpc", "MC/de/neg/p/trk/its_tpc", + "MC/tr/neg/p/trk/its_tpc", "MC/he/neg/p/trk/its_tpc", "MC/al/neg/p/trk/its_tpc", + "MC/all/neg/p/trk/its_tpc"}; static constexpr std::string_view hPItsTpcTof[nHistograms] = {"MC/el/pos/p/its_tpc_tof", "MC/mu/pos/p/its_tpc_tof", "MC/pi/pos/p/its_tpc_tof", "MC/ka/pos/p/its_tpc_tof", "MC/pr/pos/p/its_tpc_tof", "MC/de/pos/p/its_tpc_tof", "MC/tr/pos/p/its_tpc_tof", "MC/he/pos/p/its_tpc_tof", "MC/al/pos/p/its_tpc_tof", @@ -289,14 +297,14 @@ struct QaEfficiency { "MC/ka/neg/eta/its_tpc", "MC/pr/neg/eta/its_tpc", "MC/de/neg/eta/its_tpc", "MC/tr/neg/eta/its_tpc", "MC/he/neg/eta/its_tpc", "MC/al/neg/eta/its_tpc", "MC/all/neg/eta/its_tpc"}; - static constexpr std::string_view hEtaTrkItsTpc[nHistograms] = {"MC/el/pos/eta/its_tpc/trk", "MC/mu/pos/eta/its_tpc/trk", "MC/pi/pos/eta/its_tpc/trk", - "MC/ka/pos/eta/its_tpc/trk", "MC/pr/pos/eta/its_tpc/trk", "MC/de/pos/eta/its_tpc/trk", - "MC/tr/pos/eta/its_tpc/trk", "MC/he/pos/eta/its_tpc/trk", "MC/al/pos/eta/its_tpc/trk", - "MC/all/pos/eta/its_tpc/trk", - "MC/el/neg/eta/its_tpc/trk", "MC/mu/neg/eta/its_tpc/trk", "MC/pi/neg/eta/its_tpc/trk", - "MC/ka/neg/eta/its_tpc/trk", "MC/pr/neg/eta/its_tpc/trk", "MC/de/neg/eta/its_tpc/trk", - "MC/tr/neg/eta/its_tpc/trk", "MC/he/neg/eta/its_tpc/trk", "MC/al/neg/eta/its_tpc/trk", - "MC/all/neg/eta/its_tpc/trk"}; + static constexpr std::string_view hEtaTrkItsTpc[nHistograms] = {"MC/el/pos/eta/trk/its_tpc", "MC/mu/pos/eta/trk/its_tpc", "MC/pi/pos/eta/trk/its_tpc", + "MC/ka/pos/eta/trk/its_tpc", "MC/pr/pos/eta/trk/its_tpc", "MC/de/pos/eta/trk/its_tpc", + "MC/tr/pos/eta/trk/its_tpc", "MC/he/pos/eta/trk/its_tpc", "MC/al/pos/eta/trk/its_tpc", + "MC/all/pos/eta/trk/its_tpc", + "MC/el/neg/eta/trk/its_tpc", "MC/mu/neg/eta/trk/its_tpc", "MC/pi/neg/eta/trk/its_tpc", + "MC/ka/neg/eta/trk/its_tpc", "MC/pr/neg/eta/trk/its_tpc", "MC/de/neg/eta/trk/its_tpc", + "MC/tr/neg/eta/trk/its_tpc", "MC/he/neg/eta/trk/its_tpc", "MC/al/neg/eta/trk/its_tpc", + "MC/all/neg/eta/trk/its_tpc"}; static constexpr std::string_view hEtaItsTpcTof[nHistograms] = {"MC/el/pos/eta/its_tpc_tof", "MC/mu/pos/eta/its_tpc_tof", "MC/pi/pos/eta/its_tpc_tof", "MC/ka/pos/eta/its_tpc_tof", "MC/pr/pos/eta/its_tpc_tof", "MC/de/pos/eta/its_tpc_tof", "MC/tr/pos/eta/its_tpc_tof", "MC/he/pos/eta/its_tpc_tof", "MC/al/pos/eta/its_tpc_tof", @@ -349,14 +357,14 @@ struct QaEfficiency { "MC/ka/neg/phi/its_tpc", "MC/pr/neg/phi/its_tpc", "MC/de/neg/phi/its_tpc", "MC/tr/neg/phi/its_tpc", "MC/he/neg/phi/its_tpc", "MC/al/neg/phi/its_tpc", "MC/all/neg/phi/its_tpc"}; - static constexpr std::string_view hPhiTrkItsTpc[nHistograms] = {"MC/el/pos/phi/its_tpc/trk", "MC/mu/pos/phi/its_tpc/trk", "MC/pi/pos/phi/its_tpc/trk", - "MC/ka/pos/phi/its_tpc/trk", "MC/pr/pos/phi/its_tpc/trk", "MC/de/pos/phi/its_tpc/trk", - "MC/tr/pos/phi/its_tpc/trk", "MC/he/pos/phi/its_tpc/trk", "MC/al/pos/phi/its_tpc/trk", - "MC/all/pos/phi/its_tpc/trk", - "MC/el/neg/phi/its_tpc/trk", "MC/mu/neg/phi/its_tpc/trk", "MC/pi/neg/phi/its_tpc/trk", - "MC/ka/neg/phi/its_tpc/trk", "MC/pr/neg/phi/its_tpc/trk", "MC/de/neg/phi/its_tpc/trk", - "MC/tr/neg/phi/its_tpc/trk", "MC/he/neg/phi/its_tpc/trk", "MC/al/neg/phi/its_tpc/trk", - "MC/all/neg/phi/its_tpc/trk"}; + static constexpr std::string_view hPhiTrkItsTpc[nHistograms] = {"MC/el/pos/phi/trk/its_tpc", "MC/mu/pos/phi/trk/its_tpc", "MC/pi/pos/phi/trk/its_tpc", + "MC/ka/pos/phi/trk/its_tpc", "MC/pr/pos/phi/trk/its_tpc", "MC/de/pos/phi/trk/its_tpc", + "MC/tr/pos/phi/trk/its_tpc", "MC/he/pos/phi/trk/its_tpc", "MC/al/pos/phi/trk/its_tpc", + "MC/all/pos/phi/trk/its_tpc", + "MC/el/neg/phi/trk/its_tpc", "MC/mu/neg/phi/trk/its_tpc", "MC/pi/neg/phi/trk/its_tpc", + "MC/ka/neg/phi/trk/its_tpc", "MC/pr/neg/phi/trk/its_tpc", "MC/de/neg/phi/trk/its_tpc", + "MC/tr/neg/phi/trk/its_tpc", "MC/he/neg/phi/trk/its_tpc", "MC/al/neg/phi/trk/its_tpc", + "MC/all/neg/phi/trk/its_tpc"}; static constexpr std::string_view hPhiItsTpcTof[nHistograms] = {"MC/el/pos/phi/its_tpc_tof", "MC/mu/pos/phi/its_tpc_tof", "MC/pi/pos/phi/its_tpc_tof", "MC/ka/pos/phi/its_tpc_tof", "MC/pr/pos/phi/its_tpc_tof", "MC/de/pos/phi/its_tpc_tof", "MC/tr/pos/phi/its_tpc_tof", "MC/he/pos/phi/its_tpc_tof", "MC/al/pos/phi/its_tpc_tof", @@ -383,14 +391,14 @@ struct QaEfficiency { "MC/ka/neg/pteta/its_tpc", "MC/pr/neg/pteta/its_tpc", "MC/de/neg/pteta/its_tpc", "MC/tr/neg/pteta/its_tpc", "MC/he/neg/pteta/its_tpc", "MC/al/neg/pteta/its_tpc", "MC/all/neg/pteta/its_tpc"}; - static constexpr std::string_view hPtEtaTrkItsTpc[nHistograms] = {"MC/el/pos/pteta/its_tpc/trk", "MC/mu/pos/pteta/its_tpc/trk", "MC/pi/pos/pteta/its_tpc/trk", - "MC/ka/pos/pteta/its_tpc/trk", "MC/pr/pos/pteta/its_tpc/trk", "MC/de/pos/pteta/its_tpc/trk", - "MC/tr/pos/pteta/its_tpc/trk", "MC/he/pos/pteta/its_tpc/trk", "MC/al/pos/pteta/its_tpc/trk", - "MC/all/pos/pteta/its_tpc/trk", - "MC/el/neg/pteta/its_tpc/trk", "MC/mu/neg/pteta/its_tpc/trk", "MC/pi/neg/pteta/its_tpc/trk", - "MC/ka/neg/pteta/its_tpc/trk", "MC/pr/neg/pteta/its_tpc/trk", "MC/de/neg/pteta/its_tpc/trk", - "MC/tr/neg/pteta/its_tpc/trk", "MC/he/neg/pteta/its_tpc/trk", "MC/al/neg/pteta/its_tpc/trk", - "MC/all/neg/pteta/its_tpc/trk"}; + static constexpr std::string_view hPtEtaTrkItsTpc[nHistograms] = {"MC/el/pos/pteta/trk/its_tpc", "MC/mu/pos/pteta/trk/its_tpc", "MC/pi/pos/pteta/trk/its_tpc", + "MC/ka/pos/pteta/trk/its_tpc", "MC/pr/pos/pteta/trk/its_tpc", "MC/de/pos/pteta/trk/its_tpc", + "MC/tr/pos/pteta/trk/its_tpc", "MC/he/pos/pteta/trk/its_tpc", "MC/al/pos/pteta/trk/its_tpc", + "MC/all/pos/pteta/trk/its_tpc", + "MC/el/neg/pteta/trk/its_tpc", "MC/mu/neg/pteta/trk/its_tpc", "MC/pi/neg/pteta/trk/its_tpc", + "MC/ka/neg/pteta/trk/its_tpc", "MC/pr/neg/pteta/trk/its_tpc", "MC/de/neg/pteta/trk/its_tpc", + "MC/tr/neg/pteta/trk/its_tpc", "MC/he/neg/pteta/trk/its_tpc", "MC/al/neg/pteta/trk/its_tpc", + "MC/all/neg/pteta/trk/its_tpc"}; static constexpr std::string_view hPtEtaItsTpcTof[nHistograms] = {"MC/el/pos/pteta/its_tpc_tof", "MC/mu/pos/pteta/its_tpc_tof", "MC/pi/pos/pteta/its_tpc_tof", "MC/ka/pos/pteta/its_tpc_tof", "MC/pr/pos/pteta/its_tpc_tof", "MC/de/pos/pteta/its_tpc_tof", "MC/tr/pos/pteta/its_tpc_tof", "MC/he/pos/pteta/its_tpc_tof", "MC/al/pos/pteta/its_tpc_tof", @@ -459,6 +467,7 @@ struct QaEfficiency { auto makeHistogramsPerCharge = [&](const int chargeIndex) { const int histogramIndex = id + chargeIndex * nSpecies; + histos2.add(hPtIts[histogramIndex].data(), "ITS tracks " + tagPt, kTH1F, {axisPt}); histos.add(hPtIts[histogramIndex].data(), "ITS tracks " + tagPt, kTH1F, {axisPt}); histos.add(hPtTpc[histogramIndex].data(), "TPC tracks " + tagPt, kTH1F, {axisPt}); histos.add(hPtItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPt, kTH1F, {axisPt}); @@ -468,6 +477,7 @@ struct QaEfficiency { histos.add(hPtTrkItsTpc[histogramIndex].data(), "ITS-TPC track (reco) " + tagPt, kTH1F, {axisPt}); histos.add(hPtGenerated[histogramIndex].data(), "Generated " + tagPt, kTH1F, {axisPt}); + histos.add(hPtItsPrm[histogramIndex].data(), "ITS tracks (primaries) " + tagPt, kTH1F, {axisPt}); histos.add(hPtItsTpcPrm[histogramIndex].data(), "ITS-TPC tracks (primaries) " + tagPt, kTH1F, {axisPt}); histos.add(hPtTrkItsTpcPrm[histogramIndex].data(), "ITS-TPC tracks (reco primaries) " + tagPt, kTH1F, {axisPt}); histos.add(hPtItsTpcTofPrm[histogramIndex].data(), "ITS-TPC-TOF tracks (primaries) " + tagPt, kTH1F, {axisPt}); @@ -987,7 +997,7 @@ struct QaEfficiency { const char* partName = id == o2::track::PID::NIDs ? "All" : o2::track::PID::getName(id); LOG(debug) << "Filling efficiency for particle " << static_cast(id) << " " << partName; - THashList* subList = static_cast(listEfficiencyMC->FindObject(partName)); + THashList* subList = static_cast(listEfficiencyMC->FindObject(Form("%s_%s", pdgSign == 0 ? "Positive" : "Negative", partName))); if (!subList) { LOG(warning) << "Cannot find list of efficiency objects for particle " << partName; return; From 4e0269544544a72b8ac818b1bb65eca25b55e439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Wed, 5 Oct 2022 17:40:50 +0200 Subject: [PATCH 09/14] Update efficiency filling --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 44 +++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index 0dda681fc65..b4f79595806 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -467,7 +467,6 @@ struct QaEfficiency { auto makeHistogramsPerCharge = [&](const int chargeIndex) { const int histogramIndex = id + chargeIndex * nSpecies; - histos2.add(hPtIts[histogramIndex].data(), "ITS tracks " + tagPt, kTH1F, {axisPt}); histos.add(hPtIts[histogramIndex].data(), "ITS tracks " + tagPt, kTH1F, {axisPt}); histos.add(hPtTpc[histogramIndex].data(), "TPC tracks " + tagPt, kTH1F, {axisPt}); histos.add(hPtItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPt, kTH1F, {axisPt}); @@ -1015,13 +1014,40 @@ struct QaEfficiency { eff->SetPassedHistogram(*histos.get(num).get(), "f"); }; - doFillEfficiency("efficiencyVsPt", HIST(hPtItsTpc[histogramIndex]), HIST(hPtGenerated[histogramIndex])); - doFillEfficiency("efficiencyVsPtPrm", HIST(hPtItsTpcPrm[histogramIndex]), HIST(hPtGeneratedPrm[histogramIndex])); - doFillEfficiency("efficiencyVsPtDec", HIST(hPtItsTpcStr[histogramIndex]), HIST(hPtGeneratedStr[histogramIndex])); - doFillEfficiency("efficiencyVsPtMat", HIST(hPtItsTpcMat[histogramIndex]), HIST(hPtGeneratedMat[histogramIndex])); - doFillEfficiency("efficiencyVsP", HIST(hPItsTpc[histogramIndex]), HIST(hPGenerated[histogramIndex])); - doFillEfficiency("efficiencyVsEta", HIST(hEtaItsTpc[histogramIndex]), HIST(hEtaGenerated[histogramIndex])); - doFillEfficiency("efficiencyVsPhi", HIST(hPhiItsTpc[histogramIndex]), HIST(hPhiGenerated[histogramIndex])); + doFillEfficiency("ITS_vsPt", HIST(hPtIts[histogramIndex]), HIST(hPtGenerated[histogramIndex])); + doFillEfficiency("TPC_vsPt", HIST(hPtTpc[histogramIndex]), HIST(hPtGenerated[histogramIndex])); + doFillEfficiency("ITS-TPC_vsPt", HIST(hPtItsTpc[histogramIndex]), HIST(hPtGenerated[histogramIndex])); + doFillEfficiency("ITS-TOF_vsPt", HIST(hPtItsTof[histogramIndex]), HIST(hPtGenerated[histogramIndex])); + doFillEfficiency("Tpc-TOF_vsPt", HIST(hPtTpcTof[histogramIndex]), HIST(hPtGenerated[histogramIndex])); + doFillEfficiency("ITS-TPC-TOF_vsPt", HIST(hPtItsTpcTof[histogramIndex]), HIST(hPtGenerated[histogramIndex])); + doFillEfficiency("ITS-TPC_vsPt_Trk", HIST(hPtTrkItsTpc[histogramIndex]), HIST(hPtGenerated[histogramIndex])); + + doFillEfficiency("ITS-TPC_vsPt_Prm", HIST(hPtItsTpcPrm[histogramIndex]), HIST(hPtGeneratedPrm[histogramIndex])); + doFillEfficiency("ITS-TPC_vsPt_Prm_Trk", HIST(hPtTrkItsTpcPrm[histogramIndex]), HIST(hPtGeneratedPrm[histogramIndex])); + doFillEfficiency("ITS-TPC-TOF_vsPt_Prm", HIST(hPtItsTpcTofPrm[histogramIndex]), HIST(hPtGeneratedPrm[histogramIndex])); + + doFillEfficiency("ITS-TPC_vsPt_Str", HIST(hPtItsTpcStr[histogramIndex]), HIST(hPtGeneratedStr[histogramIndex])); + doFillEfficiency("ITS-TPC_vsPt_Str_Trk", HIST(hPtTrkItsTpcStr[histogramIndex]), HIST(hPtGeneratedStr[histogramIndex])); + doFillEfficiency("ITS-TPC-TOF_vsPt_Str", HIST(hPtItsTpcTofStr[histogramIndex]), HIST(hPtGeneratedStr[histogramIndex])); + + doFillEfficiency("ITS-TPC_vsPt_Mat", HIST(hPtItsTpcMat[histogramIndex]), HIST(hPtGeneratedMat[histogramIndex])); + doFillEfficiency("ITS-TPC_vsPt_Mat_Trk", HIST(hPtTrkItsTpcMat[histogramIndex]), HIST(hPtGeneratedMat[histogramIndex])); + doFillEfficiency("ITS-TPC-TOF_vsPt_Mat", HIST(hPtItsTpcTofMat[histogramIndex]), HIST(hPtGeneratedMat[histogramIndex])); + + doFillEfficiency("ITS-TPC_vsP", HIST(hPItsTpc[histogramIndex]), HIST(hPGenerated[histogramIndex])); + doFillEfficiency("ITS-TPC_vsP_Trk", HIST(hPTrkItsTpc[histogramIndex]), HIST(hPGenerated[histogramIndex])); + doFillEfficiency("ITS-TPC-TOF_vsP", HIST(hPItsTpcTof[histogramIndex]), HIST(hPGenerated[histogramIndex])); + + doFillEfficiency("ITS-TPC_vsEta", HIST(hEtaItsTpc[histogramIndex]), HIST(hEtaGenerated[histogramIndex])); + doFillEfficiency("ITS-Tpc_vsEta_Trk", HIST(hEtaTrkItsTpc[histogramIndex]), HIST(hEtaGenerated[histogramIndex])); + doFillEfficiency("ITS-TPC-TOF_vsEta", HIST(hEtaItsTpcTof[histogramIndex]), HIST(hEtaGenerated[histogramIndex])); + + doFillEfficiency("ITS-TPC_vsY", HIST(hYItsTpc[histogramIndex]), HIST(hYGenerated[histogramIndex])); + doFillEfficiency("ITS-TPC-TOF_vsY", HIST(hYItsTpcTof[histogramIndex]), HIST(hYGenerated[histogramIndex])); + + doFillEfficiency("ITS-TPC_vsPhi", HIST(hPhiItsTpc[histogramIndex]), HIST(hPhiGenerated[histogramIndex])); + doFillEfficiency("ITS-TPC_vsPhi_Trk", HIST(hPhiTrkItsTpc[histogramIndex]), HIST(hPhiGenerated[histogramIndex])); + doFillEfficiency("ITS-TPC-TOF_vsPhi", HIST(hPhiItsTpcTof[histogramIndex]), HIST(hPhiGenerated[histogramIndex])); if (!doPtEta) { return; @@ -1038,7 +1064,7 @@ struct QaEfficiency { eff->SetTotalHistogram(*histos.get(den).get(), "f"); eff->SetPassedHistogram(*histos.get(num).get(), "f"); }; - fillEfficiency2D("efficiencyVsPtVsEta", HIST(hPtEtaItsTpc[histogramIndex]), HIST(hPtEtaGenerated[histogramIndex])); + fillEfficiency2D("ITS-TPC_vsPt_vsEta", HIST(hPtEtaItsTpc[histogramIndex]), HIST(hPtEtaGenerated[histogramIndex])); } template From d9d9ef8a2b0f07e952f851fbb60d056672a38cd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Fri, 7 Oct 2022 16:48:59 +0200 Subject: [PATCH 10/14] Simplify --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 527 +++++++++++++--------------- 1 file changed, 243 insertions(+), 284 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index b4f79595806..c78565bccb2 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -76,6 +76,8 @@ struct QaEfficiency { OutputObj listEfficiencyData{"EfficiencyData"}; // Histograms HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; + HistogramRegistry histosPos{"HistosPos", {}, OutputObjHandlingPolicy::AnalysisObject}; + HistogramRegistry histosNeg{"HistosNeg", {}, OutputObjHandlingPolicy::AnalysisObject}; static constexpr int nHistograms = nSpecies * 2; // Pt @@ -416,12 +418,30 @@ struct QaEfficiency { "MC/tr/neg/pteta/generated", "MC/he/neg/pteta/generated", "MC/al/neg/pteta/generated", "MC/all/neg/pteta/generated"}; - template + static const char* particleName(int charge, o2::track::PID::ID id) + { + return Form("%s %s", charge == 0 ? "Positive" : "Negative", id == o2::track::PID::NIDs ? "All" : o2::track::PID::getName(id)); + } + + template void makeMCHistograms(const bool doMakeHistograms) { if (!doMakeHistograms) { return; } + + if constexpr (charge == 0) { + if (!doPositivePDG) { // Positive + return; + } + } else if constexpr (charge == 1) { + if (!doNegativePDG) { // Negative + return; + } + } else { + LOG(fatal) << "Can't interpret charge " << charge; + } + AxisSpec axisPt{ptBins, "#it{p}_{T} (GeV/#it{c})"}; AxisSpec axisP{ptBins, "#it{p} (GeV/#it{c})"}; if (logPt) { @@ -432,8 +452,8 @@ struct QaEfficiency { const AxisSpec axisY{yBins, "#it{y}"}; const AxisSpec axisPhi{phiBins, "#it{#varphi} (rad)"}; - const char* partName = id == o2::track::PID::NIDs ? "All" : o2::track::PID::getName(id); - LOG(debug) << "Preparing histograms for particle: " << partName; + const char* partName = particleName(charge, id); + LOG(info) << "Preparing histograms for particle: " << partName << " charge " << charge; const TString tagPt = Form("%s #it{#eta} [%.2f,%.2f] #it{y} [%.2f,%.2f] #it{#varphi} [%.2f,%.2f]", partName, @@ -464,71 +484,67 @@ struct QaEfficiency { phiMin, phiMax, yMin, yMax); - auto makeHistogramsPerCharge = [&](const int chargeIndex) { - const int histogramIndex = id + chargeIndex * nSpecies; - - histos.add(hPtIts[histogramIndex].data(), "ITS tracks " + tagPt, kTH1F, {axisPt}); - histos.add(hPtTpc[histogramIndex].data(), "TPC tracks " + tagPt, kTH1F, {axisPt}); - histos.add(hPtItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPt, kTH1F, {axisPt}); - histos.add(hPtItsTof[histogramIndex].data(), "ITS-TOF tracks " + tagPt, kTH1F, {axisPt}); - histos.add(hPtTpcTof[histogramIndex].data(), "TPC-TOF tracks " + tagPt, kTH1F, {axisPt}); - histos.add(hPtItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPt, kTH1F, {axisPt}); - histos.add(hPtTrkItsTpc[histogramIndex].data(), "ITS-TPC track (reco) " + tagPt, kTH1F, {axisPt}); - histos.add(hPtGenerated[histogramIndex].data(), "Generated " + tagPt, kTH1F, {axisPt}); - - histos.add(hPtItsPrm[histogramIndex].data(), "ITS tracks (primaries) " + tagPt, kTH1F, {axisPt}); - histos.add(hPtItsTpcPrm[histogramIndex].data(), "ITS-TPC tracks (primaries) " + tagPt, kTH1F, {axisPt}); - histos.add(hPtTrkItsTpcPrm[histogramIndex].data(), "ITS-TPC tracks (reco primaries) " + tagPt, kTH1F, {axisPt}); - histos.add(hPtItsTpcTofPrm[histogramIndex].data(), "ITS-TPC-TOF tracks (primaries) " + tagPt, kTH1F, {axisPt}); - histos.add(hPtGeneratedPrm[histogramIndex].data(), "Generated (primaries) " + tagPt, kTH1F, {axisPt}); - - histos.add(hPtItsTpcStr[histogramIndex].data(), "ITS-TPC tracks (from weak decays) " + tagPt, kTH1F, {axisPt}); - histos.add(hPtTrkItsTpcStr[histogramIndex].data(), "ITS-TPC tracks (reco from weak decays) " + tagPt, kTH1F, {axisPt}); - histos.add(hPtItsTpcTofStr[histogramIndex].data(), "ITS-TPC-TOF tracks (from weak decays) " + tagPt, kTH1F, {axisPt}); - histos.add(hPtGeneratedStr[histogramIndex].data(), "Generated (from weak decays) " + tagPt, kTH1F, {axisPt}); - - histos.add(hPtItsTpcMat[histogramIndex].data(), "ITS-TPC tracks (from material)" + tagPt, kTH1F, {axisPt}); - histos.add(hPtTrkItsTpcMat[histogramIndex].data(), "ITS-TPC tracks (reco from material) " + tagPt, kTH1F, {axisPt}); - histos.add(hPtItsTpcTofMat[histogramIndex].data(), "ITS-TPC-TOF tracks ( from material) " + tagPt, kTH1F, {axisPt}); - histos.add(hPtGeneratedMat[histogramIndex].data(), "Generated ( from material) " + tagPt, kTH1F, {axisPt}); - - histos.add(hPItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPt, kTH1F, {axisP}); - histos.add(hPTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagPt, kTH1F, {axisP}); - histos.add(hPItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPt, kTH1F, {axisP}); - histos.add(hPGenerated[histogramIndex].data(), "Generated " + tagPt, kTH1F, {axisP}); - - histos.add(hEtaItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagEta, kTH1F, {axisEta}); - histos.add(hEtaTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagEta, kTH1F, {axisEta}); - histos.add(hEtaItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagEta, kTH1F, {axisEta}); - histos.add(hEtaGenerated[histogramIndex].data(), "Generated " + tagEta, kTH1F, {axisEta}); - - histos.add(hYItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagY, kTH1F, {axisY}); - histos.add(hYItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagY, kTH1F, {axisY}); - histos.add(hYGenerated[histogramIndex].data(), "Generated " + tagY, kTH1F, {axisY}); - - histos.add(hPhiItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPhi, kTH1F, {axisPhi}); - histos.add(hPhiTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagPhi, kTH1F, {axisPhi}); - histos.add(hPhiItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPhi, kTH1F, {axisPhi}); - histos.add(hPhiGenerated[histogramIndex].data(), "Generated " + tagPhi, kTH1F, {axisPhi}); - - if (doPtEta) { - histos.add(hPtEtaItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPtEta, kTH2D, {axisPt, axisEta}); - histos.add(hPtEtaTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagPtEta, kTH2D, {axisPt, axisEta}); - histos.add(hPtEtaItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPtEta, kTH2D, {axisPt, axisEta}); - histos.add(hPtEtaGenerated[histogramIndex].data(), "Generated " + tagPtEta, kTH2D, {axisPt, axisEta}); - } - }; - - if (doPositivePDG) { // Positive - makeHistogramsPerCharge(0); + const int histogramIndex = id + charge * nSpecies; + HistogramRegistry* registry = &histosPos; + if (charge == 1) { + registry = &histosNeg; } - if (doNegativePDG) { // Negative - makeHistogramsPerCharge(1); + + registry->add(hPtIts[histogramIndex].data(), "ITS tracks " + tagPt, kTH1F, {axisPt}); + registry->add(hPtTpc[histogramIndex].data(), "TPC tracks " + tagPt, kTH1F, {axisPt}); + registry->add(hPtItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPt, kTH1F, {axisPt}); + registry->add(hPtItsTof[histogramIndex].data(), "ITS-TOF tracks " + tagPt, kTH1F, {axisPt}); + registry->add(hPtTpcTof[histogramIndex].data(), "TPC-TOF tracks " + tagPt, kTH1F, {axisPt}); + registry->add(hPtItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPt, kTH1F, {axisPt}); + registry->add(hPtTrkItsTpc[histogramIndex].data(), "ITS-TPC track (reco) " + tagPt, kTH1F, {axisPt}); + registry->add(hPtGenerated[histogramIndex].data(), "Generated " + tagPt, kTH1F, {axisPt}); + + registry->add(hPtItsPrm[histogramIndex].data(), "ITS tracks (primaries) " + tagPt, kTH1F, {axisPt}); + registry->add(hPtItsTpcPrm[histogramIndex].data(), "ITS-TPC tracks (primaries) " + tagPt, kTH1F, {axisPt}); + registry->add(hPtTrkItsTpcPrm[histogramIndex].data(), "ITS-TPC tracks (reco primaries) " + tagPt, kTH1F, {axisPt}); + registry->add(hPtItsTpcTofPrm[histogramIndex].data(), "ITS-TPC-TOF tracks (primaries) " + tagPt, kTH1F, {axisPt}); + registry->add(hPtGeneratedPrm[histogramIndex].data(), "Generated (primaries) " + tagPt, kTH1F, {axisPt}); + + registry->add(hPtItsTpcStr[histogramIndex].data(), "ITS-TPC tracks (from weak decays) " + tagPt, kTH1F, {axisPt}); + registry->add(hPtTrkItsTpcStr[histogramIndex].data(), "ITS-TPC tracks (reco from weak decays) " + tagPt, kTH1F, {axisPt}); + registry->add(hPtItsTpcTofStr[histogramIndex].data(), "ITS-TPC-TOF tracks (from weak decays) " + tagPt, kTH1F, {axisPt}); + registry->add(hPtGeneratedStr[histogramIndex].data(), "Generated (from weak decays) " + tagPt, kTH1F, {axisPt}); + + registry->add(hPtItsTpcMat[histogramIndex].data(), "ITS-TPC tracks (from material)" + tagPt, kTH1F, {axisPt}); + registry->add(hPtTrkItsTpcMat[histogramIndex].data(), "ITS-TPC tracks (reco from material) " + tagPt, kTH1F, {axisPt}); + registry->add(hPtItsTpcTofMat[histogramIndex].data(), "ITS-TPC-TOF tracks ( from material) " + tagPt, kTH1F, {axisPt}); + registry->add(hPtGeneratedMat[histogramIndex].data(), "Generated ( from material) " + tagPt, kTH1F, {axisPt}); + + registry->add(hPItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPt, kTH1F, {axisP}); + registry->add(hPTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagPt, kTH1F, {axisP}); + registry->add(hPItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPt, kTH1F, {axisP}); + registry->add(hPGenerated[histogramIndex].data(), "Generated " + tagPt, kTH1F, {axisP}); + + registry->add(hEtaItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagEta, kTH1F, {axisEta}); + registry->add(hEtaTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagEta, kTH1F, {axisEta}); + registry->add(hEtaItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagEta, kTH1F, {axisEta}); + registry->add(hEtaGenerated[histogramIndex].data(), "Generated " + tagEta, kTH1F, {axisEta}); + + registry->add(hYItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagY, kTH1F, {axisY}); + registry->add(hYItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagY, kTH1F, {axisY}); + registry->add(hYGenerated[histogramIndex].data(), "Generated " + tagY, kTH1F, {axisY}); + + registry->add(hPhiItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPhi, kTH1F, {axisPhi}); + registry->add(hPhiTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagPhi, kTH1F, {axisPhi}); + registry->add(hPhiItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPhi, kTH1F, {axisPhi}); + registry->add(hPhiGenerated[histogramIndex].data(), "Generated " + tagPhi, kTH1F, {axisPhi}); + + if (doPtEta) { + registry->add(hPtEtaItsTpc[histogramIndex].data(), "ITS-TPC tracks " + tagPtEta, kTH2D, {axisPt, axisEta}); + registry->add(hPtEtaTrkItsTpc[histogramIndex].data(), "ITS-TPC tracks (reco) " + tagPtEta, kTH2D, {axisPt, axisEta}); + registry->add(hPtEtaItsTpcTof[histogramIndex].data(), "ITS-TPC-TOF tracks " + tagPtEta, kTH2D, {axisPt, axisEta}); + registry->add(hPtEtaGenerated[histogramIndex].data(), "Generated " + tagPtEta, kTH2D, {axisPt, axisEta}); } - LOG(debug) << "Done with particle: " << partName; + + LOG(info) << "Done with particle: " << partName; } - template + template void makeMCEfficiency(const bool doMakeHistograms) { if (!doMakeHistograms) { @@ -539,11 +555,11 @@ struct QaEfficiency { return; } - if constexpr (chargeIndex == 0) { + if constexpr (charge == 0) { if (!doPositivePDG) { // Positive return; } - } else if constexpr (chargeIndex == 1) { + } else if constexpr (charge == 1) { if (!doNegativePDG) { // Negative return; } @@ -551,16 +567,20 @@ struct QaEfficiency { LOG(fatal) << "Can't interpret charge index"; } - const char* partName = id == o2::track::PID::NIDs ? "All" : o2::track::PID::getName(id); - LOG(debug) << "Making TEfficiency for MC for particle " << partName; + const char* partName = particleName(charge, id); + LOG(info) << "Making TEfficiency for MC for particle " << partName; THashList* subList = new THashList(); - subList->SetName(Form("%s_%s", chargeIndex == 0 ? "Positive" : "Negative", partName)); + subList->SetName(partName); listEfficiencyMC->Add(subList); - auto makeEfficiency = [&](TString effname, auto templateHisto) { // 1D efficiencies - effname = partName + effname; - LOG(debug) << " - " << effname; - const auto h = histos.get(templateHisto); + HistogramRegistry* registry = &histosPos; + if (charge == 1) { + registry = &histosNeg; + } + + auto makeEfficiency = [&](const TString effname, auto templateHisto) { // 1D efficiencies + const auto h = registry->get(templateHisto); + LOG(debug) << " Making 1D TEfficiency " << effname<<" from "<< h->GetName(); const TAxis* axis = h->GetXaxis(); TString efftitle = h->GetTitle(); efftitle.ReplaceAll("Numerator", "").Strip(TString::kBoth); @@ -572,7 +592,7 @@ struct QaEfficiency { } }; - const int histogramIndex = id + chargeIndex * nSpecies; + const int histogramIndex = id + charge * nSpecies; makeEfficiency("ITS_vsPt", HIST(hPtIts[histogramIndex])); makeEfficiency("TPC_vsPt", HIST(hPtTpc[histogramIndex])); @@ -602,10 +622,9 @@ struct QaEfficiency { makeEfficiency("ITS-TPC_vsPhi_Trk", HIST(hPhiTrkItsTpc[histogramIndex])); makeEfficiency("ITS-TPC-TOF_vsPhi", HIST(hPhiItsTpcTof[histogramIndex])); - auto makeEfficiency2D = [&](TString effname, auto templateHisto) { // 2D efficiencies - effname = partName + effname; - LOG(debug) << " - " << effname; - const auto h = histos.get(templateHisto); + auto makeEfficiency2D = [&](const TString effname, auto templateHisto) { // 2D efficiencies + const auto h = registry->get(templateHisto); + LOG(debug) << " Making 2D TEfficiency " << effname<<" from "<< h->GetName(); const TAxis* axisX = h->GetXaxis(); const TAxis* axisY = h->GetYaxis(); TString efftitle = h->GetTitle(); @@ -621,6 +640,8 @@ struct QaEfficiency { if (doPtEta) { makeEfficiency2D("ITS-TPC_vsPt_vsEta", HIST(hPtEtaItsTpc[histogramIndex])); } + + LOG(info) << "Done with particle: " << partName << " for efficiencies"; } void initMC(const AxisSpec& axisSel) @@ -660,28 +681,29 @@ struct QaEfficiency { histos.add("MC/trackLength", "Track length;Track length (cm)", kTH1F, {{2000, -1000, 1000}}); listEfficiencyMC.setObject(new THashList); - makeMCHistograms(doEl); - makeMCHistograms(doMu); - makeMCHistograms(doPi); - makeMCHistograms(doKa); - makeMCHistograms(doPr); - makeMCHistograms(doDe); - makeMCHistograms(doTr); - makeMCHistograms(doHe); - makeMCHistograms(doAl); - makeMCHistograms(doUnId); - - static_for<0, 1>([&](auto i) { - makeMCEfficiency(doEl); - makeMCEfficiency(doMu); - makeMCEfficiency(doPi); - makeMCEfficiency(doKa); - makeMCEfficiency(doPr); - makeMCEfficiency(doDe); - makeMCEfficiency(doTr); - makeMCEfficiency(doHe); - makeMCEfficiency(doAl); - makeMCEfficiency(doUnId); + + static_for<0, 1>([&](auto charge) { + makeMCHistograms(doEl); + makeMCHistograms(doMu); + makeMCHistograms(doPi); + makeMCHistograms(doKa); + makeMCHistograms(doPr); + makeMCHistograms(doDe); + makeMCHistograms(doTr); + makeMCHistograms(doHe); + makeMCHistograms(doAl); + makeMCHistograms(doUnId); + + makeMCEfficiency(doEl); + makeMCEfficiency(doMu); + makeMCEfficiency(doPi); + makeMCEfficiency(doKa); + makeMCEfficiency(doPr); + makeMCEfficiency(doDe); + makeMCEfficiency(doTr); + makeMCEfficiency(doHe); + makeMCEfficiency(doAl); + makeMCEfficiency(doUnId); }); } @@ -842,33 +864,33 @@ struct QaEfficiency { initMC(axisSel); } - template + template bool isPdgSelected(particleType mcParticle) { - static_assert(pdgSign == 0 || pdgSign == 1); + static_assert(charge == 0 || charge == 1); // Selecting PDG code if constexpr (PDGs[id] == 0) { // All PDGs - if constexpr (pdgSign == 0) { + if constexpr (charge == 0) { return mcParticle.pdgCode() > 0; // Positive } else { return mcParticle.pdgCode() < 0; // Negative } } // Specific PDGs - if constexpr (pdgSign == 0) { + if constexpr (charge == 0) { return mcParticle.pdgCode() == PDGs[id]; } else { return mcParticle.pdgCode() == -PDGs[id]; } } - template - void fillMCTrackHistograms(const trackType& track) + template + void fillMCTrackHistograms(const trackType& track, const bool doMakeHistograms) { - static_assert(pdgSign == 0 || pdgSign == 1); + static_assert(charge == 0 || charge == 1); - if constexpr (pdgSign == 0) { + if constexpr (charge == 0) { if (!doPositivePDG) { return; } @@ -878,66 +900,75 @@ struct QaEfficiency { } } - constexpr int histogramIndex = id + pdgSign * nSpecies; + auto& h = histosPos; + if (charge == 1) { + h = histosNeg; + } + + constexpr int histogramIndex = id + charge * nSpecies; LOG(debug) << "Filling track histograms for id " << static_cast(id); const auto mcParticle = track.mcParticle(); - if (!isPdgSelected(mcParticle)) { // Selecting PDG code + if (!isPdgSelected(mcParticle)) { // Selecting PDG code return; } histos.fill(HIST("MC/trackSelection"), 11 + id); - histos.fill(HIST(hPItsTpc[histogramIndex]), mcParticle.p()); - histos.fill(HIST(hPtItsTpc[histogramIndex]), mcParticle.pt()); - histos.fill(HIST(hEtaItsTpc[histogramIndex]), mcParticle.eta()); - histos.fill(HIST(hYItsTpc[histogramIndex]), mcParticle.y()); - histos.fill(HIST(hPhiItsTpc[histogramIndex]), mcParticle.phi()); + h.fill(HIST(hPItsTpc[histogramIndex]), mcParticle.p()); + h.fill(HIST(hPtItsTpc[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hEtaItsTpc[histogramIndex]), mcParticle.eta()); + h.fill(HIST(hYItsTpc[histogramIndex]), mcParticle.y()); + h.fill(HIST(hPhiItsTpc[histogramIndex]), mcParticle.phi()); if (doPtEta) { - histos.fill(HIST(hPtEtaItsTpc[histogramIndex]), mcParticle.pt(), mcParticle.eta()); + h.fill(HIST(hPtEtaItsTpc[histogramIndex]), mcParticle.pt(), mcParticle.eta()); } - histos.fill(HIST(hPTrkItsTpc[histogramIndex]), track.p()); - histos.fill(HIST(hPtTrkItsTpc[histogramIndex]), track.pt()); - histos.fill(HIST(hEtaTrkItsTpc[histogramIndex]), track.eta()); - histos.fill(HIST(hPhiTrkItsTpc[histogramIndex]), track.phi()); + h.fill(HIST(hPTrkItsTpc[histogramIndex]), track.p()); + h.fill(HIST(hPtTrkItsTpc[histogramIndex]), track.pt()); + h.fill(HIST(hEtaTrkItsTpc[histogramIndex]), track.eta()); + h.fill(HIST(hPhiTrkItsTpc[histogramIndex]), track.phi()); if (mcParticle.isPhysicalPrimary()) { - histos.fill(HIST(hPtItsTpcPrm[histogramIndex]), mcParticle.pt()); - histos.fill(HIST(hPtTrkItsTpcPrm[histogramIndex]), track.pt()); + h.fill(HIST(hPtItsTpcPrm[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hPtTrkItsTpcPrm[histogramIndex]), track.pt()); if (track.hasTOF()) { - histos.fill(HIST(hPtItsTpcTofPrm[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hPtItsTpcTofPrm[histogramIndex]), mcParticle.pt()); } } else { if (mcParticle.getProcess() == 4) { // Particle deday - histos.fill(HIST(hPtItsTpcStr[histogramIndex]), mcParticle.pt()); - histos.fill(HIST(hPtTrkItsTpcStr[histogramIndex]), track.pt()); + h.fill(HIST(hPtItsTpcStr[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hPtTrkItsTpcStr[histogramIndex]), track.pt()); if (track.hasTOF()) { - histos.fill(HIST(hPtItsTpcTofStr[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hPtItsTpcTofStr[histogramIndex]), mcParticle.pt()); } } else { // Material - histos.fill(HIST(hPtItsTpcMat[histogramIndex]), mcParticle.pt()); - histos.fill(HIST(hPtTrkItsTpcMat[histogramIndex]), track.pt()); + h.fill(HIST(hPtItsTpcMat[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hPtTrkItsTpcMat[histogramIndex]), track.pt()); if (track.hasTOF()) { - histos.fill(HIST(hPtItsTpcTofMat[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hPtItsTpcTofMat[histogramIndex]), mcParticle.pt()); } } } if (!track.hasTOF()) { return; } - histos.fill(HIST(hPItsTpcTof[histogramIndex]), mcParticle.p()); - histos.fill(HIST(hPtItsTpcTof[histogramIndex]), mcParticle.pt()); - histos.fill(HIST(hEtaItsTpcTof[histogramIndex]), mcParticle.eta()); - histos.fill(HIST(hYItsTpcTof[histogramIndex]), mcParticle.y()); - histos.fill(HIST(hPhiItsTpcTof[histogramIndex]), mcParticle.phi()); + h.fill(HIST(hPItsTpcTof[histogramIndex]), mcParticle.p()); + h.fill(HIST(hPtItsTpcTof[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hEtaItsTpcTof[histogramIndex]), mcParticle.eta()); + h.fill(HIST(hYItsTpcTof[histogramIndex]), mcParticle.y()); + h.fill(HIST(hPhiItsTpcTof[histogramIndex]), mcParticle.phi()); } - template - void fillMCParticleHistograms(const particleType& mcParticle) + template + void fillMCParticleHistograms(const particleType& mcParticle, const bool doMakeHistograms) { - static_assert(pdgSign == 0 || pdgSign == 1); - if constexpr (pdgSign == 0) { + if (!doMakeHistograms) { + return; + } + + static_assert(charge == 0 || charge == 1); + if constexpr (charge == 0) { if (!doPositivePDG) { return; } @@ -947,39 +978,48 @@ struct QaEfficiency { } } - constexpr int histogramIndex = id + pdgSign * nSpecies; + auto& h = histosPos; + if (charge == 1) { + h = histosNeg; + } + + constexpr int histogramIndex = id + charge * nSpecies; LOG(debug) << "Filling particle histograms for id " << static_cast(id); - if (!isPdgSelected(mcParticle)) { // Selecting PDG code + if (!isPdgSelected(mcParticle)) { // Selecting PDG code return; } histos.fill(HIST("MC/particleSelection"), 7 + id); - histos.fill(HIST(hPGenerated[histogramIndex]), mcParticle.p()); - histos.fill(HIST(hPtGenerated[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hPGenerated[histogramIndex]), mcParticle.p()); + h.fill(HIST(hPtGenerated[histogramIndex]), mcParticle.pt()); if (mcParticle.isPhysicalPrimary()) { - histos.fill(HIST(hPtGeneratedPrm[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hPtGeneratedPrm[histogramIndex]), mcParticle.pt()); } else { if (mcParticle.getProcess() == 4) { // Particle deday - histos.fill(HIST(hPtGeneratedStr[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hPtGeneratedStr[histogramIndex]), mcParticle.pt()); } else { // Material - histos.fill(HIST(hPtGeneratedMat[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hPtGeneratedMat[histogramIndex]), mcParticle.pt()); } } - histos.fill(HIST(hEtaGenerated[histogramIndex]), mcParticle.eta()); - histos.fill(HIST(hYGenerated[histogramIndex]), mcParticle.y()); - histos.fill(HIST(hPhiGenerated[histogramIndex]), mcParticle.phi()); + h.fill(HIST(hEtaGenerated[histogramIndex]), mcParticle.eta()); + h.fill(HIST(hYGenerated[histogramIndex]), mcParticle.y()); + h.fill(HIST(hPhiGenerated[histogramIndex]), mcParticle.phi()); if (doPtEta) { - histos.fill(HIST(hPtEtaGenerated[histogramIndex]), mcParticle.pt(), mcParticle.eta()); + h.fill(HIST(hPtEtaGenerated[histogramIndex]), mcParticle.pt(), mcParticle.eta()); } } - template - void fillMCEfficiency() + template + void fillMCEfficiency(const bool doMakeHistograms) { - static_assert(pdgSign == 0 || pdgSign == 1); - if constexpr (pdgSign == 0) { + if (!doMakeHistograms) { + return; + } + + static_assert(charge == 0 || charge == 1); + if constexpr (charge == 0) { if (!doPositivePDG) { return; } @@ -992,26 +1032,30 @@ struct QaEfficiency { return; } - constexpr int histogramIndex = id + pdgSign * nSpecies; + HistogramRegistry* registry = &histosPos; + if (charge == 1) { + registry = &histosNeg; + } + + constexpr int histogramIndex = id + charge * nSpecies; - const char* partName = id == o2::track::PID::NIDs ? "All" : o2::track::PID::getName(id); + const char* partName = particleName(charge, id); LOG(debug) << "Filling efficiency for particle " << static_cast(id) << " " << partName; - THashList* subList = static_cast(listEfficiencyMC->FindObject(Form("%s_%s", pdgSign == 0 ? "Positive" : "Negative", partName))); + THashList* subList = static_cast(listEfficiencyMC->FindObject(partName)); if (!subList) { LOG(warning) << "Cannot find list of efficiency objects for particle " << partName; return; } // Filling 1D efficiencies - auto doFillEfficiency = [&](TString effname, auto num, auto den) { - effname = partName + effname; + auto doFillEfficiency = [&](const TString effname, auto num, auto den) { TEfficiency* eff = static_cast(subList->FindObject(effname)); if (!eff) { LOG(warning) << "Cannot find TEfficiency " << effname; return; } - eff->SetTotalHistogram(*histos.get(den).get(), "f"); - eff->SetPassedHistogram(*histos.get(num).get(), "f"); + eff->SetTotalHistogram(*registry->get(den).get(), "f"); + eff->SetPassedHistogram(*registry->get(num).get(), "f"); }; doFillEfficiency("ITS_vsPt", HIST(hPtIts[histogramIndex]), HIST(hPtGenerated[histogramIndex])); @@ -1054,15 +1098,14 @@ struct QaEfficiency { } // Filling 2D efficiencies - auto fillEfficiency2D = [&](TString effname, auto num, auto den) { - effname = partName + effname; + auto fillEfficiency2D = [&](const TString effname, auto num, auto den) { TEfficiency* eff = static_cast(subList->FindObject(effname)); if (!eff) { LOG(warning) << "Cannot find TEfficiency " << effname; return; } - eff->SetTotalHistogram(*histos.get(den).get(), "f"); - eff->SetPassedHistogram(*histos.get(num).get(), "f"); + eff->SetTotalHistogram(*registry->get(den).get(), "f"); + eff->SetPassedHistogram(*registry->get(num).get(), "f"); }; fillEfficiency2D("ITS-TPC_vsPt_vsEta", HIST(hPtEtaItsTpc[histogramIndex]), HIST(hPtEtaGenerated[histogramIndex])); } @@ -1267,46 +1310,18 @@ struct QaEfficiency { } // Filling variable histograms histos.fill(HIST("MC/trackLength"), track.length()); - if (doEl) { - fillMCTrackHistograms<0, o2::track::PID::Electron>(track); - fillMCTrackHistograms<1, o2::track::PID::Electron>(track); - } - if (doMu) { - fillMCTrackHistograms<0, o2::track::PID::Muon>(track); - fillMCTrackHistograms<1, o2::track::PID::Muon>(track); - } - if (doPi) { - fillMCTrackHistograms<0, o2::track::PID::Pion>(track); - fillMCTrackHistograms<1, o2::track::PID::Pion>(track); - } - if (doKa) { - fillMCTrackHistograms<0, o2::track::PID::Kaon>(track); - fillMCTrackHistograms<1, o2::track::PID::Kaon>(track); - } - if (doPr) { - fillMCTrackHistograms<0, o2::track::PID::Proton>(track); - fillMCTrackHistograms<1, o2::track::PID::Proton>(track); - } - if (doDe) { - fillMCTrackHistograms<0, o2::track::PID::Deuteron>(track); - fillMCTrackHistograms<1, o2::track::PID::Deuteron>(track); - } - if (doTr) { - fillMCTrackHistograms<0, o2::track::PID::Triton>(track); - fillMCTrackHistograms<1, o2::track::PID::Triton>(track); - } - if (doHe) { - fillMCTrackHistograms<0, o2::track::PID::Helium3>(track); - fillMCTrackHistograms<1, o2::track::PID::Helium3>(track); - } - if (doAl) { - fillMCTrackHistograms<0, o2::track::PID::Alpha>(track); - fillMCTrackHistograms<1, o2::track::PID::Alpha>(track); - } - if (doUnId) { - fillMCTrackHistograms<0, o2::track::PID::NIDs>(track); - fillMCTrackHistograms<1, o2::track::PID::NIDs>(track); - } + static_for<0, 1>([&](auto charge) { + fillMCTrackHistograms(track, doEl); + fillMCTrackHistograms(track, doMu); + fillMCTrackHistograms(track, doPi); + fillMCTrackHistograms(track, doKa); + fillMCTrackHistograms(track, doPr); + fillMCTrackHistograms(track, doDe); + fillMCTrackHistograms(track, doTr); + fillMCTrackHistograms(track, doHe); + fillMCTrackHistograms(track, doAl); + fillMCTrackHistograms(track, doUnId); + }); } } @@ -1320,90 +1335,34 @@ struct QaEfficiency { continue; } - if (doEl) { - fillMCParticleHistograms<0, o2::track::PID::Electron>(mcParticle); - fillMCParticleHistograms<1, o2::track::PID::Electron>(mcParticle); - } - if (doMu) { - fillMCParticleHistograms<0, o2::track::PID::Muon>(mcParticle); - fillMCParticleHistograms<1, o2::track::PID::Muon>(mcParticle); - } - if (doPi) { - fillMCParticleHistograms<0, o2::track::PID::Pion>(mcParticle); - fillMCParticleHistograms<1, o2::track::PID::Pion>(mcParticle); - } - if (doKa) { - fillMCParticleHistograms<0, o2::track::PID::Kaon>(mcParticle); - fillMCParticleHistograms<1, o2::track::PID::Kaon>(mcParticle); - } - if (doPr) { - fillMCParticleHistograms<0, o2::track::PID::Proton>(mcParticle); - fillMCParticleHistograms<1, o2::track::PID::Proton>(mcParticle); - } - if (doDe) { - fillMCParticleHistograms<0, o2::track::PID::Deuteron>(mcParticle); - fillMCParticleHistograms<1, o2::track::PID::Deuteron>(mcParticle); - } - if (doTr) { - fillMCParticleHistograms<0, o2::track::PID::Triton>(mcParticle); - fillMCParticleHistograms<1, o2::track::PID::Triton>(mcParticle); - } - if (doHe) { - fillMCParticleHistograms<0, o2::track::PID::Helium3>(mcParticle); - fillMCParticleHistograms<1, o2::track::PID::Helium3>(mcParticle); - } - if (doAl) { - fillMCParticleHistograms<0, o2::track::PID::Alpha>(mcParticle); - fillMCParticleHistograms<1, o2::track::PID::Alpha>(mcParticle); - } - if (doUnId) { - fillMCParticleHistograms<0, o2::track::PID::NIDs>(mcParticle); - fillMCParticleHistograms<1, o2::track::PID::NIDs>(mcParticle); - } + static_for<0, 1>([&](auto charge) { + fillMCParticleHistograms(mcParticle, doEl); + fillMCParticleHistograms(mcParticle, doMu); + fillMCParticleHistograms(mcParticle, doPi); + fillMCParticleHistograms(mcParticle, doKa); + fillMCParticleHistograms(mcParticle, doPr); + fillMCParticleHistograms(mcParticle, doDe); + fillMCParticleHistograms(mcParticle, doTr); + fillMCParticleHistograms(mcParticle, doHe); + fillMCParticleHistograms(mcParticle, doAl); + fillMCParticleHistograms(mcParticle, doUnId); + }); } histos.fill(HIST("MC/eventMultiplicity"), dNdEta * 0.5f / 2.f); // Fill TEfficiencies - if (doEl) { - fillMCEfficiency<0, o2::track::PID::Electron>(); - fillMCEfficiency<1, o2::track::PID::Electron>(); - } - if (doMu) { - fillMCEfficiency<0, o2::track::PID::Muon>(); - fillMCEfficiency<1, o2::track::PID::Muon>(); - } - if (doPi) { - fillMCEfficiency<0, o2::track::PID::Pion>(); - fillMCEfficiency<1, o2::track::PID::Pion>(); - } - if (doKa) { - fillMCEfficiency<0, o2::track::PID::Kaon>(); - fillMCEfficiency<1, o2::track::PID::Kaon>(); - } - if (doPr) { - fillMCEfficiency<0, o2::track::PID::Proton>(); - fillMCEfficiency<1, o2::track::PID::Proton>(); - } - if (doDe) { - fillMCEfficiency<0, o2::track::PID::Deuteron>(); - fillMCEfficiency<1, o2::track::PID::Deuteron>(); - } - if (doTr) { - fillMCEfficiency<0, o2::track::PID::Triton>(); - fillMCEfficiency<1, o2::track::PID::Triton>(); - } - if (doHe) { - fillMCEfficiency<0, o2::track::PID::Helium3>(); - fillMCEfficiency<1, o2::track::PID::Helium3>(); - } - if (doAl) { - fillMCEfficiency<0, o2::track::PID::Alpha>(); - fillMCEfficiency<1, o2::track::PID::Alpha>(); - } - if (doUnId) { - fillMCEfficiency<0, o2::track::PID::NIDs>(); - fillMCEfficiency<1, o2::track::PID::NIDs>(); - } + static_for<0, 1>([&](auto charge) { + fillMCEfficiency(doEl); + fillMCEfficiency(doMu); + fillMCEfficiency(doPi); + fillMCEfficiency(doKa); + fillMCEfficiency(doPr); + fillMCEfficiency(doDe); + fillMCEfficiency(doTr); + fillMCEfficiency(doHe); + fillMCEfficiency(doAl); + fillMCEfficiency(doUnId); + }); } PROCESS_SWITCH(QaEfficiency, processMC, "process MC", false); From a22800940048b493bdb9d1a1daac36529f82de9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Fri, 7 Oct 2022 19:58:30 +0200 Subject: [PATCH 11/14] Update 2 --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 171 +++++++++++++--------------- 1 file changed, 81 insertions(+), 90 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index c78565bccb2..d8d3fba32ff 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -56,7 +56,8 @@ struct QaEfficiency { Configurable doHe{"do-he", false, "Flag to run with the PDG code of helium 3"}; Configurable doAl{"do-al", false, "Flag to run with the PDG code of helium 4"}; // Track only selection, options to select only specific tracks - Configurable trackSelection{"trackSelection", 1, "Track selection: 0 -> No Cut, 1 -> kGlobalTrack, 2 -> kGlobalTrackWoPtEta, 3 -> kGlobalTrackWoDCA, 4 -> kQualityTracks, 5 -> kInAcceptanceTracks"}; + Configurable trackSelection{"trackSelection", true, "Local track selection"}; + Configurable globalTrackSelection{"globalTrackSelection", 0, "Global track selection: 0 -> No Cut, 1 -> kGlobalTrack, 2 -> kGlobalTrackWoPtEta, 3 -> kGlobalTrackWoDCA, 4 -> kQualityTracks, 5 -> kInAcceptanceTracks"}; // Event selection Configurable nMinNumberOfContributors{"nMinNumberOfContributors", 2, "Minimum required number of contributors to the primary vertex"}; Configurable vertexZMin{"vertex-z-min", -10.f, "Minimum position of the generated vertez in Z (cm)"}; @@ -567,7 +568,7 @@ struct QaEfficiency { LOG(fatal) << "Can't interpret charge index"; } - const char* partName = particleName(charge, id); + const TString partName = particleName(charge, id); LOG(info) << "Making TEfficiency for MC for particle " << partName; THashList* subList = new THashList(); subList->SetName(partName); @@ -580,7 +581,7 @@ struct QaEfficiency { auto makeEfficiency = [&](const TString effname, auto templateHisto) { // 1D efficiencies const auto h = registry->get(templateHisto); - LOG(debug) << " Making 1D TEfficiency " << effname<<" from "<< h->GetName(); + LOG(debug) << " Making 1D TEfficiency " << effname << " from " << h->GetName(); const TAxis* axis = h->GetXaxis(); TString efftitle = h->GetTitle(); efftitle.ReplaceAll("Numerator", "").Strip(TString::kBoth); @@ -624,7 +625,7 @@ struct QaEfficiency { auto makeEfficiency2D = [&](const TString effname, auto templateHisto) { // 2D efficiencies const auto h = registry->get(templateHisto); - LOG(debug) << " Making 2D TEfficiency " << effname<<" from "<< h->GetName(); + LOG(debug) << " Making 2D TEfficiency " << effname << " from " << h->GetName(); const TAxis* axisX = h->GetXaxis(); const TAxis* axisY = h->GetYaxis(); TString efftitle = h->GetTitle(); @@ -653,28 +654,36 @@ struct QaEfficiency { auto h = histos.add("MC/trackSelection", "Track Selection", kTH1F, {axisSel}); h->GetXaxis()->SetBinLabel(1, "Tracks read"); h->GetXaxis()->SetBinLabel(2, "Passed has MC part."); - h->GetXaxis()->SetBinLabel(3, "Passed Ev. Reco."); - h->GetXaxis()->SetBinLabel(4, "Passed #it{p}_{T}"); - h->GetXaxis()->SetBinLabel(5, "Passed #it{#eta}"); - h->GetXaxis()->SetBinLabel(6, "Passed #it{#varphi}"); - h->GetXaxis()->SetBinLabel(7, "Passed y"); - h->GetXaxis()->SetBinLabel(8, "Passed Fake"); - h->GetXaxis()->SetBinLabel(9, "Passed standard quality cuts"); - h->GetXaxis()->SetBinLabel(10, "Passed has collision"); + h->GetXaxis()->SetBinLabel(3, "Passed #it{p}_{T}"); + h->GetXaxis()->SetBinLabel(4, "Passed #it{#eta}"); + h->GetXaxis()->SetBinLabel(5, "Passed #it{#varphi}"); + h->GetXaxis()->SetBinLabel(6, "Passed y"); + h->GetXaxis()->SetBinLabel(7, "Passed Fake"); + h->GetXaxis()->SetBinLabel(8, "Passed has collision"); + h->GetXaxis()->SetBinLabel(9, "passedTrackType"); + h->GetXaxis()->SetBinLabel(10, "passedPtRange"); + h->GetXaxis()->SetBinLabel(11, "passedEtaRange"); + h->GetXaxis()->SetBinLabel(12, "passedDCAxy"); + h->GetXaxis()->SetBinLabel(13, "passedDCAz"); + h->GetXaxis()->SetBinLabel(14, "passedGoldenChi2"); + h->GetXaxis()->SetBinLabel(15, "passedITS (partial)"); + h->GetXaxis()->SetBinLabel(16, "passedTPC (partial)"); + h->GetXaxis()->SetBinLabel(17, "passedTOF (partial)"); + h->GetXaxis()->SetBinLabel(18, "Passed globalCut"); + for (int i = 0; i < nSpecies; i++) { - h->GetXaxis()->SetBinLabel(11 + i, Form("Passed PDG %i %s", PDGs[i], particleTitle[i])); + h->GetXaxis()->SetBinLabel(19 + i, Form("Passed PDG %i %s", PDGs[i], particleTitle[i])); } histos.add("MC/fakeTrackNoiseHits", "Fake tracks from noise hits", kTH1F, {{1, 0, 1}}); h = histos.add("MC/particleSelection", "Particle Selection", kTH1F, {axisSel}); h->GetXaxis()->SetBinLabel(1, "Particles read"); - h->GetXaxis()->SetBinLabel(2, "Passed Ev. Reco."); - h->GetXaxis()->SetBinLabel(3, "Passed #it{p}_{T}"); - h->GetXaxis()->SetBinLabel(4, "Passed #it{#eta}"); - h->GetXaxis()->SetBinLabel(5, "Passed #it{#varphi}"); - h->GetXaxis()->SetBinLabel(6, "Passed y"); + h->GetXaxis()->SetBinLabel(2, "Passed #it{p}_{T}"); + h->GetXaxis()->SetBinLabel(3, "Passed #it{#eta}"); + h->GetXaxis()->SetBinLabel(4, "Passed #it{#varphi}"); + h->GetXaxis()->SetBinLabel(5, "Passed y"); for (int i = 0; i < nSpecies; i++) { - h->GetXaxis()->SetBinLabel(7 + i, Form("Passed PDG %i %s", PDGs[i], particleTitle[i])); + h->GetXaxis()->SetBinLabel(6 + i, Form("Passed PDG %i %s", PDGs[i], particleTitle[i])); } histos.add("MC/eventMultiplicity", "Event Selection", kTH1F, {{1000, 0, 5000}}); @@ -715,16 +724,23 @@ struct QaEfficiency { auto h = histos.add("Data/trackSelection", "Track Selection", kTH1F, {axisSel}); h->GetXaxis()->SetBinLabel(1, "Tracks read"); - h->GetXaxis()->SetBinLabel(2, "Passed #it{p}_{T}"); - h->GetXaxis()->SetBinLabel(3, "Passed #it{#eta}"); - h->GetXaxis()->SetBinLabel(4, "Passed #it{#varphi}"); - h->GetXaxis()->SetBinLabel(5, "Passed TrackType"); - h->GetXaxis()->SetBinLabel(6, "Passed PtRange"); - h->GetXaxis()->SetBinLabel(7, "Passed EtaRange"); - h->GetXaxis()->SetBinLabel(8, "Passed DCAxy"); - h->GetXaxis()->SetBinLabel(9, "Passed DCAz"); - h->GetXaxis()->SetBinLabel(10, "Passed GoldenChi2"); - h->GetXaxis()->SetBinLabel(11, "Passed quality cuts"); + h->GetXaxis()->SetBinLabel(2, ""); + h->GetXaxis()->SetBinLabel(3, "Passed #it{p}_{T}"); + h->GetXaxis()->SetBinLabel(4, "Passed #it{#eta}"); + h->GetXaxis()->SetBinLabel(5, "Passed #it{#varphi}"); + h->GetXaxis()->SetBinLabel(6, ""); + h->GetXaxis()->SetBinLabel(7, ""); + h->GetXaxis()->SetBinLabel(8, "Passed has collision"); + h->GetXaxis()->SetBinLabel(9, "passedTrackType"); + h->GetXaxis()->SetBinLabel(10, "passedPtRange"); + h->GetXaxis()->SetBinLabel(11, "passedEtaRange"); + h->GetXaxis()->SetBinLabel(12, "passedDCAxy"); + h->GetXaxis()->SetBinLabel(13, "passedDCAz"); + h->GetXaxis()->SetBinLabel(14, "passedGoldenChi2"); + h->GetXaxis()->SetBinLabel(15, "passedITS (partial)"); + h->GetXaxis()->SetBinLabel(16, "passedTPC (partial)"); + h->GetXaxis()->SetBinLabel(17, "passedTOF (partial)"); + h->GetXaxis()->SetBinLabel(18, "Passed globalCut"); const TString tagPt = Form("#it{#eta} [%.2f,%.2f] #it{#varphi} [%.2f,%.2f]", etaMin, etaMax, @@ -844,8 +860,9 @@ struct QaEfficiency { { auto doLimits = [&](double& min, double& max, const ConfigurableAxis& binning) { const AxisSpec a{binning, "dummy"}; - min = a.binEdges[1]; - max = a.binEdges[a.getNbins() - 1]; + min = a.binEdges[0]; + max = a.binEdges[1]; + LOG(info) << "Making limits from " << min << ", " << max << " size " << a.getNbins(); }; doLimits(ptMin, ptMax, ptBins); @@ -853,7 +870,7 @@ struct QaEfficiency { doLimits(phiMin, phiMax, phiBins); doLimits(yMin, yMax, yBins); - const AxisSpec axisSel{30, 0.5, 30.5, "Selection"}; + const AxisSpec axisSel{40, 0.5, 40.5, "Selection"}; histos.add("eventSelection", "Event Selection", kTH1F, {axisSel}); histos.get(HIST("eventSelection"))->GetXaxis()->SetBinLabel(1, "Events read"); histos.get(HIST("eventSelection"))->GetXaxis()->SetBinLabel(2, "Passed Ev. Sel."); @@ -899,6 +916,7 @@ struct QaEfficiency { return; } } + LOG(info) << "fillMCTrackHistograms for charge " << charge << " id " << id; auto& h = histosPos; if (charge == 1) { @@ -913,7 +931,7 @@ struct QaEfficiency { return; } - histos.fill(HIST("MC/trackSelection"), 11 + id); + histos.fill(HIST("MC/trackSelection"), 19 + id); h.fill(HIST(hPItsTpc[histogramIndex]), mcParticle.p()); h.fill(HIST(hPtItsTpc[histogramIndex]), mcParticle.pt()); @@ -978,6 +996,8 @@ struct QaEfficiency { } } + LOG(info) << "fillMCParticleHistograms for charge " << charge << " id " << id; + auto& h = histosPos; if (charge == 1) { h = histosNeg; @@ -1150,24 +1170,23 @@ struct QaEfficiency { template bool isInAcceptance(const particleType& particle, const histoType& countingHisto, const int offset = 0) { - histos.fill(countingHisto, 1 + offset); if ((particle.pt() < ptMin || particle.pt() > ptMax)) { // Check pt return false; } - histos.fill(countingHisto, 2 + offset); + histos.fill(countingHisto, 1 + offset); if ((particle.eta() < etaMin || particle.eta() > etaMax)) { // Check eta return false; } - histos.fill(countingHisto, 3 + offset); + histos.fill(countingHisto, 2 + offset); if ((particle.phi() < phiMin || particle.phi() > phiMax)) { // Check phi return false; } - histos.fill(countingHisto, 4 + offset); + histos.fill(countingHisto, 3 + offset); if constexpr (isMC) { if ((particle.y() < yMin || particle.y() > yMax)) { // Check rapidity return false; } - histos.fill(countingHisto, 5 + offset); + histos.fill(countingHisto, 4 + offset); } return true; @@ -1210,7 +1229,7 @@ struct QaEfficiency { return false; } } - histos.fill(countingHisto, 8); + histos.fill(countingHisto, 7); } else { // Data only if (!isInAcceptance(track, countingHisto, 2)) { return false; @@ -1220,33 +1239,33 @@ struct QaEfficiency { if (!track.has_collision()) { return false; } - histos.fill(countingHisto, 9); + histos.fill(countingHisto, 8); - if (trackSelection.value > 0) { // Check general cuts + if (trackSelection) { // Check general cuts if (!track.passedTrackType()) { return false; } - histos.fill(countingHisto, 5); + histos.fill(countingHisto, 9); if (!track.passedPtRange()) { return false; } - histos.fill(countingHisto, 6); + histos.fill(countingHisto, 10); if (!track.passedEtaRange()) { return false; } - histos.fill(countingHisto, 7); + histos.fill(countingHisto, 11); if (!track.passedDCAxy()) { return false; } - histos.fill(countingHisto, 8); + histos.fill(countingHisto, 12); if (!track.passedDCAz()) { return false; } - histos.fill(countingHisto, 9); + histos.fill(countingHisto, 13); if (!track.passedGoldenChi2()) { return false; } - histos.fill(countingHisto, 10); + histos.fill(countingHisto, 14); passedITS = track.passedITSNCls() && track.passedITSChi2NDF() && @@ -1267,7 +1286,19 @@ struct QaEfficiency { passedTOF = track.hasTOF(); } - switch (trackSelection.value) { + if (passedITS) { // Partial + histos.fill(countingHisto, 15); + } + + if (passedTPC) { // Partial + histos.fill(countingHisto, 16); + } + + if (passedTOF) { // Partial + histos.fill(countingHisto, 17); + } + + switch (globalTrackSelection) { case 0: return true; case 1: @@ -1283,6 +1314,8 @@ struct QaEfficiency { default: LOG(fatal) << "Can't interpret track asked selection"; } + histos.fill(countingHisto, 18); + return false; } @@ -1378,48 +1411,6 @@ struct QaEfficiency { if (!isTrackSelected(track, HIST("Data/trackSelection"))) { continue; } - if (trackSelection.value > 0) { // Check general cuts - if (!track.passedTrackType()) { - continue; - } - histos.fill(HIST("Data/trackSelection"), 5); - if (!track.passedPtRange()) { - continue; - } - histos.fill(HIST("Data/trackSelection"), 6); - if (!track.passedEtaRange()) { - continue; - } - histos.fill(HIST("Data/trackSelection"), 7); - if (!track.passedDCAxy()) { - continue; - } - histos.fill(HIST("Data/trackSelection"), 8); - if (!track.passedDCAz()) { - continue; - } - histos.fill(HIST("Data/trackSelection"), 9); - if (!track.passedGoldenChi2()) { - continue; - } - histos.fill(HIST("Data/trackSelection"), 10); - - passedITS = track.passedITSNCls() && - track.passedITSChi2NDF() && - track.passedITSRefit() && - track.passedITSHits() && - track.hasITS(); - - passedTPC = track.passedTPCNCls() && - track.passedTPCCrossedRows() && - track.passedTPCCrossedRowsOverNCls() && - track.passedTPCChi2NDF() && - track.passedTPCRefit() && - track.hasTPC(); - } else { - passedITS = track.hasITS(); - passedTPC = track.hasTPC(); - } histos.fill(HIST("Data/trackSelection"), 11); From bb3e7b080c4535d0627af9558206b33e9fc801d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Fri, 7 Oct 2022 23:35:35 +0200 Subject: [PATCH 12/14] Update 3 --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 33 +++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index d8d3fba32ff..cff97340a3f 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -858,6 +858,26 @@ struct QaEfficiency { void init(InitContext&) { + + // Printing configuration + LOG(info) << "Printing configuration"; + LOG(info) << "Set noFakesHits to: " << (noFakesHits ? "true" : "false"); + LOG(info) << "Set doPositivePDG to: " << (doPositivePDG ? "true" : "false"); + LOG(info) << "Set doNegativePDG to: " << (doNegativePDG ? "true" : "false"); + LOG(info) << "Set doUnId to: " << (doUnId ? "true" : "false"); + LOG(info) << "Set doEl to: " << (doEl ? "true" : "false"); + LOG(info) << "Set doMu to: " << (doMu ? "true" : "false"); + LOG(info) << "Set doPi to: " << (doPi ? "true" : "false"); + LOG(info) << "Set doKa to: " << (doKa ? "true" : "false"); + LOG(info) << "Set doPr to: " << (doPr ? "true" : "false"); + LOG(info) << "Set doDe to: " << (doDe ? "true" : "false"); + LOG(info) << "Set doTr to: " << (doTr ? "true" : "false"); + LOG(info) << "Set doHe to: " << (doHe ? "true" : "false"); + LOG(info) << "Set doAl to: " << (doAl ? "true" : "false"); + LOG(info) << "Set trackSelection to: " << (trackSelection ? "true" : "false"); + LOG(info) << "Set makeEff to: " << (makeEff ? "true" : "false"); + LOG(info) << "Set doPtEta to: " << (doPtEta ? "true" : "false"); + auto doLimits = [&](double& min, double& max, const ConfigurableAxis& binning) { const AxisSpec a{binning, "dummy"}; min = a.binEdges[0]; @@ -885,6 +905,7 @@ struct QaEfficiency { bool isPdgSelected(particleType mcParticle) { static_assert(charge == 0 || charge == 1); + static_assert(id > 0 || id < nSpecies); // Selecting PDG code if constexpr (PDGs[id] == 0) { // All PDGs @@ -906,6 +927,9 @@ struct QaEfficiency { void fillMCTrackHistograms(const trackType& track, const bool doMakeHistograms) { static_assert(charge == 0 || charge == 1); + if (!doMakeHistograms) { + return; + } if constexpr (charge == 0) { if (!doPositivePDG) { @@ -916,7 +940,6 @@ struct QaEfficiency { return; } } - LOG(info) << "fillMCTrackHistograms for charge " << charge << " id " << id; auto& h = histosPos; if (charge == 1) { @@ -924,7 +947,7 @@ struct QaEfficiency { } constexpr int histogramIndex = id + charge * nSpecies; - LOG(debug) << "Filling track histograms for id " << static_cast(id); + LOG(debug) << "fillMCTrackHistograms for charge '" << charge << "' and id '" << static_cast(id) << "' " << particleName(charge, id) << " with index " << histogramIndex; const auto mcParticle = track.mcParticle(); if (!isPdgSelected(mcParticle)) { // Selecting PDG code @@ -981,11 +1004,11 @@ struct QaEfficiency { template void fillMCParticleHistograms(const particleType& mcParticle, const bool doMakeHistograms) { + static_assert(charge == 0 || charge == 1); if (!doMakeHistograms) { return; } - static_assert(charge == 0 || charge == 1); if constexpr (charge == 0) { if (!doPositivePDG) { return; @@ -996,15 +1019,13 @@ struct QaEfficiency { } } - LOG(info) << "fillMCParticleHistograms for charge " << charge << " id " << id; - auto& h = histosPos; if (charge == 1) { h = histosNeg; } constexpr int histogramIndex = id + charge * nSpecies; - LOG(debug) << "Filling particle histograms for id " << static_cast(id); + LOG(debug) << "fillMCParticleHistograms for charge '" << charge << "' and id '" << static_cast(id) << "' " << particleName(charge, id) << " with index " << histogramIndex; if (!isPdgSelected(mcParticle)) { // Selecting PDG code return; } From 729e08fbc074838cac32dd7d1619706a79a01a2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Sat, 8 Oct 2022 08:17:45 +0200 Subject: [PATCH 13/14] Update filling --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 89 ++++++++++++++++++++--------- 1 file changed, 62 insertions(+), 27 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index cff97340a3f..58317a974d4 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -602,15 +602,20 @@ struct QaEfficiency { makeEfficiency("Tpc-TOF_vsPt", HIST(hPtTpcTof[histogramIndex])); makeEfficiency("ITS-TPC-TOF_vsPt", HIST(hPtItsTpcTof[histogramIndex])); makeEfficiency("ITS-TPC_vsPt_Trk", HIST(hPtTrkItsTpc[histogramIndex])); + + makeEfficiency("ITS_vsPt_Prm", HIST(hPtItsPrm[histogramIndex])); makeEfficiency("ITS-TPC_vsPt_Prm", HIST(hPtItsTpcPrm[histogramIndex])); makeEfficiency("ITS-TPC_vsPt_Prm_Trk", HIST(hPtTrkItsTpcPrm[histogramIndex])); makeEfficiency("ITS-TPC-TOF_vsPt_Prm", HIST(hPtItsTpcTofPrm[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Str", HIST(hPtItsTpcStr[histogramIndex])); makeEfficiency("ITS-TPC_vsPt_Str_Trk", HIST(hPtTrkItsTpcStr[histogramIndex])); makeEfficiency("ITS-TPC-TOF_vsPt_Str", HIST(hPtItsTpcTofStr[histogramIndex])); + makeEfficiency("ITS-TPC_vsPt_Mat", HIST(hPtItsTpcMat[histogramIndex])); makeEfficiency("ITS-TPC_vsPt_Mat_Trk", HIST(hPtTrkItsTpcMat[histogramIndex])); makeEfficiency("ITS-TPC-TOF_vsPt_Mat", HIST(hPtItsTpcTofMat[histogramIndex])); + makeEfficiency("ITS-TPC_vsP", HIST(hPItsTpc[histogramIndex])); makeEfficiency("ITS-TPC_vsP_Trk", HIST(hPTrkItsTpc[histogramIndex])); makeEfficiency("ITS-TPC-TOF_vsP", HIST(hPItsTpcTof[histogramIndex])); @@ -640,6 +645,8 @@ struct QaEfficiency { if (doPtEta) { makeEfficiency2D("ITS-TPC_vsPt_vsEta", HIST(hPtEtaItsTpc[histogramIndex])); + makeEfficiency2D("ITS-TPC_vsPt_vsEta_Trk", HIST(hPtEtaTrkItsTpc[histogramIndex])); + makeEfficiency2D("ITS-TPC-TOF_vsPt_vsEta", HIST(hPtEtaItsTpcTof[histogramIndex])); } LOG(info) << "Done with particle: " << partName << " for efficiencies"; @@ -956,34 +963,67 @@ struct QaEfficiency { histos.fill(HIST("MC/trackSelection"), 19 + id); - h.fill(HIST(hPItsTpc[histogramIndex]), mcParticle.p()); - h.fill(HIST(hPtItsTpc[histogramIndex]), mcParticle.pt()); - h.fill(HIST(hEtaItsTpc[histogramIndex]), mcParticle.eta()); - h.fill(HIST(hYItsTpc[histogramIndex]), mcParticle.y()); - h.fill(HIST(hPhiItsTpc[histogramIndex]), mcParticle.phi()); - if (doPtEta) { - h.fill(HIST(hPtEtaItsTpc[histogramIndex]), mcParticle.pt(), mcParticle.eta()); + if (passedITS) { + h.fill(HIST(hPtIts[histogramIndex]), mcParticle.pt()); + } + if (passedTPC) { + h.fill(HIST(hPtTpc[histogramIndex]), mcParticle.pt()); + } + if (passedITS && passedTPC) { + h.fill(HIST(hPItsTpc[histogramIndex]), mcParticle.p()); + h.fill(HIST(hPtItsTpc[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hEtaItsTpc[histogramIndex]), mcParticle.eta()); + h.fill(HIST(hYItsTpc[histogramIndex]), mcParticle.y()); + h.fill(HIST(hPhiItsTpc[histogramIndex]), mcParticle.phi()); + + h.fill(HIST(hPTrkItsTpc[histogramIndex]), track.p()); + h.fill(HIST(hPtTrkItsTpc[histogramIndex]), track.pt()); + h.fill(HIST(hEtaTrkItsTpc[histogramIndex]), track.eta()); + h.fill(HIST(hPhiTrkItsTpc[histogramIndex]), track.phi()); + + if (doPtEta) { + h.fill(HIST(hPtEtaItsTpc[histogramIndex]), mcParticle.pt(), mcParticle.eta()); + h.fill(HIST(hPtEtaTrkItsTpc[histogramIndex]), track.pt(), track.eta()); + if (passedTOF) { + h.fill(HIST(hPtEtaItsTpcTof[histogramIndex]), mcParticle.pt(), mcParticle.eta()); + } + } + } + if (passedITS && passedTOF) { + h.fill(HIST(hPtItsTof[histogramIndex]), mcParticle.pt()); + } + if (passedTPC && passedTOF) { + h.fill(HIST(hPtTpcTof[histogramIndex]), mcParticle.pt()); + } + if (passedITS && passedTPC && passedTOF) { + h.fill(HIST(hPItsTpcTof[histogramIndex]), mcParticle.p()); + h.fill(HIST(hPtItsTpcTof[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hEtaItsTpcTof[histogramIndex]), mcParticle.eta()); + h.fill(HIST(hYItsTpcTof[histogramIndex]), mcParticle.y()); + h.fill(HIST(hPhiItsTpcTof[histogramIndex]), mcParticle.phi()); } - - h.fill(HIST(hPTrkItsTpc[histogramIndex]), track.p()); - h.fill(HIST(hPtTrkItsTpc[histogramIndex]), track.pt()); - h.fill(HIST(hEtaTrkItsTpc[histogramIndex]), track.eta()); - h.fill(HIST(hPhiTrkItsTpc[histogramIndex]), track.phi()); if (mcParticle.isPhysicalPrimary()) { - h.fill(HIST(hPtItsTpcPrm[histogramIndex]), mcParticle.pt()); - h.fill(HIST(hPtTrkItsTpcPrm[histogramIndex]), track.pt()); - if (track.hasTOF()) { - h.fill(HIST(hPtItsTpcTofPrm[histogramIndex]), mcParticle.pt()); + if (passedITS) { + h.fill(HIST(hPtItsPrm[histogramIndex]), mcParticle.pt()); } - } else { - if (mcParticle.getProcess() == 4) { // Particle deday + if (passedITS && passedTPC) { + h.fill(HIST(hPtItsTpcPrm[histogramIndex]), mcParticle.pt()); + h.fill(HIST(hPtTrkItsTpcPrm[histogramIndex]), track.pt()); + if (track.hasTOF()) { + h.fill(HIST(hPtItsTpcTofPrm[histogramIndex]), mcParticle.pt()); + } + } + } else if (mcParticle.getProcess() == 4) { // Particle decay + if (passedITS && passedTPC) { h.fill(HIST(hPtItsTpcStr[histogramIndex]), mcParticle.pt()); h.fill(HIST(hPtTrkItsTpcStr[histogramIndex]), track.pt()); if (track.hasTOF()) { h.fill(HIST(hPtItsTpcTofStr[histogramIndex]), mcParticle.pt()); } - } else { // Material + } + } else { // Material + if (passedITS && passedTPC) { h.fill(HIST(hPtItsTpcMat[histogramIndex]), mcParticle.pt()); h.fill(HIST(hPtTrkItsTpcMat[histogramIndex]), track.pt()); if (track.hasTOF()) { @@ -991,14 +1031,6 @@ struct QaEfficiency { } } } - if (!track.hasTOF()) { - return; - } - h.fill(HIST(hPItsTpcTof[histogramIndex]), mcParticle.p()); - h.fill(HIST(hPtItsTpcTof[histogramIndex]), mcParticle.pt()); - h.fill(HIST(hEtaItsTpcTof[histogramIndex]), mcParticle.eta()); - h.fill(HIST(hYItsTpcTof[histogramIndex]), mcParticle.y()); - h.fill(HIST(hPhiItsTpcTof[histogramIndex]), mcParticle.phi()); } template @@ -1107,6 +1139,7 @@ struct QaEfficiency { doFillEfficiency("ITS-TPC-TOF_vsPt", HIST(hPtItsTpcTof[histogramIndex]), HIST(hPtGenerated[histogramIndex])); doFillEfficiency("ITS-TPC_vsPt_Trk", HIST(hPtTrkItsTpc[histogramIndex]), HIST(hPtGenerated[histogramIndex])); + doFillEfficiency("ITS_vsPt_Prm", HIST(hPtItsPrm[histogramIndex]), HIST(hPtGeneratedPrm[histogramIndex])); doFillEfficiency("ITS-TPC_vsPt_Prm", HIST(hPtItsTpcPrm[histogramIndex]), HIST(hPtGeneratedPrm[histogramIndex])); doFillEfficiency("ITS-TPC_vsPt_Prm_Trk", HIST(hPtTrkItsTpcPrm[histogramIndex]), HIST(hPtGeneratedPrm[histogramIndex])); doFillEfficiency("ITS-TPC-TOF_vsPt_Prm", HIST(hPtItsTpcTofPrm[histogramIndex]), HIST(hPtGeneratedPrm[histogramIndex])); @@ -1149,6 +1182,8 @@ struct QaEfficiency { eff->SetPassedHistogram(*registry->get(num).get(), "f"); }; fillEfficiency2D("ITS-TPC_vsPt_vsEta", HIST(hPtEtaItsTpc[histogramIndex]), HIST(hPtEtaGenerated[histogramIndex])); + fillEfficiency2D("ITS-TPC_vsPt_vsEta_Trk", HIST(hPtEtaTrkItsTpc[histogramIndex]), HIST(hPtEtaGenerated[histogramIndex])); + fillEfficiency2D("ITS-TPC-TOF_vsPt_vsEta", HIST(hPtEtaItsTpcTof[histogramIndex]), HIST(hPtEtaGenerated[histogramIndex])); } template From ac96522c5872302d7ee38689bfc0faf8ef9ebce3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Sat, 8 Oct 2022 08:22:59 +0200 Subject: [PATCH 14/14] Fix --- DPG/Tasks/AOTTrack/qaEfficiency.cxx | 69 ++++++++++++++--------------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/DPG/Tasks/AOTTrack/qaEfficiency.cxx b/DPG/Tasks/AOTTrack/qaEfficiency.cxx index 58317a974d4..fc8a15a8215 100644 --- a/DPG/Tasks/AOTTrack/qaEfficiency.cxx +++ b/DPG/Tasks/AOTTrack/qaEfficiency.cxx @@ -1010,7 +1010,7 @@ struct QaEfficiency { if (passedITS && passedTPC) { h.fill(HIST(hPtItsTpcPrm[histogramIndex]), mcParticle.pt()); h.fill(HIST(hPtTrkItsTpcPrm[histogramIndex]), track.pt()); - if (track.hasTOF()) { + if (passedTOF) { h.fill(HIST(hPtItsTpcTofPrm[histogramIndex]), mcParticle.pt()); } } @@ -1018,7 +1018,7 @@ struct QaEfficiency { if (passedITS && passedTPC) { h.fill(HIST(hPtItsTpcStr[histogramIndex]), mcParticle.pt()); h.fill(HIST(hPtTrkItsTpcStr[histogramIndex]), track.pt()); - if (track.hasTOF()) { + if (passedTOF) { h.fill(HIST(hPtItsTpcTofStr[histogramIndex]), mcParticle.pt()); } } @@ -1026,7 +1026,7 @@ struct QaEfficiency { if (passedITS && passedTPC) { h.fill(HIST(hPtItsTpcMat[histogramIndex]), mcParticle.pt()); h.fill(HIST(hPtTrkItsTpcMat[histogramIndex]), track.pt()); - if (track.hasTOF()) { + if (passedTOF) { h.fill(HIST(hPtItsTpcTofMat[histogramIndex]), mcParticle.pt()); } } @@ -1468,8 +1468,6 @@ struct QaEfficiency { continue; } - histos.fill(HIST("Data/trackSelection"), 11); - histos.fill(HIST("Data/trackLength"), track.length()); if (passedITS) { @@ -1485,6 +1483,7 @@ struct QaEfficiency { histos.fill(HIST("Data/neg/etaphi/its"), track.eta(), track.phi()); } } + if (passedTPC) { if (track.sign() > 0) { histos.fill(HIST("Data/pos/pt/tpc"), track.pt()); @@ -1497,33 +1496,33 @@ struct QaEfficiency { histos.fill(HIST("Data/neg/phi/tpc"), track.phi()); histos.fill(HIST("Data/neg/etaphi/tpc"), track.eta(), track.phi()); } + } - if (passedITS && passedTPC) { - if (track.sign() > 0) { - histos.fill(HIST("Data/pos/pt/its_tpc"), track.pt()); - histos.fill(HIST("Data/pos/eta/its_tpc"), track.eta()); - histos.fill(HIST("Data/pos/phi/its_tpc"), track.phi()); - histos.fill(HIST("Data/pos/etaphi/its_tpc"), track.eta(), track.phi()); - } else { - histos.fill(HIST("Data/neg/pt/its_tpc"), track.pt()); - histos.fill(HIST("Data/neg/eta/its_tpc"), track.eta()); - histos.fill(HIST("Data/neg/phi/its_tpc"), track.phi()); - histos.fill(HIST("Data/neg/etaphi/its_tpc"), track.eta(), track.phi()); - } + if (passedITS && passedTPC) { + if (track.sign() > 0) { + histos.fill(HIST("Data/pos/pt/its_tpc"), track.pt()); + histos.fill(HIST("Data/pos/eta/its_tpc"), track.eta()); + histos.fill(HIST("Data/pos/phi/its_tpc"), track.phi()); + histos.fill(HIST("Data/pos/etaphi/its_tpc"), track.eta(), track.phi()); + } else { + histos.fill(HIST("Data/neg/pt/its_tpc"), track.pt()); + histos.fill(HIST("Data/neg/eta/its_tpc"), track.eta()); + histos.fill(HIST("Data/neg/phi/its_tpc"), track.phi()); + histos.fill(HIST("Data/neg/etaphi/its_tpc"), track.eta(), track.phi()); } + } - if (track.hasITS() && passedTPC && track.hasTOF()) { - if (track.sign() > 0) { - histos.fill(HIST("Data/pos/pt/its_tpc_tof"), track.pt()); - histos.fill(HIST("Data/pos/eta/its_tpc_tof"), track.eta()); - histos.fill(HIST("Data/pos/phi/its_tpc_tof"), track.phi()); - histos.fill(HIST("Data/pos/etaphi/its_tpc_tof"), track.eta(), track.phi()); - } else { - histos.fill(HIST("Data/neg/pt/its_tpc_tof"), track.pt()); - histos.fill(HIST("Data/neg/eta/its_tpc_tof"), track.eta()); - histos.fill(HIST("Data/neg/phi/its_tpc_tof"), track.phi()); - histos.fill(HIST("Data/neg/etaphi/its_tpc_tof"), track.eta(), track.phi()); - } + if (passedITS && passedTPC && passedTOF) { + if (track.sign() > 0) { + histos.fill(HIST("Data/pos/pt/its_tpc_tof"), track.pt()); + histos.fill(HIST("Data/pos/eta/its_tpc_tof"), track.eta()); + histos.fill(HIST("Data/pos/phi/its_tpc_tof"), track.phi()); + histos.fill(HIST("Data/pos/etaphi/its_tpc_tof"), track.eta(), track.phi()); + } else { + histos.fill(HIST("Data/neg/pt/its_tpc_tof"), track.pt()); + histos.fill(HIST("Data/neg/eta/its_tpc_tof"), track.eta()); + histos.fill(HIST("Data/neg/phi/its_tpc_tof"), track.phi()); + histos.fill(HIST("Data/neg/etaphi/its_tpc_tof"), track.eta(), track.phi()); } } @@ -1532,12 +1531,12 @@ struct QaEfficiency { static_cast(listEfficiencyData->At(0))->Fill(passedTPC, track.pt()); } if (passedITS && passedTPC) { - static_cast(listEfficiencyData->At(1))->Fill(track.hasTOF(), track.pt()); - static_cast(listEfficiencyData->At(2))->Fill(track.hasTOF(), track.p()); - static_cast(listEfficiencyData->At(3))->Fill(track.hasTOF(), track.eta()); - static_cast(listEfficiencyData->At(4))->Fill(track.hasTOF(), track.phi()); - static_cast(listEfficiencyData->At(5))->Fill(track.hasTOF(), track.pt(), track.eta()); - static_cast(listEfficiencyData->At(6))->Fill(track.hasTOF(), track.pt(), track.phi()); + static_cast(listEfficiencyData->At(1))->Fill(passedTOF, track.pt()); + static_cast(listEfficiencyData->At(2))->Fill(passedTOF, track.p()); + static_cast(listEfficiencyData->At(3))->Fill(passedTOF, track.eta()); + static_cast(listEfficiencyData->At(4))->Fill(passedTOF, track.phi()); + static_cast(listEfficiencyData->At(5))->Fill(passedTOF, track.pt(), track.eta()); + static_cast(listEfficiencyData->At(6))->Fill(passedTOF, track.pt(), track.phi()); } } }