From 91ad882f20527d020a7c3ecb9d76c8f2c9022dca Mon Sep 17 00:00:00 2001 From: ariffero Date: Wed, 13 May 2026 14:50:39 +0200 Subject: [PATCH 1/8] Add RCT flag checks in UPCCandidateProducer --- PWGUD/TableProducer/UPCCandidateProducer.cxx | 40 ++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/PWGUD/TableProducer/UPCCandidateProducer.cxx b/PWGUD/TableProducer/UPCCandidateProducer.cxx index d58c98ac587..cf314e7fb58 100644 --- a/PWGUD/TableProducer/UPCCandidateProducer.cxx +++ b/PWGUD/TableProducer/UPCCandidateProducer.cxx @@ -19,6 +19,7 @@ #include "PWGUD/DataModel/UDTables.h" #include "Common/CCDB/EventSelectionParams.h" +#include "Common/CCDB/RCTSelectionFlags.h" #include "Common/DataModel/EventSelection.h" #include "Common/DataModel/PIDResponseTOF.h" #include "Common/DataModel/PIDResponseTPC.h" @@ -57,6 +58,7 @@ using namespace o2::framework; using namespace o2::framework::expressions; +using namespace o2::aod::rctsel; struct UpcCandProducer { bool fDoMC{false}; @@ -91,6 +93,9 @@ struct UpcCandProducer { std::vector fwdSelectors; std::vector barrelSelectors; + // RCT flag checker + RCTFlagsChecker myRCTChecker; + // skimmer flags // choose a source of signal MC events Configurable fSignalGenID{"signalGenID", 1, "Signal generator ID"}; @@ -125,9 +130,15 @@ struct UpcCandProducer { Configurable fRequireNoTimeFrameBorder{"requireNoTimeFrameBorder", true, "Require kNoTimeFrameBorder selection bit"}; Configurable fRequireNoITSROFrameBorder{"requireNoITSROFrameBorder", true, "Require kNoITSROFrameBorder selection bit"}; + Configurable rctLabel{"rctLabel", "CBT_muon", "RCT label to use, options: CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo"}; + Configurable checkZDC{"checkZDC", false, "Consider ZDC quality"}; + Configurable useLAasBad{"useLAasBad", false, "Consider Lim acc flag as Bad"}; + // QA histograms HistogramRegistry histRegistry{"HistRegistry", {}, OutputObjHandlingPolicy::AnalysisObject}; + using CollisionsSels = o2::soa::Join; + using BCsWithBcSels = o2::soa::Join; using ForwardTracks = o2::soa::Join; @@ -146,6 +157,9 @@ struct UpcCandProducer { upcCuts = (UPCCutparHolder)inputCuts; + // initialize RCT flag checker + myRCTChecker.init(rctLabel.value, checkZDC.value, useLAasBad.value); + const AxisSpec axisTrgCounters{10, 0.5, 10.5, ""}; histRegistry.add("hCountersTrg", "", kTH1F, {axisTrgCounters}); histRegistry.get(HIST("hCountersTrg"))->GetXaxis()->SetBinLabel(1, "TCE"); @@ -179,6 +193,11 @@ struct UpcCandProducer { histRegistry.get(HIST("BarrelsSelCounter"))->GetXaxis()->SetBinLabel(upchelpers::kBarrelSelTPCChi2 + 1, "TPCChi2"); histRegistry.get(HIST("BarrelsSelCounter"))->GetXaxis()->SetBinLabel(upchelpers::kBarrelSelDCAXY + 1, "DCAXY"); histRegistry.get(HIST("BarrelsSelCounter"))->GetXaxis()->SetBinLabel(upchelpers::kBarrelSelDCAZ + 1, "DCAZ"); + + histRegistry.add("RCTSelCounter", "RCTSelCounter", kTH1F, {{3, 0.5, 3.5}}); + histRegistry.get(HIST("RCTSelCounter"))->GetXaxis()->SetBinLabel(1, "Before RCT sel"); + histRegistry.get(HIST("RCTSelCounter"))->GetXaxis()->SetBinLabel(2, "After RCT sel"); + histRegistry.get(HIST("RCTSelCounter"))->GetXaxis()->SetBinLabel(3, "RCT rejected"); } template @@ -682,6 +701,13 @@ struct UpcCandProducer { uint64_t trackBC = 0; if (trk.has_collision()) { const auto& col = trk.collision(); + auto bcRCT = col.bc_as(); + histRegistry.get(HIST("RCTSelCounter"))->Fill(1); + if(!myRCTChecker(bcRCT)){ + histRegistry.get(HIST("RCTSelCounter"))->Fill(3); + continue; + } + histRegistry.get(HIST("RCTSelCounter"))->Fill(2); nContrib = col.numContrib(); trackBC = col.bc_as().globalBC(); hasTrackBC = true; @@ -725,6 +751,13 @@ struct UpcCandProducer { if (!trk.has_collision()) continue; const auto& col = trk.collision(); + auto bcRCT = col.bc_as(); + histRegistry.get(HIST("RCTSelCounter"))->Fill(1); + if(!myRCTChecker(bcRCT)){ + histRegistry.get(HIST("RCTSelCounter"))->Fill(3); + continue; + } + histRegistry.get(HIST("RCTSelCounter"))->Fill(2); nContrib = col.numContrib(); trackBC = col.bc_as().globalBC(); hasTrackBC = true; @@ -765,6 +798,13 @@ struct UpcCandProducer { if (!trk.has_collision()) continue; const auto& col = trk.collision(); + auto bcRCT = col.bc_as(); + histRegistry.get(HIST("RCTSelCounter"))->Fill(1); + if(!myRCTChecker(bcRCT)){ + histRegistry.get(HIST("RCTSelCounter"))->Fill(3); + continue; + } + histRegistry.get(HIST("RCTSelCounter"))->Fill(2); nContrib = col.numContrib(); trackBC = col.bc_as().globalBC(); const auto& bc = col.bc_as(); From d8e63d35e02133759dcb5a680133d4317661051c Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Thu, 14 May 2026 15:56:31 +0000 Subject: [PATCH 2/8] Please consider the following formatting changes --- PWGUD/TableProducer/UPCCandidateProducer.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGUD/TableProducer/UPCCandidateProducer.cxx b/PWGUD/TableProducer/UPCCandidateProducer.cxx index cf314e7fb58..32df951c4d6 100644 --- a/PWGUD/TableProducer/UPCCandidateProducer.cxx +++ b/PWGUD/TableProducer/UPCCandidateProducer.cxx @@ -703,7 +703,7 @@ struct UpcCandProducer { const auto& col = trk.collision(); auto bcRCT = col.bc_as(); histRegistry.get(HIST("RCTSelCounter"))->Fill(1); - if(!myRCTChecker(bcRCT)){ + if (!myRCTChecker(bcRCT)) { histRegistry.get(HIST("RCTSelCounter"))->Fill(3); continue; } @@ -753,7 +753,7 @@ struct UpcCandProducer { const auto& col = trk.collision(); auto bcRCT = col.bc_as(); histRegistry.get(HIST("RCTSelCounter"))->Fill(1); - if(!myRCTChecker(bcRCT)){ + if (!myRCTChecker(bcRCT)) { histRegistry.get(HIST("RCTSelCounter"))->Fill(3); continue; } @@ -800,7 +800,7 @@ struct UpcCandProducer { const auto& col = trk.collision(); auto bcRCT = col.bc_as(); histRegistry.get(HIST("RCTSelCounter"))->Fill(1); - if(!myRCTChecker(bcRCT)){ + if (!myRCTChecker(bcRCT)) { histRegistry.get(HIST("RCTSelCounter"))->Fill(3); continue; } From e4c7d9006cf84a69fc688c1696863bb9143f3c5e Mon Sep 17 00:00:00 2001 From: ariffero Date: Thu, 14 May 2026 18:03:35 +0200 Subject: [PATCH 3/8] Fix MegaLinter errors --- PWGUD/TableProducer/UPCCandidateProducer.cxx | 1 + 1 file changed, 1 insertion(+) diff --git a/PWGUD/TableProducer/UPCCandidateProducer.cxx b/PWGUD/TableProducer/UPCCandidateProducer.cxx index 32df951c4d6..80642313a7c 100644 --- a/PWGUD/TableProducer/UPCCandidateProducer.cxx +++ b/PWGUD/TableProducer/UPCCandidateProducer.cxx @@ -55,6 +55,7 @@ #include #include #include +#include using namespace o2::framework; using namespace o2::framework::expressions; From bc01fb76ce7935c128a973196e4602e0585118c1 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Thu, 14 May 2026 16:06:45 +0000 Subject: [PATCH 4/8] Please consider the following formatting changes --- PWGUD/TableProducer/UPCCandidateProducer.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGUD/TableProducer/UPCCandidateProducer.cxx b/PWGUD/TableProducer/UPCCandidateProducer.cxx index 80642313a7c..1dac593260f 100644 --- a/PWGUD/TableProducer/UPCCandidateProducer.cxx +++ b/PWGUD/TableProducer/UPCCandidateProducer.cxx @@ -51,11 +51,11 @@ #include #include #include +#include #include #include #include #include -#include using namespace o2::framework; using namespace o2::framework::expressions; From 4ed4a72904e28422403c51aae8fa7a3fa997870a Mon Sep 17 00:00:00 2001 From: ariffero Date: Tue, 19 May 2026 10:30:46 +0200 Subject: [PATCH 5/8] Add more flags and option to not use RCT flags Added muon and muon_glo flags, that check the quality of FV0 and muon arm detectors only (less strict than CBT_muon and CBT_muon_glo that also include ITS and TPC). Added the option to not use RCT flags, selectiong "none" as rctLabel. --- PWGUD/TableProducer/UPCCandidateProducer.cxx | 43 +++++++++++++++++--- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/PWGUD/TableProducer/UPCCandidateProducer.cxx b/PWGUD/TableProducer/UPCCandidateProducer.cxx index 1dac593260f..b1a05c453be 100644 --- a/PWGUD/TableProducer/UPCCandidateProducer.cxx +++ b/PWGUD/TableProducer/UPCCandidateProducer.cxx @@ -131,9 +131,10 @@ struct UpcCandProducer { Configurable fRequireNoTimeFrameBorder{"requireNoTimeFrameBorder", true, "Require kNoTimeFrameBorder selection bit"}; Configurable fRequireNoITSROFrameBorder{"requireNoITSROFrameBorder", true, "Require kNoITSROFrameBorder selection bit"}; - Configurable rctLabel{"rctLabel", "CBT_muon", "RCT label to use, options: CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo"}; + Configurable rctLabel{"rctLabel", "muon", "RCT label to use, options: CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo, muon = FV0 + MID + MCH, muon_glo = muon + MFT, none = do not use RCT flags"}; Configurable checkZDC{"checkZDC", false, "Consider ZDC quality"}; Configurable useLAasBad{"useLAasBad", false, "Consider Lim acc flag as Bad"}; + bool useRCTflags = true; // QA histograms HistogramRegistry histRegistry{"HistRegistry", {}, OutputObjHandlingPolicy::AnalysisObject}; @@ -159,7 +160,39 @@ struct UpcCandProducer { upcCuts = (UPCCutparHolder)inputCuts; // initialize RCT flag checker - myRCTChecker.init(rctLabel.value, checkZDC.value, useLAasBad.value); + if (rctLabel.value != "none" && rctLabel.value != "muon" && rctLabel.value != "muon_glo") { + myRCTChecker.init(rctLabel.value, checkZDC.value, useLAasBad.value); + } + else if (rctLabel.value == "none"){ + useRCTflags = false; + myRCTChecker.init("CBT_muon"); + } + else if (rctLabel.value == "muon"){ + std::initializer_list flags = {kFV0Bad, kMCHBad, kMIDBad}; + if(checkZDC.value && useLAasBad.value){ + flags = {kFV0Bad, kMCHBad, kMIDBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr}; + } + else if(checkZDC.value){ + flags = {kFV0Bad, kMCHBad, kMIDBad, kZDCBad}; + } + else if(useLAasBad.value){ + flags = {kFV0Bad, kMCHBad, kMIDBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr}; + } + myRCTChecker.init(flags); + } + else if (rctLabel.value == "muon_glo"){ + std::initializer_list flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad}; + if(checkZDC.value && useLAasBad.value){ + flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr, kMFTLimAccMCRepr}; + } + else if(checkZDC.value){ + flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kZDCBad}; + } + else if(useLAasBad.value){ + flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr, kMFTLimAccMCRepr}; + } + myRCTChecker.init(flags); + } const AxisSpec axisTrgCounters{10, 0.5, 10.5, ""}; histRegistry.add("hCountersTrg", "", kTH1F, {axisTrgCounters}); @@ -704,7 +737,7 @@ struct UpcCandProducer { const auto& col = trk.collision(); auto bcRCT = col.bc_as(); histRegistry.get(HIST("RCTSelCounter"))->Fill(1); - if (!myRCTChecker(bcRCT)) { + if (!myRCTChecker(bcRCT) && useRCTflags) { histRegistry.get(HIST("RCTSelCounter"))->Fill(3); continue; } @@ -754,7 +787,7 @@ struct UpcCandProducer { const auto& col = trk.collision(); auto bcRCT = col.bc_as(); histRegistry.get(HIST("RCTSelCounter"))->Fill(1); - if (!myRCTChecker(bcRCT)) { + if (!myRCTChecker(bcRCT) && useRCTflags) { histRegistry.get(HIST("RCTSelCounter"))->Fill(3); continue; } @@ -801,7 +834,7 @@ struct UpcCandProducer { const auto& col = trk.collision(); auto bcRCT = col.bc_as(); histRegistry.get(HIST("RCTSelCounter"))->Fill(1); - if (!myRCTChecker(bcRCT)) { + if (!myRCTChecker(bcRCT) && useRCTflags) { histRegistry.get(HIST("RCTSelCounter"))->Fill(3); continue; } From 3ee18519c14ec0011b6a5ea37a57a8c304f94c45 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 19 May 2026 10:40:12 +0000 Subject: [PATCH 6/8] Please consider the following formatting changes --- PWGUD/TableProducer/UPCCandidateProducer.cxx | 27 ++++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/PWGUD/TableProducer/UPCCandidateProducer.cxx b/PWGUD/TableProducer/UPCCandidateProducer.cxx index b1a05c453be..ce31d71dbd0 100644 --- a/PWGUD/TableProducer/UPCCandidateProducer.cxx +++ b/PWGUD/TableProducer/UPCCandidateProducer.cxx @@ -162,37 +162,30 @@ struct UpcCandProducer { // initialize RCT flag checker if (rctLabel.value != "none" && rctLabel.value != "muon" && rctLabel.value != "muon_glo") { myRCTChecker.init(rctLabel.value, checkZDC.value, useLAasBad.value); - } - else if (rctLabel.value == "none"){ + } else if (rctLabel.value == "none") { useRCTflags = false; myRCTChecker.init("CBT_muon"); - } - else if (rctLabel.value == "muon"){ + } else if (rctLabel.value == "muon") { std::initializer_list flags = {kFV0Bad, kMCHBad, kMIDBad}; - if(checkZDC.value && useLAasBad.value){ + if (checkZDC.value && useLAasBad.value) { flags = {kFV0Bad, kMCHBad, kMIDBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr}; - } - else if(checkZDC.value){ + } else if (checkZDC.value) { flags = {kFV0Bad, kMCHBad, kMIDBad, kZDCBad}; - } - else if(useLAasBad.value){ + } else if (useLAasBad.value) { flags = {kFV0Bad, kMCHBad, kMIDBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr}; } myRCTChecker.init(flags); - } - else if (rctLabel.value == "muon_glo"){ + } else if (rctLabel.value == "muon_glo") { std::initializer_list flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad}; - if(checkZDC.value && useLAasBad.value){ + if (checkZDC.value && useLAasBad.value) { flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr, kMFTLimAccMCRepr}; - } - else if(checkZDC.value){ + } else if (checkZDC.value) { flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kZDCBad}; - } - else if(useLAasBad.value){ + } else if (useLAasBad.value) { flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr, kMFTLimAccMCRepr}; } myRCTChecker.init(flags); - } + } const AxisSpec axisTrgCounters{10, 0.5, 10.5, ""}; histRegistry.add("hCountersTrg", "", kTH1F, {axisTrgCounters}); From 5e8b08876f844cd08711862bc1abae7a0aecdccf Mon Sep 17 00:00:00 2001 From: ariffero Date: Tue, 19 May 2026 13:31:24 +0200 Subject: [PATCH 7/8] Fix issue with std::initializer_list being reassigned --- PWGUD/TableProducer/UPCCandidateProducer.cxx | 31 +++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/PWGUD/TableProducer/UPCCandidateProducer.cxx b/PWGUD/TableProducer/UPCCandidateProducer.cxx index ce31d71dbd0..73934df37e3 100644 --- a/PWGUD/TableProducer/UPCCandidateProducer.cxx +++ b/PWGUD/TableProducer/UPCCandidateProducer.cxx @@ -162,30 +162,33 @@ struct UpcCandProducer { // initialize RCT flag checker if (rctLabel.value != "none" && rctLabel.value != "muon" && rctLabel.value != "muon_glo") { myRCTChecker.init(rctLabel.value, checkZDC.value, useLAasBad.value); - } else if (rctLabel.value == "none") { + } + else if (rctLabel.value == "none"){ useRCTflags = false; myRCTChecker.init("CBT_muon"); - } else if (rctLabel.value == "muon") { - std::initializer_list flags = {kFV0Bad, kMCHBad, kMIDBad}; + } + else if (rctLabel.value == "muon") { if (checkZDC.value && useLAasBad.value) { - flags = {kFV0Bad, kMCHBad, kMIDBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr}; + myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr}); } else if (checkZDC.value) { - flags = {kFV0Bad, kMCHBad, kMIDBad, kZDCBad}; + myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kZDCBad}); } else if (useLAasBad.value) { - flags = {kFV0Bad, kMCHBad, kMIDBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr}; + myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr}); + } else { + myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad}); } - myRCTChecker.init(flags); - } else if (rctLabel.value == "muon_glo") { - std::initializer_list flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad}; + } + else if (rctLabel.value == "muon_glo") { if (checkZDC.value && useLAasBad.value) { - flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr, kMFTLimAccMCRepr}; + myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr, kMFTLimAccMCRepr}); } else if (checkZDC.value) { - flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kZDCBad}; + myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kZDCBad}); } else if (useLAasBad.value) { - flags = {kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr, kMFTLimAccMCRepr}; + myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr, kMFTLimAccMCRepr}); + } else { + myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMFTBad}); } - myRCTChecker.init(flags); - } + } const AxisSpec axisTrgCounters{10, 0.5, 10.5, ""}; histRegistry.add("hCountersTrg", "", kTH1F, {axisTrgCounters}); From 0b025426585a3ef924e15785bf8efdd37baaf06a Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 19 May 2026 12:41:13 +0000 Subject: [PATCH 8/8] Please consider the following formatting changes --- PWGUD/TableProducer/UPCCandidateProducer.cxx | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/PWGUD/TableProducer/UPCCandidateProducer.cxx b/PWGUD/TableProducer/UPCCandidateProducer.cxx index 73934df37e3..c2606e52f3c 100644 --- a/PWGUD/TableProducer/UPCCandidateProducer.cxx +++ b/PWGUD/TableProducer/UPCCandidateProducer.cxx @@ -162,12 +162,10 @@ struct UpcCandProducer { // initialize RCT flag checker if (rctLabel.value != "none" && rctLabel.value != "muon" && rctLabel.value != "muon_glo") { myRCTChecker.init(rctLabel.value, checkZDC.value, useLAasBad.value); - } - else if (rctLabel.value == "none"){ + } else if (rctLabel.value == "none") { useRCTflags = false; myRCTChecker.init("CBT_muon"); - } - else if (rctLabel.value == "muon") { + } else if (rctLabel.value == "muon") { if (checkZDC.value && useLAasBad.value) { myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr}); } else if (checkZDC.value) { @@ -177,8 +175,7 @@ struct UpcCandProducer { } else { myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad}); } - } - else if (rctLabel.value == "muon_glo") { + } else if (rctLabel.value == "muon_glo") { if (checkZDC.value && useLAasBad.value) { myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMFTBad, kZDCBad, kMCHLimAccMCRepr, kMIDLimAccMCRepr, kMFTLimAccMCRepr}); } else if (checkZDC.value) { @@ -188,7 +185,7 @@ struct UpcCandProducer { } else { myRCTChecker.init({kFV0Bad, kMCHBad, kMIDBad, kMFTBad}); } - } + } const AxisSpec axisTrgCounters{10, 0.5, 10.5, ""}; histRegistry.add("hCountersTrg", "", kTH1F, {axisTrgCounters});