From 58c8bf97d3da2649189885364b68d6f133306e56 Mon Sep 17 00:00:00 2001 From: Stefano Cannito Date: Mon, 21 Jul 2025 17:49:29 +0200 Subject: [PATCH 1/3] Further studies for dNdEta with phi --- .../Tasks/Strangeness/phik0shortanalysis.cxx | 57 ++++++++++++------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx b/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx index 0fcc77ce131..d9bafb13447 100644 --- a/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx +++ b/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx @@ -102,6 +102,7 @@ struct Phik0shortanalysis { // Configurables for track selection (not necessarily common for trigger and the two associated particles) struct : ConfigurableGroup { Configurable cfgCutCharge{"cfgCutCharge", 0.0f, "Cut on charge"}; + Configurable cfgMinAbsCharge{"cfgMinAbsCharge", 3.0f, "Cut on absolute charge"}; Configurable cfgGlobalWoDCATrack{"cfgGlobalWoDCATrack", true, "Global track selection without DCA"}; Configurable cfgPVContributor{"cfgPVContributor", true, "PV contributor track selection"}; Configurable cMinKaonPtcut{"cMinKaonPtcut", 0.15f, "Track minimum pt cut"}; @@ -259,7 +260,10 @@ struct Phik0shortanalysis { SliceCache cache; // Preslice for manual slicing - Preslice perMCColl = aod::mcparticle::mcCollisionId; + struct : PresliceGroup { + Preslice perColl = aod::track::collisionId; + Preslice perMCColl = aod::mcparticle::mcCollisionId; + } preslices; // Positive and negative tracks partitions Partition posTracks = aod::track::signed1Pt > trackConfigs.cfgCutCharge; @@ -957,6 +961,21 @@ struct Phik0shortanalysis { return false; } + template + bool isGenParticleCharged(const T& mcParticle) + { + if (!mcParticle.isPhysicalPrimary() || std::abs(mcParticle.eta()) > trackConfigs.etaMax) + return false; + + auto pdgTrack = pdgDB->GetParticle(mcParticle.pdgCode()); + if (pdgTrack == nullptr) + return false; + if (pdgTrack->Charge() < trackConfigs.cfgMinAbsCharge) + return false; + + return true; + } + // Get phi-meson purity functions from CCDB void getPhiPurityFunctionsFromCCDB() { @@ -2436,7 +2455,7 @@ struct Phik0shortanalysis { return; const auto& mcCollision = collision.mcCollision_as(); - auto mcParticlesThisColl = mcParticles.sliceBy(perMCColl, mcCollision.globalIndex()); + auto mcParticlesThisColl = mcParticles.sliceBy(preslices.perMCColl, mcCollision.globalIndex()); if (filterOnMcPhi && !eventHasMCPhi(mcParticlesThisColl)) return; @@ -2456,13 +2475,7 @@ struct Phik0shortanalysis { } for (const auto& mcParticle : mcParticlesThisColl) { - if (!mcParticle.isPhysicalPrimary() || std::abs(mcParticle.eta()) > trackConfigs.etaMax) - continue; - - auto pdgTrack = pdgDB->GetParticle(mcParticle.pdgCode()); - if (pdgTrack == nullptr) - continue; - if (pdgTrack->Charge() == trackConfigs.cfgCutCharge) + if (!isGenParticleCharged(mcParticle)) continue; mcEventHist.fill(HIST("h2GenMCEtaDistributionReco"), genmultiplicity, mcParticle.eta()); @@ -2471,7 +2484,7 @@ struct Phik0shortanalysis { PROCESS_SWITCH(Phik0shortanalysis, processdNdetaWPhiMCReco, "Process function for dN/deta values in MCReco", false); - void processdNdetaWPhiMCGen(MCCollisions::iterator const& mcCollision, soa::SmallGroups const& collisions, aod::McParticles const& mcParticles) + void processdNdetaWPhiMCGen(MCCollisions::iterator const& mcCollision, soa::SmallGroups const& collisions, FilteredMCTracks const& filteredMCTracks, aod::McParticles const& mcParticles) { if (std::abs(mcCollision.posZ()) > cutZVertex) return; @@ -2487,14 +2500,20 @@ struct Phik0shortanalysis { if (acceptEventQA(collision, false)) { mcEventHist.fill(HIST("hGenMCRecoMultiplicityPercent"), genmultiplicity); - for (const auto& mcParticle : mcParticles) { - if (!mcParticle.isPhysicalPrimary() || std::abs(mcParticle.eta()) > trackConfigs.etaMax) + auto filteredMCTracksThisColl = filteredMCTracks.sliceBy(preslices.perColl, collision.globalIndex()); + for (const auto& track : filteredMCTracksThisColl) { + if (!track.has_mcParticle()) continue; - auto pdgTrack = pdgDB->GetParticle(mcParticle.pdgCode()); - if (pdgTrack == nullptr) + auto mcTrack = track.mcParticle_(); + if (!mcTrack.isPhysicalPrimary() || std::abs(mcTrack.eta()) > trackConfigs.etaMax) continue; - if (pdgTrack->Charge() == trackConfigs.cfgCutCharge) + + mcEventHist.fill(HIST("h2RecoCheckMCEtaDistribution"), genmultiplicity, mcTrack.eta()); + } + + for (const auto& mcParticle : mcParticles) { + if (!isGenParticleCharged(mcParticle)) continue; mcEventHist.fill(HIST("h2GenMCEtaDistributionRecoCheck"), genmultiplicity, mcParticle.eta()); @@ -2509,13 +2528,7 @@ struct Phik0shortanalysis { mcEventHist.fill(HIST("hGenMCAssocRecoMultiplicityPercent"), genmultiplicity); for (const auto& mcParticle : mcParticles) { - if (!mcParticle.isPhysicalPrimary() || std::abs(mcParticle.eta()) > trackConfigs.etaMax) - continue; - - auto pdgTrack = pdgDB->GetParticle(mcParticle.pdgCode()); - if (pdgTrack == nullptr) - continue; - if (pdgTrack->Charge() == trackConfigs.cfgCutCharge) + if (!isGenParticleCharged(mcParticle)) continue; mcEventHist.fill(HIST("h2GenMCEtaDistribution"), genmultiplicity, mcParticle.eta()); From b27dca9322b5eaacdd324e355cc7f3cb924788ba Mon Sep 17 00:00:00 2001 From: Stefano Cannito Date: Mon, 21 Jul 2025 17:52:59 +0200 Subject: [PATCH 2/3] Fix bug --- PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx b/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx index d9bafb13447..eac6314a0a1 100644 --- a/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx +++ b/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx @@ -2505,7 +2505,7 @@ struct Phik0shortanalysis { if (!track.has_mcParticle()) continue; - auto mcTrack = track.mcParticle_(); + auto mcTrack = track.mcParticle(); if (!mcTrack.isPhysicalPrimary() || std::abs(mcTrack.eta()) > trackConfigs.etaMax) continue; From c7a041ba6d0d765ea50cc7bb37690ec9ac29e146 Mon Sep 17 00:00:00 2001 From: Stefano Cannito Date: Mon, 21 Jul 2025 20:42:51 +0200 Subject: [PATCH 3/3] std::abs --- PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx b/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx index eac6314a0a1..598d8f56df4 100644 --- a/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx +++ b/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx @@ -970,7 +970,7 @@ struct Phik0shortanalysis { auto pdgTrack = pdgDB->GetParticle(mcParticle.pdgCode()); if (pdgTrack == nullptr) return false; - if (pdgTrack->Charge() < trackConfigs.cfgMinAbsCharge) + if (std::abs(pdgTrack->Charge()) < trackConfigs.cfgMinAbsCharge) return false; return true;