2222#include " Framework/runDataProcessing.h"
2323#include " Framework/HistogramRegistry.h"
2424#include " Framework/ASoAHelpers.h"
25- #include " Framework/RunningWorkflowInfo.h"
26- #include " Framework/StepTHn.h"
2725#include " PWGCF/FemtoUniverse/DataModel/FemtoDerived.h"
2826#include " PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h"
2927#include " PWGCF/FemtoUniverse/Core/FemtoUniverseEventHisto.h"
3028#include " PWGCF/FemtoUniverse/Core/FemtoUniversePairCleaner.h"
3129#include " PWGCF/FemtoUniverse/Core/FemtoUniverseContainer.h"
3230#include " PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h"
33- #include " PWGCF/FemtoUniverse/Core/femtoUtils.h"
3431#include " Framework/O2DatabasePDGPlugin.h"
3532#include < TFile.h>
3633#include < TH1.h>
@@ -376,28 +373,12 @@ struct FemtoUniversePairTaskTrackV0Extended {
376373 }
377374 }
378375
379- void processSameEvent (FilteredFDCollision const & col, FemtoFullParticles const & parts)
380- {
381- auto groupPartsOne = partsOne->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
382- auto groupPartsTwo = partsTwo->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
383- doSameEvent (col, parts, groupPartsOne, groupPartsTwo);
384- }
385- PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processSameEvent, " Enable processing same event for track - V0" , false );
386-
387- void processSameEventMCReco (FilteredFDCollision const & col, FemtoRecoParticles const & parts, aod::FdMCParticles const & mcparts)
388- {
389- auto groupPartsOne = partsOneMCReco->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
390- auto groupPartsTwo = partsTwoMCReco->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
391- doSameEvent (col, parts, groupPartsOne, groupPartsTwo, mcparts);
392- }
393- PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processSameEventMCReco, " Enable processing same event for track - V0 MC Reco" , false );
394-
395376 // / This function processes the same event for V0 - V0
396- void processSameEventV0 (FilteredFDCollision const & col, FemtoFullParticles const & parts)
377+ template <typename PartType, typename PartitionType, typename MCParticles = std::nullptr_t >
378+ void doSameEventV0 (FilteredFDCollision const & col, PartType const & parts, PartitionType& groupPartsTwo, [[maybe_unused]] MCParticles mcParts = nullptr )
397379 {
398380 const auto & magFieldTesla = col.magField ();
399381
400- auto groupPartsTwo = partsTwo->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
401382 const int multCol = confUseCent ? col.multV0M () : col.multNtr ();
402383
403384 eventHisto.fillQA (col);
@@ -455,8 +436,12 @@ struct FemtoUniversePairTaskTrackV0Extended {
455436 if (!isParticleTPC (posChild2, V0ChildTable[confV0Type2][0 ]) || !isParticleTPC (negChild2, V0ChildTable[confV0Type2][1 ]))
456437 return ;
457438
458- sameEventCont.setPair <false >(p1, p2, multCol, confUse3D);
439+ if constexpr (std::is_same<PartType, FemtoRecoParticles>::value)
440+ sameEventCont.setPair <true >(p1, p2, multCol, confUse3D);
441+ else
442+ sameEventCont.setPair <false >(p1, p2, multCol, confUse3D);
459443 };
444+
460445 if (confV0Type1 == confV0Type2) {
461446 // / Now build the combinations for identical V0s
462447 for (const auto & [p1, p2] : combinations (CombinationsStrictlyUpperIndexPolicy (groupPartsTwo, groupPartsTwo))) {
@@ -470,8 +455,38 @@ struct FemtoUniversePairTaskTrackV0Extended {
470455 }
471456 }
472457
458+ void
459+ processSameEvent (FilteredFDCollision const & col, FemtoFullParticles const & parts)
460+ {
461+ auto groupPartsOne = partsOne->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
462+ auto groupPartsTwo = partsTwo->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
463+ doSameEvent (col, parts, groupPartsOne, groupPartsTwo);
464+ }
465+ PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processSameEvent, " Enable processing same event for track - V0" , false );
466+
467+ void processSameEventMCReco (FilteredFDCollision const & col, FemtoRecoParticles const & parts, aod::FdMCParticles const & mcparts)
468+ {
469+ auto groupPartsOne = partsOneMCReco->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
470+ auto groupPartsTwo = partsTwoMCReco->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
471+ doSameEvent (col, parts, groupPartsOne, groupPartsTwo, mcparts);
472+ }
473+ PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processSameEventMCReco, " Enable processing same event for track - V0 MC Reco" , false );
474+
475+ // / This function processes the same event for V0 - V0
476+ void processSameEventV0 (FilteredFDCollision const & col, FemtoFullParticles const & parts)
477+ {
478+ auto groupPartsTwo = partsTwo->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
479+ doSameEventV0 (col, parts, groupPartsTwo);
480+ }
473481 PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processSameEventV0, " Enable processing same event for V0 - V0" , false );
474482
483+ void processSameEventV0MCReco (FilteredFDCollision const & col, FemtoRecoParticles const & parts, aod::FdMCParticles const & mcparts)
484+ {
485+ auto groupPartsTwo = partsTwoMCReco->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
486+ doSameEventV0 (col, parts, groupPartsTwo, mcparts);
487+ }
488+ PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processSameEventV0MCReco, " Enable processing same event for V0 - V0 MC Reco" , false );
489+
475490 // / This function processes MC same events for Track - V0
476491 void processMCSameEvent (FilteredFDCollision const & col, FemtoFullParticles const & parts)
477492 {
@@ -527,7 +542,7 @@ struct FemtoUniversePairTaskTrackV0Extended {
527542 PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processMCSameEvent, " Enable processing same event for MC truth track - V0" , false );
528543
529544 // / This function processes MC same events for V0 - V0
530- void processMCSameEventV0 (FilteredFDCollision const & col, FemtoFullParticles const & /* parts*/ )
545+ void processMCSameEventV0 (FilteredFDCollision const & col, FemtoFullParticles const & parts)
531546 {
532547 auto groupPartsTwo = partsTwoMC->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
533548 const int multCol = confUseCent ? col.multV0M () : col.multNtr ();
@@ -536,10 +551,23 @@ struct FemtoUniversePairTaskTrackV0Extended {
536551
537552 // / Histogramming same event
538553 for (const auto & part : groupPartsTwo) {
554+ const auto & posChild = parts.iteratorAt (part.index () - 2 );
555+ const auto & negChild = parts.iteratorAt (part.index () - 1 );
539556 int pdgCode = static_cast <int >(part.pidCut ());
540- if ((confV0Type1 == 0 && pdgCode != 3122 ) || (confV0Type1 == 1 && pdgCode != -3122 ))
541- continue ;
542- trackHistoPartTwo.fillQA <false , true >(part);
557+ if ((confV0Type1 == 0 && pdgCode == 3122 ) || (confV0Type1 == 1 && pdgCode == -3122 )) {
558+ trackHistoV0Type1.fillQABase <false , true >(part, HIST (" V0Type1" ));
559+ posChildV0Type1.fillQABase <false , true >(posChild, HIST (" posChildV0Type1" ));
560+ negChildV0Type1.fillQABase <false , true >(negChild, HIST (" negChildV0Type1" ));
561+ qaRegistry.fill (HIST (" V0Type1/hInvMassLambdaVsCent" ), multCol, part.mLambda ());
562+ qaRegistry.fill (HIST (" V0Type1/hInvMassAntiLambdaVsCent" ), multCol, part.mAntiLambda ());
563+ }
564+ if ((confV0Type2 == 0 && pdgCode == 3122 ) || (confV0Type2 == 1 && pdgCode == -3122 )) {
565+ trackHistoV0Type2.fillQABase <false , true >(part, HIST (" V0Type2" ));
566+ posChildV0Type2.fillQABase <false , true >(posChild, HIST (" posChildV0Type2" ));
567+ negChildV0Type2.fillQABase <false , true >(negChild, HIST (" negChildV0Type2" ));
568+ qaRegistry.fill (HIST (" V0Type2/hInvMassLambdaVsCent" ), multCol, part.mLambda ());
569+ qaRegistry.fill (HIST (" V0Type2/hInvMassAntiLambdaVsCent" ), multCol, part.mAntiLambda ());
570+ }
543571 }
544572
545573 auto pairProcessFunc = [&](auto & p1, auto & p2) -> void {
@@ -634,29 +662,18 @@ struct FemtoUniversePairTaskTrackV0Extended {
634662 }
635663 }
636664
637- void processMixedEvent (FilteredFDCollisions const & cols, FemtoFullParticles const & parts)
638- {
639- doMixedEvent (cols, parts, partsOne, partsTwo);
640- }
641- PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processMixedEvent, " Enable processing mixed event for track - V0" , false );
642-
643- void processMixedEventMCReco (FilteredFDCollisions const & cols, FemtoRecoParticles const & parts, aod::FdMCParticles const & mcparts)
644- {
645- doMixedEvent (cols, parts, partsOneMCReco, partsTwoMCReco, mcparts);
646- }
647- PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processMixedEventMCReco, " Enable processing mixed event for track - V0 for MC Reco" , false );
648-
649665 // / This function processes the mixed event for V0 - V0
650- void processMixedEventV0 (FilteredFDCollisions const & cols, FemtoFullParticles const & parts)
666+ template <typename PartType, typename PartitionType, typename MCParticles = std::nullptr_t >
667+ void doMixedEventV0 (FilteredFDCollisions const & cols, PartType const & parts, PartitionType& partitionTwo, [[maybe_unused]] MCParticles mcParts = nullptr )
651668 {
652669 ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinningMult{{confVtxBins, confMultBins}, true };
653670 ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultV0M> colBinningCent{{confVtxBins, confMultBins}, true };
654671
655672 auto mixedCollProcessFunc = [&](auto & collision1, auto & collision2) -> void {
656673 const int multCol = confUseCent ? collision1.multV0M () : collision1.multNtr ();
657674
658- auto groupPartsOne = partsTwo ->sliceByCached (aod::femtouniverseparticle::fdCollisionId, collision1.globalIndex (), cache);
659- auto groupPartsTwo = partsTwo ->sliceByCached (aod::femtouniverseparticle::fdCollisionId, collision2.globalIndex (), cache);
675+ auto groupPartsOne = partitionTwo ->sliceByCached (aod::femtouniverseparticle::fdCollisionId, collision1.globalIndex (), cache);
676+ auto groupPartsTwo = partitionTwo ->sliceByCached (aod::femtouniverseparticle::fdCollisionId, collision2.globalIndex (), cache);
660677
661678 const auto & magFieldTesla1 = collision1.magField ();
662679 const auto & magFieldTesla2 = collision2.magField ();
@@ -696,7 +713,11 @@ struct FemtoUniversePairTaskTrackV0Extended {
696713 continue ;
697714 }
698715 }
699- mixedEventCont.setPair <false >(p1, p2, multCol, confUse3D);
716+
717+ if constexpr (std::is_same<PartType, FemtoRecoParticles>::value)
718+ mixedEventCont.setPair <true >(p1, p2, multCol, confUse3D);
719+ else
720+ mixedEventCont.setPair <false >(p1, p2, multCol, confUse3D);
700721 }
701722 };
702723
@@ -712,8 +733,31 @@ struct FemtoUniversePairTaskTrackV0Extended {
712733 }
713734 }
714735 }
736+
737+ void processMixedEvent (FilteredFDCollisions const & cols, FemtoFullParticles const & parts)
738+ {
739+ doMixedEvent (cols, parts, partsOne, partsTwo);
740+ }
741+ PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processMixedEvent, " Enable processing mixed event for track - V0" , false );
742+
743+ void processMixedEventMCReco (FilteredFDCollisions const & cols, FemtoRecoParticles const & parts, aod::FdMCParticles const & mcparts)
744+ {
745+ doMixedEvent (cols, parts, partsOneMCReco, partsTwoMCReco, mcparts);
746+ }
747+ PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processMixedEventMCReco, " Enable processing mixed event for track - V0 for MC Reco" , false );
748+
749+ void processMixedEventV0 (FilteredFDCollisions const & cols, FemtoFullParticles const & parts)
750+ {
751+ doMixedEventV0 (cols, parts, partsTwo);
752+ }
715753 PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processMixedEventV0, " Enable processing mixed events for V0 - V0" , false );
716754
755+ void processMixedEventV0MCReco (FilteredFDCollisions const & cols, FemtoRecoParticles const & parts, aod::FdMCParticles const & mcparts)
756+ {
757+ doMixedEventV0 (cols, parts, partsTwoMCReco, mcparts);
758+ }
759+ PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processMixedEventV0MCReco, " Enable processing mixed event for V0 - V0 for MC Reco" , false );
760+
717761 // / This function processes MC mixed events for Track - V0
718762 void processMCMixedEvent (FilteredFDCollisions const & cols, FemtoFullParticles const & parts)
719763 {
0 commit comments