1515// / \author Shirajum Monira, WUT Warsaw, shirajum.monira.dokt@pw.edu.pl
1616
1717#include < vector>
18+ #include < string>
19+ #include < memory>
1820#include " Framework/AnalysisTask.h"
1921#include " Framework/runDataProcessing.h"
2022#include " Framework/HistogramRegistry.h"
@@ -152,6 +154,8 @@ struct femtoUniversePairTaskTrackV0Extended {
152154 HistogramRegistry registryMCtruth{" MCtruthHistos" , {}, OutputObjHandlingPolicy::AnalysisObject, false , true };
153155 HistogramRegistry registryMCreco{" MCrecoHistos" , {}, OutputObjHandlingPolicy::AnalysisObject, false , true };
154156
157+ HistogramRegistry MixQaRegistry{" MixQaRegistry" , {}, OutputObjHandlingPolicy::AnalysisObject};
158+
155159 std::unique_ptr<TFile> plocalEffFile;
156160 std::unique_ptr<TH1> plocalEffp1;
157161 std::unique_ptr<TH1> plocalEffp2;
@@ -220,6 +224,8 @@ struct femtoUniversePairTaskTrackV0Extended {
220224 posChildV0Type2.init (&qaRegistry, ConfChildTempFitVarpTBins, ConfChildTempFitVarBins, false , 0 , true , " posChildV0Type2" );
221225 negChildV0Type2.init (&qaRegistry, ConfChildTempFitVarpTBins, ConfChildTempFitVarBins, false , 0 , true , " negChildV0Type2" );
222226
227+ MixQaRegistry.add (" MixingQA/hMECollisionBins" , " ;bin;Entries" , kTH1F , {{120 , -0.5 , 119.5 }});
228+
223229 // MC truth
224230 registryMCtruth.add (" plus/MCtruthLambda" , " MC truth Lambdas;#it{p}_{T} (GeV/c); #eta" , {HistType::kTH2F , {{500 , 0 , 5 }, {400 , -1.0 , 1.0 }}});
225231 registryMCtruth.add (" minus/MCtruthLambda" , " MC truth Lambdas;#it{p}_{T} (GeV/c); #eta" , {HistType::kTH2F , {{500 , 0 , 5 }, {400 , -1.0 , 1.0 }}});
@@ -555,10 +561,10 @@ struct femtoUniversePairTaskTrackV0Extended {
555561 template <typename PartType, typename PartitionType, typename MCParticles = std::nullptr_t >
556562 void doMixedEvent (FilteredFDCollisions& cols, PartType& parts, PartitionType& partitionOne, PartitionType& partitionTwo, [[maybe_unused]] MCParticles mcParts = nullptr )
557563 {
558- ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinning{{ConfVtxBins, ConfMultBins}, true };
559-
560- for (auto & [collision1, collision2] : soa::selfCombinations (colBinning, 5 , -1 , cols, cols)) {
564+ ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinningMult{{ConfVtxBins, ConfMultBins}, true };
565+ ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultV0M> colBinningCent{{ConfVtxBins, ConfMultBins}, true };
561566
567+ auto mixedCollProcessFunc = [&](auto & collision1, auto & collision2) -> void {
562568 const int multCol = ConfUseCent ? collision1.multV0M () : collision1.multNtr ();
563569
564570 auto groupPartsOne = partitionOne->sliceByCached (aod::femtouniverseparticle::fdCollisionId, collision1.globalIndex (), cache);
@@ -568,7 +574,7 @@ struct femtoUniversePairTaskTrackV0Extended {
568574 const auto & magFieldTesla2 = collision2.magField ();
569575
570576 if (magFieldTesla1 != magFieldTesla2) {
571- continue ;
577+ return ;
572578 }
573579
574580 for (auto & [p1, p2] : combinations (CombinationsFullIndexPolicy (groupPartsOne, groupPartsTwo))) {
@@ -603,6 +609,18 @@ struct femtoUniversePairTaskTrackV0Extended {
603609 else
604610 mixedEventCont.setPair <false >(p1, p2, multCol, ConfUse3D, weight);
605611 }
612+ };
613+
614+ if (ConfUseCent) {
615+ for (auto & [collision1, collision2] : soa::selfCombinations (colBinningCent, 5 , -1 , cols, cols)) {
616+ mixedCollProcessFunc (collision1, collision2);
617+ MixQaRegistry.fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
618+ }
619+ } else {
620+ for (auto & [collision1, collision2] : soa::selfCombinations (colBinningMult, 5 , -1 , cols, cols)) {
621+ mixedCollProcessFunc (collision1, collision2);
622+ MixQaRegistry.fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
623+ }
606624 }
607625 }
608626
@@ -621,10 +639,10 @@ struct femtoUniversePairTaskTrackV0Extended {
621639 // / This function processes the mixed event for V0 - V0
622640 void processMixedEventV0 (FilteredFDCollisions& cols, FemtoFullParticles& parts)
623641 {
624- ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinning{{ConfVtxBins, ConfMultBins}, true };
625-
626- for (auto & [collision1, collision2] : soa::selfCombinations (colBinning, 5 , -1 , cols, cols)) {
642+ ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinningMult{{ConfVtxBins, ConfMultBins}, true };
643+ ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultV0M> colBinningCent{{ConfVtxBins, ConfMultBins}, true };
627644
645+ auto mixedCollProcessFunc = [&](auto & collision1, auto & collision2) -> void {
628646 const int multCol = ConfUseCent ? collision1.multV0M () : collision1.multNtr ();
629647
630648 auto groupPartsOne = partsTwo->sliceByCached (aod::femtouniverseparticle::fdCollisionId, collision1.globalIndex (), cache);
@@ -634,16 +652,18 @@ struct femtoUniversePairTaskTrackV0Extended {
634652 const auto & magFieldTesla2 = collision2.magField ();
635653
636654 if (magFieldTesla1 != magFieldTesla2) {
637- continue ;
655+ return ;
638656 }
639657
640658 for (auto & [p1, p2] : combinations (CombinationsFullIndexPolicy (groupPartsOne, groupPartsTwo))) {
641659 // Lambda invariant mass cut for p1
642- if (!invMLambda (p1.mLambda (), p1.mAntiLambda ()))
660+ if (!invMLambda (p1.mLambda (), p1.mAntiLambda ())) {
643661 continue ;
662+ }
644663 // Lambda invariant mass cut for p2
645- if (!invMLambda (p2.mLambda (), p2.mAntiLambda ()))
664+ if (!invMLambda (p2.mLambda (), p2.mAntiLambda ())) {
646665 continue ;
666+ }
647667
648668 const auto & posChild1 = parts.iteratorAt (p1.globalIndex () - 2 );
649669 const auto & negChild1 = parts.iteratorAt (p1.globalIndex () - 1 );
@@ -668,17 +688,29 @@ struct femtoUniversePairTaskTrackV0Extended {
668688 }
669689 mixedEventCont.setPair <false >(p1, p2, multCol, ConfUse3D);
670690 }
691+ };
692+
693+ if (ConfUseCent) {
694+ for (auto & [collision1, collision2] : soa::selfCombinations (colBinningCent, 5 , -1 , cols, cols)) {
695+ mixedCollProcessFunc (collision1, collision2);
696+ MixQaRegistry.fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
697+ }
698+ } else {
699+ for (auto & [collision1, collision2] : soa::selfCombinations (colBinningMult, 5 , -1 , cols, cols)) {
700+ mixedCollProcessFunc (collision1, collision2);
701+ MixQaRegistry.fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
702+ }
671703 }
672704 }
673705 PROCESS_SWITCH (femtoUniversePairTaskTrackV0Extended, processMixedEventV0, " Enable processing mixed events for V0 - V0" , false );
674706
675707 // / This function processes MC mixed events for Track - V0
676708 void processMCMixedEvent (FilteredFDCollisions& cols, FemtoFullParticles& parts)
677709 {
678- ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinning{{ConfVtxBins, ConfMultBins}, true };
679-
680- for (auto & [collision1, collision2] : soa::selfCombinations (colBinning, 5 , -1 , cols, cols)) {
710+ ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinningMult{{ConfVtxBins, ConfMultBins}, true };
711+ ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultV0M> colBinningCent{{ConfVtxBins, ConfMultBins}, true };
681712
713+ auto mixedCollProcessFunc = [&](auto & collision1, auto & collision2) -> void {
682714 const int multCol = ConfUseCent ? collision1.multV0M () : collision1.multNtr ();
683715
684716 auto groupPartsOne = partsOneMC->sliceByCached (aod::femtouniverseparticle::fdCollisionId, collision1.globalIndex (), cache);
@@ -688,7 +720,7 @@ struct femtoUniversePairTaskTrackV0Extended {
688720 const auto & magFieldTesla2 = collision2.magField ();
689721
690722 if (magFieldTesla1 != magFieldTesla2) {
691- continue ;
723+ return ;
692724 }
693725 for (auto & [p1, p2] : combinations (CombinationsFullIndexPolicy (groupPartsOne, groupPartsTwo))) {
694726 if (static_cast <int >(p1.pidcut ()) != ConfTrkPDGCodePartOne)
@@ -703,6 +735,18 @@ struct femtoUniversePairTaskTrackV0Extended {
703735 }
704736 mixedEventCont.setPair <false >(p1, p2, multCol, ConfUse3D);
705737 }
738+ };
739+
740+ if (ConfUseCent) {
741+ for (auto & [collision1, collision2] : soa::selfCombinations (colBinningCent, 5 , -1 , cols, cols)) {
742+ mixedCollProcessFunc (collision1, collision2);
743+ MixQaRegistry.fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
744+ }
745+ } else {
746+ for (auto & [collision1, collision2] : soa::selfCombinations (colBinningMult, 5 , -1 , cols, cols)) {
747+ mixedCollProcessFunc (collision1, collision2);
748+ MixQaRegistry.fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
749+ }
706750 }
707751 }
708752
@@ -711,10 +755,10 @@ struct femtoUniversePairTaskTrackV0Extended {
711755 // / This function processes MC mixed events for V0 - V0
712756 void processMCMixedEventV0 (FilteredFDCollisions& cols, FemtoFullParticles& parts)
713757 {
714- ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinning{{ConfVtxBins, ConfMultBins}, true };
715-
716- for (auto & [collision1, collision2] : soa::selfCombinations (colBinning, 5 , -1 , cols, cols)) {
758+ ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultNtr> colBinningMult{{ConfVtxBins, ConfMultBins}, true };
759+ ColumnBinningPolicy<aod::collision::PosZ, aod::femtouniversecollision::MultV0M> colBinningCent{{ConfVtxBins, ConfMultBins}, true };
717760
761+ auto mixedCollProcessFunc = [&](auto & collision1, auto & collision2) -> void {
718762 const int multCol = ConfUseCent ? collision1.multV0M () : collision1.multNtr ();
719763
720764 auto groupPartsOne = partsTwoMC->sliceByCached (aod::femtouniverseparticle::fdCollisionId, collision1.globalIndex (), cache);
@@ -729,6 +773,18 @@ struct femtoUniversePairTaskTrackV0Extended {
729773 continue ;
730774 mixedEventCont.setPair <false >(p1, p2, multCol, ConfUse3D);
731775 }
776+ };
777+
778+ if (ConfUseCent) {
779+ for (auto & [collision1, collision2] : soa::selfCombinations (colBinningCent, 5 , -1 , cols, cols)) {
780+ mixedCollProcessFunc (collision1, collision2);
781+ MixQaRegistry.fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
782+ }
783+ } else {
784+ for (auto & [collision1, collision2] : soa::selfCombinations (colBinningMult, 5 , -1 , cols, cols)) {
785+ mixedCollProcessFunc (collision1, collision2);
786+ MixQaRegistry.fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
787+ }
732788 }
733789 }
734790
0 commit comments