From 9718fa47e4d18a72b9b99ddbf6bac6c2af383a60 Mon Sep 17 00:00:00 2001 From: jesgum Date: Fri, 12 Dec 2025 16:19:20 +0100 Subject: [PATCH 1/9] Remove excessive print out --- ALICE3/Core/DelphesO2TrackSmearer.cxx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ALICE3/Core/DelphesO2TrackSmearer.cxx b/ALICE3/Core/DelphesO2TrackSmearer.cxx index 599d9cd9413..23eb2632375 100644 --- a/ALICE3/Core/DelphesO2TrackSmearer.cxx +++ b/ALICE3/Core/DelphesO2TrackSmearer.cxx @@ -157,9 +157,9 @@ lutEntry_t* TrackSmearer::getLUTEntry(const int pdg, const float nch, const floa { const int ipdg = getIndexPDG(pdg); if (!mLUTHeader[ipdg]) { - LOG(error) << " --- getLUTEntry: LUT header not loaded for pdg=" << pdg << ". Returning nullptr."; return nullptr; } + auto inch = mLUTHeader[ipdg]->nchmap.find(nch); auto irad = mLUTHeader[ipdg]->radmap.find(radius); auto ieta = mLUTHeader[ipdg]->etamap.find(eta); @@ -281,7 +281,6 @@ bool TrackSmearer::smearTrack(O2Track& o2track, lutEntry_t* lutEntry, float inte bool TrackSmearer::smearTrack(O2Track& o2track, int pdg, float nch) { - auto pt = o2track.getPt(); switch (pdg) { case o2::constants::physics::kHelium3: From 8f5aa0469f6f5a666bdfd963196c00741c89a654 Mon Sep 17 00:00:00 2001 From: jesgum Date: Sun, 31 May 2026 13:33:06 +0200 Subject: [PATCH 2/9] Add IR vs Centrality histograms to centrality study --- Common/Tasks/centralityStudy.cxx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Common/Tasks/centralityStudy.cxx b/Common/Tasks/centralityStudy.cxx index 298a7e57eaf..66e69f8bc20 100644 --- a/Common/Tasks/centralityStudy.cxx +++ b/Common/Tasks/centralityStudy.cxx @@ -301,6 +301,7 @@ struct centralityStudy { histos.add("hNMFTTracksVsCentrality", "hNMFTTracksVsCentrality", kTH2F, {axisCentrality, axisMultMFTTracks}); histos.add("hPVChi2VsCentrality", "hPVChi2VsCentrality", kTH2F, {axisCentrality, axisPVChi2}); histos.add("hDeltaTimeVsCentrality", "hDeltaTimeVsCentrality", kTH2F, {axisCentrality, axisDeltaTime}); + histos.add("hInteractionRateVsCentrality", "hInteractionRateVsCentrality", kTH2F, {axisCentrality, axisInteractionRate}); if (studies.doOccupancyStudyVsCentrality2d) { histos.add("hNcontribsProfileVsTrackOccupancyVsCentrality", "hNcontribsProfileVsTrackOccupancyVsCentrality", kTProfile2D, {axisTrackOccupancy, axisCentrality}); @@ -434,6 +435,7 @@ struct centralityStudy { histPointers.insert({histPath + "hNGlobalTracks", histos.add((histPath + "hNGlobalTracks").c_str(), "hNGlobalTracks", {kTH1D, {{axisMultUltraFineGlobalTracks}}})}); histPointers.insert({histPath + "hNMFTTracks", histos.add((histPath + "hNMFTTracks").c_str(), "hNMFTTracks", {kTH1D, {{axisMultUltraFineMFTTracks}}})}); histPointers.insert({histPath + "hNPVContributors", histos.add((histPath + "hNPVContributors").c_str(), "hNPVContributors", {kTH1D, {{axisMultUltraFinePVContributors}}})}); + histPointers.insert({histPath + "hInteractionRate", histos.add((histPath + "hInteractionRate").c_str(), "hInteractionRate", {kTH1D, {{axisInteractionRate}}})}); if (applyVertexZEqualization) { histPointers.insert({histPath + "hFT0C_Collisions_Unequalized", histos.add((histPath + "hFT0C_Collisions_Unequalized").c_str(), "hFT0C_Collisions_Unequalized", {kTH1D, {{axisMultUltraFineFT0C}}})}); @@ -474,6 +476,8 @@ struct centralityStudy { histPointers.insert({histPath + "hNMFTTracksVsCentrality", histos.add((histPath + "hNMFTTracksVsCentrality").c_str(), "hNMFTTracksVsCentrality", {kTH2F, {{axisCentrality, axisMultMFTTracks}}})}); histPointers.insert({histPath + "hPVChi2VsCentrality", histos.add((histPath + "hPVChi2VsCentrality").c_str(), "hPVChi2VsCentrality", {kTH2F, {{axisCentrality, axisPVChi2}}})}); histPointers.insert({histPath + "hDeltaTimeVsCentrality", histos.add((histPath + "hDeltaTimeVsCentrality").c_str(), "hDeltaTimeVsCentrality", {kTH2F, {{axisCentrality, axisDeltaTime}}})}); + histPointers.insert({histPath + "hInteractionRateVsCentrality", histos.add((histPath + "hInteractionRateVsCentrality").c_str(), "hInteractionRateVsCentrality", {kTH2F, {{axisCentrality, axisInteractionRate}}})}); + } if (studies.doNGlobalTracksVsRawSignals) { @@ -497,7 +501,6 @@ struct centralityStudy { histPointers.insert({histPath + "hPVzProfileCoVsTime", histos.add((histPath + "hPVzProfileCoVsTime").c_str(), "hPVzProfileCoVsTime", {kTProfile, {{axisDeltaTimestamp}}})}); histPointers.insert({histPath + "hPVzProfileBcVsTime", histos.add((histPath + "hPVzProfileBcVsTime").c_str(), "hPVzProfileBcVsTime", {kTProfile, {{axisDeltaTimestamp}}})}); histPointers.insert({histPath + "hIRProfileVsTime", histos.add((histPath + "hIRProfileVsTime").c_str(), "hIRProfileVsTime", {kTProfile, {{axisDeltaTimestamp}}})}); - histPointers.insert({histPath + "hInteractionRate", histos.add((histPath + "hInteractionRate").c_str(), "hInteractionRate", {kTH1D, {{axisInteractionRate}}})}); } } @@ -869,6 +872,12 @@ struct centralityStudy { uint64_t bcTimestamp = multbc.timestamp(); const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, irSource.value, irCrashOnNull) / 1000.; // kHz histos.fill(HIST("hInteractionRate"), interactionRate); + if (constexpr (requires { collision.FT0C(); })) { + histos.fill(HIST("hInteractionRateVsCentrality"), collision.centFT0C(), interactionRate); + if (studies.doRunByRunHistograms) { + getHist(TH2, histPath + "hInteractionRateVsCentrality")->Fill(collision.centFT0C(), interactionRate); + } + } if (studies.doRunByRunHistograms) { getHist(TH1, histPath + "hInteractionRate")->Fill(interactionRate); if (studies.doTimeStudies) { From 1a3fc3f947f63152f6d94e5acdbda8dec35e9a48 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Sun, 31 May 2026 11:40:04 +0000 Subject: [PATCH 3/9] Please consider the following formatting changes --- Common/Tasks/centralityStudy.cxx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Common/Tasks/centralityStudy.cxx b/Common/Tasks/centralityStudy.cxx index 66e69f8bc20..b743b9ed2ee 100644 --- a/Common/Tasks/centralityStudy.cxx +++ b/Common/Tasks/centralityStudy.cxx @@ -477,7 +477,6 @@ struct centralityStudy { histPointers.insert({histPath + "hPVChi2VsCentrality", histos.add((histPath + "hPVChi2VsCentrality").c_str(), "hPVChi2VsCentrality", {kTH2F, {{axisCentrality, axisPVChi2}}})}); histPointers.insert({histPath + "hDeltaTimeVsCentrality", histos.add((histPath + "hDeltaTimeVsCentrality").c_str(), "hDeltaTimeVsCentrality", {kTH2F, {{axisCentrality, axisDeltaTime}}})}); histPointers.insert({histPath + "hInteractionRateVsCentrality", histos.add((histPath + "hInteractionRateVsCentrality").c_str(), "hInteractionRateVsCentrality", {kTH2F, {{axisCentrality, axisInteractionRate}}})}); - } if (studies.doNGlobalTracksVsRawSignals) { @@ -872,7 +871,7 @@ struct centralityStudy { uint64_t bcTimestamp = multbc.timestamp(); const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, irSource.value, irCrashOnNull) / 1000.; // kHz histos.fill(HIST("hInteractionRate"), interactionRate); - if (constexpr (requires { collision.FT0C(); })) { + if (constexpr(requires { collision.FT0C(); })) { histos.fill(HIST("hInteractionRateVsCentrality"), collision.centFT0C(), interactionRate); if (studies.doRunByRunHistograms) { getHist(TH2, histPath + "hInteractionRateVsCentrality")->Fill(collision.centFT0C(), interactionRate); From 1224f5e7b85773ffdb377e24a9583e9c89af53cd Mon Sep 17 00:00:00 2001 From: jesgum Date: Sun, 31 May 2026 13:47:34 +0200 Subject: [PATCH 4/9] update --- Common/Tasks/centralityStudy.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/Tasks/centralityStudy.cxx b/Common/Tasks/centralityStudy.cxx index b743b9ed2ee..26cb0b9ec58 100644 --- a/Common/Tasks/centralityStudy.cxx +++ b/Common/Tasks/centralityStudy.cxx @@ -871,7 +871,7 @@ struct centralityStudy { uint64_t bcTimestamp = multbc.timestamp(); const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, irSource.value, irCrashOnNull) / 1000.; // kHz histos.fill(HIST("hInteractionRate"), interactionRate); - if (constexpr(requires { collision.FT0C(); })) { + if constexpr(requires { collision.FT0C(); }) { histos.fill(HIST("hInteractionRateVsCentrality"), collision.centFT0C(), interactionRate); if (studies.doRunByRunHistograms) { getHist(TH2, histPath + "hInteractionRateVsCentrality")->Fill(collision.centFT0C(), interactionRate); From e12376c02684263ec6af15e0d44b837f8c24d22e Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Sun, 31 May 2026 11:48:23 +0000 Subject: [PATCH 5/9] Please consider the following formatting changes --- Common/Tasks/centralityStudy.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/Tasks/centralityStudy.cxx b/Common/Tasks/centralityStudy.cxx index 26cb0b9ec58..da2005c7a2b 100644 --- a/Common/Tasks/centralityStudy.cxx +++ b/Common/Tasks/centralityStudy.cxx @@ -871,7 +871,7 @@ struct centralityStudy { uint64_t bcTimestamp = multbc.timestamp(); const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, irSource.value, irCrashOnNull) / 1000.; // kHz histos.fill(HIST("hInteractionRate"), interactionRate); - if constexpr(requires { collision.FT0C(); }) { + if constexpr (requires { collision.FT0C(); }) { histos.fill(HIST("hInteractionRateVsCentrality"), collision.centFT0C(), interactionRate); if (studies.doRunByRunHistograms) { getHist(TH2, histPath + "hInteractionRateVsCentrality")->Fill(collision.centFT0C(), interactionRate); From 14f96769e7472437230445a8c2bb0bc9a5738b96 Mon Sep 17 00:00:00 2001 From: jesgum Date: Mon, 1 Jun 2026 11:53:15 +0200 Subject: [PATCH 6/9] Get centrality calibration directly --- Common/Tasks/centralityStudy.cxx | 192 +++++++++++++++++++++++-------- 1 file changed, 147 insertions(+), 45 deletions(-) diff --git a/Common/Tasks/centralityStudy.cxx b/Common/Tasks/centralityStudy.cxx index 298a7e57eaf..f30faa0cb6a 100644 --- a/Common/Tasks/centralityStudy.cxx +++ b/Common/Tasks/centralityStudy.cxx @@ -53,7 +53,7 @@ struct centralityStudy { HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; std::map histPointers; std::string histPath; - Service ccdb; + Service mCcdb; ctpRateFetcher mRateFetcher; int mRunNumber; uint64_t startOfRunTimestamp; @@ -69,15 +69,39 @@ struct centralityStudy { TProfile* hVtxZFDDA; TProfile* hVtxZFDDC; + // calibration histograms + TH1* hCentralityFV0A = nullptr; + TH1* hCentralityFT0A = nullptr; + TH1* hCentralityFT0C = nullptr; + TH1* hCentralityFT0M = nullptr; + TH1* hCentralityFDDM = nullptr; + TH1* hCentralityNTPV = nullptr; + TH1* hCentralityNGlo = nullptr; + TH1* hCentralityMFT = nullptr; + + float centFV0A = 105.f; + float centFT0A = 105.f; + float centFT0C = 105.f; + float centFT0M = 105.f; + float centFDDM = 105.f; + float centNTPV = 105.f; + float centNGlo = 105.f; + float centMFT = 105.f; + // Configurables Configurable applyVertexZEqualization{"applyVertexZEqualization", false, "0 - no, 1 - yes"}; Configurable minTimeDelta{"minTimeDelta", -1.0f, "reject collision if another collision is this close or less in time"}; - Configurable ccdbURL{"ccdbURL", "http://alice-ccdb.cern.ch", "ccdb url"}; - Configurable pathGRPECSObject{"pathGRPECSObject", "GLO/Config/GRPECS", "Path to GRPECS object"}; - Configurable pathVertexZ{"pathVertexZ", "Users/d/ddobrigk/Centrality/Calibration", "Path to vertexZ profiles"}; - Configurable irSource{"irSource", "ZNC hadronic", "Source of the interaction rate: (Recommended: pp --> T0VTX, Pb-Pb --> ZNC hadronic)"}; - Configurable irCrashOnNull{"irCrashOnNull", false, "Flag to avoid CTP RateFetcher crash."}; + struct : ConfigurableGroup { + std::string prefix = "ccdb"; + Configurable ccdbURL{"ccdbURL", "http://alice-ccdb.cern.ch", "ccdb url"}; + Configurable pathCentrality{"pathCentrality", "Centrality/Estimators", "path to centrality calibration"}; + Configurable pathGRPECSObject{"pathGRPECSObject", "GLO/Config/GRPECS", "Path to GRPECS object"}; + Configurable pathVertexZ{"pathVertexZ", "Users/d/ddobrigk/Centrality/Calibration", "Path to vertexZ profiles"}; + Configurable irSource{"irSource", "ZNC hadronic", "Source of the interaction rate: (Recommended: pp --> T0VTX, Pb-Pb --> ZNC hadronic)"}; + Configurable irCrashOnNull{"irCrashOnNull", false, "Flag to avoid CTP RateFetcher crash."}; + Configurable fetchCentralityCalibration{"fetchCentralityCalibration", false, "Flag to fetch the centrality calibration within the task instead of the centrality table"}; + } ccdb; // _______________________________________ // Configurable group @@ -212,10 +236,19 @@ struct centralityStudy { hVtxZFDDA = nullptr; hVtxZFDDC = nullptr; - ccdb->setURL(ccdbURL); - // ccdb->setCaching(true); - // ccdb->setLocalObjectValidityChecking(); - ccdb->setFatalWhenNull(false); + hCentralityFV0A = nullptr; + hCentralityFT0A = nullptr; + hCentralityFT0C = nullptr; + hCentralityFT0M = nullptr; + hCentralityFDDM = nullptr; + hCentralityNTPV = nullptr; + hCentralityNGlo = nullptr; + hCentralityMFT = nullptr; + + mCcdb->setURL(ccdb.ccdbURL); + // mCcdb->setCaching(true); + // mCcdb->setLocalObjectValidityChecking(); + mCcdb->setFatalWhenNull(false); if (doprocessCollisions || doprocessCollisionsWithCentrality) { histos.add("hCollisionSelection", "hCollisionSelection", kTH1D, {{20, -0.5f, +19.5f}}); @@ -379,13 +412,13 @@ struct centralityStudy { LOGF(info, "Setting up for run: %i", mRunNumber); // only get object when switching runs - o2::parameters::GRPECSObject* grpo = ccdb->getForRun(pathGRPECSObject, mRunNumber); + o2::parameters::GRPECSObject* grpo = mCcdb->getForRun(ccdb.pathGRPECSObject, mRunNumber); startOfRunTimestamp = grpo->getTimeStart(); if (applyVertexZEqualization.value) { // acquire vertex-Z equalization histograms if requested LOGF(info, "Acquiring vertex-Z profiles for run %i", mRunNumber); - hCalibObjects = ccdb->getForRun(pathVertexZ, mRunNumber); + hCalibObjects = mCcdb->getForRun(ccdb.pathVertexZ, mRunNumber); hVtxZFV0A = static_cast(hCalibObjects->FindObject("hVtxZFV0A")); hVtxZFT0A = static_cast(hCalibObjects->FindObject("hVtxZFT0A")); @@ -402,6 +435,77 @@ struct centralityStudy { } } + if (doprocessCollisionsWithCentrality && ccdb.fetchCentralityCalibration) { + LOGF(info, "Acquiring centrality calibration for run %i", mRunNumber); + TList* hCentralityObjects = nullptr; + hCentralityObjects = mCcdb->getForRun(ccdb.pathCentrality, mRunNumber); + hCentralityFV0A = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqFV0")); + hCentralityFT0A = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqFT0A")); + hCentralityFT0C = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqFT0C")); + hCentralityFT0M = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqFT0")); + hCentralityFDDM = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqFDD")); + hCentralityNTPV = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqNTracksPV")); + hCentralityNGlo = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqNGlobal")); + hCentralityMFT = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqMFT")); + + // won't capture null pointers -> explicitly check for those when attempting to evaluate + auto reportSuccess = [](TH1* hist, std::string name) { + if (!hist) { + LOGF(info, "Calibration missing for %s", name); + } else { + LOGF(info, "Calibration loaded for %s", name); + } + }; + + reportSuccess(hCentralityFV0A, "FV0A"); + reportSuccess(hCentralityFT0A, "FT0A"); + reportSuccess(hCentralityFT0C, "FT0C"); + reportSuccess(hCentralityFT0M, "FT0M"); + reportSuccess(hCentralityFDDM, "FDDM"); + reportSuccess(hCentralityNTPV, "NTPV"); + reportSuccess(hCentralityNGlo, "NGlobals"); + reportSuccess(hCentralityMFT, "MFT"); + + LOGF(info, "Centrality calibration loading done."); + auto getCent = [](TH1* hist, float mult) -> float { + return hist ? hist->GetBinContent(mult) : 0.0; + }; + + centFV0A = getCent(hCentralityFV0A, collision.multFV0A()); + centFT0A = getCent(hCentralityFT0A, collision.multFT0A()); + centFT0C = getCent(hCentralityFT0C, collision.multFT0C()); + centFT0M = getCent(hCentralityFT0M, collision.multFT0A() + collision.multFT0C()); + centFDDM = getCent(hCentralityFDDM, collision.multFDDA() + collision.multFDDC()); + centNTPV = getCent(hCentralityNTPV, collision.multNTracksPV()); + centNGlo = getCent(hCentralityNGlo, collision.multNTracksGlobal()); + centMFT = getCent(hCentralityMFT, collision.mftNtracks()); + } else if (doprocessCollisionsWithCentrality) { + if constexpr (requires { collision.centFV0A(); }) { + centFV0A = collision.centFV0A(); + } + if constexpr (requires { collision.centFT0A(); }) { + centFT0A = collision.centFT0A(); + } + if constexpr (requires { collision.centFT0C(); }) { + centFT0C = collision.centFT0C(); + } + if constexpr (requires { collision.centFT0M(); }) { + centFT0M = collision.centFT0M(); + } + if constexpr (requires { collision.centFDDM(); }) { + centFDDM = collision.centFDDM(); + } + if constexpr (requires { collision.centNTPV(); }) { + centNTPV = collision.centNTPV(); + } + if constexpr (requires { collision.centNGlobal(); }) { + centNGlo = collision.centNGlobal(); + } + if constexpr (requires { collision.centMFT(); }) { + centMFT = collision.centMFT(); + } + } + if (!studies.doRunByRunHistograms) { return; } @@ -652,7 +756,7 @@ struct centralityStudy { float timeToNeighbour = TMath::Min( std::abs(collision.timeToNext()), std::abs(collision.timeToPrevious())); - histos.fill(HIST("hDeltaTimeVsCentrality"), collision.centFT0C(), timeToNeighbour); + histos.fill(HIST("hDeltaTimeVsCentrality"), centFT0C, timeToNeighbour); if (timeToNeighbour < minTimeDelta) { return; } @@ -830,44 +934,42 @@ struct centralityStudy { } // if the table has centrality information - if constexpr (requires { collision.centFT0C(); }) { - // process FT0C centrality plots - histos.fill(HIST("hCentrality"), collision.centFT0C()); - histos.fill(HIST("hNContribsVsCentrality"), collision.centFT0C(), collision.multPVTotalContributors()); - histos.fill(HIST("hNITSTPCTracksVsCentrality"), collision.centFT0C(), collision.multNTracksITSTPC()); - histos.fill(HIST("hNITSOnlyTracksVsCentrality"), collision.centFT0C(), collision.multNTracksITSOnly()); - histos.fill(HIST("hNGlobalTracksVsCentrality"), collision.centFT0C(), collision.multNTracksGlobal()); - histos.fill(HIST("hNMFTTracksVsCentrality"), collision.centFT0C(), collision.mftNtracks()); - histos.fill(HIST("hPVChi2VsCentrality"), collision.centFT0C(), collision.multPVChi2()); - if (studies.doRunByRunHistograms) { - getHist(TH1, histPath + "hCentrality")->Fill(collision.centFT0C()); - getHist(TH2, histPath + "hNContribsVsCentrality")->Fill(collision.centFT0C(), collision.multPVTotalContributors()); - getHist(TH2, histPath + "hNITSTPCTracksVsCentrality")->Fill(collision.centFT0C(), collision.multNTracksITSTPC()); - getHist(TH2, histPath + "hNITSOnlyTracksVsCentrality")->Fill(collision.centFT0C(), collision.multNTracksITSOnly()); - getHist(TH2, histPath + "hNGlobalTracksVsCentrality")->Fill(collision.centFT0C(), collision.multNTracksGlobal()); - getHist(TH2, histPath + "hNMFTTracksVsCentrality")->Fill(collision.centFT0C(), collision.mftNtracks()); - getHist(TH2, histPath + "hPVChi2VsCentrality")->Fill(collision.centFT0C(), collision.multPVChi2()); - } - if (studies.doOccupancyStudyVsCentrality2d) { - histos.fill(HIST("hNcontribsProfileVsTrackOccupancyVsCentrality"), collision.trackOccupancyInTimeRange(), collision.centFT0C(), collision.multPVTotalContributors()); - histos.fill(HIST("hNGlobalTracksProfileVsTrackOccupancyVsCentrality"), collision.trackOccupancyInTimeRange(), collision.centFT0C(), collision.multNTracksGlobal()); - histos.fill(HIST("hNcontribsProfileVsFT0COccupancyVsCentrality"), collision.ft0cOccupancyInTimeRange(), collision.centFT0C(), collision.multPVTotalContributors()); - histos.fill(HIST("hNGlobalTracksProfileVsFT0COccupancyVsCentrality"), collision.ft0cOccupancyInTimeRange(), collision.centFT0C(), collision.multNTracksGlobal()); - } + // process FT0C centrality plots + histos.fill(HIST("hCentrality"), centFT0C); + histos.fill(HIST("hNContribsVsCentrality"), centFT0C, collision.multPVTotalContributors()); + histos.fill(HIST("hNITSTPCTracksVsCentrality"), centFT0C, collision.multNTracksITSTPC()); + histos.fill(HIST("hNITSOnlyTracksVsCentrality"), centFT0C, collision.multNTracksITSOnly()); + histos.fill(HIST("hNGlobalTracksVsCentrality"), centFT0C, collision.multNTracksGlobal()); + histos.fill(HIST("hNMFTTracksVsCentrality"), centFT0C, collision.mftNtracks()); + histos.fill(HIST("hPVChi2VsCentrality"), centFT0C, collision.multPVChi2()); + if (studies.doRunByRunHistograms) { + getHist(TH1, histPath + "hCentrality")->Fill(centFT0C); + getHist(TH2, histPath + "hNContribsVsCentrality")->Fill(centFT0C, collision.multPVTotalContributors()); + getHist(TH2, histPath + "hNITSTPCTracksVsCentrality")->Fill(centFT0C, collision.multNTracksITSTPC()); + getHist(TH2, histPath + "hNITSOnlyTracksVsCentrality")->Fill(centFT0C, collision.multNTracksITSOnly()); + getHist(TH2, histPath + "hNGlobalTracksVsCentrality")->Fill(centFT0C, collision.multNTracksGlobal()); + getHist(TH2, histPath + "hNMFTTracksVsCentrality")->Fill(centFT0C, collision.mftNtracks()); + getHist(TH2, histPath + "hPVChi2VsCentrality")->Fill(centFT0C, collision.multPVChi2()); + } + if (studies.doOccupancyStudyVsCentrality2d) { + histos.fill(HIST("hNcontribsProfileVsTrackOccupancyVsCentrality"), collision.trackOccupancyInTimeRange(), centFT0C, collision.multPVTotalContributors()); + histos.fill(HIST("hNGlobalTracksProfileVsTrackOccupancyVsCentrality"), collision.trackOccupancyInTimeRange(), centFT0C, collision.multNTracksGlobal()); + histos.fill(HIST("hNcontribsProfileVsFT0COccupancyVsCentrality"), collision.ft0cOccupancyInTimeRange(), centFT0C, collision.multPVTotalContributors()); + histos.fill(HIST("hNGlobalTracksProfileVsFT0COccupancyVsCentrality"), collision.ft0cOccupancyInTimeRange(), centFT0C, collision.multNTracksGlobal()); + } - if (studies.doOccupancyStudyVsCentrality3d) { - histos.fill(HIST("hTrackOccupancyVsNContribsVsCentrality"), collision.trackOccupancyInTimeRange(), collision.multPVTotalContributors(), collision.centFT0C()); - histos.fill(HIST("hTrackOccupancyVsNGlobalTracksVsCentrality"), collision.trackOccupancyInTimeRange(), collision.multNTracksGlobal(), collision.centFT0C()); - histos.fill(HIST("hFT0COccupancyVsNContribsVsCentrality"), collision.ft0cOccupancyInTimeRange(), collision.multPVTotalContributors(), collision.centFT0C()); - histos.fill(HIST("hFT0COccupancyVsNGlobalTracksVsCentrality"), collision.ft0cOccupancyInTimeRange(), collision.multNTracksGlobal(), collision.centFT0C()); - } + if (studies.doOccupancyStudyVsCentrality3d) { + histos.fill(HIST("hTrackOccupancyVsNContribsVsCentrality"), collision.trackOccupancyInTimeRange(), collision.multPVTotalContributors(), centFT0C); + histos.fill(HIST("hTrackOccupancyVsNGlobalTracksVsCentrality"), collision.trackOccupancyInTimeRange(), collision.multNTracksGlobal(), centFT0C); + histos.fill(HIST("hFT0COccupancyVsNContribsVsCentrality"), collision.ft0cOccupancyInTimeRange(), collision.multPVTotalContributors(), centFT0C); + histos.fill(HIST("hFT0COccupancyVsNGlobalTracksVsCentrality"), collision.ft0cOccupancyInTimeRange(), collision.multNTracksGlobal(), centFT0C); } if constexpr (requires { collision.has_multBC(); }) { if (collision.has_multBC()) { auto multbc = collision.template multBC_as(); uint64_t bcTimestamp = multbc.timestamp(); - const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, irSource.value, irCrashOnNull) / 1000.; // kHz + const float interactionRate = mRateFetcher.fetch(mCcdb.service, bcTimestamp, mRunNumber, ccdb.irSource.value, ccdb.irCrashOnNull) / 1000.; // kHz histos.fill(HIST("hInteractionRate"), interactionRate); if (studies.doRunByRunHistograms) { getHist(TH1, histPath + "hInteractionRate")->Fill(interactionRate); @@ -1014,7 +1116,7 @@ struct centralityStudy { histos.fill(HIST("hFV0AT0C_BCs"), (multbc.multFV0A() + multbc.multFT0C()) * scale.factorFV0AT0C); uint64_t bcTimestamp = multbc.timestamp(); - const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, irSource.value, irCrashOnNull) / 1000.; // kHz + const float interactionRate = mRateFetcher.fetch(mCcdb.service, bcTimestamp, mRunNumber, ccdb.irSource.value, ccdb.irCrashOnNull) / 1000.; // kHz histos.fill(HIST("hInteractionRate_BCs"), interactionRate); if (studies.do2DPlots) { From efc8457d87a312d9ae2432ef1128c512fe7d0bc3 Mon Sep 17 00:00:00 2001 From: jesgum Date: Mon, 1 Jun 2026 14:14:53 +0200 Subject: [PATCH 7/9] Add option to directly fetch centrality calibration histograms --- Common/Tasks/centralityStudy.cxx | 76 ++++++++++++++++---------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/Common/Tasks/centralityStudy.cxx b/Common/Tasks/centralityStudy.cxx index 16e4140b102..735166c80eb 100644 --- a/Common/Tasks/centralityStudy.cxx +++ b/Common/Tasks/centralityStudy.cxx @@ -324,7 +324,7 @@ struct centralityStudy { histos.add("hFT0COccupancyVsNGlobalTracksVsFT0C", "hFT0COccupancyVsNGlobalTracksVsFT0C", kTH3F, {axisFT0COccupancy, axisMultGlobalTracks, axisMultFT0C}); } - if (doprocessCollisionsWithCentrality) { + if (doprocessCollisionsWithCentrality || ccdb.fetchCentralityCalibration) { // in case requested: do vs centrality debugging histos.add("hCentrality", "hCentrality", kTH1F, {axisCentrality}); histos.add("hNContribsVsCentrality", "hNContribsVsCentrality", kTH2F, {axisCentrality, axisMultPVContributors}); @@ -436,7 +436,7 @@ struct centralityStudy { } } - if (doprocessCollisionsWithCentrality && ccdb.fetchCentralityCalibration) { + if (ccdb.fetchCentralityCalibration) { LOGF(info, "Acquiring centrality calibration for run %i", mRunNumber); TList* hCentralityObjects = nullptr; hCentralityObjects = mCcdb->getForRun(ccdb.pathCentrality, mRunNumber); @@ -503,7 +503,7 @@ struct centralityStudy { centNGlo = collision.centNGlobal(); } if constexpr (requires { collision.centMFT(); }) { - centMFT = collision.centMFT(); + centMFT = collision.centMFT(); } } @@ -570,7 +570,7 @@ struct centralityStudy { histPointers.insert({histPath + "hFDDCVsFT0C", histos.add((histPath + "hFDDCVsFT0C").c_str(), "hFDDCVsFT0C", {kTH2F, {{axisMultFT0C, axisMultFDDC}}})}); } - if (doprocessCollisionsWithCentrality) { + if (doprocessCollisionsWithCentrality || ccdb.fetchCentralityCalibration) { // in case requested: do vs centrality debugging histPointers.insert({histPath + "hCentrality", histos.add((histPath + "hCentrality").c_str(), "hCentrality", {kTH1F, {{axisCentrality}}})}); histPointers.insert({histPath + "hNContribsVsCentrality", histos.add((histPath + "hNContribsVsCentrality").c_str(), "hNContribsVsCentrality", {kTH2F, {{axisCentrality, axisMultPVContributors}}})}); @@ -937,47 +937,49 @@ struct centralityStudy { // if the table has centrality information // process FT0C centrality plots - histos.fill(HIST("hCentrality"), centFT0C); - histos.fill(HIST("hNContribsVsCentrality"), centFT0C, collision.multPVTotalContributors()); - histos.fill(HIST("hNITSTPCTracksVsCentrality"), centFT0C, collision.multNTracksITSTPC()); - histos.fill(HIST("hNITSOnlyTracksVsCentrality"), centFT0C, collision.multNTracksITSOnly()); - histos.fill(HIST("hNGlobalTracksVsCentrality"), centFT0C, collision.multNTracksGlobal()); - histos.fill(HIST("hNMFTTracksVsCentrality"), centFT0C, collision.mftNtracks()); - histos.fill(HIST("hPVChi2VsCentrality"), centFT0C, collision.multPVChi2()); - if (studies.doRunByRunHistograms) { - getHist(TH1, histPath + "hCentrality")->Fill(centFT0C); - getHist(TH2, histPath + "hNContribsVsCentrality")->Fill(centFT0C, collision.multPVTotalContributors()); - getHist(TH2, histPath + "hNITSTPCTracksVsCentrality")->Fill(centFT0C, collision.multNTracksITSTPC()); - getHist(TH2, histPath + "hNITSOnlyTracksVsCentrality")->Fill(centFT0C, collision.multNTracksITSOnly()); - getHist(TH2, histPath + "hNGlobalTracksVsCentrality")->Fill(centFT0C, collision.multNTracksGlobal()); - getHist(TH2, histPath + "hNMFTTracksVsCentrality")->Fill(centFT0C, collision.mftNtracks()); - getHist(TH2, histPath + "hPVChi2VsCentrality")->Fill(centFT0C, collision.multPVChi2()); - } - if (studies.doOccupancyStudyVsCentrality2d) { - histos.fill(HIST("hNcontribsProfileVsTrackOccupancyVsCentrality"), collision.trackOccupancyInTimeRange(), centFT0C, collision.multPVTotalContributors()); - histos.fill(HIST("hNGlobalTracksProfileVsTrackOccupancyVsCentrality"), collision.trackOccupancyInTimeRange(), centFT0C, collision.multNTracksGlobal()); - histos.fill(HIST("hNcontribsProfileVsFT0COccupancyVsCentrality"), collision.ft0cOccupancyInTimeRange(), centFT0C, collision.multPVTotalContributors()); - histos.fill(HIST("hNGlobalTracksProfileVsFT0COccupancyVsCentrality"), collision.ft0cOccupancyInTimeRange(), centFT0C, collision.multNTracksGlobal()); - } + if (doprocessCollisionsWithCentrality || ccdb.fetchCentralityCalibration) { + histos.fill(HIST("hCentrality"), centFT0C); + histos.fill(HIST("hNContribsVsCentrality"), centFT0C, collision.multPVTotalContributors()); + histos.fill(HIST("hNITSTPCTracksVsCentrality"), centFT0C, collision.multNTracksITSTPC()); + histos.fill(HIST("hNITSOnlyTracksVsCentrality"), centFT0C, collision.multNTracksITSOnly()); + histos.fill(HIST("hNGlobalTracksVsCentrality"), centFT0C, collision.multNTracksGlobal()); + histos.fill(HIST("hNMFTTracksVsCentrality"), centFT0C, collision.mftNtracks()); + histos.fill(HIST("hPVChi2VsCentrality"), centFT0C, collision.multPVChi2()); + if (studies.doRunByRunHistograms) { + getHist(TH1, histPath + "hCentrality")->Fill(centFT0C); + getHist(TH2, histPath + "hNContribsVsCentrality")->Fill(centFT0C, collision.multPVTotalContributors()); + getHist(TH2, histPath + "hNITSTPCTracksVsCentrality")->Fill(centFT0C, collision.multNTracksITSTPC()); + getHist(TH2, histPath + "hNITSOnlyTracksVsCentrality")->Fill(centFT0C, collision.multNTracksITSOnly()); + getHist(TH2, histPath + "hNGlobalTracksVsCentrality")->Fill(centFT0C, collision.multNTracksGlobal()); + getHist(TH2, histPath + "hNMFTTracksVsCentrality")->Fill(centFT0C, collision.mftNtracks()); + getHist(TH2, histPath + "hPVChi2VsCentrality")->Fill(centFT0C, collision.multPVChi2()); + } + if (studies.doOccupancyStudyVsCentrality2d) { + histos.fill(HIST("hNcontribsProfileVsTrackOccupancyVsCentrality"), collision.trackOccupancyInTimeRange(), centFT0C, collision.multPVTotalContributors()); + histos.fill(HIST("hNGlobalTracksProfileVsTrackOccupancyVsCentrality"), collision.trackOccupancyInTimeRange(), centFT0C, collision.multNTracksGlobal()); + histos.fill(HIST("hNcontribsProfileVsFT0COccupancyVsCentrality"), collision.ft0cOccupancyInTimeRange(), centFT0C, collision.multPVTotalContributors()); + histos.fill(HIST("hNGlobalTracksProfileVsFT0COccupancyVsCentrality"), collision.ft0cOccupancyInTimeRange(), centFT0C, collision.multNTracksGlobal()); + } - if (studies.doOccupancyStudyVsCentrality3d) { - histos.fill(HIST("hTrackOccupancyVsNContribsVsCentrality"), collision.trackOccupancyInTimeRange(), collision.multPVTotalContributors(), centFT0C); - histos.fill(HIST("hTrackOccupancyVsNGlobalTracksVsCentrality"), collision.trackOccupancyInTimeRange(), collision.multNTracksGlobal(), centFT0C); - histos.fill(HIST("hFT0COccupancyVsNContribsVsCentrality"), collision.ft0cOccupancyInTimeRange(), collision.multPVTotalContributors(), centFT0C); - histos.fill(HIST("hFT0COccupancyVsNGlobalTracksVsCentrality"), collision.ft0cOccupancyInTimeRange(), collision.multNTracksGlobal(), centFT0C); + if (studies.doOccupancyStudyVsCentrality3d) { + histos.fill(HIST("hTrackOccupancyVsNContribsVsCentrality"), collision.trackOccupancyInTimeRange(), collision.multPVTotalContributors(), centFT0C); + histos.fill(HIST("hTrackOccupancyVsNGlobalTracksVsCentrality"), collision.trackOccupancyInTimeRange(), collision.multNTracksGlobal(), centFT0C); + histos.fill(HIST("hFT0COccupancyVsNContribsVsCentrality"), collision.ft0cOccupancyInTimeRange(), collision.multPVTotalContributors(), centFT0C); + histos.fill(HIST("hFT0COccupancyVsNGlobalTracksVsCentrality"), collision.ft0cOccupancyInTimeRange(), collision.multNTracksGlobal(), centFT0C); + } } if constexpr (requires { collision.has_multBC(); }) { if (collision.has_multBC()) { auto multbc = collision.template multBC_as(); - uint64_t bcTimestamp = multbc.timestamp(); + const uint64_t bcTimestamp = multbc.timestamp(); const float interactionRate = mRateFetcher.fetch(mCcdb.service, bcTimestamp, mRunNumber, ccdb.irSource.value, ccdb.irCrashOnNull) / 1000.; // kHz histos.fill(HIST("hInteractionRate"), interactionRate); - if constexpr (requires { collision.FT0C(); }) { - histos.fill(HIST("hInteractionRateVsCentrality"), collision.centFT0C(), interactionRate); - if (studies.doRunByRunHistograms) { - getHist(TH2, histPath + "hInteractionRateVsCentrality")->Fill(collision.centFT0C(), interactionRate); - } + if (doprocessCollisionsWithCentrality || ccdb.fetchCentralityCalibration) { + histos.fill(HIST("hInteractionRateVsCentrality"), centFT0C, interactionRate); + } + if (studies.doRunByRunHistograms) { + getHist(TH2, histPath + "hInteractionRateVsCentrality")->Fill(centFT0C, interactionRate); } if (studies.doRunByRunHistograms) { getHist(TH1, histPath + "hInteractionRate")->Fill(interactionRate); From a1183367ed5cf184c526ceafaa0c1ac4b44422af Mon Sep 17 00:00:00 2001 From: jesgum Date: Tue, 2 Jun 2026 11:39:33 +0200 Subject: [PATCH 8/9] update --- Common/Tasks/centralityStudy.cxx | 78 ++++++++++++-------------------- 1 file changed, 28 insertions(+), 50 deletions(-) diff --git a/Common/Tasks/centralityStudy.cxx b/Common/Tasks/centralityStudy.cxx index 735166c80eb..781f25429ba 100644 --- a/Common/Tasks/centralityStudy.cxx +++ b/Common/Tasks/centralityStudy.cxx @@ -53,21 +53,20 @@ struct centralityStudy { HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject}; std::map histPointers; std::string histPath; - Service mCcdb; + Service ccdb; ctpRateFetcher mRateFetcher; int mRunNumber; uint64_t startOfRunTimestamp; // vertex Z equalization - TList* hCalibObjects; - TProfile* hVtxZFV0A; - TProfile* hVtxZFT0A; - TProfile* hVtxZFT0C; - TProfile* hVtxZNTracks; - TProfile* hVtxZNGlobals; - TProfile* hVtxZMFT; - TProfile* hVtxZFDDA; - TProfile* hVtxZFDDC; + TProfile* hVtxZFV0A = nullptr; + TProfile* hVtxZFT0A = nullptr; + TProfile* hVtxZFT0C = nullptr; + TProfile* hVtxZNTracks = nullptr; + TProfile* hVtxZNGlobals = nullptr; + TProfile* hVtxZMFT = nullptr; + TProfile* hVtxZFDDA = nullptr; + TProfile* hVtxZFDDC = nullptr; // calibration histograms TH1* hCentralityFV0A = nullptr; @@ -93,15 +92,15 @@ struct centralityStudy { Configurable minTimeDelta{"minTimeDelta", -1.0f, "reject collision if another collision is this close or less in time"}; struct : ConfigurableGroup { - std::string prefix = "ccdb"; + std::string prefix = "ccdbSettings"; Configurable ccdbURL{"ccdbURL", "http://alice-ccdb.cern.ch", "ccdb url"}; - Configurable pathCentrality{"pathCentrality", "Centrality/Estimators", "path to centrality calibration"}; + Configurable pathCentrality{"pathCentrality", "Centrality/Estimators", "path to centrality calibration if fetchCentralityCalibration is enabled"}; Configurable pathGRPECSObject{"pathGRPECSObject", "GLO/Config/GRPECS", "Path to GRPECS object"}; Configurable pathVertexZ{"pathVertexZ", "Users/d/ddobrigk/Centrality/Calibration", "Path to vertexZ profiles"}; Configurable irSource{"irSource", "ZNC hadronic", "Source of the interaction rate: (Recommended: pp --> T0VTX, Pb-Pb --> ZNC hadronic)"}; Configurable irCrashOnNull{"irCrashOnNull", false, "Flag to avoid CTP RateFetcher crash."}; Configurable fetchCentralityCalibration{"fetchCentralityCalibration", false, "Flag to fetch the centrality calibration within the task instead of the centrality table"}; - } ccdb; + } ccdbSettings; // _______________________________________ // Configurable group @@ -151,7 +150,6 @@ struct centralityStudy { Configurable vertexZwithT0{"vertexZwithT0", 1000.0f, "require a certain vertex-Z in BC analysis"}; Configurable rejectIsFlangeEvent{"rejectIsFlangeEvent", false, "At least one channel with -350 TDC < time < -450 TDC"}; Configurable minFT0CforVertexZ{"minFT0CforVertexZ", -1.0f, "minimum FT0C for vertex-Z profile calculation"}; - } bcsel; // _______________________________________ @@ -226,29 +224,10 @@ struct centralityStudy { void init(InitContext&) { - hCalibObjects = nullptr; - hVtxZFV0A = nullptr; - hVtxZFT0A = nullptr; - hVtxZFT0C = nullptr; - hVtxZNTracks = nullptr; - hVtxZNGlobals = nullptr; - hVtxZMFT = nullptr; - hVtxZFDDA = nullptr; - hVtxZFDDC = nullptr; - - hCentralityFV0A = nullptr; - hCentralityFT0A = nullptr; - hCentralityFT0C = nullptr; - hCentralityFT0M = nullptr; - hCentralityFDDM = nullptr; - hCentralityNTPV = nullptr; - hCentralityNGlo = nullptr; - hCentralityMFT = nullptr; - - mCcdb->setURL(ccdb.ccdbURL); - // mCcdb->setCaching(true); - // mCcdb->setLocalObjectValidityChecking(); - mCcdb->setFatalWhenNull(false); + ccdb->setURL(ccdbSettings.ccdbURL); + // ccdb->setCaching(true); + // ccdb->setLocalObjectValidityChecking(); + ccdb->setFatalWhenNull(false); if (doprocessCollisions || doprocessCollisionsWithCentrality) { histos.add("hCollisionSelection", "hCollisionSelection", kTH1D, {{20, -0.5f, +19.5f}}); @@ -324,7 +303,7 @@ struct centralityStudy { histos.add("hFT0COccupancyVsNGlobalTracksVsFT0C", "hFT0COccupancyVsNGlobalTracksVsFT0C", kTH3F, {axisFT0COccupancy, axisMultGlobalTracks, axisMultFT0C}); } - if (doprocessCollisionsWithCentrality || ccdb.fetchCentralityCalibration) { + if (doprocessCollisionsWithCentrality || ccdbSettings.fetchCentralityCalibration) { // in case requested: do vs centrality debugging histos.add("hCentrality", "hCentrality", kTH1F, {axisCentrality}); histos.add("hNContribsVsCentrality", "hNContribsVsCentrality", kTH2F, {axisCentrality, axisMultPVContributors}); @@ -413,13 +392,13 @@ struct centralityStudy { LOGF(info, "Setting up for run: %i", mRunNumber); // only get object when switching runs - o2::parameters::GRPECSObject* grpo = mCcdb->getForRun(ccdb.pathGRPECSObject, mRunNumber); + o2::parameters::GRPECSObject* grpo = ccdb->getForRun(ccdbSettings.pathGRPECSObject, mRunNumber); startOfRunTimestamp = grpo->getTimeStart(); if (applyVertexZEqualization.value) { // acquire vertex-Z equalization histograms if requested LOGF(info, "Acquiring vertex-Z profiles for run %i", mRunNumber); - hCalibObjects = mCcdb->getForRun(ccdb.pathVertexZ, mRunNumber); + TList* hCalibObjects = ccdb->getForRun(ccdbSettings.pathVertexZ, mRunNumber); hVtxZFV0A = static_cast(hCalibObjects->FindObject("hVtxZFV0A")); hVtxZFT0A = static_cast(hCalibObjects->FindObject("hVtxZFT0A")); @@ -436,10 +415,9 @@ struct centralityStudy { } } - if (ccdb.fetchCentralityCalibration) { + if (ccdbSettings.fetchCentralityCalibration) { LOGF(info, "Acquiring centrality calibration for run %i", mRunNumber); - TList* hCentralityObjects = nullptr; - hCentralityObjects = mCcdb->getForRun(ccdb.pathCentrality, mRunNumber); + TList* hCentralityObjects = ccdb->getForRun(ccdbSettings.pathCentrality, mRunNumber); hCentralityFV0A = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqFV0")); hCentralityFT0A = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqFT0A")); hCentralityFT0C = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqFT0C")); @@ -450,7 +428,7 @@ struct centralityStudy { hCentralityMFT = dynamic_cast(hCentralityObjects->FindObject("hCalibZeqMFT")); // won't capture null pointers -> explicitly check for those when attempting to evaluate - auto reportSuccess = [](TH1* hist, std::string name) { + auto reportSuccess = [](TH1* hist, const std::string& name) { if (!hist) { LOGF(info, "Calibration missing for %s", name); } else { @@ -570,7 +548,7 @@ struct centralityStudy { histPointers.insert({histPath + "hFDDCVsFT0C", histos.add((histPath + "hFDDCVsFT0C").c_str(), "hFDDCVsFT0C", {kTH2F, {{axisMultFT0C, axisMultFDDC}}})}); } - if (doprocessCollisionsWithCentrality || ccdb.fetchCentralityCalibration) { + if (doprocessCollisionsWithCentrality || ccdbSettings.fetchCentralityCalibration) { // in case requested: do vs centrality debugging histPointers.insert({histPath + "hCentrality", histos.add((histPath + "hCentrality").c_str(), "hCentrality", {kTH1F, {{axisCentrality}}})}); histPointers.insert({histPath + "hNContribsVsCentrality", histos.add((histPath + "hNContribsVsCentrality").c_str(), "hNContribsVsCentrality", {kTH2F, {{axisCentrality, axisMultPVContributors}}})}); @@ -937,7 +915,7 @@ struct centralityStudy { // if the table has centrality information // process FT0C centrality plots - if (doprocessCollisionsWithCentrality || ccdb.fetchCentralityCalibration) { + if (doprocessCollisionsWithCentrality || ccdbSettings.fetchCentralityCalibration) { histos.fill(HIST("hCentrality"), centFT0C); histos.fill(HIST("hNContribsVsCentrality"), centFT0C, collision.multPVTotalContributors()); histos.fill(HIST("hNITSTPCTracksVsCentrality"), centFT0C, collision.multNTracksITSTPC()); @@ -973,9 +951,9 @@ struct centralityStudy { if (collision.has_multBC()) { auto multbc = collision.template multBC_as(); const uint64_t bcTimestamp = multbc.timestamp(); - const float interactionRate = mRateFetcher.fetch(mCcdb.service, bcTimestamp, mRunNumber, ccdb.irSource.value, ccdb.irCrashOnNull) / 1000.; // kHz + const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, ccdbSettings.irSource.value, ccdbSettings.irCrashOnNull) / 1000.; // kHz histos.fill(HIST("hInteractionRate"), interactionRate); - if (doprocessCollisionsWithCentrality || ccdb.fetchCentralityCalibration) { + if (doprocessCollisionsWithCentrality || ccdbSettings.fetchCentralityCalibration) { histos.fill(HIST("hInteractionRateVsCentrality"), centFT0C, interactionRate); } if (studies.doRunByRunHistograms) { @@ -1125,8 +1103,8 @@ struct centralityStudy { histos.fill(HIST("hFV0A_BCs"), multbc.multFV0A() * scale.factorFV0A); histos.fill(HIST("hFV0AT0C_BCs"), (multbc.multFV0A() + multbc.multFT0C()) * scale.factorFV0AT0C); - uint64_t bcTimestamp = multbc.timestamp(); - const float interactionRate = mRateFetcher.fetch(mCcdb.service, bcTimestamp, mRunNumber, ccdb.irSource.value, ccdb.irCrashOnNull) / 1000.; // kHz + const uint64_t bcTimestamp = multbc.timestamp(); + const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, ccdbSettings.irSource.value, ccdbSettings.irCrashOnNull) / 1000.; // kHz histos.fill(HIST("hInteractionRate_BCs"), interactionRate); if (studies.do2DPlots) { From b06a2a2c4e01f95080f130d4ee3f82c91fba3176 Mon Sep 17 00:00:00 2001 From: jesgum Date: Tue, 2 Jun 2026 13:43:49 +0200 Subject: [PATCH 9/9] fix casting --- Common/Tasks/centralityStudy.cxx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Common/Tasks/centralityStudy.cxx b/Common/Tasks/centralityStudy.cxx index 781f25429ba..1bfab6c5835 100644 --- a/Common/Tasks/centralityStudy.cxx +++ b/Common/Tasks/centralityStudy.cxx @@ -400,14 +400,14 @@ struct centralityStudy { LOGF(info, "Acquiring vertex-Z profiles for run %i", mRunNumber); TList* hCalibObjects = ccdb->getForRun(ccdbSettings.pathVertexZ, mRunNumber); - hVtxZFV0A = static_cast(hCalibObjects->FindObject("hVtxZFV0A")); - hVtxZFT0A = static_cast(hCalibObjects->FindObject("hVtxZFT0A")); - hVtxZFT0C = static_cast(hCalibObjects->FindObject("hVtxZFT0C")); - // hVtxZFDDA = static_cast(hCalibObjects->FindObject("hVtxZFDDA")); - // hVtxZFDDC = static_cast(hCalibObjects->FindObject("hVtxZFDDC")); - hVtxZNTracks = static_cast(hCalibObjects->FindObject("hVtxZNTracksPV")); - hVtxZNGlobals = static_cast(hCalibObjects->FindObject("hVtxZNGlobals")); - hVtxZMFT = static_cast(hCalibObjects->FindObject("hVtxZMFT")); + hVtxZFV0A = dynamic_cast(hCalibObjects->FindObject("hVtxZFV0A")); + hVtxZFT0A = dynamic_cast(hCalibObjects->FindObject("hVtxZFT0A")); + hVtxZFT0C = dynamic_cast(hCalibObjects->FindObject("hVtxZFT0C")); + // hVtxZFDDA = dynamic_cast(hCalibObjects->FindObject("hVtxZFDDA")); + // hVtxZFDDC = dynamic_cast(hCalibObjects->FindObject("hVtxZFDDC")); + hVtxZNTracks = dynamic_cast(hCalibObjects->FindObject("hVtxZNTracksPV")); + hVtxZNGlobals = dynamic_cast(hCalibObjects->FindObject("hVtxZNGlobals")); + hVtxZMFT = dynamic_cast(hCalibObjects->FindObject("hVtxZMFT")); // Capture error if (!hVtxZFV0A || !hVtxZFT0A || !hVtxZFT0C || !hVtxZNTracks || !hVtxZNGlobals || !hVtxZMFT) {