From 64f6175604e4567b407a67c978751791f577e2e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Wed, 7 Oct 2026 18:52:13 +0200 Subject: [PATCH 1/2] Refine pdgCodes and update histogram logic Updated pdgCodes to only include 211 and added logic to handle duplicates and include 0. Adjusted histogram configurations and calculations for particle tracking performance. --- ALICE3/Tasks/alice3TrackingPerformance.cxx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/ALICE3/Tasks/alice3TrackingPerformance.cxx b/ALICE3/Tasks/alice3TrackingPerformance.cxx index 77ebd8a1e3d..7224bf0af0f 100644 --- a/ALICE3/Tasks/alice3TrackingPerformance.cxx +++ b/ALICE3/Tasks/alice3TrackingPerformance.cxx @@ -56,7 +56,7 @@ std::map> covarianceDcaXyDcaXyVsPt; std::map> covarianceDcaZDcaZVsPt; struct Alice3TrackingPerformance { - Configurable> pdgCodes{"pdgCodes", {0, 211}, "List of PDG codes to consider for efficiency calculation. (0 means all)"}; + Configurable> pdgCodes{"pdgCodes", {211}, "List of PDG codes to consider for efficiency calculation."}; HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; ConfigurableAxis ptAxis{"ptAxis", {500, 0, 100}, "#it{p}_{T} (GeV/#it{c})"}; ConfigurableAxis etaAxis{"etaAxis", {100, -5.f, 5.f}, "#eta"}; @@ -64,13 +64,20 @@ struct Alice3TrackingPerformance { void init(o2::framework::InitContext&) { + // Check if pdgCodes has duplicates and remove them + std::sort(pdgCodes.value.begin(), pdgCodes.value.end()); + pdgCodes.value.erase(std::unique(pdgCodes.value.begin(), pdgCodes.value.end()), pdgCodes.value.end()); + // Add 0 to the list of pdgCodes if it is not already present + if (std::find(pdgCodes.value.begin(), pdgCodes.value.end(), 0) == pdgCodes.value.end()) { + pdgCodes.value.push_back(0); + } const AxisSpec axisPtDelta{100, -1, 1, "(#it{p}_{T}^{reco} - #it{p}_{T}^{gen}) / #it{p}_{T}^{gen}"}; const AxisSpec axisDcaXy{100, -1, 1, "DCA_{xy} (cm)"}; const AxisSpec axisDcaZ{100, -1, 1, "DCA_{z} (cm)"}; const AxisSpec axisCovariancePtPt{100, 0, 10, "cov(#it{p}_{T}, #it{p}_{T}) ((GeV/#it{c})^{2})"}; const AxisSpec axisCovarianceDcaXyDcaXy{100, 0, 1, "cov(DCA_{xy}, DCA_{xy}) (cm^{2})"}; const AxisSpec axisCovarianceDcaZDcaZ{100, 0, 1, "cov(DCA_{z}, DCA_{z}) (cm^{2})"}; - particlePdgCodes = histos.add("particlePdgCodes", "", kTH1D, {AxisSpec{100, -0.5, 99.5, "PDG Code"}}); + particlePdgCodes = histos.add("particlePdgCodes", "", kTH1D, {AxisSpec{pdgCodes.value.size(), -0.5, -0.5 + pdgCodes.value.size(), "PDG Code"}}); for (const int& pdg : pdgCodes.value) { std::string prefix = Form("%i", pdg); if (pdg < 0) { @@ -80,6 +87,7 @@ struct Alice3TrackingPerformance { prefix += "/"; auto histoName = [&](const std::string& name) { return Form("%s%s%s", prefix.c_str(), name.c_str(), tag.c_str()); }; particlePtDistribution[pdg] = histos.add(histoName("particlePtDistribution"), "", kTH1D, {ptAxis}); + LOG(info) << "Added histogram: " << histoName("particlePtDistribution"); particleEtaDistribution[pdg] = histos.add(histoName("particleEtaDistribution"), "", kTH1D, {etaAxis}); ptDistribution[pdg] = histos.add(histoName("ptDistribution"), "", kTH1D, {ptAxis}); @@ -125,7 +133,7 @@ struct Alice3TrackingPerformance { } const auto& mcParticle = track.mcParticle(); const float ptResolution = (track.pt() - mcParticle.pt()) / mcParticle.pt(); - const float invptResolution = 1.f / track.pt() - 1.f / mcParticle.pt(); + const float invptResolution = (track.pt() > 0.f ? 1.f / track.pt() : 0.f) - (mcParticle.pt() > 0.f ? 1.f / mcParticle.pt() : 0.f); const float covariancePtPt = track.sigma1Pt() * track.sigma1Pt() * track.pt() * track.pt() * track.pt() * track.pt(); auto fillResolutionHistograms = [&](const int p) { @@ -137,8 +145,8 @@ struct Alice3TrackingPerformance { dcaXyResolutionVsPt[p]->Fill(mcParticle.pt(), track.dcaXY()); dcaZResolutionVsPt[p]->Fill(mcParticle.pt(), track.dcaZ()); covariancePtPtVsPt[p]->Fill(mcParticle.pt(), covariancePtPt); - covarianceDcaXyDcaXyVsPt[p]->Fill(mcParticle.pt(), track.sigmaDcaXY2()); - covarianceDcaZDcaZVsPt[p]->Fill(mcParticle.pt(), track.sigmaDcaZ2()); + // covarianceDcaXyDcaXyVsPt[p]->Fill(mcParticle.pt(), track.sigmaDcaXY2()); + // covarianceDcaZDcaZVsPt[p]->Fill(mcParticle.pt(), track.sigmaDcaZ2()); }; fillResolutionHistograms(0); From 3f2ff2d1bfe146f1061d215a2f948b63acfc0c47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Thu, 8 Oct 2026 08:53:29 +0200 Subject: [PATCH 2/2] Refactor histogram declarations in alice3TrackingPerformance Updated the initialization of particlePdgCodes and added histogram declarations for various particle distributions. --- ALICE3/Tasks/alice3TrackingPerformance.cxx | 34 ++++++++++++---------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/ALICE3/Tasks/alice3TrackingPerformance.cxx b/ALICE3/Tasks/alice3TrackingPerformance.cxx index 7224bf0af0f..f0af7813136 100644 --- a/ALICE3/Tasks/alice3TrackingPerformance.cxx +++ b/ALICE3/Tasks/alice3TrackingPerformance.cxx @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -41,27 +42,29 @@ using namespace o2; using namespace o2::framework; -std::shared_ptr particlePdgCodes; -std::map> particlePtDistribution; -std::map> particleEtaDistribution; -std::map> ptDistribution; -std::map> ptResolutionVsPt; -std::map> ptResolutionVsEta; -std::map> invPtResolutionVsPt; -std::map> invPtResolutionVsEta; -std::map> dcaXyResolutionVsPt; -std::map> dcaZResolutionVsPt; -std::map> covariancePtPtVsPt; -std::map> covarianceDcaXyDcaXyVsPt; -std::map> covarianceDcaZDcaZVsPt; struct Alice3TrackingPerformance { - Configurable> pdgCodes{"pdgCodes", {211}, "List of PDG codes to consider for efficiency calculation."}; + Configurable> pdgCodes{"pdgCodes", {211}, "List of signed PDG codes to consider for performance evaluation"}; HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; ConfigurableAxis ptAxis{"ptAxis", {500, 0, 100}, "#it{p}_{T} (GeV/#it{c})"}; ConfigurableAxis etaAxis{"etaAxis", {100, -5.f, 5.f}, "#eta"}; ConfigurableAxis invPtDeltaAxis{"invPtDeltaAxis", {1000, -0.1f, 0.1f}, "1./#it{p}_{T}^{gen} - 1./#it{p}_{T}^{reco} (GeV/#it{c})^{-1}"}; + // Histograms + std::shared_ptr particlePdgCodes; + std::map> particlePtDistribution; + std::map> particleEtaDistribution; + std::map> ptDistribution; + std::map> ptResolutionVsPt; + std::map> ptResolutionVsEta; + std::map> invPtResolutionVsPt; + std::map> invPtResolutionVsEta; + std::map> dcaXyResolutionVsPt; + std::map> dcaZResolutionVsPt; + std::map> covariancePtPtVsPt; + std::map> covarianceDcaXyDcaXyVsPt; + std::map> covarianceDcaZDcaZVsPt; + void init(o2::framework::InitContext&) { // Check if pdgCodes has duplicates and remove them @@ -77,7 +80,8 @@ struct Alice3TrackingPerformance { const AxisSpec axisCovariancePtPt{100, 0, 10, "cov(#it{p}_{T}, #it{p}_{T}) ((GeV/#it{c})^{2})"}; const AxisSpec axisCovarianceDcaXyDcaXy{100, 0, 1, "cov(DCA_{xy}, DCA_{xy}) (cm^{2})"}; const AxisSpec axisCovarianceDcaZDcaZ{100, 0, 1, "cov(DCA_{z}, DCA_{z}) (cm^{2})"}; - particlePdgCodes = histos.add("particlePdgCodes", "", kTH1D, {AxisSpec{pdgCodes.value.size(), -0.5, -0.5 + pdgCodes.value.size(), "PDG Code"}}); + const int nBinsPdgCodes = static_cast(pdgCodes.value.size()); + particlePdgCodes = histos.add("particlePdgCodes", "", kTH1D, {AxisSpec{nBinsPdgCodes, -0.5, -0.5 + nBinsPdgCodes, "PDG Code"}}); for (const int& pdg : pdgCodes.value) { std::string prefix = Form("%i", pdg); if (pdg < 0) {