diff --git a/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx b/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx index b38931be584..a59ea761daf 100644 --- a/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx +++ b/PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx @@ -162,13 +162,16 @@ struct Phik0shortanalysis { // Configurables on phi pT bins Configurable> binspTPhi{"binspTPhi", {0.4, 0.8, 1.4, 2.0, 2.8, 4.0, 6.0, 10.0}, "pT bin limits for Phi"}; - Configurable minPhiPt{"minPhiPt", 0.4f, "Minimum pT for Phi"}; - Configurable maxPhiPt{"maxPhiPt", 10.0f, "Maximum pT for Phi"}; - // Configurables on phi mass - Configurable nBinsMPhi{"nBinsMPhi", 13, "N bins in cfgmassPhiaxis"}; - Configurable lowMPhi{"lowMPhi", 1.0095f, "Upper limits on Phi mass for signal extraction"}; - Configurable upMPhi{"upMPhi", 1.029f, "Upper limits on Phi mass for signal extraction"}; + // Configurables on phi selection + struct : ConfigurableGroup { + Configurable nBinsMPhi{"nBinsMPhi", 13, "N bins in cfgmassPhiaxis"}; + Configurable lowMPhi{"lowMPhi", 1.0095f, "Upper limits on Phi mass for signal extraction"}; + Configurable upMPhi{"upMPhi", 1.029f, "Upper limits on Phi mass for signal extraction"}; + + Configurable minPhiPt{"minPhiPt", 0.4f, "Minimum pT for Phi"}; + Configurable maxPhiPt{"maxPhiPt", 10.0f, "Maximum pT for Phi"}; + } phiConfigs; // Configurables for V0 selection struct : ConfigurableGroup { @@ -185,11 +188,10 @@ struct Phik0shortanalysis { Configurable ctauK0s{"ctauK0s", 20.0f, "C tau K0s(cm)"}; Configurable paramArmenterosCut{"paramArmenterosCut", 0.2f, "parameter Armenteros Cut"}; Configurable v0rejK0s{"v0rejK0s", 0.005f, "V0 rej K0s"}; - } v0Configs; - // Configurables on K0S mass - Configurable lowMK0S{"lowMK0S", 0.48f, "Lower limit on K0Short mass"}; - Configurable upMK0S{"upMK0S", 0.52f, "Upper limit on K0Short mass"}; + Configurable lowMK0S{"lowMK0S", 0.48f, "Lower limit on K0Short mass"}; + Configurable upMK0S{"upMK0S", 0.52f, "Upper limit on K0Short mass"}; + } v0Configs; // Configurable on K0S pT bins Configurable> binspTK0S{"binspTK0S", {0.1, 0.5, 0.8, 1.2, 1.6, 2.0, 2.5, 3.0, 4.0, 6.0}, "pT bin limits for K0S"}; @@ -222,7 +224,8 @@ struct Phik0shortanalysis { // Configurables for dN/deta with phi computation Configurable furtherCheckonMcCollision{"furtherCheckonMcCollision", true, "Further check on MC collisions"}; - Configurable filterOnMcPhi{"filterOnMcPhi", true, "Filter on MC Phi"}; + Configurable filterOnGenPhi{"filterOnGenPhi", true, "Filter on MC Phi"}; + Configurable filterOnRecoPhiWPDG{"filterOnRecoPhiWPDG", true, "Filter on Reco Phi with WPDG"}; // Configurable for event mixing Configurable cfgNoMixedEvents{"cfgNoMixedEvents", 5, "Number of mixed events per event"}; @@ -322,7 +325,7 @@ struct Phik0shortanalysis { { // Axes AxisSpec massPhiAxis = {200, 0.9f, 1.2f, "#it{M}_{inv} [GeV/#it{c}^{2}]"}; - AxisSpec sigmassPhiAxis = {nBinsMPhi, lowMPhi, upMPhi, "#it{M}_{inv} [GeV/#it{c}^{2}]"}; + AxisSpec sigmassPhiAxis = {phiConfigs.nBinsMPhi, phiConfigs.lowMPhi, phiConfigs.upMPhi, "#it{M}_{inv} [GeV/#it{c}^{2}]"}; AxisSpec massK0SAxis = {200, 0.45f, 0.55f, "#it{M}_{inv} [GeV/#it{c}^{2}]"}; AxisSpec nSigmaPiAxis = {100, -10.0f, 10.0f, "N#sigma #pi"}; AxisSpec vertexZAxis = {100, -cutZVertex, cutZVertex, "vrtx_{Z} [cm]"}; @@ -383,10 +386,12 @@ struct Phik0shortanalysis { mcEventHist.add("hRecoMCMultiplicityPercent", "RecoMC Multiplicity Percentile", kTH1F, {binnedmultAxis}); mcEventHist.add("hRecoMCMultiplicityPercentWithPhi", "RecoMC Multiplicity Percentile in Events with a Phi Candidate", kTH1F, {binnedmultAxis}); mcEventHist.add("h2RecoMCVertexZvsMult", "RecoMC Vertex Z vs Multiplicity Percentile", kTH2F, {vertexZAxis, binnedmultAxis}); + mcEventHist.add("hSplitVertexZ", "Split in z-vtx", kTH1F, {{100, -5.0f, 5.0f}}); mcEventHist.add("hGenMCVertexZ", "hGenMCVertexZ", kTH1F, {vertexZAxis}); mcEventHist.add("hGenMCMultiplicityPercent", "GenMC Multiplicity Percentile", kTH1F, {binnedmultAxis}); mcEventHist.add("hGenMCAssocRecoMultiplicityPercent", "GenMC AssocReco Multiplicity Percentile", kTH1F, {binnedmultAxis}); + mcEventHist.add("h2GenMCAssocRecoVertexZvsMult", "GenMC AssocReco Vertex Z vs Multiplicity Percentile", kTH2F, {vertexZAxis, binnedmultAxis}); mcEventHist.add("hGenMCRecoMultiplicityPercent", "GenMCReco Multiplicity Percentile", kTH1F, {binnedmultAxis}); mcEventHist.add("h2GenMCRecoVertexZvsMult", "GenMCReco Vertex Z vs Multiplicity Percentile", kTH2F, {vertexZAxis, binnedmultAxis}); @@ -394,8 +399,8 @@ struct Phik0shortanalysis { mcEventHist.add("h6RecoMCEtaDistribution", "Eta vs multiplicity in MCReco", kTHnSparseF, {vertexZAxis, binnedmultAxis, etaAxis, phiAxis, {6, -0.5f, 5.5f}, {3, -0.5f, 2.5f}}); mcEventHist.add("h6RecoCheckMCEtaDistribution", "Eta vs multiplicity in MCReco Check", kTHnSparseF, {vertexZAxis, binnedmultAxis, etaAxis, phiAxis, {6, -0.5f, 5.5f}, {3, -0.5f, 2.5f}}); - mcEventHist.add("h2GenMCEtaDistribution", "Eta vs multiplicity in MCGen", kTH2F, {binnedmultAxis, etaAxis}); - mcEventHist.add("h2GenMCEtaDistributionAssocReco", "Eta vs multiplicity in MCGen Assoc Reco", kTH2F, {binnedmultAxis, etaAxis}); + mcEventHist.add("h5GenMCEtaDistribution", "Eta vs multiplicity in MCGen", kTHnSparseF, {binnedmultAxis, etaAxis, phiAxis, {6, -0.5f, 5.5f}, {3, -0.5f, 2.5f}}); + mcEventHist.add("h6GenMCEtaDistributionAssocReco", "Eta vs multiplicity in MCGen Assoc Reco", kTHnSparseF, {vertexZAxis, binnedmultAxis, etaAxis, phiAxis, {6, -0.5f, 5.5f}, {3, -0.5f, 2.5f}}); mcEventHist.add("h6GenMCEtaDistributionReco", "Eta vs multiplicity in MCGen Reco", kTHnSparseF, {vertexZAxis, binnedmultAxis, etaAxis, phiAxis, {6, -0.5f, 5.5f}, {3, -0.5f, 2.5f}}); mcEventHist.add("h6GenMCEtaDistributionRecoCheck", "Eta vs multiplicity in MCGen Reco Check", kTHnSparseF, {vertexZAxis, binnedmultAxis, etaAxis, phiAxis, {6, -0.5f, 5.5f}, {3, -0.5f, 2.5f}}); @@ -938,7 +943,7 @@ struct Phik0shortanalysis { } template - bool eventHasPhi(const T1& posTracks, const T2& negTracks) + bool eventHasRecoPhi(const T1& posTracks, const T2& negTracks) { int nPhi = 0; @@ -957,9 +962,9 @@ struct Phik0shortanalysis { continue; // condition to avoid double counting of pair ROOT::Math::PxPyPzMVector recPhi = recMother(track1, track2, massKa, massKa); - if (recPhi.Pt() < minPhiPt || recPhi.Pt() > maxPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt) continue; - if (recPhi.M() < lowMPhi || recPhi.M() > upMPhi) + if (recPhi.M() < phiConfigs.lowMPhi || recPhi.M() > phiConfigs.upMPhi) continue; if (std::abs(recPhi.Rapidity()) > deltaYConfigs.cfgYAcceptance) continue; @@ -973,19 +978,95 @@ struct Phik0shortanalysis { return false; } + template + bool eventHasRecoPhiWPDG(const T1& posTracks, const T2& negTracks) + { + int nPhi = 0; + + for (const auto& track1 : posTracks) { + if (!selectionTrackResonance(track1, false) || !selectionPIDKaonpTdependent(track1)) + continue; // topological and PID selection + + auto track1ID = track1.globalIndex(); + + if (!track1.has_mcParticle()) + continue; + auto mcTrack1 = track1.template mcParticle_as(); + if (mcTrack1.pdgCode() != PDG_t::kKPlus || !mcTrack1.isPhysicalPrimary()) + continue; + + for (const auto& track2 : negTracks) { + if (!selectionTrackResonance(track2, false) || !selectionPIDKaonpTdependent(track2)) + continue; // topological and PID selection + + auto track2ID = track2.globalIndex(); + if (track2ID == track1ID) + continue; // condition to avoid double counting of pair + + if (!track2.has_mcParticle()) + continue; + auto mcTrack2 = track2.template mcParticle_as(); + if (mcTrack2.pdgCode() != PDG_t::kKMinus || !mcTrack2.isPhysicalPrimary()) + continue; + + float pTMother = -1.0f; + float yMother = -1.0f; + bool isMCMotherPhi = false; + for (const auto& motherOfMcTrack1 : mcTrack1.template mothers_as()) { + for (const auto& motherOfMcTrack2 : mcTrack2.template mothers_as()) { + if (motherOfMcTrack1.pdgCode() != motherOfMcTrack2.pdgCode()) + continue; + if (motherOfMcTrack1.globalIndex() != motherOfMcTrack2.globalIndex()) + continue; + if (motherOfMcTrack1.pdgCode() != o2::constants::physics::Pdg::kPhi) + continue; + + pTMother = motherOfMcTrack1.pt(); + yMother = motherOfMcTrack1.y(); + isMCMotherPhi = true; + } + } + + if (!isMCMotherPhi) + continue; + if (pTMother < phiConfigs.minPhiPt || std::abs(yMother) > deltaYConfigs.cfgYAcceptance) + continue; + + nPhi++; + } + } + + if (nPhi > 0) + return true; + return false; + } + template - bool eventHasMCPhi(const T& mcParticles) + bool eventHasGenPhi(const T& mcParticles) { int nPhi = 0; for (const auto& mcParticle : mcParticles) { if (mcParticle.pdgCode() != o2::constants::physics::Pdg::kPhi) continue; - if (mcParticle.pt() < minPhiPt || mcParticle.pt() > maxPhiPt) + if (mcParticle.pt() < phiConfigs.minPhiPt) continue; if (std::abs(mcParticle.y()) > deltaYConfigs.cfgYAcceptance) continue; + auto kDaughters = mcParticle.template daughters_as(); + if (kDaughters.size() != 2) + continue; + bool isPosKaon = false, isNegKaon = false; + for (const auto& kDaughter : kDaughters) { + if (kDaughter.pdgCode() == PDG_t::kKPlus) + isPosKaon = true; + if (kDaughter.pdgCode() == PDG_t::kKMinus) + isNegKaon = true; + } + if (!isPosKaon || !isNegKaon) + continue; + nPhi++; } @@ -1219,7 +1300,7 @@ struct Phik0shortanalysis { continue; // condition to avoid double counting of pair ROOT::Math::PxPyPzMVector recPhi = recMother(track1, track2, massKa, massKa); - if (recPhi.Pt() < minPhiPt || recPhi.Pt() > maxPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt || recPhi.Pt() > phiConfigs.maxPhiPt) continue; if (std::abs(recPhi.Rapidity()) > deltaYConfigs.cfgYAcceptance) continue; @@ -1253,7 +1334,7 @@ struct Phik0shortanalysis { dataK0SHist.fill(HIST("hV0CosPA"), v0.v0cosPA()); // Filling the PID of the V0 daughters in the region of the K0 peak - if (lowMK0S < v0.mK0Short() && v0.mK0Short() < upMK0S) { + if (v0Configs.lowMK0S < v0.mK0Short() && v0.mK0Short() < v0Configs.upMK0S) { dataK0SHist.fill(HIST("hNSigmaPosPionFromK0S"), posDaughterTrack.tpcInnerParam(), posDaughterTrack.tpcNSigmaPi()); dataK0SHist.fill(HIST("hNSigmaNegPionFromK0S"), negDaughterTrack.tpcInnerParam(), negDaughterTrack.tpcNSigmaPi()); } @@ -1358,9 +1439,9 @@ struct Phik0shortanalysis { continue; // condition to avoid double counting of pair ROOT::Math::PxPyPzMVector recPhi = recMother(track1, track2, massKa, massKa); - if (recPhi.Pt() < minPhiPt || recPhi.Pt() > maxPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt || recPhi.Pt() > phiConfigs.maxPhiPt) continue; - if (recPhi.M() < lowMPhi || recPhi.M() > upMPhi) + if (recPhi.M() < phiConfigs.lowMPhi || recPhi.M() > phiConfigs.upMPhi) continue; if (std::abs(recPhi.Rapidity()) > deltaYConfigs.cfgYAcceptance) continue; @@ -1445,9 +1526,9 @@ struct Phik0shortanalysis { continue; // condition to avoid double counting of pair ROOT::Math::PxPyPzMVector recPhi = recMother(track1, track2, massKa, massKa); - if (recPhi.Pt() < minPhiPt || recPhi.Pt() > maxPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt || recPhi.Pt() > phiConfigs.maxPhiPt) continue; - if (recPhi.M() < lowMPhi || recPhi.M() > upMPhi) + if (recPhi.M() < phiConfigs.lowMPhi || recPhi.M() > phiConfigs.upMPhi) continue; if (std::abs(recPhi.Rapidity()) > deltaYConfigs.cfgYAcceptance) continue; @@ -1551,7 +1632,7 @@ struct Phik0shortanalysis { continue; ROOT::Math::PxPyPzMVector recPhi = recMother(track1, track2, massKa, massKa); - if (recPhi.Pt() < minPhiPt || recPhi.Pt() > maxPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt || recPhi.Pt() > phiConfigs.maxPhiPt) continue; mcPhiHist.fill(HIST("h3PhiRapiditySmearing"), genmultiplicity, recPhi.Rapidity(), mcMotherPhi.y()); @@ -1693,7 +1774,7 @@ struct Phik0shortanalysis { for (const auto& mcParticle : mcParticlesThisColl) { if (mcParticle.pdgCode() != o2::constants::physics::Pdg::kPhi) continue; - if (mcParticle.pt() < minPhiPt || mcParticle.pt() > maxPhiPt) + if (mcParticle.pt() < phiConfigs.minPhiPt || mcParticle.pt() > phiConfigs.maxPhiPt) continue; if (std::abs(mcParticle.y()) > deltaYConfigs.cfgYAcceptance) continue; @@ -1771,7 +1852,7 @@ struct Phik0shortanalysis { for (const auto& mcParticle : mcParticlesThisColl) { if (mcParticle.pdgCode() != o2::constants::physics::Pdg::kPhi) continue; - if (mcParticle.pt() < minPhiPt || mcParticle.pt() > maxPhiPt) + if (mcParticle.pt() < phiConfigs.minPhiPt || mcParticle.pt() > phiConfigs.maxPhiPt) continue; if (std::abs(mcParticle.y()) > deltaYConfigs.cfgYAcceptance) continue; @@ -1799,7 +1880,7 @@ struct Phik0shortanalysis { for (const auto& mcParticle : mcParticlesThisColl) { if (mcParticle.pdgCode() != o2::constants::physics::Pdg::kPhi) continue; - if (mcParticle.pt() < minPhiPt || mcParticle.pt() > maxPhiPt) + if (mcParticle.pt() < phiConfigs.minPhiPt || mcParticle.pt() > phiConfigs.maxPhiPt) continue; if (std::abs(mcParticle.y()) > deltaYConfigs.cfgYAcceptance) continue; @@ -1860,7 +1941,7 @@ struct Phik0shortanalysis { continue; // condition to avoid double counting of pair ROOT::Math::PxPyPzMVector recPhi = recMother(track1, track2, massKa, massKa); - if (recPhi.Pt() < minPhiPt || recPhi.Pt() > maxPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt || recPhi.Pt() > phiConfigs.maxPhiPt) continue; if (std::abs(recPhi.Rapidity()) > deltaYConfigs.cfgYAcceptance) continue; @@ -2036,9 +2117,9 @@ struct Phik0shortanalysis { } ROOT::Math::PxPyPzMVector recPhi = recMother(track1, track2, massKa, massKa); - if (recPhi.Pt() < minPhiPt || recPhi.Pt() > maxPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt || recPhi.Pt() > phiConfigs.maxPhiPt) continue; - if (recPhi.M() < lowMPhi || recPhi.M() > upMPhi) + if (recPhi.M() < phiConfigs.lowMPhi || recPhi.M() > phiConfigs.upMPhi) continue; if (std::abs(recPhi.Rapidity()) > deltaYConfigs.cfgYAcceptance) continue; @@ -2158,9 +2239,9 @@ struct Phik0shortanalysis { } ROOT::Math::PxPyPzMVector recPhi = recMother(track1, track2, massKa, massKa); - if (recPhi.Pt() < minPhiPt || recPhi.Pt() > maxPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt || recPhi.Pt() > phiConfigs.maxPhiPt) continue; - if (recPhi.M() < lowMPhi || recPhi.M() > upMPhi) + if (recPhi.M() < phiConfigs.lowMPhi || recPhi.M() > phiConfigs.upMPhi) continue; if (std::abs(recPhi.Rapidity()) > deltaYConfigs.cfgYAcceptance) continue; @@ -2376,7 +2457,7 @@ struct Phik0shortanalysis { if (!isPosKaon || !isNegKaon) continue; } - if (mcParticle2.pt() < minPhiPt || mcParticle2.pt() > maxPhiPt) + if (mcParticle2.pt() < phiConfigs.minPhiPt || mcParticle2.pt() > phiConfigs.maxPhiPt) continue; if (std::abs(mcParticle2.y()) > deltaYConfigs.cfgYAcceptance) continue; @@ -2453,7 +2534,7 @@ struct Phik0shortanalysis { if (!isPosKaon || !isNegKaon) continue; } - if (mcParticle2.pt() < minPhiPt || mcParticle2.pt() > maxPhiPt) + if (mcParticle2.pt() < phiConfigs.minPhiPt || mcParticle2.pt() > phiConfigs.maxPhiPt) continue; if (std::abs(mcParticle2.y()) > deltaYConfigs.cfgYAcceptance) continue; @@ -2489,7 +2570,7 @@ struct Phik0shortanalysis { auto negThisColl = negFiltTracks->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); // Check if the event contains a phi candidate - if (!eventHasPhi(posThisColl, negThisColl)) + if (!eventHasRecoPhi(posThisColl, negThisColl)) return; dataEventHist.fill(HIST("hMultiplicityPercent"), collision.centFT0M()); @@ -2523,7 +2604,7 @@ struct Phik0shortanalysis { if (furtherCheckonMcCollision && (std::abs(mcCollision.posZ()) > cutZVertex || !pwglf::isINELgtNmc(mcParticlesThisColl, 0, pdgDB))) return; - if (filterOnMcPhi && !eventHasMCPhi(mcParticlesThisColl)) + if (filterOnGenPhi && !eventHasGenPhi(mcParticlesThisColl)) return; mcEventHist.fill(HIST("hRecoMCMultiplicityPercent"), mcCollision.centFT0M()); @@ -2573,20 +2654,31 @@ struct Phik0shortanalysis { void processdNdetaWPhiMCGen(MCCollisions::iterator const& mcCollision, soa::SmallGroups const& collisions, FilteredMCTracks const& filteredMCTracks, aod::McParticles const& mcParticles) { - if (std::abs(mcCollision.posZ()) > cutZVertex) - return; if (!pwglf::isINELgtNmc(mcParticles, 0, pdgDB)) return; - if (filterOnMcPhi && !eventHasMCPhi(mcParticles)) + if (filterOnGenPhi && !eventHasGenPhi(mcParticles)) return; uint64_t numberAssocColl = 0; + std::vector zVtxs; + for (const auto& collision : collisions) { if (acceptEventQA(collision, false)) { + auto filteredMCTracksThisColl = filteredMCTracks.sliceBy(preslices.perColl, collision.globalIndex()); + + Partition posFiltMCTracks = aod::track::signed1Pt > trackConfigs.cfgCutCharge; + posFiltMCTracks.bindTable(filteredMCTracksThisColl); + Partition negFiltMCTracks = aod::track::signed1Pt < trackConfigs.cfgCutCharge; + negFiltMCTracks.bindTable(filteredMCTracksThisColl); + + if (filterOnRecoPhiWPDG && !eventHasRecoPhiWPDG(posFiltMCTracks, negFiltMCTracks)) + continue; + mcEventHist.fill(HIST("hGenMCRecoMultiplicityPercent"), mcCollision.centFT0M()); mcEventHist.fill(HIST("h2GenMCRecoVertexZvsMult"), collision.posZ(), mcCollision.centFT0M()); - auto filteredMCTracksThisColl = filteredMCTracks.sliceBy(preslices.perColl, collision.globalIndex()); + zVtxs.push_back(collision.posZ()); + for (const auto& track : filteredMCTracksThisColl) { if (trackConfigs.applyExtraPhiCuts && ((track.phi() > trackConfigs.extraPhiCuts->at(0) && track.phi() < trackConfigs.extraPhiCuts->at(1)) || track.phi() <= trackConfigs.extraPhiCuts->at(2) || track.phi() >= trackConfigs.extraPhiCuts->at(3))) @@ -2631,16 +2723,48 @@ struct Phik0shortanalysis { } mcEventHist.fill(HIST("hGenMCMultiplicityPercent"), mcCollision.centFT0M()); - if (numberAssocColl > 0) + + if (numberAssocColl > 0) { + float zVtxRef = zVtxs[0]; + if (zVtxs.size() > 1) { + for (size_t i = 1; i < zVtxs.size(); ++i) { + mcEventHist.fill(HIST("hSplitVertexZ"), zVtxs[i] - zVtxRef); + } + } + mcEventHist.fill(HIST("hGenMCAssocRecoMultiplicityPercent"), mcCollision.centFT0M()); + mcEventHist.fill(HIST("h2GenMCAssocRecoVertexZvsMult"), zVtxRef, mcCollision.centFT0M()); + } for (const auto& mcParticle : mcParticles) { if (!isGenParticleCharged(mcParticle)) continue; - mcEventHist.fill(HIST("h2GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta()); - if (numberAssocColl > 0) - mcEventHist.fill(HIST("h2GenMCEtaDistributionAssocReco"), mcCollision.centFT0M(), mcParticle.eta()); + int pid = fromPDGToEnum(mcParticle.pdgCode()); + + mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kNoGenpTVar); + if (mcParticle.pt() < trackConfigs.cMinChargedParticlePtcut) { + mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup, -10.0f * mcParticle.pt() + 2.0f); + mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown, 5.0f * mcParticle.pt() + 0.5f); + } else { + mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup); + mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown); + } + mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), pid, kNoGenpTVar); + + if (numberAssocColl > 0) { + float zVtxRef = zVtxs[0]; + + mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kNoGenpTVar); + if (mcParticle.pt() < trackConfigs.cMinChargedParticlePtcut) { + mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup, -10.0f * mcParticle.pt() + 2.0f); + mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown, 5.0f * mcParticle.pt() + 0.5f); + } else { + mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup); + mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown); + } + mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), pid, kNoGenpTVar); + } } } @@ -2684,7 +2808,7 @@ struct Phik0shortanalysis { continue; // condition to avoid double counting of pair ROOT::Math::PxPyPzMVector recPhi = recMother(track1, track2, massKa, massKa); - if (recPhi.Pt() < minPhiPt || recPhi.Pt() > maxPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt || recPhi.Pt() > phiConfigs.maxPhiPt) continue; if (std::abs(recPhi.Rapidity()) > deltaYConfigs.cfgYAcceptance) continue; @@ -2720,7 +2844,7 @@ struct Phik0shortanalysis { dataK0SHist.fill(HIST("hV0CosPA"), v0.v0cosPA()); // Filling the PID of the V0 daughters in the region of the K0 peak - if (lowMK0S < v0.mK0Short() && v0.mK0Short() < upMK0S) { + if (v0Configs.lowMK0S < v0.mK0Short() && v0.mK0Short() < v0Configs.upMK0S) { dataK0SHist.fill(HIST("hNSigmaPosPionFromK0S"), posDaughterTrack.tpcInnerParam(), posDaughterTrack.tpcNSigmaPi()); dataK0SHist.fill(HIST("hNSigmaNegPionFromK0S"), negDaughterTrack.tpcInnerParam(), negDaughterTrack.tpcNSigmaPi()); } @@ -2802,7 +2926,7 @@ struct Phik0shortanalysis { continue; // condition to avoid double counting of pair ROOT::Math::PxPyPzMVector recPhi = recMother(track1, track2, massKa, massKa); - if (recPhi.Pt() < minPhiPt || recPhi.Pt() > maxPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt || recPhi.Pt() > phiConfigs.maxPhiPt) continue; if (std::abs(recPhi.Rapidity()) > deltaYConfigs.cfgYAcceptance) continue; @@ -2947,7 +3071,7 @@ struct Phik0shortanalysis { if (!isMCMotherPhi) continue; - if (pTMother < minPhiPt || std::abs(yMother) > deltaYConfigs.cfgYAcceptance) + if (pTMother < phiConfigs.minPhiPt || std::abs(yMother) > deltaYConfigs.cfgYAcceptance) continue; mcPhiHist.fill(HIST("h3PhiMCRecoNewProc"), genmultiplicity, pTMother, yMother); @@ -3018,7 +3142,7 @@ struct Phik0shortanalysis { continue; // Phi selection - if (mcParticle.pdgCode() == o2::constants::physics::Pdg::kPhi && mcParticle.pt() >= minPhiPt) + if (mcParticle.pdgCode() == o2::constants::physics::Pdg::kPhi && mcParticle.pt() >= phiConfigs.minPhiPt) mcPhiHist.fill(HIST("h3PhiMCGenRecoCheckNewProc"), genmultiplicity, mcParticle.pt(), mcParticle.y()); // K0S selection @@ -3054,7 +3178,7 @@ struct Phik0shortanalysis { continue; // Phi selection - if (mcParticle.pdgCode() == o2::constants::physics::Pdg::kPhi && mcParticle.pt() >= minPhiPt) + if (mcParticle.pdgCode() == o2::constants::physics::Pdg::kPhi && mcParticle.pt() >= phiConfigs.minPhiPt) mcPhiHist.fill(HIST("h3PhiMCGenRecoNewProc"), genmultiplicity, mcParticle.pt(), mcParticle.y()); // K0S selection @@ -3083,7 +3207,7 @@ struct Phik0shortanalysis { continue; // Phi selection - if (mcParticle.pdgCode() == o2::constants::physics::Pdg::kPhi && mcParticle.pt() >= minPhiPt) { + if (mcParticle.pdgCode() == o2::constants::physics::Pdg::kPhi && mcParticle.pt() >= phiConfigs.minPhiPt) { mcPhiHist.fill(HIST("h3PhiMCGenNewProc"), genmultiplicity, mcParticle.pt(), mcParticle.y()); if (numberAssocColl > 0) mcPhiHist.fill(HIST("h3PhiMCGenAssocRecoNewProc"), genmultiplicity, mcParticle.pt(), mcParticle.y()); @@ -3129,7 +3253,7 @@ struct Phik0shortanalysis { continue; ROOT::Math::PxPyPzMVector recPhi = recMother(posTrack1, negTrack1, massKa, massKa); - if (recPhi.Pt() < minPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt) continue; if (std::abs(recPhi.Rapidity()) > deltaYConfigs.cfgYAcceptance) continue; @@ -3180,7 +3304,7 @@ struct Phik0shortanalysis { continue; ROOT::Math::PxPyPzMVector recPhi = recMother(posTrack1, negTrack1, massKa, massKa); - if (recPhi.Pt() < minPhiPt) + if (recPhi.Pt() < phiConfigs.minPhiPt) continue; if (std::abs(recPhi.Rapidity()) > deltaYConfigs.cfgYAcceptance) continue;