1515// / \author Zuzanna Chochulska, WUT Warsaw & CTU Prague, zchochul@cern.ch
1616// / \author Shirajum Monira, WUT Warsaw, shirajum.monira.dokt@pw.edu.pl
1717
18- #include < vector>
19- #include < string>
20- #include < memory>
21- #include " Framework/AnalysisTask.h"
22- #include " Framework/runDataProcessing.h"
23- #include " Framework/HistogramRegistry.h"
24- #include " Framework/ASoAHelpers.h"
25- #include " PWGCF/FemtoUniverse/DataModel/FemtoDerived.h"
26- #include " PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h"
27- #include " PWGCF/FemtoUniverse/Core/FemtoUniverseEventHisto.h"
28- #include " PWGCF/FemtoUniverse/Core/FemtoUniversePairCleaner.h"
2918#include " PWGCF/FemtoUniverse/Core/FemtoUniverseContainer.h"
3019#include " PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h"
20+ #include " PWGCF/FemtoUniverse/Core/FemtoUniverseEfficiencyCorrection.h"
21+ #include " PWGCF/FemtoUniverse/Core/FemtoUniverseEventHisto.h"
22+ #include " PWGCF/FemtoUniverse/Core/FemtoUniversePairCleaner.h"
23+ #include " PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h"
24+
25+ #include " Framework/ASoAHelpers.h"
26+ #include " Framework/AnalysisTask.h"
27+ #include " Framework/HistogramRegistry.h"
3128#include " Framework/O2DatabasePDGPlugin.h"
29+ #include " Framework/runDataProcessing.h"
30+
3231#include < TFile.h>
3332#include < TH1.h>
3433#include < TPDGCode.h>
3534
35+ #include < memory>
36+ #include < string>
37+ #include < vector>
38+
3639using namespace o2 ;
3740using namespace o2 ::soa;
3841using namespace o2 ::framework;
3942using namespace o2 ::framework::expressions;
4043using namespace o2 ::analysis::femto_universe;
4144using namespace o2 ::aod::pidutils;
4245using namespace o2 ::track;
46+ using namespace o2 ::analysis::femto_universe::efficiency_correction;
4347
4448struct FemtoUniversePairTaskTrackV0Extended {
4549
@@ -140,6 +144,9 @@ struct FemtoUniversePairTaskTrackV0Extended {
140144 // Efficiency
141145 Configurable<std::string> confLocalEfficiency{" confLocalEfficiency" , " " , " Local path to efficiency .root file" };
142146
147+ EffCorConfigurableGroup effCorConfGroup;
148+ EfficiencyCorrection effCorrection{&effCorConfGroup};
149+
143150 static constexpr unsigned int V0ChildTable[][2 ] = {{0 , 1 }, {1 , 0 }, {1 , 1 }}; // Table to select the V0 children
144151
145152 FemtoUniverseContainer<femto_universe_container::EventType::same, femto_universe_container::Observable::kstar> sameEventCont;
@@ -154,8 +161,6 @@ struct FemtoUniversePairTaskTrackV0Extended {
154161 HistogramRegistry registryMCtruth{" MCtruthHistos" , {}, OutputObjHandlingPolicy::AnalysisObject, false , true };
155162 HistogramRegistry registryMCreco{" MCrecoHistos" , {}, OutputObjHandlingPolicy::AnalysisObject, false , true };
156163
157- HistogramRegistry mixQaRegistry{" mixQaRegistry" , {}, OutputObjHandlingPolicy::AnalysisObject};
158-
159164 std::unique_ptr<TFile> plocalEffFile;
160165 std::unique_ptr<TH1> plocalEffp1;
161166 std::unique_ptr<TH1> plocalEffp2;
@@ -228,7 +233,7 @@ struct FemtoUniversePairTaskTrackV0Extended {
228233 posChildV0Type2.init (&qaRegistry, confChildTempFitVarpTBins, confChildTempFitVarBins, false , 0 , true , " posChildV0Type2" );
229234 negChildV0Type2.init (&qaRegistry, confChildTempFitVarpTBins, confChildTempFitVarBins, false , 0 , true , " negChildV0Type2" );
230235
231- mixQaRegistry .add (" MixingQA/hMECollisionBins" , " ;bin;Entries" , kTH1F , {{120 , -0.5 , 119.5 }});
236+ qaRegistry .add (" MixingQA/hMECollisionBins" , " ;bin;Entries" , kTH1F , {{120 , -0.5 , 119.5 }});
232237
233238 // MC truth
234239 registryMCtruth.add (" plus/MCtruthLambda" , " MC truth Lambdas;#it{p}_{T} (GeV/c); #eta" , {HistType::kTH2F , {{500 , 0 , 5 }, {400 , -1.0 , 1.0 }}});
@@ -300,6 +305,8 @@ struct FemtoUniversePairTaskTrackV0Extended {
300305 LOGF (info, " Loaded efficiency histograms for V0-V0." );
301306 }
302307 }
308+
309+ effCorrection.init (&qaRegistry, {static_cast <framework::AxisSpec>(confV0TempFitVarpTBins), {confEtaBins, -2 , 2 }, confMultBins});
303310 }
304311 // / This function processes the same event for track - V0
305312 template <typename PartType, typename PartitionType, typename MCParticles = std::nullptr_t >
@@ -379,7 +386,7 @@ struct FemtoUniversePairTaskTrackV0Extended {
379386 }
380387
381388 // / This function processes the same event for V0 - V0
382- template <typename PartType, typename PartitionType, typename MCParticles = std::nullptr_t >
389+ template <bool isMC, typename PartType, typename PartitionType, typename MCParticles = std::nullptr_t >
383390 void doSameEventV0 (FilteredFDCollision const & col, PartType const & parts, PartitionType& groupPartsTwo, [[maybe_unused]] MCParticles mcParts = nullptr )
384391 {
385392 const auto & magFieldTesla = col.magField ();
@@ -402,6 +409,9 @@ struct FemtoUniversePairTaskTrackV0Extended {
402409 negChildV0Type1.fillQABase <false , true >(negChild, HIST (" negChildV0Type1" ));
403410 qaRegistry.fill (HIST (" V0Type1/hInvMassLambdaVsCent" ), multCol, part.mLambda ());
404411 qaRegistry.fill (HIST (" V0Type1/hInvMassAntiLambdaVsCent" ), multCol, part.mAntiLambda ());
412+ if constexpr (isMC) {
413+ effCorrection.fillRecoHist <ParticleNo::ONE, FilteredFDCollisions>(part, kLambda0 );
414+ }
405415 }
406416 // / Check daughters of second V0 particle
407417 if (isParticleTPC (posChild, V0ChildTable[confV0Type2][0 ]) && isParticleTPC (negChild, V0ChildTable[confV0Type2][1 ])) {
@@ -410,6 +420,9 @@ struct FemtoUniversePairTaskTrackV0Extended {
410420 negChildV0Type2.fillQABase <false , true >(negChild, HIST (" negChildV0Type2" ));
411421 qaRegistry.fill (HIST (" V0Type2/hInvMassLambdaVsCent" ), multCol, part.mLambda ());
412422 qaRegistry.fill (HIST (" V0Type2/hInvMassAntiLambdaVsCent" ), multCol, part.mAntiLambda ());
423+ if constexpr (isMC) {
424+ effCorrection.fillRecoHist <ParticleNo::TWO, FilteredFDCollisions>(part, kLambda0Bar );
425+ }
413426 }
414427 }
415428
@@ -481,14 +494,14 @@ struct FemtoUniversePairTaskTrackV0Extended {
481494 void processSameEventV0 (FilteredFDCollision const & col, FemtoFullParticles const & parts)
482495 {
483496 auto groupPartsTwo = partsTwo->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
484- doSameEventV0 (col, parts, groupPartsTwo);
497+ doSameEventV0< false > (col, parts, groupPartsTwo);
485498 }
486499 PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processSameEventV0, " Enable processing same event for V0 - V0" , false );
487500
488501 void processSameEventV0MCReco (FilteredFDCollision const & col, FemtoRecoParticles const & parts, aod::FdMCParticles const & mcparts)
489502 {
490503 auto groupPartsTwo = partsTwoMCReco->sliceByCached (aod::femtouniverseparticle::fdCollisionId, col.globalIndex (), cache);
491- doSameEventV0 (col, parts, groupPartsTwo, mcparts);
504+ doSameEventV0< true > (col, parts, groupPartsTwo, mcparts);
492505 }
493506 PROCESS_SWITCH (FemtoUniversePairTaskTrackV0Extended, processSameEventV0MCReco, " Enable processing same event for V0 - V0 MC Reco" , false );
494507
@@ -565,13 +578,15 @@ struct FemtoUniversePairTaskTrackV0Extended {
565578 negChildV0Type1.fillQABase <false , true >(negChild, HIST (" negChildV0Type1" ));
566579 qaRegistry.fill (HIST (" V0Type1/hInvMassLambdaVsCent" ), multCol, part.mLambda ());
567580 qaRegistry.fill (HIST (" V0Type1/hInvMassAntiLambdaVsCent" ), multCol, part.mAntiLambda ());
581+ effCorrection.fillTruthHist <ParticleNo::ONE, FilteredFDCollisions>(part);
568582 }
569583 if ((confV0Type2 == 0 && pdgCode == kLambda0 ) || (confV0Type2 == 1 && pdgCode == kLambda0Bar )) {
570584 trackHistoV0Type2.fillQABase <false , true >(part, HIST (" V0Type2" ));
571585 posChildV0Type2.fillQABase <false , true >(posChild, HIST (" posChildV0Type2" ));
572586 negChildV0Type2.fillQABase <false , true >(negChild, HIST (" negChildV0Type2" ));
573587 qaRegistry.fill (HIST (" V0Type2/hInvMassLambdaVsCent" ), multCol, part.mLambda ());
574588 qaRegistry.fill (HIST (" V0Type2/hInvMassAntiLambdaVsCent" ), multCol, part.mAntiLambda ());
589+ effCorrection.fillTruthHist <ParticleNo::TWO, FilteredFDCollisions>(part);
575590 }
576591 }
577592
@@ -657,12 +672,12 @@ struct FemtoUniversePairTaskTrackV0Extended {
657672 if (confUseCent) {
658673 for (const auto & [collision1, collision2] : soa::selfCombinations (colBinningCent, confNEventsMix, -1 , cols, cols)) {
659674 mixedCollProcessFunc (collision1, collision2);
660- mixQaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
675+ qaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
661676 }
662677 } else {
663678 for (const auto & [collision1, collision2] : soa::selfCombinations (colBinningMult, confNEventsMix, -1 , cols, cols)) {
664679 mixedCollProcessFunc (collision1, collision2);
665- mixQaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
680+ qaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
666681 }
667682 }
668683 }
@@ -729,12 +744,12 @@ struct FemtoUniversePairTaskTrackV0Extended {
729744 if (confUseCent) {
730745 for (const auto & [collision1, collision2] : soa::selfCombinations (colBinningCent, confNEventsMix, -1 , cols, cols)) {
731746 mixedCollProcessFunc (collision1, collision2);
732- mixQaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
747+ qaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
733748 }
734749 } else {
735750 for (const auto & [collision1, collision2] : soa::selfCombinations (colBinningMult, confNEventsMix, -1 , cols, cols)) {
736751 mixedCollProcessFunc (collision1, collision2);
737- mixQaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
752+ qaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
738753 }
739754 }
740755 }
@@ -799,12 +814,12 @@ struct FemtoUniversePairTaskTrackV0Extended {
799814 if (confUseCent) {
800815 for (const auto & [collision1, collision2] : soa::selfCombinations (colBinningCent, confNEventsMix, -1 , cols, cols)) {
801816 mixedCollProcessFunc (collision1, collision2);
802- mixQaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
817+ qaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
803818 }
804819 } else {
805820 for (const auto & [collision1, collision2] : soa::selfCombinations (colBinningMult, confNEventsMix, -1 , cols, cols)) {
806821 mixedCollProcessFunc (collision1, collision2);
807- mixQaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
822+ qaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
808823 }
809824 }
810825 }
@@ -837,12 +852,12 @@ struct FemtoUniversePairTaskTrackV0Extended {
837852 if (confUseCent) {
838853 for (const auto & [collision1, collision2] : soa::selfCombinations (colBinningCent, confNEventsMix, -1 , cols, cols)) {
839854 mixedCollProcessFunc (collision1, collision2);
840- mixQaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
855+ qaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningCent.getBin ({collision1.posZ (), collision1.multV0M ()}));
841856 }
842857 } else {
843858 for (const auto & [collision1, collision2] : soa::selfCombinations (colBinningMult, confNEventsMix, -1 , cols, cols)) {
844859 mixedCollProcessFunc (collision1, collision2);
845- mixQaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
860+ qaRegistry .fill (HIST (" MixingQA/hMECollisionBins" ), colBinningMult.getBin ({collision1.posZ (), collision1.multNtr ()}));
846861 }
847862 }
848863 }
0 commit comments