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 59% rename from ALICE3/TableProducer/alice3-centrality.cxx rename to ALICE3/TableProducer/alice3Centrality.cxx index d5afacd69b4..8400d6bca49 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" @@ -20,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -30,69 +33,67 @@ #include #include +#include #include +#include using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; -struct ALICE3Centrality { +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 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); 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 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(ccdbPath.value, 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 +104,5 @@ struct ALICE3Centrality { WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { - return WorkflowSpec{adaptAnalysisTask(cfgc, TaskName{"alice3-centrality"})}; + return WorkflowSpec{adaptAnalysisTask(cfgc)}; }