From 138fd9d7cd1fe8bfb63aeb86e996656b3a267f0a Mon Sep 17 00:00:00 2001 From: Maurice Coquet Date: Fri, 6 Feb 2026 18:14:38 +0100 Subject: [PATCH] [PWGDQ] RCT flag checker in tableMaker --- PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx | 16 +++++++++++++++- PWGDQ/TableProducer/tableMaker_withAssoc.cxx | 18 ++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx b/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx index 79e30c2fba8..5e936739c3e 100644 --- a/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx +++ b/PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx @@ -70,6 +70,7 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; using namespace o2::aod; +using namespace o2::aod::rctsel; // Declare Joins used in the various process functions using MyBarrelTracks = soa::Join fConfigMuonCutsJSON{"cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; } fConfigCuts; + // RCT selection + struct : ConfigurableGroup { + Configurable fConfigUseRCT{"cfgUseRCT", false, "Enable event selection with RCT flags"}; + Configurable fConfigRCTLabel{"cfgRCTLabel", "CBT", "RCT flag labels : CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo"}; + } fConfigRCT; + // MC signals to be skimmed Configurable fConfigMCSignals{"cfgMCsignals", "", "Comma separated list of MC signals"}; Configurable fConfigMCSignalsJSON{"cfgMCsignalsJSON", "", "Additional list of MC signals via JSON"}; @@ -261,6 +268,9 @@ struct TableMakerMC { std::array cutValues; std::vector cutDirMl; + // RCT flag checker + RCTFlagsChecker rctChecker{"CBT"}; + void init(o2::framework::InitContext& context) { // Check whether barrel or muon are enabled @@ -398,6 +408,10 @@ struct TableMakerMC { matchingMlResponse.cacheInputFeaturesIndices(fConfigVariousOptions.fInputFeatures.value); matchingMlResponse.init(); } + + if (fConfigRCT.fConfigUseRCT.value) { + rctChecker.init(fConfigRCT.fConfigRCTLabel); + } } void DefineCuts() @@ -634,7 +648,7 @@ struct TableMakerMC { (reinterpret_cast(fStatsList->At(0)))->Fill(2.0, static_cast(o2::aod::evsel::kNsel)); // Apply the user specified event selection - if (!fEventCut->IsSelected(VarManager::fgValues)) { + if (!fEventCut->IsSelected(VarManager::fgValues) || (fConfigRCT.fConfigUseRCT.value && !(rctChecker(collision)))) { continue; } diff --git a/PWGDQ/TableProducer/tableMaker_withAssoc.cxx b/PWGDQ/TableProducer/tableMaker_withAssoc.cxx index 55dc0a539b3..acb67b8215f 100644 --- a/PWGDQ/TableProducer/tableMaker_withAssoc.cxx +++ b/PWGDQ/TableProducer/tableMaker_withAssoc.cxx @@ -77,6 +77,7 @@ using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; using namespace o2::aod; +using namespace o2::aod::rctsel; Zorro zorro; @@ -204,6 +205,12 @@ struct TableMaker { Configurable fConfigMuonCutsJSON{"cfgMuonCutsJSON", "", "Additional list of muon cuts in JSON format"}; } fConfigCuts; + // RCT selection + struct : ConfigurableGroup { + Configurable fConfigUseRCT{"cfgUseRCT", false, "Enable event selection with RCT flags"}; + Configurable fConfigRCTLabel{"cfgRCTLabel", "CBT", "RCT flag labels : CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo"}; + } fConfigRCT; + // Zorro selection struct : ConfigurableGroup { Configurable fConfigRunZorro{"cfgRunZorro", false, "Enable event selection with zorro"}; @@ -312,6 +319,9 @@ struct TableMaker { std::array cutValues; std::vector cutDirMl; + // RCT flag checker + RCTFlagsChecker rctChecker{"CBT"}; + // FIXME: For now, the skimming is done using the Common track-collision association task, which does not allow to use // our own Filtered tracks. If the filter is very selective, then it may be worth to run the association in this workflow // using the Common/CollisionAssociation class @@ -467,6 +477,10 @@ struct TableMaker { matchingMlResponse.cacheInputFeaturesIndices(fConfigVariousOptions.fInputFeatures.value); matchingMlResponse.init(); } + + if (fConfigRCT.fConfigUseRCT.value) { + rctChecker.init(fConfigRCT.fConfigRCTLabel); + } } void DefineCuts() @@ -995,7 +1009,7 @@ struct TableMaker { zorro.initCCDB(fCCDB.service, fCurrentRun, bc.timestamp(), fConfigZorro.fConfigZorroTrigMask.value); zorro.populateExternalHists(fCurrentRun, reinterpret_cast(fStatsList->At(kStatsZorroInfo)), reinterpret_cast(fStatsList->At(kStatsZorroSel))); - if (!fEventCut->IsSelected(VarManager::fgValues)) { + if (!fEventCut->IsSelected(VarManager::fgValues) || (fConfigRCT.fConfigUseRCT.value && !rctChecker(collision))) { continue; } @@ -1007,7 +1021,7 @@ struct TableMaker { continue; } } else { - if (!fEventCut->IsSelected(VarManager::fgValues)) { + if (!fEventCut->IsSelected(VarManager::fgValues) || (fConfigRCT.fConfigUseRCT.value && !rctChecker(collision))) { continue; } }