Skip to content

Commit 5e9923c

Browse files
committed
Fix process function for particle efficiency
1 parent c5d5fb5 commit 5e9923c

File tree

1 file changed

+99
-84
lines changed

1 file changed

+99
-84
lines changed

PWGLF/Tasks/Strangeness/phiStrangeCorrelation.cxx

Lines changed: 99 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -283,9 +283,9 @@ struct PhiStrangenessCorrelation {
283283

284284
// Preslice for manual slicing
285285
struct : PresliceGroup {
286-
// Preslice<SimCollisions> collPerMCCollision = aod::mccollisionlabel::mcCollisionId;
287286
Preslice<FullMCV0s> v0PerCollision = aod::v0::collisionId;
288287
Preslice<FullMCTracks> trackPerCollision = aod::track::collisionId;
288+
Preslice<aod::McParticles> mcPartPerMcCollision = aod::mcparticle::mcCollisionId;
289289
// Preslice<aod::PhimesonCandidatesData> phiCandDataPerCollision = aod::lf_selection_phi_candidate::collisionId;
290290
// PresliceUnsorted<SimCollisions> collPerMCCollision = aod::mccollisionlabel::mcCollisionId;
291291
PresliceUnsorted<aod::PhimesonCandidatesMcReco> phiCandPerCollision = aod::lf_selection_phi_candidate::collisionId;
@@ -675,118 +675,133 @@ struct PhiStrangenessCorrelation {
675675

676676
PROCESS_SWITCH(PhiStrangenessCorrelation, processPhiPionDataME, "Process function for Phi-Pion Deltay and Deltaphi 2D Correlations in Data ME", false);
677677

678-
void processParticleEfficiency(MCCollisions::iterator const& mcCollision, soa::SmallGroups<SimCollisions> const& collisions, FullMCTracks const& fullMCTracks, FullMCV0s const& V0s, V0DauMCTracks const&, aod::McParticles const& mcParticles, aod::PhimesonCandidatesMcReco const& phiCandidatesMcReco)
678+
void processParticleEfficiency(MCCollisions const& mcCollisions, SimCollisions const& collisions, FullMCTracks const& fullMCTracks, FullMCV0s const& V0s, V0DauMCTracks const&, aod::McParticles const& mcParticles, aod::PhimesonCandidatesMcReco const& phiCandidatesMcReco)
679679
{
680-
uint16_t numberAssocColls{0};
681-
std::vector<float> zVtxs;
682-
683-
// const auto collsThisMCColl = collisions.sliceBy(preslices.collPerMCCollision, mcCollision.globalIndex());
680+
std::vector<std::vector<int>> collsGrouped(mcCollisions.size());
684681

685682
for (const auto& collision : collisions) {
686-
histos.fill(HIST("event/hRecoMCMultiplicityPercent"), mcCollision.centFT0M());
687-
histos.fill(HIST("event/h2RecoMCVertexZvsMult"), collision.posZ(), mcCollision.centFT0M());
683+
if (!collision.has_mcCollision())
684+
continue;
685+
const auto& mcCollision = collision.mcCollision_as<MCCollisions>();
686+
collsGrouped[mcCollision.globalIndex()].push_back(collision.globalIndex());
687+
}
688+
689+
for (const auto& mcCollision : mcCollisions) {
690+
uint16_t numberAssocColls{0};
691+
std::vector<float> zVtxs;
692+
693+
const auto& collIndexesThisMcColl = collsGrouped[mcCollision.globalIndex()];
688694

689-
zVtxs.push_back(collision.posZ());
695+
for (const auto& collIndex : collIndexesThisMcColl) {
696+
const auto& collision = collisions.rawIteratorAt(collIndex);
690697

691-
if (selectionType == 0) {
692-
const auto phiCandidatesThisColl = phiCandidatesMcReco.sliceBy(preslices.phiCandPerCollision, collision.globalIndex());
693-
for (const auto& phiCand : phiCandidatesThisColl) {
694-
histos.fill(HIST("phi/h4PhiMCReco"), collision.posZ(), mcCollision.centFT0M(), phiCand.pt(), phiCand.y());
698+
histos.fill(HIST("event/hRecoMCMultiplicityPercent"), mcCollision.centFT0M());
699+
histos.fill(HIST("event/h2RecoMCVertexZvsMult"), collision.posZ(), mcCollision.centFT0M());
700+
701+
zVtxs.push_back(collision.posZ());
702+
703+
if (selectionType == 0) {
704+
const auto phiCandidatesThisColl = phiCandidatesMcReco.sliceBy(preslices.phiCandPerCollision, collision.globalIndex());
705+
for (const auto& phiCand : phiCandidatesThisColl) {
706+
histos.fill(HIST("phi/h4PhiMCReco"), collision.posZ(), mcCollision.centFT0M(), phiCand.pt(), phiCand.y());
707+
}
695708
}
696-
}
697709

698-
const auto v0sThisColl = V0s.sliceBy(preslices.v0PerCollision, collision.globalIndex());
699-
const auto fullMCTracksThisColl = fullMCTracks.sliceBy(preslices.trackPerCollision, collision.globalIndex());
710+
const auto v0sThisColl = V0s.sliceBy(preslices.v0PerCollision, collision.globalIndex());
711+
const auto fullMCTracksThisColl = fullMCTracks.sliceBy(preslices.trackPerCollision, collision.globalIndex());
700712

701-
for (const auto& v0 : v0sThisColl) {
702-
if (!selectionV0<true>(v0, collision))
703-
continue;
713+
for (const auto& v0 : v0sThisColl) {
714+
if (!selectionV0<true>(v0, collision))
715+
continue;
704716

705-
if (!v0.has_mcParticle())
706-
continue;
717+
if (!v0.has_mcParticle())
718+
continue;
707719

708-
const auto& v0McParticle = mcParticles.rawIteratorAt(v0.mcParticleId());
709-
if (std::abs(v0McParticle.pdgCode()) != PDG_t::kK0Short || !v0McParticle.isPhysicalPrimary())
710-
continue;
720+
const auto& v0McParticle = mcParticles.rawIteratorAt(v0.mcParticleId());
721+
if (std::abs(v0McParticle.pdgCode()) != PDG_t::kK0Short || !v0McParticle.isPhysicalPrimary())
722+
continue;
711723

712-
histos.fill(HIST("k0s/h4K0SMCReco"), collision.posZ(), mcCollision.centFT0M(), v0McParticle.pt(), v0McParticle.y());
713-
}
724+
histos.fill(HIST("k0s/h4K0SMCReco"), collision.posZ(), mcCollision.centFT0M(), v0McParticle.pt(), v0McParticle.y());
725+
}
714726

715-
for (const auto& track : fullMCTracksThisColl) {
716-
if (!selectionPion(track))
717-
continue;
727+
for (const auto& track : fullMCTracksThisColl) {
728+
if (!selectionPion(track))
729+
continue;
718730

719-
if (!track.has_mcParticle())
720-
continue;
731+
if (!track.has_mcParticle())
732+
continue;
721733

722-
const auto& trackMcParticle = mcParticles.rawIteratorAt(track.mcParticleId());
723-
if (std::abs(trackMcParticle.pdgCode()) != PDG_t::kPiPlus)
724-
continue;
734+
const auto& trackMcParticle = mcParticles.rawIteratorAt(track.mcParticleId());
735+
if (std::abs(trackMcParticle.pdgCode()) != PDG_t::kPiPlus)
736+
continue;
725737

726-
if (trackMcParticle.isPhysicalPrimary()) {
727-
histos.fill(HIST("pi/h2RecMCDCAxyPrimPi"), track.pt(), track.dcaXY());
728-
} else {
729-
if (trackMcParticle.getProcess() == TMCProcess::kPDecay) { // Selection of secondary pions from weak decay
730-
histos.fill(HIST("pi/h2RecMCDCAxySecWeakDecayPi"), track.pt(), track.dcaXY());
731-
} else { // Selection of secondary pions from material interactions
732-
histos.fill(HIST("pi/h2RecMCDCAxySecMaterialPi"), track.pt(), track.dcaXY());
738+
if (trackMcParticle.isPhysicalPrimary()) {
739+
histos.fill(HIST("pi/h2RecMCDCAxyPrimPi"), track.pt(), track.dcaXY());
740+
} else {
741+
if (trackMcParticle.getProcess() == TMCProcess::kPDecay) { // Selection of secondary pions from weak decay
742+
histos.fill(HIST("pi/h2RecMCDCAxySecWeakDecayPi"), track.pt(), track.dcaXY());
743+
} else { // Selection of secondary pions from material interactions
744+
histos.fill(HIST("pi/h2RecMCDCAxySecMaterialPi"), track.pt(), track.dcaXY());
745+
}
746+
continue;
733747
}
734-
continue;
748+
749+
histos.fill(HIST("pi/h4PiMCReco"), collision.posZ(), mcCollision.centFT0M(), trackMcParticle.pt(), trackMcParticle.y());
735750
}
736751

737-
histos.fill(HIST("pi/h4PiMCReco"), collision.posZ(), mcCollision.centFT0M(), trackMcParticle.pt(), trackMcParticle.y());
752+
numberAssocColls++;
738753
}
739754

740-
numberAssocColls++;
741-
}
742-
743-
histos.fill(HIST("event/hGenMCMultiplicityPercent"), mcCollision.centFT0M());
755+
histos.fill(HIST("event/hGenMCMultiplicityPercent"), mcCollision.centFT0M());
744756

745-
const bool hasAssoc = (numberAssocColls > 0);
746-
const float zVtxRef = hasAssoc ? zVtxs[0] : 0.0f;
757+
const bool hasAssoc = (numberAssocColls > 0);
758+
const float zVtxRef = hasAssoc ? zVtxs[0] : 0.0f;
747759

748-
//////TOBECHANGED//////
749-
if (hasAssoc) {
750-
if (zVtxs.size() > 1) {
751-
for (size_t i = 1; i < zVtxs.size(); ++i) {
752-
histos.fill(HIST("event/hSplitVertexZ"), zVtxs[i] - zVtxRef);
760+
//////TOBECHANGED//////
761+
if (hasAssoc) {
762+
if (zVtxs.size() > 1) {
763+
for (size_t i = 1; i < zVtxs.size(); ++i) {
764+
histos.fill(HIST("event/hSplitVertexZ"), zVtxs[i] - zVtxRef);
765+
}
753766
}
767+
768+
histos.fill(HIST("event/hGenMCAssocRecoMultiplicityPercent"), mcCollision.centFT0M());
769+
histos.fill(HIST("event/h2GenMCAssocRecoVertexZvsMult"), zVtxRef, mcCollision.centFT0M());
754770
}
771+
///////////////////////
755772

756-
histos.fill(HIST("event/hGenMCAssocRecoMultiplicityPercent"), mcCollision.centFT0M());
757-
histos.fill(HIST("event/h2GenMCAssocRecoVertexZvsMult"), zVtxRef, mcCollision.centFT0M());
758-
}
759-
///////////////////////
773+
const auto mcParticlesThisMcColl = mcParticles.sliceBy(preslices.mcPartPerMcCollision, mcCollision.globalIndex());
760774

761-
auto inYAcceptance = [&](const auto& mcParticle) {
762-
return std::abs(mcParticle.y()) <= yConfigs.cfgYAcceptance;
763-
};
775+
auto inYAcceptance = [&](const auto& mcParticle) {
776+
return std::abs(mcParticle.y()) <= yConfigs.cfgYAcceptance;
777+
};
764778

765-
auto fillGenHistos = [&](auto h3Key, auto h4Key, const auto& mcParticle) {
766-
histos.fill(h3Key, mcCollision.centFT0M(), mcParticle.pt(), mcParticle.y());
767-
if (hasAssoc)
768-
histos.fill(h4Key, zVtxRef, mcCollision.centFT0M(), mcParticle.pt(), mcParticle.y());
769-
};
779+
auto fillGenHistos = [&](auto h3Key, auto h4Key, const auto& mcParticle) {
780+
histos.fill(h3Key, mcCollision.centFT0M(), mcParticle.pt(), mcParticle.y());
781+
if (hasAssoc)
782+
histos.fill(h4Key, zVtxRef, mcCollision.centFT0M(), mcParticle.pt(), mcParticle.y());
783+
};
770784

771-
for (const auto& mcParticle : mcParticles /*| std::views::filter(inYAcceptance)*/) {
772-
if (!inYAcceptance(mcParticle))
773-
continue;
785+
for (const auto& mcParticle : mcParticlesThisMcColl /*| std::views::filter(inYAcceptance)*/) {
786+
if (!inYAcceptance(mcParticle))
787+
continue;
774788

775-
switch (std::abs(mcParticle.pdgCode())) {
776-
case o2::constants::physics::Pdg::kPhi:
777-
if (selectionType == 0 && mcParticle.pt() >= phiConfigs.minPhiPt)
778-
fillGenHistos(HIST("phi/h3PhiMCGen"), HIST("phi/h4PhiMCGenAssocReco"), mcParticle);
779-
break;
780-
case PDG_t::kK0Short:
781-
if (mcParticle.isPhysicalPrimary() && mcParticle.pt() >= v0Configs.v0SettingMinPt)
782-
fillGenHistos(HIST("k0s/h3K0SMCGen"), HIST("k0s/h4K0SMCGenAssocReco"), mcParticle);
783-
break;
784-
case PDG_t::kPiPlus:
785-
if (mcParticle.isPhysicalPrimary() && mcParticle.pt() >= trackConfigs.cMinPionPtcut)
786-
fillGenHistos(HIST("pi/h3PiMCGen"), HIST("pi/h4PiMCGenAssocReco"), mcParticle);
787-
break;
788-
default:
789-
break;
789+
switch (std::abs(mcParticle.pdgCode())) {
790+
case o2::constants::physics::Pdg::kPhi:
791+
if (selectionType == 0 && mcParticle.pt() >= phiConfigs.minPhiPt)
792+
fillGenHistos(HIST("phi/h3PhiMCGen"), HIST("phi/h4PhiMCGenAssocReco"), mcParticle);
793+
break;
794+
case PDG_t::kK0Short:
795+
if (mcParticle.isPhysicalPrimary() && mcParticle.pt() >= v0Configs.v0SettingMinPt)
796+
fillGenHistos(HIST("k0s/h3K0SMCGen"), HIST("k0s/h4K0SMCGenAssocReco"), mcParticle);
797+
break;
798+
case PDG_t::kPiPlus:
799+
if (mcParticle.isPhysicalPrimary() && mcParticle.pt() >= trackConfigs.cMinPionPtcut)
800+
fillGenHistos(HIST("pi/h3PiMCGen"), HIST("pi/h4PiMCGenAssocReco"), mcParticle);
801+
break;
802+
default:
803+
break;
804+
}
790805
}
791806
}
792807
}

0 commit comments

Comments
 (0)