From a8eec1b2a14d0bb5bd88009ef128c80995666362 Mon Sep 17 00:00:00 2001 From: Leonard Date: Mon, 20 Jul 2026 10:32:51 +0200 Subject: [PATCH 1/3] Change underlying event definition, add pt thresholds in Pid and new histograms in jetsHadronsPid.cxx --- PWGJE/Tasks/jetHadronsPid.cxx | 685 ++++++++++++++++++++++++++++------ 1 file changed, 576 insertions(+), 109 deletions(-) diff --git a/PWGJE/Tasks/jetHadronsPid.cxx b/PWGJE/Tasks/jetHadronsPid.cxx index 9dbeaf0d18f..825b41c0897 100644 --- a/PWGJE/Tasks/jetHadronsPid.cxx +++ b/PWGJE/Tasks/jetHadronsPid.cxx @@ -42,13 +42,14 @@ #include #include +#include +#include #include #include #include #include -#include #include #include @@ -63,13 +64,14 @@ using JetEvents = soa::Join; + aod::pidTPCFullPr, aod::pidTOFFullPr, + aod::pidTOFbeta>; using HadronTracksMC = soa::Join; + aod::pidTOFbeta, aod::McTrackLabels>; struct JetHadronsPid { @@ -88,7 +90,7 @@ struct JetHadronsPid { Configurable requireIsGoodZvtxFT0VsPV{"requireIsGoodZvtxFT0VsPV", true, "Require consistent FT0 vs PV z-vertex"}; Configurable requireIsVertexTOFmatched{"requireIsVertexTOFmatched", false, "Require at least one vertex track matched to TOF"}; - Configurable minJetPt{"minJetPt", 4.0, "Minimum pt of the jet after bkg subtraction"}; + Configurable minJetPt{"minJetPt", 10, "Minimum pt of the jet after bkg subtraction"}; Configurable maxJetPt{"maxJetPt", 1e+06, "Maximum pt of the jet after bkg subtraction"}; Configurable rJet{"rJet", 0.4, "Jet resolution parameter R"}; Configurable zVtx{"zVtx", 10.0, "Maximum zVertex"}; @@ -115,15 +117,17 @@ struct JetHadronsPid { Preslice tracksPerCollision = aod::track::collisionId; struct : ConfigurableGroup { - Configurable pidMethod{"pidMethod", 0, "Variable for choosing pid method"}; + Configurable pidMethod{"pidMethod", 2, "Variable for choosing pid method"}; Configurable rejectionSigma{"rejectionSigma", 3.0, "Rejection sigma for tof and tpc pid"}; - Configurable ptThreshold{"ptThreshold", 0.8, "Threshold for pt for different pid methods"}; - Configurable nSigmaCut{"nSigmaCut", 2.0, "Acceptence cut for pid methods"}; + Configurable ptThresholdPion{"ptThresholdPion", 0.75, "Threshold for pt for different pid methods"}; + Configurable ptThresholdKaon{"ptThresholdKaon", 0.5, "Threshold for pt for different pid methods"}; + Configurable ptThresholdProton{"ptThresholdProton", 0.75, "Threshold for pt for different pid methods"}; + Configurable nSigmaCut{"nSigmaCut", 3.0, "Acceptence cut for pid methods"}; Configurable minPtPion{"minPtPion", 0.2, "Minimal Pion pt"}; Configurable maxPtPion{"maxPtPion", 4.0, "Maximum Pion pt"}; Configurable minPtKaon{"minPtKaon", 0.3, "Minimal Kaon pt"}; Configurable maxPtKaon{"maxPtKaon", 3.0, "Maximum Kaon pt"}; - Configurable minPtProton{"minPtProton", 0.3, "Minimal Proton pt"}; + Configurable minPtProton{"minPtProton", 0.5, "Minimal Proton pt"}; Configurable maxPtProton{"maxPtProton", 4.0, "Maximum Proton pt"}; } cfg; @@ -135,24 +139,81 @@ struct JetHadronsPid { eventSelectionBits = jetderiveddatautilities::initialiseEventSelectionBits(static_cast(eventSelections)); - registryData.add("data/n_events", "Event counter", HistType::kTH1F, {{1, 0.5, 1.5, "N_{events}"}}); - registryData.add("data/n_events_raw", "All events", HistType::kTH1F, {{1, 0.5, 1.5, ""}}); - - registryData.add("data/jets/jet_pt", "Jet pT ", HistType::kTH1F, {{100, 0.0, 20.0, "#it{p}_{T}^{raw} (GeV/#it{c})"}}); - registryData.add("data/jets/jet_pt_subtracted", "Jet pT subtracted", HistType::kTH1F, {{200, 0.0, 10.0, "#it{p}_{T}^{sub} (GeV/#it{c})"}}); - registryData.add("data/jets/jet_pt_raw_vs_sub", "Raw vs sub jet pT", HistType::kTH2F, {{200, 0, 200}, {200, 0, 200}}); - registryData.add("data/jets/jet_eta", "Jet eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta_{jet}"}}); - registryData.add("data/jets/jet_phi", "Jet phi", HistType::kTH1F, {{100, 0.0, TwoPI, "#phi_{jet}"}}); - registryData.add("data/jets/jet_area", "Jet area", HistType::kTH1F, {{100, 0.0, 1.5, "Area"}}); - registryData.add("data/jets/jet_n_constituents", "Jet multiplicity", HistType::kTH1I, {{100, 0, 30, "N_{constituents}"}}); - registryData.add("data/z_vtx", "Z-Vertex Distribution", HistType::kTH1F, {{200, -20.0, 20.0, "Z-Vertex (cm)"}}); - + ////////////////////////////////////////////// + // PURE + ////////////////////////////////////////////// + + AxisSpec axisMomentumTPCSignal{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}; + AxisSpec axisTPCSignal{400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}; + + registryData.add("data/pure/tpc_signal_vs_p", + "TPC signal for inclusive selected tracks;" + "#it{p} (GeV/#it{c});" + "TPC d#it{E}/d#it{x} signal (a.u.)", + HistType::kTH2F, {axisMomentumTPCSignal, axisTPCSignal}); + registryData.add("data/jets/tpc_signal_vs_p", + "TPC signal for tracks in selected jets;" + "#it{p} (GeV/#it{c});" + "TPC d#it{E}/d#it{x} signal (a.u.)", + HistType::kTH2F, {axisMomentumTPCSignal, axisTPCSignal}); + registryData.add("data/pure/after_pid/pion_tpc_signal_vs_p", + "TPC signal after pion PID, inclusive tracks;" + "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", + HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); + registryData.add("data/pure/after_pid/kaon_tpc_signal_vs_p", + "TPC signal after kaon PID, inclusive tracks;" + "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", + HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); + registryData.add("data/pure/after_pid/proton_tpc_signal_vs_p", + "TPC signal after proton PID, inclusive tracks;" + "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", + HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); + + registryData.add("data/jets/after_pid/pion_tpc_signal_vs_p", + "TPC signal after pion PID, tracks in jets;" + "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", + HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); + registryData.add("data/jets/after_pid/kaon_tpc_signal_vs_p", + "TPC signal after kaon PID, tracks in jets;" + "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", + HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); + registryData.add("data/jets/after_pid/proton_tpc_signal_vs_p", + "TPC signal after proton PID, tracks in jets;" + "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", + HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); + + AxisSpec axisMomentumTOF{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}; + AxisSpec axisTOFBeta{240, 0.0, 1.2, "#beta_{TOF}"}; + + registryData.add("data/pure/tof_beta_vs_p", + "TOF #beta for inclusive selected tracks;" + "#it{p} (GeV/#it{c});#beta_{TOF}", + HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); + registryData.add("data/jets/tof_beta_vs_p", + "TOF #beta for tracks in selected jets;" + "#it{p} (GeV/#it{c});#beta_{TOF}", + HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); + registryData.add("data/pure/after_pid/pion_tof_beta_vs_p", + "TOF #beta after pion PID, inclusive tracks;" + "#it{p} (GeV/#it{c});#beta_{TOF}", + HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); + registryData.add("data/pure/after_pid/kaon_tof_beta_vs_p", + "TOF #beta after kaon PID, inclusive tracks;" + "#it{p} (GeV/#it{c});#beta_{TOF}", + HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); + registryData.add("data/pure/after_pid/proton_tof_beta_vs_p", + "TOF #beta after proton PID, inclusive tracks;" + "#it{p} (GeV/#it{c});#beta_{TOF}", + HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); + + // Pions registryData.add("data/pure/pions/pion_pure_tpc", "TPC Pion PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/pure/pions/pion_pure_tof", "TOF Pion PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); registryData.add("data/pure/pions/pion_pure_pt", "Pion pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("data/pure/pions/pion_pure_eta", "Pion Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/pure/pions/pion_pure_dcaxy", "Pion DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/pure/pions/pion_pure_dcaz", "Pion DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/pure/pions/pion_pure_eta_phi", "Pure pions;#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI}, {80, -0.8, 0.8}}); registryData.add("data/pure/pions/pos/pion_pure_pos_tpc", "TPC #pi^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/pure/pions/pos/pion_pure_pos_tof", "TOF #pi^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); @@ -160,6 +221,8 @@ struct JetHadronsPid { registryData.add("data/pure/pions/pos/pion_pure_pos_eta", "#pi^{+} Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/pure/pions/pos/pion_pure_pos_dcaxy", "#pi^{+} DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/pure/pions/pos/pion_pure_pos_dcaz", "#pi^{+} DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/pure/pions/pos/pion_pure_pos_phi_vs_pt", "pure pi^{+} ;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); + registryData.add("data/pure/pions/pos/pion_pure_pos_eta_phi", "Pure #pi^{+};#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); registryData.add("data/pure/pions/neg/pion_pure_neg_tpc", "TPC #pi^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/pure/pions/neg/pion_pure_neg_tof", "TOF #pi^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); @@ -167,13 +230,17 @@ struct JetHadronsPid { registryData.add("data/pure/pions/neg/pion_pure_neg_eta", "#pi^{-} Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/pure/pions/neg/pion_pure_neg_dcaxy", "#pi^{-} DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/pure/pions/neg/pion_pure_neg_dcaz", "#pi^{-} DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/pure/pions/neg/pion_pure_neg_phi_vs_pt", "pure pi^{-};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); + registryData.add("data/pure/pions/neg/pion_pure_neg_eta_phi", "Pure #pi^{-};#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); + // Kaons registryData.add("data/pure/kaons/kaon_pure_tpc", "TPC Kaon PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/pure/kaons/kaon_pure_tof", "TOF Kaon PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); registryData.add("data/pure/kaons/kaon_pure_pt", "Kaon pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("data/pure/kaons/kaon_pure_eta", "Kaon Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/pure/kaons/kaon_pure_dcaz", "Kaon DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); registryData.add("data/pure/kaons/kaon_pure_dcaxy", "Kaon DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); + registryData.add("data/pure/kaons/kaon_pure_eta_phi", "Pure kaons;#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI}, {80, -0.8, 0.8}}); registryData.add("data/pure/kaons/pos/kaon_pure_pos_tpc", "TPC K^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/pure/kaons/pos/kaon_pure_pos_tof", "TOF K^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); @@ -181,6 +248,8 @@ struct JetHadronsPid { registryData.add("data/pure/kaons/pos/kaon_pure_pos_eta", "K^{+} Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/pure/kaons/pos/kaon_pure_pos_dcaxy", "K^{+} DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/pure/kaons/pos/kaon_pure_pos_dcaz", "K^{+} DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/pure/kaons/pos/kaon_pure_pos_phi_vs_pt", "pure K^{+};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); + registryData.add("data/pure/kaons/pos/kaon_pure_pos_eta_phi", "Pure K^{+};#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); registryData.add("data/pure/kaons/neg/kaon_pure_neg_tpc", "TPC K^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/pure/kaons/neg/kaon_pure_neg_tof", "TOF K^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); @@ -188,13 +257,17 @@ struct JetHadronsPid { registryData.add("data/pure/kaons/neg/kaon_pure_neg_eta", "K^{-} Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/pure/kaons/neg/kaon_pure_neg_dcaxy", "K^{-} DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/pure/kaons/neg/kaon_pure_neg_dcaz", "K^{-} DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/pure/kaons/neg/kaon_pure_neg_phi_vs_pt", "pureK^{-};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); + registryData.add("data/pure/kaons/neg/kaon_pure_neg_eta_phi", "Pure K^{-};#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); + // Protons registryData.add("data/pure/protons/proton_pure_tpc", "TPC Proton PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/pure/protons/proton_pure_tof", "TOF Proton PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); registryData.add("data/pure/protons/proton_pure_pt", "Proton pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("data/pure/protons/proton_pure_eta", "Proton Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/pure/protons/proton_pure_dcaz", "Proton DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); registryData.add("data/pure/protons/proton_pure_dcaxy", "Proton DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); + registryData.add("data/pure/protons/proton_pure_eta_phi", "Pure protons;#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI}, {80, -0.8, 0.8}}); registryData.add("data/pure/protons/pos/proton_pure_pos_tpc", "TPC p PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/pure/protons/pos/proton_pure_pos_tof", "TOF p PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); @@ -202,6 +275,8 @@ struct JetHadronsPid { registryData.add("data/pure/protons/pos/proton_pure_pos_eta", "p Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/pure/protons/pos/proton_pure_pos_dcaxy", "p DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/pure/protons/pos/proton_pure_pos_dcaz", "p DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/pure/protons/pos/proton_pure_pos_phi_vs_pt", "pure p;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); + registryData.add("data/pure/protons/pos/proton_pure_pos_eta_phi", "Pure p;#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); registryData.add("data/pure/protons/neg/proton_pure_neg_tpc", "TPC #bar{p} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/pure/protons/neg/proton_pure_neg_tof", "TOF #bar{p} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); @@ -209,20 +284,120 @@ struct JetHadronsPid { registryData.add("data/pure/protons/neg/proton_pure_neg_eta", "#bar{p} Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/pure/protons/neg/proton_pure_neg_dcaxy", "#bar{p} DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/pure/protons/neg/proton_pure_neg_dcaz", "#bar{p} DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/pure/protons/neg/proton_pure_neg_phi_vs_pt", "pure #bar{p};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); + registryData.add("data/pure/protons/neg/proton_pure_neg_eta_phi", "Pure #bar{p};#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); + + ////////////////////////////////////////////// + // COLLISIONS + ////////////////////////////////////////////// + + registryData.add("data/pure/collisions/z_vertex", "Collision vertex;z_{vtx} (cm);N_{collisions}", HistType::kTH1F, {{200, -20.0, 20.0, "z_{vtx} (cm)"}}); + registryData.add("data/pure/collisions/x_vertex", "Collision vertex;x_{vtx} (cm);N_{collisions}", HistType::kTH1F, {{200, -1.0, 1.0, "x_{vtx} (cm)"}}); + registryData.add("data/pure/collisions/y_vertex", "Collision vertex;y_{vtx} (cm);N_{collisions}", HistType::kTH1F, {{200, -1.0, 1.0, "y_{vtx} (cm)"}}); + registryData.add("data/pure/collisions/xy_vertex", "Collision vertex;x_{vtx} (cm);y_{vtx} (cm)", HistType::kTH2F, {{200, -1.0, 1.0, "x_{vtx} (cm)"}, {200, -1.0, 1.0, "y_{vtx} (cm)"}}); - registryData.add("data/jets/pions/pion_jet_tpc", "TPC Pion PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/jets/pions/pion_jet_tof", "TOF Pion PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/jets/pions/pion_jet_pt", "Pion pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/jets/pions/pion_jet_eta", "Pion Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/jets/pions/pion_jet_dcaxy", "Pion DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/jets/pions/pion_jet_dcaz", "Pion DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/pure/collisions/n_contributors", "PV contributors;N_{contributors};N_{collisions}", HistType::kTH1I, {{201, -0.5, 200.5, "N_{contributors}"}}); + ////////////////////////////////////////////// + // JETS + ////////////////////////////////////////////// + + registryData.add("data/jets/collision_multiplicity", "Number of Jets in Collison;Number of Jets;Number of Collisions", HistType::kTH1F, {{30, 0.0, 30.5}}); + registryData.add("data/jets/n_events", "Event counter", HistType::kTH1F, {{1, 0.5, 1.5, "N_{events}"}}); + registryData.add("data/jets/n_events_raw", "All events", HistType::kTH1F, {{1, 0.5, 1.5, ""}}); + + registryData.add("data/jets/jet_pt", "Jet pT ", HistType::kTH1F, {{100, 0.0, 20.0, "#it{p}_{T}^{raw} (GeV/#it{c})"}}); + registryData.add("data/jets/jet_pt_subtracted", "Jet pT subtracted", HistType::kTH1F, {{200, 0.0, 10.0, "#it{p}_{T}^{sub} (GeV/#it{c})"}}); + registryData.add("data/jets/jet_pt_raw_vs_sub", "Raw vs sub jet pT", HistType::kTH2F, {{200, 0, 200}, {200, 0, 200}}); + registryData.add("data/jets/jet_eta", "Jet eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta_{jet}"}}); + registryData.add("data/jets/jet_phi", "Jet phi", HistType::kTH1F, {{100, 0.0, TwoPI, "#phi_{jet}"}}); + registryData.add("data/jets/jet_area", "Jet area", HistType::kTH1F, {{100, 0.0, 1.5, "Area"}}); + registryData.add("data/jets/jet_n_constituents", "Jet multiplicity", HistType::kTH1I, {{100, 0, 30, "N_{constituents}"}}); + registryData.add("data/jets/z_vtx", "Z-Vertex Distribution", HistType::kTH1F, {{200, -20.0, 20.0, "Z-Vertex (cm)"}}); + registryData.add("data/jets/total_tracks_pure_vs_jets", "Selected tracks and tracks used in jets;Track category;N_{tracks}", HistType::kTH1F, {{2, 0.5, 2.5, "Track category"}}); + + auto hTrackTotals = registryData.get(HIST("data/jets/total_tracks_pure_vs_jets")); + hTrackTotals->GetXaxis()->SetBinLabel(1, "Pure tracks"); + hTrackTotals->GetXaxis()->SetBinLabel(2, "Tracks in jets"); + + registryData.add("data/jets/after_pid/pion_tof_beta_vs_p", + "TOF #beta after pion PID, tracks in jets;" + "#it{p} (GeV/#it{c});#beta_{TOF}", + HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); + registryData.add("data/jets/after_pid/kaon_tof_beta_vs_p", + "TOF #beta after kaon PID, tracks in jets;" + "#it{p} (GeV/#it{c});#beta_{TOF}", + HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); + registryData.add("data/jets/after_pid/proton_tof_beta_vs_p", + "TOF #beta after proton PID, tracks in jets;" + "#it{p} (GeV/#it{c});#beta_{TOF}", + HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); + + // Jet Cone + + AxisSpec axisDeltaEtaCone{80, -rJet, rJet, "#Delta#eta = #eta_{track} - #eta_{jet}"}; + AxisSpec axisDeltaPhiCone{80, -rJet, rJet, "#Delta#varphi = #varphi_{track} - #varphi_{jet}"}; + AxisSpec axisPtTrackCone{100, 0.0, 10.0, "#it{p}_{T}^{track} (GeV/#it{c})"}; + + registryData.add("data/jets/cone/all_tracks_2d", "All tracks in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); + registryData.add("data/jets/cone/pions/pion_pos_2d", "#pi^{+} in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); + registryData.add("data/jets/cone/pions/pion_neg_2d", "#pi^{-} in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); + registryData.add("data/jets/cone/kaons/kaon_pos_2d", "K^{+} in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); + registryData.add("data/jets/cone/kaons/kaon_neg_2d", "K^{-} in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); + registryData.add("data/jets/cone/protons/proton_2d", "p in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); + registryData.add("data/jets/cone/protons/antiproton_2d", "#bar{p} in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); + + registryData.add("data/jets/cone/all_tracks", "All tracks in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); + registryData.add("data/jets/cone/pions/pion_pos", "#pi^{+} in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); + registryData.add("data/jets/cone/pions/pion_neg", "#pi^{-} in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); + registryData.add("data/jets/cone/kaons/kaon_pos", "K^{+} in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); + registryData.add("data/jets/cone/kaons/kaon_neg", "K^{-} in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); + registryData.add("data/jets/cone/protons/proton", "p in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); + registryData.add("data/jets/cone/protons/antiproton", "#bar{p} in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); + + AxisSpec axisMultiplicity{31, -0.5, 30.5, "N per jet"}; + + registryData.add("data/jets/pions/pos/n_pions_per_jet", "#pi^{+} per jet;N_{#pi^{+}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); + registryData.add("data/jets/kaons/pos/n_kaons_per_jet", "K^{+} per jet;N_{K^{+}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); + registryData.add("data/jets/protons/pos/n_protons_per_jet", "p per jet;N_{p+#bar{p}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); + + registryData.add("data/jets/pions/neg/n_pions_per_jet", "#pi^{-} per jet;N_{#pi^{-}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); + registryData.add("data/jets/kaons/neg/n_kaons_per_jet", "K^{-} per jet;N_{K^{-}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); + registryData.add("data/jets/protons/neg/n_protons_per_jet", "#bar{p} per jet;N_{p+#bar{p}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); + registryData.add("data/jets/composition/particle_multiplicity_per_jet", "Particle composition per jet;Particle species;N per jet", HistType::kTH2I, {{3, 0.5, 3.5, "Particle species"}, {31, -0.5, 30.5, "N per jet"}}); + AxisSpec axisNPions{21, -0.5, 20.5, "N_{#pi} per jet"}; + AxisSpec axisNKaons{11, -0.5, 10.5, "N_{K} per jet"}; + AxisSpec axisNProtons{11, -0.5, 10.5, "N_{p} per jet"}; + + registryData.add("data/jets/composition/nKaons_vs_nProtons", "Particle multiplicity correlation;N_{K};N_{p};N_{jets}", HistType::kTH2F, {axisNKaons, axisNProtons}); + registryData.add("data/jets/composition/nPions_vs_nKaons", "Particle multiplicity correlation;N_{#pi};N_{K};N_{jets}", HistType::kTH2F, {axisNPions, axisNKaons}); + registryData.add("data/jets/composition/nPions_vs_nProtons", "Particle multiplicity correlation;N_{#pi};N_{p};N_{jets}", HistType::kTH2F, {axisNPions, axisNProtons}); + registryData.add("data/jets/composition/nPions_nKaons_nProtons", "Jet particle composition;N_{#pi};N_{K};N_{p}", HistType::kTH3F, {axisNPions, axisNKaons, axisNProtons}); + + registryData.add("data/jets/composition/nKaons_vs_nPions_1proton", "Kaons vs pions in jets with exactly 1 p/#bar{p};N_{K};N_{#pi};N_{jets}", HistType::kTH2I, {axisNKaons, axisNPions}); + registryData.add("data/jets/composition/nKaons_vs_nPions_2protons", "Kaons vs pions in jets with exactly 2 p/#bar{p};N_{K};N_{#pi};N_{jets}", HistType::kTH2I, {axisNKaons, axisNPions}); + registryData.add("data/jets/composition/nKaons_vs_nPions_3protons", "Kaons vs pions in jets with exactly 3 p/#bar{p};N_{K};N_{#pi};N_{jets}", HistType::kTH2I, {axisNKaons, axisNPions}); + registryData.add("data/jets/composition/nKaons_vs_nPions_4protons", "Kaons vs pions in jets with exactly 4 p/#bar{p};N_{K};N_{#pi};N_{jets}", HistType::kTH2I, {axisNKaons, axisNPions}); + + auto hComposition = registryData.get(HIST("data/jets/composition/particle_multiplicity_per_jet")); + hComposition->GetXaxis()->SetBinLabel(1, "#pi"); + hComposition->GetXaxis()->SetBinLabel(2, "K"); + hComposition->GetXaxis()->SetBinLabel(3, "p"); + hComposition->SetOption("COLZ"); + hComposition->SetStats(false); + + // Pions + registryData.add("data/jets/n_pions_vs_n_constituents", + "Pions vs selected constituents;" + "N_{constituents}^{selected};N_{#pi}", + HistType::kTH2I, {{31, -0.5, 30.5, "N_{constituents}^{selected}"}, {31, -0.5, 30.5, "N_{#pi^{+}+#pi^{-}}"}}); registryData.add("data/jets/pions/pos/pion_jet_pos_tpc", "TPC #pi^{+} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/jets/pions/pos/pion_jet_pos_tof", "TOF #pi^{+} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); registryData.add("data/jets/pions/pos/pion_jet_pos_pt", "#pi^{+} pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("data/jets/pions/pos/pion_jet_pos_eta", "#pi^{+} Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/jets/pions/pos/pion_jet_pos_dcaxy", "#pi^{+} DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/jets/pions/pos/pion_jet_pos_dcaz", "#pi^{+} DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/jets/pions/pos/pion_jet_pos_phi_vs_pt", "#pi^{+} in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); registryData.add("data/jets/pions/neg/pion_jet_neg_tpc", "TPC #pi^{-} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/jets/pions/neg/pion_jet_neg_tof", "TOF #pi^{-} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); @@ -230,20 +405,16 @@ struct JetHadronsPid { registryData.add("data/jets/pions/neg/pion_jet_neg_eta", "#pi^{-} Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/jets/pions/neg/pion_jet_neg_dcaxy", "#pi^{-} DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/jets/pions/neg/pion_jet_neg_dcaz", "#pi^{-} DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/jets/pions/neg/pion_jet_neg_phi_vs_pt", "#pi^{-} in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - registryData.add("data/jets/kaons/kaon_jet_tpc", "TPC Kaon PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/jets/kaons/kaon_jet_tof", "TOF Kaon PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/jets/kaons/kaon_jet_pt", "Kaon pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/jets/kaons/kaon_jet_eta", "Kaon Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/jets/kaons/kaon_jet_dcaxy", "Kaon DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/jets/kaons/kaon_jet_dcaz", "Kaon DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - + // Kaons registryData.add("data/jets/kaons/pos/kaon_jet_pos_tpc", "TPC K^{+} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/jets/kaons/pos/kaon_jet_pos_tof", "TOF K^{+} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); registryData.add("data/jets/kaons/pos/kaon_jet_pos_pt", "K^{+} pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("data/jets/kaons/pos/kaon_jet_pos_eta", "K^{+} Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/jets/kaons/pos/kaon_jet_pos_dcaxy", "K^{+} DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/jets/kaons/pos/kaon_jet_pos_dcaz", "K^{+} DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/jets/kaons/pos/kaon_jet_pos_phi_vs_pt", "K^{+} in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); registryData.add("data/jets/kaons/neg/kaon_jet_neg_tpc", "TPC K^{-} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/jets/kaons/neg/kaon_jet_neg_tof", "TOF K^{-} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); @@ -251,20 +422,16 @@ struct JetHadronsPid { registryData.add("data/jets/kaons/neg/kaon_jet_neg_eta", "K^{-} Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/jets/kaons/neg/kaon_jet_neg_dcaxy", "K^{-} DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/jets/kaons/neg/kaon_jet_neg_dcaz", "K^{-} DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/jets/kaons/neg/kaon_jet_neg_phi_vs_pt", "K^{-} in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - registryData.add("data/jets/protons/proton_jet_tpc", "TPC Proton PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/jets/protons/proton_jet_tof", "TOF Proton PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/jets/protons/proton_jet_pt", "Proton pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/jets/protons/proton_jet_eta", "Proton Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/jets/protons/proton_jet_dcaxy", "Proton DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/jets/protons/proton_jet_dcaz", "Proton DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - + // Protons registryData.add("data/jets/protons/pos/proton_jet_pos_tpc", "TPC p PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/jets/protons/pos/proton_jet_pos_tof", "TOF p PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); registryData.add("data/jets/protons/pos/proton_jet_pos_pt", "p pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("data/jets/protons/pos/proton_jet_pos_eta", "p Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/jets/protons/pos/proton_jet_pos_dcaxy", "p DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/jets/protons/pos/proton_jet_pos_dcaz", "p DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/jets/protons/pos/proton_jet_pos_phi_vs_pt", "p in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); registryData.add("data/jets/protons/neg/proton_jet_neg_tpc", "TPC #bar{p} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/jets/protons/neg/proton_jet_neg_tof", "TOF #bar{p} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); @@ -272,6 +439,11 @@ struct JetHadronsPid { registryData.add("data/jets/protons/neg/proton_jet_neg_eta", "#bar{p} Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/jets/protons/neg/proton_jet_neg_dcaxy", "#bar{p} DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/jets/protons/neg/proton_jet_neg_dcaz", "#bar{p} DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); + registryData.add("data/jets/protons/neg/proton_jet_neg_phi_vs_pt", "p in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); + + ////////////////////////////////////////////// + // UE + ////////////////////////////////////////////// registryData.add("data/ue/pions/pion_ue_tpc", "TPC Pion PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); registryData.add("data/ue/pions/pion_ue_tof", "TOF Pion PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); @@ -335,21 +507,25 @@ struct JetHadronsPid { registryData.add("data/ue/protons/neg/proton_ue_neg_eta", "#bar{p} Eta in UE", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); registryData.add("data/ue/protons/neg/proton_ue_neg_dcaxy", "#bar{p} DCAxy in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); registryData.add("data/ue/protons/neg/proton_ue_neg_dcaz", "#bar{p} DCAz in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/ue/tracks_n_in_ue", "Number of tracks in UE", HistType::kTH1I, {{100, 0, 100, "N_{tracks}"}}); + ////////////////////////////////////////////// + // MC + // RECONSTRUCTION + ////////////////////////////////////////////// + registryData.add("mc/n_events", "Event counter", HistType::kTH1F, {{1, 0.5, 1.5, "N_{events}"}}); registryData.add("mc/reconstruction/pions/rec_pion_all", "All Tracks PID'd as Pions", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/pions/mc_rec_pion_pt", "True Primary Pions (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/pions/mc_sec_pion_pt", "Secondary Pions (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/contamination_matrix_pion", "Pion PID Contamination", HistType::kTH2F, {{4000, -0.5, 3999.5, "Absolute PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/pions/contamination_matrix_pion", "Pion PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/pions/pos/mc_rec_pion_pos_pt", "Reconstructed Primary #pi^{+} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/pos/contamination_matrix_pion_pos", "#pi^{+} PID Contamination", HistType::kTH2F, {{4000, -0.5, 3999.5, "Absolute PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/pions/pos/contamination_matrix_pion_pos", "#pi^{+} PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/pions/neg/mc_rec_pion_neg_pt", "Reconstructed Primary #pi^{-} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/neg/contamination_matrix_pion_neg", "#pi^{-} PID Contamination", HistType::kTH2F, {{4000, -0.5, 3999.5, "Absolute PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/pions/neg/contamination_matrix_pion_neg", "#pi^{-} PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/pions/pos/rec_pion_pos_all", "All Tracks PID'd as #pi^{+}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/pions/neg/rec_pion_neg_all", "All Tracks PID'd as #pi^{-}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/pions/pos/mc_sec_pion_pos_pt", "Secondary #pi^{+} (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); @@ -358,33 +534,52 @@ struct JetHadronsPid { registryData.add("mc/reconstruction/kaons/rec_kaon_all", "All Tracks PID'd as Kaons", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/kaons/mc_rec_kaon_pt", "True Primary Kaons (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/kaons/mc_sec_kaon_pt", "Secondary Kaons (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/contamination_matrix_kaon", "Kaon PID Contamination", HistType::kTH2F, {{4000, -0.5, 3999.5, "Absolute PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/kaons/contamination_matrix_kaon", "Kaon PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/kaons/pos/mc_rec_kaon_pos_pt", "Reconstructed Primary K^{+} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/pos/contamination_matrix_kaon_pos", "K^{+} PID Contamination", HistType::kTH2F, {{4000, -0.5, 3999.5, "Absolute PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/kaons/pos/contamination_matrix_kaon_pos", "K^{+} PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/kaons/pos/rec_kaon_pos_all", "All Tracks PID'd as K^{+}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/kaons/neg/rec_kaon_neg_all", "All Tracks PID'd as K^{-}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/kaons/pos/mc_sec_kaon_pos_pt", "Secondary K^{+} (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/kaons/neg/mc_sec_kaon_neg_pt", "Secondary K^{-} (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/kaons/neg/mc_rec_kaon_neg_pt", "Reconstructed Primary K^{-} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/neg/contamination_matrix_kaon_neg", "K^{-} PID Contamination", HistType::kTH2F, {{4000, -0.5, 3999.5, "Absolute PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/kaons/neg/contamination_matrix_kaon_neg", "K^{-} PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/protons/rec_proton_all", "All Tracks PID'd as Protons", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/protons/mc_rec_proton_pt", "True Primary Protons (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/protons/mc_sec_proton_pt", "Secondary Protons (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/contamination_matrix_proton", "Proton PID Contamination", HistType::kTH2F, {{4000, -0.5, 3999.5, "Absolute PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/protons/contamination_matrix_proton", "Proton PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/protons/pos/mc_rec_proton_pos_pt", "Reconstructed Primary p pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/pos/contamination_matrix_proton_pos", "p PID Contamination", HistType::kTH2F, {{4000, -0.5, 3999.5, "Absolute PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/protons/pos/contamination_matrix_proton_pos", "p PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/protons/neg/mc_rec_proton_neg_pt", "Reconstructed Primary #bar{p} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/neg/contamination_matrix_proton_neg", "#bar{p} PID Contamination", HistType::kTH2F, {{4000, -0.5, 3999.5, "Absolute PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/protons/neg/contamination_matrix_proton_neg", "#bar{p} PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/protons/pos/rec_proton_pos_all", "All Tracks PID'd as p", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/protons/neg/rec_proton_neg_all", "All Tracks PID'd as #bar{p}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/protons/pos/mc_sec_proton_pos_pt", "Secondary p (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/reconstruction/protons/neg/mc_sec_proton_neg_pt", "Secondary #bar{p} (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/pions/pos/rec_pion_pos_tpc", "MC TPC #pi^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); + registryData.add("mc/reconstruction/pions/pos/rec_pion_pos_tof", "MC TOF #pi^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); + registryData.add("mc/reconstruction/pions/neg/rec_pion_neg_tpc", "MC TPC #pi^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); + registryData.add("mc/reconstruction/pions/neg/rec_pion_neg_tof", "MC TOF #pi^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); + + registryData.add("mc/reconstruction/kaons/pos/rec_kaon_pos_tpc", "MC TPC K^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); + registryData.add("mc/reconstruction/kaons/pos/rec_kaon_pos_tof", "MC TOF K^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); + registryData.add("mc/reconstruction/kaons/neg/rec_kaon_neg_tpc", "MC TPC K^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); + registryData.add("mc/reconstruction/kaons/neg/rec_kaon_neg_tof", "MC TOF K^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); + + registryData.add("mc/reconstruction/protons/pos/rec_proton_pos_tpc", "MC TPC p PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); + registryData.add("mc/reconstruction/protons/pos/rec_proton_pos_tof", "MC TOF p PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); + registryData.add("mc/reconstruction/protons/neg/rec_proton_neg_tpc", "MC TPC #bar{p} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); + registryData.add("mc/reconstruction/protons/neg/rec_proton_neg_tof", "MC TOF #bar{p} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); + ////////////////////////////////////////////// + // MC + // TRUTH + ////////////////////////////////////////////// + registryData.add("mc/truth/pions/mc_gen_pion_pt", "Generated Primary Pions (Truth)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/truth/pions/pos/mc_gen_pion_pos_pt", "Generated Primary #pi^{+} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/truth/pions/neg/mc_gen_pion_neg_pt", "Generated Primary #pi^{-} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); @@ -396,18 +591,39 @@ struct JetHadronsPid { registryData.add("mc/truth/protons/mc_gen_proton_pt", "Generated Primary Protons (Truth)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/truth/protons/pos/mc_gen_proton_pos_pt", "Generated Primary p pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); registryData.add("mc/truth/protons/neg/mc_gen_proton_neg_pt", "Generated Primary #bar{p} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + + registryData.add("mc/reconstruction/hadrons/rec_hadron_all", "All Tracks (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/hadrons/rec_hadron_tof_match", "All Tracks (Reconstructed) with TOF signal", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/hadrons/mc_rec_hadron_pt", "True Primary Tracks (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/hadrons/mc_sec_hadron_pt", "Secondary Tracks (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/truth/hadrons/mc_gen_hadron_pt", "Generated Primary Tracks", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + + registryData.add("mc/reconstruction/pions/pos/rec_pion_pos_tof_matched", "MC TOF Matched #pi^{+}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/pions/neg/rec_pion_neg_tof_matched", "MC TOF Matched #pi^{-}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + + registryData.add("mc/reconstruction/kaons/pos/rec_kaon_pos_tof_matched", "MC TOF Matched K^{+}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/kaons/neg/rec_kaon_neg_tof_matched", "MC TOF Matched K^{-}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + + registryData.add("mc/reconstruction/protons/pos/rec_proton_pos_tof_matched", "MC TOF Matched p", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryData.add("mc/reconstruction/protons/neg/rec_proton_neg_tof_matched", "MC TOF Matched #bar{p}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); } void getPerpendicularDirections(const TVector3& p, TVector3& u1, TVector3& u2) { - double const treshold = 1e-9; - if (p.Mag2() < treshold) { + double const threshold = 1e-9; + + if (p.Pt() < threshold) { u1.SetXYZ(0, 0, 0); u2.SetXYZ(0, 0, 0); return; } - u1 = p.Orthogonal(); - u2 = p.Cross(u1); + + double pt = p.Pt(); + double eta = p.Eta(); + double phi = p.Phi(); + + u1.SetPtEtaPhi(pt, eta, phi + PIHalf); + u2.SetPtEtaPhi(pt, eta, phi - PIHalf); } template @@ -423,7 +639,6 @@ struct JetHadronsPid { template PidResult getPid(const TrackType& track) { - constexpr int ClosestMatch = 0; constexpr int ExclusiveMatch = 1; constexpr int RejectionBased = 2; @@ -435,18 +650,32 @@ struct JetHadronsPid { double dKa = 0; double dPr = 0; - if (pt < cfg.ptThreshold) { + if (pt < cfg.ptThresholdPion) { dPi = std::abs(track.tpcNSigmaPi()); - dKa = std::abs(track.tpcNSigmaKa()); - dPr = std::abs(track.tpcNSigmaPr()); } else { if (track.hasTOF()) { dPi = std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi()); - dKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); - dPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); } else { dPi = buffer; + } + } + + if (pt < cfg.ptThresholdKaon) { + dKa = std::abs(track.tpcNSigmaKa()); + } else { + if (track.hasTOF()) { + dKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); + } else { dKa = buffer; + } + } + + if (pt < cfg.ptThresholdProton) { + dPr = std::abs(track.tpcNSigmaPr()); + } else { + if (track.hasTOF()) { + dPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); + } else { dPr = buffer; } } @@ -556,22 +785,45 @@ struct JetHadronsPid { return; } + int nSelectedTracks = 0; + + registryData.fill(HIST("data/pure/collisions/z_vertex"), collision.posZ()); + registryData.fill(HIST("data/pure/collisions/x_vertex"), collision.posX()); + registryData.fill(HIST("data/pure/collisions/y_vertex"), collision.posY()); + registryData.fill(HIST("data/pure/collisions/xy_vertex"), collision.posX(), collision.posY()); + registryData.fill(HIST("data/pure/collisions/n_contributors"), collision.numContrib()); + for (auto const& track : globalTracks) { if (!passedTrackSelection(track)) { continue; } + ++nSelectedTracks; + + const double p = track.p(); + registryData.fill(HIST("data/pure/tpc_signal_vs_p"), p, track.tpcSignal()); + if (track.hasTOF()) { + registryData.fill(HIST("data/pure/tof_beta_vs_p"), p, track.beta()); + } + double pt = track.pt(); double eta = track.eta(); double dcaxy = track.dcaXY(); double dcaz = track.dcaZ(); int charge = track.sign(); + double phi = track.phi(); PidResult pid = getPid(track); if (pid.isPion) { + registryData.fill(HIST("data/pure/after_pid/pion_tpc_signal_vs_p"), p, track.tpcSignal()); registryData.fill(HIST("data/pure/pions/pion_pure_tpc"), pt, track.tpcNSigmaPi()); + registryData.fill(HIST("data/pure/pions/pion_pure_eta_phi"), phi, eta); if (track.hasTOF()) { + registryData.fill( + HIST("data/pure/after_pid/pion_tof_beta_vs_p"), + p, + track.beta()); registryData.fill(HIST("data/pure/pions/pion_pure_tof"), pt, track.tofNSigmaPi()); } registryData.fill(HIST("data/pure/pions/pion_pure_pt"), pt); @@ -581,6 +833,9 @@ struct JetHadronsPid { if (charge > 0) { registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_tpc"), pt, track.tpcNSigmaPi()); + registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_phi_vs_pt"), pt, phi); + registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_eta_phi"), phi, eta); + if (track.hasTOF()) { registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_tof"), pt, track.tofNSigmaPi()); } @@ -590,6 +845,9 @@ struct JetHadronsPid { registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_dcaz"), dcaz); } else { registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_tpc"), pt, track.tpcNSigmaPi()); + registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_phi_vs_pt"), pt, phi); + registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_eta_phi"), phi, eta); + if (track.hasTOF()) { registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_tof"), pt, track.tofNSigmaPi()); } @@ -601,8 +859,14 @@ struct JetHadronsPid { } if (pid.isKaon) { + registryData.fill(HIST("data/pure/after_pid/kaon_tpc_signal_vs_p"), track.p(), track.tpcSignal()); registryData.fill(HIST("data/pure/kaons/kaon_pure_tpc"), pt, track.tpcNSigmaKa()); + registryData.fill(HIST("data/pure/kaons/kaon_pure_eta_phi"), phi, eta); if (track.hasTOF()) { + registryData.fill( + HIST("data/pure/after_pid/kaon_tof_beta_vs_p"), + p, + track.beta()); registryData.fill(HIST("data/pure/kaons/kaon_pure_tof"), pt, track.tofNSigmaKa()); } registryData.fill(HIST("data/pure/kaons/kaon_pure_pt"), pt); @@ -612,6 +876,9 @@ struct JetHadronsPid { if (charge > 0) { registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_tpc"), pt, track.tpcNSigmaKa()); + registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_phi_vs_pt"), pt, phi); + registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_eta_phi"), phi, eta); + if (track.hasTOF()) { registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_tof"), pt, track.tofNSigmaKa()); } @@ -621,6 +888,9 @@ struct JetHadronsPid { registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_dcaz"), dcaz); } else { registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_tpc"), pt, track.tpcNSigmaKa()); + registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_phi_vs_pt"), pt, phi); + registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_eta_phi"), phi, eta); + if (track.hasTOF()) { registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_tof"), pt, track.tofNSigmaKa()); } @@ -632,8 +902,14 @@ struct JetHadronsPid { } if (pid.isProton) { + registryData.fill(HIST("data/pure/after_pid/proton_tpc_signal_vs_p"), track.p(), track.tpcSignal()); registryData.fill(HIST("data/pure/protons/proton_pure_tpc"), pt, track.tpcNSigmaPr()); + registryData.fill(HIST("data/pure/protons/proton_pure_eta_phi"), phi, eta); if (track.hasTOF()) { + registryData.fill( + HIST("data/pure/after_pid/proton_tof_beta_vs_p"), + p, + track.beta()); registryData.fill(HIST("data/pure/protons/proton_pure_tof"), pt, track.tofNSigmaPr()); } registryData.fill(HIST("data/pure/protons/proton_pure_pt"), pt); @@ -643,6 +919,9 @@ struct JetHadronsPid { if (charge > 0) { registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_tpc"), pt, track.tpcNSigmaPr()); + registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_phi_vs_pt"), pt, phi); + registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_eta_phi"), phi, eta); + if (track.hasTOF()) { registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_tof"), pt, track.tofNSigmaPr()); } @@ -652,6 +931,9 @@ struct JetHadronsPid { registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_dcaz"), dcaz); } else { registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_tpc"), pt, track.tpcNSigmaPr()); + registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_phi_vs_pt"), pt, phi); + registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_eta_phi"), phi, eta); + if (track.hasTOF()) { registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_tof"), pt, track.tofNSigmaPr()); } @@ -662,6 +944,7 @@ struct JetHadronsPid { } } } + registryData.fill(HIST("data/jets/total_tracks_pure_vs_jets"), 1.0, static_cast(nSelectedTracks)); } PROCESS_SWITCH(JetHadronsPid, processPureTracks, "Pure Tracks Analysis", true); @@ -670,7 +953,7 @@ struct JetHadronsPid { soa::Join const&, HadronTracks const& globalTracks) { - registryData.fill(HIST("data/n_events_raw"), 1); + registryData.fill(HIST("data/jets/n_events_raw"), 1); if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) { return; @@ -681,12 +964,14 @@ struct JetHadronsPid { return; } - registryData.fill(HIST("data/n_events"), 1); - registryData.fill(HIST("data/z_vtx"), zVertex); + registryData.fill(HIST("data/jets/n_events"), 1); + registryData.fill(HIST("data/jets/z_vtx"), zVertex); double centralRho = collision.rho(); + int jetsInCollision = 0; auto collTracks = globalTracks.sliceBy(tracksPerCollision, collision.collisionId()); + int tracksInJetsCollision = 0; for (auto const& jet : jets) { @@ -697,17 +982,15 @@ struct JetHadronsPid { continue; } + if (isppRefAnalysis && (jet.pt() < minJetPt || jet.pt() > maxJetPt)) { + continue; + } + double ptSub = jet.pt() - (centralRho * jet.area()); if (ptSub < 0) { ptSub = 0.0; } - registryData.fill(HIST("data/jets/jet_pt_subtracted"), ptSub); - registryData.fill(HIST("data/jets/jet_pt_raw_vs_sub"), jet.pt(), ptSub); - - if (isppRefAnalysis && (jet.pt() < minJetPt || jet.pt() > maxJetPt)) { - continue; - } if (!isppRefAnalysis && (ptSub < minJetPt || ptSub > maxJetPt)) { continue; } @@ -717,6 +1000,11 @@ struct JetHadronsPid { continue; } + jetsInCollision++; + + registryData.fill(HIST("data/jets/jet_pt_subtracted"), ptSub); + registryData.fill(HIST("data/jets/jet_pt_raw_vs_sub"), jet.pt(), ptSub); + registryData.fill(HIST("data/jets/jet_eta"), jet.eta()); registryData.fill(HIST("data/jets/jet_phi"), jet.phi()); registryData.fill(HIST("data/jets/jet_area"), jet.area()); @@ -731,39 +1019,71 @@ struct JetHadronsPid { continue; } - int constituentCount = 0; - std::set tracksInJetsSet; + int selectedConstituentCount = 0; + + int nPionsInJet = 0; + int nKaonsInJet = 0; + int nProtonsInJet = 0; + + int nPionsInJetPos = 0; + int nKaonsInJetPos = 0; + int nProtonsInJetPos = 0; + + int nPionsInJetNeg = 0; + int nKaonsInJetNeg = 0; + int nProtonsInJetNeg = 0; for (auto const& jtrack : jet.tracks_as>()) { - constituentCount++; auto track = jtrack.track_as(); - tracksInJetsSet.insert(track.index()); if (!passedTrackSelection(track)) { continue; } + tracksInJetsCollision++; + + selectedConstituentCount++; + const double p = track.p(); + + registryData.fill(HIST("data/jets/tpc_signal_vs_p"), p, track.tpcSignal()); + + if (track.hasTOF()) { + registryData.fill(HIST("data/jets/tof_beta_vs_p"), p, track.beta()); + } double pt = track.pt(); double eta = track.eta(); double dcaxy = track.dcaXY(); double dcaz = track.dcaZ(); int charge = track.sign(); + double phi = track.phi(); + + double deltaEtaJet = track.eta() - jet.eta(); + double deltaPhiJet = RecoDecay::constrainAngle(track.phi() - jet.phi(), -PI); + + registryData.fill(HIST("data/jets/cone/all_tracks"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/all_tracks_2d"), deltaEtaJet, deltaPhiJet); PidResult pid = getPid(track); if (pid.isPion) { - registryData.fill(HIST("data/jets/pions/pion_jet_tpc"), pt, track.tpcNSigmaPi()); + registryData.fill(HIST("data/jets/after_pid/pion_tpc_signal_vs_p"), track.p(), track.tpcSignal()); + if (track.hasTOF()) { - registryData.fill(HIST("data/jets/pions/pion_jet_tof"), pt, track.tofNSigmaPi()); + registryData.fill( + HIST("data/jets/after_pid/pion_tof_beta_vs_p"), + p, + track.beta()); } - registryData.fill(HIST("data/jets/pions/pion_jet_pt"), pt); - registryData.fill(HIST("data/jets/pions/pion_jet_eta"), eta); - registryData.fill(HIST("data/jets/pions/pion_jet_dcaxy"), dcaxy); - registryData.fill(HIST("data/jets/pions/pion_jet_dcaz"), dcaz); if (charge > 0) { + nPionsInJetPos++; + registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_tpc"), pt, track.tpcNSigmaPi()); + registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_phi_vs_pt"), pt, phi); + registryData.fill(HIST("data/jets/cone/pions/pion_pos"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/pions/pion_pos_2d"), deltaEtaJet, deltaPhiJet); + if (track.hasTOF()) { registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_tof"), pt, track.tofNSigmaPi()); } @@ -772,7 +1092,12 @@ struct JetHadronsPid { registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_dcaxy"), dcaxy); registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_dcaz"), dcaz); } else { + nPionsInJetNeg++; + + registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_phi_vs_pt"), pt, phi); registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_tpc"), pt, track.tpcNSigmaPi()); + registryData.fill(HIST("data/jets/cone/pions/pion_neg"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/pions/pion_neg_2d"), deltaEtaJet, deltaPhiJet); if (track.hasTOF()) { registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_tof"), pt, track.tofNSigmaPi()); } @@ -784,17 +1109,22 @@ struct JetHadronsPid { } if (pid.isKaon) { - registryData.fill(HIST("data/jets/kaons/kaon_jet_tpc"), pt, track.tpcNSigmaKa()); + registryData.fill(HIST("data/jets/after_pid/kaon_tpc_signal_vs_p"), track.p(), track.tpcSignal()); + if (track.hasTOF()) { - registryData.fill(HIST("data/jets/kaons/kaon_jet_tof"), pt, track.tofNSigmaKa()); + registryData.fill( + HIST("data/jets/after_pid/kaon_tof_beta_vs_p"), + p, + track.beta()); } - registryData.fill(HIST("data/jets/kaons/kaon_jet_pt"), pt); - registryData.fill(HIST("data/jets/kaons/kaon_jet_eta"), eta); - registryData.fill(HIST("data/jets/kaons/kaon_jet_dcaxy"), dcaxy); - registryData.fill(HIST("data/jets/kaons/kaon_jet_dcaz"), dcaz); - if (charge > 0) { + nKaonsInJetPos++; + + registryData.fill(HIST("data/jets/kaons/pos/kaon_jet_pos_phi_vs_pt"), pt, phi); registryData.fill(HIST("data/jets/kaons/pos/kaon_jet_pos_tpc"), pt, track.tpcNSigmaKa()); + registryData.fill(HIST("data/jets/cone/kaons/kaon_pos"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/kaons/kaon_pos_2d"), deltaEtaJet, deltaPhiJet); + if (track.hasTOF()) { registryData.fill(HIST("data/jets/kaons/pos/kaon_jet_pos_tof"), pt, track.tofNSigmaKa()); } @@ -803,7 +1133,12 @@ struct JetHadronsPid { registryData.fill(HIST("data/jets/kaons/pos/kaon_jet_pos_dcaxy"), dcaxy); registryData.fill(HIST("data/jets/kaons/pos/kaon_jet_pos_dcaz"), dcaz); } else { + nKaonsInJetNeg++; + + registryData.fill(HIST("data/jets/kaons/neg/kaon_jet_neg_phi_vs_pt"), pt, phi); registryData.fill(HIST("data/jets/kaons/neg/kaon_jet_neg_tpc"), pt, track.tpcNSigmaKa()); + registryData.fill(HIST("data/jets/cone/kaons/kaon_neg"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/kaons/kaon_neg_2d"), deltaEtaJet, deltaPhiJet); if (track.hasTOF()) { registryData.fill(HIST("data/jets/kaons/neg/kaon_jet_neg_tof"), pt, track.tofNSigmaKa()); } @@ -815,17 +1150,21 @@ struct JetHadronsPid { } if (pid.isProton) { - registryData.fill(HIST("data/jets/protons/proton_jet_tpc"), pt, track.tpcNSigmaPr()); + registryData.fill(HIST("data/jets/after_pid/proton_tpc_signal_vs_p"), track.p(), track.tpcSignal()); + if (track.hasTOF()) { - registryData.fill(HIST("data/jets/protons/proton_jet_tof"), pt, track.tofNSigmaPr()); + registryData.fill( + HIST("data/jets/after_pid/proton_tof_beta_vs_p"), + p, + track.beta()); } - registryData.fill(HIST("data/jets/protons/proton_jet_pt"), pt); - registryData.fill(HIST("data/jets/protons/proton_jet_eta"), eta); - registryData.fill(HIST("data/jets/protons/proton_jet_dcaxy"), dcaxy); - registryData.fill(HIST("data/jets/protons/proton_jet_dcaz"), dcaz); - if (charge > 0) { + nProtonsInJetPos++; + + registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_phi_vs_pt"), pt, phi); registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_tpc"), pt, track.tpcNSigmaPr()); + registryData.fill(HIST("data/jets/cone/protons/proton"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/protons/proton_2d"), deltaEtaJet, deltaPhiJet); if (track.hasTOF()) { registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_tof"), pt, track.tofNSigmaPr()); } @@ -834,7 +1173,12 @@ struct JetHadronsPid { registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_dcaxy"), dcaxy); registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_dcaz"), dcaz); } else { + nProtonsInJetNeg++; + + registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_phi_vs_pt"), pt, phi); registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_tpc"), pt, track.tpcNSigmaPr()); + registryData.fill(HIST("data/jets/cone/protons/antiproton"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/protons/antiproton_2d"), deltaEtaJet, deltaPhiJet); if (track.hasTOF()) { registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_tof"), pt, track.tofNSigmaPr()); } @@ -845,18 +1189,67 @@ struct JetHadronsPid { } } } - registryData.fill(HIST("data/jets/jet_n_constituents"), constituentCount); + registryData.fill(HIST("data/jets/jet_n_constituents"), selectedConstituentCount); + + if (nPionsInJetPos > 0) { + registryData.fill(HIST("data/jets/pions/pos/n_pions_per_jet"), nPionsInJetPos); + } + if (nKaonsInJetPos > 0) { + registryData.fill(HIST("data/jets/kaons/pos/n_kaons_per_jet"), nKaonsInJetPos); + } + if (nProtonsInJetPos > 0) { + registryData.fill(HIST("data/jets/protons/pos/n_protons_per_jet"), nProtonsInJetPos); + } + + if (nPionsInJetNeg > 0) { + registryData.fill(HIST("data/jets/pions/neg/n_pions_per_jet"), nPionsInJetNeg); + } + if (nKaonsInJetNeg > 0) { + registryData.fill(HIST("data/jets/kaons/neg/n_kaons_per_jet"), nKaonsInJetNeg); + } + if (nProtonsInJetNeg > 0) { + registryData.fill(HIST("data/jets/protons/neg/n_protons_per_jet"), nProtonsInJetNeg); + } + + nPionsInJet = nPionsInJetPos + nPionsInJetNeg; + nProtonsInJet = nProtonsInJetNeg + nProtonsInJetPos; + nKaonsInJet = nKaonsInJetNeg + nKaonsInJetPos; + + registryData.fill(HIST("data/jets/n_pions_vs_n_constituents"), selectedConstituentCount, nPionsInJet); + registryData.fill(HIST("data/jets/composition/particle_multiplicity_per_jet"), 1.0, nPionsInJet); + registryData.fill(HIST("data/jets/composition/particle_multiplicity_per_jet"), 2.0, nKaonsInJet); + registryData.fill(HIST("data/jets/composition/particle_multiplicity_per_jet"), 3.0, nProtonsInJet); + + registryData.fill(HIST("data/jets/composition/nKaons_vs_nProtons"), nKaonsInJet, nProtonsInJet); + registryData.fill(HIST("data/jets/composition/nPions_vs_nKaons"), nPionsInJet, nKaonsInJet); + registryData.fill(HIST("data/jets/composition/nPions_vs_nProtons"), nPionsInJet, nProtonsInJet); + registryData.fill(HIST("data/jets/composition/nPions_nKaons_nProtons"), nPionsInJet, nKaonsInJet, nProtonsInJet); + + switch (nProtonsInJet) { + case 1: + registryData.fill(HIST("data/jets/composition/nKaons_vs_nPions_1proton"), nKaonsInJet, nPionsInJet); + break; + + case 2: + registryData.fill(HIST("data/jets/composition/nKaons_vs_nPions_2protons"), nKaonsInJet, nPionsInJet); + break; + + case 3: + registryData.fill(HIST("data/jets/composition/nKaons_vs_nPions_3protons"), nKaonsInJet, nPionsInJet); + break; + + case 4: + registryData.fill(HIST("data/jets/composition/nKaons_vs_nPions_4protons"), nKaonsInJet, nPionsInJet); + break; + + default: + break; + } int nTracksOut = 0; for (auto const& track : collTracks) { - if (!tracksInJetsSet.contains(track.index())) { - if (passedTrackSelection(track)) { - nTracksOut++; - } - } - if (!passedTrackSelection(track)) { continue; } @@ -880,6 +1273,7 @@ struct JetHadronsPid { int charge = track.sign(); PidResult pid = getPid(track); + nTracksOut++; if (pid.isPion) { registryData.fill(HIST("data/ue/pions/pion_ue_tpc"), pt, track.tpcNSigmaPi()); @@ -979,6 +1373,8 @@ struct JetHadronsPid { } registryData.fill(HIST("data/ue/tracks_n_in_ue"), nTracksOut); } + registryData.fill(HIST("data/jets/total_tracks_pure_vs_jets"), 2.0, static_cast(tracksInJetsCollision)); + registryData.fill(HIST("data/jets/collision_multiplicity"), jetsInCollision); } PROCESS_SWITCH(JetHadronsPid, processJets, "Jets Analysis", true); @@ -1022,21 +1418,53 @@ struct JetHadronsPid { auto const& trueParticle = track.mcParticle(); int pdg = std::abs(trueParticle.pdgCode()); + int realpdg = trueParticle.pdgCode(); bool isPrimary = trueParticle.isPhysicalPrimary(); int charge = track.sign(); + registryData.fill(HIST("mc/reconstruction/hadrons/rec_hadron_all"), pt); + + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/hadrons/rec_hadron_tof_match"), pt); + } + + if (isPrimary) { + registryData.fill(HIST("mc/reconstruction/hadrons/mc_rec_hadron_pt"), pt); + } else { + registryData.fill(HIST("mc/reconstruction/hadrons/mc_sec_hadron_pt"), pt); + } + PidResult pid = getPid(track); if (pid.isPion) { registryData.fill(HIST("mc/reconstruction/pions/rec_pion_all"), pt); - registryData.fill(HIST("mc/reconstruction/pions/contamination_matrix_pion"), pdg, pt); + registryData.fill(HIST("mc/reconstruction/pions/contamination_matrix_pion"), realpdg, pt); if (charge > 0) { + registryData.fill(HIST("mc/reconstruction/pions/pos/rec_pion_pos_all"), pt); - registryData.fill(HIST("mc/reconstruction/pions/pos/contamination_matrix_pion_pos"), pdg, pt); + + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/pions/pos/rec_pion_pos_tof_matched"), pt); + } + registryData.fill(HIST("mc/reconstruction/pions/pos/contamination_matrix_pion_pos"), realpdg, pt); + + registryData.fill(HIST("mc/reconstruction/pions/pos/rec_pion_pos_tpc"), pt, track.tpcNSigmaPi()); + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/pions/pos/rec_pion_pos_tof"), pt, track.tofNSigmaPi()); + } } else { registryData.fill(HIST("mc/reconstruction/pions/neg/rec_pion_neg_all"), pt); - registryData.fill(HIST("mc/reconstruction/pions/neg/contamination_matrix_pion_neg"), pdg, pt); + + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/pions/neg/rec_pion_neg_tof_matched"), pt); + } + registryData.fill(HIST("mc/reconstruction/pions/neg/contamination_matrix_pion_neg"), realpdg, pt); + + registryData.fill(HIST("mc/reconstruction/pions/neg/rec_pion_neg_tpc"), pt, track.tpcNSigmaPi()); + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/pions/neg/rec_pion_neg_tof"), pt, track.tofNSigmaPi()); + } } if (isPrimary) { @@ -1060,14 +1488,34 @@ struct JetHadronsPid { if (pid.isKaon) { registryData.fill(HIST("mc/reconstruction/kaons/rec_kaon_all"), pt); - registryData.fill(HIST("mc/reconstruction/kaons/contamination_matrix_kaon"), pdg, pt); + registryData.fill(HIST("mc/reconstruction/kaons/contamination_matrix_kaon"), realpdg, pt); if (charge > 0) { + registryData.fill(HIST("mc/reconstruction/kaons/pos/rec_kaon_pos_all"), pt); - registryData.fill(HIST("mc/reconstruction/kaons/pos/contamination_matrix_kaon_pos"), pdg, pt); + + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/kaons/pos/rec_kaon_pos_tof_matched"), pt); + } + registryData.fill(HIST("mc/reconstruction/kaons/pos/contamination_matrix_kaon_pos"), realpdg, pt); + + registryData.fill(HIST("mc/reconstruction/kaons/pos/rec_kaon_pos_tpc"), pt, track.tpcNSigmaKa()); + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/kaons/pos/rec_kaon_pos_tof"), pt, track.tofNSigmaKa()); + } } else { + registryData.fill(HIST("mc/reconstruction/kaons/neg/rec_kaon_neg_all"), pt); - registryData.fill(HIST("mc/reconstruction/kaons/neg/contamination_matrix_kaon_neg"), pdg, pt); + + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/kaons/neg/rec_kaon_neg_tof_matched"), pt); + } + registryData.fill(HIST("mc/reconstruction/kaons/neg/contamination_matrix_kaon_neg"), realpdg, pt); + + registryData.fill(HIST("mc/reconstruction/kaons/neg/rec_kaon_neg_tpc"), pt, track.tpcNSigmaKa()); + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/kaons/neg/rec_kaon_neg_tof"), pt, track.tofNSigmaKa()); + } } if (isPrimary) { @@ -1091,14 +1539,31 @@ struct JetHadronsPid { if (pid.isProton) { registryData.fill(HIST("mc/reconstruction/protons/rec_proton_all"), pt); - registryData.fill(HIST("mc/reconstruction/protons/contamination_matrix_proton"), pdg, pt); + registryData.fill(HIST("mc/reconstruction/protons/contamination_matrix_proton"), realpdg, pt); if (charge > 0) { registryData.fill(HIST("mc/reconstruction/protons/pos/rec_proton_pos_all"), pt); - registryData.fill(HIST("mc/reconstruction/protons/pos/contamination_matrix_proton_pos"), pdg, pt); + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/protons/pos/rec_proton_pos_tof_matched"), pt); + } + registryData.fill(HIST("mc/reconstruction/protons/pos/contamination_matrix_proton_pos"), realpdg, pt); + + registryData.fill(HIST("mc/reconstruction/protons/pos/rec_proton_pos_tpc"), pt, track.tpcNSigmaPr()); + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/protons/pos/rec_proton_pos_tof"), pt, track.tofNSigmaPr()); + } } else { + registryData.fill(HIST("mc/reconstruction/protons/neg/rec_proton_neg_all"), pt); - registryData.fill(HIST("mc/reconstruction/protons/neg/contamination_matrix_proton_neg"), pdg, pt); + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/protons/neg/rec_proton_neg_tof_matched"), pt); + } + registryData.fill(HIST("mc/reconstruction/protons/neg/contamination_matrix_proton_neg"), realpdg, pt); + + registryData.fill(HIST("mc/reconstruction/protons/neg/rec_proton_neg_tpc"), pt, track.tpcNSigmaPr()); + if (track.hasTOF()) { + registryData.fill(HIST("mc/reconstruction/protons/neg/rec_proton_neg_tof"), pt, track.tofNSigmaPr()); + } } if (isPrimary) { @@ -1144,6 +1609,8 @@ struct JetHadronsPid { int pdg = std::abs(originalPdg); double pt = mcpart.pt(); + registryData.fill(HIST("mc/truth/hadrons/mc_gen_hadron_pt"), pt); + if (pdg == PDG_t::kPiPlus) { if (pt >= cfg.minPtPion && pt <= cfg.maxPtPion) { registryData.fill(HIST("mc/truth/pions/mc_gen_pion_pt"), pt); From fffc2eb8f051910fc7dd904bd26217d8e42434e3 Mon Sep 17 00:00:00 2001 From: Leonard Date: Thu, 23 Jul 2026 18:36:35 +0200 Subject: [PATCH 2/3] Change usage of pt thresholds for PID in jetsHadronsPid.cxx --- PWGJE/Tasks/jetHadronsPid.cxx | 68 ++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/PWGJE/Tasks/jetHadronsPid.cxx b/PWGJE/Tasks/jetHadronsPid.cxx index 825b41c0897..74da2ac91e5 100644 --- a/PWGJE/Tasks/jetHadronsPid.cxx +++ b/PWGJE/Tasks/jetHadronsPid.cxx @@ -646,52 +646,78 @@ struct JetHadronsPid { double const buffer = 999.0; double pt = track.pt(); - double dPi = 0; - double dKa = 0; - double dPr = 0; + double distForPionsPi = 0; + double distForPionsKa = 0; + double distForPionsPr = 0; + + double distForKaonsPi = 0; + double distForKaonsKa = 0; + double distForKaonsPr = 0; + + double distForProtonsPi = 0; + double distForProtonsKa = 0; + double distForProtonsPr = 0; if (pt < cfg.ptThresholdPion) { - dPi = std::abs(track.tpcNSigmaPi()); + distForPionsPi = std::abs(track.tpcNSigmaPi()); + distForPionsKa = std::abs(track.tpcNSigmaKa()); + distForPionsPr = std::abs(track.tpcNSigmaPr()); } else { if (track.hasTOF()) { - dPi = std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi()); + distForPionsPi = std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi()); + distForPionsKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); + distForPionsPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); } else { - dPi = buffer; + distForPionsPi = buffer; + distForPionsKa = buffer; + distForPionsPr = buffer; } } if (pt < cfg.ptThresholdKaon) { - dKa = std::abs(track.tpcNSigmaKa()); + distForKaonsPi = std::abs(track.tpcNSigmaPi()); + distForKaonsKa = std::abs(track.tpcNSigmaKa()); + distForKaonsPr = std::abs(track.tpcNSigmaPr()); } else { if (track.hasTOF()) { - dKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); + distForKaonsPi = std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi()); + distForKaonsKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); + distForKaonsPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); } else { - dKa = buffer; + distForKaonsPi = buffer; + distForKaonsKa = buffer; + distForKaonsPr = buffer; } } if (pt < cfg.ptThresholdProton) { - dPr = std::abs(track.tpcNSigmaPr()); + distForProtonsPi = std::abs(track.tpcNSigmaPi()); + distForProtonsKa = std::abs(track.tpcNSigmaKa()); + distForProtonsPr = std::abs(track.tpcNSigmaPr()); } else { if (track.hasTOF()) { - dPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); + distForProtonsPi = std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi()); + distForProtonsKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); + distForProtonsPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); } else { - dPr = buffer; + distForProtonsPi = buffer; + distForProtonsKa = buffer; + distForProtonsPr = buffer; } } - bool isPiMatch = (dPi <= cfg.nSigmaCut); - bool isKaMatch = (dKa <= cfg.nSigmaCut); - bool isPrMatch = (dPr <= cfg.nSigmaCut); + bool isPiMatch = (distForPionsPi <= cfg.nSigmaCut); + bool isKaMatch = (distForKaonsKa <= cfg.nSigmaCut); + bool isPrMatch = (distForProtonsPr <= cfg.nSigmaCut); PidResult res{.isPion = false, .isKaon = false, .isProton = false}; if (cfg.pidMethod == ClosestMatch) { - if (isPiMatch && dPi < dKa && dPi < dPr) { + if (isPiMatch && distForPionsPi < distForPionsKa && distForPionsPi < distForPionsPr) { res.isPion = true; - } else if (isKaMatch && dKa < dPi && dKa < dPr) { + } else if (isKaMatch && distForKaonsKa < distForKaonsPi && distForKaonsKa < distForKaonsPr) { res.isKaon = true; - } else if (isPrMatch && dPr < dPi && dPr < dKa) { + } else if (isPrMatch && distForProtonsPr < distForProtonsPi && distForProtonsPr < distForProtonsKa) { res.isProton = true; } } else if (cfg.pidMethod == ExclusiveMatch) { @@ -703,11 +729,11 @@ struct JetHadronsPid { res.isProton = true; } } else if (cfg.pidMethod == RejectionBased) { - if (isPiMatch && dKa > cfg.rejectionSigma && dPr > cfg.rejectionSigma) { + if (isPiMatch && distForPionsKa > cfg.rejectionSigma && distForPionsPr > cfg.rejectionSigma) { res.isPion = true; - } else if (isKaMatch && dPi > cfg.rejectionSigma && dPr > cfg.rejectionSigma) { + } else if (isKaMatch && distForKaonsPi > cfg.rejectionSigma && distForKaonsPr > cfg.rejectionSigma) { res.isKaon = true; - } else if (isPrMatch && dPi > cfg.rejectionSigma && dKa > cfg.rejectionSigma) { + } else if (isPrMatch && distForProtonsPi > cfg.rejectionSigma && distForProtonsKa > cfg.rejectionSigma) { res.isProton = true; } } From b2800595c1fdc6ec89562316b331c246dcaee877 Mon Sep 17 00:00:00 2001 From: Leonard Lorenc <107263905+llorenc-11@users.noreply.github.com> Date: Fri, 7 Aug 2026 18:27:10 +0200 Subject: [PATCH 3/3] add MC matched jets processing, registryMC, and configurable axes in jetHadronsPid.cxx add dedicated registryMC to separate mc histograms from data add processMatchJets and processJetsMCP for matched and truth jets add associated histograms and table join declarations for MC jets add a ConfigurableGroup for histogram axes restructure file by moving jet processes below pure track processes --- PWGJE/Tasks/jetHadronsPid.cxx | 2920 +++++++++++++++++++++++---------- 1 file changed, 2015 insertions(+), 905 deletions(-) diff --git a/PWGJE/Tasks/jetHadronsPid.cxx b/PWGJE/Tasks/jetHadronsPid.cxx index 74da2ac91e5..601cfa7fed9 100644 --- a/PWGJE/Tasks/jetHadronsPid.cxx +++ b/PWGJE/Tasks/jetHadronsPid.cxx @@ -24,7 +24,6 @@ #include "Common/CCDB/EventSelectionParams.h" #include "Common/Core/RecoDecay.h" -#include "Common/DataModel/Centrality.h" #include "Common/DataModel/EventSelection.h" #include "Common/DataModel/PIDResponseITS.h" #include "Common/DataModel/PIDResponseTOF.h" @@ -57,16 +56,19 @@ using namespace o2; using namespace o2::constants::math; using namespace o2::framework; -using StandardEvents = soa::Join; +using StandardEvents = soa::Join; using JetEvents = soa::Join; +using MCPJetEvents = soa::Join; + +using ChargedMCDJets = soa::Join; +using ChargedMCPJets = soa::Join; using HadronTracks = soa::Join; - using HadronTracksMC = soa::Join eventSelections{"eventSelections", "sel8,vtxITSTPC,noITSROF,noTF,noPileup,goodZvtx", "choose event selection"}; + Configurable eventSelections{"eventSelections", "sel8+NoITSROFrameBorder+NoTimeFrameBorder+NoSameBunchPileup+IsGoodZvtxFT0vsPV", "choose event selection"}; std::vector eventSelectionBits; Configurable isppRefAnalysis{"isppRefAnalysis", true, "Is ppRef analysis"}; @@ -112,17 +115,15 @@ struct JetHadronsPid { Configurable maxDcaz{"maxDcaz", 0.1, "Maximum DCAz"}; Configurable setMCDefaultItsParams{"setMCDefaultItsParams", true, "set MC default parameters"}; - o2::aod::ITSResponse itsResponse; - - Preslice tracksPerCollision = aod::track::collisionId; - struct : ConfigurableGroup { Configurable pidMethod{"pidMethod", 2, "Variable for choosing pid method"}; Configurable rejectionSigma{"rejectionSigma", 3.0, "Rejection sigma for tof and tpc pid"}; Configurable ptThresholdPion{"ptThresholdPion", 0.75, "Threshold for pt for different pid methods"}; Configurable ptThresholdKaon{"ptThresholdKaon", 0.5, "Threshold for pt for different pid methods"}; Configurable ptThresholdProton{"ptThresholdProton", 0.75, "Threshold for pt for different pid methods"}; - Configurable nSigmaCut{"nSigmaCut", 3.0, "Acceptence cut for pid methods"}; + Configurable nSigmaCutPi{"nSigmaCutPi", 3.0, "Acceptence cut for pid methods"}; + Configurable nSigmaCutKa{"nSigmaCutKa", 3.0, "Acceptence cut for pid methods"}; + Configurable nSigmaCutPr{"nSigmaCutPr", 3.0, "Acceptence cut for pid methods"}; Configurable minPtPion{"minPtPion", 0.2, "Minimal Pion pt"}; Configurable maxPtPion{"maxPtPion", 4.0, "Maximum Pion pt"}; Configurable minPtKaon{"minPtKaon", 0.3, "Minimal Kaon pt"}; @@ -131,6 +132,55 @@ struct JetHadronsPid { Configurable maxPtProton{"maxPtProton", 4.0, "Maximum Proton pt"}; } cfg; + struct : ConfigurableGroup { + // ----------------- Kinematics ----------------- + ConfigurableAxis axisPt{"axisPt", {120, 0.0, 4.0}, "#it{p}_{T} (GeV/#it{c})"}; + ConfigurableAxis axisEta{"axisEta", {100, -1.0, 1.0}, "#eta"}; + ConfigurableAxis axisPhi{"axisPhi", {72, 0.0, TwoPI}, "#varphi"}; + ConfigurableAxis axisMomentum{"axisMomentum", {300, 0.05, 30.0}, "#it{p} (GeV/#it{c})"}; + + // ----------------- Spatial / DCA ----------------- + ConfigurableAxis axisDcaXY{"axisDcaXY", {300, -0.5, 0.5}, "DCA_{xy} (cm)"}; + ConfigurableAxis axisDcaZ{"axisDcaZ", {300, -0.5, 0.5}, "DCA_{z} (cm)"}; + ConfigurableAxis axisZVtx{"axisZVtx", {200, -20.0, 20.0}, "z_{vtx} (cm)"}; + ConfigurableAxis axisVtxXY{"axisVtxXY", {200, -1.0, 1.0}, "vtx_{xy} (cm)"}; + + // ----------------- PID ----------------- + ConfigurableAxis axisTPCSignal{"axisTPCSignal", {400, 20.0, 2000.0}, "TPC d#it{E}/d#it{x} (a.u.)"}; + ConfigurableAxis axisTOFBeta{"axisTOFBeta", {240, 0.0, 1.2}, "#beta_{TOF}"}; + ConfigurableAxis axisNSigmaTPC{"axisNSigmaTPC", {200, -5.0, 5.0}, "n#sigma_{TPC}"}; + ConfigurableAxis axisNSigmaTOF{"axisNSigmaTOF", {200, -5.0, 5.0}, "n#sigma_{TOF}"}; + ConfigurableAxis axisNSigmaCOMB{"axisNSigmaCOMB", {200, 0.0, 15.0}, "n#sigma_{COMB}"}; + ConfigurableAxis axisParticleSpecies{"axisParticleSpecies", {3, 0.5, 3.5}, "Particle species"}; + + // ----------------- Cone / Jet Dynamics ----------------- + ConfigurableAxis axisDeltaEtaCone{"axisDeltaEtaCone", {80, -0.8, 0.8}, "#Delta#eta"}; + ConfigurableAxis axisDeltaPhiCone{"axisDeltaPhiCone", {80, -0.8, 0.8}, "#Delta#varphi"}; + ConfigurableAxis axisPtTrackCone{"axisPtTrackCone", {100, 0.0, 10.0}, "#it{p}_{T}^{track} (GeV/#it{c})"}; + ConfigurableAxis axisJetPt{"axisJetPt", {200, 0.0, 100.0}, "#it{p}_{T}^{jet} (GeV/#it{c})"}; + ConfigurableAxis axisJetSubPt{"axisJetSubPt", {200, 0.0, 10.0}, "#it{p}_{T}^{sub} (GeV/#it{c})"}; + ConfigurableAxis axisJetArea{"axisJetArea", {100, 0.0, 1.5}, "A_{jet}"}; + ConfigurableAxis axisJetNConst{"axisJetNConst", {101, -0.5, 100.5}, "N_{constituents}"}; + + // ----------------- Multiplicities / Counting ----------------- + ConfigurableAxis axisEventMultiplicity{"axisEventMultiplicity", {201, -0.5, 200.5}, "N_{particles/contributors}"}; + ConfigurableAxis axisMultiplicity{"axisMultiplicity", {31, -0.5, 30.5}, "N per jet"}; + ConfigurableAxis axisNPions{"axisNPions", {21, -0.5, 20.5}, "N_{#pi} per jet"}; + ConfigurableAxis axisNKaons{"axisNKaons", {11, -0.5, 10.5}, "N_{K} per jet"}; + ConfigurableAxis axisNProtons{"axisNProtons", {11, -0.5, 10.5}, "N_{p} per jet"}; + + // ----------------- Others ----------------- + ConfigurableAxis axisMCPdg{"axisMCPdg", {6001, -3000.5, 3000.5}, "PDG Code"}; + ConfigurableAxis axisTrackCategory{"axisTrackCategory", {2, 0.5, 2.5}, "Track category"}; + ConfigurableAxis axisEventCounter{"axisEventCounter", {1, 0.5, 1.5}, "N_{events}"}; + + } axis; + + o2::aod::ITSResponse itsResponse; + + Preslice tracksPerCollision = aod::track::collisionId; + Preslice mcParticlesPerCollision = aod::mcparticle::mcCollisionId; + void init(InitContext const&) { if (setMCDefaultItsParams) { @@ -139,245 +189,244 @@ struct JetHadronsPid { eventSelectionBits = jetderiveddatautilities::initialiseEventSelectionBits(static_cast(eventSelections)); - ////////////////////////////////////////////// - // PURE - ////////////////////////////////////////////// - - AxisSpec axisMomentumTPCSignal{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}; - AxisSpec axisTPCSignal{400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}; - - registryData.add("data/pure/tpc_signal_vs_p", - "TPC signal for inclusive selected tracks;" - "#it{p} (GeV/#it{c});" - "TPC d#it{E}/d#it{x} signal (a.u.)", - HistType::kTH2F, {axisMomentumTPCSignal, axisTPCSignal}); - registryData.add("data/jets/tpc_signal_vs_p", - "TPC signal for tracks in selected jets;" - "#it{p} (GeV/#it{c});" - "TPC d#it{E}/d#it{x} signal (a.u.)", - HistType::kTH2F, {axisMomentumTPCSignal, axisTPCSignal}); - registryData.add("data/pure/after_pid/pion_tpc_signal_vs_p", - "TPC signal after pion PID, inclusive tracks;" - "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", - HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); - registryData.add("data/pure/after_pid/kaon_tpc_signal_vs_p", - "TPC signal after kaon PID, inclusive tracks;" - "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", - HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); - registryData.add("data/pure/after_pid/proton_tpc_signal_vs_p", - "TPC signal after proton PID, inclusive tracks;" - "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", - HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); - - registryData.add("data/jets/after_pid/pion_tpc_signal_vs_p", - "TPC signal after pion PID, tracks in jets;" - "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", - HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); - registryData.add("data/jets/after_pid/kaon_tpc_signal_vs_p", - "TPC signal after kaon PID, tracks in jets;" - "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", - HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); - registryData.add("data/jets/after_pid/proton_tpc_signal_vs_p", - "TPC signal after proton PID, tracks in jets;" - "#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", - HistType::kTH2F, {{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}, {400, 20.0, 2000.0, "TPC d#it{E}/d#it{x} signal (a.u.)"}}); - - AxisSpec axisMomentumTOF{300, 0.05, 30.0, "#it{p} (GeV/#it{c})"}; - AxisSpec axisTOFBeta{240, 0.0, 1.2, "#beta_{TOF}"}; - - registryData.add("data/pure/tof_beta_vs_p", - "TOF #beta for inclusive selected tracks;" - "#it{p} (GeV/#it{c});#beta_{TOF}", - HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); - registryData.add("data/jets/tof_beta_vs_p", - "TOF #beta for tracks in selected jets;" - "#it{p} (GeV/#it{c});#beta_{TOF}", - HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); - registryData.add("data/pure/after_pid/pion_tof_beta_vs_p", - "TOF #beta after pion PID, inclusive tracks;" - "#it{p} (GeV/#it{c});#beta_{TOF}", - HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); - registryData.add("data/pure/after_pid/kaon_tof_beta_vs_p", - "TOF #beta after kaon PID, inclusive tracks;" - "#it{p} (GeV/#it{c});#beta_{TOF}", - HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); - registryData.add("data/pure/after_pid/proton_tof_beta_vs_p", - "TOF #beta after proton PID, inclusive tracks;" - "#it{p} (GeV/#it{c});#beta_{TOF}", - HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); + // --- DATA: PURE TRACKS --- + registryData.add("data/pure/general/tpc_signal_vs_p", "TPC n#sigma_{#pi} vs transverse momentum ;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryData.add("data/pure/general/tof_beta_vs_p", "TOF #beta vs momentum;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); // Pions - registryData.add("data/pure/pions/pion_pure_tpc", "TPC Pion PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/pure/pions/pion_pure_tof", "TOF Pion PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/pure/pions/pion_pure_pt", "Pion pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/pure/pions/pion_pure_eta", "Pion Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/pure/pions/pion_pure_dcaxy", "Pion DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/pure/pions/pion_pure_dcaz", "Pion DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/pure/pions/pion_pure_eta_phi", "Pure pions;#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI}, {80, -0.8, 0.8}}); - - registryData.add("data/pure/pions/pos/pion_pure_pos_tpc", "TPC #pi^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/pure/pions/pos/pion_pure_pos_tof", "TOF #pi^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/pure/pions/pos/pion_pure_pos_pt", "#pi^{+} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/pure/pions/pos/pion_pure_pos_eta", "#pi^{+} Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/pure/pions/pos/pion_pure_pos_dcaxy", "#pi^{+} DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/pure/pions/pos/pion_pure_pos_dcaz", "#pi^{+} DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/pure/pions/pos/pion_pure_pos_phi_vs_pt", "pure pi^{+} ;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - registryData.add("data/pure/pions/pos/pion_pure_pos_eta_phi", "Pure #pi^{+};#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); - - registryData.add("data/pure/pions/neg/pion_pure_neg_tpc", "TPC #pi^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/pure/pions/neg/pion_pure_neg_tof", "TOF #pi^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/pure/pions/neg/pion_pure_neg_pt", "#pi^{-} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/pure/pions/neg/pion_pure_neg_eta", "#pi^{-} Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/pure/pions/neg/pion_pure_neg_dcaxy", "#pi^{-} DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/pure/pions/neg/pion_pure_neg_dcaz", "#pi^{-} DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/pure/pions/neg/pion_pure_neg_phi_vs_pt", "pure pi^{-};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - registryData.add("data/pure/pions/neg/pion_pure_neg_eta_phi", "Pure #pi^{-};#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); + registryData.add("data/pure/pions/pion_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for PID-selected pion candidates;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryData.add("data/pure/pions/pion_tof_beta_vs_p", "TOF #beta vs momentum for PID-selected pion candidates;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryData.add("data/pure/pions/pion_pure_tpc", "TPC n#sigma_{#pi} vs transverse momentum for PID-selected pion candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/pure/pions/pion_pure_tof", "TOF n#sigma_{#pi} vs transverse momentum for PID-selected pion candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/pure/pions/pion_pure_combined_tof_tpc", "Combined TOF+TPC n#sigma_{#pi} vs transverse momentum for PID-selected pion candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{COMB}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaCOMB}); + + registryData.add("data/pure/pions/pion_pure_pt", "Transverse-momentum distribution of PID-selected pion candidates;#it{p}_{T} (GeV/#it{c});N_{#pi}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/pure/pions/pion_pure_eta", "Pseudorapidity distribution of PID-selected pion candidates;#eta;N_{#pi}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/pure/pions/pion_pure_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected pion candidates;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/pure/pions/pion_pure_dcaz", "DCA_{z} vs transverse momentum for PID-selected pion candidates;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/pure/pions/pion_pure_eta_phi", "Azimuthal angle vs pseudorapidity for PID-selected pion candidates;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + + registryData.add("data/pure/pions/pos/pion_pure_pos_tpc", "TPC n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{+} candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/pure/pions/pos/pion_pure_pos_tof", "TOF n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{+} candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/pure/pions/pos/pion_pure_pos_pt", "Transverse-momentum distribution of PID-selected #pi^{+} candidates;#it{p}_{T} (GeV/#it{c});N_{#pi^{+}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/pure/pions/pos/pion_pure_pos_eta", "Pseudorapidity distribution of PID-selected #pi^{+} candidates;#eta;N_{#pi^{+}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/pure/pions/pos/pion_pure_pos_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected #pi^{+} candidates;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/pure/pions/pos/pion_pure_pos_dcaz", "DCA_{z} vs transverse momentum for PID-selected #pi^{+} candidates;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/pure/pions/pos/pion_pure_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected #pi^{+} candidates;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + registryData.add("data/pure/pions/pos/pion_pure_pos_eta_phi", "Azimuthal angle vs pseudorapidity for PID-selected #pi^{+} candidates;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + + registryData.add("data/pure/pions/neg/pion_pure_neg_tpc", "TPC n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{-} candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/pure/pions/neg/pion_pure_neg_tof", "TOF n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{-} candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/pure/pions/neg/pion_pure_neg_pt", "Transverse-momentum distribution of PID-selected #pi^{-} candidates;#it{p}_{T} (GeV/#it{c});N_{#pi^{-}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/pure/pions/neg/pion_pure_neg_eta", "Pseudorapidity distribution of PID-selected #pi^{-} candidates;#eta;N_{#pi^{-}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/pure/pions/neg/pion_pure_neg_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected #pi^{-} candidates;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/pure/pions/neg/pion_pure_neg_dcaz", "DCA_{z} vs transverse momentum for PID-selected #pi^{-} candidates;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/pure/pions/neg/pion_pure_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected #pi^{-} candidates;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + registryData.add("data/pure/pions/neg/pion_pure_neg_eta_phi", "Azimuthal angle vs pseudorapidity for PID-selected #pi^{-} candidates;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); // Kaons - registryData.add("data/pure/kaons/kaon_pure_tpc", "TPC Kaon PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/pure/kaons/kaon_pure_tof", "TOF Kaon PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/pure/kaons/kaon_pure_pt", "Kaon pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/pure/kaons/kaon_pure_eta", "Kaon Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/pure/kaons/kaon_pure_dcaz", "Kaon DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/pure/kaons/kaon_pure_dcaxy", "Kaon DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/pure/kaons/kaon_pure_eta_phi", "Pure kaons;#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI}, {80, -0.8, 0.8}}); - - registryData.add("data/pure/kaons/pos/kaon_pure_pos_tpc", "TPC K^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/pure/kaons/pos/kaon_pure_pos_tof", "TOF K^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/pure/kaons/pos/kaon_pure_pos_pt", "K^{+} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/pure/kaons/pos/kaon_pure_pos_eta", "K^{+} Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/pure/kaons/pos/kaon_pure_pos_dcaxy", "K^{+} DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/pure/kaons/pos/kaon_pure_pos_dcaz", "K^{+} DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/pure/kaons/pos/kaon_pure_pos_phi_vs_pt", "pure K^{+};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - registryData.add("data/pure/kaons/pos/kaon_pure_pos_eta_phi", "Pure K^{+};#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); - - registryData.add("data/pure/kaons/neg/kaon_pure_neg_tpc", "TPC K^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/pure/kaons/neg/kaon_pure_neg_tof", "TOF K^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/pure/kaons/neg/kaon_pure_neg_pt", "K^{-} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/pure/kaons/neg/kaon_pure_neg_eta", "K^{-} Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/pure/kaons/neg/kaon_pure_neg_dcaxy", "K^{-} DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/pure/kaons/neg/kaon_pure_neg_dcaz", "K^{-} DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/pure/kaons/neg/kaon_pure_neg_phi_vs_pt", "pureK^{-};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - registryData.add("data/pure/kaons/neg/kaon_pure_neg_eta_phi", "Pure K^{-};#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); + registryData.add("data/pure/kaons/kaon_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for PID-selected kaon candidates;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryData.add("data/pure/kaons/kaon_tof_beta_vs_p", "TOF #beta vs momentum for PID-selected kaon candidates;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryData.add("data/pure/kaons/kaon_pure_tpc", "TPC n#sigma_{K} vs transverse momentum for PID-selected kaon candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/pure/kaons/kaon_pure_tof", "TOF n#sigma_{K} vs transverse momentum for PID-selected kaon candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/pure/kaons/kaon_pure_combined_tof_tpc", "Combined TOF+TPC n#sigma_{K} vs transverse momentum for PID-selected kaon candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{COMB}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaCOMB}); + + registryData.add("data/pure/kaons/kaon_pure_pt", "Transverse-momentum distribution of PID-selected kaon candidates;#it{p}_{T} (GeV/#it{c});N_{K}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/pure/kaons/kaon_pure_eta", "Pseudorapidity distribution of PID-selected kaon candidates;#eta;N_{K}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/pure/kaons/kaon_pure_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected kaon candidates;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/pure/kaons/kaon_pure_dcaz", "DCA_{z} vs transverse momentum for PID-selected kaon candidates;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/pure/kaons/kaon_pure_eta_phi", "Azimuthal angle vs pseudorapidity for PID-selected kaon candidates;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + + registryData.add("data/pure/kaons/pos/kaon_pure_pos_tpc", "TPC n#sigma_{K} vs transverse momentum for PID-selected K^{+} candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/pure/kaons/pos/kaon_pure_pos_tof", "TOF n#sigma_{K} vs transverse momentum for PID-selected K^{+} candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/pure/kaons/pos/kaon_pure_pos_pt", "Transverse-momentum distribution of PID-selected K^{+} candidates;#it{p}_{T} (GeV/#it{c});N_{K^{+}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/pure/kaons/pos/kaon_pure_pos_eta", "Pseudorapidity distribution of PID-selected K^{+} candidates;#eta;N_{K^{+}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/pure/kaons/pos/kaon_pure_pos_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected K^{+} candidates;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/pure/kaons/pos/kaon_pure_pos_dcaz", "DCA_{z} vs transverse momentum for PID-selected K^{+} candidates;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/pure/kaons/pos/kaon_pure_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected K^{+} candidates;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + registryData.add("data/pure/kaons/pos/kaon_pure_pos_eta_phi", "Azimuthal angle vs pseudorapidity for PID-selected K^{+} candidates;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + + registryData.add("data/pure/kaons/neg/kaon_pure_neg_tpc", "TPC n#sigma_{K} vs transverse momentum for PID-selected K^{-} candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/pure/kaons/neg/kaon_pure_neg_tof", "TOF n#sigma_{K} vs transverse momentum for PID-selected K^{-} candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/pure/kaons/neg/kaon_pure_neg_pt", "Transverse-momentum distribution of PID-selected K^{-} candidates;#it{p}_{T} (GeV/#it{c});N_{K^{-}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/pure/kaons/neg/kaon_pure_neg_eta", "Pseudorapidity distribution of PID-selected K^{-} candidates;#eta;N_{K^{-}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/pure/kaons/neg/kaon_pure_neg_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected K^{-} candidates;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/pure/kaons/neg/kaon_pure_neg_dcaz", "DCA_{z} vs transverse momentum for PID-selected K^{-} candidates;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/pure/kaons/neg/kaon_pure_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected K^{-} candidates;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + registryData.add("data/pure/kaons/neg/kaon_pure_neg_eta_phi", "Azimuthal angle vs pseudorapidity for PID-selected K^{-} candidates;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); // Protons - registryData.add("data/pure/protons/proton_pure_tpc", "TPC Proton PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/pure/protons/proton_pure_tof", "TOF Proton PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/pure/protons/proton_pure_pt", "Proton pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/pure/protons/proton_pure_eta", "Proton Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/pure/protons/proton_pure_dcaz", "Proton DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/pure/protons/proton_pure_dcaxy", "Proton DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/pure/protons/proton_pure_eta_phi", "Pure protons;#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI}, {80, -0.8, 0.8}}); - - registryData.add("data/pure/protons/pos/proton_pure_pos_tpc", "TPC p PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/pure/protons/pos/proton_pure_pos_tof", "TOF p PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/pure/protons/pos/proton_pure_pos_pt", "p pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/pure/protons/pos/proton_pure_pos_eta", "p Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/pure/protons/pos/proton_pure_pos_dcaxy", "p DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/pure/protons/pos/proton_pure_pos_dcaz", "p DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/pure/protons/pos/proton_pure_pos_phi_vs_pt", "pure p;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - registryData.add("data/pure/protons/pos/proton_pure_pos_eta_phi", "Pure p;#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); - - registryData.add("data/pure/protons/neg/proton_pure_neg_tpc", "TPC #bar{p} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/pure/protons/neg/proton_pure_neg_tof", "TOF #bar{p} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/pure/protons/neg/proton_pure_neg_pt", "#bar{p} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/pure/protons/neg/proton_pure_neg_eta", "#bar{p} Eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/pure/protons/neg/proton_pure_neg_dcaxy", "#bar{p} DCAxy", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/pure/protons/neg/proton_pure_neg_dcaz", "#bar{p} DCAz", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/pure/protons/neg/proton_pure_neg_phi_vs_pt", "pure #bar{p};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - registryData.add("data/pure/protons/neg/proton_pure_neg_eta_phi", "Pure #bar{p};#varphi;#eta", HistType::kTH2F, {{72, 0.0, TwoPI, "#varphi"}, {80, -0.8, 0.8, "#eta"}}); - - ////////////////////////////////////////////// - // COLLISIONS - ////////////////////////////////////////////// - - registryData.add("data/pure/collisions/z_vertex", "Collision vertex;z_{vtx} (cm);N_{collisions}", HistType::kTH1F, {{200, -20.0, 20.0, "z_{vtx} (cm)"}}); - registryData.add("data/pure/collisions/x_vertex", "Collision vertex;x_{vtx} (cm);N_{collisions}", HistType::kTH1F, {{200, -1.0, 1.0, "x_{vtx} (cm)"}}); - registryData.add("data/pure/collisions/y_vertex", "Collision vertex;y_{vtx} (cm);N_{collisions}", HistType::kTH1F, {{200, -1.0, 1.0, "y_{vtx} (cm)"}}); - registryData.add("data/pure/collisions/xy_vertex", "Collision vertex;x_{vtx} (cm);y_{vtx} (cm)", HistType::kTH2F, {{200, -1.0, 1.0, "x_{vtx} (cm)"}, {200, -1.0, 1.0, "y_{vtx} (cm)"}}); - - registryData.add("data/pure/collisions/n_contributors", "PV contributors;N_{contributors};N_{collisions}", HistType::kTH1I, {{201, -0.5, 200.5, "N_{contributors}"}}); - - ////////////////////////////////////////////// - // JETS - ////////////////////////////////////////////// - - registryData.add("data/jets/collision_multiplicity", "Number of Jets in Collison;Number of Jets;Number of Collisions", HistType::kTH1F, {{30, 0.0, 30.5}}); - registryData.add("data/jets/n_events", "Event counter", HistType::kTH1F, {{1, 0.5, 1.5, "N_{events}"}}); - registryData.add("data/jets/n_events_raw", "All events", HistType::kTH1F, {{1, 0.5, 1.5, ""}}); - - registryData.add("data/jets/jet_pt", "Jet pT ", HistType::kTH1F, {{100, 0.0, 20.0, "#it{p}_{T}^{raw} (GeV/#it{c})"}}); - registryData.add("data/jets/jet_pt_subtracted", "Jet pT subtracted", HistType::kTH1F, {{200, 0.0, 10.0, "#it{p}_{T}^{sub} (GeV/#it{c})"}}); - registryData.add("data/jets/jet_pt_raw_vs_sub", "Raw vs sub jet pT", HistType::kTH2F, {{200, 0, 200}, {200, 0, 200}}); - registryData.add("data/jets/jet_eta", "Jet eta", HistType::kTH1F, {{100, -1.0, 1.0, "#eta_{jet}"}}); - registryData.add("data/jets/jet_phi", "Jet phi", HistType::kTH1F, {{100, 0.0, TwoPI, "#phi_{jet}"}}); - registryData.add("data/jets/jet_area", "Jet area", HistType::kTH1F, {{100, 0.0, 1.5, "Area"}}); - registryData.add("data/jets/jet_n_constituents", "Jet multiplicity", HistType::kTH1I, {{100, 0, 30, "N_{constituents}"}}); - registryData.add("data/jets/z_vtx", "Z-Vertex Distribution", HistType::kTH1F, {{200, -20.0, 20.0, "Z-Vertex (cm)"}}); - registryData.add("data/jets/total_tracks_pure_vs_jets", "Selected tracks and tracks used in jets;Track category;N_{tracks}", HistType::kTH1F, {{2, 0.5, 2.5, "Track category"}}); - - auto hTrackTotals = registryData.get(HIST("data/jets/total_tracks_pure_vs_jets")); + registryData.add("data/pure/protons/proton_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for PID-selected proton candidates;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryData.add("data/pure/protons/proton_tof_beta_vs_p", "TOF #beta vs momentum for PID-selected proton candidates;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryData.add("data/pure/protons/proton_pure_tpc", "TPC n#sigma_{p} vs transverse momentum for PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/pure/protons/proton_pure_tof", "TOF n#sigma_{p} vs transverse momentum for PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/pure/protons/proton_pure_combined_tof_tpc", "Combined TOF+TPC n#sigma_{p} vs transverse momentum for PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{COMB}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaCOMB}); + + registryData.add("data/pure/protons/proton_pure_pt", "Transverse-momentum distribution of PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});N_{p}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/pure/protons/proton_pure_eta", "Pseudorapidity distribution of PID-selected proton candidates;#eta;N_{p}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/pure/protons/proton_pure_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/pure/protons/proton_pure_dcaz", "DCA_{z} vs transverse momentum for PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/pure/protons/proton_pure_eta_phi", "Azimuthal angle vs pseudorapidity for PID-selected proton candidates;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + + registryData.add("data/pure/protons/pos/proton_pure_pos_tpc", "TPC n#sigma_{p} vs transverse momentum for PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/pure/protons/pos/proton_pure_pos_tof", "TOF n#sigma_{p} vs transverse momentum for PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/pure/protons/pos/proton_pure_pos_pt", "Transverse-momentum distribution of PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});N_{p}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/pure/protons/pos/proton_pure_pos_eta", "Pseudorapidity distribution of PID-selected proton candidates;#eta;N_{p}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/pure/protons/pos/proton_pure_pos_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/pure/protons/pos/proton_pure_pos_dcaz", "DCA_{z} vs transverse momentum for PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/pure/protons/pos/proton_pure_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected proton candidates;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + registryData.add("data/pure/protons/pos/proton_pure_pos_eta_phi", "Azimuthal angle vs pseudorapidity for PID-selected proton candidates;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + + registryData.add("data/pure/protons/neg/proton_pure_neg_tpc", "TPC n#sigma_{p} vs transverse momentum for PID-selected antiproton candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/pure/protons/neg/proton_pure_neg_tof", "TOF n#sigma_{p} vs transverse momentum for PID-selected antiproton candidates;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/pure/protons/neg/proton_pure_neg_pt", "Transverse-momentum distribution of PID-selected antiproton candidates;#it{p}_{T} (GeV/#it{c});N_{#bar{p}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/pure/protons/neg/proton_pure_neg_eta", "Pseudorapidity distribution of PID-selected antiproton candidates;#eta;N_{#bar{p}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/pure/protons/neg/proton_pure_neg_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected antiproton candidates;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/pure/protons/neg/proton_pure_neg_dcaz", "DCA_{z} vs transverse momentum for PID-selected antiproton candidates;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/pure/protons/neg/proton_pure_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected antiproton candidates;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + registryData.add("data/pure/protons/neg/proton_pure_neg_eta_phi", "Azimuthal angle vs pseudorapidity for PID-selected antiproton candidates;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + + // --- DATA: COLLISIONS --- + registryData.add("data/pure/collisions/z_vertex", "Collision vertex;z_{vtx} (cm);N_{collisions}", HistType::kTH1F, {axis.axisZVtx}); + registryData.add("data/pure/collisions/x_vertex", "Collision vertex;x_{vtx} (cm);N_{collisions}", HistType::kTH1F, {axis.axisVtxXY}); + registryData.add("data/pure/collisions/y_vertex", "Collision vertex;y_{vtx} (cm);N_{collisions}", HistType::kTH1F, {axis.axisVtxXY}); + registryData.add("data/pure/collisions/xy_vertex", "Collision vertex;x_{vtx} (cm);y_{vtx} (cm)", HistType::kTH2F, {axis.axisVtxXY, axis.axisVtxXY}); + registryData.add("data/pure/collisions/n_contributors", "PV contributors;N_{contributors};N_{collisions}", HistType::kTH1I, {axis.axisEventMultiplicity}); + + // --- DATA: JETS GENERAL --- + registryData.add("data/jets/general/n_events", "Event counter", HistType::kTH1F, {axis.axisEventCounter}); + registryData.add("data/jets/general/n_events_raw", "All events", HistType::kTH1F, {axis.axisEventCounter}); + registryData.add("data/jets/general/collision_multiplicity", "Number of Jets in Collison;Number of Jets;Number of Collisions", HistType::kTH1F, {axis.axisMultiplicity}); + registryData.add("data/jets/general/z_vtx", "Z-Vertex Distribution", HistType::kTH1F, {axis.axisZVtx}); + + registryData.add("data/jets/general/jet_pt", "Jet #it{p}_{T};#it{p}_{T}^{jet} (GeV/#it{c});N_{jets}", HistType::kTH1F, {axis.axisJetPt}); + registryData.add("data/jets/general/jet_pt_subtracted", "Jet #it{p}_{T} subtracted;#it{p}_{T}^{sub} (GeV/#it{c});N_{jets}", HistType::kTH1F, {axis.axisJetSubPt}); + registryData.add("data/jets/general/jet_pt_raw_vs_sub", "Raw vs sub jet #it{p}_{T};#it{p}_{T}^{jet} (GeV/#it{c});#it{p}_{T}^{sub} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisJetSubPt}); + registryData.add("data/jets/general/jet_eta", "Jet #eta;#eta_{jet};N_{jets}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/jets/general/jet_phi", "Jet #varphi;#varphi_{jet};N_{jets}", HistType::kTH1F, {axis.axisPhi}); + registryData.add("data/jets/general/jet_area", "Jet area;A_{jet};N_{jets}", HistType::kTH1F, {axis.axisJetArea}); + registryData.add("data/jets/general/jet_n_constituents", "Jet multiplicity;N_{constituents};N_{jets}", HistType::kTH1I, {axis.axisJetNConst}); + registryData.add("data/jets/general/jet_n_selected_constituents", "Jet multiplicity of selected tracks;N_{constituents}^{selected};N_{jets}", HistType::kTH1I, {axis.axisJetNConst}); + + registryData.add("data/jets/general/tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for tracks in selected jets;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryData.add("data/jets/general/tof_beta_vs_p", "TOF #beta vs momentum for tracks in selected jets;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryData.add("data/jets/general/total_tracks_pure_vs_jets", "Selected tracks and tracks used in jets;Track category;N_{tracks}", HistType::kTH1F, {axis.axisTrackCategory}); + + auto hTrackTotals = registryData.get(HIST("data/jets/general/total_tracks_pure_vs_jets")); hTrackTotals->GetXaxis()->SetBinLabel(1, "Pure tracks"); hTrackTotals->GetXaxis()->SetBinLabel(2, "Tracks in jets"); - registryData.add("data/jets/after_pid/pion_tof_beta_vs_p", - "TOF #beta after pion PID, tracks in jets;" - "#it{p} (GeV/#it{c});#beta_{TOF}", - HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); - registryData.add("data/jets/after_pid/kaon_tof_beta_vs_p", - "TOF #beta after kaon PID, tracks in jets;" - "#it{p} (GeV/#it{c});#beta_{TOF}", - HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); - registryData.add("data/jets/after_pid/proton_tof_beta_vs_p", - "TOF #beta after proton PID, tracks in jets;" - "#it{p} (GeV/#it{c});#beta_{TOF}", - HistType::kTH2F, {axisMomentumTOF, axisTOFBeta}); + // --- DATA: JET CONE --- + registryData.add("data/jets/cone/all_tracks_2d", "Track distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet}", HistType::kTH2F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); - // Jet Cone + // Pions + registryData.add("data/jets/cone/pions/pion_pos_2d", "PID-selected #pi^{+} distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet}", HistType::kTH2F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryData.add("data/jets/cone/pions/pion_neg_2d", "PID-selected #pi^{-} distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet}", HistType::kTH2F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + + // Kaons + registryData.add("data/jets/cone/kaons/kaon_pos_2d", "PID-selected K^{+} distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet}", HistType::kTH2F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryData.add("data/jets/cone/kaons/kaon_neg_2d", "PID-selected K^{-} distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet}", HistType::kTH2F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); - AxisSpec axisDeltaEtaCone{80, -rJet, rJet, "#Delta#eta = #eta_{track} - #eta_{jet}"}; - AxisSpec axisDeltaPhiCone{80, -rJet, rJet, "#Delta#varphi = #varphi_{track} - #varphi_{jet}"}; - AxisSpec axisPtTrackCone{100, 0.0, 10.0, "#it{p}_{T}^{track} (GeV/#it{c})"}; - - registryData.add("data/jets/cone/all_tracks_2d", "All tracks in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); - registryData.add("data/jets/cone/pions/pion_pos_2d", "#pi^{+} in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); - registryData.add("data/jets/cone/pions/pion_neg_2d", "#pi^{-} in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); - registryData.add("data/jets/cone/kaons/kaon_pos_2d", "K^{+} in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); - registryData.add("data/jets/cone/kaons/kaon_neg_2d", "K^{-} in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); - registryData.add("data/jets/cone/protons/proton_2d", "p in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); - registryData.add("data/jets/cone/protons/antiproton_2d", "#bar{p} in jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axisDeltaEtaCone, axisDeltaPhiCone}); - - registryData.add("data/jets/cone/all_tracks", "All tracks in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); - registryData.add("data/jets/cone/pions/pion_pos", "#pi^{+} in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); - registryData.add("data/jets/cone/pions/pion_neg", "#pi^{-} in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); - registryData.add("data/jets/cone/kaons/kaon_pos", "K^{+} in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); - registryData.add("data/jets/cone/kaons/kaon_neg", "K^{-} in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); - registryData.add("data/jets/cone/protons/proton", "p in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); - registryData.add("data/jets/cone/protons/antiproton", "#bar{p} in jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axisDeltaEtaCone, axisDeltaPhiCone, axisPtTrackCone}); - - AxisSpec axisMultiplicity{31, -0.5, 30.5, "N per jet"}; - - registryData.add("data/jets/pions/pos/n_pions_per_jet", "#pi^{+} per jet;N_{#pi^{+}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); - registryData.add("data/jets/kaons/pos/n_kaons_per_jet", "K^{+} per jet;N_{K^{+}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); - registryData.add("data/jets/protons/pos/n_protons_per_jet", "p per jet;N_{p+#bar{p}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); - - registryData.add("data/jets/pions/neg/n_pions_per_jet", "#pi^{-} per jet;N_{#pi^{-}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); - registryData.add("data/jets/kaons/neg/n_kaons_per_jet", "K^{-} per jet;N_{K^{-}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); - registryData.add("data/jets/protons/neg/n_protons_per_jet", "#bar{p} per jet;N_{p+#bar{p}};N_{jets}", HistType::kTH1I, {axisMultiplicity}); - registryData.add("data/jets/composition/particle_multiplicity_per_jet", "Particle composition per jet;Particle species;N per jet", HistType::kTH2I, {{3, 0.5, 3.5, "Particle species"}, {31, -0.5, 30.5, "N per jet"}}); - AxisSpec axisNPions{21, -0.5, 20.5, "N_{#pi} per jet"}; - AxisSpec axisNKaons{11, -0.5, 10.5, "N_{K} per jet"}; - AxisSpec axisNProtons{11, -0.5, 10.5, "N_{p} per jet"}; - - registryData.add("data/jets/composition/nKaons_vs_nProtons", "Particle multiplicity correlation;N_{K};N_{p};N_{jets}", HistType::kTH2F, {axisNKaons, axisNProtons}); - registryData.add("data/jets/composition/nPions_vs_nKaons", "Particle multiplicity correlation;N_{#pi};N_{K};N_{jets}", HistType::kTH2F, {axisNPions, axisNKaons}); - registryData.add("data/jets/composition/nPions_vs_nProtons", "Particle multiplicity correlation;N_{#pi};N_{p};N_{jets}", HistType::kTH2F, {axisNPions, axisNProtons}); - registryData.add("data/jets/composition/nPions_nKaons_nProtons", "Jet particle composition;N_{#pi};N_{K};N_{p}", HistType::kTH3F, {axisNPions, axisNKaons, axisNProtons}); - - registryData.add("data/jets/composition/nKaons_vs_nPions_1proton", "Kaons vs pions in jets with exactly 1 p/#bar{p};N_{K};N_{#pi};N_{jets}", HistType::kTH2I, {axisNKaons, axisNPions}); - registryData.add("data/jets/composition/nKaons_vs_nPions_2protons", "Kaons vs pions in jets with exactly 2 p/#bar{p};N_{K};N_{#pi};N_{jets}", HistType::kTH2I, {axisNKaons, axisNPions}); - registryData.add("data/jets/composition/nKaons_vs_nPions_3protons", "Kaons vs pions in jets with exactly 3 p/#bar{p};N_{K};N_{#pi};N_{jets}", HistType::kTH2I, {axisNKaons, axisNPions}); - registryData.add("data/jets/composition/nKaons_vs_nPions_4protons", "Kaons vs pions in jets with exactly 4 p/#bar{p};N_{K};N_{#pi};N_{jets}", HistType::kTH2I, {axisNKaons, axisNPions}); + // Protons + registryData.add("data/jets/cone/protons/proton_pos_2d", "PID-selected p distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet}", HistType::kTH2F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryData.add("data/jets/cone/protons/proton_neg_2d", "PID-selected #bar{p} distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet}", HistType::kTH2F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + + // 3D Distributions + registryData.add("data/jets/cone/all_tracks", "Track distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet};#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryData.add("data/jets/cone/pions/pion_pos", "PID-selected #pi^{+} distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet};#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryData.add("data/jets/cone/pions/pion_neg", "PID-selected #pi^{-} distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet};#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryData.add("data/jets/cone/kaons/kaon_pos", "PID-selected K^{+} distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet};#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryData.add("data/jets/cone/kaons/kaon_neg", "PID-selected K^{-} distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet};#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryData.add("data/jets/cone/protons/proton_pos", "PID-selected p distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet};#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryData.add("data/jets/cone/protons/proton_neg", "PID-selected #bar{p} distribution inside selected jet cones;#Delta#eta_{track,jet};#Delta#varphi_{track,jet};#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + + // --- DATA: JET COMPOSITION --- + + // Pions + registryData.add("data/jets/pions/n_pions_per_jet", "Multiplicity of PID-selected #pi^{#pm} in selected jets;N_{#pi};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryData.add("data/jets/pions/n_pions_vs_jet_pt", "Multiplicity of PID-selected #pi^{#pm} vs jet #it{p}_{T};#it{p}_{T}^{jet} (GeV/#it{c});N_{#pi}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryData.add("data/jets/pions/pion_pt_vs_jet_pt", "PID-selected #pi^{#pm} #it{p}_{T} vs jet #it{p}_{T};#it{p}_{T}^{jet} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryData.add("data/jets/pions/pos/n_pions_per_jet", "Multiplicity of PID-selected #pi^{+} in selected jets;N_{#pi^{+}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryData.add("data/jets/pions/neg/n_pions_per_jet", "Multiplicity of PID-selected #pi^{-} in selected jets;N_{#pi^{-}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + + registryData.add("data/jets/pions/pion_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for PID-selected pion candidates in jets;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryData.add("data/jets/pions/pion_tof_beta_vs_p", "TOF #beta vs momentum for PID-selected pion candidates in jets;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryData.add("data/jets/pions/pion_jet_tpc", "TPC n#sigma_{#pi} vs transverse momentum for PID-selected #pi candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/jets/pions/pion_jet_tof", "TOF n#sigma_{#pi} vs transverse momentum for PID-selected #pi candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + + registryData.add("data/jets/pions/pos/pion_jet_pos_tpc", "TPC n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/jets/pions/pos/pion_jet_pos_tof", "TOF n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/jets/pions/pos/pion_jet_pos_pt", "Transverse-momentum distribution of PID-selected #pi^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});N_{#pi^{+}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/jets/pions/pos/pion_jet_pos_eta", "Pseudorapidity distribution of PID-selected #pi^{+} candidates in jets;#eta;N_{#pi^{+}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/jets/pions/pos/pion_jet_pos_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected #pi^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/jets/pions/pos/pion_jet_pos_dcaz", "DCA_{z} vs transverse momentum for PID-selected #pi^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/jets/pions/pos/pion_jet_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected #pi^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + registryData.add("data/jets/pions/neg/pion_jet_neg_tpc", "TPC n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/jets/pions/neg/pion_jet_neg_tof", "TOF n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/jets/pions/neg/pion_jet_neg_pt", "Transverse-momentum distribution of PID-selected #pi^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});N_{#pi^{-}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/jets/pions/neg/pion_jet_neg_eta", "Pseudorapidity distribution of PID-selected #pi^{-} candidates in jets;#eta;N_{#pi^{-}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/jets/pions/neg/pion_jet_neg_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected #pi^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/jets/pions/neg/pion_jet_neg_dcaz", "DCA_{z} vs transverse momentum for PID-selected #pi^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/jets/pions/neg/pion_jet_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected #pi^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + // Kaons + registryData.add("data/jets/kaons/n_kaons_per_jet", "Multiplicity of PID-selected K^{#pm} in selected jets;N_{K};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryData.add("data/jets/kaons/n_kaons_vs_jet_pt", "Multiplicity of PID-selected K^{#pm} vs jet #it{p}_{T};#it{p}_{T}^{jet} (GeV/#it{c});N_{K}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryData.add("data/jets/kaons/kaon_pt_vs_jet_pt", "PID-selected K^{#pm} #it{p}_{T} vs jet #it{p}_{T};#it{p}_{T}^{jet} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryData.add("data/jets/kaons/pos/n_kaons_per_jet", "Multiplicity of PID-selected K^{+} in selected jets;N_{K^{+}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryData.add("data/jets/kaons/neg/n_kaons_per_jet", "Multiplicity of PID-selected K^{-} in selected jets;N_{K^{-}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + + registryData.add("data/jets/kaons/kaon_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for PID-selected kaon candidates in jets;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryData.add("data/jets/kaons/kaon_tof_beta_vs_p", "TOF #beta vs momentum for PID-selected kaon candidates in jets;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryData.add("data/jets/kaons/kaon_jet_tpc", "TPC n#sigma_{K} vs transverse momentum for PID-selected K candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/jets/kaons/kaon_jet_tof", "TOF n#sigma_{K} vs transverse momentum for PID-selected K candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + + registryData.add("data/jets/kaons/pos/kaon_jet_pos_tpc", "TPC n#sigma_{K} vs transverse momentum for PID-selected K^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/jets/kaons/pos/kaon_jet_pos_tof", "TOF n#sigma_{K} vs transverse momentum for PID-selected K^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/jets/kaons/pos/kaon_jet_pos_pt", "Transverse-momentum distribution of PID-selected K^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});N_{K^{+}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/jets/kaons/pos/kaon_jet_pos_eta", "Pseudorapidity distribution of PID-selected K^{+} candidates in jets;#eta;N_{K^{+}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/jets/kaons/pos/kaon_jet_pos_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected K^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/jets/kaons/pos/kaon_jet_pos_dcaz", "DCA_{z} vs transverse momentum for PID-selected K^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/jets/kaons/pos/kaon_jet_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected K^{+} candidates in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + registryData.add("data/jets/kaons/neg/kaon_jet_neg_tpc", "TPC n#sigma_{K} vs transverse momentum for PID-selected K^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/jets/kaons/neg/kaon_jet_neg_tof", "TOF n#sigma_{K} vs transverse momentum for PID-selected K^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/jets/kaons/neg/kaon_jet_neg_pt", "Transverse-momentum distribution of PID-selected K^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});N_{K^{-}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/jets/kaons/neg/kaon_jet_neg_eta", "Pseudorapidity distribution of PID-selected K^{-} candidates in jets;#eta;N_{K^{-}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/jets/kaons/neg/kaon_jet_neg_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected K^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/jets/kaons/neg/kaon_jet_neg_dcaz", "DCA_{z} vs transverse momentum for PID-selected K^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/jets/kaons/neg/kaon_jet_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected K^{-} candidates in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + // Protons + registryData.add("data/jets/protons/n_protons_per_jet", "Multiplicity of PID-selected p+#bar{p} in selected jets;N_{p+#bar{p}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryData.add("data/jets/protons/n_protons_vs_jet_pt", "Multiplicity of PID-selected p+#bar{p} vs jet #it{p}_{T};#it{p}_{T}^{jet} (GeV/#it{c});N_{p+#bar{p}}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryData.add("data/jets/protons/proton_pt_vs_jet_pt", "PID-selected p+#bar{p} #it{p}_{T} vs jet #it{p}_{T};#it{p}_{T}^{jet} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryData.add("data/jets/protons/pos/n_protons_per_jet", "Multiplicity of PID-selected p in selected jets;N_{p};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryData.add("data/jets/protons/neg/n_protons_per_jet", "Multiplicity of PID-selected #bar{p} in selected jets;N_{#bar{p}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + + registryData.add("data/jets/protons/proton_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for PID-selected proton candidates in jets;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryData.add("data/jets/protons/proton_tof_beta_vs_p", "TOF #beta vs momentum for PID-selected proton candidates in jets;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryData.add("data/jets/protons/proton_jet_tpc", "TPC n#sigma_{p} vs transverse momentum for PID-selected p+#bar{p} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/jets/protons/proton_jet_tof", "TOF n#sigma_{p} vs transverse momentum for PID-selected p+#bar{p} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + + registryData.add("data/jets/protons/pos/proton_jet_pos_tpc", "TPC n#sigma_{p} vs transverse momentum for PID-selected p candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/jets/protons/pos/proton_jet_pos_tof", "TOF n#sigma_{p} vs transverse momentum for PID-selected p candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/jets/protons/pos/proton_jet_pos_pt", "Transverse-momentum distribution of PID-selected p candidates in jets;#it{p}_{T} (GeV/#it{c});N_{p}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/jets/protons/pos/proton_jet_pos_eta", "Pseudorapidity distribution of PID-selected p candidates in jets;#eta;N_{p}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/jets/protons/pos/proton_jet_pos_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected p candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/jets/protons/pos/proton_jet_pos_dcaz", "DCA_{z} vs transverse momentum for PID-selected p candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/jets/protons/pos/proton_jet_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected p candidates in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + registryData.add("data/jets/protons/neg/proton_jet_neg_tpc", "TPC n#sigma_{p} vs transverse momentum for PID-selected #bar{p} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/jets/protons/neg/proton_jet_neg_tof", "TOF n#sigma_{p} vs transverse momentum for PID-selected #bar{p} candidates in jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/jets/protons/neg/proton_jet_neg_pt", "Transverse-momentum distribution of PID-selected #bar{p} candidates in jets;#it{p}_{T} (GeV/#it{c});N_{#bar{p}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/jets/protons/neg/proton_jet_neg_eta", "Pseudorapidity distribution of PID-selected #bar{p} candidates in jets;#eta;N_{#bar{p}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/jets/protons/neg/proton_jet_neg_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected #bar{p} candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/jets/protons/neg/proton_jet_neg_dcaz", "DCA_{z} vs transverse momentum for PID-selected #bar{p} candidates in jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryData.add("data/jets/protons/neg/proton_jet_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for PID-selected #bar{p} candidates in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + registryData.add("data/jets/composition/particle_multiplicity_per_jet", "Identified-particle multiplicity in selected jets;Particle species;N_{particles} per jet", HistType::kTH2I, {axis.axisParticleSpecies, axis.axisMultiplicity}); auto hComposition = registryData.get(HIST("data/jets/composition/particle_multiplicity_per_jet")); hComposition->GetXaxis()->SetBinLabel(1, "#pi"); @@ -386,226 +435,512 @@ struct JetHadronsPid { hComposition->SetOption("COLZ"); hComposition->SetStats(false); + // --- DATA: UNDERLYING EVENT (UE) --- + + // Pions + registryData.add("data/ue/pions/pion_ue_tpc", "TPC n#sigma_{#pi} vs transverse momentum for PID-selected pion candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/ue/pions/pion_ue_tof", "TOF n#sigma_{#pi} vs transverse momentum for PID-selected pion candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/ue/pions/pion_ue_pt", "Transverse-momentum distribution of PID-selected pion candidates in UE;#it{p}_{T} (GeV/#it{c});N_{#pi}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/ue/pions/pion_ue_eta", "Pseudorapidity distribution of PID-selected pion candidates in UE;#eta;N_{#pi}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/ue/pions/pion_ue_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected pion candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/ue/pions/pion_ue_dcaz", "DCA_{z} vs transverse momentum for PID-selected pion candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + registryData.add("data/ue/pions/pos/pion_ue_pos_tpc", "TPC n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{+} candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/ue/pions/pos/pion_ue_pos_tof", "TOF n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{+} candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/ue/pions/pos/pion_ue_pos_pt", "Transverse-momentum distribution of PID-selected #pi^{+} candidates in UE;#it{p}_{T} (GeV/#it{c});N_{#pi^{+}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/ue/pions/pos/pion_ue_pos_eta", "Pseudorapidity distribution of PID-selected #pi^{+} candidates in UE;#eta;N_{#pi^{+}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/ue/pions/pos/pion_ue_pos_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected #pi^{+} candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/ue/pions/pos/pion_ue_pos_dcaz", "DCA_{z} vs transverse momentum for PID-selected #pi^{+} candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + registryData.add("data/ue/pions/neg/pion_ue_neg_tpc", "TPC n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{-} candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/ue/pions/neg/pion_ue_neg_tof", "TOF n#sigma_{#pi} vs transverse momentum for PID-selected #pi^{-} candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/ue/pions/neg/pion_ue_neg_pt", "Transverse-momentum distribution of PID-selected #pi^{-} candidates in UE;#it{p}_{T} (GeV/#it{c});N_{#pi^{-}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/ue/pions/neg/pion_ue_neg_eta", "Pseudorapidity distribution of PID-selected #pi^{-} candidates in UE;#eta;N_{#pi^{-}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/ue/pions/neg/pion_ue_neg_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected #pi^{-} candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/ue/pions/neg/pion_ue_neg_dcaz", "DCA_{z} vs transverse momentum for PID-selected #pi^{-} candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + // Kaons + registryData.add("data/ue/kaons/kaon_ue_tpc", "TPC n#sigma_{K} vs transverse momentum for PID-selected kaon candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/ue/kaons/kaon_ue_tof", "TOF n#sigma_{K} vs transverse momentum for PID-selected kaon candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/ue/kaons/kaon_ue_pt", "Transverse-momentum distribution of PID-selected kaon candidates in UE;#it{p}_{T} (GeV/#it{c});N_{K}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/ue/kaons/kaon_ue_eta", "Pseudorapidity distribution of PID-selected kaon candidates in UE;#eta;N_{K}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/ue/kaons/kaon_ue_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected kaon candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/ue/kaons/kaon_ue_dcaz", "DCA_{z} vs transverse momentum for PID-selected kaon candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + registryData.add("data/ue/kaons/pos/kaon_ue_pos_tpc", "TPC n#sigma_{K} vs transverse momentum for PID-selected K^{+} candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/ue/kaons/pos/kaon_ue_pos_tof", "TOF n#sigma_{K} vs transverse momentum for PID-selected K^{+} candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/ue/kaons/pos/kaon_ue_pos_pt", "Transverse-momentum distribution of PID-selected K^{+} candidates in UE;#it{p}_{T} (GeV/#it{c});N_{K^{+}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/ue/kaons/pos/kaon_ue_pos_eta", "Pseudorapidity distribution of PID-selected K^{+} candidates in UE;#eta;N_{K^{+}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/ue/kaons/pos/kaon_ue_pos_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected K^{+} candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/ue/kaons/pos/kaon_ue_pos_dcaz", "DCA_{z} vs transverse momentum for PID-selected K^{+} candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + registryData.add("data/ue/kaons/neg/kaon_ue_neg_tpc", "TPC n#sigma_{K} vs transverse momentum for PID-selected K^{-} candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/ue/kaons/neg/kaon_ue_neg_tof", "TOF n#sigma_{K} vs transverse momentum for PID-selected K^{-} candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/ue/kaons/neg/kaon_ue_neg_pt", "Transverse-momentum distribution of PID-selected K^{-} candidates in UE;#it{p}_{T} (GeV/#it{c});N_{K^{-}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/ue/kaons/neg/kaon_ue_neg_eta", "Pseudorapidity distribution of PID-selected K^{-} candidates in UE;#eta;N_{K^{-}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/ue/kaons/neg/kaon_ue_neg_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected K^{-} candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/ue/kaons/neg/kaon_ue_neg_dcaz", "DCA_{z} vs transverse momentum for PID-selected K^{-} candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + // Protons + registryData.add("data/ue/protons/proton_ue_tpc", "TPC n#sigma_{p} vs transverse momentum for PID-selected proton candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/ue/protons/proton_ue_tof", "TOF n#sigma_{p} vs transverse momentum for PID-selected proton candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/ue/protons/proton_ue_pt", "Transverse-momentum distribution of PID-selected proton candidates in UE;#it{p}_{T} (GeV/#it{c});N_{p}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/ue/protons/proton_ue_eta", "Pseudorapidity distribution of PID-selected proton candidates in UE;#eta;N_{p}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/ue/protons/proton_ue_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected proton candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/ue/protons/proton_ue_dcaz", "DCA_{z} vs transverse momentum for PID-selected proton candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + registryData.add("data/ue/protons/pos/proton_ue_pos_tpc", "TPC n#sigma_{p} vs transverse momentum for PID-selected p candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/ue/protons/pos/proton_ue_pos_tof", "TOF n#sigma_{p} vs transverse momentum for PID-selected p candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/ue/protons/pos/proton_ue_pos_pt", "Transverse-momentum distribution of PID-selected p candidates in UE;#it{p}_{T} (GeV/#it{c});N_{p}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/ue/protons/pos/proton_ue_pos_eta", "Pseudorapidity distribution of PID-selected p candidates in UE;#eta;N_{p}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/ue/protons/pos/proton_ue_pos_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected p candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/ue/protons/pos/proton_ue_pos_dcaz", "DCA_{z} vs transverse momentum for PID-selected p candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + registryData.add("data/ue/protons/neg/proton_ue_neg_tpc", "TPC n#sigma_{p} vs transverse momentum for PID-selected #bar{p} candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryData.add("data/ue/protons/neg/proton_ue_neg_tof", "TOF n#sigma_{p} vs transverse momentum for PID-selected #bar{p} candidates in UE;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryData.add("data/ue/protons/neg/proton_ue_neg_pt", "Transverse-momentum distribution of PID-selected #bar{p} candidates in UE;#it{p}_{T} (GeV/#it{c});N_{#bar{p}}", HistType::kTH1F, {axis.axisPt}); + registryData.add("data/ue/protons/neg/proton_ue_neg_eta", "Pseudorapidity distribution of PID-selected #bar{p} candidates in UE;#eta;N_{#bar{p}}", HistType::kTH1F, {axis.axisEta}); + registryData.add("data/ue/protons/neg/proton_ue_neg_dcaxy", "DCA_{xy} vs transverse momentum for PID-selected #bar{p} candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryData.add("data/ue/protons/neg/proton_ue_neg_dcaz", "DCA_{z} vs transverse momentum for PID-selected #bar{p} candidates in UE;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + registryData.add("data/ue/general/tracks_n_in_ue", "Number of tracks in UE;N_{tracks};Counts", HistType::kTH1I, {{100, 0, 100, "N_{tracks}"}}); + + // ========================================================================= + // --- MC REGISTRY --- + // ========================================================================= + + // --- MC: TRUTH --- + + registryMC.add("mc/truth/general/n_events", "Selected particle-level events;Event counter;N_{events}", HistType::kTH1I, {axis.axisEventCounter}); + registryMC.add("mc/truth/general/z_vtx", "Particle-level Z-vertex distribution;z_{vtx} (cm);N_{events}", HistType::kTH1F, {axis.axisZVtx}); + + // Pions + registryMC.add("mc/truth/pions/mc_gen_pion_pt", "Transverse-momentum distribution of generated primary #pi^{#pm};#it{p}_{T} (GeV/#it{c});N_{#pi}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/truth/pions/pos/mc_gen_pion_pos_pt", "Transverse-momentum distribution of generated primary #pi^{+};#it{p}_{T} (GeV/#it{c});N_{#pi^{+}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/truth/pions/neg/mc_gen_pion_neg_pt", "Transverse-momentum distribution of generated primary #pi^{-};#it{p}_{T} (GeV/#it{c});N_{#pi^{-}}", HistType::kTH1F, {axis.axisPt}); + + // Kaons + registryMC.add("mc/truth/kaons/mc_gen_kaon_pt", "Transverse-momentum distribution of generated primary K^{#pm};#it{p}_{T} (GeV/#it{c});N_{K}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/truth/kaons/pos/mc_gen_kaon_pos_pt", "Transverse-momentum distribution of generated primary K^{+};#it{p}_{T} (GeV/#it{c});N_{K^{+}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/truth/kaons/neg/mc_gen_kaon_neg_pt", "Transverse-momentum distribution of generated primary K^{-};#it{p}_{T} (GeV/#it{c});N_{K^{-}}", HistType::kTH1F, {axis.axisPt}); + + // Protons + registryMC.add("mc/truth/protons/mc_gen_proton_pt", "Transverse-momentum distribution of generated primary p+#bar{p};#it{p}_{T} (GeV/#it{c});N_{p+#bar{p}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/truth/protons/pos/mc_gen_proton_pos_pt", "Transverse-momentum distribution of generated primary p;#it{p}_{T} (GeV/#it{c});N_{p}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/truth/protons/neg/mc_gen_proton_neg_pt", "Transverse-momentum distribution of generated primary #bar{p};#it{p}_{T} (GeV/#it{c});N_{#bar{p}}", HistType::kTH1F, {axis.axisPt}); + + // Hadrons + registryMC.add("mc/truth/hadrons/mc_gen_hadron_pt", "Transverse-momentum distribution of generated primary hadrons;#it{p}_{T} (GeV/#it{c});N_{hadrons}", HistType::kTH1F, {axis.axisPt}); + + // --- MC: MATCHED RECONSTRUCTION --- + registryMC.add("mc/matched/general/n_events", "Event counter;Selection;N_{events}", HistType::kTH1F, {axis.axisEventCounter}); + registryMC.add("mc/matched/general/z_vertex", "Collision vertex;z_{vtx} (cm);N_{collisions}", HistType::kTH1F, {axis.axisZVtx}); + registryMC.add("mc/matched/general/x_vertex", "Collision vertex;x_{vtx} (cm);N_{collisions}", HistType::kTH1F, {axis.axisVtxXY}); + registryMC.add("mc/matched/general/y_vertex", "Collision vertex;y_{vtx} (cm);N_{collisions}", HistType::kTH1F, {axis.axisVtxXY}); + registryMC.add("mc/matched/general/xy_vertex", "Collision vertex;x_{vtx} (cm);y_{vtx} (cm)", HistType::kTH2F, {axis.axisVtxXY, axis.axisVtxXY}); + registryMC.add("mc/matched/general/n_contributors", "PV contributors;N_{contributors};N_{collisions}", HistType::kTH1I, {axis.axisEventMultiplicity}); + + // General Hadrons + registryMC.add("mc/matched/reconstruction/hadrons/rec_hadron_all", "All reconstructed hadrons;#it{p}_{T} (GeV/#it{c});N_{tracks}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/hadrons/rec_hadron_tof_match", "TOF-matched reconstructed hadrons;#it{p}_{T} (GeV/#it{c});N_{tracks}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/hadrons/mc_rec_hadron_pt", "True primary reconstructed hadrons;#it{p}_{T} (GeV/#it{c});N_{tracks}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/hadrons/mc_sec_hadron_pt", "Secondary/fake reconstructed hadrons;#it{p}_{T} (GeV/#it{c});N_{tracks}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/general/tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for reconstructed tracks;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryMC.add("mc/matched/reconstruction/general/tof_beta_vs_p", "TOF #beta vs momentum for reconstructed tracks;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + + // Pions + registryMC.add("mc/matched/reconstruction/pions/rec_pion_all", "All PID #pi;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/contamination_matrix_pion", "PID #pi contamination matrix;PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/mc_rec_pion_pt", "True primary #pi;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/mc_sec_pion_pt", "Secondary/fake #pi;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/pion_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for reconstructed #pi;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryMC.add("mc/matched/reconstruction/pions/pion_tof_beta_vs_p", "TOF #beta vs momentum for reconstructed #pi;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryMC.add("mc/matched/reconstruction/pions/rec_pion_eta", "Pseudorapidity distribution of reconstructed #pi;#eta;N", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/matched/reconstruction/pions/rec_pion_eta_phi", "Azimuthal angle vs pseudorapidity for reconstructed #pi;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + registryMC.add("mc/matched/reconstruction/pions/rec_pion_dcaxy", "DCA_{xy} vs transverse momentum for reconstructed #pi;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/matched/reconstruction/pions/rec_pion_dcaz", "DCA_{z} vs transverse momentum for reconstructed #pi;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + registryMC.add("mc/matched/reconstruction/pions/pos/rec_pion_pos_all", "All PID #pi^{+};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/pos/contamination_matrix_pion_pos", "PID #pi^{+} contamination matrix;PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/pos/rec_pion_pos_tpc", "TPC n#sigma_{#pi} vs transverse momentum for reconstructed #pi^{+};#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/matched/reconstruction/pions/pos/rec_pion_pos_tof", "TOF n#sigma_{#pi} vs transverse momentum for reconstructed #pi^{+};#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/matched/reconstruction/pions/pos/rec_pion_pos_tof_matched", "TOF-matched reconstructed #pi^{+};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/pos/mc_rec_pion_pos_pt", "True primary #pi^{+};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/pos/mc_sec_pion_pos_pt", "Secondary/fake #pi^{+};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/pos/rec_pion_pos_eta", "Pseudorapidity distribution of reconstructed #pi^{+};#eta;N", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/matched/reconstruction/pions/pos/rec_pion_pos_eta_phi", "Azimuthal angle vs pseudorapidity for reconstructed #pi^{+};#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + registryMC.add("mc/matched/reconstruction/pions/pos/rec_pion_pos_dcaxy", "DCA_{xy} vs transverse momentum for reconstructed #pi^{+};#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/matched/reconstruction/pions/pos/rec_pion_pos_dcaz", "DCA_{z} vs transverse momentum for reconstructed #pi^{+};#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/matched/reconstruction/pions/pos/rec_pion_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for reconstructed #pi^{+};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + registryMC.add("mc/matched/reconstruction/pions/neg/rec_pion_neg_all", "All PID #pi^{-};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/neg/contamination_matrix_pion_neg", "PID #pi^{-} contamination matrix;PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/neg/rec_pion_neg_tpc", "TPC n#sigma_{#pi} vs transverse momentum for reconstructed #pi^{-};#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/matched/reconstruction/pions/neg/rec_pion_neg_tof", "TOF n#sigma_{#pi} vs transverse momentum for reconstructed #pi^{-};#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/matched/reconstruction/pions/neg/rec_pion_neg_tof_matched", "TOF-matched reconstructed #pi^{-};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/neg/mc_rec_pion_neg_pt", "True primary #pi^{-};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/neg/mc_sec_pion_neg_pt", "Secondary/fake #pi^{-};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/pions/neg/rec_pion_neg_eta", "Pseudorapidity distribution of reconstructed #pi^{-};#eta;N", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/matched/reconstruction/pions/neg/rec_pion_neg_eta_phi", "Azimuthal angle vs pseudorapidity for reconstructed #pi^{-};#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + registryMC.add("mc/matched/reconstruction/pions/neg/rec_pion_neg_dcaxy", "DCA_{xy} vs transverse momentum for reconstructed #pi^{-};#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/matched/reconstruction/pions/neg/rec_pion_neg_dcaz", "DCA_{z} vs transverse momentum for reconstructed #pi^{-};#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/matched/reconstruction/pions/neg/rec_pion_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for reconstructed #pi^{-};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + // Kaons + registryMC.add("mc/matched/reconstruction/kaons/rec_kaon_all", "All PID K;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/contamination_matrix_kaon", "PID K contamination matrix;PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/mc_rec_kaon_pt", "True primary K;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/mc_sec_kaon_pt", "Secondary/fake K;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/kaon_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for reconstructed K;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryMC.add("mc/matched/reconstruction/kaons/kaon_tof_beta_vs_p", "TOF #beta vs momentum for reconstructed K;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryMC.add("mc/matched/reconstruction/kaons/rec_kaon_eta", "Pseudorapidity distribution of reconstructed K;#eta;N", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/matched/reconstruction/kaons/rec_kaon_eta_phi", "Azimuthal angle vs pseudorapidity for reconstructed K;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + registryMC.add("mc/matched/reconstruction/kaons/rec_kaon_dcaxy", "DCA_{xy} vs transverse momentum for reconstructed K;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/matched/reconstruction/kaons/rec_kaon_dcaz", "DCA_{z} vs transverse momentum for reconstructed K;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + registryMC.add("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_all", "All PID K^{+};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/pos/contamination_matrix_kaon_pos", "PID K^{+} contamination matrix;PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_tpc", "TPC n#sigma_{K} vs transverse momentum for reconstructed K^{+};#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_tof", "TOF n#sigma_{K} vs transverse momentum for reconstructed K^{+};#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_tof_matched", "TOF-matched reconstructed K^{+};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/pos/mc_rec_kaon_pos_pt", "True primary K^{+};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/pos/mc_sec_kaon_pos_pt", "Secondary/fake K^{+};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_eta", "Pseudorapidity distribution of reconstructed K^{+};#eta;N", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_eta_phi", "Azimuthal angle vs pseudorapidity for reconstructed K^{+};#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + registryMC.add("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_dcaxy", "DCA_{xy} vs transverse momentum for reconstructed K^{+};#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_dcaz", "DCA_{z} vs transverse momentum for reconstructed K^{+};#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for reconstructed K^{+};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + registryMC.add("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_all", "All PID K^{-};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/neg/contamination_matrix_kaon_neg", "PID K^{-} contamination matrix;PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_tpc", "TPC n#sigma_{K} vs transverse momentum for reconstructed K^{-};#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_tof", "TOF n#sigma_{K} vs transverse momentum for reconstructed K^{-};#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_tof_matched", "TOF-matched reconstructed K^{-};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/neg/mc_rec_kaon_neg_pt", "True primary K^{-};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/neg/mc_sec_kaon_neg_pt", "Secondary/fake K^{-};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_eta", "Pseudorapidity distribution of reconstructed K^{-};#eta;N", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_eta_phi", "Azimuthal angle vs pseudorapidity for reconstructed K^{-};#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + registryMC.add("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_dcaxy", "DCA_{xy} vs transverse momentum for reconstructed K^{-};#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_dcaz", "DCA_{z} vs transverse momentum for reconstructed K^{-};#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for reconstructed K^{-};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + // Protons + registryMC.add("mc/matched/reconstruction/protons/rec_proton_all", "All PID p;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/contamination_matrix_proton", "PID p contamination matrix;PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/mc_rec_proton_pt", "True primary p;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/mc_sec_proton_pt", "Secondary/fake p;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/proton_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for reconstructed p+#bar{p};#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryMC.add("mc/matched/reconstruction/protons/proton_tof_beta_vs_p", "TOF #beta vs momentum for reconstructed p+#bar{p};#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryMC.add("mc/matched/reconstruction/protons/rec_proton_eta", "Pseudorapidity distribution of reconstructed p+#bar{p};#eta;N", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/matched/reconstruction/protons/rec_proton_eta_phi", "Azimuthal angle vs pseudorapidity for reconstructed p+#bar{p};#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + registryMC.add("mc/matched/reconstruction/protons/rec_proton_dcaxy", "DCA_{xy} vs transverse momentum for reconstructed p+#bar{p};#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/matched/reconstruction/protons/rec_proton_dcaz", "DCA_{z} vs transverse momentum for reconstructed p+#bar{p};#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + + registryMC.add("mc/matched/reconstruction/protons/pos/rec_proton_pos_all", "All PID p;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/pos/contamination_matrix_proton_pos", "PID p contamination matrix;PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/pos/rec_proton_pos_tpc", "TPC n#sigma_{p} vs transverse momentum for reconstructed p;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/matched/reconstruction/protons/pos/rec_proton_pos_tof", "TOF n#sigma_{p} vs transverse momentum for reconstructed p;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/matched/reconstruction/protons/pos/rec_proton_pos_tof_matched", "TOF-matched reconstructed p;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/pos/mc_rec_proton_pos_pt", "True primary p;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/pos/mc_sec_proton_pos_pt", "Secondary/fake p;#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/pos/rec_proton_pos_eta", "Pseudorapidity distribution of reconstructed p;#eta;N", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/matched/reconstruction/protons/pos/rec_proton_pos_eta_phi", "Azimuthal angle vs pseudorapidity for reconstructed p;#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + registryMC.add("mc/matched/reconstruction/protons/pos/rec_proton_pos_dcaxy", "DCA_{xy} vs transverse momentum for reconstructed p;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/matched/reconstruction/protons/pos/rec_proton_pos_dcaz", "DCA_{z} vs transverse momentum for reconstructed p;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/matched/reconstruction/protons/pos/rec_proton_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for reconstructed p;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + registryMC.add("mc/matched/reconstruction/protons/neg/rec_proton_neg_all", "All PID #bar{p};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/neg/contamination_matrix_proton_neg", "PID #bar{p} contamination matrix;PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/neg/rec_proton_neg_tpc", "TPC n#sigma_{p} vs transverse momentum for reconstructed #bar{p};#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/matched/reconstruction/protons/neg/rec_proton_neg_tof", "TOF n#sigma_{p} vs transverse momentum for reconstructed #bar{p};#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/matched/reconstruction/protons/neg/rec_proton_neg_tof_matched", "TOF-matched reconstructed #bar{p};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/neg/mc_rec_proton_neg_pt", "True primary #bar{p};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/neg/mc_sec_proton_neg_pt", "Secondary/fake #bar{p};#it{p}_{T} (GeV/#it{c});N", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/reconstruction/protons/neg/rec_proton_neg_eta", "Pseudorapidity distribution of reconstructed #bar{p};#eta;N", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/matched/reconstruction/protons/neg/rec_proton_neg_eta_phi", "Azimuthal angle vs pseudorapidity for reconstructed #bar{p};#varphi;#eta", HistType::kTH2F, {axis.axisPhi, axis.axisEta}); + registryMC.add("mc/matched/reconstruction/protons/neg/rec_proton_neg_dcaxy", "DCA_{xy} vs transverse momentum for reconstructed #bar{p};#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/matched/reconstruction/protons/neg/rec_proton_neg_dcaz", "DCA_{z} vs transverse momentum for reconstructed #bar{p};#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/matched/reconstruction/protons/neg/rec_proton_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for reconstructed #bar{p};#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + // --- MC: MATCHED TRUTH --- + + // Pions + registryMC.add("mc/matched/truth/pions/mc_gen_pion_pt", "Transverse-momentum distribution of generated primary #pi^{#pm};#it{p}_{T} (GeV/#it{c});N_{#pi}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/truth/pions/pos/mc_gen_pion_pos_pt", "Transverse-momentum distribution of generated primary #pi^{+};#it{p}_{T} (GeV/#it{c});N_{#pi^{+}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/truth/pions/neg/mc_gen_pion_neg_pt", "Transverse-momentum distribution of generated primary #pi^{-};#it{p}_{T} (GeV/#it{c});N_{#pi^{-}}", HistType::kTH1F, {axis.axisPt}); + + // Kaons + registryMC.add("mc/matched/truth/kaons/mc_gen_kaon_pt", "Transverse-momentum distribution of generated primary K^{#pm};#it{p}_{T} (GeV/#it{c});N_{K}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/truth/kaons/pos/mc_gen_kaon_pos_pt", "Transverse-momentum distribution of generated primary K^{+};#it{p}_{T} (GeV/#it{c});N_{K^{+}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/truth/kaons/neg/mc_gen_kaon_neg_pt", "Transverse-momentum distribution of generated primary K^{-};#it{p}_{T} (GeV/#it{c});N_{K^{-}}", HistType::kTH1F, {axis.axisPt}); + + // Protons + registryMC.add("mc/matched/truth/protons/mc_gen_proton_pt", "Transverse-momentum distribution of generated primary p+#bar{p};#it{p}_{T} (GeV/#it{c});N_{p+#bar{p}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/truth/protons/pos/mc_gen_proton_pos_pt", "Transverse-momentum distribution of generated primary p;#it{p}_{T} (GeV/#it{c});N_{p}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/matched/truth/protons/neg/mc_gen_proton_neg_pt", "Transverse-momentum distribution of generated primary #bar{p};#it{p}_{T} (GeV/#it{c});N_{#bar{p}}", HistType::kTH1F, {axis.axisPt}); + + // Hadrons + registryMC.add("mc/matched/truth/hadrons/mc_gen_hadron_pt", "Transverse-momentum distribution of generated primary hadrons;#it{p}_{T} (GeV/#it{c});N_{hadrons}", HistType::kTH1F, {axis.axisPt}); + + // --- MC: TRUTH JETS (PARTICLE LEVEL) --- + + // General Jet QA + registryMC.add("mc/jets/truth/general/n_events", "Selected particle-level jet events;Event counter;N_{events}", HistType::kTH1I, {axis.axisEventCounter}); + registryMC.add("mc/jets/truth/general/n_events_raw", "All events", HistType::kTH1I, {axis.axisEventCounter}); + registryMC.add("mc/jets/truth/general/collision_multiplicity", "Number of particle-level jets in collision;Number of Jets;Number of Collisions", HistType::kTH1F, {axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/general/jet_pt", "Transverse-momentum distribution of particle-level charged jets;#it{p}_{T,jet}^{part} (GeV/#it{c});N_{jets}", HistType::kTH1F, {axis.axisJetPt}); + registryMC.add("mc/jets/truth/general/jet_eta", "Pseudorapidity distribution of particle-level charged jets;#eta_{jet}^{part};N_{jets}", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/jets/truth/general/jet_phi", "Azimuthal-angle distribution of particle-level charged jets;#varphi_{jet}^{part};N_{jets}", HistType::kTH1F, {axis.axisPhi}); + registryMC.add("mc/jets/truth/general/jet_n_constituents", "Constituent multiplicity of particle-level charged jets;N_{constituents}^{part};N_{jets}", HistType::kTH1I, {axis.axisJetNConst}); + registryMC.add("mc/jets/truth/general/jet_area", "Area distribution of particle-level charged jets;A_{jet}^{part};N_{jets}", HistType::kTH1F, {axis.axisJetArea}); + registryMC.add("mc/jets/truth/general/jet_n_selected_constituents", "Selected-particle multiplicity in particle-level charged jets;N_{constituents}^{selected};N_{jets}", HistType::kTH1I, {axis.axisJetNConst}); + registryMC.add("mc/jets/truth/general/z_vtx", "Particle-level Z-vertex distribution;z_{vtx} (cm);N_{events}", HistType::kTH1F, {axis.axisZVtx}); + registryMC.add("mc/jets/truth/general/jet_pt_subtracted", "Particle-level jet #it{p}_{T} after background subtraction;#it{p}_{T,jet}^{part,sub} (GeV/#it{c});N_{jets}", HistType::kTH1F, {axis.axisJetSubPt}); + registryMC.add("mc/jets/truth/general/jet_pt_raw_vs_sub", "Particle-level raw vs subtracted jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});#it{p}_{T,jet}^{part,sub} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisJetSubPt}); + + // Pions + registryMC.add("mc/jets/truth/pions/n_pions_per_jet", "Multiplicity of generated #pi^{#pm} in particle-level jets;N_{#pi};N_{jets}", HistType::kTH1D, {axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/pions/n_pions_vs_jet_pt", "Multiplicity of generated #pi^{#pm} vs particle-level jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});N_{#pi}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/pions/pion_pt_vs_jet_pt", "Generated #pi^{#pm} #it{p}_{T} vs particle-level jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryMC.add("mc/jets/truth/pions/mc_gen_pion_pt", "Transverse-momentum distribution of generated primary #pi^{#pm} in particle-level jets;#it{p}_{T} (GeV/#it{c});N_{#pi}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/truth/pions/pos/n_pions_per_jet", "Multiplicity of generated #pi^{+} in particle-level jets;N_{#pi^{+}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/pions/pos/mc_gen_pion_pos_pt", "Transverse-momentum distribution of generated primary #pi^{+} in particle-level jets;#it{p}_{T} (GeV/#it{c});N_{#pi^{+}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/truth/pions/neg/n_pions_per_jet", "Multiplicity of generated #pi^{-} in particle-level jets;N_{#pi^{-}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/pions/neg/mc_gen_pion_neg_pt", "Transverse-momentum distribution of generated primary #pi^{-} in particle-level jets;#it{p}_{T} (GeV/#it{c});N_{#pi^{-}}", HistType::kTH1F, {axis.axisPt}); + + // Kaons + registryMC.add("mc/jets/truth/kaons/n_kaons_per_jet", "Multiplicity of generated K^{#pm} in particle-level jets;N_{K};N_{jets}", HistType::kTH1D, {axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/kaons/n_kaons_vs_jet_pt", "Multiplicity of generated K^{#pm} vs particle-level jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});N_{K}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/kaons/kaon_pt_vs_jet_pt", "Generated K^{#pm} #it{p}_{T} vs particle-level jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryMC.add("mc/jets/truth/kaons/mc_gen_kaon_pt", "Transverse-momentum distribution of generated primary K^{#pm} in particle-level jets;#it{p}_{T} (GeV/#it{c});N_{K}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/truth/kaons/pos/n_kaons_per_jet", "Multiplicity of generated K^{+} in particle-level jets;N_{K^{+}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/kaons/pos/mc_gen_kaon_pos_pt", "Transverse-momentum distribution of generated primary K^{+} in particle-level jets;#it{p}_{T} (GeV/#it{c});N_{K^{+}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/truth/kaons/neg/n_kaons_per_jet", "Multiplicity of generated K^{-} in particle-level jets;N_{K^{-}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/kaons/neg/mc_gen_kaon_neg_pt", "Transverse-momentum distribution of generated primary K^{-} in particle-level jets;#it{p}_{T} (GeV/#it{c});N_{K^{-}}", HistType::kTH1F, {axis.axisPt}); + + // Protons + registryMC.add("mc/jets/truth/protons/n_protons_per_jet", "Multiplicity of generated p+#bar{p} in particle-level jets;N_{p+#bar{p}};N_{jets}", HistType::kTH1D, {axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/protons/n_protons_vs_jet_pt", "Multiplicity of generated p+#bar{p} vs particle-level jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});N_{p+#bar{p}}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/protons/proton_pt_vs_jet_pt", "Generated p+#bar{p} #it{p}_{T} vs particle-level jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryMC.add("mc/jets/truth/protons/mc_gen_proton_pt", "Transverse-momentum distribution of generated primary p+#bar{p} in particle-level jets;#it{p}_{T} (GeV/#it{c});N_{p+#bar{p}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/truth/protons/pos/n_protons_per_jet", "Multiplicity of generated p in particle-level jets;N_{p};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/protons/pos/mc_gen_proton_pos_pt", "Transverse-momentum distribution of generated primary p in particle-level jets;#it{p}_{T} (GeV/#it{c});N_{p}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/truth/protons/neg/n_protons_per_jet", "Multiplicity of generated #bar{p} in particle-level jets;N_{#bar{p}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/truth/protons/neg/mc_gen_proton_neg_pt", "Transverse-momentum distribution of generated primary #bar{p} in particle-level jets;#it{p}_{T} (GeV/#it{c});N_{#bar{p}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/truth/composition/particle_multiplicity_per_jet", "Identified-particle multiplicity in particle-level jets;Particle species;N_{particles} per jet", HistType::kTH2I, {axis.axisParticleSpecies, axis.axisMultiplicity}); + + // General Hadrons + registryMC.add("mc/jets/truth/hadrons/mc_gen_hadron_pt", "Transverse-momentum distribution of generated primary hadrons in particle-level jets;#it{p}_{T} (GeV/#it{c});N_{hadrons}", HistType::kTH1F, {axis.axisPt}); + + // --- MC: MATCHED RECONSTRUCTED JETS --- + + // General Jet QA + registryMC.add("mc/jets/matched/reconstructed/general/n_events", "Selected matched events with reconstructed charged jets;Event counter;N_{events}", HistType::kTH1I, {axis.axisEventCounter}); + registryMC.add("mc/jets/matched/reconstructed/general/n_events_raw", "All events", HistType::kTH1I, {axis.axisEventCounter}); + registryMC.add("mc/jets/matched/reconstructed/general/collision_multiplicity", "Number of matched jets in collision;Number of Jets;Number of Collisions", HistType::kTH1F, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/general/jet_pt", "Transverse-momentum distribution of matched reconstructed charged jets;#it{p}_{T,jet}^{rec} (GeV/#it{c});N_{jets}", HistType::kTH1F, {axis.axisJetPt}); + registryMC.add("mc/jets/matched/reconstructed/general/jet_pt_subtracted", "Matched reconstructed jet #it{p}_{T} after background subtraction;#it{p}_{T,jet}^{rec,sub} (GeV/#it{c});N_{jets}", HistType::kTH1F, {axis.axisJetSubPt}); + registryMC.add("mc/jets/matched/reconstructed/general/jet_pt_raw_vs_sub", "Raw vs subtracted matched reconstructed jet #it{p}_{T};#it{p}_{T,jet}^{rec} (GeV/#it{c});#it{p}_{T,jet}^{rec,sub} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisJetSubPt}); + registryMC.add("mc/jets/matched/reconstructed/general/jet_eta", "Pseudorapidity distribution of matched reconstructed charged jets;#eta_{jet}^{rec};N_{jets}", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/jets/matched/reconstructed/general/jet_phi", "Azimuthal-angle distribution of matched reconstructed charged jets;#varphi_{jet}^{rec};N_{jets}", HistType::kTH1F, {axis.axisPhi}); + registryMC.add("mc/jets/matched/reconstructed/general/jet_n_constituents", "Constituent multiplicity of matched reconstructed charged jets;N_{constituents}^{rec};N_{jets}", HistType::kTH1I, {axis.axisJetNConst}); + registryMC.add("mc/jets/matched/reconstructed/general/jet_area", "Area distribution of matched reconstructed charged jets;A_{jet}^{rec};N_{jets}", HistType::kTH1F, {axis.axisJetArea}); + registryMC.add("mc/jets/matched/reconstructed/general/jet_n_selected_constituents", "Selected-track multiplicity in matched reconstructed charged jets;N_{constituents}^{selected};N_{jets}", HistType::kTH1I, {axis.axisJetNConst}); + + // Hadrons in jets + registryMC.add("mc/jets/matched/reconstructed/hadrons/rec_hadron_all", "All reconstructed hadrons in matched jets;#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/hadrons/mc_rec_hadron_pt", "True primary reconstructed hadrons in matched jets;#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/hadrons/mc_sec_hadron_pt", "Secondary/fake reconstructed hadrons in matched jets;#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + + // Jet Cone + registryMC.add("mc/jets/matched/reconstructed/cone/all_tracks_2d", "Selected tracks in MCD matched jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/all_tracks_3d", "Selected tracks in MCD matched jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/pions_2d", "Reconstructed #pi in MCD matched jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/pions_3d", "Reconstructed #pi in MCD matched jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/pions/pion_pos_2d", "Reconstructed #pi^{+} in MCD matched jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/pions/pion_pos", "Reconstructed #pi^{+} in MCD matched jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/pions/pion_neg_2d", "Reconstructed #pi^{-} in MCD matched jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/pions/pion_neg", "Reconstructed #pi^{-} in MCD matched jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/kaons_2d", "Reconstructed K in MCD matched jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/kaons_3d", "Reconstructed K in MCD matched jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/kaons/kaon_pos_2d", "Reconstructed K^{+} in MCD matched jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/kaons/kaon_pos", "Reconstructed K^{+} in MCD matched jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/kaons/kaon_neg_2d", "Reconstructed K^{-} in MCD matched jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/kaons/kaon_neg", "Reconstructed K^{-} in MCD matched jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/protons_2d", "Reconstructed p/#bar{p} in MCD matched jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/protons_3d", "Reconstructed p/#bar{p} in MCD matched jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3F, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/protons/proton_pos_2d", "Reconstructed p in MCD matched jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/protons/proton_pos", "Reconstructed p in MCD matched jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/protons/proton_neg_2d", "Reconstructed #bar{p} in MCD matched jet cone;#Delta#eta;#Delta#varphi", HistType::kTH2D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone}); + registryMC.add("mc/jets/matched/reconstructed/cone/protons/proton_neg", "Reconstructed #bar{p} in MCD matched jet cone;#Delta#eta;#Delta#varphi;#it{p}_{T}^{track} (GeV/#it{c})", HistType::kTH3D, {axis.axisDeltaEtaCone, axis.axisDeltaPhiCone, axis.axisPtTrackCone}); + + // Composition + registryMC.add("mc/jets/matched/reconstructed/composition/n_pions_per_jet", "Multiplicity of PID-selected #pi^{#pm} in matched MC jets;N_{#pi};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/composition/n_kaons_per_jet", "Multiplicity of PID-selected K^{#pm} in matched MC jets;N_{K};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/composition/n_protons_per_jet", "Multiplicity of PID-selected p+#bar{p} in matched MC jets;N_{p+#bar{p}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/composition/particle_multiplicity_per_jet", "Identified-particle multiplicity in matched MC jets;Particle species;N_{particles} per jet", HistType::kTH2I, {axis.axisParticleSpecies, axis.axisMultiplicity}); + + // Truth vs Reconstructed Matrices + registryMC.add("mc/jets/matched/reconstructed/composition/n_pions_matrix", "Truth vs reconstructed pion multiplicity;N_{truth #pi};N_{reconstructed #pi};N_{jets}", HistType::kTH2I, {axis.axisMultiplicity, axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/composition/n_kaons_matrix", "Truth vs reconstructed kaon multiplicity;N_{truth K};N_{reconstructed K};N_{jets}", HistType::kTH2I, {axis.axisMultiplicity, axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/composition/n_protons_matrix", "Truth vs reconstructed proton multiplicity;N_{truth p};N_{reconstructed p};N_{jets}", HistType::kTH2I, {axis.axisMultiplicity, axis.axisMultiplicity}); + + // Pions + registryMC.add("mc/jets/matched/reconstructed/pions/n_pions_vs_jet_pt", "Multiplicity of PID-selected #pi^{#pm} vs matched reconstructed jet #it{p}_{T};#it{p}_{T,jet}^{rec} (GeV/#it{c});N_{#pi}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/pions/pion_pt_vs_jet_pt", "Reconstructed #pi^{#pm} #it{p}_{T} vs matched reconstructed jet #it{p}_{T};#it{p}_{T,jet}^{rec} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/n_pions_per_jet", "Multiplicity of PID-selected #pi^{+} in matched MC jets;N_{#pi^{+}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/n_pions_per_jet", "Multiplicity of PID-selected #pi^{-} in matched MC jets;N_{#pi^{-}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/pions/rec_pion_all", "All reconstructed pions #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/contamination_matrix_pion", "Pion contamination matrix;True PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2D, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/mc_rec_pion_pt", "MC true primary pions #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/mc_sec_pion_pt", "MC secondary/fake pions #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/pion_jet_tpc", "TPC n#sigma_{#pi} vs transverse momentum for PID-selected #pi candidates in matched jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/jets/matched/reconstructed/pions/pion_jet_tof", "TOF n#sigma_{#pi} vs transverse momentum for PID-selected #pi candidates in matched jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/jets/matched/reconstructed/pions/pion_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for PID-selected pion candidates in matched jets;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryMC.add("mc/jets/matched/reconstructed/pions/pion_tof_beta_vs_p", "TOF #beta vs momentum for PID-selected pion candidates in matched jets;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/rec_pion_pos_all", "All reconstructed #pi^{+} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/contamination_matrix_pion_pos", "#pi^{+} contamination matrix;True PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2D, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_tpc", "#pi^{+} TPC n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TPC n#sigma_{#pi}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/rec_pion_pos_tof_matched", "TOF-matched reconstructed #pi^{+} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_tof", "#pi^{+} TOF n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TOF n#sigma_{#pi}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/mc_rec_pion_pos_pt", "MC true primary #pi^{+} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/mc_sec_pion_pos_pt", "MC secondary/fake #pi^{+} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_pt", "Transverse-momentum distribution of #pi^{+} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});N_{#pi^{+}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_eta", "Pseudorapidity distribution of #pi^{+} candidates in matched MC jets;#eta;N_{#pi^{+}}", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_dcaxy", "DCA_{xy} vs transverse momentum for #pi^{+} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_dcaz", "DCA_{z} vs transverse momentum for #pi^{+} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for #pi^{+} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/rec_pion_neg_all", "All reconstructed #pi^{-} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/contamination_matrix_pion_neg", "#pi^{-} contamination matrix;True PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2D, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_tpc", "#pi^{-} TPC n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TPC n#sigma_{#pi}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/rec_pion_neg_tof_matched", "TOF-matched reconstructed #pi^{-} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_tof", "#pi^{-} TOF n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TOF n#sigma_{#pi}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/mc_rec_pion_neg_pt", "MC true primary #pi^{-} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/mc_sec_pion_neg_pt", "MC secondary/fake #pi^{-} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_pt", "Transverse-momentum distribution of #pi^{-} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});N_{#pi^{-}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_eta", "Pseudorapidity distribution of #pi^{-} candidates in matched MC jets;#eta;N_{#pi^{-}}", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_dcaxy", "DCA_{xy} vs transverse momentum for #pi^{-} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_dcaz", "DCA_{z} vs transverse momentum for #pi^{-} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for #pi^{-} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + // Kaons + registryMC.add("mc/jets/matched/reconstructed/kaons/n_kaons_vs_jet_pt", "Multiplicity of PID-selected K^{#pm} vs matched reconstructed jet #it{p}_{T};#it{p}_{T,jet}^{rec} (GeV/#it{c});N_{K}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/kaons/kaon_pt_vs_jet_pt", "Reconstructed K^{#pm} #it{p}_{T} vs matched reconstructed jet #it{p}_{T};#it{p}_{T,jet}^{rec} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/n_kaons_per_jet", "Multiplicity of PID-selected K^{+} in matched MC jets;N_{K^{+}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/n_kaons_per_jet", "Multiplicity of PID-selected K^{-} in matched MC jets;N_{K^{-}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/kaons/rec_kaon_all", "All reconstructed kaons #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/contamination_matrix_kaon", "Kaon contamination matrix;True PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2D, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/mc_rec_kaon_pt", "MC true primary kaons #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/mc_sec_kaon_pt", "MC secondary/fake kaons #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/kaon_jet_tpc", "TPC n#sigma_{K} vs transverse momentum for PID-selected K candidates in matched jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/jets/matched/reconstructed/kaons/kaon_jet_tof", "TOF n#sigma_{K} vs transverse momentum for PID-selected K candidates in matched jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/jets/matched/reconstructed/kaons/kaon_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for PID-selected kaon candidates in matched jets;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryMC.add("mc/jets/matched/reconstructed/kaons/kaon_tof_beta_vs_p", "TOF #beta vs momentum for PID-selected kaon candidates in matched jets;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/rec_kaon_pos_all", "All reconstructed K^{+} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/contamination_matrix_kaon_pos", "K^{+} contamination matrix;True PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2D, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_tpc", "K^{+} TPC n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TPC n#sigma_{K}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/rec_kaon_pos_tof_matched", "TOF-matched reconstructed K^{+} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_tof", "K^{+} TOF n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TOF n#sigma_{K}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/mc_rec_kaon_pos_pt", "MC true primary K^{+} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/mc_sec_kaon_pos_pt", "MC secondary/fake K^{+} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_pt", "Transverse-momentum distribution of K^{+} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});N_{K^{+}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_eta", "Pseudorapidity distribution of K^{+} candidates in matched MC jets;#eta;N_{K^{+}}", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_dcaxy", "DCA_{xy} vs transverse momentum for K^{+} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_dcaz", "DCA_{z} vs transverse momentum for K^{+} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for K^{+} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/rec_kaon_neg_all", "All reconstructed K^{-} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/contamination_matrix_kaon_neg", "K^{-} contamination matrix;True PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2D, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/rec_kaon_neg_tpc", "K^{-} TPC n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TPC n#sigma_{K}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/rec_kaon_neg_tof_matched", "TOF-matched reconstructed K^{-} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/rec_kaon_neg_tof", "K^{-} TOF n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TOF n#sigma_{K}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/mc_rec_kaon_neg_pt", "MC true primary K^{-} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/mc_sec_kaon_neg_pt", "MC secondary/fake K^{-} #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/kaon_jet_neg_pt", "Transverse-momentum distribution of K^{-} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});N_{K^{-}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/kaon_jet_neg_eta", "Pseudorapidity distribution of K^{-} candidates in matched MC jets;#eta;N_{K^{-}}", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/kaon_jet_neg_dcaxy", "DCA_{xy} vs transverse momentum for K^{-} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/kaon_jet_neg_dcaz", "DCA_{z} vs transverse momentum for K^{-} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/jets/matched/reconstructed/kaons/neg/kaon_jet_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for K^{-} candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + // Protons + registryMC.add("mc/jets/matched/reconstructed/protons/n_protons_vs_jet_pt", "Multiplicity of PID-selected p+#bar{p} vs matched reconstructed jet #it{p}_{T};#it{p}_{T,jet}^{rec} (GeV/#it{c});N_{p+#bar{p}}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/protons/proton_pt_vs_jet_pt", "Reconstructed p+#bar{p} #it{p}_{T} vs matched reconstructed jet #it{p}_{T};#it{p}_{T,jet}^{rec} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/n_protons_per_jet", "Multiplicity of PID-selected p in matched MC jets;N_{p};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/n_protons_per_jet", "Multiplicity of PID-selected #bar{p} in matched MC jets;N_{#bar{p}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/reconstructed/protons/rec_proton_all", "All reconstructed protons #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/contamination_matrix_proton", "Proton contamination matrix;True PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2D, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/mc_rec_proton_pt", "MC true primary protons #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/mc_sec_proton_pt", "MC secondary/fake protons #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/proton_jet_tpc", "TPC n#sigma_{p} vs transverse momentum for PID-selected p+#bar{p} candidates in matched jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TPC}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/jets/matched/reconstructed/protons/proton_jet_tof", "TOF n#sigma_{p} vs transverse momentum for PID-selected p+#bar{p} candidates in matched jets;#it{p}_{T} (GeV/#it{c});n#sigma_{TOF}", HistType::kTH2F, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/jets/matched/reconstructed/protons/proton_tpc_signal_vs_p", "TPC d#it{E}/d#it{x} signal vs momentum for PID-selected proton candidates in matched jets;#it{p} (GeV/#it{c});TPC d#it{E}/d#it{x} signal (a.u.)", HistType::kTH2F, {axis.axisMomentum, axis.axisTPCSignal}); + registryMC.add("mc/jets/matched/reconstructed/protons/proton_tof_beta_vs_p", "TOF #beta vs momentum for PID-selected proton candidates in matched jets;#it{p} (GeV/#it{c});#beta_{TOF}", HistType::kTH2F, {axis.axisMomentum, axis.axisTOFBeta}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/rec_proton_pos_all", "All reconstructed protons (positive) #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/contamination_matrix_proton_pos", "Proton (positive) contamination matrix;True PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2D, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_tpc", "Proton TPC n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TPC n#sigma_{p}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/rec_proton_pos_tof_matched", "TOF-matched reconstructed protons #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_tof", "Proton TOF n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TOF n#sigma_{p}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/mc_rec_proton_pos_pt", "MC true primary protons (positive) #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/mc_sec_proton_pos_pt", "MC secondary/fake protons (positive) #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_pt", "Transverse-momentum distribution of proton candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});N_{p}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_eta", "Pseudorapidity distribution of proton candidates in matched MC jets;#eta;N_{p}", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_dcaxy", "DCA_{xy} vs transverse momentum for proton candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_dcaz", "DCA_{z} vs transverse momentum for proton candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_phi_vs_pt", "Azimuthal angle vs transverse momentum for proton candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/rec_proton_neg_all", "All reconstructed antiprotons #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/contamination_matrix_proton_neg", "Antiproton contamination matrix;True PDG Code;#it{p}_{T} (GeV/#it{c})", HistType::kTH2D, {axis.axisMCPdg, axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_tpc", "Antiproton TPC n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TPC n#sigma_{p}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTPC}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/rec_proton_neg_tof_matched", "TOF-matched reconstructed antiprotons #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_tof", "Antiproton TOF n#sigma vs #it{p}_{T};#it{p}_{T} (GeV/#it{c});TOF n#sigma_{p}", HistType::kTH2D, {axis.axisPt, axis.axisNSigmaTOF}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/mc_rec_proton_neg_pt", "MC true primary antiprotons #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/mc_sec_proton_neg_pt", "MC secondary/fake antiprotons #it{p}_{T};#it{p}_{T} (GeV/#it{c});Counts", HistType::kTH1D, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_pt", "Transverse-momentum distribution of antiproton candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});N_{#bar{p}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_eta", "Pseudorapidity distribution of antiproton candidates in matched MC jets;#eta;N_{#bar{p}}", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_dcaxy", "DCA_{xy} vs transverse momentum for antiproton candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{xy} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaXY}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_dcaz", "DCA_{z} vs transverse momentum for antiproton candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});DCA_{z} (cm)", HistType::kTH2F, {axis.axisPt, axis.axisDcaZ}); + registryMC.add("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_phi_vs_pt", "Azimuthal angle vs transverse momentum for antiproton candidates in matched MC jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {axis.axisPt, axis.axisPhi}); + + // --- MC: MATCHED TRUTH JETS --- + + // General Jet QA + registryMC.add("mc/jets/matched/truth/general/jet_pt", "Transverse-momentum distribution of particle-level matched charged jets;#it{p}_{T,jet}^{part} (GeV/#it{c});N_{jets}", HistType::kTH1F, {axis.axisJetPt}); + registryMC.add("mc/jets/matched/truth/general/jet_eta", "Pseudorapidity distribution of particle-level matched charged jets;#eta_{jet}^{part};N_{jets}", HistType::kTH1F, {axis.axisEta}); + registryMC.add("mc/jets/matched/truth/general/jet_phi", "Azimuthal-angle distribution of particle-level matched charged jets;#varphi_{jet}^{part};N_{jets}", HistType::kTH1F, {axis.axisPhi}); + registryMC.add("mc/jets/matched/truth/general/jet_n_constituents", "Constituent multiplicity of particle-level matched charged jets;N_{constituents}^{part};N_{jets}", HistType::kTH1I, {axis.axisJetNConst}); + registryMC.add("mc/jets/matched/truth/general/jet_area", "Area distribution of particle-level matched charged jets;A_{jet}^{part};N_{jets}", HistType::kTH1F, {axis.axisJetArea}); + registryMC.add("mc/jets/matched/truth/general/jet_n_selected_constituents", "Selected-particle multiplicity in particle-level matched charged jets;N_{constituents}^{selected};N_{jets}", HistType::kTH1I, {axis.axisJetNConst}); + // Pions - registryData.add("data/jets/n_pions_vs_n_constituents", - "Pions vs selected constituents;" - "N_{constituents}^{selected};N_{#pi}", - HistType::kTH2I, {{31, -0.5, 30.5, "N_{constituents}^{selected}"}, {31, -0.5, 30.5, "N_{#pi^{+}+#pi^{-}}"}}); - registryData.add("data/jets/pions/pos/pion_jet_pos_tpc", "TPC #pi^{+} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/jets/pions/pos/pion_jet_pos_tof", "TOF #pi^{+} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/jets/pions/pos/pion_jet_pos_pt", "#pi^{+} pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/jets/pions/pos/pion_jet_pos_eta", "#pi^{+} Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/jets/pions/pos/pion_jet_pos_dcaxy", "#pi^{+} DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/jets/pions/pos/pion_jet_pos_dcaz", "#pi^{+} DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/jets/pions/pos/pion_jet_pos_phi_vs_pt", "#pi^{+} in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - - registryData.add("data/jets/pions/neg/pion_jet_neg_tpc", "TPC #pi^{-} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/jets/pions/neg/pion_jet_neg_tof", "TOF #pi^{-} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/jets/pions/neg/pion_jet_neg_pt", "#pi^{-} pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/jets/pions/neg/pion_jet_neg_eta", "#pi^{-} Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/jets/pions/neg/pion_jet_neg_dcaxy", "#pi^{-} DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/jets/pions/neg/pion_jet_neg_dcaz", "#pi^{-} DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/jets/pions/neg/pion_jet_neg_phi_vs_pt", "#pi^{-} in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); + registryMC.add("mc/jets/matched/truth/pions/n_pions_per_jet", "Multiplicity of generated #pi^{#pm} in particle-level matched jets;N_{#pi};N_{jets}", HistType::kTH1D, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/pions/n_pions_vs_jet_pt", "Multiplicity of generated #pi^{#pm} vs particle-level matched jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});N_{#pi}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/pions/pion_pt_vs_jet_pt", "Generated #pi^{#pm} #it{p}_{T} vs particle-level matched jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryMC.add("mc/jets/matched/truth/pions/mc_gen_pion_pt", "Transverse-momentum distribution of generated primary #pi^{#pm} in particle-level matched jets;#it{p}_{T} (GeV/#it{c});N_{#pi}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/truth/pions/pos/n_pions_per_jet", "Multiplicity of generated #pi^{+} in particle-level matched jets;N_{#pi^{+}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/pions/pos/mc_gen_pion_pos_pt", "Transverse-momentum distribution of generated primary #pi^{+} in particle-level matched jets;#it{p}_{T} (GeV/#it{c});N_{#pi^{+}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/truth/pions/neg/n_pions_per_jet", "Multiplicity of generated #pi^{-} in particle-level matched jets;N_{#pi^{-}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/pions/neg/mc_gen_pion_neg_pt", "Transverse-momentum distribution of generated primary #pi^{-} in particle-level matched jets;#it{p}_{T} (GeV/#it{c});N_{#pi^{-}}", HistType::kTH1F, {axis.axisPt}); // Kaons - registryData.add("data/jets/kaons/pos/kaon_jet_pos_tpc", "TPC K^{+} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/jets/kaons/pos/kaon_jet_pos_tof", "TOF K^{+} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/jets/kaons/pos/kaon_jet_pos_pt", "K^{+} pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/jets/kaons/pos/kaon_jet_pos_eta", "K^{+} Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/jets/kaons/pos/kaon_jet_pos_dcaxy", "K^{+} DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/jets/kaons/pos/kaon_jet_pos_dcaz", "K^{+} DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/jets/kaons/pos/kaon_jet_pos_phi_vs_pt", "K^{+} in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - - registryData.add("data/jets/kaons/neg/kaon_jet_neg_tpc", "TPC K^{-} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/jets/kaons/neg/kaon_jet_neg_tof", "TOF K^{-} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/jets/kaons/neg/kaon_jet_neg_pt", "K^{-} pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/jets/kaons/neg/kaon_jet_neg_eta", "K^{-} Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/jets/kaons/neg/kaon_jet_neg_dcaxy", "K^{-} DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/jets/kaons/neg/kaon_jet_neg_dcaz", "K^{-} DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/jets/kaons/neg/kaon_jet_neg_phi_vs_pt", "K^{-} in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); + registryMC.add("mc/jets/matched/truth/kaons/n_kaons_per_jet", "Multiplicity of generated K^{#pm} in particle-level matched jets;N_{K};N_{jets}", HistType::kTH1D, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/kaons/n_kaons_vs_jet_pt", "Multiplicity of generated K^{#pm} vs particle-level matched jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});N_{K}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/kaons/kaon_pt_vs_jet_pt", "Generated K^{#pm} #it{p}_{T} vs particle-level matched jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryMC.add("mc/jets/matched/truth/kaons/mc_gen_kaon_pt", "Transverse-momentum distribution of generated primary K^{#pm} in particle-level matched jets;#it{p}_{T} (GeV/#it{c});N_{K}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/truth/kaons/pos/n_kaons_per_jet", "Multiplicity of generated K^{+} in particle-level matched jets;N_{K^{+}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/kaons/pos/mc_gen_kaon_pos_pt", "Transverse-momentum distribution of generated primary K^{+} in particle-level matched jets;#it{p}_{T} (GeV/#it{c});N_{K^{+}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/truth/kaons/neg/n_kaons_per_jet", "Multiplicity of generated K^{-} in particle-level matched jets;N_{K^{-}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/kaons/neg/mc_gen_kaon_neg_pt", "Transverse-momentum distribution of generated primary K^{-} in particle-level matched jets;#it{p}_{T} (GeV/#it{c});N_{K^{-}}", HistType::kTH1F, {axis.axisPt}); // Protons - registryData.add("data/jets/protons/pos/proton_jet_pos_tpc", "TPC p PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/jets/protons/pos/proton_jet_pos_tof", "TOF p PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/jets/protons/pos/proton_jet_pos_pt", "p pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/jets/protons/pos/proton_jet_pos_eta", "p Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/jets/protons/pos/proton_jet_pos_dcaxy", "p DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/jets/protons/pos/proton_jet_pos_dcaz", "p DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/jets/protons/pos/proton_jet_pos_phi_vs_pt", "p in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - - registryData.add("data/jets/protons/neg/proton_jet_neg_tpc", "TPC #bar{p} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/jets/protons/neg/proton_jet_neg_tof", "TOF #bar{p} PID in Jets", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/jets/protons/neg/proton_jet_neg_pt", "#bar{p} pT in Jets", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/jets/protons/neg/proton_jet_neg_eta", "#bar{p} Eta in Jets", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/jets/protons/neg/proton_jet_neg_dcaxy", "#bar{p} DCAxy in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/jets/protons/neg/proton_jet_neg_dcaz", "#bar{p} DCAz in Jets", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/jets/protons/neg/proton_jet_neg_phi_vs_pt", "p in jets;#it{p}_{T} (GeV/#it{c});#varphi", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {72, 0.0, TwoPI, "#varphi"}}); - - ////////////////////////////////////////////// - // UE - ////////////////////////////////////////////// - - registryData.add("data/ue/pions/pion_ue_tpc", "TPC Pion PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/ue/pions/pion_ue_tof", "TOF Pion PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/ue/pions/pion_ue_pt", "Pion pT in UE", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/ue/pions/pion_ue_eta", "Pion Eta in UE", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/ue/pions/pion_ue_dcaxy", "Pion DCAxy in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/ue/pions/pion_ue_dcaz", "Pion DCAz in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - - registryData.add("data/ue/pions/pos/pion_ue_pos_tpc", "TPC #pi^{+} PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/ue/pions/pos/pion_ue_pos_tof", "TOF #pi^{+} PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/ue/pions/pos/pion_ue_pos_pt", "#pi^{+} pT in UE", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/ue/pions/pos/pion_ue_pos_eta", "#pi^{+} Eta in UE", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/ue/pions/pos/pion_ue_pos_dcaxy", "#pi^{+} DCAxy in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/ue/pions/pos/pion_ue_pos_dcaz", "#pi^{+} DCAz in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - - registryData.add("data/ue/pions/neg/pion_ue_neg_tpc", "TPC #pi^{-} PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/ue/pions/neg/pion_ue_neg_tof", "TOF #pi^{-} PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/ue/pions/neg/pion_ue_neg_pt", "#pi^{-} pT in UE", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/ue/pions/neg/pion_ue_neg_eta", "#pi^{-} Eta in UE", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/ue/pions/neg/pion_ue_neg_dcaxy", "#pi^{-} DCAxy in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/ue/pions/neg/pion_ue_neg_dcaz", "#pi^{-} DCAz in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - - registryData.add("data/ue/kaons/kaon_ue_tpc", "TPC Kaon PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/ue/kaons/kaon_ue_tof", "TOF Kaon PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/ue/kaons/kaon_ue_pt", "Kaon pT in UE", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/ue/kaons/kaon_ue_eta", "Kaon Eta in UE", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/ue/kaons/kaon_ue_dcaxy", "Kaon DCAxy in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/ue/kaons/kaon_ue_dcaz", "Kaon DCAz in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - - registryData.add("data/ue/kaons/pos/kaon_ue_pos_tpc", "TPC K^{+} PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/ue/kaons/pos/kaon_ue_pos_tof", "TOF K^{+} PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/ue/kaons/pos/kaon_ue_pos_pt", "K^{+} pT in UE", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/ue/kaons/pos/kaon_ue_pos_eta", "K^{+} Eta in UE", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/ue/kaons/pos/kaon_ue_pos_dcaxy", "K^{+} DCAxy in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/ue/kaons/pos/kaon_ue_pos_dcaz", "K^{+} DCAz in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - - registryData.add("data/ue/kaons/neg/kaon_ue_neg_tpc", "TPC K^{-} PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/ue/kaons/neg/kaon_ue_neg_tof", "TOF K^{-} PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/ue/kaons/neg/kaon_ue_neg_pt", "K^{-} pT in UE", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/ue/kaons/neg/kaon_ue_neg_eta", "K^{-} Eta in UE", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/ue/kaons/neg/kaon_ue_neg_dcaxy", "K^{-} DCAxy in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/ue/kaons/neg/kaon_ue_neg_dcaz", "K^{-} DCAz in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - - registryData.add("data/ue/protons/proton_ue_tpc", "TPC Proton PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/ue/protons/proton_ue_tof", "TOF Proton PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/ue/protons/proton_ue_pt", "Proton pT in UE", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/ue/protons/proton_ue_eta", "Proton Eta in UE", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/ue/protons/proton_ue_dcaxy", "Proton DCAxy in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/ue/protons/proton_ue_dcaz", "Proton DCAz in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - - registryData.add("data/ue/protons/pos/proton_ue_pos_tpc", "TPC p PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/ue/protons/pos/proton_ue_pos_tof", "TOF p PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/ue/protons/pos/proton_ue_pos_pt", "p pT in UE", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/ue/protons/pos/proton_ue_pos_eta", "p Eta in UE", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/ue/protons/pos/proton_ue_pos_dcaxy", "p DCAxy in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/ue/protons/pos/proton_ue_pos_dcaz", "p DCAz in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - - registryData.add("data/ue/protons/neg/proton_ue_neg_tpc", "TPC #bar{p} PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("data/ue/protons/neg/proton_ue_neg_tof", "TOF #bar{p} PID in UE", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("data/ue/protons/neg/proton_ue_neg_pt", "#bar{p} pT in UE", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("data/ue/protons/neg/proton_ue_neg_eta", "#bar{p} Eta in UE", HistType::kTH1F, {{100, -1.0, 1.0, "#eta"}}); - registryData.add("data/ue/protons/neg/proton_ue_neg_dcaxy", "#bar{p} DCAxy in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{xy} (cm)"}}); - registryData.add("data/ue/protons/neg/proton_ue_neg_dcaz", "#bar{p} DCAz in UE", HistType::kTH1F, {{100, -0.1, 0.1, "DCA_{z} (cm)"}}); - registryData.add("data/ue/tracks_n_in_ue", "Number of tracks in UE", HistType::kTH1I, {{100, 0, 100, "N_{tracks}"}}); - - ////////////////////////////////////////////// - // MC - // RECONSTRUCTION - ////////////////////////////////////////////// - - registryData.add("mc/n_events", "Event counter", HistType::kTH1F, {{1, 0.5, 1.5, "N_{events}"}}); - - registryData.add("mc/reconstruction/pions/rec_pion_all", "All Tracks PID'd as Pions", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/mc_rec_pion_pt", "True Primary Pions (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/mc_sec_pion_pt", "Secondary Pions (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/contamination_matrix_pion", "Pion PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/pions/pos/mc_rec_pion_pos_pt", "Reconstructed Primary #pi^{+} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/pos/contamination_matrix_pion_pos", "#pi^{+} PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/pions/neg/mc_rec_pion_neg_pt", "Reconstructed Primary #pi^{-} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/neg/contamination_matrix_pion_neg", "#pi^{-} PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/pos/rec_pion_pos_all", "All Tracks PID'd as #pi^{+}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/neg/rec_pion_neg_all", "All Tracks PID'd as #pi^{-}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/pos/mc_sec_pion_pos_pt", "Secondary #pi^{+} (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/neg/mc_sec_pion_neg_pt", "Secondary #pi^{-} (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/kaons/rec_kaon_all", "All Tracks PID'd as Kaons", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/mc_rec_kaon_pt", "True Primary Kaons (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/mc_sec_kaon_pt", "Secondary Kaons (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/contamination_matrix_kaon", "Kaon PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/kaons/pos/mc_rec_kaon_pos_pt", "Reconstructed Primary K^{+} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/pos/contamination_matrix_kaon_pos", "K^{+} PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/kaons/pos/rec_kaon_pos_all", "All Tracks PID'd as K^{+}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/neg/rec_kaon_neg_all", "All Tracks PID'd as K^{-}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/pos/mc_sec_kaon_pos_pt", "Secondary K^{+} (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/neg/mc_sec_kaon_neg_pt", "Secondary K^{-} (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/neg/mc_rec_kaon_neg_pt", "Reconstructed Primary K^{-} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/neg/contamination_matrix_kaon_neg", "K^{-} PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/protons/rec_proton_all", "All Tracks PID'd as Protons", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/mc_rec_proton_pt", "True Primary Protons (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/mc_sec_proton_pt", "Secondary Protons (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/contamination_matrix_proton", "Proton PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/protons/pos/mc_rec_proton_pos_pt", "Reconstructed Primary p pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/pos/contamination_matrix_proton_pos", "p PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/protons/neg/mc_rec_proton_neg_pt", "Reconstructed Primary #bar{p} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/neg/contamination_matrix_proton_neg", "#bar{p} PID Contamination", HistType::kTH2F, {{8000, -4000.5, 3999.5, "PDG Code"}, {120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/pos/rec_proton_pos_all", "All Tracks PID'd as p", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/neg/rec_proton_neg_all", "All Tracks PID'd as #bar{p}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/pos/mc_sec_proton_pos_pt", "Secondary p (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/neg/mc_sec_proton_neg_pt", "Secondary #bar{p} (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/pions/pos/rec_pion_pos_tpc", "MC TPC #pi^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("mc/reconstruction/pions/pos/rec_pion_pos_tof", "MC TOF #pi^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("mc/reconstruction/pions/neg/rec_pion_neg_tpc", "MC TPC #pi^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("mc/reconstruction/pions/neg/rec_pion_neg_tof", "MC TOF #pi^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - - registryData.add("mc/reconstruction/kaons/pos/rec_kaon_pos_tpc", "MC TPC K^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("mc/reconstruction/kaons/pos/rec_kaon_pos_tof", "MC TOF K^{+} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("mc/reconstruction/kaons/neg/rec_kaon_neg_tpc", "MC TPC K^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("mc/reconstruction/kaons/neg/rec_kaon_neg_tof", "MC TOF K^{-} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - - registryData.add("mc/reconstruction/protons/pos/rec_proton_pos_tpc", "MC TPC p PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("mc/reconstruction/protons/pos/rec_proton_pos_tof", "MC TOF p PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - registryData.add("mc/reconstruction/protons/neg/rec_proton_neg_tpc", "MC TPC #bar{p} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TPC}"}}); - registryData.add("mc/reconstruction/protons/neg/rec_proton_neg_tof", "MC TOF #bar{p} PID", HistType::kTH2F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}, {200, -3.0, 3.0, "n#sigma_{TOF}"}}); - ////////////////////////////////////////////// - // MC - // TRUTH - ////////////////////////////////////////////// - - registryData.add("mc/truth/pions/mc_gen_pion_pt", "Generated Primary Pions (Truth)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/truth/pions/pos/mc_gen_pion_pos_pt", "Generated Primary #pi^{+} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/truth/pions/neg/mc_gen_pion_neg_pt", "Generated Primary #pi^{-} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/truth/kaons/mc_gen_kaon_pt", "Generated Primary Kaons (Truth)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/truth/kaons/pos/mc_gen_kaon_pos_pt", "Generated Primary K^{+} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/truth/kaons/neg/mc_gen_kaon_neg_pt", "Generated Primary K^{-} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/truth/protons/mc_gen_proton_pt", "Generated Primary Protons (Truth)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/truth/protons/pos/mc_gen_proton_pos_pt", "Generated Primary p pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/truth/protons/neg/mc_gen_proton_neg_pt", "Generated Primary #bar{p} pT", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/hadrons/rec_hadron_all", "All Tracks (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/hadrons/rec_hadron_tof_match", "All Tracks (Reconstructed) with TOF signal", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/hadrons/mc_rec_hadron_pt", "True Primary Tracks (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/hadrons/mc_sec_hadron_pt", "Secondary Tracks (Reconstructed)", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/truth/hadrons/mc_gen_hadron_pt", "Generated Primary Tracks", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/pions/pos/rec_pion_pos_tof_matched", "MC TOF Matched #pi^{+}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/pions/neg/rec_pion_neg_tof_matched", "MC TOF Matched #pi^{-}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/kaons/pos/rec_kaon_pos_tof_matched", "MC TOF Matched K^{+}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/kaons/neg/rec_kaon_neg_tof_matched", "MC TOF Matched K^{-}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - - registryData.add("mc/reconstruction/protons/pos/rec_proton_pos_tof_matched", "MC TOF Matched p", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); - registryData.add("mc/reconstruction/protons/neg/rec_proton_neg_tof_matched", "MC TOF Matched #bar{p}", HistType::kTH1F, {{120, 0.0, 4.0, "#it{p}_{T} (GeV/#it{c})"}}); + registryMC.add("mc/jets/matched/truth/protons/n_protons_per_jet", "Multiplicity of generated p+#bar{p} in particle-level matched jets;N_{p+#bar{p}};N_{jets}", HistType::kTH1D, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/protons/n_protons_vs_jet_pt", "Multiplicity of generated p+#bar{p} vs particle-level matched jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});N_{p+#bar{p}}", HistType::kTH2I, {axis.axisJetPt, axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/protons/proton_pt_vs_jet_pt", "Generated p+#bar{p} #it{p}_{T} vs particle-level matched jet #it{p}_{T};#it{p}_{T,jet}^{part} (GeV/#it{c});#it{p}_{T} (GeV/#it{c})", HistType::kTH2F, {axis.axisJetPt, axis.axisPt}); + registryMC.add("mc/jets/matched/truth/protons/mc_gen_proton_pt", "Transverse-momentum distribution of generated primary p+#bar{p} in particle-level matched jets;#it{p}_{T} (GeV/#it{c});N_{p+#bar{p}}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/truth/protons/pos/n_protons_per_jet", "Multiplicity of generated p in particle-level matched jets;N_{p};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/protons/pos/mc_gen_proton_pos_pt", "Transverse-momentum distribution of generated primary p in particle-level matched jets;#it{p}_{T} (GeV/#it{c});N_{p}", HistType::kTH1F, {axis.axisPt}); + registryMC.add("mc/jets/matched/truth/protons/neg/n_protons_per_jet", "Multiplicity of generated #bar{p} in particle-level matched jets;N_{#bar{p}};N_{jets}", HistType::kTH1I, {axis.axisMultiplicity}); + registryMC.add("mc/jets/matched/truth/protons/neg/mc_gen_proton_neg_pt", "Transverse-momentum distribution of generated primary #bar{p} in particle-level matched jets;#it{p}_{T} (GeV/#it{c});N_{#bar{p}}", HistType::kTH1F, {axis.axisPt}); + + // General Hadrons + registryMC.add("mc/jets/matched/truth/hadrons/mc_gen_hadron_pt", "Transverse-momentum distribution of generated primary hadrons in particle-level matched jets;#it{p}_{T} (GeV/#it{c});N_{hadrons}", HistType::kTH1F, {axis.axisPt}); } void getPerpendicularDirections(const TVector3& p, TVector3& u1, TVector3& u2) @@ -646,94 +981,100 @@ struct JetHadronsPid { double const buffer = 999.0; double pt = track.pt(); - double distForPionsPi = 0; - double distForPionsKa = 0; - double distForPionsPr = 0; + double dForPionsPi = 0; + double dForPionsKa = 0; + double dForPionsPr = 0; - double distForKaonsPi = 0; - double distForKaonsKa = 0; - double distForKaonsPr = 0; + double dForKaonsPi = 0; + double dForKaonsKa = 0; + double dForKaonsPr = 0; - double distForProtonsPi = 0; - double distForProtonsKa = 0; - double distForProtonsPr = 0; + double dForProtonsPi = 0; + double dForProtonsKa = 0; + double dForProtonsPr = 0; if (pt < cfg.ptThresholdPion) { - distForPionsPi = std::abs(track.tpcNSigmaPi()); - distForPionsKa = std::abs(track.tpcNSigmaKa()); - distForPionsPr = std::abs(track.tpcNSigmaPr()); + dForPionsPi = std::abs(track.tpcNSigmaPi()); + dForPionsKa = std::abs(track.tpcNSigmaKa()); + dForPionsPr = std::abs(track.tpcNSigmaPr()); } else { if (track.hasTOF()) { - distForPionsPi = std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi()); - distForPionsKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); - distForPionsPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); + dForPionsPi = std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi()); + dForPionsKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); + dForPionsPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); } else { - distForPionsPi = buffer; - distForPionsKa = buffer; - distForPionsPr = buffer; + dForPionsPi = buffer; + dForPionsKa = buffer; + dForPionsPr = buffer; } } if (pt < cfg.ptThresholdKaon) { - distForKaonsPi = std::abs(track.tpcNSigmaPi()); - distForKaonsKa = std::abs(track.tpcNSigmaKa()); - distForKaonsPr = std::abs(track.tpcNSigmaPr()); + dForKaonsPi = std::abs(track.tpcNSigmaPi()); + dForKaonsKa = std::abs(track.tpcNSigmaKa()); + dForKaonsPr = std::abs(track.tpcNSigmaPr()); } else { if (track.hasTOF()) { - distForKaonsPi = std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi()); - distForKaonsKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); - distForKaonsPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); + dForKaonsPi = std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi()); + dForKaonsKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); + dForKaonsPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); } else { - distForKaonsPi = buffer; - distForKaonsKa = buffer; - distForKaonsPr = buffer; + dForKaonsPi = buffer; + dForKaonsKa = buffer; + dForKaonsPr = buffer; } } if (pt < cfg.ptThresholdProton) { - distForProtonsPi = std::abs(track.tpcNSigmaPi()); - distForProtonsKa = std::abs(track.tpcNSigmaKa()); - distForProtonsPr = std::abs(track.tpcNSigmaPr()); + dForProtonsPi = std::abs(track.tpcNSigmaPi()); + dForProtonsKa = std::abs(track.tpcNSigmaKa()); + dForProtonsPr = std::abs(track.tpcNSigmaPr()); } else { if (track.hasTOF()) { - distForProtonsPi = std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi()); - distForProtonsKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); - distForProtonsPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); + dForProtonsPi = std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi()); + dForProtonsKa = std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa()); + dForProtonsPr = std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr()); } else { - distForProtonsPi = buffer; - distForProtonsKa = buffer; - distForProtonsPr = buffer; + dForProtonsPi = buffer; + dForProtonsKa = buffer; + dForProtonsPr = buffer; } } - bool isPiMatch = (distForPionsPi <= cfg.nSigmaCut); - bool isKaMatch = (distForKaonsKa <= cfg.nSigmaCut); - bool isPrMatch = (distForProtonsPr <= cfg.nSigmaCut); + bool isPiMatch = (dForPionsPi <= cfg.nSigmaCutPi); + bool isKaMatch = (dForKaonsKa <= cfg.nSigmaCutKa); + bool isPrMatch = (dForProtonsPr <= cfg.nSigmaCutPr); PidResult res{.isPion = false, .isKaon = false, .isProton = false}; if (cfg.pidMethod == ClosestMatch) { - if (isPiMatch && distForPionsPi < distForPionsKa && distForPionsPi < distForPionsPr) { + if (isPiMatch && dForPionsPi < dForPionsKa && dForPionsPi < dForPionsPr) { res.isPion = true; - } else if (isKaMatch && distForKaonsKa < distForKaonsPi && distForKaonsKa < distForKaonsPr) { + } + if (isKaMatch && dForKaonsKa < dForKaonsPi && dForKaonsKa < dForKaonsPr) { res.isKaon = true; - } else if (isPrMatch && distForProtonsPr < distForProtonsPi && distForProtonsPr < distForProtonsKa) { + } + if (isPrMatch && dForProtonsPr < dForProtonsPi && dForProtonsPr < dForProtonsKa) { res.isProton = true; } } else if (cfg.pidMethod == ExclusiveMatch) { if (isPiMatch && !isKaMatch && !isPrMatch) { res.isPion = true; - } else if (isKaMatch && !isPiMatch && !isPrMatch) { + } + if (isKaMatch && !isPiMatch && !isPrMatch) { res.isKaon = true; - } else if (isPrMatch && !isPiMatch && !isKaMatch) { + } + if (isPrMatch && !isPiMatch && !isKaMatch) { res.isProton = true; } } else if (cfg.pidMethod == RejectionBased) { - if (isPiMatch && distForPionsKa > cfg.rejectionSigma && distForPionsPr > cfg.rejectionSigma) { - res.isPion = true; - } else if (isKaMatch && distForKaonsPi > cfg.rejectionSigma && distForKaonsPr > cfg.rejectionSigma) { + if (isKaMatch && dForKaonsPi > cfg.rejectionSigma && dForKaonsPr > cfg.rejectionSigma) { res.isKaon = true; - } else if (isPrMatch && distForProtonsPi > cfg.rejectionSigma && distForProtonsKa > cfg.rejectionSigma) { + } + if (isPiMatch && dForPionsKa > cfg.rejectionSigma && dForPionsPr > cfg.rejectionSigma) { + res.isPion = true; + } + if (isPrMatch && dForProtonsPi > cfg.rejectionSigma && dForProtonsKa > cfg.rejectionSigma) { res.isProton = true; } } @@ -825,13 +1166,6 @@ struct JetHadronsPid { } ++nSelectedTracks; - - const double p = track.p(); - registryData.fill(HIST("data/pure/tpc_signal_vs_p"), p, track.tpcSignal()); - if (track.hasTOF()) { - registryData.fill(HIST("data/pure/tof_beta_vs_p"), p, track.beta()); - } - double pt = track.pt(); double eta = track.eta(); double dcaxy = track.dcaXY(); @@ -839,23 +1173,30 @@ struct JetHadronsPid { int charge = track.sign(); double phi = track.phi(); + const double p = track.p(); + registryData.fill(HIST("data/pure/general/tpc_signal_vs_p"), p, track.tpcSignal()); + if (track.hasTOF()) { + registryData.fill(HIST("data/pure/general/tof_beta_vs_p"), p, track.beta()); + } + PidResult pid = getPid(track); if (pid.isPion) { - registryData.fill(HIST("data/pure/after_pid/pion_tpc_signal_vs_p"), p, track.tpcSignal()); + registryData.fill(HIST("data/pure/pions/pion_tpc_signal_vs_p"), p, track.tpcSignal()); registryData.fill(HIST("data/pure/pions/pion_pure_tpc"), pt, track.tpcNSigmaPi()); registryData.fill(HIST("data/pure/pions/pion_pure_eta_phi"), phi, eta); if (track.hasTOF()) { registryData.fill( - HIST("data/pure/after_pid/pion_tof_beta_vs_p"), + HIST("data/pure/pions/pion_tof_beta_vs_p"), p, track.beta()); registryData.fill(HIST("data/pure/pions/pion_pure_tof"), pt, track.tofNSigmaPi()); + registryData.fill(HIST("data/pure/pions/pion_pure_combined_tof_tpc"), pt, std::hypot(track.tofNSigmaPi(), track.tpcNSigmaPi())); } registryData.fill(HIST("data/pure/pions/pion_pure_pt"), pt); registryData.fill(HIST("data/pure/pions/pion_pure_eta"), eta); - registryData.fill(HIST("data/pure/pions/pion_pure_dcaxy"), dcaxy); - registryData.fill(HIST("data/pure/pions/pion_pure_dcaz"), dcaz); + registryData.fill(HIST("data/pure/pions/pion_pure_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/pure/pions/pion_pure_dcaz"), pt, dcaz); if (charge > 0) { registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_tpc"), pt, track.tpcNSigmaPi()); @@ -867,8 +1208,8 @@ struct JetHadronsPid { } registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_pt"), pt); registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_eta"), eta); - registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_dcaxy"), dcaxy); - registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_dcaz"), dcaz); + registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/pure/pions/pos/pion_pure_pos_dcaz"), pt, dcaz); } else { registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_tpc"), pt, track.tpcNSigmaPi()); registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_phi_vs_pt"), pt, phi); @@ -879,26 +1220,27 @@ struct JetHadronsPid { } registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_pt"), pt); registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_eta"), eta); - registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_dcaxy"), dcaxy); - registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_dcaz"), dcaz); + registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/pure/pions/neg/pion_pure_neg_dcaz"), pt, dcaz); } } if (pid.isKaon) { - registryData.fill(HIST("data/pure/after_pid/kaon_tpc_signal_vs_p"), track.p(), track.tpcSignal()); + registryData.fill(HIST("data/pure/kaons/kaon_tpc_signal_vs_p"), track.p(), track.tpcSignal()); registryData.fill(HIST("data/pure/kaons/kaon_pure_tpc"), pt, track.tpcNSigmaKa()); registryData.fill(HIST("data/pure/kaons/kaon_pure_eta_phi"), phi, eta); if (track.hasTOF()) { registryData.fill( - HIST("data/pure/after_pid/kaon_tof_beta_vs_p"), + HIST("data/pure/kaons/kaon_tof_beta_vs_p"), p, track.beta()); registryData.fill(HIST("data/pure/kaons/kaon_pure_tof"), pt, track.tofNSigmaKa()); + registryData.fill(HIST("data/pure/kaons/kaon_pure_combined_tof_tpc"), pt, std::hypot(track.tofNSigmaKa(), track.tpcNSigmaKa())); } registryData.fill(HIST("data/pure/kaons/kaon_pure_pt"), pt); registryData.fill(HIST("data/pure/kaons/kaon_pure_eta"), eta); - registryData.fill(HIST("data/pure/kaons/kaon_pure_dcaxy"), dcaxy); - registryData.fill(HIST("data/pure/kaons/kaon_pure_dcaz"), dcaz); + registryData.fill(HIST("data/pure/kaons/kaon_pure_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/pure/kaons/kaon_pure_dcaz"), pt, dcaz); if (charge > 0) { registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_tpc"), pt, track.tpcNSigmaKa()); @@ -910,8 +1252,8 @@ struct JetHadronsPid { } registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_pt"), pt); registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_eta"), eta); - registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_dcaxy"), dcaxy); - registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_dcaz"), dcaz); + registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/pure/kaons/pos/kaon_pure_pos_dcaz"), pt, dcaz); } else { registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_tpc"), pt, track.tpcNSigmaKa()); registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_phi_vs_pt"), pt, phi); @@ -922,26 +1264,27 @@ struct JetHadronsPid { } registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_pt"), pt); registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_eta"), eta); - registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_dcaxy"), dcaxy); - registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_dcaz"), dcaz); + registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/pure/kaons/neg/kaon_pure_neg_dcaz"), pt, dcaz); } } if (pid.isProton) { - registryData.fill(HIST("data/pure/after_pid/proton_tpc_signal_vs_p"), track.p(), track.tpcSignal()); + registryData.fill(HIST("data/pure/protons/proton_tpc_signal_vs_p"), track.p(), track.tpcSignal()); registryData.fill(HIST("data/pure/protons/proton_pure_tpc"), pt, track.tpcNSigmaPr()); registryData.fill(HIST("data/pure/protons/proton_pure_eta_phi"), phi, eta); if (track.hasTOF()) { registryData.fill( - HIST("data/pure/after_pid/proton_tof_beta_vs_p"), + HIST("data/pure/protons/proton_tof_beta_vs_p"), p, track.beta()); registryData.fill(HIST("data/pure/protons/proton_pure_tof"), pt, track.tofNSigmaPr()); + registryData.fill(HIST("data/pure/protons/proton_pure_combined_tof_tpc"), pt, std::hypot(track.tofNSigmaPr(), track.tpcNSigmaPr())); } registryData.fill(HIST("data/pure/protons/proton_pure_pt"), pt); registryData.fill(HIST("data/pure/protons/proton_pure_eta"), eta); - registryData.fill(HIST("data/pure/protons/proton_pure_dcaxy"), dcaxy); - registryData.fill(HIST("data/pure/protons/proton_pure_dcaz"), dcaz); + registryData.fill(HIST("data/pure/protons/proton_pure_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/pure/protons/proton_pure_dcaz"), pt, dcaz); if (charge > 0) { registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_tpc"), pt, track.tpcNSigmaPr()); @@ -953,8 +1296,8 @@ struct JetHadronsPid { } registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_pt"), pt); registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_eta"), eta); - registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_dcaxy"), dcaxy); - registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_dcaz"), dcaz); + registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/pure/protons/pos/proton_pure_pos_dcaz"), pt, dcaz); } else { registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_tpc"), pt, track.tpcNSigmaPr()); registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_phi_vs_pt"), pt, phi); @@ -965,184 +1308,580 @@ struct JetHadronsPid { } registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_pt"), pt); registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_eta"), eta); - registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_dcaxy"), dcaxy); - registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_dcaz"), dcaz); + registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/pure/protons/neg/proton_pure_neg_dcaz"), pt, dcaz); } } } - registryData.fill(HIST("data/jets/total_tracks_pure_vs_jets"), 1.0, static_cast(nSelectedTracks)); + registryData.fill(HIST("data/jets/general/total_tracks_pure_vs_jets"), 1.0, static_cast(nSelectedTracks)); } PROCESS_SWITCH(JetHadronsPid, processPureTracks, "Pure Tracks Analysis", true); - void processJets(JetEvents::iterator const& collision, - soa::Join const& jets, - soa::Join const&, - HadronTracks const& globalTracks) + void processMC(soa::Join::iterator const& collision, HadronTracksMC const& tracks, aod::McParticles const& particles) { - registryData.fill(HIST("data/jets/n_events_raw"), 1); - - if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) { + if (!collision.sel8() || std::abs(collision.posZ()) > zVtx) { return; } - - float zVertex = collision.posZ(); - if (std::abs(zVertex) > zVtx) { + if (rejectITSROFBorder && !collision.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)) { + return; + } + if (rejectTFBorder && !collision.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)) { + return; + } + if (requireVtxITSTPC && !collision.selection_bit(o2::aod::evsel::kIsVertexITSTPC)) { + return; + } + if (rejectSameBunchPileup && !collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) { + return; + } + if (requireIsGoodZvtxFT0VsPV && !collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) { + return; + } + if (requireIsVertexTOFmatched && !collision.selection_bit(o2::aod::evsel::kIsVertexTOFmatched)) { return; } - registryData.fill(HIST("data/jets/n_events"), 1); - registryData.fill(HIST("data/jets/z_vtx"), zVertex); - - double centralRho = collision.rho(); - int jetsInCollision = 0; + registryMC.fill(HIST("mc/matched/general/n_events"), 1); + registryMC.fill(HIST("mc/matched/general/z_vertex"), collision.posZ()); + registryMC.fill(HIST("mc/matched/general/x_vertex"), collision.posX()); + registryMC.fill(HIST("mc/matched/general/y_vertex"), collision.posY()); + registryMC.fill(HIST("mc/matched/general/xy_vertex"), collision.posX(), collision.posY()); + registryMC.fill(HIST("mc/matched/general/n_contributors"), collision.numContrib()); - auto collTracks = globalTracks.sliceBy(tracksPerCollision, collision.collisionId()); - int tracksInJetsCollision = 0; + if (!collision.has_mcCollision()) { + return; + } - for (auto const& jet : jets) { + auto particlesPerCollision = particles.sliceBy(mcParticlesPerCollision, collision.mcCollisionId()); - if (!isppRefAnalysis && ((std::abs(jet.eta()) + rJet) > (maxEta - deltaEtaEdge))) { - continue; - } - if (isppRefAnalysis && std::abs(jet.eta()) > cfgEtaJetMax) { - continue; - } + for (auto const& track : tracks) { - if (isppRefAnalysis && (jet.pt() < minJetPt || jet.pt() > maxJetPt)) { + if (!passedTrackSelection(track)) { continue; } - double ptSub = jet.pt() - (centralRho * jet.area()); - if (ptSub < 0) { - ptSub = 0.0; - } - - if (!isppRefAnalysis && (ptSub < minJetPt || ptSub > maxJetPt)) { - continue; - } + double pt = track.pt(); + double eta = track.eta(); + double phi = track.phi(); + double dcaxy = track.dcaXY(); + double dcaz = track.dcaZ(); + const double p = track.p(); - double normalizedJetArea = jet.area() / (PI * rJet * rJet); - if (applyAreaCut && normalizedJetArea < minNormalizedJetArea) { + if (!track.has_mcParticle()) { continue; } + auto const& trueParticle = track.mcParticle(); + int pdg = std::abs(trueParticle.pdgCode()); - jetsInCollision++; + int realpdg = trueParticle.pdgCode(); + bool isPrimary = trueParticle.isPhysicalPrimary(); + int charge = track.sign(); - registryData.fill(HIST("data/jets/jet_pt_subtracted"), ptSub); - registryData.fill(HIST("data/jets/jet_pt_raw_vs_sub"), jet.pt(), ptSub); + registryMC.fill(HIST("mc/matched/reconstruction/general/tpc_signal_vs_p"), p, track.tpcSignal()); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/general/tof_beta_vs_p"), p, track.beta()); + } - registryData.fill(HIST("data/jets/jet_eta"), jet.eta()); - registryData.fill(HIST("data/jets/jet_phi"), jet.phi()); - registryData.fill(HIST("data/jets/jet_area"), jet.area()); - registryData.fill(HIST("data/jets/jet_pt"), jet.pt()); + registryMC.fill(HIST("mc/matched/reconstruction/hadrons/rec_hadron_all"), pt); - const double magnitudeThreshold = 1e-9; - TVector3 jetAxis(jet.px(), jet.py(), jet.pz()); - TVector3 ueAxis1(0, 0, 0), ueAxis2(0, 0, 0); - getPerpendicularDirections(jetAxis, ueAxis1, ueAxis2); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/hadrons/rec_hadron_tof_match"), pt); + } - if (ueAxis1.Mag() < magnitudeThreshold || ueAxis2.Mag() < magnitudeThreshold) { - continue; + if (isPrimary) { + registryMC.fill(HIST("mc/matched/reconstruction/hadrons/mc_rec_hadron_pt"), pt); + } else { + registryMC.fill(HIST("mc/matched/reconstruction/hadrons/mc_sec_hadron_pt"), pt); } - int selectedConstituentCount = 0; + PidResult pid = getPid(track); - int nPionsInJet = 0; - int nKaonsInJet = 0; - int nProtonsInJet = 0; + if (pid.isPion) { + registryMC.fill(HIST("mc/matched/reconstruction/pions/rec_pion_all"), pt); + registryMC.fill(HIST("mc/matched/reconstruction/pions/contamination_matrix_pion"), realpdg, pt); + registryMC.fill(HIST("mc/matched/reconstruction/pions/pion_tpc_signal_vs_p"), p, track.tpcSignal()); + registryMC.fill(HIST("mc/matched/reconstruction/pions/rec_pion_eta"), eta); + registryMC.fill(HIST("mc/matched/reconstruction/pions/rec_pion_eta_phi"), phi, eta); + registryMC.fill(HIST("mc/matched/reconstruction/pions/rec_pion_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/matched/reconstruction/pions/rec_pion_dcaz"), pt, dcaz); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/pions/pion_tof_beta_vs_p"), p, track.beta()); + } - int nPionsInJetPos = 0; - int nKaonsInJetPos = 0; - int nProtonsInJetPos = 0; + if (charge > 0) { - int nPionsInJetNeg = 0; - int nKaonsInJetNeg = 0; - int nProtonsInJetNeg = 0; + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/rec_pion_pos_all"), pt); - for (auto const& jtrack : jet.tracks_as>()) { + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/rec_pion_pos_tof_matched"), pt); + } + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/contamination_matrix_pion_pos"), realpdg, pt); - auto track = jtrack.track_as(); + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/rec_pion_pos_tpc"), pt, track.tpcNSigmaPi()); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/rec_pion_pos_tof"), pt, track.tofNSigmaPi()); + } + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/rec_pion_pos_eta"), eta); + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/rec_pion_pos_eta_phi"), phi, eta); + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/rec_pion_pos_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/rec_pion_pos_dcaz"), pt, dcaz); + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/rec_pion_pos_phi_vs_pt"), pt, phi); + } else { + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/rec_pion_neg_all"), pt); - if (!passedTrackSelection(track)) { - continue; - } - tracksInJetsCollision++; + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/rec_pion_neg_tof_matched"), pt); + } + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/contamination_matrix_pion_neg"), realpdg, pt); - selectedConstituentCount++; - const double p = track.p(); + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/rec_pion_neg_tpc"), pt, track.tpcNSigmaPi()); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/rec_pion_neg_tof"), pt, track.tofNSigmaPi()); + } + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/rec_pion_neg_eta"), eta); + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/rec_pion_neg_eta_phi"), phi, eta); + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/rec_pion_neg_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/rec_pion_neg_dcaz"), pt, dcaz); + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/rec_pion_neg_phi_vs_pt"), pt, phi); + } - registryData.fill(HIST("data/jets/tpc_signal_vs_p"), p, track.tpcSignal()); + if (isPrimary) { + registryMC.fill(HIST("mc/matched/reconstruction/pions/mc_rec_pion_pt"), pt); + if (charge > 0) { + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/mc_rec_pion_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/mc_rec_pion_neg_pt"), pt); + } + } else { + if (pdg == PDG_t::kPiPlus) { + registryMC.fill(HIST("mc/matched/reconstruction/pions/mc_sec_pion_pt"), pt); + if (charge > 0) { + registryMC.fill(HIST("mc/matched/reconstruction/pions/pos/mc_sec_pion_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/matched/reconstruction/pions/neg/mc_sec_pion_neg_pt"), pt); + } + } + } + } + if (pid.isKaon) { + registryMC.fill(HIST("mc/matched/reconstruction/kaons/rec_kaon_all"), pt); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/contamination_matrix_kaon"), realpdg, pt); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/kaon_tpc_signal_vs_p"), p, track.tpcSignal()); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/rec_kaon_eta"), eta); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/rec_kaon_eta_phi"), phi, eta); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/rec_kaon_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/rec_kaon_dcaz"), pt, dcaz); if (track.hasTOF()) { - registryData.fill(HIST("data/jets/tof_beta_vs_p"), p, track.beta()); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/kaon_tof_beta_vs_p"), p, track.beta()); } - double pt = track.pt(); - double eta = track.eta(); - double dcaxy = track.dcaXY(); - double dcaz = track.dcaZ(); - int charge = track.sign(); - double phi = track.phi(); + if (charge > 0) { - double deltaEtaJet = track.eta() - jet.eta(); - double deltaPhiJet = RecoDecay::constrainAngle(track.phi() - jet.phi(), -PI); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_all"), pt); - registryData.fill(HIST("data/jets/cone/all_tracks"), deltaEtaJet, deltaPhiJet, pt); - registryData.fill(HIST("data/jets/cone/all_tracks_2d"), deltaEtaJet, deltaPhiJet); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_tof_matched"), pt); + } + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/contamination_matrix_kaon_pos"), realpdg, pt); - PidResult pid = getPid(track); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_tpc"), pt, track.tpcNSigmaKa()); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_tof"), pt, track.tofNSigmaKa()); + } + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_eta"), eta); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_eta_phi"), phi, eta); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_dcaz"), pt, dcaz); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/rec_kaon_pos_phi_vs_pt"), pt, phi); + } else { - if (pid.isPion) { - registryData.fill(HIST("data/jets/after_pid/pion_tpc_signal_vs_p"), track.p(), track.tpcSignal()); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_all"), pt); if (track.hasTOF()) { - registryData.fill( - HIST("data/jets/after_pid/pion_tof_beta_vs_p"), - p, - track.beta()); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_tof_matched"), pt); } + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/contamination_matrix_kaon_neg"), realpdg, pt); - if (charge > 0) { - nPionsInJetPos++; - - registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_tpc"), pt, track.tpcNSigmaPi()); - registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_phi_vs_pt"), pt, phi); - registryData.fill(HIST("data/jets/cone/pions/pion_pos"), deltaEtaJet, deltaPhiJet, pt); - registryData.fill(HIST("data/jets/cone/pions/pion_pos_2d"), deltaEtaJet, deltaPhiJet); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_tpc"), pt, track.tpcNSigmaKa()); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_tof"), pt, track.tofNSigmaKa()); + } + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_eta"), eta); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_eta_phi"), phi, eta); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_dcaz"), pt, dcaz); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/rec_kaon_neg_phi_vs_pt"), pt, phi); + } - if (track.hasTOF()) { - registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_tof"), pt, track.tofNSigmaPi()); - } - registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_pt"), pt); - registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_eta"), eta); - registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_dcaxy"), dcaxy); - registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_dcaz"), dcaz); + if (isPrimary) { + registryMC.fill(HIST("mc/matched/reconstruction/kaons/mc_rec_kaon_pt"), pt); + if (charge > 0) { + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/mc_rec_kaon_pos_pt"), pt); } else { - nPionsInJetNeg++; - - registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_phi_vs_pt"), pt, phi); - registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_tpc"), pt, track.tpcNSigmaPi()); - registryData.fill(HIST("data/jets/cone/pions/pion_neg"), deltaEtaJet, deltaPhiJet, pt); - registryData.fill(HIST("data/jets/cone/pions/pion_neg_2d"), deltaEtaJet, deltaPhiJet); - if (track.hasTOF()) { - registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_tof"), pt, track.tofNSigmaPi()); + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/mc_rec_kaon_neg_pt"), pt); + } + } else { + if (pdg == PDG_t::kKPlus) { + registryMC.fill(HIST("mc/matched/reconstruction/kaons/mc_sec_kaon_pt"), pt); + if (charge > 0) { + registryMC.fill(HIST("mc/matched/reconstruction/kaons/pos/mc_sec_kaon_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/matched/reconstruction/kaons/neg/mc_sec_kaon_neg_pt"), pt); } - registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_pt"), pt); - registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_eta"), eta); - registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_dcaxy"), dcaxy); - registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_dcaz"), dcaz); + } + } + } + + if (pid.isProton) { + registryMC.fill(HIST("mc/matched/reconstruction/protons/rec_proton_all"), pt); + registryMC.fill(HIST("mc/matched/reconstruction/protons/contamination_matrix_proton"), realpdg, pt); + registryMC.fill(HIST("mc/matched/reconstruction/protons/proton_tpc_signal_vs_p"), p, track.tpcSignal()); + registryMC.fill(HIST("mc/matched/reconstruction/protons/rec_proton_eta"), eta); + registryMC.fill(HIST("mc/matched/reconstruction/protons/rec_proton_eta_phi"), phi, eta); + registryMC.fill(HIST("mc/matched/reconstruction/protons/rec_proton_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/matched/reconstruction/protons/rec_proton_dcaz"), pt, dcaz); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/protons/proton_tof_beta_vs_p"), p, track.beta()); + } + + if (charge > 0) { + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/rec_proton_pos_all"), pt); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/rec_proton_pos_tof_matched"), pt); + } + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/contamination_matrix_proton_pos"), realpdg, pt); + + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/rec_proton_pos_tpc"), pt, track.tpcNSigmaPr()); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/rec_proton_pos_tof"), pt, track.tofNSigmaPr()); + } + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/rec_proton_pos_eta"), eta); + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/rec_proton_pos_eta_phi"), phi, eta); + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/rec_proton_pos_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/rec_proton_pos_dcaz"), pt, dcaz); + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/rec_proton_pos_phi_vs_pt"), pt, phi); + } else { + + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/rec_proton_neg_all"), pt); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/rec_proton_neg_tof_matched"), pt); + } + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/contamination_matrix_proton_neg"), realpdg, pt); + + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/rec_proton_neg_tpc"), pt, track.tpcNSigmaPr()); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/rec_proton_neg_tof"), pt, track.tofNSigmaPr()); + } + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/rec_proton_neg_eta"), eta); + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/rec_proton_neg_eta_phi"), phi, eta); + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/rec_proton_neg_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/rec_proton_neg_dcaz"), pt, dcaz); + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/rec_proton_neg_phi_vs_pt"), pt, phi); + } + + if (isPrimary) { + registryMC.fill(HIST("mc/matched/reconstruction/protons/mc_rec_proton_pt"), pt); + if (charge > 0) { + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/mc_rec_proton_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/mc_rec_proton_neg_pt"), pt); + } + } else { + if (pdg == PDG_t::kProton) { + registryMC.fill(HIST("mc/matched/reconstruction/protons/mc_sec_proton_pt"), pt); + if (charge > 0) { + registryMC.fill(HIST("mc/matched/reconstruction/protons/pos/mc_sec_proton_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/matched/reconstruction/protons/neg/mc_sec_proton_neg_pt"), pt); + } + } + } + } + } + + for (auto const& mcpart : particlesPerCollision) { + + int realpdg = mcpart.pdgCode(); + int pdg = std::abs(realpdg); + bool isPrimary = mcpart.isPhysicalPrimary(); + double ptTrue = mcpart.pt(); + + if (!isPrimary) { + continue; + } + + if (mcpart.eta() < minEta || mcpart.eta() > maxEta) { + continue; + } + if (ptTrue < minPt || ptTrue > maxPt) { + continue; + } + + registryMC.fill(HIST("mc/matched/truth/hadrons/mc_gen_hadron_pt"), ptTrue); + + if (pdg == PDG_t::kPiPlus) { + if (ptTrue >= cfg.minPtPion && ptTrue <= cfg.maxPtPion) { + registryMC.fill(HIST("mc/matched/truth/pions/mc_gen_pion_pt"), ptTrue); + if (realpdg > 0) { + registryMC.fill(HIST("mc/matched/truth/pions/pos/mc_gen_pion_pos_pt"), ptTrue); + } else { + registryMC.fill(HIST("mc/matched/truth/pions/neg/mc_gen_pion_neg_pt"), ptTrue); + } + } + } else if (pdg == PDG_t::kKPlus) { + if (ptTrue >= cfg.minPtKaon && ptTrue <= cfg.maxPtKaon) { + registryMC.fill(HIST("mc/matched/truth/kaons/mc_gen_kaon_pt"), ptTrue); + if (realpdg > 0) { + registryMC.fill(HIST("mc/matched/truth/kaons/pos/mc_gen_kaon_pos_pt"), ptTrue); + } else { + registryMC.fill(HIST("mc/matched/truth/kaons/neg/mc_gen_kaon_neg_pt"), ptTrue); + } + } + } else if (pdg == PDG_t::kProton) { + if (ptTrue >= cfg.minPtProton && ptTrue <= cfg.maxPtProton) { + registryMC.fill(HIST("mc/matched/truth/protons/mc_gen_proton_pt"), ptTrue); + if (realpdg > 0) { + registryMC.fill(HIST("mc/matched/truth/protons/pos/mc_gen_proton_pos_pt"), ptTrue); + } else { + registryMC.fill(HIST("mc/matched/truth/protons/neg/mc_gen_proton_neg_pt"), ptTrue); + } + } + } + } + } + PROCESS_SWITCH(JetHadronsPid, processMC, "Run on Monte Carlo", false); + + void processMCTruth(aod::McCollisions::iterator const& mcCollision, aod::McParticles const& mcParticles) + { + + if (std::abs(mcCollision.posZ()) > zVtx) { + return; + } + + registryMC.fill(HIST("mc/truth/general/n_events"), 1); + registryMC.fill(HIST("mc/truth/general/z_vtx"), mcCollision.posZ()); + + for (auto const& mcpart : mcParticles) { + + if (!mcpart.isPhysicalPrimary()) { + continue; + } + + if (mcpart.eta() < minEta || mcpart.eta() > maxEta) { + continue; + } + if (mcpart.pt() < minPt || mcpart.pt() > maxPt) { + continue; + } + + int originalPdg = mcpart.pdgCode(); + int pdg = std::abs(originalPdg); + double pt = mcpart.pt(); + + registryMC.fill(HIST("mc/truth/hadrons/mc_gen_hadron_pt"), pt); + + if (pdg == PDG_t::kPiPlus) { + if (pt >= cfg.minPtPion && pt <= cfg.maxPtPion) { + registryMC.fill(HIST("mc/truth/pions/mc_gen_pion_pt"), pt); + if (originalPdg > 0) { + registryMC.fill(HIST("mc/truth/pions/pos/mc_gen_pion_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/truth/pions/neg/mc_gen_pion_neg_pt"), pt); + } + } + } else if (pdg == PDG_t::kKPlus) { + if (pt >= cfg.minPtKaon && pt <= cfg.maxPtKaon) { + registryMC.fill(HIST("mc/truth/kaons/mc_gen_kaon_pt"), pt); + if (originalPdg > 0) { + registryMC.fill(HIST("mc/truth/kaons/pos/mc_gen_kaon_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/truth/kaons/neg/mc_gen_kaon_neg_pt"), pt); + } + } + } else if (pdg == PDG_t::kProton) { + if (pt >= cfg.minPtProton && pt <= cfg.maxPtProton) { + registryMC.fill(HIST("mc/truth/protons/mc_gen_proton_pt"), pt); + if (originalPdg > 0) { + registryMC.fill(HIST("mc/truth/protons/pos/mc_gen_proton_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/truth/protons/neg/mc_gen_proton_neg_pt"), pt); + } + } + } + } + } + PROCESS_SWITCH(JetHadronsPid, processMCTruth, "Run on Monte Carlo (Pure Truth)", false); + + void processJets(JetEvents::iterator const& collision, + soa::Join const& jets, + soa::Join const&, + HadronTracks const& globalTracks) + { + registryData.fill(HIST("data/jets/general/n_events_raw"), 1); + + if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) { + return; + } + + float zVertex = collision.posZ(); + if (std::abs(zVertex) > zVtx) { + return; + } + + registryData.fill(HIST("data/jets/general/n_events"), 1); + registryData.fill(HIST("data/jets/general/z_vtx"), zVertex); + + double centralRho = collision.rho(); + int jetsInCollision = 0; + + auto collTracks = globalTracks.sliceBy(tracksPerCollision, collision.collisionId()); + int tracksInJetsCollision = 0; + + for (auto const& jet : jets) { + + if (!isppRefAnalysis && ((std::abs(jet.eta()) + rJet) > (maxEta - deltaEtaEdge))) { + continue; + } + if (isppRefAnalysis && std::abs(jet.eta()) > cfgEtaJetMax) { + continue; + } + + if (isppRefAnalysis && (jet.pt() < minJetPt || jet.pt() > maxJetPt)) { + continue; + } + + double ptSub = jet.pt() - (centralRho * jet.area()); + if (ptSub < 0) { + ptSub = 0.0; + } + + if (!isppRefAnalysis && (ptSub < minJetPt || ptSub > maxJetPt)) { + continue; + } + + double normalizedJetArea = jet.area() / (PI * rJet * rJet); + if (applyAreaCut && normalizedJetArea < minNormalizedJetArea) { + continue; + } + + jetsInCollision++; + + registryData.fill(HIST("data/jets/general/jet_pt_subtracted"), ptSub); + registryData.fill(HIST("data/jets/general/jet_pt_raw_vs_sub"), jet.pt(), ptSub); + + registryData.fill(HIST("data/jets/general/jet_eta"), jet.eta()); + registryData.fill(HIST("data/jets/general/jet_phi"), jet.phi()); + registryData.fill(HIST("data/jets/general/jet_area"), jet.area()); + registryData.fill(HIST("data/jets/general/jet_pt"), jet.pt()); + registryData.fill(HIST("data/jets/general/jet_n_constituents"), jet.tracksIds().size()); + + const double magnitudeThreshold = 1e-9; + TVector3 jetAxis(jet.px(), jet.py(), jet.pz()); + TVector3 ueAxis1(0, 0, 0), ueAxis2(0, 0, 0); + getPerpendicularDirections(jetAxis, ueAxis1, ueAxis2); + + if (ueAxis1.Mag() < magnitudeThreshold || ueAxis2.Mag() < magnitudeThreshold) { + continue; + } + + int selectedConstituentCount = 0; + + int nPionsInJet = 0; + int nKaonsInJet = 0; + int nProtonsInJet = 0; + + int nPionsInJetPos = 0; + int nKaonsInJetPos = 0; + int nProtonsInJetPos = 0; + + int nPionsInJetNeg = 0; + int nKaonsInJetNeg = 0; + int nProtonsInJetNeg = 0; + + for (auto const& jtrack : jet.tracks_as>()) { + + auto track = jtrack.track_as(); + + if (!passedTrackSelection(track)) { + continue; + } + tracksInJetsCollision++; + + selectedConstituentCount++; + const double p = track.p(); + registryData.fill(HIST("data/jets/general/tpc_signal_vs_p"), p, track.tpcSignal()); + if (track.hasTOF()) { + registryData.fill(HIST("data/jets/general/tof_beta_vs_p"), p, track.beta()); + } + + double pt = track.pt(); + double eta = track.eta(); + double dcaxy = track.dcaXY(); + double dcaz = track.dcaZ(); + int charge = track.sign(); + double phi = track.phi(); + + double deltaEtaJet = track.eta() - jet.eta(); + double deltaPhiJet = RecoDecay::constrainAngle(track.phi() - jet.phi(), -PI); + + registryData.fill(HIST("data/jets/cone/all_tracks"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/all_tracks_2d"), deltaEtaJet, deltaPhiJet); + + PidResult pid = getPid(track); + + if (pid.isPion) { + + registryData.fill(HIST("data/jets/pions/pion_tpc_signal_vs_p"), p, track.tpcSignal()); + if (track.hasTOF()) { + registryData.fill(HIST("data/jets/pions/pion_jet_tof"), pt, track.tofNSigmaPi()); + registryData.fill(HIST("data/jets/pions/pion_tof_beta_vs_p"), p, track.beta()); + } + registryData.fill(HIST("data/jets/pions/pion_jet_tpc"), pt, track.tpcNSigmaPi()); + registryData.fill(HIST("data/jets/pions/pion_pt_vs_jet_pt"), jet.pt(), pt); + + if (charge > 0) { + nPionsInJetPos++; + + registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_tpc"), pt, track.tpcNSigmaPi()); + registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_phi_vs_pt"), pt, phi); + registryData.fill(HIST("data/jets/cone/pions/pion_pos"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/pions/pion_pos_2d"), deltaEtaJet, deltaPhiJet); + + if (track.hasTOF()) { + registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_tof"), pt, track.tofNSigmaPi()); + } + registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_pt"), pt); + registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_eta"), eta); + registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/jets/pions/pos/pion_jet_pos_dcaz"), pt, dcaz); + } else { + nPionsInJetNeg++; + + registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_phi_vs_pt"), pt, phi); + registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_tpc"), pt, track.tpcNSigmaPi()); + registryData.fill(HIST("data/jets/cone/pions/pion_neg"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/pions/pion_neg_2d"), deltaEtaJet, deltaPhiJet); + if (track.hasTOF()) { + registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_tof"), pt, track.tofNSigmaPi()); + } + registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_pt"), pt); + registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_eta"), eta); + registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/jets/pions/neg/pion_jet_neg_dcaz"), pt, dcaz); } } if (pid.isKaon) { - registryData.fill(HIST("data/jets/after_pid/kaon_tpc_signal_vs_p"), track.p(), track.tpcSignal()); + registryData.fill(HIST("data/jets/kaons/kaon_tpc_signal_vs_p"), p, track.tpcSignal()); if (track.hasTOF()) { - registryData.fill( - HIST("data/jets/after_pid/kaon_tof_beta_vs_p"), - p, - track.beta()); + registryData.fill(HIST("data/jets/kaons/kaon_jet_tof"), pt, track.tofNSigmaKa()); + registryData.fill(HIST("data/jets/kaons/kaon_tof_beta_vs_p"), p, track.beta()); } + registryData.fill(HIST("data/jets/kaons/kaon_jet_tpc"), pt, track.tpcNSigmaKa()); + registryData.fill(HIST("data/jets/kaons/kaon_pt_vs_jet_pt"), jet.pt(), pt); + if (charge > 0) { nKaonsInJetPos++; @@ -1156,8 +1895,8 @@ struct JetHadronsPid { } registryData.fill(HIST("data/jets/kaons/pos/kaon_jet_pos_pt"), pt); registryData.fill(HIST("data/jets/kaons/pos/kaon_jet_pos_eta"), eta); - registryData.fill(HIST("data/jets/kaons/pos/kaon_jet_pos_dcaxy"), dcaxy); - registryData.fill(HIST("data/jets/kaons/pos/kaon_jet_pos_dcaz"), dcaz); + registryData.fill(HIST("data/jets/kaons/pos/kaon_jet_pos_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/jets/kaons/pos/kaon_jet_pos_dcaz"), pt, dcaz); } else { nKaonsInJetNeg++; @@ -1170,108 +1909,77 @@ struct JetHadronsPid { } registryData.fill(HIST("data/jets/kaons/neg/kaon_jet_neg_pt"), pt); registryData.fill(HIST("data/jets/kaons/neg/kaon_jet_neg_eta"), eta); - registryData.fill(HIST("data/jets/kaons/neg/kaon_jet_neg_dcaxy"), dcaxy); - registryData.fill(HIST("data/jets/kaons/neg/kaon_jet_neg_dcaz"), dcaz); + registryData.fill(HIST("data/jets/kaons/neg/kaon_jet_neg_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/jets/kaons/neg/kaon_jet_neg_dcaz"), pt, dcaz); } } if (pid.isProton) { - registryData.fill(HIST("data/jets/after_pid/proton_tpc_signal_vs_p"), track.p(), track.tpcSignal()); + registryData.fill(HIST("data/jets/protons/proton_tpc_signal_vs_p"), p, track.tpcSignal()); if (track.hasTOF()) { - registryData.fill( - HIST("data/jets/after_pid/proton_tof_beta_vs_p"), - p, - track.beta()); + registryData.fill(HIST("data/jets/protons/proton_jet_tof"), pt, track.tofNSigmaPr()); + registryData.fill(HIST("data/jets/protons/proton_tof_beta_vs_p"), p, track.beta()); } + registryData.fill(HIST("data/jets/protons/proton_jet_tpc"), pt, track.tpcNSigmaPr()); + registryData.fill(HIST("data/jets/protons/proton_pt_vs_jet_pt"), jet.pt(), pt); + if (charge > 0) { nProtonsInJetPos++; registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_phi_vs_pt"), pt, phi); registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_tpc"), pt, track.tpcNSigmaPr()); - registryData.fill(HIST("data/jets/cone/protons/proton"), deltaEtaJet, deltaPhiJet, pt); - registryData.fill(HIST("data/jets/cone/protons/proton_2d"), deltaEtaJet, deltaPhiJet); + registryData.fill(HIST("data/jets/cone/protons/proton_pos"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/protons/proton_pos_2d"), deltaEtaJet, deltaPhiJet); if (track.hasTOF()) { registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_tof"), pt, track.tofNSigmaPr()); } registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_pt"), pt); registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_eta"), eta); - registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_dcaxy"), dcaxy); - registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_dcaz"), dcaz); + registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/jets/protons/pos/proton_jet_pos_dcaz"), pt, dcaz); } else { nProtonsInJetNeg++; - registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_phi_vs_pt"), pt, phi); registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_tpc"), pt, track.tpcNSigmaPr()); - registryData.fill(HIST("data/jets/cone/protons/antiproton"), deltaEtaJet, deltaPhiJet, pt); - registryData.fill(HIST("data/jets/cone/protons/antiproton_2d"), deltaEtaJet, deltaPhiJet); + registryData.fill(HIST("data/jets/cone/protons/proton_neg"), deltaEtaJet, deltaPhiJet, pt); + registryData.fill(HIST("data/jets/cone/protons/proton_neg_2d"), deltaEtaJet, deltaPhiJet); if (track.hasTOF()) { registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_tof"), pt, track.tofNSigmaPr()); } registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_pt"), pt); registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_eta"), eta); - registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_dcaxy"), dcaxy); - registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_dcaz"), dcaz); + registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/jets/protons/neg/proton_jet_neg_dcaz"), pt, dcaz); } } } - registryData.fill(HIST("data/jets/jet_n_constituents"), selectedConstituentCount); + registryData.fill(HIST("data/jets/general/jet_n_selected_constituents"), selectedConstituentCount); - if (nPionsInJetPos > 0) { - registryData.fill(HIST("data/jets/pions/pos/n_pions_per_jet"), nPionsInJetPos); - } - if (nKaonsInJetPos > 0) { - registryData.fill(HIST("data/jets/kaons/pos/n_kaons_per_jet"), nKaonsInJetPos); - } - if (nProtonsInJetPos > 0) { - registryData.fill(HIST("data/jets/protons/pos/n_protons_per_jet"), nProtonsInJetPos); - } + registryData.fill(HIST("data/jets/pions/pos/n_pions_per_jet"), nPionsInJetPos); + registryData.fill(HIST("data/jets/kaons/pos/n_kaons_per_jet"), nKaonsInJetPos); + registryData.fill(HIST("data/jets/protons/pos/n_protons_per_jet"), nProtonsInJetPos); - if (nPionsInJetNeg > 0) { - registryData.fill(HIST("data/jets/pions/neg/n_pions_per_jet"), nPionsInJetNeg); - } - if (nKaonsInJetNeg > 0) { - registryData.fill(HIST("data/jets/kaons/neg/n_kaons_per_jet"), nKaonsInJetNeg); - } - if (nProtonsInJetNeg > 0) { - registryData.fill(HIST("data/jets/protons/neg/n_protons_per_jet"), nProtonsInJetNeg); - } + registryData.fill(HIST("data/jets/pions/neg/n_pions_per_jet"), nPionsInJetNeg); + registryData.fill(HIST("data/jets/kaons/neg/n_kaons_per_jet"), nKaonsInJetNeg); + registryData.fill(HIST("data/jets/protons/neg/n_protons_per_jet"), nProtonsInJetNeg); nPionsInJet = nPionsInJetPos + nPionsInJetNeg; nProtonsInJet = nProtonsInJetNeg + nProtonsInJetPos; nKaonsInJet = nKaonsInJetNeg + nKaonsInJetPos; - registryData.fill(HIST("data/jets/n_pions_vs_n_constituents"), selectedConstituentCount, nPionsInJet); + registryData.fill(HIST("data/jets/pions/n_pions_per_jet"), nPionsInJet); + registryData.fill(HIST("data/jets/kaons/n_kaons_per_jet"), nKaonsInJet); + registryData.fill(HIST("data/jets/protons/n_protons_per_jet"), nProtonsInJet); + + registryData.fill(HIST("data/jets/pions/n_pions_vs_jet_pt"), jet.pt(), nPionsInJet); + registryData.fill(HIST("data/jets/kaons/n_kaons_vs_jet_pt"), jet.pt(), nKaonsInJet); + registryData.fill(HIST("data/jets/protons/n_protons_vs_jet_pt"), jet.pt(), nProtonsInJet); + registryData.fill(HIST("data/jets/composition/particle_multiplicity_per_jet"), 1.0, nPionsInJet); registryData.fill(HIST("data/jets/composition/particle_multiplicity_per_jet"), 2.0, nKaonsInJet); registryData.fill(HIST("data/jets/composition/particle_multiplicity_per_jet"), 3.0, nProtonsInJet); - registryData.fill(HIST("data/jets/composition/nKaons_vs_nProtons"), nKaonsInJet, nProtonsInJet); - registryData.fill(HIST("data/jets/composition/nPions_vs_nKaons"), nPionsInJet, nKaonsInJet); - registryData.fill(HIST("data/jets/composition/nPions_vs_nProtons"), nPionsInJet, nProtonsInJet); - registryData.fill(HIST("data/jets/composition/nPions_nKaons_nProtons"), nPionsInJet, nKaonsInJet, nProtonsInJet); - - switch (nProtonsInJet) { - case 1: - registryData.fill(HIST("data/jets/composition/nKaons_vs_nPions_1proton"), nKaonsInJet, nPionsInJet); - break; - - case 2: - registryData.fill(HIST("data/jets/composition/nKaons_vs_nPions_2protons"), nKaonsInJet, nPionsInJet); - break; - - case 3: - registryData.fill(HIST("data/jets/composition/nKaons_vs_nPions_3protons"), nKaonsInJet, nPionsInJet); - break; - - case 4: - registryData.fill(HIST("data/jets/composition/nKaons_vs_nPions_4protons"), nKaonsInJet, nPionsInJet); - break; - - default: - break; - } - int nTracksOut = 0; for (auto const& track : collTracks) { @@ -1309,8 +2017,8 @@ struct JetHadronsPid { registryData.fill(HIST("data/ue/pions/pion_ue_pt"), pt); registryData.fill(HIST("data/ue/pions/pion_ue_eta"), eta); - registryData.fill(HIST("data/ue/pions/pion_ue_dcaxy"), dcaxy); - registryData.fill(HIST("data/ue/pions/pion_ue_dcaz"), dcaz); + registryData.fill(HIST("data/ue/pions/pion_ue_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/ue/pions/pion_ue_dcaz"), pt, dcaz); if (charge > 0) { registryData.fill(HIST("data/ue/pions/pos/pion_ue_pos_tpc"), pt, track.tpcNSigmaPi()); @@ -1319,8 +2027,8 @@ struct JetHadronsPid { } registryData.fill(HIST("data/ue/pions/pos/pion_ue_pos_pt"), pt); registryData.fill(HIST("data/ue/pions/pos/pion_ue_pos_eta"), eta); - registryData.fill(HIST("data/ue/pions/pos/pion_ue_pos_dcaxy"), dcaxy); - registryData.fill(HIST("data/ue/pions/pos/pion_ue_pos_dcaz"), dcaz); + registryData.fill(HIST("data/ue/pions/pos/pion_ue_pos_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/ue/pions/pos/pion_ue_pos_dcaz"), pt, dcaz); } else { registryData.fill(HIST("data/ue/pions/neg/pion_ue_neg_tpc"), pt, track.tpcNSigmaPi()); if (track.hasTOF()) { @@ -1328,8 +2036,8 @@ struct JetHadronsPid { } registryData.fill(HIST("data/ue/pions/neg/pion_ue_neg_pt"), pt); registryData.fill(HIST("data/ue/pions/neg/pion_ue_neg_eta"), eta); - registryData.fill(HIST("data/ue/pions/neg/pion_ue_neg_dcaxy"), dcaxy); - registryData.fill(HIST("data/ue/pions/neg/pion_ue_neg_dcaz"), dcaz); + registryData.fill(HIST("data/ue/pions/neg/pion_ue_neg_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/ue/pions/neg/pion_ue_neg_dcaz"), pt, dcaz); } } @@ -1341,8 +2049,8 @@ struct JetHadronsPid { registryData.fill(HIST("data/ue/kaons/kaon_ue_pt"), pt); registryData.fill(HIST("data/ue/kaons/kaon_ue_eta"), eta); - registryData.fill(HIST("data/ue/kaons/kaon_ue_dcaxy"), dcaxy); - registryData.fill(HIST("data/ue/kaons/kaon_ue_dcaz"), dcaz); + registryData.fill(HIST("data/ue/kaons/kaon_ue_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/ue/kaons/kaon_ue_dcaz"), pt, dcaz); if (charge > 0) { registryData.fill(HIST("data/ue/kaons/pos/kaon_ue_pos_tpc"), pt, track.tpcNSigmaKa()); @@ -1351,8 +2059,8 @@ struct JetHadronsPid { } registryData.fill(HIST("data/ue/kaons/pos/kaon_ue_pos_pt"), pt); registryData.fill(HIST("data/ue/kaons/pos/kaon_ue_pos_eta"), eta); - registryData.fill(HIST("data/ue/kaons/pos/kaon_ue_pos_dcaxy"), dcaxy); - registryData.fill(HIST("data/ue/kaons/pos/kaon_ue_pos_dcaz"), dcaz); + registryData.fill(HIST("data/ue/kaons/pos/kaon_ue_pos_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/ue/kaons/pos/kaon_ue_pos_dcaz"), pt, dcaz); } else { registryData.fill(HIST("data/ue/kaons/neg/kaon_ue_neg_tpc"), pt, track.tpcNSigmaKa()); if (track.hasTOF()) { @@ -1360,8 +2068,8 @@ struct JetHadronsPid { } registryData.fill(HIST("data/ue/kaons/neg/kaon_ue_neg_pt"), pt); registryData.fill(HIST("data/ue/kaons/neg/kaon_ue_neg_eta"), eta); - registryData.fill(HIST("data/ue/kaons/neg/kaon_ue_neg_dcaxy"), dcaxy); - registryData.fill(HIST("data/ue/kaons/neg/kaon_ue_neg_dcaz"), dcaz); + registryData.fill(HIST("data/ue/kaons/neg/kaon_ue_neg_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/ue/kaons/neg/kaon_ue_neg_dcaz"), pt, dcaz); } } @@ -1373,8 +2081,8 @@ struct JetHadronsPid { registryData.fill(HIST("data/ue/protons/proton_ue_pt"), pt); registryData.fill(HIST("data/ue/protons/proton_ue_eta"), eta); - registryData.fill(HIST("data/ue/protons/proton_ue_dcaxy"), dcaxy); - registryData.fill(HIST("data/ue/protons/proton_ue_dcaz"), dcaz); + registryData.fill(HIST("data/ue/protons/proton_ue_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/ue/protons/proton_ue_dcaz"), pt, dcaz); if (charge > 0) { registryData.fill(HIST("data/ue/protons/pos/proton_ue_pos_tpc"), pt, track.tpcNSigmaPr()); @@ -1383,8 +2091,8 @@ struct JetHadronsPid { } registryData.fill(HIST("data/ue/protons/pos/proton_ue_pos_pt"), pt); registryData.fill(HIST("data/ue/protons/pos/proton_ue_pos_eta"), eta); - registryData.fill(HIST("data/ue/protons/pos/proton_ue_pos_dcaxy"), dcaxy); - registryData.fill(HIST("data/ue/protons/pos/proton_ue_pos_dcaz"), dcaz); + registryData.fill(HIST("data/ue/protons/pos/proton_ue_pos_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/ue/protons/pos/proton_ue_pos_dcaz"), pt, dcaz); } else { registryData.fill(HIST("data/ue/protons/neg/proton_ue_neg_tpc"), pt, track.tpcNSigmaPr()); if (track.hasTOF()) { @@ -1392,282 +2100,684 @@ struct JetHadronsPid { } registryData.fill(HIST("data/ue/protons/neg/proton_ue_neg_pt"), pt); registryData.fill(HIST("data/ue/protons/neg/proton_ue_neg_eta"), eta); - registryData.fill(HIST("data/ue/protons/neg/proton_ue_neg_dcaxy"), dcaxy); - registryData.fill(HIST("data/ue/protons/neg/proton_ue_neg_dcaz"), dcaz); + registryData.fill(HIST("data/ue/protons/neg/proton_ue_neg_dcaxy"), pt, dcaxy); + registryData.fill(HIST("data/ue/protons/neg/proton_ue_neg_dcaz"), pt, dcaz); } } } - registryData.fill(HIST("data/ue/tracks_n_in_ue"), nTracksOut); + registryData.fill(HIST("data/ue/general/tracks_n_in_ue"), nTracksOut); } - registryData.fill(HIST("data/jets/total_tracks_pure_vs_jets"), 2.0, static_cast(tracksInJetsCollision)); - registryData.fill(HIST("data/jets/collision_multiplicity"), jetsInCollision); + registryData.fill(HIST("data/jets/general/total_tracks_pure_vs_jets"), 2.0, static_cast(tracksInJetsCollision)); + registryData.fill(HIST("data/jets/general/collision_multiplicity"), jetsInCollision); } PROCESS_SWITCH(JetHadronsPid, processJets, "Jets Analysis", true); - void processMC(StandardEvents::iterator const& collision, HadronTracksMC const& tracks, aod::McParticles const&) + void processMatchJets(JetEvents::iterator const& collision, + soa::Join const& detectorLevelJets, + soa::Join const&, + ChargedMCPJets const&, + aod::JetParticles const&, + HadronTracksMC const&, aod::McParticles const&) { - if (!collision.sel8() || std::abs(collision.posZ()) > zVtx) { - return; - } - if (rejectITSROFBorder && !collision.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)) { - return; - } - if (rejectTFBorder && !collision.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)) { - return; - } - if (requireVtxITSTPC && !collision.selection_bit(o2::aod::evsel::kIsVertexITSTPC)) { - return; - } - if (rejectSameBunchPileup && !collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) { - return; - } - if (requireIsGoodZvtxFT0VsPV && !collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV)) { + + registryMC.fill(HIST("mc/jets/matched/reconstructed/general/n_events_raw"), 1); + + if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) { return; } - if (requireIsVertexTOFmatched && !collision.selection_bit(o2::aod::evsel::kIsVertexTOFmatched)) { + + if (std::abs(collision.posZ()) > zVtx) { return; } - registryData.fill(HIST("mc/n_events"), 1); + registryMC.fill(HIST("mc/jets/matched/reconstructed/general/n_events"), 1); - for (auto const& track : tracks) { + double centralRho = collision.rho(); + int jetsInCollision = 0; + + for (auto const& djet : detectorLevelJets) { + + if (!isppRefAnalysis && ((std::abs(djet.eta()) + rJet) > (maxEta - deltaEtaEdge))) { + continue; + } + + if (isppRefAnalysis && std::abs(djet.eta()) > cfgEtaJetMax) { + continue; + } + + if (isppRefAnalysis && (djet.pt() < minJetPt || djet.pt() > maxJetPt)) { + continue; + } + + double ptSub = djet.pt() - (centralRho * djet.area()); + if (ptSub < 0) { + ptSub = 0.0; + } + + if (!isppRefAnalysis && (ptSub < minJetPt || ptSub > maxJetPt)) { + continue; + } + + const double normalizedJetArea = djet.area() / (PI * rJet * rJet); + + if (applyAreaCut && normalizedJetArea < minNormalizedJetArea) { + continue; + } + + if (!djet.has_matchedJetGeo() || !djet.has_matchedJetPt()) { + continue; + } + + auto geoMatches = djet.matchedJetGeo_as(); + auto ptMatches = djet.matchedJetPt_as(); + auto matchedIt = geoMatches.end(); + + for (auto itGeo = geoMatches.begin(); itGeo != geoMatches.end(); ++itGeo) { + bool found = false; + for (auto itPt = ptMatches.begin(); itPt != ptMatches.end(); ++itPt) { + if (itGeo->globalIndex() == itPt->globalIndex()) { + matchedIt = itGeo; + found = true; + break; + } + } + if (found) { + break; + } + } - if (!passedTrackSelection(track)) { + if (matchedIt == geoMatches.end()) { continue; } - double pt = track.pt(); + auto const& pjet = *matchedIt; - if (!track.has_mcParticle()) { - continue; - } - auto const& trueParticle = track.mcParticle(); + ++jetsInCollision; - int pdg = std::abs(trueParticle.pdgCode()); - int realpdg = trueParticle.pdgCode(); - bool isPrimary = trueParticle.isPhysicalPrimary(); - int charge = track.sign(); + int nSelectedConstituents = 0; - registryData.fill(HIST("mc/reconstruction/hadrons/rec_hadron_all"), pt); + int nPionsInJet = 0; + int nKaonsInJet = 0; + int nProtonsInJet = 0; - if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/hadrons/rec_hadron_tof_match"), pt); - } + int nPionsInJetPos = 0; + int nKaonsInJetPos = 0; + int nProtonsInJetPos = 0; - if (isPrimary) { - registryData.fill(HIST("mc/reconstruction/hadrons/mc_rec_hadron_pt"), pt); - } else { - registryData.fill(HIST("mc/reconstruction/hadrons/mc_sec_hadron_pt"), pt); - } + int nPionsInJetNeg = 0; + int nKaonsInJetNeg = 0; + int nProtonsInJetNeg = 0; - PidResult pid = getPid(track); + int nPionsInJetTruth = 0; + int nKaonsInJetTruth = 0; + int nProtonsInJetTruth = 0; - if (pid.isPion) { - registryData.fill(HIST("mc/reconstruction/pions/rec_pion_all"), pt); - registryData.fill(HIST("mc/reconstruction/pions/contamination_matrix_pion"), realpdg, pt); + int nPionsInJetPosTruth = 0; + int nKaonsInJetPosTruth = 0; + int nProtonsInJetPosTruth = 0; - if (charge > 0) { + int nPionsInJetNegTruth = 0; + int nKaonsInJetNegTruth = 0; + int nProtonsInJetNegTruth = 0; - registryData.fill(HIST("mc/reconstruction/pions/pos/rec_pion_pos_all"), pt); + int nSelectedConstituentsTruth = 0; - if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/pions/pos/rec_pion_pos_tof_matched"), pt); - } - registryData.fill(HIST("mc/reconstruction/pions/pos/contamination_matrix_pion_pos"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/general/jet_pt"), djet.pt()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/general/jet_pt_subtracted"), ptSub); + registryMC.fill(HIST("mc/jets/matched/reconstructed/general/jet_pt_raw_vs_sub"), djet.pt(), ptSub); + registryMC.fill(HIST("mc/jets/matched/reconstructed/general/jet_eta"), djet.eta()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/general/jet_phi"), djet.phi()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/general/jet_area"), djet.area()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/general/jet_n_constituents"), djet.tracksIds().size()); - registryData.fill(HIST("mc/reconstruction/pions/pos/rec_pion_pos_tpc"), pt, track.tpcNSigmaPi()); - if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/pions/pos/rec_pion_pos_tof"), pt, track.tofNSigmaPi()); - } + registryMC.fill(HIST("mc/jets/matched/truth/general/jet_pt"), pjet.pt()); + registryMC.fill(HIST("mc/jets/matched/truth/general/jet_eta"), pjet.eta()); + registryMC.fill(HIST("mc/jets/matched/truth/general/jet_phi"), pjet.phi()); + registryMC.fill(HIST("mc/jets/matched/truth/general/jet_area"), pjet.area()); + registryMC.fill(HIST("mc/jets/matched/truth/general/jet_n_constituents"), pjet.tracksIds().size()); + + for (auto const& jtrack : djet.tracks_as>()) { + + auto track = jtrack.track_as(); + + if (!passedTrackSelection(track)) { + continue; + } + + ++nSelectedConstituents; + + const double deltaEtaJet = track.eta() - djet.eta(); + const double deltaPhiJet = RecoDecay::constrainAngle(track.phi() - djet.phi(), -PI); + const double pt = track.pt(); + const double eta = track.eta(); + const double dcaxy = track.dcaXY(); + const double dcaz = track.dcaZ(); + const double phi = track.phi(); + const int charge = track.sign(); + const double p = track.p(); + + int realpdg = 0; + int pdg = 0; + bool isPrimary = false; + + if (track.has_mcParticle()) { + auto const& trueParticle = track.mcParticle(); + realpdg = trueParticle.pdgCode(); + pdg = std::abs(realpdg); + isPrimary = trueParticle.isPhysicalPrimary(); + } + + registryMC.fill(HIST("mc/jets/matched/reconstructed/hadrons/rec_hadron_all"), pt); + + if (isPrimary) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/hadrons/mc_rec_hadron_pt"), pt); } else { - registryData.fill(HIST("mc/reconstruction/pions/neg/rec_pion_neg_all"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/hadrons/mc_sec_hadron_pt"), pt); + } + + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/all_tracks_2d"), deltaEtaJet, deltaPhiJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/all_tracks_3d"), deltaEtaJet, deltaPhiJet, pt); + const PidResult pid = getPid(track); + + if (pid.isPion) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/pions_2d"), deltaEtaJet, deltaPhiJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/pions_3d"), deltaEtaJet, deltaPhiJet, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pion_pt_vs_jet_pt"), djet.pt(), pt); + + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/rec_pion_all"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/contamination_matrix_pion"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pion_jet_tpc"), pt, track.tpcNSigmaPi()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pion_tpc_signal_vs_p"), p, track.tpcSignal()); if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/pions/neg/rec_pion_neg_tof_matched"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pion_jet_tof"), pt, track.tofNSigmaPi()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pion_tof_beta_vs_p"), p, track.beta()); } - registryData.fill(HIST("mc/reconstruction/pions/neg/contamination_matrix_pion_neg"), realpdg, pt); - registryData.fill(HIST("mc/reconstruction/pions/neg/rec_pion_neg_tpc"), pt, track.tpcNSigmaPi()); - if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/pions/neg/rec_pion_neg_tof"), pt, track.tofNSigmaPi()); + if (charge > 0) { + nPionsInJetPos++; + + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/rec_pion_pos_all"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/contamination_matrix_pion_pos"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_tpc"), pt, track.tpcNSigmaPi()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_phi_vs_pt"), pt, phi); + + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/pions/pion_pos"), deltaEtaJet, deltaPhiJet, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/pions/pion_pos_2d"), deltaEtaJet, deltaPhiJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_eta"), eta); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_dcaz"), pt, dcaz); + + if (track.hasTOF()) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/rec_pion_pos_tof_matched"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/pion_jet_pos_tof"), pt, track.tofNSigmaPi()); + } + } else { + nPionsInJetNeg++; + + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/rec_pion_neg_all"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/contamination_matrix_pion_neg"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_tpc"), pt, track.tpcNSigmaPi()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_phi_vs_pt"), pt, phi); + + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/pions/pion_neg"), deltaEtaJet, deltaPhiJet, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/pions/pion_neg_2d"), deltaEtaJet, deltaPhiJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_eta"), eta); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_dcaz"), pt, dcaz); + + if (track.hasTOF()) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/rec_pion_neg_tof_matched"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/pion_jet_neg_tof"), pt, track.tofNSigmaPi()); + } } - } - if (isPrimary) { - if (pdg == PDG_t::kPiPlus) { - registryData.fill(HIST("mc/reconstruction/pions/mc_rec_pion_pt"), pt); + if (isPrimary) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/mc_rec_pion_pt"), pt); if (charge > 0) { - registryData.fill(HIST("mc/reconstruction/pions/pos/mc_rec_pion_pos_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/mc_rec_pion_pos_pt"), pt); } else { - registryData.fill(HIST("mc/reconstruction/pions/neg/mc_rec_pion_neg_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/mc_rec_pion_neg_pt"), pt); } - } - } else { - registryData.fill(HIST("mc/reconstruction/pions/mc_sec_pion_pt"), pt); - if (charge > 0) { - registryData.fill(HIST("mc/reconstruction/pions/pos/mc_sec_pion_pos_pt"), pt); } else { - registryData.fill(HIST("mc/reconstruction/pions/neg/mc_sec_pion_neg_pt"), pt); + if (pdg == PDG_t::kPiPlus) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/mc_sec_pion_pt"), pt); + if (charge > 0) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/mc_sec_pion_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/mc_sec_pion_neg_pt"), pt); + } + } } } - } - if (pid.isKaon) { - registryData.fill(HIST("mc/reconstruction/kaons/rec_kaon_all"), pt); - registryData.fill(HIST("mc/reconstruction/kaons/contamination_matrix_kaon"), realpdg, pt); + // --- KAONS --- + if (pid.isKaon) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/kaons_2d"), deltaEtaJet, deltaPhiJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/kaons_3d"), deltaEtaJet, deltaPhiJet, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/kaon_pt_vs_jet_pt"), djet.pt(), pt); + + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/rec_kaon_all"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/contamination_matrix_kaon"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/kaon_jet_tpc"), pt, track.tpcNSigmaKa()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/kaon_tpc_signal_vs_p"), p, track.tpcSignal()); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/kaon_jet_tof"), pt, track.tofNSigmaKa()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/kaon_tof_beta_vs_p"), p, track.beta()); + } - if (charge > 0) { + if (charge > 0) { + nKaonsInJetPos++; - registryData.fill(HIST("mc/reconstruction/kaons/pos/rec_kaon_pos_all"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/rec_kaon_pos_all"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/contamination_matrix_kaon_pos"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_tpc"), pt, track.tpcNSigmaKa()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_phi_vs_pt"), pt, phi); - if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/kaons/pos/rec_kaon_pos_tof_matched"), pt); - } - registryData.fill(HIST("mc/reconstruction/kaons/pos/contamination_matrix_kaon_pos"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/kaons/kaon_pos"), deltaEtaJet, deltaPhiJet, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/kaons/kaon_pos_2d"), deltaEtaJet, deltaPhiJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_eta"), eta); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_dcaz"), pt, dcaz); - registryData.fill(HIST("mc/reconstruction/kaons/pos/rec_kaon_pos_tpc"), pt, track.tpcNSigmaKa()); - if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/kaons/pos/rec_kaon_pos_tof"), pt, track.tofNSigmaKa()); + if (track.hasTOF()) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/rec_kaon_pos_tof_matched"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/kaon_jet_pos_tof"), pt, track.tofNSigmaKa()); + } + } else { + nKaonsInJetNeg++; + + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/rec_kaon_neg_all"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/contamination_matrix_kaon_neg"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/rec_kaon_neg_tpc"), pt, track.tpcNSigmaKa()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/kaon_jet_neg_phi_vs_pt"), pt, phi); + + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/kaons/kaon_neg"), deltaEtaJet, deltaPhiJet, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/kaons/kaon_neg_2d"), deltaEtaJet, deltaPhiJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/kaon_jet_neg_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/kaon_jet_neg_eta"), eta); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/kaon_jet_neg_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/kaon_jet_neg_dcaz"), pt, dcaz); + + if (track.hasTOF()) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/rec_kaon_neg_tof_matched"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/rec_kaon_neg_tof"), pt, track.tofNSigmaKa()); + } } - } else { - registryData.fill(HIST("mc/reconstruction/kaons/neg/rec_kaon_neg_all"), pt); + if (isPrimary) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/mc_rec_kaon_pt"), pt); + if (charge > 0) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/mc_rec_kaon_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/mc_rec_kaon_neg_pt"), pt); + } + } else { + if (pdg == PDG_t::kKPlus) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/mc_sec_kaon_pt"), pt); + if (charge > 0) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/mc_sec_kaon_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/mc_sec_kaon_neg_pt"), pt); + } + } + } + } + // --- PROTONS --- + if (pid.isProton) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/protons_2d"), deltaEtaJet, deltaPhiJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/protons_3d"), deltaEtaJet, deltaPhiJet, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/proton_pt_vs_jet_pt"), djet.pt(), pt); + + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/rec_proton_all"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/contamination_matrix_proton"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/proton_jet_tpc"), pt, track.tpcNSigmaPr()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/proton_tpc_signal_vs_p"), p, track.tpcSignal()); if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/kaons/neg/rec_kaon_neg_tof_matched"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/proton_jet_tof"), pt, track.tofNSigmaPr()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/proton_tof_beta_vs_p"), p, track.beta()); } - registryData.fill(HIST("mc/reconstruction/kaons/neg/contamination_matrix_kaon_neg"), realpdg, pt); - registryData.fill(HIST("mc/reconstruction/kaons/neg/rec_kaon_neg_tpc"), pt, track.tpcNSigmaKa()); - if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/kaons/neg/rec_kaon_neg_tof"), pt, track.tofNSigmaKa()); + if (charge > 0) { + nProtonsInJetPos++; + + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/rec_proton_pos_all"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/contamination_matrix_proton_pos"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_tpc"), pt, track.tpcNSigmaPr()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_phi_vs_pt"), pt, phi); + + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/protons/proton_pos"), deltaEtaJet, deltaPhiJet, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/protons/proton_pos_2d"), deltaEtaJet, deltaPhiJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_eta"), eta); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_dcaz"), pt, dcaz); + + if (track.hasTOF()) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/rec_proton_pos_tof_matched"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/proton_jet_pos_tof"), pt, track.tofNSigmaPr()); + } + } else { + nProtonsInJetNeg++; + + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/rec_proton_neg_all"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/contamination_matrix_proton_neg"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_tpc"), pt, track.tpcNSigmaPr()); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_phi_vs_pt"), pt, phi); + + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/protons/proton_neg"), deltaEtaJet, deltaPhiJet, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/cone/protons/proton_neg_2d"), deltaEtaJet, deltaPhiJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_eta"), eta); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_dcaxy"), pt, dcaxy); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_dcaz"), pt, dcaz); + + if (track.hasTOF()) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/rec_proton_neg_tof_matched"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/proton_jet_neg_tof"), pt, track.tofNSigmaPr()); + } } - } - if (isPrimary) { - if (pdg == PDG_t::kKPlus) { - registryData.fill(HIST("mc/reconstruction/kaons/mc_rec_kaon_pt"), pt); + if (isPrimary) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/mc_rec_proton_pt"), pt); if (charge > 0) { - registryData.fill(HIST("mc/reconstruction/kaons/pos/mc_rec_kaon_pos_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/mc_rec_proton_pos_pt"), pt); } else { - registryData.fill(HIST("mc/reconstruction/kaons/neg/mc_rec_kaon_neg_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/mc_rec_proton_neg_pt"), pt); } - } - } else { - registryData.fill(HIST("mc/reconstruction/kaons/mc_sec_kaon_pt"), pt); - if (charge > 0) { - registryData.fill(HIST("mc/reconstruction/kaons/pos/mc_sec_kaon_pos_pt"), pt); } else { - registryData.fill(HIST("mc/reconstruction/kaons/neg/mc_sec_kaon_neg_pt"), pt); + if (pdg == PDG_t::kProton) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/mc_sec_proton_pt"), pt); + if (charge > 0) { + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/mc_sec_proton_pos_pt"), pt); + } else { + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/mc_sec_proton_neg_pt"), pt); + } + } } } } - if (pid.isProton) { - registryData.fill(HIST("mc/reconstruction/protons/rec_proton_all"), pt); - registryData.fill(HIST("mc/reconstruction/protons/contamination_matrix_proton"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/general/jet_n_selected_constituents"), nSelectedConstituents); - if (charge > 0) { - registryData.fill(HIST("mc/reconstruction/protons/pos/rec_proton_pos_all"), pt); - if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/protons/pos/rec_proton_pos_tof_matched"), pt); - } - registryData.fill(HIST("mc/reconstruction/protons/pos/contamination_matrix_proton_pos"), realpdg, pt); + nPionsInJet = nPionsInJetPos + nPionsInJetNeg; + nKaonsInJet = nKaonsInJetPos + nKaonsInJetNeg; + nProtonsInJet = nProtonsInJetPos + nProtonsInJetNeg; - registryData.fill(HIST("mc/reconstruction/protons/pos/rec_proton_pos_tpc"), pt, track.tpcNSigmaPr()); - if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/protons/pos/rec_proton_pos_tof"), pt, track.tofNSigmaPr()); - } - } else { + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/pos/n_pions_per_jet"), nPionsInJetPos); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/pos/n_kaons_per_jet"), nKaonsInJetPos); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/pos/n_protons_per_jet"), nProtonsInJetPos); - registryData.fill(HIST("mc/reconstruction/protons/neg/rec_proton_neg_all"), pt); - if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/protons/neg/rec_proton_neg_tof_matched"), pt); - } - registryData.fill(HIST("mc/reconstruction/protons/neg/contamination_matrix_proton_neg"), realpdg, pt); + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/neg/n_pions_per_jet"), nPionsInJetNeg); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/neg/n_kaons_per_jet"), nKaonsInJetNeg); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/neg/n_protons_per_jet"), nProtonsInJetNeg); - registryData.fill(HIST("mc/reconstruction/protons/neg/rec_proton_neg_tpc"), pt, track.tpcNSigmaPr()); - if (track.hasTOF()) { - registryData.fill(HIST("mc/reconstruction/protons/neg/rec_proton_neg_tof"), pt, track.tofNSigmaPr()); - } + registryMC.fill(HIST("mc/jets/matched/reconstructed/composition/n_pions_per_jet"), nPionsInJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/composition/n_kaons_per_jet"), nKaonsInJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/composition/n_protons_per_jet"), nProtonsInJet); + + registryMC.fill(HIST("mc/jets/matched/reconstructed/composition/particle_multiplicity_per_jet"), 1.0, nPionsInJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/composition/particle_multiplicity_per_jet"), 2.0, nKaonsInJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/composition/particle_multiplicity_per_jet"), 3.0, nProtonsInJet); + + registryMC.fill(HIST("mc/jets/matched/reconstructed/pions/n_pions_vs_jet_pt"), djet.pt(), nPionsInJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/kaons/n_kaons_vs_jet_pt"), djet.pt(), nKaonsInJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/protons/n_protons_vs_jet_pt"), djet.pt(), nProtonsInJet); + + for (auto const& particle : pjet.tracks_as()) { + + if (!particle.isPhysicalPrimary()) { + continue; } - if (isPrimary) { - if (pdg == PDG_t::kProton) { - registryData.fill(HIST("mc/reconstruction/protons/mc_rec_proton_pt"), pt); - if (charge > 0) { - registryData.fill(HIST("mc/reconstruction/protons/pos/mc_rec_proton_pos_pt"), pt); + if (particle.eta() < minEta || particle.eta() > maxEta) { + continue; + } + + double pt = particle.pt(); + if (pt < minPt || pt > maxPt) { + continue; + } + + ++nSelectedConstituentsTruth; + + int originalPdg = particle.pdgCode(); + int pdg = std::abs(originalPdg); + + registryMC.fill(HIST("mc/jets/matched/truth/hadrons/mc_gen_hadron_pt"), pt); + + if (pdg == PDG_t::kPiPlus) { + if (pt >= cfg.minPtPion && pt <= cfg.maxPtPion) { + registryMC.fill(HIST("mc/jets/matched/truth/pions/mc_gen_pion_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/truth/pions/pion_pt_vs_jet_pt"), pjet.pt(), pt); + + if (originalPdg > 0) { + nPionsInJetPosTruth++; + registryMC.fill(HIST("mc/jets/matched/truth/pions/pos/mc_gen_pion_pos_pt"), pt); } else { - registryData.fill(HIST("mc/reconstruction/protons/neg/mc_rec_proton_neg_pt"), pt); + nPionsInJetNegTruth++; + registryMC.fill(HIST("mc/jets/matched/truth/pions/neg/mc_gen_pion_neg_pt"), pt); } } - } else { - registryData.fill(HIST("mc/reconstruction/protons/mc_sec_proton_pt"), pt); - if (charge > 0) { - registryData.fill(HIST("mc/reconstruction/protons/pos/mc_sec_proton_pos_pt"), pt); - } else { - registryData.fill(HIST("mc/reconstruction/protons/neg/mc_sec_proton_neg_pt"), pt); + } else if (pdg == PDG_t::kKPlus) { + if (pt >= cfg.minPtKaon && pt <= cfg.maxPtKaon) { + registryMC.fill(HIST("mc/jets/matched/truth/kaons/mc_gen_kaon_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/truth/kaons/kaon_pt_vs_jet_pt"), pjet.pt(), pt); + + if (originalPdg > 0) { + nKaonsInJetPosTruth++; + registryMC.fill(HIST("mc/jets/matched/truth/kaons/pos/mc_gen_kaon_pos_pt"), pt); + } else { + nKaonsInJetNegTruth++; + registryMC.fill(HIST("mc/jets/matched/truth/kaons/neg/mc_gen_kaon_neg_pt"), pt); + } + } + } else if (pdg == PDG_t::kProton) { + if (pt >= cfg.minPtProton && pt <= cfg.maxPtProton) { + registryMC.fill(HIST("mc/jets/matched/truth/protons/mc_gen_proton_pt"), pt); + registryMC.fill(HIST("mc/jets/matched/truth/protons/proton_pt_vs_jet_pt"), pjet.pt(), pt); + if (originalPdg > 0) { + nProtonsInJetPosTruth++; + registryMC.fill(HIST("mc/jets/matched/truth/protons/pos/mc_gen_proton_pos_pt"), pt); + } else { + nProtonsInJetNegTruth++; + registryMC.fill(HIST("mc/jets/matched/truth/protons/neg/mc_gen_proton_neg_pt"), pt); + } } } } + + registryMC.fill(HIST("mc/jets/matched/truth/general/jet_n_selected_constituents"), nSelectedConstituentsTruth); + + registryMC.fill(HIST("mc/jets/matched/truth/pions/pos/n_pions_per_jet"), nPionsInJetPosTruth); + registryMC.fill(HIST("mc/jets/matched/truth/kaons/pos/n_kaons_per_jet"), nKaonsInJetPosTruth); + registryMC.fill(HIST("mc/jets/matched/truth/protons/pos/n_protons_per_jet"), nProtonsInJetPosTruth); + + registryMC.fill(HIST("mc/jets/matched/truth/pions/neg/n_pions_per_jet"), nPionsInJetNegTruth); + registryMC.fill(HIST("mc/jets/matched/truth/kaons/neg/n_kaons_per_jet"), nKaonsInJetNegTruth); + registryMC.fill(HIST("mc/jets/matched/truth/protons/neg/n_protons_per_jet"), nProtonsInJetNegTruth); + + nPionsInJetTruth = nPionsInJetPosTruth + nPionsInJetNegTruth; + nKaonsInJetTruth = nKaonsInJetPosTruth + nKaonsInJetNegTruth; + nProtonsInJetTruth = nProtonsInJetPosTruth + nProtonsInJetNegTruth; + + registryMC.fill(HIST("mc/jets/matched/truth/pions/n_pions_per_jet"), nPionsInJetTruth); + registryMC.fill(HIST("mc/jets/matched/truth/kaons/n_kaons_per_jet"), nKaonsInJetTruth); + registryMC.fill(HIST("mc/jets/matched/truth/protons/n_protons_per_jet"), nProtonsInJetTruth); + + registryMC.fill(HIST("mc/jets/matched/reconstructed/composition/n_pions_matrix"), nPionsInJetTruth, nPionsInJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/composition/n_kaons_matrix"), nKaonsInJetTruth, nKaonsInJet); + registryMC.fill(HIST("mc/jets/matched/reconstructed/composition/n_protons_matrix"), nProtonsInJetTruth, nProtonsInJet); + + registryMC.fill(HIST("mc/jets/matched/truth/pions/n_pions_vs_jet_pt"), pjet.pt(), nPionsInJetTruth); + registryMC.fill(HIST("mc/jets/matched/truth/kaons/n_kaons_vs_jet_pt"), pjet.pt(), nKaonsInJetTruth); + registryMC.fill(HIST("mc/jets/matched/truth/protons/n_protons_vs_jet_pt"), pjet.pt(), nProtonsInJetTruth); } + registryMC.fill(HIST("mc/jets/matched/reconstructed/general/collision_multiplicity"), jetsInCollision); } - PROCESS_SWITCH(JetHadronsPid, processMC, "Run on Monte Carlo", false); + PROCESS_SWITCH(JetHadronsPid, processMatchJets, "Process dector level jets matched to particle level", false); - void processMCTruth(aod::McCollisions::iterator const& mcCollision, aod::McParticles const& mcParticles) + void processJetsMCP(MCPJetEvents::iterator const& collision, + ChargedMCPJets const& particleLevelJets, aod::JetParticles const&) { - if (std::abs(mcCollision.posZ()) > zVtx) { + registryMC.fill(HIST("mc/jets/truth/general/n_events_raw"), 1); + + if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) { return; } - for (auto const& mcpart : mcParticles) { + double zVertex = collision.posZ(); + if (std::abs(zVertex) > zVtx) { + return; + } - if (!mcpart.isPhysicalPrimary()) { + registryMC.fill(HIST("mc/jets/truth/general/n_events"), 1); + registryMC.fill(HIST("mc/jets/truth/general/z_vtx"), zVertex); + + double centralRho = collision.rho(); + int jetsInCollision = 0; + + for (auto const& jet : particleLevelJets) { + + if (!isppRefAnalysis && ((std::abs(jet.eta()) + rJet) > (maxEta - deltaEtaEdge))) { continue; } - if (mcpart.eta() < minEta || mcpart.eta() > maxEta) { + if (isppRefAnalysis && std::abs(jet.eta()) > cfgEtaJetMax) { continue; } - int originalPdg = mcpart.pdgCode(); - int pdg = std::abs(originalPdg); - double pt = mcpart.pt(); + if (isppRefAnalysis && (jet.pt() < minJetPt || jet.pt() > maxJetPt)) { + continue; + } - registryData.fill(HIST("mc/truth/hadrons/mc_gen_hadron_pt"), pt); + double ptSub = jet.pt() - (centralRho * jet.area()); + if (ptSub < 0) { + ptSub = 0.0; + } - if (pdg == PDG_t::kPiPlus) { - if (pt >= cfg.minPtPion && pt <= cfg.maxPtPion) { - registryData.fill(HIST("mc/truth/pions/mc_gen_pion_pt"), pt); - if (originalPdg > 0) { - registryData.fill(HIST("mc/truth/pions/pos/mc_gen_pion_pos_pt"), pt); - } else { - registryData.fill(HIST("mc/truth/pions/neg/mc_gen_pion_neg_pt"), pt); - } + if (!isppRefAnalysis && (ptSub < minJetPt || ptSub > maxJetPt)) { + continue; + } + + double normalizedJetArea = jet.area() / (PI * rJet * rJet); + if (applyAreaCut && normalizedJetArea < minNormalizedJetArea) { + continue; + } + + ++jetsInCollision; + + registryMC.fill(HIST("mc/jets/truth/general/jet_pt_subtracted"), ptSub); + registryMC.fill(HIST("mc/jets/truth/general/jet_pt_raw_vs_sub"), jet.pt(), ptSub); + registryMC.fill(HIST("mc/jets/truth/general/jet_eta"), jet.eta()); + registryMC.fill(HIST("mc/jets/truth/general/jet_phi"), jet.phi()); + registryMC.fill(HIST("mc/jets/truth/general/jet_area"), jet.area()); + registryMC.fill(HIST("mc/jets/truth/general/jet_pt"), jet.pt()); + registryMC.fill(HIST("mc/jets/truth/general/jet_n_constituents"), jet.tracksIds().size()); + + int nPionsInJetPos = 0; + int nKaonsInJetPos = 0; + int nProtonsInJetPos = 0; + int nPionsInJetNeg = 0; + int nKaonsInJetNeg = 0; + int nProtonsInJetNeg = 0; + int selectedConstituentCount = 0; + + for (auto const& particle : jet.tracks_as()) { + + if (!particle.isPhysicalPrimary()) { + continue; } - } else if (pdg == PDG_t::kKPlus) { - if (pt >= cfg.minPtKaon && pt <= cfg.maxPtKaon) { - registryData.fill(HIST("mc/truth/kaons/mc_gen_kaon_pt"), pt); - if (originalPdg > 0) { - registryData.fill(HIST("mc/truth/kaons/pos/mc_gen_kaon_pos_pt"), pt); - } else { - registryData.fill(HIST("mc/truth/kaons/neg/mc_gen_kaon_neg_pt"), pt); - } + + if (particle.eta() < minEta || particle.eta() > maxEta) { + continue; } - } else if (pdg == PDG_t::kProton) { - if (pt >= cfg.minPtProton && pt <= cfg.maxPtProton) { - registryData.fill(HIST("mc/truth/protons/mc_gen_proton_pt"), pt); - if (originalPdg > 0) { - registryData.fill(HIST("mc/truth/protons/pos/mc_gen_proton_pos_pt"), pt); - } else { - registryData.fill(HIST("mc/truth/protons/neg/mc_gen_proton_neg_pt"), pt); + + double pt = particle.pt(); + if (pt < minPt || pt > maxPt) { + continue; + } + + selectedConstituentCount++; + + int originalPdg = particle.pdgCode(); + int pdg = std::abs(originalPdg); + + registryMC.fill(HIST("mc/jets/truth/hadrons/mc_gen_hadron_pt"), pt); + if (pdg == PDG_t::kPiPlus) { + if (pt >= cfg.minPtPion && pt <= cfg.maxPtPion) { + registryMC.fill(HIST("mc/jets/truth/pions/mc_gen_pion_pt"), pt); + registryMC.fill(HIST("mc/jets/truth/pions/pion_pt_vs_jet_pt"), jet.pt(), pt); + + if (originalPdg > 0) { + nPionsInJetPos++; + registryMC.fill(HIST("mc/jets/truth/pions/pos/mc_gen_pion_pos_pt"), pt); + } else { + nPionsInJetNeg++; + registryMC.fill(HIST("mc/jets/truth/pions/neg/mc_gen_pion_neg_pt"), pt); + } + } + } else if (pdg == PDG_t::kKPlus) { + if (pt >= cfg.minPtKaon && pt <= cfg.maxPtKaon) { + registryMC.fill(HIST("mc/jets/truth/kaons/mc_gen_kaon_pt"), pt); + registryMC.fill(HIST("mc/jets/truth/kaons/kaon_pt_vs_jet_pt"), jet.pt(), pt); + + if (originalPdg > 0) { + nKaonsInJetPos++; + registryMC.fill(HIST("mc/jets/truth/kaons/pos/mc_gen_kaon_pos_pt"), pt); + } else { + nKaonsInJetNeg++; + registryMC.fill(HIST("mc/jets/truth/kaons/neg/mc_gen_kaon_neg_pt"), pt); + } + } + } else if (pdg == PDG_t::kProton) { + if (pt >= cfg.minPtProton && pt <= cfg.maxPtProton) { + registryMC.fill(HIST("mc/jets/truth/protons/mc_gen_proton_pt"), pt); + registryMC.fill(HIST("mc/jets/truth/protons/proton_pt_vs_jet_pt"), jet.pt(), pt); + if (originalPdg > 0) { + nProtonsInJetPos++; + registryMC.fill(HIST("mc/jets/truth/protons/pos/mc_gen_proton_pos_pt"), pt); + } else { + nProtonsInJetNeg++; + registryMC.fill(HIST("mc/jets/truth/protons/neg/mc_gen_proton_neg_pt"), pt); + } } } } + + registryMC.fill(HIST("mc/jets/truth/general/jet_n_selected_constituents"), selectedConstituentCount); + + registryMC.fill(HIST("mc/jets/truth/pions/pos/n_pions_per_jet"), nPionsInJetPos); + registryMC.fill(HIST("mc/jets/truth/kaons/pos/n_kaons_per_jet"), nKaonsInJetPos); + registryMC.fill(HIST("mc/jets/truth/protons/pos/n_protons_per_jet"), nProtonsInJetPos); + registryMC.fill(HIST("mc/jets/truth/pions/neg/n_pions_per_jet"), nPionsInJetNeg); + registryMC.fill(HIST("mc/jets/truth/kaons/neg/n_kaons_per_jet"), nKaonsInJetNeg); + registryMC.fill(HIST("mc/jets/truth/protons/neg/n_protons_per_jet"), nProtonsInJetNeg); + + double nPionsInJet = nPionsInJetPos + nPionsInJetNeg; + double nKaonsInJet = nKaonsInJetPos + nKaonsInJetNeg; + double nProtonsInJet = nProtonsInJetPos + nProtonsInJetNeg; + + registryMC.fill(HIST("mc/jets/truth/pions/n_pions_per_jet"), nPionsInJet); + registryMC.fill(HIST("mc/jets/truth/kaons/n_kaons_per_jet"), nKaonsInJet); + registryMC.fill(HIST("mc/jets/truth/protons/n_protons_per_jet"), nProtonsInJet); + + registryMC.fill(HIST("mc/jets/truth/composition/particle_multiplicity_per_jet"), 1.0, nPionsInJet); + registryMC.fill(HIST("mc/jets/truth/composition/particle_multiplicity_per_jet"), 2.0, nKaonsInJet); + registryMC.fill(HIST("mc/jets/truth/composition/particle_multiplicity_per_jet"), 3.0, nProtonsInJet); + + registryMC.fill(HIST("mc/jets/truth/pions/n_pions_vs_jet_pt"), jet.pt(), nPionsInJet); + registryMC.fill(HIST("mc/jets/truth/kaons/n_kaons_vs_jet_pt"), jet.pt(), nKaonsInJet); + registryMC.fill(HIST("mc/jets/truth/protons/n_protons_vs_jet_pt"), jet.pt(), nProtonsInJet); } + registryMC.fill(HIST("mc/jets/truth/general/collision_multiplicity"), jetsInCollision); } - PROCESS_SWITCH(JetHadronsPid, processMCTruth, "Run on Monte Carlo (Pure Truth)", false); + PROCESS_SWITCH(JetHadronsPid, processJetsMCP, "Particle-level charged jets in MC", false); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)