From eb0bfb765b957ce69af6a1c08a73f45851d50ffb Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 11 Feb 2026 14:52:59 +0100 Subject: [PATCH 1/5] Add histo with IR and apply shift to FDD bc for 2023 data --- PWGMM/Lumi/Tasks/lumiStabilityPP.cxx | 60 +++++++++++++++++++--------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx b/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx index 37ca264a34e..c12dc050dbe 100644 --- a/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx +++ b/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx @@ -107,6 +107,7 @@ struct LumiStabilityPP { Configurable doBCSL{"doBCSL", false, "Create and fill histograms for super-leading BCs (no preceding FT0/FDD activity) of type B"}; Configurable numEmptyBCsBeforeLeadingBC{"numEmptyBCsBeforeLeadingBC", 5, "Number of empty BCs before a leading BC"}; Configurable requireNoT0ForSLBC{"requireNoT0ForSLBC", false, "Require no T0 signal for definition of super leading BC (otherwise only no FDD)"}; + Configurable bcShiftFDDForData2023{"bcShiftFDDForData2023", -15, "Number of bc to shift for FDD to be applied for 2023 data only"}; std::bitset beamPatternA, beamPatternC; std::bitset bcPatternA, bcPatternC, bcPatternB, bcPatternE, bcPatternL; @@ -128,6 +129,7 @@ struct LumiStabilityPP { std::map> histBcHasFDD; std::map> histFillingScheme; std::map> histFillTime; + std::map> histInteractionRate; static constexpr std::string_view NBCsVsTimeHistNames[NTriggerAliases][NBCCategories] = {{"AllBCs/BC_A/nBCsVsTime", "AllBCs/BC_B/nBCsVsTime", "AllBCs/BC_C/nBCsVsTime", "AllBCs/BC_E/nBCsVsTime", "AllBCs/BC_L/nBCsVsTime", "AllBCs/BC_SL/nBCsVsTime"}, @@ -160,6 +162,7 @@ struct LumiStabilityPP { histTfPerMin[runNumber] = registry.add(Form("%d/TFsPerMinute", runNumber), "TFs seen in this minute (to account for failed jobs);#bf{t-t_{SOF} (min)};#bf{#it{N}_{TFs}}", HistType::kTH1D, {timeAxis}); histFillingScheme[runNumber] = registry.add(Form("%d/FillingScheme", runNumber), "Filling Scheme;Filling Scheme;", HistType::kTH1D, {{1, 0, 1}}); histFillTime[runNumber] = registry.add(Form("%d/FillTime", runNumber), "Fill time;Fill time;", HistType::kTH1D, {{1, 0, 1}}); + histInteractionRate[runNumber] = registry.add(Form("%d/InteractionRate", runNumber), "Interaction rate (kHz);Interaction rate (kHz);", HistType::kTH1D, {{3000, 0., 3000.}}); histBcHasFT0[runNumber] = registry.add(Form("%d/FITQA/BCHasFT0", runNumber), "Does the BC have FT0?;BC has FT0;TVX triggered according to CTP;#bf{#it{N}_{BC}}", HistType::kTH2D, {{2, -0.5, 1.5}, {2, -0.5, 1.5}}); histBcHasFT0[runNumber]->GetYaxis()->SetBinLabel(1, "No CTP trigger"); @@ -182,10 +185,17 @@ struct LumiStabilityPP { } } - void setLHCIFData(const auto& bc) + bool setLHCIFData(const auto& bc) { + bool isData23{false}; + const int runStart2023{535069}; + const int runStop2023{539908}; + if (bc.runNumber() >= runStart2023 && bc.runNumber() <= runStop2023) { + isData23 = true; + } + if (runNumber == bc.runNumber()) { - return; + return isData23; } auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); @@ -241,7 +251,7 @@ struct LumiStabilityPP { LOG(info) << "BC SOR: " << bcSOR << " (orbit SOR: " << runInfo.orbitSOR << ") NBCs per orbit: " << nBCsPerOrbit; nBCsPerTF = runInfo.orbitsPerTF * nBCsPerOrbit; // duration of TF in bcs - return; + return isData23; } float getTimeSinceSOF(const auto& bc) @@ -267,24 +277,37 @@ struct LumiStabilityPP { continue; } - setLHCIFData(bc); + bool isData23 = setLHCIFData(bc); + BCsWithTimeStamps::iterator bcFDD; + auto idxBc = bc.globalIndex() + if (isData23) { + if (idxBc < bcShiftFDDForData2023) { // we need to skip the first 15 because of the FDD-FT0 shift + continue; + } + bcFDD = bcs.rawIteratorAt(idxBc - bcShiftFDDForData2023); + } else { + bcFDD = bc; + } float timeSinceSOF = getTimeSinceSOF(bc); bool isTriggerTVX = (bc.has_ft0() ? TESTBIT(bc.ft0().triggerMask(), o2::ft0::Triggers::bitVertex) : false); if (isTriggerTVX) { histNBcsVsTime[runNumber]->Fill(timeSinceSOF); + histInteractionRate[runNumber]->Fill(mRateFetcher.fetch(ccdbMgr, bc.timestamp(), bc.runNumber(), std::string("T0VTX"), true)); } int64_t globalBC = bc.globalBC(); + int64_t globalBCFDD = bcFDD.globalBC(); int localBC = globalBC % nBCsPerOrbit; + int localBCFDD = globalBCFDD % nBCsPerOrbit; bool isSuperLeadingBc{true}; if (globalBC - globalBCIdOfLastBCWithActivity < numEmptyBCsBeforeLeadingBC) { isSuperLeadingBc = false; // not a super-leading BC } - if (bc.has_fdd() || (requireNoT0ForSLBC && bc.has_ft0())) { + if (bcFDD.has_fdd() || (requireNoT0ForSLBC && bc.has_ft0())) { globalBCIdOfLastBCWithActivity = globalBC; } @@ -300,9 +323,10 @@ struct LumiStabilityPP { } std::bitset<64> ctpInputMask(bc.inputMask()); + std::bitset<64> ctpInputMaskFDD(bcFDD.inputMask()); histBcHasFT0[runNumber]->Fill(bc.has_ft0(), ctpInputMask.test(2)); - histBcHasFDD[runNumber]->Fill(bc.has_fdd(), ctpInputMask.test(15)); + histBcHasFDD[runNumber]->Fill(bcFDD.has_fdd(), ctpInputMaskFDD.test(15)); for (int iTrigger{0}; iTrigger < NTriggerAliases; ++iTrigger) { for (int iBCCategory{0}; iBCCategory < NBCCategories; ++iBCCategory) { @@ -349,19 +373,19 @@ struct LumiStabilityPP { if (iBCCategory == BCSL && isSuperLeadingBc) fillHistograms(timeSinceSOF, localBC); } - if (iTrigger == FDD && ctpInputMask.test(15)) { - if (iBCCategory == BCA && bcPatternA[localBC]) - fillHistograms(timeSinceSOF, localBC); - if (iBCCategory == BCB && bcPatternB[localBC]) - fillHistograms(timeSinceSOF, localBC); - if (iBCCategory == BCC && bcPatternC[localBC]) - fillHistograms(timeSinceSOF, localBC); - if (iBCCategory == BCE && bcPatternE[localBC]) - fillHistograms(timeSinceSOF, localBC); - if (iBCCategory == BCL && bcPatternL[localBC]) - fillHistograms(timeSinceSOF, localBC); + if (iTrigger == FDD && ctpInputMaskFDD.test(15)) { + if (iBCCategory == BCA && bcPatternA[localBCFDD]) + fillHistograms(timeSinceSOF, localBCFDD); + if (iBCCategory == BCB && bcPatternB[localBCFDD]) + fillHistograms(timeSinceSOF, localBCFDD); + if (iBCCategory == BCC && bcPatternC[localBCFDD]) + fillHistograms(timeSinceSOF, localBCFDD); + if (iBCCategory == BCE && bcPatternE[localBCFDD]) + fillHistograms(timeSinceSOF, localBCFDD); + if (iBCCategory == BCL && bcPatternL[localBCFDD]) + fillHistograms(timeSinceSOF, localBCFDD); if (iBCCategory == BCSL && isSuperLeadingBc) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBCFDD); } } } From 6e020ab2afafb6e4eb3eb2cf76886b65eafcbc3f Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 11 Feb 2026 17:06:27 +0100 Subject: [PATCH 2/5] Add mu per analysed DF --- PWGMM/Lumi/Tasks/lumiStabilityPP.cxx | 143 ++++++++++++++++++--------- 1 file changed, 98 insertions(+), 45 deletions(-) diff --git a/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx b/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx index c12dc050dbe..ea4f6e31bd0 100644 --- a/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx +++ b/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx @@ -113,15 +113,18 @@ struct LumiStabilityPP { std::bitset bcPatternA, bcPatternC, bcPatternB, bcPatternE, bcPatternL; const int nBCsPerOrbit = o2::constants::lhc::LHCMaxBunches; + o2::framework::Service ccdb; parameters::GRPLHCIFData* mLHCIFdata = nullptr; int runNumber{-1}; + bool isData23{false}; ctpRateFetcher mRateFetcher; std::string injectionScheme; - HistogramRegistry registry{"registry"}; +HistogramRegistry registry{"registry"}; std::array>, NBCCategories>, NTriggerAliases> histBcVsTime; std::array>, NBCCategories>, NTriggerAliases> histBcVsBcId; + std::array>, NBCCategories>, NTriggerAliases> histMu; std::map> histNBcsVsTime; std::map> histNBcsVsBcId; std::map> histTfPerMin; @@ -143,6 +146,12 @@ struct LumiStabilityPP { {"FT0CE/BC_A/nBCsVsBCID", "FT0CE/BC_B/nBCsVsBCID", "FT0CE/BC_C/nBCsVsBCID", "FT0CE/BC_E/nBCsVsBCID", "FT0CE/BC_L/nBCsVsBCID", "FT0CE/BC_SL/nBCsVsBCID"}, {"FDD/BC_A/nBCsVsBCID", "FDD/BC_B/nBCsVsBCID", "FDD/BC_C/nBCsVsBCID", "FDD/BC_E/nBCsVsBCID", "FDD/BC_L/nBCsVsBCID", "FDD/BC_SL/nBCsVsBCID"}}; + static constexpr std::string_view MuHistNames[NTriggerAliases][NBCCategories-1] = + {{"AllBCs/BC_A/Mu", "AllBCs/BC_B/Mu", "AllBCs/BC_C/Mu", "AllBCs/BC_E/Mu", "AllBCs/BC_L/Mu"}, + {"FT0VTx/BC_A/Mu", "FT0VTx/BC_B/Mu", "FT0VTx/BC_C/Mu", "FT0VTx/BC_E/Mu", "FT0VTx/BC_L/Mu"}, + {"FT0CE/BC_A/Mu", "FT0CE/BC_B/Mu", "FT0CE/BC_C/Mu", "FT0CE/BC_E/Mu", "FT0CE/BC_L/Mu"}, + {"FDD/BC_A/Mu", "FDD/BC_B/Mu", "FDD/BC_C/Mu", "FDD/BC_E/Mu", "FDD/BC_L/Mu"}}; + const AxisSpec timeAxis{2880, 0., 2880., "#bf{t-t_{SOF} (min)}"}, bcIDAxis{nBCsPerOrbit, -0.5, static_cast(nBCsPerOrbit) - 0.5, "#bf{BC ID in orbit}"}; int64_t bcSOR; @@ -180,29 +189,31 @@ struct LumiStabilityPP { if ((iBCCategory == BCA && doBCA) || (iBCCategory == BCB && doBCB) || (iBCCategory == BCC && doBCC) || (iBCCategory == BCE && doBCE) || (iBCCategory == BCL && doBCL) || (iBCCategory == BCSL && doBCSL)) { histBcVsTime[iTrigger][iBCCategory][runNumber] = registry.add(Form("%d/%s", runNumber, std::string(NBCsVsTimeHistNames[iTrigger][iBCCategory]).c_str()), "Time of triggered BCs since the start of fill;#bf{t-t_{SOF} (min)};#bf{#it{N}_{BC}}", HistType::kTH1D, {timeAxis}); histBcVsBcId[iTrigger][iBCCategory][runNumber] = registry.add(Form("%d/%s", runNumber, std::string(NBCsVsBCIDHistNames[iTrigger][iBCCategory]).c_str()), "BC ID of triggered BCs;#bf{BC ID in orbit};#bf{#it{N}_{BC}}", HistType::kTH1D, {bcIDAxis}); + if (iBCCategory != BCSL) { // we do not do it for superleading because it is not easy to define the number of inspected BCs + histMu[iTrigger][iBCCategory][runNumber] = registry.add(Form("%d/%s", runNumber, std::string(MuHistNames[iTrigger][iBCCategory]).c_str()), "pile-up #mu of different triggers;#mu;counts", HistType::kTH1D, {500, 0., 0.1}); + } } } } } - bool setLHCIFData(const auto& bc) + void setLHCIFData(const auto& bc) { - bool isData23{false}; + + if (runNumber == bc.runNumber()) { + return; + } + const int runStart2023{535069}; const int runStop2023{539908}; if (bc.runNumber() >= runStart2023 && bc.runNumber() <= runStop2023) { isData23 = true; } - if (runNumber == bc.runNumber()) { - return isData23; - } - - auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); uint64_t timeStamp = bc.timestamp(); std::map metadata; - mLHCIFdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); + mLHCIFdata = ccdb.service->getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); if (mLHCIFdata == nullptr) { LOG(fatal) << "GRPLHCIFData not in database, timestamp:" << timeStamp; } @@ -251,7 +262,7 @@ struct LumiStabilityPP { LOG(info) << "BC SOR: " << bcSOR << " (orbit SOR: " << runInfo.orbitSOR << ") NBCs per orbit: " << nBCsPerOrbit; nBCsPerTF = runInfo.orbitsPerTF * nBCsPerOrbit; // duration of TF in bcs - return isData23; + return; } float getTimeSinceSOF(const auto& bc) @@ -259,27 +270,44 @@ struct LumiStabilityPP { return (bc.timestamp() - mLHCIFdata->getFillNumberTime()) / 1e3 / 60; // Convert to minutes } + float getMu(double triggerRate, int nbc) + { + if (nbc == 0) { + return 0.; + } + return -std::log(1.f - triggerRate / nbc / constants::lhc::LHCRevFreq); + } + template - void fillHistograms(float timeSinceSOF, int64_t localBC) + void fillHistograms(float timeSinceSOF, int64_t localBC, int& nTriggers) { + nTriggers += 1; histBcVsTime[iTrigger][iBCCategory][runNumber]->Fill(timeSinceSOF); histBcVsBcId[iTrigger][iBCCategory][runNumber]->Fill(localBC); } + void fillMuHistograms(int iTrigger, int iBCCategory, float mu) + { + histMu[iTrigger][iBCCategory][runNumber]->Fill(mu); + } + void process(BCsWithTimeStamps const& bcs, aod::FT0s const&, aod::FDDs const&) { int64_t globalBCIdOfLastBCWithActivity = 0; + int nBCs[2] = {0, 0}; + float timeStartSinceSOF{-1.f}, timeStopSinceSOF{-1.f}; + int nTriggersPerDf[NTriggerAliases][NBCCategories]; for (const auto& bc : bcs) { if (bc.timestamp() == 0) { continue; } - bool isData23 = setLHCIFData(bc); + setLHCIFData(bc); BCsWithTimeStamps::iterator bcFDD; - auto idxBc = bc.globalIndex() + auto idxBc = bc.globalIndex(); if (isData23) { if (idxBc < bcShiftFDDForData2023) { // we need to skip the first 15 because of the FDD-FT0 shift continue; @@ -290,17 +318,26 @@ struct LumiStabilityPP { } float timeSinceSOF = getTimeSinceSOF(bc); + if (timeStartSinceSOF < 0.) { + timeStartSinceSOF = timeSinceSOF; + } + if (timeStopSinceSOF < timeSinceSOF) { + timeStopSinceSOF = timeSinceSOF; + } + bool isTriggerTVX = (bc.has_ft0() ? TESTBIT(bc.ft0().triggerMask(), o2::ft0::Triggers::bitVertex) : false); if (isTriggerTVX) { histNBcsVsTime[runNumber]->Fill(timeSinceSOF); - histInteractionRate[runNumber]->Fill(mRateFetcher.fetch(ccdbMgr, bc.timestamp(), bc.runNumber(), std::string("T0VTX"), true)); + histInteractionRate[runNumber]->Fill(mRateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), std::string("T0VTX"), true) * 1.e-3); // kHz } int64_t globalBC = bc.globalBC(); - int64_t globalBCFDD = bcFDD.globalBC(); int localBC = globalBC % nBCsPerOrbit; - int localBCFDD = globalBCFDD % nBCsPerOrbit; + nBCs[0]++; + if (bcPatternL[localBC]) { + nBCs[1]++; + } bool isSuperLeadingBc{true}; if (globalBC - globalBCIdOfLastBCWithActivity < numEmptyBCsBeforeLeadingBC) { @@ -333,65 +370,81 @@ struct LumiStabilityPP { if ((iBCCategory == BCA && doBCA) || (iBCCategory == BCB && doBCB) || (iBCCategory == BCC && doBCC) || (iBCCategory == BCE && doBCE) || (iBCCategory == BCL && doBCL) || (iBCCategory == BCSL && doBCSL)) { if (iTrigger == AllBCs) { if (iBCCategory == BCA && bcPatternA[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCB && bcPatternB[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCC && bcPatternC[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCE && bcPatternE[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCL && bcPatternL[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCSL && isSuperLeadingBc) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); } if (iTrigger == FT0Vtx && ctpInputMask.test(2)) { if (iBCCategory == BCA && bcPatternA[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCB && bcPatternB[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCC && bcPatternC[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCE && bcPatternE[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCL && bcPatternL[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCSL && isSuperLeadingBc) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); } if (iTrigger == FT0CE && ctpInputMask.test(4)) { if (iBCCategory == BCA && bcPatternA[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCB && bcPatternB[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCC && bcPatternC[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCE && bcPatternE[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCL && bcPatternL[localBC]) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCSL && isSuperLeadingBc) - fillHistograms(timeSinceSOF, localBC); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); } if (iTrigger == FDD && ctpInputMaskFDD.test(15)) { - if (iBCCategory == BCA && bcPatternA[localBCFDD]) - fillHistograms(timeSinceSOF, localBCFDD); - if (iBCCategory == BCB && bcPatternB[localBCFDD]) - fillHistograms(timeSinceSOF, localBCFDD); - if (iBCCategory == BCC && bcPatternC[localBCFDD]) - fillHistograms(timeSinceSOF, localBCFDD); - if (iBCCategory == BCE && bcPatternE[localBCFDD]) - fillHistograms(timeSinceSOF, localBCFDD); - if (iBCCategory == BCL && bcPatternL[localBCFDD]) - fillHistograms(timeSinceSOF, localBCFDD); + if (iBCCategory == BCA && bcPatternA[localBC]) + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); + if (iBCCategory == BCB && bcPatternB[localBC]) + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); + if (iBCCategory == BCC && bcPatternC[localBC]) + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); + if (iBCCategory == BCE && bcPatternE[localBC]) + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); + if (iBCCategory == BCL && bcPatternL[localBC]) + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); if (iBCCategory == BCSL && isSuperLeadingBc) - fillHistograms(timeSinceSOF, localBCFDD); + fillHistograms(timeSinceSOF, localBC, nTriggersPerDf[iTrigger][iBCCategory]); } } } } histNBcsVsBcId[runNumber]->Fill(localBC); } + // fill histogram for mu + float deltaTime = timeStopSinceSOF - timeStartSinceSOF; + for (int iTrigger{0}; iTrigger < NTriggerAliases; ++iTrigger) { + for (int iBCCategory{0}; iBCCategory < NBCCategories; ++iBCCategory) { + if (iBCCategory == BCSL) { // we do not do it for superleading because it is not easy to define the number of inspected BCs + continue; + } + float mu{0.}; + if (iBCCategory != BCSL) { + mu = getMu(nTriggersPerDf[iTrigger][iBCCategory]/deltaTime, nBCs[0]); + } else { + mu = getMu(nTriggersPerDf[iTrigger][iBCCategory]/deltaTime, nBCs[1]); + } + fillMuHistograms(iTrigger, iBCCategory, mu); + } + } } }; From 9d2607c90026a6b306ecf6c8141243b0367b5061 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 11 Feb 2026 17:14:02 +0000 Subject: [PATCH 3/5] Please consider the following formatting changes --- PWGMM/Lumi/Tasks/lumiStabilityPP.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx b/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx index ea4f6e31bd0..b9e119f81d3 100644 --- a/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx +++ b/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx @@ -120,7 +120,7 @@ struct LumiStabilityPP { ctpRateFetcher mRateFetcher; std::string injectionScheme; -HistogramRegistry registry{"registry"}; + HistogramRegistry registry{"registry"}; std::array>, NBCCategories>, NTriggerAliases> histBcVsTime; std::array>, NBCCategories>, NTriggerAliases> histBcVsBcId; @@ -146,7 +146,7 @@ HistogramRegistry registry{"registry"}; {"FT0CE/BC_A/nBCsVsBCID", "FT0CE/BC_B/nBCsVsBCID", "FT0CE/BC_C/nBCsVsBCID", "FT0CE/BC_E/nBCsVsBCID", "FT0CE/BC_L/nBCsVsBCID", "FT0CE/BC_SL/nBCsVsBCID"}, {"FDD/BC_A/nBCsVsBCID", "FDD/BC_B/nBCsVsBCID", "FDD/BC_C/nBCsVsBCID", "FDD/BC_E/nBCsVsBCID", "FDD/BC_L/nBCsVsBCID", "FDD/BC_SL/nBCsVsBCID"}}; - static constexpr std::string_view MuHistNames[NTriggerAliases][NBCCategories-1] = + static constexpr std::string_view MuHistNames[NTriggerAliases][NBCCategories - 1] = {{"AllBCs/BC_A/Mu", "AllBCs/BC_B/Mu", "AllBCs/BC_C/Mu", "AllBCs/BC_E/Mu", "AllBCs/BC_L/Mu"}, {"FT0VTx/BC_A/Mu", "FT0VTx/BC_B/Mu", "FT0VTx/BC_C/Mu", "FT0VTx/BC_E/Mu", "FT0VTx/BC_L/Mu"}, {"FT0CE/BC_A/Mu", "FT0CE/BC_B/Mu", "FT0CE/BC_C/Mu", "FT0CE/BC_E/Mu", "FT0CE/BC_L/Mu"}, @@ -438,9 +438,9 @@ HistogramRegistry registry{"registry"}; } float mu{0.}; if (iBCCategory != BCSL) { - mu = getMu(nTriggersPerDf[iTrigger][iBCCategory]/deltaTime, nBCs[0]); + mu = getMu(nTriggersPerDf[iTrigger][iBCCategory] / deltaTime, nBCs[0]); } else { - mu = getMu(nTriggersPerDf[iTrigger][iBCCategory]/deltaTime, nBCs[1]); + mu = getMu(nTriggersPerDf[iTrigger][iBCCategory] / deltaTime, nBCs[1]); } fillMuHistograms(iTrigger, iBCCategory, mu); } From 18eb84eebe7aa8a48dc199281f7da4cd70de0692 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 11 Feb 2026 18:35:41 +0100 Subject: [PATCH 4/5] Fix typo --- PWGMM/Lumi/Tasks/lumiStabilityPP.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx b/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx index b9e119f81d3..e59986a5e0a 100644 --- a/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx +++ b/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx @@ -312,7 +312,7 @@ struct LumiStabilityPP { if (idxBc < bcShiftFDDForData2023) { // we need to skip the first 15 because of the FDD-FT0 shift continue; } - bcFDD = bcs.rawIteratorAt(idxBc - bcShiftFDDForData2023); + bcFDD = bcs.rawIteratorAt(idxBc + bcShiftFDDForData2023); } else { bcFDD = bc; } From e6a87708bc62ede70a7774996174e6a68aad4720 Mon Sep 17 00:00:00 2001 From: Fabrizio Grosa Date: Wed, 11 Feb 2026 19:17:42 +0100 Subject: [PATCH 5/5] Fix typo --- PWGMM/Lumi/Tasks/lumiStabilityPP.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx b/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx index e59986a5e0a..9c02539d7d2 100644 --- a/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx +++ b/PWGMM/Lumi/Tasks/lumiStabilityPP.cxx @@ -190,7 +190,7 @@ struct LumiStabilityPP { histBcVsTime[iTrigger][iBCCategory][runNumber] = registry.add(Form("%d/%s", runNumber, std::string(NBCsVsTimeHistNames[iTrigger][iBCCategory]).c_str()), "Time of triggered BCs since the start of fill;#bf{t-t_{SOF} (min)};#bf{#it{N}_{BC}}", HistType::kTH1D, {timeAxis}); histBcVsBcId[iTrigger][iBCCategory][runNumber] = registry.add(Form("%d/%s", runNumber, std::string(NBCsVsBCIDHistNames[iTrigger][iBCCategory]).c_str()), "BC ID of triggered BCs;#bf{BC ID in orbit};#bf{#it{N}_{BC}}", HistType::kTH1D, {bcIDAxis}); if (iBCCategory != BCSL) { // we do not do it for superleading because it is not easy to define the number of inspected BCs - histMu[iTrigger][iBCCategory][runNumber] = registry.add(Form("%d/%s", runNumber, std::string(MuHistNames[iTrigger][iBCCategory]).c_str()), "pile-up #mu of different triggers;#mu;counts", HistType::kTH1D, {500, 0., 0.1}); + histMu[iTrigger][iBCCategory][runNumber] = registry.add(Form("%d/%s", runNumber, std::string(MuHistNames[iTrigger][iBCCategory]).c_str()), "pile-up #mu of different triggers;#mu;counts", HistType::kTH1D, {{500, 0., 0.1}}); } } }