Skip to content

Commit fbdd9ca

Browse files
authored
[PWGLF] Fix process function dNdEtaWPhiMcGen (#12678)
1 parent 28c141f commit fbdd9ca

File tree

1 file changed

+103
-83
lines changed

1 file changed

+103
-83
lines changed

PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx

Lines changed: 103 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ struct Phik0shortanalysis {
226226
Configurable<bool> furtherCheckonMcCollision{"furtherCheckonMcCollision", true, "Further check on MC collisions"};
227227
Configurable<bool> filterOnGenPhi{"filterOnGenPhi", true, "Filter on MC Phi"};
228228
Configurable<bool> filterOnRecoPhiWPDG{"filterOnRecoPhiWPDG", true, "Filter on Reco Phi with WPDG"};
229+
Configurable<bool> fillMcPartsForAllReco{"fillMcPartsForAllReco", false, "Fill MC particles for all associated reco collisions"};
229230

230231
// Configurable for event mixing
231232
Configurable<int> cfgNoMixedEvents{"cfgNoMixedEvents", 5, "Number of mixed events per event"};
@@ -2652,118 +2653,137 @@ struct Phik0shortanalysis {
26522653

26532654
PROCESS_SWITCH(Phik0shortanalysis, processdNdetaWPhiMCReco, "Process function for dN/deta values in MCReco", false);
26542655

2655-
void processdNdetaWPhiMCGen(MCCollisions::iterator const& mcCollision, soa::SmallGroups<SimCollisions> const& collisions, FilteredMCTracks const& filteredMCTracks, aod::McParticles const& mcParticles)
2656+
void processdNdetaWPhiMCGen(MCCollisions const& mcCollisions, SimCollisions const& collisions, FilteredMCTracks const& filteredMCTracks, aod::McParticles const& mcParticles)
26562657
{
2657-
if (!pwglf::isINELgtNmc(mcParticles, 0, pdgDB))
2658-
return;
2659-
if (filterOnGenPhi && !eventHasGenPhi(mcParticles))
2660-
return;
2661-
2662-
uint64_t numberAssocColl = 0;
2663-
std::vector<float> zVtxs;
2658+
std::vector<std::vector<int>> collsGrouped(mcCollisions.size());
26642659

26652660
for (const auto& collision : collisions) {
2666-
if (acceptEventQA<true>(collision, false)) {
2667-
auto filteredMCTracksThisColl = filteredMCTracks.sliceBy(preslices.perColl, collision.globalIndex());
2668-
2669-
Partition<FilteredMCTracks> posFiltMCTracks = aod::track::signed1Pt > trackConfigs.cfgCutCharge;
2670-
posFiltMCTracks.bindTable(filteredMCTracksThisColl);
2671-
Partition<FilteredMCTracks> negFiltMCTracks = aod::track::signed1Pt < trackConfigs.cfgCutCharge;
2672-
negFiltMCTracks.bindTable(filteredMCTracksThisColl);
2661+
if (!collision.has_mcCollision())
2662+
continue;
2663+
const auto& mcCollision = collision.mcCollision_as<MCCollisions>();
2664+
collsGrouped[mcCollision.globalIndex()].push_back(collision.globalIndex());
2665+
}
26732666

2674-
if (filterOnRecoPhiWPDG && !eventHasRecoPhiWPDG(posFiltMCTracks, negFiltMCTracks))
2675-
continue;
2667+
for (const auto& mcCollision : mcCollisions) {
2668+
auto mcParticlesThisMcColl = mcParticles.sliceBy(preslices.perMCColl, mcCollision.globalIndex());
26762669

2677-
mcEventHist.fill(HIST("hGenMCRecoMultiplicityPercent"), mcCollision.centFT0M());
2678-
mcEventHist.fill(HIST("h2GenMCRecoVertexZvsMult"), collision.posZ(), mcCollision.centFT0M());
2670+
if (!pwglf::isINELgtNmc(mcParticlesThisMcColl, 0, pdgDB))
2671+
return;
2672+
if (filterOnGenPhi && !eventHasGenPhi(mcParticlesThisMcColl))
2673+
return;
26792674

2680-
zVtxs.push_back(collision.posZ());
2675+
uint64_t numberAssocColl = 0;
2676+
std::vector<float> zVtxs;
26812677

2682-
for (const auto& track : filteredMCTracksThisColl) {
2683-
if (trackConfigs.applyExtraPhiCuts && ((track.phi() > trackConfigs.extraPhiCuts->at(0) && track.phi() < trackConfigs.extraPhiCuts->at(1)) ||
2684-
track.phi() <= trackConfigs.extraPhiCuts->at(2) || track.phi() >= trackConfigs.extraPhiCuts->at(3)))
2685-
continue;
2686-
if (!track.has_mcParticle())
2687-
continue;
2678+
auto& collIndexesThisMcColl = collsGrouped[mcCollision.globalIndex()];
26882679

2689-
auto mcTrack = track.mcParticle();
2690-
if (!mcTrack.isPhysicalPrimary() || std::abs(mcTrack.eta()) > trackConfigs.etaMax)
2691-
continue;
2680+
for (const auto& collisionIndex : collIndexesThisMcColl) {
2681+
auto collision = collisions.rawIteratorAt(collisionIndex);
26922682

2693-
mcEventHist.fill(HIST("h6RecoCheckMCEtaDistribution"), collision.posZ(), mcCollision.centFT0M(), mcTrack.eta(), mcTrack.phi(), kSpAll, kGlobalplusITSonly);
2694-
if (track.hasTPC()) {
2695-
mcEventHist.fill(HIST("h6RecoCheckMCEtaDistribution"), collision.posZ(), mcCollision.centFT0M(), mcTrack.eta(), mcTrack.phi(), kSpAll, kGlobalonly);
2696-
} else {
2697-
mcEventHist.fill(HIST("h6RecoCheckMCEtaDistribution"), collision.posZ(), mcCollision.centFT0M(), mcTrack.eta(), mcTrack.phi(), kSpAll, kITSonly);
2698-
}
2683+
if (acceptEventQA<true>(collision, false)) {
2684+
auto filteredMCTracksThisColl = filteredMCTracks.sliceBy(preslices.perColl, collision.globalIndex());
26992685

2700-
int pid = fromPDGToEnum(mcTrack.pdgCode());
2701-
mcEventHist.fill(HIST("h6RecoCheckMCEtaDistribution"), collision.posZ(), mcCollision.centFT0M(), mcTrack.eta(), mcTrack.phi(), pid, kGlobalplusITSonly);
2702-
}
2686+
Partition<FilteredMCTracks> posFiltMCTracks = aod::track::signed1Pt > trackConfigs.cfgCutCharge;
2687+
posFiltMCTracks.bindTable(filteredMCTracksThisColl);
2688+
Partition<FilteredMCTracks> negFiltMCTracks = aod::track::signed1Pt < trackConfigs.cfgCutCharge;
2689+
negFiltMCTracks.bindTable(filteredMCTracksThisColl);
27032690

2704-
for (const auto& mcParticle : mcParticles) {
2705-
if (!isGenParticleCharged(mcParticle))
2691+
if (filterOnRecoPhiWPDG && !eventHasRecoPhiWPDG(posFiltMCTracks, negFiltMCTracks))
27062692
continue;
27072693

2708-
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kNoGenpTVar);
2709-
if (mcParticle.pt() < trackConfigs.cMinChargedParticlePtcut) {
2710-
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup, -10.0f * mcParticle.pt() + 2.0f);
2711-
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown, 5.0f * mcParticle.pt() + 0.5f);
2712-
} else {
2713-
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup);
2714-
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown);
2715-
}
2694+
mcEventHist.fill(HIST("hGenMCRecoMultiplicityPercent"), mcCollision.centFT0M());
2695+
mcEventHist.fill(HIST("h2GenMCRecoVertexZvsMult"), collision.posZ(), mcCollision.centFT0M());
27162696

2717-
int pid = fromPDGToEnum(mcParticle.pdgCode());
2718-
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), pid, kNoGenpTVar);
2719-
}
2697+
zVtxs.push_back(collision.posZ());
27202698

2721-
numberAssocColl++;
2722-
}
2723-
}
2699+
for (const auto& track : filteredMCTracksThisColl) {
2700+
if (trackConfigs.applyExtraPhiCuts && ((track.phi() > trackConfigs.extraPhiCuts->at(0) && track.phi() < trackConfigs.extraPhiCuts->at(1)) ||
2701+
track.phi() <= trackConfigs.extraPhiCuts->at(2) || track.phi() >= trackConfigs.extraPhiCuts->at(3)))
2702+
continue;
2703+
if (!track.has_mcParticle())
2704+
continue;
27242705

2725-
mcEventHist.fill(HIST("hGenMCMultiplicityPercent"), mcCollision.centFT0M());
2706+
auto mcTrack = track.mcParticle();
2707+
if (!mcTrack.isPhysicalPrimary() || std::abs(mcTrack.eta()) > trackConfigs.etaMax)
2708+
continue;
27262709

2727-
if (numberAssocColl > 0) {
2728-
float zVtxRef = zVtxs[0];
2729-
if (zVtxs.size() > 1) {
2730-
for (size_t i = 1; i < zVtxs.size(); ++i) {
2731-
mcEventHist.fill(HIST("hSplitVertexZ"), zVtxs[i] - zVtxRef);
2732-
}
2733-
}
2710+
mcEventHist.fill(HIST("h6RecoCheckMCEtaDistribution"), collision.posZ(), mcCollision.centFT0M(), mcTrack.eta(), mcTrack.phi(), kSpAll, kGlobalplusITSonly);
2711+
if (track.hasTPC()) {
2712+
mcEventHist.fill(HIST("h6RecoCheckMCEtaDistribution"), collision.posZ(), mcCollision.centFT0M(), mcTrack.eta(), mcTrack.phi(), kSpAll, kGlobalonly);
2713+
} else {
2714+
mcEventHist.fill(HIST("h6RecoCheckMCEtaDistribution"), collision.posZ(), mcCollision.centFT0M(), mcTrack.eta(), mcTrack.phi(), kSpAll, kITSonly);
2715+
}
27342716

2735-
mcEventHist.fill(HIST("hGenMCAssocRecoMultiplicityPercent"), mcCollision.centFT0M());
2736-
mcEventHist.fill(HIST("h2GenMCAssocRecoVertexZvsMult"), zVtxRef, mcCollision.centFT0M());
2737-
}
2717+
int pid = fromPDGToEnum(mcTrack.pdgCode());
2718+
mcEventHist.fill(HIST("h6RecoCheckMCEtaDistribution"), collision.posZ(), mcCollision.centFT0M(), mcTrack.eta(), mcTrack.phi(), pid, kGlobalplusITSonly);
2719+
}
27382720

