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