@@ -88,11 +88,14 @@ struct ThreeParticleCorrelations {
8888 aod::pidTPCPi, aod::pidTPCKa, aod::pidTPCPr,
8989 aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr, aod::pidTOFbeta>>;
9090
91- // Table aliases - MC
91+ // Table aliases - MC Gen
9292 using MyFilteredMCGenCollisions = soa::Filtered<soa::Join<aod::McCollisions, aod::McCollsExtra>>;
9393 using MyFilteredMCGenCollision = MyFilteredMCGenCollisions::iterator;
9494 using MyFilteredMCParticles = soa::Filtered<aod::McParticles>;
95- using MyFilteredMCRecCollision = soa::Filtered<soa::Join<aod::Collisions, aod::CentFT0Cs, aod::EvSels, aod::McCollisionLabels>>::iterator;
95+
96+ // Table aliases - MC Rec
97+ using MCRecCollisions = soa::Join<aod::Collisions, aod::CentFT0Cs, aod::EvSels, aod::McCollisionLabels>;
98+ using MyFilteredMCRecCollisions = soa::Filtered<MCRecCollisions>;
9699 using MyFilteredMCV0s = soa::Filtered<soa::Join<aod::V0Datas, aod::McV0Labels>>;
97100 using MyFilteredMCTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::McTrackLabels,
98101 aod::pidTPCPi, aod::pidTPCKa, aod::pidTPCPr,
@@ -110,6 +113,7 @@ struct ThreeParticleCorrelations {
110113 // Mixed-events binning policy
111114 SliceCache cache;
112115 Preslice<MyFilteredMCParticles> perCol = aod::mcparticle::mcCollisionId;
116+ PresliceUnsorted<aod::McCollisionLabels> perMCCol = aod::mccollisionlabel::mcCollisionId;
113117
114118 ConfigurableAxis confCentBins{" confCentBins" , {VARIABLE_WIDTH, 0 .0f , 10 .0f , 20 .0f , 30 .0f , 40 .0f , 50 .0f , 60 .0f , 70 .0f , 80 .0f , 90 .0f }, " ME Centrality binning" };
115119 ConfigurableAxis confZvtxBins{" confZvtxBins" , {VARIABLE_WIDTH, -7 .0f , -5 .0f , -3 .0f , -1 .0f , 0 .0f , 1 .0f , 3 .0f , 5 .0f , 7 .0f }, " ME Zvtx binning" };
@@ -417,7 +421,6 @@ struct ThreeParticleCorrelations {
417421
418422 // Start of the Mixed-Event correlations
419423 for (const auto & [coll_1, v0_1, coll_2, track_2] : pairData) {
420-
421424 if (!acceptEvent (coll_1, false ) || !acceptEvent (coll_2, false )) {
422425 return ;
423426 }
@@ -481,9 +484,17 @@ struct ThreeParticleCorrelations {
481484 // End of the Mixed-Event Correlations
482485 }
483486
484- void processMCSame (MyFilteredMCGenCollision const & collision, MyFilteredMCParticles const &)
487+ void processMCSame (MyFilteredMCGenCollision const & collision, MyFilteredMCParticles const &, soa::SmallGroups<MCRecCollisions> const & recCollisions )
485488 {
486489
490+ if (recCollisions.size () == 1 ) {
491+ for (const auto & recCollision : recCollisions) {
492+ if (!acceptEvent (recCollision, false )) {
493+ return ;
494+ }
495+ }
496+ }
497+
487498 rQARegistry.fill (HIST (" hEventCentrality_MC" ), collision.bestCollisionCentFT0C ());
488499 auto groupMCTriggers = mcTriggers->sliceByCached (aod::mcparticle::mcCollisionId, collision.globalIndex (), cache);
489500 auto groupMCAssociates = mcAssociates->sliceByCached (aod::mcparticle::mcCollisionId, collision.globalIndex (), cache);
@@ -541,14 +552,28 @@ struct ThreeParticleCorrelations {
541552 // End of the MC Same-Event Correlations
542553 }
543554
544- void processMCMixed (MyFilteredMCGenCollisions const &, MyFilteredMCParticles const &)
555+ void processMCMixed (MyFilteredMCGenCollisions const &, MyFilteredMCParticles const &, MyFilteredMCRecCollisions const & recCollisions )
545556 {
546557
547558 // Start of the MC Mixed-events Correlations
548559 for (const auto & [coll_1, v0_1, coll_2, particle_2] : pairMC) {
560+ auto recCollsA1 = recCollisions.sliceBy (perMCCol, coll_1.globalIndex ());
561+ auto recCollsA2 = recCollisions.sliceBy (perMCCol, coll_2.globalIndex ());
562+ if (recCollsA1.size () == 1 && recCollsA2.size () == 1 ) {
563+ for (const auto & recColl_1 : recCollsA1) {
564+ if (!acceptEvent (recColl_1, false )) {
565+ return ;
566+ }
567+ }
568+ for (const auto & recColl_2 : recCollsA2) {
569+ if (!acceptEvent (recColl_2, false )) {
570+ return ;
571+ }
572+ }
573+ }
574+
549575 auto groupMCTriggers = mcTriggers->sliceByCached (aod::mcparticle::mcCollisionId, coll_1.globalIndex (), cache);
550576 auto groupMCAssociates = mcAssociates->sliceByCached (aod::mcparticle::mcCollisionId, coll_2.globalIndex (), cache);
551-
552577 for (const auto & [trigger, associate] : soa::combinations (soa::CombinationsFullIndexPolicy (groupMCTriggers, groupMCAssociates))) {
553578 if (trigger.isPhysicalPrimary () && associate.isPhysicalPrimary ()) {
554579
@@ -579,9 +604,17 @@ struct ThreeParticleCorrelations {
579604 // End of the MC Mixed-events Correlations
580605 }
581606
582- void processMCGen (MyFilteredMCGenCollision const & collision, MyFilteredMCParticles const &)
607+ void processMCGen (MyFilteredMCGenCollision const & collision, MyFilteredMCParticles const &, soa::SmallGroups<MCRecCollisions> const & recCollisions )
583608 {
584609
610+ if (recCollisions.size () == 1 ) {
611+ for (const auto & recCollision : recCollisions) {
612+ if (!acceptEvent (recCollision, false )) {
613+ return ;
614+ }
615+ }
616+ }
617+
585618 auto groupMCTracks = mcTracks->sliceByCached (aod::mcparticle::mcCollisionId, collision.globalIndex (), cache);
586619 auto groupMCV0s = mcV0s->sliceByCached (aod::mcparticle::mcCollisionId, collision.globalIndex (), cache);
587620
@@ -621,7 +654,7 @@ struct ThreeParticleCorrelations {
621654 // End of the Monte-Carlo generated QA
622655 }
623656
624- void processMCRec (MyFilteredMCRecCollision const & collision, MyFilteredMCV0s const & v0s, MyFilteredMCTracks const & tracks, aod::McCollisions const &, aod::McParticles const &)
657+ void processMCRec (MyFilteredMCRecCollisions::iterator const & collision, MyFilteredMCV0s const & v0s, MyFilteredMCTracks const & tracks, aod::McCollisions const &, aod::McParticles const &)
625658 {
626659
627660 if (!acceptEvent (collision, false ) || !collision.has_mcCollision ()) {
0 commit comments