Skip to content

Commit 6e2cd14

Browse files
ddobrigkalibuild
andauthored
[Common] mult/cent: add Zeq to MFT, NGlobals too (#12435)
Co-authored-by: ALICE Builder <alibuild@users.noreply.github.com>
1 parent ec86c55 commit 6e2cd14

File tree

2 files changed

+81
-21
lines changed

2 files changed

+81
-21
lines changed

Common/DataModel/Multiplicity.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -211,12 +211,14 @@ using MultHepMCHI = MultHepMCHIs::iterator;
211211

212212
namespace multZeq
213213
{
214-
DECLARE_SOA_COLUMN(MultZeqFV0A, multZeqFV0A, float); //! Multiplicity equalized for the vertex position with the FV0A detector
215-
DECLARE_SOA_COLUMN(MultZeqFT0A, multZeqFT0A, float); //! Multiplicity equalized for the vertex position with the FT0A detector
216-
DECLARE_SOA_COLUMN(MultZeqFT0C, multZeqFT0C, float); //! Multiplicity equalized for the vertex position with the FT0C detector
217-
DECLARE_SOA_COLUMN(MultZeqFDDA, multZeqFDDA, float); //! Multiplicity equalized for the vertex position with the FDDA detector
218-
DECLARE_SOA_COLUMN(MultZeqFDDC, multZeqFDDC, float); //! Multiplicity equalized for the vertex position with the FDDC detector
219-
DECLARE_SOA_COLUMN(MultZeqNTracksPV, multZeqNTracksPV, float); //! Multiplicity equalized for the vertex position from the PV contributors
214+
DECLARE_SOA_COLUMN(MultZeqFV0A, multZeqFV0A, float); //! Multiplicity equalized for the vertex position with the FV0A detector
215+
DECLARE_SOA_COLUMN(MultZeqFT0A, multZeqFT0A, float); //! Multiplicity equalized for the vertex position with the FT0A detector
216+
DECLARE_SOA_COLUMN(MultZeqFT0C, multZeqFT0C, float); //! Multiplicity equalized for the vertex position with the FT0C detector
217+
DECLARE_SOA_COLUMN(MultZeqFDDA, multZeqFDDA, float); //! Multiplicity equalized for the vertex position with the FDDA detector
218+
DECLARE_SOA_COLUMN(MultZeqFDDC, multZeqFDDC, float); //! Multiplicity equalized for the vertex position with the FDDC detector
219+
DECLARE_SOA_COLUMN(MultZeqNTracksPV, multZeqNTracksPV, float); //! Multiplicity equalized for the vertex position from the PV contributors
220+
DECLARE_SOA_COLUMN(MultZeqNTracksGlobal, multZeqNTracksGlobal, float); //! Multiplicity equalized for the vertex position, global tracks
221+
DECLARE_SOA_COLUMN(MultZeqMFTNtracks, multZeqMFTNtracks, float); //! Multiplicity equalized for the vertex position, MFT tracks
220222
} // namespace multZeq
221223
DECLARE_SOA_TABLE(FV0MultZeqs, "AOD", "FV0MULTZEQ", //! Multiplicity equalized for the vertex position with the FV0 detector
222224
multZeq::MultZeqFV0A);
@@ -226,6 +228,10 @@ DECLARE_SOA_TABLE(FDDMultZeqs, "AOD", "FDDMULTZEQ", //! Multiplicity equalized f
226228
multZeq::MultZeqFDDA, multZeq::MultZeqFDDC);
227229
DECLARE_SOA_TABLE(PVMultZeqs, "AOD", "PVMULTZEQ", //! Multiplicity equalized for the vertex position from the PV contributors
228230
multZeq::MultZeqNTracksPV);
231+
DECLARE_SOA_TABLE(GlobalMultZeqs, "AOD", "GLOBALMULTZEQ", //! Multiplicity equalized for the vertex position, global tracks
232+
multZeq::MultZeqNTracksGlobal);
233+
DECLARE_SOA_TABLE(MFTMultZeqs, "AOD", "MFTMULTZEQS", //! Multiplicity equalized for the vertex position, MFT tracks
234+
multZeq::MultZeqMFTNtracks);
229235
using MultZeqs = soa::Join<FV0MultZeqs, FT0MultZeqs, FDDMultZeqs, PVMultZeqs>;
230236
using MultZeq = MultZeqs::iterator;
231237

Common/Tools/MultModule.h

Lines changed: 69 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ static const std::vector<std::string> tableNames{
6161
"FT0MultZeqs",
6262
"FDDMultZeqs",
6363
"PVMultZeqs",
64+
"GlobalMultZeqs",
65+
"MFTMultZeqs",
6466
"MultMCExtras",
6567
"Mult2MCExtras",
6668
"MFTMults",
@@ -86,7 +88,7 @@ static const std::vector<std::string> tableNames{
8688
"BCCentFT0As",
8789
"BCCentFT0Cs"};
8890

89-
static constexpr int nTablesConst = 36;
91+
static constexpr int nTablesConst = 38;
9092

9193
static const std::vector<std::string> parameterNames{"enable"};
9294
static const int defaultParameters[nTablesConst][nParameters]{
@@ -125,6 +127,8 @@ static const int defaultParameters[nTablesConst][nParameters]{
125127
{-1},
126128
{-1},
127129
{-1},
130+
{-1},
131+
{-1},
128132
{-1}};
129133

130134
// table index : match order above
@@ -142,6 +146,8 @@ enum tableIndex { kFV0Mults, // standard
142146
kFT0MultZeqs, // zeq calib, standard
143147
kFDDMultZeqs, // zeq calib, standard
144148
kPVMultZeqs, // zeq calib, standard
149+
kGlobalMultZeqs, // zeq calib, extra
150+
kMFTMultZeqs, // zeq calib, extra
145151
kMultMCExtras, // MC exclusive
146152
kMult2MCExtras, // MC exclusive
147153
kMFTMults, // requires MFT task
@@ -185,6 +191,8 @@ struct products : o2::framework::ProducesGroup {
185191
o2::framework::Produces<aod::FT0MultZeqs> tableFT0Zeqs;
186192
o2::framework::Produces<aod::FDDMultZeqs> tableFDDZeqs;
187193
o2::framework::Produces<aod::PVMultZeqs> tablePVZeqs;
194+
o2::framework::Produces<aod::GlobalMultZeqs> tableNGlobalZeqs;
195+
o2::framework::Produces<aod::MFTMultZeqs> tableNMFTZeqs;
188196
o2::framework::Produces<aod::MultMCExtras> tableExtraMc;
189197
o2::framework::Produces<aod::Mult2MCExtras> tableExtraMult2MCExtras;
190198
o2::framework::Produces<aod::MFTMults> mftMults;
@@ -256,6 +264,8 @@ struct multEntry {
256264
float multFDDAZeq = -999.0f;
257265
float multFDDCZeq = -999.0f;
258266
float multNContribsZeq = 0;
267+
float multMFTTracksZeq = 0;
268+
float multGlobalTracksZeq = 0;
259269

260270
int multGlobalTracks = 0; // multsGlobal
261271
int multNbrContribsEta05GlobalTrackWoDCA = 0; // multsGlobal
@@ -317,6 +327,8 @@ class MultModule
317327
hVtxZFDDA = nullptr;
318328
hVtxZFDDC = nullptr;
319329
hVtxZNTracks = nullptr;
330+
hVtxZNMFTTracks = nullptr;
331+
hVtxZNGlobalTracks = nullptr;
320332
}
321333

322334
// internal: calib related, vtx-z profiles
@@ -330,6 +342,8 @@ class MultModule
330342
TProfile* hVtxZFDDA;
331343
TProfile* hVtxZFDDC;
332344
TProfile* hVtxZNTracks;
345+
TProfile* hVtxZNMFTTracks; // non-legacy, added August/2025
346+
TProfile* hVtxZNGlobalTracks; // non-legacy, added August/2025
333347

334348
// declaration of structs here
335349
// (N.B.: will be invisible to the outside, create your own copies)
@@ -469,15 +483,28 @@ class MultModule
469483
internalOpts.mEnabledTables[kMFTMults] = 1;
470484
listOfRequestors[kMFTMults].Append(Form("%s ", "dependency check"));
471485
}
486+
if (internalOpts.mEnabledTables[kCentMFTs] && !internalOpts.mEnabledTables[kMFTMultZeqs]) {
487+
internalOpts.mEnabledTables[kMFTMultZeqs] = 1;
488+
listOfRequestors[kMFTMultZeqs].Append(Form("%s ", "dependency check"));
489+
}
472490
if (internalOpts.mEnabledTables[kCentNGlobals] && !internalOpts.mEnabledTables[kMultsGlobal]) {
473491
internalOpts.mEnabledTables[kMultsGlobal] = 1;
474492
listOfRequestors[kMultsGlobal].Append(Form("%s ", "dependency check"));
475493
}
494+
if (internalOpts.mEnabledTables[kCentNGlobals] && !internalOpts.mEnabledTables[kGlobalMultZeqs]) {
495+
internalOpts.mEnabledTables[kGlobalMultZeqs] = 1;
496+
listOfRequestors[kGlobalMultZeqs].Append(Form("%s ", "dependency check"));
497+
}
476498
if (internalOpts.embedINELgtZEROselection.value > 0 && !internalOpts.mEnabledTables[kPVMults]) {
477499
internalOpts.mEnabledTables[kPVMults] = 1;
478500
listOfRequestors[kPVMults].Append(Form("%s ", "dependency check"));
479501
}
480502

503+
// capture the need for PYTHIA calibration in Pb-Pb runs
504+
if (metadataInfo.isMC() && mRunNumber >= 544013 && mRunNumber <= 545367) {
505+
internalOpts.generatorName.value = "PYTHIA";
506+
}
507+
481508
// list enabled tables
482509
for (int i = 0; i < nTablesConst; i++) {
483510
// printout to be improved in the future
@@ -486,11 +513,6 @@ class MultModule
486513
}
487514
}
488515

489-
// capture the need for PYTHIA calibration in Pb-Pb runs
490-
if (metadataInfo.isMC() && mRunNumber >= 544013 && mRunNumber <= 545367) {
491-
internalOpts.generatorName.value = "PYTHIA";
492-
}
493-
494516
mRunNumber = 0;
495517
mRunNumberCentrality = 0;
496518
lCalibLoaded = false;
@@ -500,8 +522,9 @@ class MultModule
500522
hVtxZFDDA = nullptr;
501523
hVtxZFDDC = nullptr;
502524
hVtxZNTracks = nullptr;
525+
hVtxZNMFTTracks = nullptr;
526+
hVtxZNGlobalTracks = nullptr;
503527

504-
// pass to the outside
505528
opts = internalOpts;
506529
}
507530

@@ -632,12 +655,20 @@ class MultModule
632655
hVtxZFDDA = static_cast<TProfile*>(lCalibObjects->FindObject("hVtxZFDDA"));
633656
hVtxZFDDC = static_cast<TProfile*>(lCalibObjects->FindObject("hVtxZFDDC"));
634657
hVtxZNTracks = static_cast<TProfile*>(lCalibObjects->FindObject("hVtxZNTracksPV"));
658+
hVtxZNMFTTracks = static_cast<TProfile*>(lCalibObjects->FindObject("hVtxZMFT"));
659+
hVtxZNGlobalTracks = static_cast<TProfile*>(lCalibObjects->FindObject("hVtxZNGlobals"));
635660
lCalibLoaded = true;
636661
// Capture error
637662
if (!hVtxZFV0A || !hVtxZFT0A || !hVtxZFT0C || !hVtxZFDDA || !hVtxZFDDC || !hVtxZNTracks) {
638663
LOGF(error, "Problem loading CCDB objects! Please check");
639664
lCalibLoaded = false;
640665
}
666+
if (!hVtxZNMFTTracks) {
667+
LOGF(info, "MFT track counter: vertex-Z calibration not loaded, will run without.");
668+
}
669+
if (!hVtxZNGlobalTracks) {
670+
LOGF(info, "Global track counter: vertex-Z calibration not loaded, will run without.");
671+
}
641672
} else {
642673
LOGF(error, "Problem loading CCDB object! Please check");
643674
lCalibLoaded = false;
@@ -722,17 +753,17 @@ class MultModule
722753
}
723754

724755
//_______________________________________________________________________
725-
// forward detector signals, vertex-Z equalized
756+
// vertex-Z equalized signals
726757
if (internalOpts.mEnabledTables[kFV0MultZeqs]) {
727-
if (std::fabs(collision.posZ() && lCalibLoaded)) {
758+
if (std::fabs(collision.posZ()) < 15.0f && lCalibLoaded) {
728759
mults.multFV0AZeq = hVtxZFV0A->Interpolate(0.0) * mults.multFV0A / hVtxZFV0A->Interpolate(collision.posZ());
729760
} else {
730761
mults.multFV0AZeq = 0.0f;
731762
}
732763
cursors.tableFV0Zeqs(mults.multFV0AZeq);
733764
}
734765
if (internalOpts.mEnabledTables[kFT0MultZeqs]) {
735-
if (std::fabs(collision.posZ() && lCalibLoaded)) {
766+
if (std::fabs(collision.posZ()) < 15.0f && lCalibLoaded) {
736767
mults.multFT0AZeq = hVtxZFT0A->Interpolate(0.0) * mults.multFT0A / hVtxZFT0A->Interpolate(collision.posZ());
737768
mults.multFT0CZeq = hVtxZFT0C->Interpolate(0.0) * mults.multFT0C / hVtxZFT0C->Interpolate(collision.posZ());
738769
} else {
@@ -742,7 +773,7 @@ class MultModule
742773
cursors.tableFT0Zeqs(mults.multFT0AZeq, mults.multFT0CZeq);
743774
}
744775
if (internalOpts.mEnabledTables[kFDDMultZeqs]) {
745-
if (std::fabs(collision.posZ() && lCalibLoaded)) {
776+
if (std::fabs(collision.posZ()) < 15.0f && lCalibLoaded) {
746777
mults.multFDDAZeq = hVtxZFDDA->Interpolate(0.0) * mults.multFDDA / hVtxZFDDA->Interpolate(collision.posZ());
747778
mults.multFDDCZeq = hVtxZFDDC->Interpolate(0.0) * mults.multFDDC / hVtxZFDDC->Interpolate(collision.posZ());
748779
} else {
@@ -754,7 +785,7 @@ class MultModule
754785

755786
//_______________________________________________________________________
756787
// determine if barrel track loop is required, do it (once!) if so but save CPU if not
757-
if (internalOpts.mEnabledTables[kTPCMults] || internalOpts.mEnabledTables[kPVMults] || internalOpts.mEnabledTables[kMultsExtra] || internalOpts.mEnabledTables[kPVMultZeqs] || internalOpts.mEnabledTables[kMultsGlobal]) {
788+
if (internalOpts.mEnabledTables[kTPCMults] || internalOpts.mEnabledTables[kPVMults] || internalOpts.mEnabledTables[kMultsExtra] || internalOpts.mEnabledTables[kPVMultZeqs] || internalOpts.mEnabledTables[kMultsGlobal] || internalOpts.mEnabledTables[kGlobalMultZeqs]) {
758789
// single loop to calculate all
759790
for (const auto& track : tracks) {
760791
if (track.hasTPC()) {
@@ -822,6 +853,17 @@ class MultModule
822853
}
823854

824855
cursors.multsGlobal(mults.multGlobalTracks, mults.multNbrContribsEta08GlobalTrackWoDCA, mults.multNbrContribsEta10GlobalTrackWoDCA, mults.multNbrContribsEta05GlobalTrackWoDCA);
856+
857+
if (!hVtxZNGlobalTracks || std::fabs(collision.posZ()) > 15.0f) {
858+
mults.multGlobalTracksZeq = mults.multGlobalTracks; // if no equalization available, don't do it
859+
} else {
860+
mults.multGlobalTracksZeq = hVtxZNGlobalTracks->Interpolate(0.0) * mults.multFT0C / hVtxZNGlobalTracks->Interpolate(collision.posZ());
861+
}
862+
863+
// provide vertex-Z equalized Nglobals (or non-equalized if missing or beyond range)
864+
if (internalOpts.mEnabledTables[kGlobalMultZeqs]) {
865+
cursors.tableNGlobalZeqs(mults.multGlobalTracksZeq);
866+
}
825867
}
826868

827869
// fill track counters at this stage if requested
@@ -842,7 +884,7 @@ class MultModule
842884
collision.flags());
843885
}
844886
if (internalOpts.mEnabledTables[kPVMultZeqs]) {
845-
if (std::fabs(collision.posZ()) && lCalibLoaded) {
887+
if (std::fabs(collision.posZ()) < 15.0f && lCalibLoaded) {
846888
mults.multNContribsZeq = hVtxZNTracks->Interpolate(0.0) * mults.multNContribs / hVtxZNTracks->Interpolate(collision.posZ());
847889
} else {
848890
mults.multNContribsZeq = 0.0f;
@@ -934,6 +976,18 @@ class MultModule
934976
cursors.mftMults(nAllTracks, nTracks);
935977
mults[collision.globalIndex()].multMFTAllTracks = nAllTracks;
936978
mults[collision.globalIndex()].multMFTTracks = nTracks;
979+
980+
// vertex-Z equalized MFT
981+
if (!hVtxZNMFTTracks || std::fabs(collision.posZ()) > 15.0f) {
982+
mults[collision.globalIndex()].multMFTTracksZeq = mults[collision.globalIndex()].multMFTTracks; // if no equalization available, don't do it
983+
} else {
984+
mults[collision.globalIndex()].multMFTTracksZeq = hVtxZNMFTTracks->Interpolate(0.0) * mults[collision.globalIndex()].multMFTTracks / hVtxZNMFTTracks->Interpolate(collision.posZ());
985+
}
986+
987+
// provide vertex-Z equalized Nglobals (or non-equalized if missing or beyond range)
988+
if (internalOpts.mEnabledTables[kMFTMultZeqs]) {
989+
cursors.tableNMFTZeqs(mults[collision.globalIndex()].multMFTTracksZeq);
990+
}
937991
}
938992

939993
//__________________________________________________
@@ -1225,9 +1279,9 @@ class MultModule
12251279
if (internalOpts.mEnabledTables[kCentNTPVs])
12261280
populateTable(cursors.centNTPV, ntpvInfo, mults[iEv].multNContribs, isInelGt0);
12271281
if (internalOpts.mEnabledTables[kCentNGlobals])
1228-
populateTable(cursors.centNGlobals, nGlobalInfo, mults[iEv].multGlobalTracks, isInelGt0);
1282+
populateTable(cursors.centNGlobals, nGlobalInfo, mults[iEv].multGlobalTracksZeq, isInelGt0);
12291283
if (internalOpts.mEnabledTables[kCentMFTs])
1230-
populateTable(cursors.centMFTs, mftInfo, mults[iEv].multMFTTracks, isInelGt0);
1284+
populateTable(cursors.centMFTs, mftInfo, mults[iEv].multMFTTracksZeq, isInelGt0);
12311285
}
12321286

12331287
// populate centralities per BC

0 commit comments

Comments
 (0)