@@ -790,7 +790,7 @@ struct femtoUniversePairTaskTrackCascadeExtended {
790790 }
791791 PROCESS_SWITCH (femtoUniversePairTaskTrackCascadeExtended, processMixedEventCascBitmask, " Enable processing mixed event for cascade - cascade using bitmask for PID" , false );
792792
793- // MC truth
793+ // MC truth for track - cascade
794794 void processSameEventMCgen (const FilteredFDCollision& col, [[maybe_unused]] const aod::FDParticles& parts)
795795 {
796796 const int multCol = confUseCent ? col.multV0M () : col.multNtr ();
@@ -835,6 +835,44 @@ struct femtoUniversePairTaskTrackCascadeExtended {
835835 }
836836 PROCESS_SWITCH (femtoUniversePairTaskTrackCascadeExtended, processSameEventMCgen, " Enable processing same event MC truth for track - cascade" , false );
837837
838+ // MC truth for cascade - cascade
839+ void processSameEventCascMCgen (const FilteredFDCollision& col, [[maybe_unused]] const aod::FDParticles& parts)
840+ {
841+ const int multCol = confUseCent ? col.multV0M () : col.multNtr ();
842+
843+ auto groupPartsTwo = partsTwoMCgenBasic->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
844+
845+ eventHisto.fillQA (col);
846+
847+ for (const auto & part : groupPartsTwo) {
848+ int pdgCode = static_cast <int >(part.pidCut ());
849+ if ((confCascType1 == 0 && pdgCode != kOmegaMinus ) || (confCascType1 == 2 && pdgCode != kOmegaPlusBar ) || (confCascType1 == 1 && pdgCode != kXiMinus ) || (confCascType1 == 3 && pdgCode != kXiPlusBar ))
850+ continue ;
851+
852+ cascQAHistos.fillQA <false , false >(part);
853+
854+ auto pairProcessFunc = [&](auto & p1, auto & p2) -> void {
855+ int pdgCodeCasc1 = static_cast <int >(p1.pidCut ());
856+ if ((confCascType1 == 0 && pdgCodeCasc1 != kOmegaMinus ) || (confCascType1 == 2 && pdgCodeCasc1 != kOmegaPlusBar ) || (confCascType1 == 1 && pdgCodeCasc1 != kXiMinus ) || (confCascType1 == 3 && pdgCodeCasc1 != kXiPlusBar ))
857+ return ;
858+ int pdgCodeCasc2 = static_cast <int >(p2.pidCut ());
859+ if ((confCascType2 == 0 && pdgCodeCasc2 != kOmegaMinus ) || (confCascType2 == 2 && pdgCodeCasc2 != kOmegaPlusBar ) || (confCascType2 == 1 && pdgCodeCasc2 != kXiMinus ) || (confCascType2 == 3 && pdgCodeCasc2 != kXiPlusBar ))
860+ return ;
861+ sameEventCont.setPair <false >(p1, p2, multCol, confUse3D, 1 .0f );
862+ };
863+
864+ if (confCascType1 == confCascType2) {
865+ for (const auto & [p1, p2] : combinations (CombinationsStrictlyUpperIndexPolicy (groupPartsTwo, groupPartsTwo)))
866+ pairProcessFunc (p1, p2);
867+ } else {
868+ for (const auto & [p1, p2] : combinations (CombinationsFullIndexPolicy (groupPartsTwo, groupPartsTwo)))
869+ pairProcessFunc (p1, p2);
870+ }
871+ }
872+ }
873+ PROCESS_SWITCH (femtoUniversePairTaskTrackCascadeExtended, processSameEventCascMCgen, " Enable processing same event MC truth for cascade - cascade" , false );
874+
875+ // MC truth for track - cascade
838876 void processMixedEventMCgen (const FilteredFDCollisions& cols, [[maybe_unused]] const aod::FDParticles& parts)
839877 {
840878 ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinning{{confVtxBins, confMultBins}, true };
@@ -863,6 +901,36 @@ struct femtoUniversePairTaskTrackCascadeExtended {
863901 }
864902 PROCESS_SWITCH (femtoUniversePairTaskTrackCascadeExtended, processMixedEventMCgen, " Enable processing mixed event MC truth for track - cascade" , false );
865903
904+ // MC truth for cascade - cascade
905+ void processMixedEventCascMCgen (const FilteredFDCollisions& cols, [[maybe_unused]] const aod::FDParticles& parts)
906+ {
907+ ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinning{{confVtxBins, confMultBins}, true };
908+
909+ for (const auto & [collision1, collision2] : soa::selfCombinations (colBinning, 5 , -1 , cols, cols)) {
910+ const int multCol = confUseCent ? collision1.multV0M () : collision1.multNtr ();
911+
912+ auto groupPartsOne = partsTwoMCgenBasic->sliceByCached (aod::femtouniverseparticle::fdCollisionId, collision1.globalIndex (), cache);
913+ auto groupPartsTwo = partsTwoMCgenBasic->sliceByCached (aod::femtouniverseparticle::fdCollisionId, collision2.globalIndex (), cache);
914+
915+ const auto & magFieldTesla1 = collision1.magField ();
916+ const auto & magFieldTesla2 = collision2.magField ();
917+
918+ if (magFieldTesla1 != magFieldTesla2) {
919+ continue ;
920+ }
921+ for (const auto & [p1, p2] : combinations (CombinationsFullIndexPolicy (groupPartsOne, groupPartsTwo))) {
922+ int pdgCodeCasc1 = static_cast <int >(p1.pidCut ());
923+ if ((confCascType1 == 0 && pdgCodeCasc1 != kOmegaMinus ) || (confCascType1 == 2 && pdgCodeCasc1 != kOmegaPlusBar ) || (confCascType1 == 1 && pdgCodeCasc1 != kXiMinus ) || (confCascType1 == 3 && pdgCodeCasc1 != kXiPlusBar ))
924+ continue ;
925+ int pdgCodeCasc2 = static_cast <int >(p2.pidCut ());
926+ if ((confCascType2 == 0 && pdgCodeCasc2 != kOmegaMinus ) || (confCascType2 == 2 && pdgCodeCasc2 != kOmegaPlusBar ) || (confCascType2 == 1 && pdgCodeCasc2 != kXiMinus ) || (confCascType2 == 3 && pdgCodeCasc2 != kXiPlusBar ))
927+ continue ;
928+ mixedEventCont.setPair <false >(p1, p2, multCol, confUse3D, 1 .0f );
929+ }
930+ }
931+ }
932+ PROCESS_SWITCH (femtoUniversePairTaskTrackCascadeExtended, processMixedEventCascMCgen, " Enable processing mixed event MC truth for cascade - cascade" , false );
933+
866934 // / This function fills MC truth particles from derived MC table
867935 void processMCgen (aod::FDParticles const & parts)
868936 {
0 commit comments