2739-
for (const auto& mcParticle : mcParticles) {
2740-
if (!isGenParticleCharged(mcParticle))
2741-
continue;
2721+
if (fillMcPartsForAllReco) {
2722+
for (const auto& mcParticle : mcParticlesThisMcColl) {
2723+
if (!isGenParticleCharged(mcParticle))
2724+
continue;
2725+
2726+
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kNoGenpTVar);
2727+
if (mcParticle.pt() < trackConfigs.cMinChargedParticlePtcut) {
2728+
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup, -10.0f * mcParticle.pt() + 2.0f);
2729+
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown, 5.0f * mcParticle.pt() + 0.5f);
2730+
} else {
2731+
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup);
2732+
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown);
2733+
}
27422734

2743-
int pid = fromPDGToEnum(mcParticle.pdgCode());
2735+
int pid = fromPDGToEnum(mcParticle.pdgCode());
2736+
mcEventHist.fill(HIST("h6GenMCEtaDistributionRecoCheck"), collision.posZ(), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), pid, kNoGenpTVar);
2737+
}
2738+
}
27442739

2745-
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kNoGenpTVar);
2746-
if (mcParticle.pt() < trackConfigs.cMinChargedParticlePtcut) {
2747-
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup, -10.0f * mcParticle.pt() + 2.0f);
2748-
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown, 5.0f * mcParticle.pt() + 0.5f);
2749-
} else {
2750-
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup);
2751-
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown);
2740+
numberAssocColl++;
2741+
}
27522742
}
2753-
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), pid, kNoGenpTVar);
2743+
2744+
mcEventHist.fill(HIST("hGenMCMultiplicityPercent"), mcCollision.centFT0M());
27542745

