From b6d4d51581f97455077dcb09484ffa24f39f914b Mon Sep 17 00:00:00 2001 From: Francesca Ercolessi Date: Fri, 27 Feb 2026 12:35:52 +0100 Subject: [PATCH 1/2] Add multiplicity in orbit --- Modules/TOF/include/TOF/TaskDigits.h | 7 ++++- Modules/TOF/src/TaskDigits.cxx | 41 +++++++++++++++++++++------- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/Modules/TOF/include/TOF/TaskDigits.h b/Modules/TOF/include/TOF/TaskDigits.h index 9f5abdfcd..1041bdbd6 100644 --- a/Modules/TOF/include/TOF/TaskDigits.h +++ b/Modules/TOF/include/TOF/TaskDigits.h @@ -76,8 +76,11 @@ class TaskDigits final : public TaskInterface static constexpr int mBinsOrbitPerTimeFrame = mRangeMaxOrbitPerTimeFrame * 3; /// Max range in the OrbitPerTimeFrame axis. 3 orbits are recorded per time frame // Multiplicity int mBinsMultiplicity = 2000; /// Number of bins in multiplicity plot + int mBinsMultiplicity2D = 2000; /// Number of bins in multiplicity plot + int mBinsMultiplicityOrbit = 2000; /// Number of bins in multiplicity plot static constexpr int mRangeMinMultiplicity = 0; /// Min range in multiplicity plot int mRangeMaxMultiplicity = mBinsMultiplicity; /// Max range in multiplicity plot + int mRangeMaxMultiplicityOrbit = mBinsMultiplicityOrbit; /// Max range in multiplicity plot static constexpr int mBinsBCForMultiplicity = mRangeMaxBC; /// Number of bins for the BC axis in the multiplicity vs BC plot // Time int mBinsTime = 300; /// Number of bins in time plot @@ -125,11 +128,13 @@ class TaskDigits final : public TaskInterface std::shared_ptr mHistoNoisyChannels = nullptr; /// Channel flagged as noise (divided per flagged rate class) // Multiplicity - std::shared_ptr mHistoMultiplicity = nullptr; /// TOF raw hit multiplicity per event + std::shared_ptr mHistoMultiplicity = nullptr; /// TOF raw hit multiplicity per event - all rw std::shared_ptr mHistoMultiplicityIA = nullptr; /// TOF raw hit multiplicity per event - I/A side std::shared_ptr mHistoMultiplicityOA = nullptr; /// TOF raw hit multiplicity per event - O/A side std::shared_ptr mHistoMultiplicityIC = nullptr; /// TOF raw hit multiplicity per event - I/C side std::shared_ptr mHistoMultiplicityOC = nullptr; /// TOF raw hit multiplicity per event - O/C side + std::shared_ptr mHistoMultiplicityOrbit = nullptr; /// TOF raw hit multiplicity per event - orbit + std::shared_ptr mHistoMultiplicityRW[3]; /// TOF raw hit multiplicity per event - RW1 std::shared_ptr mHitMultiplicityVsCrate = nullptr; /// TOF raw hit multiplicity per event vs Crate std::shared_ptr mHitMultiplicityVsCratepro = nullptr; /// TOF raw hit multiplicity per event vs Crate (TProfile) std::shared_ptr mHitMultiplicityVsBC = nullptr; /// TOF raw hit multiplicity per event vs BC diff --git a/Modules/TOF/src/TaskDigits.cxx b/Modules/TOF/src/TaskDigits.cxx index 2e707f385..e6fda4753 100644 --- a/Modules/TOF/src/TaskDigits.cxx +++ b/Modules/TOF/src/TaskDigits.cxx @@ -55,7 +55,10 @@ void TaskDigits::initialize(o2::framework::InitContext& /*ctx*/) { // Define parameters utils::parseIntParameter(mCustomParameters, "NbinsMultiplicity", mBinsMultiplicity); + utils::parseIntParameter(mCustomParameters, "NbinsMultiplicity2D", mBinsMultiplicity2D); utils::parseIntParameter(mCustomParameters, "RangeMaxMultiplicity", mRangeMaxMultiplicity); + utils::parseIntParameter(mCustomParameters, "NbinsMultiplicityOrbit", mBinsMultiplicityOrbit); + utils::parseIntParameter(mCustomParameters, "RangeMaxMultiplicityOrbit", mRangeMaxMultiplicityOrbit); utils::parseIntParameter(mCustomParameters, "NbinsTime", mBinsTime); utils::parseFloatParameter(mCustomParameters, "kNbinsWidthTime", fgkNbinsWidthTime); @@ -144,17 +147,18 @@ void TaskDigits::initialize(o2::framework::InitContext& /*ctx*/) } getObjectsManager()->startPublishing(mHistoNoisyChannels.get()); - // if mBinsMultiplicity > 1000 limit it in TH2F - int nBinsMultForTH2 = mBinsMultiplicity; - if (nBinsMultForTH2 > 1000) { - nBinsMultForTH2 = 1000; - ILOG(Info, Support) << "Requested Nbins in multiplicity is " << mBinsMultiplicity << " but limited to 1000 ONLY for TH2 " << ENDM; - } - // Multiplicity mHistoMultiplicity = std::make_shared("Multiplicity/Integrated", "TOF hit multiplicity;TOF hits;Events ", mBinsMultiplicity, mRangeMinMultiplicity, mRangeMaxMultiplicity); getObjectsManager()->startPublishing(mHistoMultiplicity.get()); + for (int i = 0; i < 3; i++) { + mHistoMultiplicityRW[i] = std::make_shared(Form("Multiplicity/ReadoutWindow%i", i + 1), Form("TOF hit multiplicity in rw%i;TOF hits;Events ", i + 1), mBinsMultiplicity, mRangeMinMultiplicity, mRangeMaxMultiplicity); + getObjectsManager()->startPublishing(mHistoMultiplicityRW[i].get()); + } + + mHistoMultiplicityOrbit = std::make_shared("Multiplicity/IntegratedOrbit", "TOF hit multiplicity in orbit;TOF hits;Events ", mBinsMultiplicity, mRangeMinMultiplicity, mRangeMaxMultiplicityOrbit); + getObjectsManager()->startPublishing(mHistoMultiplicityOrbit.get()); + mHistoMultiplicityIA = std::make_shared("Multiplicity/SectorIA", "TOF hit multiplicity - I/A side;TOF hits;Events ", mBinsMultiplicity, mRangeMinMultiplicity, mRangeMaxMultiplicity); getObjectsManager()->startPublishing(mHistoMultiplicityIA.get()); @@ -167,13 +171,13 @@ void TaskDigits::initialize(o2::framework::InitContext& /*ctx*/) mHistoMultiplicityOC = std::make_shared("Multiplicity/SectorOC", "TOF hit multiplicity - O/C side;TOF hits;Events ", mBinsMultiplicity, mRangeMinMultiplicity, mRangeMaxMultiplicity); getObjectsManager()->startPublishing(mHistoMultiplicityOC.get()); - mHitMultiplicityVsCrate = std::make_shared("Multiplicity/VsCrate", "TOF hit multiplicity vs Crate;Crate;TOF hits", RawDataDecoder::ncrates, 0, RawDataDecoder::ncrates, nBinsMultForTH2, mRangeMinMultiplicity, mRangeMaxMultiplicity); + mHitMultiplicityVsCrate = std::make_shared("Multiplicity/VsCrate", "TOF hit multiplicity vs Crate;Crate;TOF hits", RawDataDecoder::ncrates, 0, RawDataDecoder::ncrates, mBinsMultiplicity2D, mRangeMinMultiplicity, mRangeMaxMultiplicity); getObjectsManager()->startPublishing(mHitMultiplicityVsCrate.get()); mHitMultiplicityVsCratepro = std::make_shared("Multiplicity/VsCratepro", "TOF hit multiplicity vs Crate;Crate;#LT TOF hits #GT", RawDataDecoder::ncrates, 0, RawDataDecoder::ncrates); getObjectsManager()->startPublishing(mHitMultiplicityVsCratepro.get()); - mHitMultiplicityVsBC = std::make_shared("Multiplicity/VsBC", "TOF hit multiplicity vs BC;BC;#TOF hits;Events", mBinsBCForMultiplicity, 0, mRangeMaxBC, nBinsMultForTH2, mRangeMinMultiplicity, mRangeMaxMultiplicity); + mHitMultiplicityVsBC = std::make_shared("Multiplicity/VsBC", "TOF hit multiplicity vs BC;BC;#TOF hits;Events", mBinsBCForMultiplicity, 0, mRangeMaxBC, mBinsMultiplicity2D, mRangeMinMultiplicity, mRangeMaxMultiplicity); getObjectsManager()->startPublishing(mHitMultiplicityVsBC.get()); mHitMultiplicityVsBCpro = std::make_shared("Multiplicity/VsBCpro", "TOF hit multiplicity vs BC;BC;#TOF hits;Events", mBinsBCForMultiplicity, 0, mRangeMaxBC); @@ -279,6 +283,7 @@ void TaskDigits::monitorData(o2::framework::ProcessingContext& ctx) int currentReadoutWindow = 0; int currentDiagnostics = 0; + int orbitMultiplicity = 0; // Loop on readout windows for (const auto& row : rows) { const auto& digits_in_row = row.getBunchChannelData(digits); // Digits inside a readout window @@ -345,7 +350,18 @@ void TaskDigits::monitorData(o2::framework::ProcessingContext& ctx) currentDiagnostics += nDia; } } - currentReadoutWindow++; + + int windowIndex = currentReadoutWindow % 3; + int ndigits_in_row = digits_in_row.size(); + + mHistoMultiplicityRW[windowIndex]->Fill(ndigits_in_row); + orbitMultiplicity += ndigits_in_row; + + if (windowIndex == 2) { // End of readout windows, fill orbit multiplicity + + mHistoMultiplicityOrbit->Fill(orbitMultiplicity); + orbitMultiplicity = 0; // Reset + } // Loop on digits for (auto const& digit : digits_in_row) { @@ -467,6 +483,7 @@ void TaskDigits::monitorData(o2::framework::ProcessingContext& ctx) ndigitsPerQuater[1] = 0; ndigitsPerQuater[2] = 0; ndigitsPerQuater[3] = 0; + currentReadoutWindow++; } for (int iorb = 0; iorb < nOrbits; iorb++) { @@ -542,6 +559,10 @@ void TaskDigits::reset() mHistoMultiplicityOA->Reset(); mHistoMultiplicityIC->Reset(); mHistoMultiplicityOC->Reset(); + mHistoMultiplicityOrbit->Reset(); + for (int i = 0; i < 3; i++) { + mHistoMultiplicityRW[i]->Reset(); + } mHitMultiplicityVsCrate->Reset(); mHitMultiplicityVsCratepro->Reset(); mHitMultiplicityVsBC->Reset(); From 43007a349034ae07057e856bd103c9beb371a8a0 Mon Sep 17 00:00:00 2001 From: Francesca Ercolessi Date: Fri, 27 Feb 2026 16:04:46 +0100 Subject: [PATCH 2/2] Increase bins for multiplicity orbit from 2000 to 6000 --- Modules/TOF/include/TOF/TaskDigits.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/TOF/include/TOF/TaskDigits.h b/Modules/TOF/include/TOF/TaskDigits.h index 1041bdbd6..9c4d28c30 100644 --- a/Modules/TOF/include/TOF/TaskDigits.h +++ b/Modules/TOF/include/TOF/TaskDigits.h @@ -77,7 +77,7 @@ class TaskDigits final : public TaskInterface // Multiplicity int mBinsMultiplicity = 2000; /// Number of bins in multiplicity plot int mBinsMultiplicity2D = 2000; /// Number of bins in multiplicity plot - int mBinsMultiplicityOrbit = 2000; /// Number of bins in multiplicity plot + int mBinsMultiplicityOrbit = 6000; /// Number of bins in multiplicity plot static constexpr int mRangeMinMultiplicity = 0; /// Min range in multiplicity plot int mRangeMaxMultiplicity = mBinsMultiplicity; /// Max range in multiplicity plot int mRangeMaxMultiplicityOrbit = mBinsMultiplicityOrbit; /// Max range in multiplicity plot