From 761d334259470368f0de6ae5004d6eb30094a42f Mon Sep 17 00:00:00 2001 From: romainschotter Date: Wed, 16 Apr 2025 22:07:47 +0200 Subject: [PATCH 1/6] Add RCTFlagsChecker in strangeness data model --- PWGLF/DataModel/LFStrangenessTables.h | 39 ++++++++++++++++++- .../Strangeness/strangederivedbuilder.cxx | 20 +++++++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/PWGLF/DataModel/LFStrangenessTables.h b/PWGLF/DataModel/LFStrangenessTables.h index b89699cbd33..7e7cdc2207a 100644 --- a/PWGLF/DataModel/LFStrangenessTables.h +++ b/PWGLF/DataModel/LFStrangenessTables.h @@ -226,6 +226,43 @@ DECLARE_SOA_TABLE_VERSIONED(StraEvSels_004, "AOD", "STRAEVSELS", 4, //! // stracollision::EnergyCommonZNC, stracollision::IsUPC); +DECLARE_SOA_TABLE_VERSIONED(StraEvSels_005, "AOD", "STRAEVSELS", 5, //! debug information + evsel::Sel8, evsel::Selection, //! event selection: sel8 + mult::MultFT0A, mult::MultFT0C, mult::MultFV0A, // FIT detectors + mult::MultFDDA, mult::MultFDDC, + mult::MultNTracksPVeta1, // track multiplicities with eta cut for INEL>0 + mult::MultPVTotalContributors, // number of PV contribs total + mult::MultNTracksGlobal, // global track multiplicities + mult::MultNTracksITSTPC, // track multiplicities, PV contribs, no eta cut + mult::MultAllTracksTPCOnly, // TPConly track multiplicities, all, no eta cut + mult::MultAllTracksITSTPC, // ITSTPC track multiplicities, all, no eta cut + mult::MultZNA, mult::MultZNC, mult::MultZEM1, // ZDC signals + mult::MultZEM2, mult::MultZPA, mult::MultZPC, + evsel::NumTracksInTimeRange, // add occupancy in specified time interval by a number of tracks from nearby collisions + evsel::SumAmpFT0CInTimeRange, // add occupancy in specified time interval by a sum of FT0C amplitudes from nearby collisions + udcollision::GapSide, // UPC info: 0 for side A, 1 for side C, 2 for both sides, 3 neither A or C, 4 not enough or too many pv contributors + udcollision::TotalFT0AmplitudeA, // UPC info: re-assigned FT0-A amplitude, in case of SG event, from the most active bc + udcollision::TotalFT0AmplitudeC, // UPC info: re-assigned FT0-C amplitude, in case of SG event, from the most active bc + udcollision::TotalFV0AmplitudeA, // UPC info: re-assigned FV0-A amplitude, in case of SG event, from the most active bc + udcollision::TotalFDDAmplitudeA, // UPC info: re-assigned FDD-A amplitude, in case of SG event, from the most active bc + udcollision::TotalFDDAmplitudeC, // UPC info: re-assigned FDD-C amplitude, in case of SG event, from the most active bc + udzdc::EnergyCommonZNA, // UPC info: re-assigned ZN-A amplitude, in case of SG event, from the most active bc + udzdc::EnergyCommonZNC, // UPC info: re-assigned ZN-C amplitude, in case of SG event, from the most active bc + + collision::Flags, // Contains Vertex::Flags, with most notably the UPCMode to know whether the vertex has been found using UPC settings + evsel::Alias, // trigger aliases (e.g. kTVXinTRD for v2) + evsel::Rct, // Bitmask of RCT flags + + // Dynamic columns for manipulating information + // stracollision::TotalFV0AmplitudeA, + // stracollision::TotalFT0AmplitudeA, + // stracollision::TotalFT0AmplitudeC, + // stracollision::TotalFDDAmplitudeA, + // stracollision::TotalFDDAmplitudeC, + // stracollision::EnergyCommonZNA, + // stracollision::EnergyCommonZNC, + stracollision::IsUPC); + DECLARE_SOA_TABLE(StraEvSelsRun2, "AOD", "STRAEVSELSRUN2", //! debug information evsel::Sel8, evsel::Sel7, evsel::Selection, //! event selection: sel8 mult::MultFT0A, mult::MultFT0C, // FIT detectors @@ -266,7 +303,7 @@ DECLARE_SOA_TABLE_VERSIONED(StraStamps_001, "AOD", "STRASTAMPS", 1, //! informat using StraRawCents = StraRawCents_004; using StraCents = StraCents_001; -using StraEvSels = StraEvSels_004; +using StraEvSels = StraEvSels_005; using StraStamps = StraStamps_001; using StraCollision = StraCollisions::iterator; using StraCent = StraCents_001::iterator; diff --git a/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx b/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx index 297a6794a3b..82d983a3a02 100644 --- a/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx +++ b/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx @@ -38,6 +38,7 @@ #include "PWGLF/DataModel/LFParticleIdentification.h" #include "Common/Core/TrackSelection.h" #include "Common/DataModel/TrackSelectionTables.h" +#include "Common/DataModel/EventSelection.h" #include "DetectorsBase/Propagator.h" #include "DetectorsBase/GeometryManager.h" #include "DataFormatsParameters/GRPObject.h" @@ -57,6 +58,8 @@ using namespace o2::framework; using namespace o2::framework::expressions; using std::array; +using namespace o2::aod::rctsel; + using TracksWithExtra = soa::Join; using TracksCompleteIUMC = soa::Join; using FullTracksExtIUTOF = soa::Join; @@ -198,6 +201,15 @@ struct strangederivedbuilder { ConfigurableAxis axisZNC{"ZNCamplitude", {100, 0.0f, 250.0f}, "ZNCamplitude"}; } axisDetectors; + struct : ConfigurableGroup { + std::string prefix = "rctConfigurations"; // JSON group name + Configurable cfgRCTLabel{"cfgRCTLabel", "", "Which detector condition requirements? (CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo)"}; + Configurable cfgCheckZDC{"cfgCheckZDC", false, "Include ZDC flags in the bit selection (for Pb-Pb only)"}; + Configurable cfgTreatLimitedAcceptanceAsBad{"cfgTreatLimitedAcceptanceAsBad", false, "reject all events where the detectors relevant for the specified Runlist are flagged as LimitedAcceptance"}; + } rctConfigurations; + + RCTFlagsChecker rctFlagsChecker{rctConfigurations.cfgRCTLabel.value}; + // For manual sliceBy Preslice V0perCollision = o2::aod::v0data::collisionId; Preslice CascperCollision = o2::aod::cascdata::collisionId; @@ -361,6 +373,8 @@ struct strangederivedbuilder { } LOGF(info, "=================================================================="); + rctFlagsChecker.init(rctConfigurations.cfgRCTLabel.value, rctConfigurations.cfgCheckZDC, rctConfigurations.cfgTreatLimitedAcceptanceAsBad); + // setup map for fast checking if enabled static_for<0, nSpecies - 1>([&](auto i) { constexpr int index = i.value; @@ -421,6 +435,9 @@ struct strangederivedbuilder { // +-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+ for (const auto& collision : collisions) { + if (!rctConfigurations.cfgRCTLabel.value.empty() && !rctFlagsChecker(collision)) + continue; + const uint64_t collIdx = collision.globalIndex(); auto V0Table_thisColl = V0s.sliceBy(V0perCollision, collIdx); @@ -516,7 +533,8 @@ struct strangederivedbuilder { energyCommonZNA, energyCommonZNC, // Collision flags collision.flags(), - collision.alias_raw()); + collision.alias_raw(), + collision.rct_raw()); } else { // We are in Run 2 strangeCentsRun2(collision.centRun2V0M(), collision.centRun2V0A(), collision.centRun2SPDTracklets(), collision.centRun2SPDClusters()); From 70aba7b01874946d1aabfd149b32afe57f833308 Mon Sep 17 00:00:00 2001 From: romainschotter Date: Wed, 16 Apr 2025 22:08:17 +0200 Subject: [PATCH 2/6] Add converters from StraEvSels_004 to StraEvSels_005 --- .../Strangeness/Converters/CMakeLists.txt | 5 ++ .../Converters/straevselsconverter5.cxx | 67 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 PWGLF/TableProducer/Strangeness/Converters/straevselsconverter5.cxx diff --git a/PWGLF/TableProducer/Strangeness/Converters/CMakeLists.txt b/PWGLF/TableProducer/Strangeness/Converters/CMakeLists.txt index 146a1142982..3ba4fdb55b7 100644 --- a/PWGLF/TableProducer/Strangeness/Converters/CMakeLists.txt +++ b/PWGLF/TableProducer/Strangeness/Converters/CMakeLists.txt @@ -54,6 +54,11 @@ o2physics_add_dpl_workflow(straevselsconverter4 PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::ITStracking COMPONENT_NAME Analysis) +o2physics_add_dpl_workflow(straevselsconverter5 + SOURCES straevselsconverter5.cxx + PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::ITStracking + COMPONENT_NAME Analysis) + o2physics_add_dpl_workflow(straevselsconverter2rawcents SOURCES straevselsconverter2rawcents.cxx PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore diff --git a/PWGLF/TableProducer/Strangeness/Converters/straevselsconverter5.cxx b/PWGLF/TableProducer/Strangeness/Converters/straevselsconverter5.cxx new file mode 100644 index 00000000000..ab2962e36be --- /dev/null +++ b/PWGLF/TableProducer/Strangeness/Converters/straevselsconverter5.cxx @@ -0,0 +1,67 @@ +// Copyright 2019-2020 CERN and copyright holders of ALICE O2. +// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders. +// All rights not expressly granted are reserved. +// +// This software is distributed under the terms of the GNU General Public +// License v3 (GPL Version 3), copied verbatim in the file "COPYING". +// +// In applying this license CERN does not waive the privileges and immunities +// granted to it by virtue of its status as an Intergovernmental Organization +// or submit itself to any jurisdiction. +#include "Framework/runDataProcessing.h" +#include "Framework/AnalysisTask.h" +#include "Framework/AnalysisDataModel.h" +#include "ITStracking/Vertexer.h" +#include "PWGLF/DataModel/LFStrangenessTables.h" + +using namespace o2; +using namespace o2::framework; + +// Converts Stra Event selections from 004 to 005 +struct straevselsconverter5 { + Produces straEvSels_005; + + void process(aod::StraEvSels_004 const& straEvSels_004) + { + for (auto& values : straEvSels_004) { + straEvSels_005(values.sel8(), + values.selection_raw(), + values.multFT0A(), + values.multFT0C(), + values.multFT0A(), + 0 /*dummy FDDA value*/, + 0 /*dummy FDDC value*/, + values.multNTracksPVeta1(), + values.multPVTotalContributors(), + values.multNTracksGlobal(), + values.multNTracksITSTPC(), + values.multAllTracksTPCOnly(), + values.multAllTracksITSTPC(), + values.multZNA(), + values.multZNC(), + values.multZEM1(), + values.multZEM2(), + values.multZPA(), + values.multZPC(), + values.trackOccupancyInTimeRange(), + 0 /*dummy occupancy value*/, + values.gapSide(), + values.totalFT0AmplitudeA(), + values.totalFT0AmplitudeC(), + values.totalFV0AmplitudeA(), + values.totalFDDAmplitudeA(), + values.totalFDDAmplitudeC(), + values.energyCommonZNA(), + values.energyCommonZNC(), + values.flags(), + 0 /*dummy Alias value*/, + 0 /*dummy Rct value*/); + } + } +}; + +WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) +{ + return WorkflowSpec{ + adaptAnalysisTask(cfgc)}; +} From 2a2661ea314c16f489b918923fdf500c38cbf826 Mon Sep 17 00:00:00 2001 From: romainschotter Date: Wed, 16 Apr 2025 22:08:58 +0200 Subject: [PATCH 3/6] Add selection on RCT flags at derived data production level and analysis task level --- .../Strangeness/strangenessbuilder.cxx | 47 +++++++++++++++++++ .../derivedlambdakzeroanalysis.cxx | 24 +++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx b/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx index 74c36988ce1..74fbf0a0c65 100644 --- a/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx +++ b/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx @@ -39,6 +39,7 @@ #include "Framework/AnalysisTask.h" #include "Framework/AnalysisDataModel.h" #include "Common/DataModel/PIDResponse.h" +#include "Common/DataModel/EventSelection.h" #include "TableHelper.h" #include "PWGLF/DataModel/LFStrangenessTables.h" #include "PWGLF/DataModel/LFStrangenessPIDTables.h" @@ -51,6 +52,8 @@ using namespace o2; using namespace o2::framework; +using namespace o2::aod::rctsel; + static constexpr int nParameters = 1; static const std::vector tableNames{ "V0Indices", //.0 (standard analysis: V0Cores) @@ -345,6 +348,15 @@ struct StrangenessBuilder { Configurable mc_findableDetachedCascade{"mc_findableDetachedCascade", false, "if true, generate findable cascades that have collisionId -1. Caution advised."}; } cascadeBuilderOpts; + struct : ConfigurableGroup { + std::string prefix = "rctConfigurations"; // JSON group name + Configurable cfgRCTLabel{"cfgRCTLabel", "", "Which detector condition requirements? (CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo)"}; + Configurable cfgCheckZDC{"cfgCheckZDC", false, "Include ZDC flags in the bit selection (for Pb-Pb only)"}; + Configurable cfgTreatLimitedAcceptanceAsBad{"cfgTreatLimitedAcceptanceAsBad", false, "reject all events where the detectors relevant for the specified Runlist are flagged as LimitedAcceptance"}; + } rctConfigurations; + + RCTFlagsChecker rctFlagsChecker{rctConfigurations.cfgRCTLabel.value}; + o2::ccdb::CcdbApi ccdbApi; Service ccdb; @@ -568,6 +580,8 @@ struct StrangenessBuilder { ccdb->setLocalObjectValidityChecking(); ccdb->setFatalWhenNull(false); + rctFlagsChecker.init(rctConfigurations.cfgRCTLabel.value, rctConfigurations.cfgCheckZDC, rctConfigurations.cfgTreatLimitedAcceptanceAsBad); + // set V0 parameters in the helper straHelper.v0selections.minCrossedRows = v0BuilderOpts.minCrossedRows; straHelper.v0selections.dcanegtopv = v0BuilderOpts.dcanegtopv; @@ -587,6 +601,16 @@ struct StrangenessBuilder { straHelper.cascadeselections.maxDaughterEta = cascadeBuilderOpts.maxDaughterEta; } + // for sorting + template + bool isEventAccepted(const TCollision &collision) + { + if (!rctConfigurations.cfgRCTLabel.value.empty() && !rctFlagsChecker(collision)) + return false; + + return true; + } + // for sorting template std::vector sort_indices(const std::vector& v, bool doSorting = false) @@ -742,6 +766,9 @@ struct StrangenessBuilder { // single loop over double loop at a small cost in memory for extra array for (const auto& collision : collisions) { + if (!isEventAccepted(collision)) { + continue; + } if (collision.has_mcCollision()) { if (collision.numContrib() > bestCollisionNContribsArray[collision.mcCollisionId()]) { bestCollisionArray[collision.mcCollisionId()] = collision.globalIndex(); @@ -795,6 +822,10 @@ struct StrangenessBuilder { auto negTrackPar = getTrackParCov(nTrack); auto const& collision = collisions.rawIteratorAt(v0tableGrouped[iV0].collisionIds[ic]); + if (!isEventAccepted(collision)) { + continue; + } + // handle TPC-only tracks properly (photon conversions) if (v0BuilderOpts.moveTPCOnlyTracks) { if (isPosTPCOnly) { @@ -1260,6 +1291,10 @@ struct StrangenessBuilder { pvX = collision.posX(); pvY = collision.posY(); pvZ = collision.posZ(); + + if (!isEventAccepted(collision)) { + continue; + } } auto const& posTrack = tracks.rawIteratorAt(v0.posTrackId); auto const& negTrack = tracks.rawIteratorAt(v0.negTrackId); @@ -1722,6 +1757,10 @@ struct StrangenessBuilder { pvX = collision.posX(); pvY = collision.posY(); pvZ = collision.posZ(); + + if (!isEventAccepted(collision)) { + continue; + } } auto const& posTrack = tracks.rawIteratorAt(cascade.posTrackId); auto const& negTrack = tracks.rawIteratorAt(cascade.negTrackId); @@ -2060,6 +2099,10 @@ struct StrangenessBuilder { pvX = collision.posX(); pvY = collision.posY(); pvZ = collision.posZ(); + + if (!isEventAccepted(collision)) { + continue; + } } auto const& posTrack = tracks.rawIteratorAt(cascade.posTrackId); auto const& negTrack = tracks.rawIteratorAt(cascade.negTrackId); @@ -2157,6 +2200,10 @@ struct StrangenessBuilder { pvX = collision.posX(); pvY = collision.posY(); pvZ = collision.posZ(); + + if (!isEventAccepted(collision)) { + continue; + } } auto const& cascade = cascadeTrack.cascade(); auto const& v0 = cascade.v0(); diff --git a/PWGLF/Tasks/Strangeness/derivedlambdakzeroanalysis.cxx b/PWGLF/Tasks/Strangeness/derivedlambdakzeroanalysis.cxx index 80c048e1214..55e618ac11a 100644 --- a/PWGLF/Tasks/Strangeness/derivedlambdakzeroanalysis.cxx +++ b/PWGLF/Tasks/Strangeness/derivedlambdakzeroanalysis.cxx @@ -52,6 +52,7 @@ #include "CommonConstants/PhysicsConstants.h" #include "Common/Core/trackUtilities.h" #include "Common/CCDB/ctpRateFetcher.h" +#include "Common/DataModel/EventSelection.h" #include "PWGLF/DataModel/LFStrangenessTables.h" #include "PWGLF/DataModel/LFStrangenessMLTables.h" #include "PWGLF/DataModel/LFStrangenessPIDTables.h" @@ -70,6 +71,8 @@ using namespace o2::framework; using namespace o2::framework::expressions; using std::array; +using namespace o2::aod::rctsel; + using DauTracks = soa::Join; using DauMCTracks = soa::Join; using V0Candidates = soa::Join; @@ -202,6 +205,15 @@ struct derivedlambdakzeroanalysis { Configurable doTreatPiToMuon{"doTreatPiToMuon", false, "Take pi decay into muon into account in MC"}; Configurable doCollisionAssociationQA{"doCollisionAssociationQA", true, "check collision association"}; + struct : ConfigurableGroup { + std::string prefix = "rctConfigurations"; // JSON group name + Configurable cfgRCTLabel{"cfgRCTLabel", "", "Which detector condition requirements? (CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo)"}; + Configurable cfgCheckZDC{"cfgCheckZDC", false, "Include ZDC flags in the bit selection (for Pb-Pb only)"}; + Configurable cfgTreatLimitedAcceptanceAsBad{"cfgTreatLimitedAcceptanceAsBad", false, "reject all events where the detectors relevant for the specified Runlist are flagged as LimitedAcceptance"}; + } rctConfigurations; + + RCTFlagsChecker rctFlagsChecker{rctConfigurations.cfgRCTLabel.value}; + // Machine learning evaluation for pre-selection and corresponding information generation o2::ml::OnnxModel mlCustomModelK0Short; o2::ml::OnnxModel mlCustomModelLambda; @@ -538,8 +550,11 @@ struct derivedlambdakzeroanalysis { secondaryMaskSelectionLambda = maskTopological | maskTrackProperties | maskLambdaSpecific; secondaryMaskSelectionAntiLambda = maskTopological | maskTrackProperties | maskAntiLambdaSpecific; + // Initialise the RCTFlagsChecker + rctFlagsChecker.init(rctConfigurations.cfgRCTLabel.value, rctConfigurations.cfgCheckZDC, rctConfigurations.cfgTreatLimitedAcceptanceAsBad); + // Event Counters - histos.add("hEventSelection", "hEventSelection", kTH1F, {{20, -0.5f, +19.5f}}); + histos.add("hEventSelection", "hEventSelection", kTH1F, {{21, -0.5f, +20.5f}}); if (isRun3) { histos.get(HIST("hEventSelection"))->GetXaxis()->SetBinLabel(1, "All collisions"); histos.get(HIST("hEventSelection"))->GetXaxis()->SetBinLabel(2, "sel8 cut"); @@ -566,6 +581,7 @@ struct derivedlambdakzeroanalysis { } histos.get(HIST("hEventSelection"))->GetXaxis()->SetBinLabel(19, "Below min IR"); histos.get(HIST("hEventSelection"))->GetXaxis()->SetBinLabel(20, "Above max IR"); + histos.get(HIST("hEventSelection"))->GetXaxis()->SetBinLabel(21, "RCT flags"); } else { histos.get(HIST("hEventSelection"))->GetXaxis()->SetBinLabel(1, "All collisions"); histos.get(HIST("hEventSelection"))->GetXaxis()->SetBinLabel(2, "sel8 cut"); @@ -1838,6 +1854,12 @@ struct derivedlambdakzeroanalysis { if (fillHists) histos.fill(HIST("hEventSelection"), 19 /* Above max IR */); + if (!rctConfigurations.cfgRCTLabel.value.empty() && !rctFlagsChecker(collision)) { + return false; + } + if (fillHists) + histos.fill(HIST("hEventSelection"), 20 /* Pass CBT condition */); + } else { // we are in Run 2 if (eventSelections.requireSel8 && !collision.sel8()) { return false; From 00364af249691abdae1048ca84fa24c768558f7c Mon Sep 17 00:00:00 2001 From: romainschotter Date: Wed, 16 Apr 2025 22:13:13 +0200 Subject: [PATCH 4/6] Please consider the following formatting changes --- PWGLF/DataModel/LFStrangenessTables.h | 70 +++++++++++++-------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/PWGLF/DataModel/LFStrangenessTables.h b/PWGLF/DataModel/LFStrangenessTables.h index 7e7cdc2207a..6d414cb325b 100644 --- a/PWGLF/DataModel/LFStrangenessTables.h +++ b/PWGLF/DataModel/LFStrangenessTables.h @@ -227,41 +227,41 @@ DECLARE_SOA_TABLE_VERSIONED(StraEvSels_004, "AOD", "STRAEVSELS", 4, //! stracollision::IsUPC); DECLARE_SOA_TABLE_VERSIONED(StraEvSels_005, "AOD", "STRAEVSELS", 5, //! debug information - evsel::Sel8, evsel::Selection, //! event selection: sel8 - mult::MultFT0A, mult::MultFT0C, mult::MultFV0A, // FIT detectors - mult::MultFDDA, mult::MultFDDC, - mult::MultNTracksPVeta1, // track multiplicities with eta cut for INEL>0 - mult::MultPVTotalContributors, // number of PV contribs total - mult::MultNTracksGlobal, // global track multiplicities - mult::MultNTracksITSTPC, // track multiplicities, PV contribs, no eta cut - mult::MultAllTracksTPCOnly, // TPConly track multiplicities, all, no eta cut - mult::MultAllTracksITSTPC, // ITSTPC track multiplicities, all, no eta cut - mult::MultZNA, mult::MultZNC, mult::MultZEM1, // ZDC signals - mult::MultZEM2, mult::MultZPA, mult::MultZPC, - evsel::NumTracksInTimeRange, // add occupancy in specified time interval by a number of tracks from nearby collisions - evsel::SumAmpFT0CInTimeRange, // add occupancy in specified time interval by a sum of FT0C amplitudes from nearby collisions - udcollision::GapSide, // UPC info: 0 for side A, 1 for side C, 2 for both sides, 3 neither A or C, 4 not enough or too many pv contributors - udcollision::TotalFT0AmplitudeA, // UPC info: re-assigned FT0-A amplitude, in case of SG event, from the most active bc - udcollision::TotalFT0AmplitudeC, // UPC info: re-assigned FT0-C amplitude, in case of SG event, from the most active bc - udcollision::TotalFV0AmplitudeA, // UPC info: re-assigned FV0-A amplitude, in case of SG event, from the most active bc - udcollision::TotalFDDAmplitudeA, // UPC info: re-assigned FDD-A amplitude, in case of SG event, from the most active bc - udcollision::TotalFDDAmplitudeC, // UPC info: re-assigned FDD-C amplitude, in case of SG event, from the most active bc - udzdc::EnergyCommonZNA, // UPC info: re-assigned ZN-A amplitude, in case of SG event, from the most active bc - udzdc::EnergyCommonZNC, // UPC info: re-assigned ZN-C amplitude, in case of SG event, from the most active bc - - collision::Flags, // Contains Vertex::Flags, with most notably the UPCMode to know whether the vertex has been found using UPC settings - evsel::Alias, // trigger aliases (e.g. kTVXinTRD for v2) - evsel::Rct, // Bitmask of RCT flags - - // Dynamic columns for manipulating information - // stracollision::TotalFV0AmplitudeA, - // stracollision::TotalFT0AmplitudeA, - // stracollision::TotalFT0AmplitudeC, - // stracollision::TotalFDDAmplitudeA, - // stracollision::TotalFDDAmplitudeC, - // stracollision::EnergyCommonZNA, - // stracollision::EnergyCommonZNC, - stracollision::IsUPC); + evsel::Sel8, evsel::Selection, //! event selection: sel8 + mult::MultFT0A, mult::MultFT0C, mult::MultFV0A, // FIT detectors + mult::MultFDDA, mult::MultFDDC, + mult::MultNTracksPVeta1, // track multiplicities with eta cut for INEL>0 + mult::MultPVTotalContributors, // number of PV contribs total + mult::MultNTracksGlobal, // global track multiplicities + mult::MultNTracksITSTPC, // track multiplicities, PV contribs, no eta cut + mult::MultAllTracksTPCOnly, // TPConly track multiplicities, all, no eta cut + mult::MultAllTracksITSTPC, // ITSTPC track multiplicities, all, no eta cut + mult::MultZNA, mult::MultZNC, mult::MultZEM1, // ZDC signals + mult::MultZEM2, mult::MultZPA, mult::MultZPC, + evsel::NumTracksInTimeRange, // add occupancy in specified time interval by a number of tracks from nearby collisions + evsel::SumAmpFT0CInTimeRange, // add occupancy in specified time interval by a sum of FT0C amplitudes from nearby collisions + udcollision::GapSide, // UPC info: 0 for side A, 1 for side C, 2 for both sides, 3 neither A or C, 4 not enough or too many pv contributors + udcollision::TotalFT0AmplitudeA, // UPC info: re-assigned FT0-A amplitude, in case of SG event, from the most active bc + udcollision::TotalFT0AmplitudeC, // UPC info: re-assigned FT0-C amplitude, in case of SG event, from the most active bc + udcollision::TotalFV0AmplitudeA, // UPC info: re-assigned FV0-A amplitude, in case of SG event, from the most active bc + udcollision::TotalFDDAmplitudeA, // UPC info: re-assigned FDD-A amplitude, in case of SG event, from the most active bc + udcollision::TotalFDDAmplitudeC, // UPC info: re-assigned FDD-C amplitude, in case of SG event, from the most active bc + udzdc::EnergyCommonZNA, // UPC info: re-assigned ZN-A amplitude, in case of SG event, from the most active bc + udzdc::EnergyCommonZNC, // UPC info: re-assigned ZN-C amplitude, in case of SG event, from the most active bc + + collision::Flags, // Contains Vertex::Flags, with most notably the UPCMode to know whether the vertex has been found using UPC settings + evsel::Alias, // trigger aliases (e.g. kTVXinTRD for v2) + evsel::Rct, // Bitmask of RCT flags + + // Dynamic columns for manipulating information + // stracollision::TotalFV0AmplitudeA, + // stracollision::TotalFT0AmplitudeA, + // stracollision::TotalFT0AmplitudeC, + // stracollision::TotalFDDAmplitudeA, + // stracollision::TotalFDDAmplitudeC, + // stracollision::EnergyCommonZNA, + // stracollision::EnergyCommonZNC, + stracollision::IsUPC); DECLARE_SOA_TABLE(StraEvSelsRun2, "AOD", "STRAEVSELSRUN2", //! debug information evsel::Sel8, evsel::Sel7, evsel::Selection, //! event selection: sel8 From f0557ae89eec31bc97b81cbe0c2de5382a4c9659 Mon Sep 17 00:00:00 2001 From: romainschotter Date: Wed, 16 Apr 2025 22:15:19 +0200 Subject: [PATCH 5/6] Please consider the following formatting changes --- PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx b/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx index 74fbf0a0c65..0800c0fd1e3 100644 --- a/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx +++ b/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx @@ -603,7 +603,7 @@ struct StrangenessBuilder { // for sorting template - bool isEventAccepted(const TCollision &collision) + bool isEventAccepted(const TCollision& collision) { if (!rctConfigurations.cfgRCTLabel.value.empty() && !rctFlagsChecker(collision)) return false; From 76fd022769c8091ab6922b76510380faa4a4bd4e Mon Sep 17 00:00:00 2001 From: romainschotter Date: Thu, 17 Apr 2025 11:15:57 +0200 Subject: [PATCH 6/6] Remove RCT flag selection in the builders --- .../Strangeness/strangederivedbuilder.cxx | 17 ------- .../Strangeness/strangenessbuilder.cxx | 47 ------------------- 2 files changed, 64 deletions(-) diff --git a/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx b/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx index 82d983a3a02..09216aa166d 100644 --- a/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx +++ b/PWGLF/TableProducer/Strangeness/strangederivedbuilder.cxx @@ -38,7 +38,6 @@ #include "PWGLF/DataModel/LFParticleIdentification.h" #include "Common/Core/TrackSelection.h" #include "Common/DataModel/TrackSelectionTables.h" -#include "Common/DataModel/EventSelection.h" #include "DetectorsBase/Propagator.h" #include "DetectorsBase/GeometryManager.h" #include "DataFormatsParameters/GRPObject.h" @@ -58,8 +57,6 @@ using namespace o2::framework; using namespace o2::framework::expressions; using std::array; -using namespace o2::aod::rctsel; - using TracksWithExtra = soa::Join; using TracksCompleteIUMC = soa::Join; using FullTracksExtIUTOF = soa::Join; @@ -201,15 +198,6 @@ struct strangederivedbuilder { ConfigurableAxis axisZNC{"ZNCamplitude", {100, 0.0f, 250.0f}, "ZNCamplitude"}; } axisDetectors; - struct : ConfigurableGroup { - std::string prefix = "rctConfigurations"; // JSON group name - Configurable cfgRCTLabel{"cfgRCTLabel", "", "Which detector condition requirements? (CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo)"}; - Configurable cfgCheckZDC{"cfgCheckZDC", false, "Include ZDC flags in the bit selection (for Pb-Pb only)"}; - Configurable cfgTreatLimitedAcceptanceAsBad{"cfgTreatLimitedAcceptanceAsBad", false, "reject all events where the detectors relevant for the specified Runlist are flagged as LimitedAcceptance"}; - } rctConfigurations; - - RCTFlagsChecker rctFlagsChecker{rctConfigurations.cfgRCTLabel.value}; - // For manual sliceBy Preslice V0perCollision = o2::aod::v0data::collisionId; Preslice CascperCollision = o2::aod::cascdata::collisionId; @@ -373,8 +361,6 @@ struct strangederivedbuilder { } LOGF(info, "=================================================================="); - rctFlagsChecker.init(rctConfigurations.cfgRCTLabel.value, rctConfigurations.cfgCheckZDC, rctConfigurations.cfgTreatLimitedAcceptanceAsBad); - // setup map for fast checking if enabled static_for<0, nSpecies - 1>([&](auto i) { constexpr int index = i.value; @@ -435,9 +421,6 @@ struct strangederivedbuilder { // +-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+-<*>-+ for (const auto& collision : collisions) { - if (!rctConfigurations.cfgRCTLabel.value.empty() && !rctFlagsChecker(collision)) - continue; - const uint64_t collIdx = collision.globalIndex(); auto V0Table_thisColl = V0s.sliceBy(V0perCollision, collIdx); diff --git a/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx b/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx index 0800c0fd1e3..74c36988ce1 100644 --- a/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx +++ b/PWGLF/TableProducer/Strangeness/strangenessbuilder.cxx @@ -39,7 +39,6 @@ #include "Framework/AnalysisTask.h" #include "Framework/AnalysisDataModel.h" #include "Common/DataModel/PIDResponse.h" -#include "Common/DataModel/EventSelection.h" #include "TableHelper.h" #include "PWGLF/DataModel/LFStrangenessTables.h" #include "PWGLF/DataModel/LFStrangenessPIDTables.h" @@ -52,8 +51,6 @@ using namespace o2; using namespace o2::framework; -using namespace o2::aod::rctsel; - static constexpr int nParameters = 1; static const std::vector tableNames{ "V0Indices", //.0 (standard analysis: V0Cores) @@ -348,15 +345,6 @@ struct StrangenessBuilder { Configurable mc_findableDetachedCascade{"mc_findableDetachedCascade", false, "if true, generate findable cascades that have collisionId -1. Caution advised."}; } cascadeBuilderOpts; - struct : ConfigurableGroup { - std::string prefix = "rctConfigurations"; // JSON group name - Configurable cfgRCTLabel{"cfgRCTLabel", "", "Which detector condition requirements? (CBT, CBT_hadronPID, CBT_electronPID, CBT_calo, CBT_muon, CBT_muon_glo)"}; - Configurable cfgCheckZDC{"cfgCheckZDC", false, "Include ZDC flags in the bit selection (for Pb-Pb only)"}; - Configurable cfgTreatLimitedAcceptanceAsBad{"cfgTreatLimitedAcceptanceAsBad", false, "reject all events where the detectors relevant for the specified Runlist are flagged as LimitedAcceptance"}; - } rctConfigurations; - - RCTFlagsChecker rctFlagsChecker{rctConfigurations.cfgRCTLabel.value}; - o2::ccdb::CcdbApi ccdbApi; Service ccdb; @@ -580,8 +568,6 @@ struct StrangenessBuilder { ccdb->setLocalObjectValidityChecking(); ccdb->setFatalWhenNull(false); - rctFlagsChecker.init(rctConfigurations.cfgRCTLabel.value, rctConfigurations.cfgCheckZDC, rctConfigurations.cfgTreatLimitedAcceptanceAsBad); - // set V0 parameters in the helper straHelper.v0selections.minCrossedRows = v0BuilderOpts.minCrossedRows; straHelper.v0selections.dcanegtopv = v0BuilderOpts.dcanegtopv; @@ -601,16 +587,6 @@ struct StrangenessBuilder { straHelper.cascadeselections.maxDaughterEta = cascadeBuilderOpts.maxDaughterEta; } - // for sorting - template - bool isEventAccepted(const TCollision& collision) - { - if (!rctConfigurations.cfgRCTLabel.value.empty() && !rctFlagsChecker(collision)) - return false; - - return true; - } - // for sorting template std::vector sort_indices(const std::vector& v, bool doSorting = false) @@ -766,9 +742,6 @@ struct StrangenessBuilder { // single loop over double loop at a small cost in memory for extra array for (const auto& collision : collisions) { - if (!isEventAccepted(collision)) { - continue; - } if (collision.has_mcCollision()) { if (collision.numContrib() > bestCollisionNContribsArray[collision.mcCollisionId()]) { bestCollisionArray[collision.mcCollisionId()] = collision.globalIndex(); @@ -822,10 +795,6 @@ struct StrangenessBuilder { auto negTrackPar = getTrackParCov(nTrack); auto const& collision = collisions.rawIteratorAt(v0tableGrouped[iV0].collisionIds[ic]); - if (!isEventAccepted(collision)) { - continue; - } - // handle TPC-only tracks properly (photon conversions) if (v0BuilderOpts.moveTPCOnlyTracks) { if (isPosTPCOnly) { @@ -1291,10 +1260,6 @@ struct StrangenessBuilder { pvX = collision.posX(); pvY = collision.posY(); pvZ = collision.posZ(); - - if (!isEventAccepted(collision)) { - continue; - } } auto const& posTrack = tracks.rawIteratorAt(v0.posTrackId); auto const& negTrack = tracks.rawIteratorAt(v0.negTrackId); @@ -1757,10 +1722,6 @@ struct StrangenessBuilder { pvX = collision.posX(); pvY = collision.posY(); pvZ = collision.posZ(); - - if (!isEventAccepted(collision)) { - continue; - } } auto const& posTrack = tracks.rawIteratorAt(cascade.posTrackId); auto const& negTrack = tracks.rawIteratorAt(cascade.negTrackId); @@ -2099,10 +2060,6 @@ struct StrangenessBuilder { pvX = collision.posX(); pvY = collision.posY(); pvZ = collision.posZ(); - - if (!isEventAccepted(collision)) { - continue; - } } auto const& posTrack = tracks.rawIteratorAt(cascade.posTrackId); auto const& negTrack = tracks.rawIteratorAt(cascade.negTrackId); @@ -2200,10 +2157,6 @@ struct StrangenessBuilder { pvX = collision.posX(); pvY = collision.posY(); pvZ = collision.posZ(); - - if (!isEventAccepted(collision)) { - continue; - } } auto const& cascade = cascadeTrack.cascade(); auto const& v0 = cascade.v0();