From c4b488316935b1fd205f834797f8fcf59fa2a8e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Tiek=C3=B6tter?= Date: Thu, 20 Aug 2026 11:27:04 +0200 Subject: [PATCH 1/4] Update ALICE3 centrality task --- ALICE3/TableProducer/CMakeLists.txt | 2 +- ...e3-centrality.cxx => alice3Centrality.cxx} | 52 +++++++++---------- 2 files changed, 27 insertions(+), 27 deletions(-) rename ALICE3/TableProducer/{alice3-centrality.cxx => alice3Centrality.cxx} (61%) diff --git a/ALICE3/TableProducer/CMakeLists.txt b/ALICE3/TableProducer/CMakeLists.txt index 7011fe5a38f..c4494730197 100644 --- a/ALICE3/TableProducer/CMakeLists.txt +++ b/ALICE3/TableProducer/CMakeLists.txt @@ -22,7 +22,7 @@ o2physics_add_dpl_workflow(alice3-trackextension COMPONENT_NAME Analysis) o2physics_add_dpl_workflow(alice3-centrality - SOURCES alice3-centrality.cxx + SOURCES alice3Centrality.cxx PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore COMPONENT_NAME Analysis) diff --git a/ALICE3/TableProducer/alice3-centrality.cxx b/ALICE3/TableProducer/alice3Centrality.cxx similarity index 61% rename from ALICE3/TableProducer/alice3-centrality.cxx rename to ALICE3/TableProducer/alice3Centrality.cxx index d5afacd69b4..3d091da3d00 100644 --- a/ALICE3/TableProducer/alice3-centrality.cxx +++ b/ALICE3/TableProducer/alice3Centrality.cxx @@ -10,6 +10,8 @@ // or submit itself to any jurisdiction. /// \author Nicolo' Jacazio , CERN /// \author David Dobrigkeit Chinellato , UNICAMP/CERN +/// \brief Centrality producer for ALICE3 +/// \file alice3Centrality.cxx #include "Common/DataModel/Centrality.h" #include "Common/DataModel/TrackSelectionTables.h" @@ -25,6 +27,7 @@ #include #include #include +#include #include #include @@ -36,63 +39,60 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; -struct ALICE3Centrality { +constexpr float DefaultMult = 10000.0f; + +struct Alice3Centrality { Produces cent; Service ccdb; HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; - Configurable MinEta{"MinEta", -4.0f, "Minimum eta in range"}; - Configurable MaxEta{"MaxEta", 4.0f, "Maximum eta in range"}; - Configurable MaxMult{"MaxMult", 10000.f, "Maximum multiplicity in range"}; - Configurable MaxDCA{"MaxDCA", 0.0025f, "Max DCAxy and DCAz for counted tracks"}; - Configurable url{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable ccdbNoLaterThan{"ccdbNoLaterThan", 1, "latest acceptable timestamp of creation for the object"}; + Configurable minEta{"minEta", -4.0f, "Minimum eta in range"}; + Configurable maxEta{"maxEta", 4.0f, "Maximum eta in range"}; + Configurable maxMult{"maxMult", 10000.0f, "Maximum multiplicity in range"}; + Configurable maxDCA{"maxDCA", 0.0025f, "Max DCAxy and DCAz for counted tracks"}; + Configurable vtxZ{"vtxZ", 10.0f, "Max event vertex z position allowed"}; + Configurable minNumContrib{"minNumContrib", 1, "Minimum required number of primary vertex contributors"}; + Configurable ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + + Filter trackFilter = (aod::track::eta >= minEta) && (aod::track::eta <= maxEta) && (nabs(aod::track::dcaXY) <= maxDCA) && (nabs(aod::track::dcaZ) <= maxDCA); bool centralityLoaded = false; TH1D* hCumMultALICE3 = nullptr; void init(InitContext&) { - const AxisSpec axisMult{MaxMult.value > 10000.f ? 10000 : (int)MaxMult, 0, MaxMult, "Reconstructed tracks"}; + const AxisSpec axisMult{maxMult.value > DefaultMult ? (int)DefaultMult : (int)maxMult, 0, maxMult, "Reconstructed tracks"}; const AxisSpec axisCent{150, 0, 150, "Percentile"}; - TString tit = Form("%.3f < #it{#eta} < %.3f", MinEta.value, MaxEta.value); + TString tit = Form("%.3f < #it{#eta} < %.3f", minEta.value, maxEta.value); histos.add("centrality/numberOfTracks", tit, kTH1D, {axisMult}); histos.add("centrality/centralityDistribution", "Centrality test", kTH1D, {axisCent}); - ccdb->setURL(url.value); + ccdb->setURL(ccdbUrl.value); ccdb->setCaching(true); ccdb->setLocalObjectValidityChecking(); } - int nevs = 0; - void process(const o2::aod::Collision& collision, const soa::Join& tracks) + void process(const o2::aod::Collision& collision, const soa::Filtered>& tracks) { if (!centralityLoaded) { - hCumMultALICE3 = ccdb->getForTimeStamp("Analysis/ALICE3/Centrality", 1); + hCumMultALICE3 = ccdb->getForTimeStamp("Analysis/ALICE3/Centrality", ccdbNoLaterThan.value); centralityLoaded = true; LOGF(info, "ALICE 3 centrality calibration loaded!"); } - int nTracks = 0; - if (collision.numContrib() < 1) { + if (collision.numContrib() < minNumContrib.value) { histos.fill(HIST("centrality/centralityDistribution"), 101); cent(101); return; } - if (fabs(collision.posZ()) > 10) { + if (std::fabs(collision.posZ()) > vtxZ.value) { histos.fill(HIST("centrality/centralityDistribution"), 102); cent(102); return; } - for (const auto& track : tracks) { - if (track.eta() < MinEta || track.eta() > MaxEta) { - continue; - } - if (abs(track.dcaXY()) > MaxDCA || abs(track.dcaZ()) > MaxDCA) { - continue; - } - nTracks++; - } - LOG(info) << nevs++ << ") Event " << collision.globalIndex() << " has " << nTracks << " tracks"; + + const auto nTracks = tracks.size(); histos.fill(HIST("centrality/numberOfTracks"), nTracks); float centALICE3 = hCumMultALICE3->GetBinContent(hCumMultALICE3->FindBin(nTracks)); @@ -103,5 +103,5 @@ struct ALICE3Centrality { WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { - return WorkflowSpec{adaptAnalysisTask(cfgc, TaskName{"alice3-centrality"})}; + return WorkflowSpec{adaptAnalysisTask(cfgc)}; } From 3644c175a2ffe082b5933e83342d861d3a901090 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Thu, 20 Aug 2026 09:36:17 +0000 Subject: [PATCH 2/4] Please consider the following formatting changes --- ALICE3/TableProducer/alice3Centrality.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ALICE3/TableProducer/alice3Centrality.cxx b/ALICE3/TableProducer/alice3Centrality.cxx index 3d091da3d00..acb46782444 100644 --- a/ALICE3/TableProducer/alice3Centrality.cxx +++ b/ALICE3/TableProducer/alice3Centrality.cxx @@ -22,12 +22,12 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include From 269f48ca6c233b9dd9414470430649ded02df3e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Tiek=C3=B6tter?= Date: Thu, 20 Aug 2026 11:50:16 +0200 Subject: [PATCH 3/4] Remove C-Style cast --- ALICE3/TableProducer/alice3Centrality.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ALICE3/TableProducer/alice3Centrality.cxx b/ALICE3/TableProducer/alice3Centrality.cxx index acb46782444..d8bd092f6d5 100644 --- a/ALICE3/TableProducer/alice3Centrality.cxx +++ b/ALICE3/TableProducer/alice3Centrality.cxx @@ -34,6 +34,7 @@ #include #include +#include using namespace o2; using namespace o2::framework; @@ -62,7 +63,7 @@ struct Alice3Centrality { void init(InitContext&) { - const AxisSpec axisMult{maxMult.value > DefaultMult ? (int)DefaultMult : (int)maxMult, 0, maxMult, "Reconstructed tracks"}; + const AxisSpec axisMult{maxMult.value > DefaultMult ? static_cast(DefaultMult) : static_cast(maxMult), 0, maxMult, "Reconstructed tracks"}; const AxisSpec axisCent{150, 0, 150, "Percentile"}; TString tit = Form("%.3f < #it{#eta} < %.3f", minEta.value, maxEta.value); histos.add("centrality/numberOfTracks", tit, kTH1D, {axisMult}); From b448b3cef89ffadc5ecb4fdc571e17aaebeae95d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Tiek=C3=B6tter?= Date: Thu, 20 Aug 2026 17:09:04 +0200 Subject: [PATCH 4/4] Make CCDB path configurable, add ConfigurableAxis --- ALICE3/TableProducer/alice3Centrality.cxx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ALICE3/TableProducer/alice3Centrality.cxx b/ALICE3/TableProducer/alice3Centrality.cxx index d8bd092f6d5..8400d6bca49 100644 --- a/ALICE3/TableProducer/alice3Centrality.cxx +++ b/ALICE3/TableProducer/alice3Centrality.cxx @@ -33,6 +33,7 @@ #include #include +#include #include #include @@ -40,8 +41,6 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; -constexpr float DefaultMult = 10000.0f; - struct Alice3Centrality { Produces cent; Service ccdb; @@ -50,11 +49,14 @@ struct Alice3Centrality { Configurable ccdbNoLaterThan{"ccdbNoLaterThan", 1, "latest acceptable timestamp of creation for the object"}; Configurable minEta{"minEta", -4.0f, "Minimum eta in range"}; Configurable maxEta{"maxEta", 4.0f, "Maximum eta in range"}; - Configurable maxMult{"maxMult", 10000.0f, "Maximum multiplicity in range"}; Configurable maxDCA{"maxDCA", 0.0025f, "Max DCAxy and DCAz for counted tracks"}; Configurable vtxZ{"vtxZ", 10.0f, "Max event vertex z position allowed"}; Configurable minNumContrib{"minNumContrib", 1, "Minimum required number of primary vertex contributors"}; Configurable ccdbUrl{"ccdbUrl", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; + Configurable ccdbPath{"ccdbPath", "Analysis/ALICE3/Centrality", "path to the ccdb object"}; + + ConfigurableAxis axisMult{"axisMult", {10000, 0, 10000}, "Reconstructed tracks"}; + ConfigurableAxis axisCent{"axisCent", {150, 0, 150}, "Percentile"}; Filter trackFilter = (aod::track::eta >= minEta) && (aod::track::eta <= maxEta) && (nabs(aod::track::dcaXY) <= maxDCA) && (nabs(aod::track::dcaZ) <= maxDCA); @@ -63,8 +65,6 @@ struct Alice3Centrality { void init(InitContext&) { - const AxisSpec axisMult{maxMult.value > DefaultMult ? static_cast(DefaultMult) : static_cast(maxMult), 0, maxMult, "Reconstructed tracks"}; - const AxisSpec axisCent{150, 0, 150, "Percentile"}; TString tit = Form("%.3f < #it{#eta} < %.3f", minEta.value, maxEta.value); histos.add("centrality/numberOfTracks", tit, kTH1D, {axisMult}); histos.add("centrality/centralityDistribution", "Centrality test", kTH1D, {axisCent}); @@ -77,7 +77,7 @@ struct Alice3Centrality { void process(const o2::aod::Collision& collision, const soa::Filtered>& tracks) { if (!centralityLoaded) { - hCumMultALICE3 = ccdb->getForTimeStamp("Analysis/ALICE3/Centrality", ccdbNoLaterThan.value); + hCumMultALICE3 = ccdb->getForTimeStamp(ccdbPath.value, ccdbNoLaterThan.value); centralityLoaded = true; LOGF(info, "ALICE 3 centrality calibration loaded!"); }