27552746
if (numberAssocColl > 0) {
27562747
float zVtxRef = zVtxs[0];
2748+
if (zVtxs.size() > 1) {
2749+
for (size_t i = 1; i < zVtxs.size(); ++i) {
2750+
mcEventHist.fill(HIST("hSplitVertexZ"), zVtxs[i] - zVtxRef);
2751+
}
2752+
}
2753+
2754+
mcEventHist.fill(HIST("hGenMCAssocRecoMultiplicityPercent"), mcCollision.centFT0M());
2755+
mcEventHist.fill(HIST("h2GenMCAssocRecoVertexZvsMult"), zVtxRef, mcCollision.centFT0M());
2756+
}
2757+
2758+
for (const auto& mcParticle : mcParticlesThisMcColl) {
2759+
if (!isGenParticleCharged(mcParticle))
2760+
continue;
27572761

2758-
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kNoGenpTVar);
2762+
int pid = fromPDGToEnum(mcParticle.pdgCode());
2763+
2764+
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kNoGenpTVar);
27592765
if (mcParticle.pt() < trackConfigs.cMinChargedParticlePtcut) {
2760-
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup, -10.0f * mcParticle.pt() + 2.0f);
2761-
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown, 5.0f * mcParticle.pt() + 0.5f);
2766+
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup, -10.0f * mcParticle.pt() + 2.0f);
2767+
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown, 5.0f * mcParticle.pt() + 0.5f);
27622768
} else {
2763-
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup);
2764-
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown);
2769+
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup);
2770+
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown);
2771+
}
2772+
mcEventHist.fill(HIST("h5GenMCEtaDistribution"), mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), pid, kNoGenpTVar);
2773+
2774+
if (numberAssocColl > 0) {
2775+
float zVtxRef = zVtxs[0];
2776+
2777+
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kNoGenpTVar);
2778+
if (mcParticle.pt() < trackConfigs.cMinChargedParticlePtcut) {
2779+
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup, -10.0f * mcParticle.pt() + 2.0f);
2780+
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown, 5.0f * mcParticle.pt() + 0.5f);
2781+
} else {
2782+
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTup);
2783+
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), kSpAll, kGenpTdown);
2784+
}
2785+
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), pid, kNoGenpTVar);
27652786
}
2766-
mcEventHist.fill(HIST("h6GenMCEtaDistributionAssocReco"), zVtxRef, mcCollision.centFT0M(), mcParticle.eta(), mcParticle.phi(), pid, kNoGenpTVar);
27672787
}
27682788
}
27692789
}

0 commit comments

Comments
 (0)