Skip to content

Commit 69700d6

Browse files
authored
[PWGLF] Update resonanceModuleInitializer for mcCentrality compatibility (#18151)
1 parent 80f67fd commit 69700d6

1 file changed

Lines changed: 80 additions & 13 deletions

File tree

‎PWGLF/TableProducer/Resonances/resonanceModuleInitializer.cxx‎

Lines changed: 80 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -273,9 +273,25 @@ struct ResonanceModuleInitializer {
273273
}
274274
LOGF(info, "Stored collision multiplicity estimator: %d", EventConfig.cfgMultiplicityEstimator.value);
275275

276+
const int enabledGenProcesses = static_cast<int>(doprocessMCgen) +
277+
static_cast<int>(doprocessMCgenFT0M) +
278+
static_cast<int>(doprocessMCgenFT0C) +
279+
static_cast<int>(doprocessMCgenFV0A) +
280+
static_cast<int>(doprocessMCgenNoCent);
281+
const bool anyGenProcess = enabledGenProcesses > 0;
282+
if (enabledGenProcesses > 1) {
283+
LOGF(fatal, "Enable only one generator process: processMCgen, processMCgenFT0M, processMCgenFT0C, processMCgenFV0A, or processMCgenNoCent");
284+
}
285+
if (doprocessMCgenNoCent && GenCuts.cfgGenMultPercentile) {
286+
LOGF(fatal, "processMCgenNoCent requires cfgGenMultPercentile=false");
287+
}
288+
if ((doprocessMCgenFT0M || doprocessMCgenFT0C || doprocessMCgenFV0A) && !GenCuts.cfgGenMultPercentile) {
289+
LOGF(fatal, "The estimator-specific generator processes require cfgGenMultPercentile=true; use processMCgenNoCent otherwise");
290+
}
291+
276292
// Run 2 and Run 3 callbacks require different event-selection semantics.
277293
const bool anyRun2Process = doprocessRun2 || doprocessRun2MC;
278-
const bool anyRun3Process = doprocessRun3 || doprocessRun3MC || doprocessMCgen;
294+
const bool anyRun3Process = doprocessRun3 || doprocessRun3MC || anyGenProcess;
279295
if (anyRun2Process && anyRun3Process) {
280296
LOG(fatal) << "Run 2 and Run 3 processes cannot be enabled in the same ResonanceModuleInitializer";
281297
}
@@ -290,13 +306,13 @@ struct ResonanceModuleInitializer {
290306
static_cast<int>(GenCuts.cfgGenMultFT0M.value) +
291307
static_cast<int>(GenCuts.cfgGenMultFT0C.value) +
292308
static_cast<int>(GenCuts.cfgGenMultFV0A.value);
293-
if ((doprocessMCgen || doprocessRun2MC || doprocessRun3MC) && enabledGenMultiplicityEstimators > 1) {
309+
if ((anyGenProcess || doprocessRun2MC || doprocessRun3MC) && enabledGenMultiplicityEstimators > 1) {
294310
LOG(fatal) << "Only one generator multiplicity estimator can be enabled: cfgGenMult05, cfgGenMult10, cfgGenMultFT0M, cfgGenMultFT0C, or cfgGenMultFV0A";
295311
}
296-
if (doprocessMCgen) {
297-
if (GenCuts.cfgGenMultPercentile && multEstimator != CentralityFT0M &&
312+
if (anyGenProcess) {
313+
if (doprocessMCgen && GenCuts.cfgGenMultPercentile && multEstimator != CentralityFT0M &&
298314
multEstimator != CentralityFT0C && multEstimator != CentralityFV0A) {
299-
LOGF(fatal, "cfgGenMultPercentile supports cfgMultName=FT0M, FT0C, or FV0A");
315+
LOGF(fatal, "processMCgen with cfgGenMultPercentile supports cfgMultName=FT0M, FT0C, or FV0A");
300316
}
301317
if (GenCuts.isZvtxcutGen &&
302318
(!std::isfinite(GenCuts.cutzvertexGen.value) || GenCuts.cutzvertexGen.value <= 0.f)) {
@@ -362,7 +378,7 @@ struct ResonanceModuleInitializer {
362378
ccdb->setCreatedNotAfter(now); // TODO must become global parameter from the train creation time
363379
}
364380

365-
if (doprocessMCgen) {
381+
if (anyGenProcess) {
366382
constexpr std::array<char const*, 5> MCEventLabels{"All", "z vertex", "BC RCT", "INEL", "INEL>0"};
367383
AxisSpec centAxisGen = {GenCuts.binsCentGen, "Centrality (%)"};
368384
AxisSpec eventTypeAxis = {2, 0.f, 2.f, "Event type"};
@@ -533,7 +549,14 @@ struct ResonanceModuleInitializer {
533549
fillDetailedCollisionQA(collision, o2::analysis::CollisonCuts::kAllpassed);
534550
}
535551

552+
// Keep the original input for existing processMCgen configurations. The
553+
// dedicated callbacks select the MC percentile independently of cfgMultName
554+
// (reconstructed centrality) and cfgGenMult* (generator multiplicity).
536555
using GenMCCollisions = soa::Join<aod::McCollisions, aod::McCentFT0Ms, aod::McCentFT0Cs, aod::McCentFV0As, aod::MultsExtraMC>;
556+
using GenMCCollisionsFT0M = soa::Join<aod::McCollisions, aod::McCentFT0Ms, aod::MultsExtraMC>;
557+
using GenMCCollisionsFT0C = soa::Join<aod::McCollisions, aod::McCentFT0Cs, aod::MultsExtraMC>;
558+
using GenMCCollisionsFV0A = soa::Join<aod::McCollisions, aod::McCentFV0As, aod::MultsExtraMC>;
559+
using GenMCCollisionsNoCent = soa::Join<aod::McCollisions, aod::MultsExtraMC>;
537560
using Run3MCCollisions = soa::Join<aod::McCollisions, aod::MultsExtraMC>;
538561
using Run2MCCollisions = soa::Join<aod::McCollisions, aod::MultsExtraMC>;
539562
using GenRecoCollisions = soa::Join<aod::ResoCollisionCandidates, aod::MultsExtra, aod::PVMults, aod::McCollisionLabels>;
@@ -846,19 +869,19 @@ struct ResonanceModuleInitializer {
846869
* reduced AOD tables. RCT quality is evaluated through the generator
847870
* collision's associated BC because it is a run-condition property.
848871
*/
849-
void processMCgen(GenMCCollisions::iterator const& mcCollision,
850-
aod::McParticles const& mcParticles,
851-
soa::SmallGroups<GenRecoCollisions> const& collisions,
852-
BCsWithRCT const&)
872+
template <typename MCCollision>
873+
void processMCgenQA(MCCollision const& mcCollision,
874+
aod::McParticles const& mcParticles,
875+
soa::SmallGroups<GenRecoCollisions> const& collisions,
876+
float generatorCentrality)
853877
{
854-
auto bc = mcCollision.bc_as<BCsWithRCT>();
878+
auto bc = mcCollision.template bc_as<BCsWithRCT>();
855879
initCCDB(bc);
856880

857881
const auto getReconstructedCentrality = [&](auto const& collision) {
858882
return centEst(collision);
859883
};
860884

861-
const float generatorCentrality = getMCCentrality(mcCollision);
862885
const float impactParameter = mcCollision.impactParameter();
863886
const float multiplicity = getMCMultiplicity(mcCollision);
864887

@@ -910,7 +933,51 @@ struct ResonanceModuleInitializer {
910933
qaRegistry.fill(HIST("EventGen/h4MultCent_recMC"), eventType, reconstructedCentrality, multiplicity, impactParameter);
911934
}
912935
}
913-
PROCESS_SWITCH(ResonanceModuleInitializer, processMCgen, "Process generator-level MC QA", false);
936+
937+
void processMCgen(GenMCCollisions::iterator const& mcCollision,
938+
aod::McParticles const& mcParticles,
939+
soa::SmallGroups<GenRecoCollisions> const& collisions,
940+
BCsWithRCT const&)
941+
{
942+
processMCgenQA(mcCollision, mcParticles, collisions, getMCCentrality(mcCollision));
943+
}
944+
PROCESS_SWITCH(ResonanceModuleInitializer, processMCgen, "Process generator-level MC QA with all MC percentile inputs (legacy)", false);
945+
946+
void processMCgenFT0M(GenMCCollisionsFT0M::iterator const& mcCollision,
947+
aod::McParticles const& mcParticles,
948+
soa::SmallGroups<GenRecoCollisions> const& collisions,
949+
BCsWithRCT const&)
950+
{
951+
processMCgenQA(mcCollision, mcParticles, collisions, mcCollision.centFT0M());
952+
}
953+
PROCESS_SWITCH(ResonanceModuleInitializer, processMCgenFT0M, "Process generator-level MC QA with only the FT0M MC percentile input", false);
954+
955+
void processMCgenFT0C(GenMCCollisionsFT0C::iterator const& mcCollision,
956+
aod::McParticles const& mcParticles,
957+
soa::SmallGroups<GenRecoCollisions> const& collisions,
958+
BCsWithRCT const&)
959+
{
960+
processMCgenQA(mcCollision, mcParticles, collisions, mcCollision.centFT0C());
961+
}
962+
PROCESS_SWITCH(ResonanceModuleInitializer, processMCgenFT0C, "Process generator-level MC QA with only the FT0C MC percentile input", false);
963+
964+
void processMCgenFV0A(GenMCCollisionsFV0A::iterator const& mcCollision,
965+
aod::McParticles const& mcParticles,
966+
soa::SmallGroups<GenRecoCollisions> const& collisions,
967+
BCsWithRCT const&)
968+
{
969+
processMCgenQA(mcCollision, mcParticles, collisions, mcCollision.centFV0A());
970+
}
971+
PROCESS_SWITCH(ResonanceModuleInitializer, processMCgenFV0A, "Process generator-level MC QA with only the FV0A MC percentile input", false);
972+
973+
void processMCgenNoCent(GenMCCollisionsNoCent::iterator const& mcCollision,
974+
aod::McParticles const& mcParticles,
975+
soa::SmallGroups<GenRecoCollisions> const& collisions,
976+
BCsWithRCT const&)
977+
{
978+
processMCgenQA(mcCollision, mcParticles, collisions, 100.5f);
979+
}
980+
PROCESS_SWITCH(ResonanceModuleInitializer, processMCgenNoCent, "Process generator-level MC QA using reconstructed centrality without MC percentile inputs", false);
914981

915982
/**
916983
* @brief Processes Run3 MC data

0 commit comments

Comments
 (0)