@@ -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