From cdd3d6e1fe031d1f1fe221b6e28f90079beef867 Mon Sep 17 00:00:00 2001 From: SCHOTTER Romain <47983209+romainschotter@users.noreply.github.com> Date: Wed, 22 Jul 2026 08:03:38 +0200 Subject: [PATCH 1/4] Add more granularity to the number of selected collisions in StraSelections --- PWGLF/DataModel/LFStrangenessTables.h | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/PWGLF/DataModel/LFStrangenessTables.h b/PWGLF/DataModel/LFStrangenessTables.h index 37fa6facf54..ade90647f11 100644 --- a/PWGLF/DataModel/LFStrangenessTables.h +++ b/PWGLF/DataModel/LFStrangenessTables.h @@ -47,12 +47,32 @@ DECLARE_SOA_TABLE(StraOrigins, "AOD", "STRAORIGIN", //! Table which contains the // for keeping track of the number of selected collisions namespace straselections { -DECLARE_SOA_COLUMN(TotalNbrOfCollisions, totalNbrOfCollisions, int); //! total number of analysed collisions +// Event selection criteria +enum EventSelectionFlags { + kIsTriggerTVX = 0, // FT0 vertex (acceptable FT0C-FT0A time difference) at trigger level + kNoITSROFrameBorder, // bunch crossing is far from ITS RO Frame border + kNoTimeFrameBorder, // bunch crossing is far from Time Frame borders + kIsGoodZvtxAcceptance, // Zvtx within detector acceptance + kNoSameBunchPileup, // reject collisions in case of pileup with another collision in the same foundBC + kIsGoodRCT, // Good RCT + kNsel // counter +}; + +DECLARE_SOA_COLUMN(TotalNbrOfCollisions, totalNbrOfCollisions, int); //! total number of analysed collisions DECLARE_SOA_COLUMN(TotalNbrOfSelCollisions, totalNbrOfSelCollisions, int); //! total number of selected collisions +DECLARE_SOA_COLUMN(TotalIsTriggerTVXCollisions, totalIsTriggerTVXCollisions, int); //! N selected collisions after applying IsTriggerTVX +DECLARE_SOA_COLUMN(TotalNoITSROFBorderCollisions, totalNoITSROFBorderCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF +DECLARE_SOA_COLUMN(TotalNoTFBorderCollisions, totalNoTFBorderCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF +DECLARE_SOA_COLUMN(TotalIsGoodZvtxCollisions, totalIsGoodZvtxCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF, |Zvtx| < X cm +DECLARE_SOA_COLUMN(TotalNoSBPileupCollisions, totalNoSBPileupCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF, |Zvtx| < X cm, NoSameBunchPileup +DECLARE_SOA_COLUMN(TotalIsGoodRCTCollisions, totalIsGoodRCTCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF, |Zvtx| < X cm, NoSameBunchPileup, Good RCT } // namespace straselections DECLARE_SOA_TABLE(StraSelections, "AOD", "STRASELECTIONS", //! keep track of the number of analysed collisions in this DF - o2::soa::Index<>, straselections::TotalNbrOfCollisions, straselections::TotalNbrOfSelCollisions); + o2::soa::Index<>, straselections::TotalNbrOfCollisions, straselections::TotalNbrOfSelCollisions, + straselections::TotalIsTriggerTVXCollisions, straselections::TotalNoITSROFBorderCollisions, + straselections::TotalNoTFBorderCollisions, straselections::TotalIsGoodZvtxCollisions, + straselections::TotalNoSBPileupCollisions, straselections::TotalIsGoodRCTCollisions); namespace stracollision { From 9dd2f4a29ee9b36b6de93eb22baee7c3db0ab8eb Mon Sep 17 00:00:00 2001 From: SCHOTTER Romain <47983209+romainschotter@users.noreply.github.com> Date: Wed, 22 Jul 2026 08:07:05 +0200 Subject: [PATCH 2/4] Update strangederivedbuilder accordingly --- .../Strangeness/strangederivedbuilder.cxx | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx b/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx index 4c90b25caaf..083421f6da8 100644 --- a/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx +++ b/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx @@ -287,32 +287,38 @@ struct strangederivedbuilder { } template - bool isCollisionAccepted(TCollision collision) + bool isCollisionAccepted(TCollision collision, std::array& nSelected) // check whether the collision passes our collision selections { if (requireTriggerTVX && !collision.selection_bit(aod::evsel::kIsTriggerTVX)) { return false; } + nSelected[o2::aod::straselections::kIsTriggerTVX]++; if (rejectITSROFBorder && !collision.selection_bit(o2::aod::evsel::kNoITSROFrameBorder)) { return false; } + nSelected[o2::aod::straselections::kNoITSROFrameBorder]++; if (rejectTFBorder && !collision.selection_bit(o2::aod::evsel::kNoTimeFrameBorder)) { return false; } + nSelected[o2::aod::straselections::kNoTimeFrameBorder]++; if (std::abs(collision.posZ()) > maxZVtxPosition) { return false; } + nSelected[o2::aod::straselections::kIsGoodZvtxAcceptance]++; if (rejectSameBunchPileup && !collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup)) { return false; } + nSelected[o2::aod::straselections::kNoSameBunchPileup]++; if (!cfgApplyRCTrequirement && !rctFlagsChecker(collision)) { return false; } + nSelected[o2::aod::straselections::kIsGoodRCT]++; return true; } @@ -559,6 +565,7 @@ struct strangederivedbuilder { int totalNbrCollisions = collisions.size(); int totalNbrSelectedCollisions = 0; + std::array totalNbrCollisionsPerSelection = {}; // +-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+ for (const auto& collision : collisions) { @@ -639,7 +646,7 @@ struct strangederivedbuilder { for (const auto& track : TrackTable_thisColl) TrackCollIndices[track.globalIndex()] = bc.globalBC(); - if (fillOnlySelectedCollisions && !isCollisionAccepted(collision)) { + if (fillOnlySelectedCollisions && !isCollisionAccepted(collision, totalNbrCollisionsPerSelection)) { continue; } @@ -771,7 +778,13 @@ struct strangederivedbuilder { for (const auto& casc : TraCascades) { products.tracasccollref(TraCascadeCollIndices[casc.globalIndex()]); } - products.straSelection(totalNbrCollisions, totalNbrSelectedCollisions); + products.straSelection(totalNbrCollisions, totalNbrSelectedCollisions, + totalNbrCollisionsPerSelection[o2::aod::straselections::kIsTriggerTVX], + totalNbrCollisionsPerSelection[o2::aod::straselections::kNoITSROFrameBorder], + totalNbrCollisionsPerSelection[o2::aod::straselections::kNoTimeFrameBorder], + totalNbrCollisionsPerSelection[o2::aod::straselections::kIsGoodZvtxAcceptance], + totalNbrCollisionsPerSelection[o2::aod::straselections::kNoSameBunchPileup], + totalNbrCollisionsPerSelection[o2::aod::straselections::kIsGoodRCT]); } // helper function to estimate collision time @@ -781,6 +794,8 @@ struct strangederivedbuilder { std::vector collisionEventTime(collisions.size(), 0.0); std::vector collisionEventTimeErr(collisions.size(), 0.0); std::vector collisionNtracks(collisions.size(), 0); + + std::array totalNbrCollisionsPerSelection = {}; for (const auto& track : tracks) { if (track.hasTOF() && track.collisionId() >= 0) { collisionEventTime[track.collisionId()] += track.tofEvTime(); @@ -797,7 +812,7 @@ struct strangederivedbuilder { collisionEventTime[collision.globalIndex()] = -1e+6; // undefined collisionEventTimeErr[collision.globalIndex()] = -1e-6; // undefined } - if (fillOnlySelectedCollisions && !isCollisionAccepted(collision)) { + if (fillOnlySelectedCollisions && !isCollisionAccepted(collision, totalNbrCollisionsPerSelection)) { continue; } histos.fill(HIST("h2dCollisionTimesVsNTracks"), collisionNtracks[collision.globalIndex()], collisionEventTime[collision.globalIndex()]); From de2b7cc19babcbb0399553a277c737616707eee1 Mon Sep 17 00:00:00 2001 From: SCHOTTER Romain <47983209+romainschotter@users.noreply.github.com> Date: Wed, 22 Jul 2026 08:09:01 +0200 Subject: [PATCH 3/4] Update derivedlambdakzeroanalysis accordingly --- .../derivedlambdakzeroanalysis.cxx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/derivedlambdakzeroanalysis.cxx b/PWGLF/Tasks/Strangeness/derivedlambdakzeroanalysis.cxx index 5f0b744fd3b..ba0c9f93657 100644 --- a/PWGLF/Tasks/Strangeness/derivedlambdakzeroanalysis.cxx +++ b/PWGLF/Tasks/Strangeness/derivedlambdakzeroanalysis.cxx @@ -673,9 +673,15 @@ struct derivedlambdakzeroanalysis { // if (doprocessAnalysedCollisions) { - histos.add("hEventPreSelection", "hEventPreSelection", kTH1D, {{2, -0.5f, +1.5f}}); + histos.add("hEventPreSelection", "hEventPreSelection", kTH1D, {{8, -0.5f, +7.5f}}); histos.get(HIST("hEventPreSelection"))->GetXaxis()->SetBinLabel(1, "All collisions"); - histos.get(HIST("hEventPreSelection"))->GetXaxis()->SetBinLabel(2, "Preselected collisions"); + histos.get(HIST("hEventPreSelection"))->GetXaxis()->SetBinLabel(2, "kIsTriggerTVX"); + histos.get(HIST("hEventPreSelection"))->GetXaxis()->SetBinLabel(3, "kNoITSROFrameBorder"); + histos.get(HIST("hEventPreSelection"))->GetXaxis()->SetBinLabel(4, "kNoTimeFrameBorder"); + histos.get(HIST("hEventPreSelection"))->GetXaxis()->SetBinLabel(5, "posZ cut"); + histos.get(HIST("hEventPreSelection"))->GetXaxis()->SetBinLabel(6, "kNoSameBunchPileup"); + histos.get(HIST("hEventPreSelection"))->GetXaxis()->SetBinLabel(7, "RCT flags"); + histos.get(HIST("hEventPreSelection"))->GetXaxis()->SetBinLabel(8, "Preselected collisions"); } // Event Counters @@ -3166,8 +3172,15 @@ struct derivedlambdakzeroanalysis { void processAnalysedCollisions(aod::StraSelections const& straSelections) { for (auto const& straSelection : straSelections) { + // Event selection criteria histos.get(HIST("hEventPreSelection"))->AddBinContent(1, straSelection.totalNbrOfCollisions() /* all collisions */); - histos.get(HIST("hEventPreSelection"))->AddBinContent(2, straSelection.totalNbrOfSelCollisions() /* preselected collisions */); + histos.get(HIST("hEventPreSelection"))->AddBinContent(2, straSelection.totalIsTriggerTVXCollisions() /* preselected IsTriggerTVX collisions */); + histos.get(HIST("hEventPreSelection"))->AddBinContent(3, straSelection.totalNoITSROFBorderCollisions() /* + preselected NoITSROF collisions */); + histos.get(HIST("hEventPreSelection"))->AddBinContent(4, straSelection.totalNoTFBorderCollisions() /* + preselected NoTF collisions */); + histos.get(HIST("hEventPreSelection"))->AddBinContent(5, straSelection.totalIsGoodZvtxCollisions() /* + preselected |Zvtx| < X cm collisions */); + histos.get(HIST("hEventPreSelection"))->AddBinContent(6, straSelection.totalNoSBPileupCollisions() /* + preselected NoSameBunchPileup collisions */); + histos.get(HIST("hEventPreSelection"))->AddBinContent(7, straSelection.totalIsGoodRCTCollisions() /* + preselected Good RCT collisions */); + histos.get(HIST("hEventPreSelection"))->AddBinContent(8, straSelection.totalNbrOfSelCollisions() /* total number of preselected collisions */); } } From f12af4a25c0d383ad4a93aa1c3ce7c82e20b4b6c Mon Sep 17 00:00:00 2001 From: ALICE Builder Date: Wed, 22 Jul 2026 08:11:38 +0200 Subject: [PATCH 4/4] Please consider the following formatting changes to #17159 (#17160) --- PWGLF/DataModel/LFStrangenessTables.h | 32 +++++++++---------- .../Strangeness/strangederivedbuilder.cxx | 14 ++++---- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/PWGLF/DataModel/LFStrangenessTables.h b/PWGLF/DataModel/LFStrangenessTables.h index ade90647f11..057ff318f03 100644 --- a/PWGLF/DataModel/LFStrangenessTables.h +++ b/PWGLF/DataModel/LFStrangenessTables.h @@ -49,30 +49,30 @@ namespace straselections { // Event selection criteria enum EventSelectionFlags { - kIsTriggerTVX = 0, // FT0 vertex (acceptable FT0C-FT0A time difference) at trigger level - kNoITSROFrameBorder, // bunch crossing is far from ITS RO Frame border - kNoTimeFrameBorder, // bunch crossing is far from Time Frame borders - kIsGoodZvtxAcceptance, // Zvtx within detector acceptance - kNoSameBunchPileup, // reject collisions in case of pileup with another collision in the same foundBC - kIsGoodRCT, // Good RCT - kNsel // counter + kIsTriggerTVX = 0, // FT0 vertex (acceptable FT0C-FT0A time difference) at trigger level + kNoITSROFrameBorder, // bunch crossing is far from ITS RO Frame border + kNoTimeFrameBorder, // bunch crossing is far from Time Frame borders + kIsGoodZvtxAcceptance, // Zvtx within detector acceptance + kNoSameBunchPileup, // reject collisions in case of pileup with another collision in the same foundBC + kIsGoodRCT, // Good RCT + kNsel // counter }; -DECLARE_SOA_COLUMN(TotalNbrOfCollisions, totalNbrOfCollisions, int); //! total number of analysed collisions +DECLARE_SOA_COLUMN(TotalNbrOfCollisions, totalNbrOfCollisions, int); //! total number of analysed collisions DECLARE_SOA_COLUMN(TotalNbrOfSelCollisions, totalNbrOfSelCollisions, int); //! total number of selected collisions -DECLARE_SOA_COLUMN(TotalIsTriggerTVXCollisions, totalIsTriggerTVXCollisions, int); //! N selected collisions after applying IsTriggerTVX +DECLARE_SOA_COLUMN(TotalIsTriggerTVXCollisions, totalIsTriggerTVXCollisions, int); //! N selected collisions after applying IsTriggerTVX DECLARE_SOA_COLUMN(TotalNoITSROFBorderCollisions, totalNoITSROFBorderCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF -DECLARE_SOA_COLUMN(TotalNoTFBorderCollisions, totalNoTFBorderCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF -DECLARE_SOA_COLUMN(TotalIsGoodZvtxCollisions, totalIsGoodZvtxCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF, |Zvtx| < X cm -DECLARE_SOA_COLUMN(TotalNoSBPileupCollisions, totalNoSBPileupCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF, |Zvtx| < X cm, NoSameBunchPileup -DECLARE_SOA_COLUMN(TotalIsGoodRCTCollisions, totalIsGoodRCTCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF, |Zvtx| < X cm, NoSameBunchPileup, Good RCT +DECLARE_SOA_COLUMN(TotalNoTFBorderCollisions, totalNoTFBorderCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF +DECLARE_SOA_COLUMN(TotalIsGoodZvtxCollisions, totalIsGoodZvtxCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF, |Zvtx| < X cm +DECLARE_SOA_COLUMN(TotalNoSBPileupCollisions, totalNoSBPileupCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF, |Zvtx| < X cm, NoSameBunchPileup +DECLARE_SOA_COLUMN(TotalIsGoodRCTCollisions, totalIsGoodRCTCollisions, int); //! N selected collisions after applying IsTriggerTVX, NoITSROF, NoTF, |Zvtx| < X cm, NoSameBunchPileup, Good RCT } // namespace straselections DECLARE_SOA_TABLE(StraSelections, "AOD", "STRASELECTIONS", //! keep track of the number of analysed collisions in this DF o2::soa::Index<>, straselections::TotalNbrOfCollisions, straselections::TotalNbrOfSelCollisions, - straselections::TotalIsTriggerTVXCollisions, straselections::TotalNoITSROFBorderCollisions, - straselections::TotalNoTFBorderCollisions, straselections::TotalIsGoodZvtxCollisions, - straselections::TotalNoSBPileupCollisions, straselections::TotalIsGoodRCTCollisions); + straselections::TotalIsTriggerTVXCollisions, straselections::TotalNoITSROFBorderCollisions, + straselections::TotalNoTFBorderCollisions, straselections::TotalIsGoodZvtxCollisions, + straselections::TotalNoSBPileupCollisions, straselections::TotalIsGoodRCTCollisions); namespace stracollision { diff --git a/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx b/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx index 083421f6da8..b1c529c2880 100644 --- a/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx +++ b/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx @@ -778,13 +778,13 @@ struct strangederivedbuilder { for (const auto& casc : TraCascades) { products.tracasccollref(TraCascadeCollIndices[casc.globalIndex()]); } - products.straSelection(totalNbrCollisions, totalNbrSelectedCollisions, - totalNbrCollisionsPerSelection[o2::aod::straselections::kIsTriggerTVX], - totalNbrCollisionsPerSelection[o2::aod::straselections::kNoITSROFrameBorder], - totalNbrCollisionsPerSelection[o2::aod::straselections::kNoTimeFrameBorder], - totalNbrCollisionsPerSelection[o2::aod::straselections::kIsGoodZvtxAcceptance], - totalNbrCollisionsPerSelection[o2::aod::straselections::kNoSameBunchPileup], - totalNbrCollisionsPerSelection[o2::aod::straselections::kIsGoodRCT]); + products.straSelection(totalNbrCollisions, totalNbrSelectedCollisions, + totalNbrCollisionsPerSelection[o2::aod::straselections::kIsTriggerTVX], + totalNbrCollisionsPerSelection[o2::aod::straselections::kNoITSROFrameBorder], + totalNbrCollisionsPerSelection[o2::aod::straselections::kNoTimeFrameBorder], + totalNbrCollisionsPerSelection[o2::aod::straselections::kIsGoodZvtxAcceptance], + totalNbrCollisionsPerSelection[o2::aod::straselections::kNoSameBunchPileup], + totalNbrCollisionsPerSelection[o2::aod::straselections::kIsGoodRCT]); } // helper function to estimate collision time