From a587e10ac073b4977d162746849b8b86e64cede2 Mon Sep 17 00:00:00 2001 From: ptak Date: Mon, 19 Oct 2026 19:33:12 +0200 Subject: [PATCH 1/3] [PWGLF] Adapt cascadeMLSelectionTreeCreator to derived MC data --- .../cascadeMLSelectionTreeCreator.cxx | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx b/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx index a97f2dad659..65522fd8f2a 100644 --- a/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx +++ b/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx @@ -161,10 +161,10 @@ struct cascadeMLSelectionTreeCreator { // Track quality cascadeCandidate.posITSCls = posTrackExtra.itsNCls(); cascadeCandidate.negITSCls = negTrackExtra.itsNCls(); - cascadeCandidate.bachITSCls = negTrackExtra.itsNCls(); + cascadeCandidate.bachITSCls = bachTrackExtra.itsNCls(); cascadeCandidate.posITSClsSizes = posTrackExtra.itsClusterSizes(); cascadeCandidate.negITSClsSizes = negTrackExtra.itsClusterSizes(); - cascadeCandidate.bachITSClsSizes = negTrackExtra.itsClusterSizes(); + cascadeCandidate.bachITSClsSizes = bachTrackExtra.itsClusterSizes(); cascadeCandidate.posTPCRows = posTrackExtra.tpcCrossedRows(); cascadeCandidate.negTPCRows = negTrackExtra.tpcCrossedRows(); cascadeCandidate.bachTPCRows = bachTrackExtra.tpcCrossedRows(); @@ -214,11 +214,14 @@ struct cascadeMLSelectionTreeCreator { cascadeCandidate.isOmegaMinus = false; cascadeCandidate.isOmegaPlus = false; - if constexpr (requires { cand.pdgCode(); }) { - cascadeCandidate.isXiMinus = (cand.pdgCode() == 3312); - cascadeCandidate.isXiPlus = (cand.pdgCode() == -3312); - cascadeCandidate.isOmegaMinus = (cand.pdgCode() == 3334); - cascadeCandidate.isOmegaPlus = (cand.pdgCode() == -3334); + if constexpr (requires { cand.has_cascMCCore(); }) { + if (cand.has_cascMCCore()) { + auto cascMC = cand.template cascMCCore_as(); + cascadeCandidate.isXiMinus = (cascMC.pdgCode() == 3312); + cascadeCandidate.isXiPlus = (cascMC.pdgCode() == -3312); + cascadeCandidate.isOmegaMinus = (cascMC.pdgCode() == 3334); + cascadeCandidate.isOmegaPlus = (cascMC.pdgCode() == -3334); + } } // base topological selections @@ -228,7 +231,7 @@ struct cascadeMLSelectionTreeCreator { return; if (cascadeCandidate.dcapostopv < v0setting_dcapostopv) return; - if (cascadeCandidate.dcapostopv < v0setting_dcanegtopv) + if (cascadeCandidate.dcanegtopv < v0setting_dcanegtopv) return; if (cascadeCandidate.dcabachtopv < cascadesetting_dcabachtopv) return; @@ -327,7 +330,7 @@ struct cascadeMLSelectionTreeCreator { processCandidate(coll, casc); } } - void processSimData(soa::Join::iterator const& coll, soa::Join const& cascades, dauTracks const&) + void processSimData(soa::Join::iterator const& coll, soa::Join const& cascades, dauTracks const&, aod::CascMCCores const&) { histos.fill(HIST("hEventCentrality"), coll.centFT0C()); for (auto& casc : cascades) { // looping over lambdas From 392fe8aded3e161fb7400e1352afa2fc8570aaee Mon Sep 17 00:00:00 2001 From: ptak Date: Tue, 20 Oct 2026 13:43:09 +0200 Subject: [PATCH 2/3] [PWGLF] CascadeMLSelectionTreeCreator: abs() on daughter DCA cuts + bachBaryon features --- PWGLF/DataModel/LFStrangenessMLTables.h | 4 ++ .../cascadeMLSelectionTreeCreator.cxx | 49 +++++++++++++------ 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/PWGLF/DataModel/LFStrangenessMLTables.h b/PWGLF/DataModel/LFStrangenessMLTables.h index 7784a521dd7..983648f791d 100644 --- a/PWGLF/DataModel/LFStrangenessMLTables.h +++ b/PWGLF/DataModel/LFStrangenessMLTables.h @@ -180,6 +180,8 @@ DECLARE_SOA_COLUMN(DCACascDaughters, dcaCascDaughters, float); DECLARE_SOA_COLUMN(DCAv0topv, dcav0topv, float); DECLARE_SOA_COLUMN(V0PA, v0PA, float); DECLARE_SOA_COLUMN(CascPA, cascPA, float); +DECLARE_SOA_COLUMN(BachBaryonCosPA, bachBaryonCosPA, float); +DECLARE_SOA_COLUMN(BachBaryonDCAxyToPV, bachBaryonDCAxyToPV, float); DECLARE_SOA_COLUMN(IsXiMinus, isXiMinus, bool); DECLARE_SOA_COLUMN(IsXiPlus, isXiPlus, bool); @@ -231,6 +233,8 @@ DECLARE_SOA_TABLE(CascMLCandidates, "AOD", "CAMLCANDIDATES", cascmlcandidates::DCAv0topv, cascmlcandidates::V0PA, cascmlcandidates::CascPA, + cascmlcandidates::BachBaryonCosPA, + cascmlcandidates::BachBaryonDCAxyToPV, cascmlcandidates::IsXiMinus, cascmlcandidates::IsXiPlus, cascmlcandidates::IsOmegaMinus, diff --git a/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx b/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx index 65522fd8f2a..7e7f897e2f2 100644 --- a/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx +++ b/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx @@ -139,6 +139,8 @@ struct cascadeMLSelectionTreeCreator { float dcav0topv; float v0CosPA; float cascCosPA; + float bachBaryonCosPA; + float bachBaryonDCAxyToPV; // reserved for MC operation bool isXiMinus; @@ -207,6 +209,8 @@ struct cascadeMLSelectionTreeCreator { cascadeCandidate.dcav0topv = cand.dcav0topv(coll.posX(), coll.posY(), coll.posZ()); cascadeCandidate.v0CosPA = cand.v0cosPA(coll.posX(), coll.posY(), coll.posZ()); cascadeCandidate.cascCosPA = cand.casccosPA(coll.posX(), coll.posY(), coll.posZ()); + cascadeCandidate.bachBaryonCosPA = cand.bachBaryonCosPA(); + cascadeCandidate.bachBaryonDCAxyToPV = cand.bachBaryonDCAxyToPV(); // MC flags cascadeCandidate.isXiMinus = false; @@ -216,7 +220,7 @@ struct cascadeMLSelectionTreeCreator { if constexpr (requires { cand.has_cascMCCore(); }) { if (cand.has_cascMCCore()) { - auto cascMC = cand.template cascMCCore_as(); + auto cascMC = cand.template cascMCCore_as>(); cascadeCandidate.isXiMinus = (cascMC.pdgCode() == 3312); cascadeCandidate.isXiPlus = (cascMC.pdgCode() == -3312); cascadeCandidate.isOmegaMinus = (cascMC.pdgCode() == 3334); @@ -225,28 +229,39 @@ struct cascadeMLSelectionTreeCreator { } // base topological selections - if (cascadeCandidate.v0CosPA < v0setting_cospa) + if (cascadeCandidate.v0CosPA < v0setting_cospa) { return; - if (cascadeCandidate.dcaV0Daughters > v0setting_dcav0dau) + } + if (cascadeCandidate.dcaV0Daughters > v0setting_dcav0dau) { return; - if (cascadeCandidate.dcapostopv < v0setting_dcapostopv) + } + if (std::abs(cascadeCandidate.dcapostopv) < v0setting_dcapostopv) { return; - if (cascadeCandidate.dcanegtopv < v0setting_dcanegtopv) + } + if (std::abs(cascadeCandidate.dcanegtopv) < v0setting_dcanegtopv) { return; - if (cascadeCandidate.dcabachtopv < cascadesetting_dcabachtopv) + } + if (std::abs(cascadeCandidate.dcabachtopv) < cascadesetting_dcabachtopv) { return; - if (cascadeCandidate.v0radius < v0setting_radius) + } + if (cascadeCandidate.v0radius < v0setting_radius) { return; - if (cascadeCandidate.cascCosPA < cascadesetting_cospa) + } + if (cascadeCandidate.cascCosPA < cascadesetting_cospa) { return; - if (cascadeCandidate.dcaCascDaughters > cascadesetting_dcacascdau) + } + if (cascadeCandidate.dcaCascDaughters > cascadesetting_dcacascdau) { return; - if (cascadeCandidate.cascradius < cascadesetting_cascradius) + } + if (cascadeCandidate.cascradius < cascadesetting_cascradius) { return; - if (std::abs(cascadeCandidate.mLambdaDaughter - 1.116) > cascadesetting_v0masswindow) + } + if (std::abs(cascadeCandidate.mLambdaDaughter - 1.116) > cascadesetting_v0masswindow) { return; - if (cascadeCandidate.dcav0topv < cascadesetting_mindcav0topv) + } + if (cascadeCandidate.dcav0topv < cascadesetting_mindcav0topv) { return; + } // Mass window selections cascadeCandidate.massWindows = 0; @@ -315,6 +330,8 @@ struct cascadeMLSelectionTreeCreator { cascadeCandidate.dcav0topv, TMath::ACos(cascadeCandidate.v0CosPA), TMath::ACos(cascadeCandidate.cascCosPA), + cascadeCandidate.bachBaryonCosPA, + cascadeCandidate.bachBaryonDCAxyToPV, // MC identity cascadeCandidate.isXiMinus, @@ -323,17 +340,17 @@ struct cascadeMLSelectionTreeCreator { cascadeCandidate.isOmegaPlus); } - void processRealData(soa::Join::iterator const& coll, soa::Join const& cascades, dauTracks const&) + void processRealData(soa::Join::iterator const& coll, soa::Join const& cascades, dauTracks const&) { histos.fill(HIST("hEventCentrality"), coll.centFT0C()); - for (auto& casc : cascades) { // looping over lambdas + for (auto& casc : cascades) { // looping over cascades processCandidate(coll, casc); } } - void processSimData(soa::Join::iterator const& coll, soa::Join const& cascades, dauTracks const&, aod::CascMCCores const&) + void processSimData(soa::Join::iterator const& coll, soa::Join const& cascades, dauTracks const&, soa::Join const&) { histos.fill(HIST("hEventCentrality"), coll.centFT0C()); - for (auto& casc : cascades) { // looping over lambdas + for (auto& casc : cascades) { // looping over cascades processCandidate(coll, casc); } } From e279eb973c4606ff70c51a97e3be44152b2b1ceb Mon Sep 17 00:00:00 2001 From: ptak Date: Tue, 20 Oct 2026 14:01:50 +0200 Subject: [PATCH 3/3] fix MegaLinter errors --- .../Strangeness/cascadeMLSelectionTreeCreator.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx b/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx index 7e7f897e2f2..7fe676a81e0 100644 --- a/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx +++ b/PWGLF/TableProducer/Strangeness/cascadeMLSelectionTreeCreator.cxx @@ -147,7 +147,7 @@ struct cascadeMLSelectionTreeCreator { bool isXiPlus; bool isOmegaMinus; bool isOmegaPlus; - } cascadeCandidate; + } cascadeCandidate{}; // Process candidate and store properties in object template @@ -343,14 +343,14 @@ struct cascadeMLSelectionTreeCreator { void processRealData(soa::Join::iterator const& coll, soa::Join const& cascades, dauTracks const&) { histos.fill(HIST("hEventCentrality"), coll.centFT0C()); - for (auto& casc : cascades) { // looping over cascades + for (const auto& casc : cascades) { // looping over cascades processCandidate(coll, casc); } } void processSimData(soa::Join::iterator const& coll, soa::Join const& cascades, dauTracks const&, soa::Join const&) { histos.fill(HIST("hEventCentrality"), coll.centFT0C()); - for (auto& casc : cascades) { // looping over cascades + for (const auto& casc : cascades) { // looping over cascades processCandidate(coll, casc); } }