From ef8d9ee7dcfed3cd300fe5dff5317899b552f296 Mon Sep 17 00:00:00 2001 From: Zuzanna <01150674@pw.edu.pl> Date: Mon, 7 Jul 2025 13:15:22 +0000 Subject: [PATCH 1/2] adding secondary contamination calculations for p-phi analysis --- .../Core/FemtoUniverseEfficiencyCorrection.h | 5 +- .../Tasks/femtoUniversePairTaskTrackPhi.cxx | 125 +++++++++++------- 2 files changed, 84 insertions(+), 46 deletions(-) diff --git a/PWGCF/FemtoUniverse/Core/FemtoUniverseEfficiencyCorrection.h b/PWGCF/FemtoUniverse/Core/FemtoUniverseEfficiencyCorrection.h index 71abd4e12d9..74e37d27a66 100644 --- a/PWGCF/FemtoUniverse/Core/FemtoUniverseEfficiencyCorrection.h +++ b/PWGCF/FemtoUniverse/Core/FemtoUniverseEfficiencyCorrection.h @@ -50,6 +50,7 @@ struct EffCorConfigurableGroup : framework::ConfigurableGroup { framework::Configurable confEffCorCCDBPath{"confEffCorCCDBPath", "", "[Efficiency Correction] CCDB path to histograms"}; framework::Configurable> confEffCorCCDBTimestamps{"confEffCorCCDBTimestamps", {}, "[Efficiency Correction] Timestamps of histograms in CCDB (0 can be used as a placeholder, e.g. when running subwagons)"}; framework::Configurable confEffCorVariables{"confEffCorVariables", "pt", "[Efficiency Correction] Variables for efficiency correction histogram dimensions (available: 'pt'; 'pt,eta'; 'pt,mult'; 'pt,eta,mult')"}; + framework::Configurable confEffCorSetMultToConst{"confEffCorSetMultToConst", false, "[Efficiency Correction] Multiplicity for the histograms set to the constant value"}; }; class EfficiencyCorrection @@ -62,6 +63,7 @@ class EfficiencyCorrection auto init(framework::HistogramRegistry* registry, std::vector axisSpecs) -> void { shouldFillHistograms = config->confEffCorFillHist; + shouldSetMultToConst = config->confEffCorSetMultToConst; histRegistry = registry; if (shouldFillHistograms) { @@ -126,7 +128,7 @@ class EfficiencyCorrection histRegistry->fill(HIST(histDirectory) + HIST("/") + HIST(histSuffix[N - 1]) + HIST("/hMCTruth"), particle.pt(), particle.eta(), - particle.template fdCollision_as().multV0M()); + shouldSetMultToConst ? 100 : particle.template fdCollision_as().multV0M()); } template @@ -277,6 +279,7 @@ class EfficiencyCorrection bool shouldApplyCorrection{false}; bool shouldFillHistograms{false}; + bool shouldSetMultToConst{false}; o2::ccdb::BasicCCDBManager& ccdb{o2::ccdb::BasicCCDBManager::instance()}; std::array hLoaded{nullptr, nullptr}; diff --git a/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackPhi.cxx b/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackPhi.cxx index 851c329d992..deb644166e3 100644 --- a/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackPhi.cxx +++ b/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackPhi.cxx @@ -16,29 +16,31 @@ /// \author Anton Riedel, TU München, anton.riedel@tum.de /// \author Zuzanna Chochulska, WUT Warsaw & CTU Prague, zchochul@cern.ch -#include -#include +#include "PWGCF/FemtoUniverse/Core/FemtoUniverseContainer.h" +#include "PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h" +#include "PWGCF/FemtoUniverse/Core/FemtoUniverseEfficiencyCorrection.h" +#include "PWGCF/FemtoUniverse/Core/FemtoUniverseEventHisto.h" +#include "PWGCF/FemtoUniverse/Core/FemtoUniversePairCleaner.h" +#include "PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h" +#include "PWGCF/FemtoUniverse/Core/FemtoUniverseTrackSelection.h" +#include "PWGCF/FemtoUniverse/DataModel/FemtoDerived.h" + +#include "Framework/ASoAHelpers.h" #include "Framework/AnalysisTask.h" -#include "Framework/runDataProcessing.h" #include "Framework/HistogramRegistry.h" -#include "Framework/ASoAHelpers.h" #include "Framework/O2DatabasePDGPlugin.h" +#include "Framework/runDataProcessing.h" #include "ReconstructionDataFormats/PID.h" -#include "PWGCF/FemtoUniverse/DataModel/FemtoDerived.h" -#include "PWGCF/FemtoUniverse/Core/FemtoUniverseParticleHisto.h" -#include "PWGCF/FemtoUniverse/Core/FemtoUniverseEventHisto.h" -#include "PWGCF/FemtoUniverse/Core/FemtoUniversePairCleaner.h" -#include "PWGCF/FemtoUniverse/Core/FemtoUniverseContainer.h" -#include "PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h" -#include "PWGCF/FemtoUniverse/Core/FemtoUniverseTrackSelection.h" -#include "PWGCF/FemtoUniverse/Core/FemtoUniverseEfficiencyCalculator.h" #include #include +#include +#include + using namespace o2; using namespace o2::analysis::femto_universe; -using namespace o2::analysis::femto_universe::efficiency; +using namespace o2::analysis::femto_universe::efficiency_correction; using namespace o2::framework; using namespace o2::framework::expressions; using namespace o2::soa; @@ -115,6 +117,11 @@ struct FemtoUniversePairTaskTrackPhi { (aod::femtouniverseparticle::pt > ConfTrackPtLow) && (aod::femtouniverseparticle::pt < ConfTrackPtHigh); + // Partition> partsTrackMCTruth = + // aod::femtouniverseparticle::partType == static_cast(aod::femtouniverseparticle::ParticleType::kMCTruthTrack) && + // aod::femtouniverseparticle::pt < ConfTrackPtHigh && + // aod::femtouniverseparticle::pt > ConfTrackPtLow; + /// Particle 2 --- PHI MESON Configurable ConfPhiPtLow{"ConfPhiPtLow", 0.8, "Lower limit of the Phi pT."}; Configurable ConfPhiPtHigh{"ConfPhiPtHigh", 4.0, "Higher limit of the Phi pT."}; @@ -134,6 +141,11 @@ struct FemtoUniversePairTaskTrackPhi { (aod::femtouniverseparticle::tempFitVar > confInvMassLowLimitPhi) && (aod::femtouniverseparticle::tempFitVar < confInvMassUpLimitPhi); + // Partition> partsPhiMCTruth = + // aod::femtouniverseparticle::partType == static_cast(aod::femtouniverseparticle::ParticleType::kMCTruthTrack) && + // aod::femtouniverseparticle::pt < ConfPhiPtHigh && + // aod::femtouniverseparticle::pt > ConfPhiPtLow; + /// Partitions for Phi daughters kPhiChild Partition partsPhiDaugh = (aod::femtouniverseparticle::partType == uint8_t(aod::femtouniverseparticle::ParticleType::kPhiChild)); Partition> partsPhiDaughMC = (aod::femtouniverseparticle::partType == uint8_t(aod::femtouniverseparticle::ParticleType::kPhiChild)); @@ -187,8 +199,10 @@ struct FemtoUniversePairTaskTrackPhi { ColumnBinningPolicy colBinning{{ConfBinsVtx, ConfBinsMult}, true}; - EfficiencyConfigurableGroup effConfGroup; - EfficiencyCalculator efficiencyCalculator{&effConfGroup}; + HistogramRegistry effCorrRegistry{"EfficiencyCorrection", {}, OutputObjHandlingPolicy::AnalysisObject}; + + EffCorConfigurableGroup effCorConfGroup; + EfficiencyCorrection effCorrection{&effCorConfGroup}; float weight = 1; @@ -372,6 +386,12 @@ struct FemtoUniversePairTaskTrackPhi { } } + /// @returns 1 if positive, -1 if negative, 0 if zero + auto sign(auto number) -> int8_t + { + return (number > 0) - (number < 0); + } + void init(InitContext&) { if (ConfIsMC) { @@ -383,7 +403,14 @@ struct FemtoUniversePairTaskTrackPhi { registryMCpT.add("MCReco/C_p_pT", "; #it{p_T} (GeV/#it{c}); Counts", kTH1F, {{100, 0, 10}}); registryMCpT.add("MCReco/NC_p_pT", "; #it{p_T} (GeV/#it{c}); Counts", kTH1F, {{100, 0, 10}}); } - efficiencyCalculator.init(); + + effCorrection.init( + &effCorrRegistry, + { + static_cast(ConfBinsTempFitVarpT), + {ConfBinsEta, -1, 1}, + ConfBinsMult, + }); eventHisto.init(&qaRegistry); qaRegistry.add("PhiDaugh_pos/nSigmaTPC", "; #it{p} (GeV/#it{c}); n#sigma_{TPC}", kTH2F, {{100, 0, 10}, {200, -4.975, 5.025}}); @@ -467,7 +494,7 @@ struct FemtoUniversePairTaskTrackPhi { } } - template + template void doSameEvent(PartitionType groupPartsTrack, PartitionType groupPartsPhi, PartType parts, float magFieldTesla, int multCol, [[maybe_unused]] MCParticles mcParts = nullptr) { for (auto const& phicandidate : groupPartsPhi) { @@ -493,6 +520,17 @@ struct FemtoUniversePairTaskTrackPhi { qaRegistry.fill(HIST("PhiDaugh_neg/hDCAxy"), negChild.p(), negChild.tempFitVar()); trackHistoPartPhi.fillQA(phicandidate); + if constexpr (isMC) { + // reco + effCorrection.fillRecoHist(phicandidate, 333); + // truth + auto mcPartId1 = phicandidate.fdMCParticleId(); + auto const& mcpart1 = mcParts.iteratorAt(mcPartId1); + if (mcpart1.pdgMCTruth() != 333) { + continue; + } + effCorrection.fillTruthHist(phicandidate); + } } for (auto const& track : groupPartsTrack) { @@ -529,6 +567,18 @@ struct FemtoUniversePairTaskTrackPhi { qaRegistry.fill(HIST("Hadron_neg/nSigmaTOFPr"), track.p(), tofNSigmaPr); } trackHistoPartTrack.fillQA(track); + + if constexpr (isMC) { + effCorrection.fillRecoHist(track, ConfTrackPDGCode); + + // truth + auto mcPartId2 = track.fdMCParticleId(); + auto const& mcpart2 = mcParts.iteratorAt(mcPartId2); + if (mcpart2.pdgMCTruth() != ConfTrackPDGCode) { + continue; + } + effCorrection.fillTruthHist(track); + } } /// Now build the combinations @@ -556,13 +606,8 @@ struct FemtoUniversePairTaskTrackPhi { if (!pairCleaner.isCleanPair(track, phicandidate, parts)) { continue; } - - weight = efficiencyCalculator.getWeight(ParticleNo::ONE, phicandidate.pt()) * efficiencyCalculator.getWeight(ParticleNo::TWO, track.pt()); - - if constexpr (std::is_same::value) - sameEventCont.setPair(track, phicandidate, multCol, ConfUse3D, weight); - else - sameEventCont.setPair(track, phicandidate, multCol, ConfUse3D, weight); + weight = effCorrection.getWeight(ParticleNo::ONE, phicandidate) * effCorrection.getWeight(ParticleNo::TWO, track); + sameEventCont.setPair(track, phicandidate, multCol, ConfUse3D, weight); } // // Used for better fitting of invariant mass background. @@ -592,7 +637,7 @@ struct FemtoUniversePairTaskTrackPhi { // } } - template + template void doMixedEvent(PartitionType groupPartsTrack, PartitionType groupPartsPhi, PartType parts, float magFieldTesla, int multCol, [[maybe_unused]] MCParticles mcParts = nullptr) { for (auto const& [track, phicandidate] : combinations(CombinationsFullIndexPolicy(groupPartsTrack, groupPartsPhi))) { @@ -612,13 +657,8 @@ struct FemtoUniversePairTaskTrackPhi { continue; } } - - weight = efficiencyCalculator.getWeight(ParticleNo::ONE, phicandidate.pt()) * efficiencyCalculator.getWeight(ParticleNo::TWO, track.pt()); - - if constexpr (std::is_same::value) - mixedEventCont.setPair(track, phicandidate, multCol, ConfUse3D, weight); - else - mixedEventCont.setPair(track, phicandidate, multCol, ConfUse3D, weight); + weight = effCorrection.getWeight(ParticleNo::ONE, phicandidate) * effCorrection.getWeight(ParticleNo::TWO, track); + mixedEventCont.setPair(track, phicandidate, multCol, ConfUse3D, weight); } } @@ -626,17 +666,14 @@ struct FemtoUniversePairTaskTrackPhi { { auto thegroupPartsTrack = partsTrack->sliceByCached(aod::femtouniverseparticle::fdCollisionId, col.globalIndex(), cache); auto thegroupPartsPhi = partsPhi->sliceByCached(aod::femtouniverseparticle::fdCollisionId, col.globalIndex(), cache); - // auto thegroupPartsPhiDaugh = partsPhiDaugh->sliceByCached(aod::femtouniverseparticle::fdCollisionId, col.globalIndex(), cache); - // auto thegroupPartsKaons = partsKaons->sliceByCached(aod::femtouniverseparticle::fdCollisionId, col.globalIndex(), cache); eventHisto.fillQA(col); - doSameEvent(thegroupPartsTrack, thegroupPartsPhi, parts, col.magField(), col.multNtr()); + doSameEvent(thegroupPartsTrack, thegroupPartsPhi, parts, col.magField(), col.multNtr()); } PROCESS_SWITCH(FemtoUniversePairTaskTrackPhi, processSameEvent, "Enable processing same event", true); void processMixedEvent(FilteredFDCollisions const& cols, FilteredFemtoFullParticles const& parts) { for (auto const& [collision1, collision2] : soa::selfCombinations(colBinning, 5, -1, cols, cols)) { - const int multiplicityCol = collision1.multNtr(); mixQaRegistry.fill(HIST("MixingQA/hMECollisionBins"), colBinning.getBin({collision1.posZ(), multiplicityCol})); @@ -650,7 +687,7 @@ struct FemtoUniversePairTaskTrackPhi { continue; } - doMixedEvent(groupPartsTrack, groupPartsPhi, parts, magFieldTesla1, multiplicityCol); + doMixedEvent(groupPartsTrack, groupPartsPhi, parts, magFieldTesla1, multiplicityCol); } } PROCESS_SWITCH(FemtoUniversePairTaskTrackPhi, processMixedEvent, "Enable processing mixed events", true); @@ -658,12 +695,11 @@ struct FemtoUniversePairTaskTrackPhi { ///--------------------------------------------MC-------------------------------------------------/// void processSameEventMCReco(FilteredFDCollision const& col, FemtoRecoParticles const& parts, aod::FdMCParticles const& mcparts) { + eventHisto.fillQA(col); + // Reco auto thegroupPartsTrack = partsTrackMCReco->sliceByCached(aod::femtouniverseparticle::fdCollisionId, col.globalIndex(), cache); auto thegroupPartsPhi = partsPhiMCReco->sliceByCached(aod::femtouniverseparticle::fdCollisionId, col.globalIndex(), cache); - // auto thegroupPartsPhiDaugh = partsPhiDaugh->sliceByCached(aod::femtouniverseparticle::fdCollisionId, col.globalIndex(), cache); - // auto thegroupPartsKaons = partsKaons->sliceByCached(aod::femtouniverseparticle::fdCollisionId, col.globalIndex(), cache); - eventHisto.fillQA(col); - doSameEvent(thegroupPartsTrack, thegroupPartsPhi, parts, col.magField(), col.multNtr(), mcparts); + doSameEvent(thegroupPartsTrack, thegroupPartsPhi, parts, col.magField(), col.multNtr(), mcparts); } PROCESS_SWITCH(FemtoUniversePairTaskTrackPhi, processSameEventMCReco, "Enable processing same event for MC Reco", true); @@ -684,7 +720,7 @@ struct FemtoUniversePairTaskTrackPhi { auto groupPartsTrack = partsTrackMCReco->sliceByCached(aod::femtouniverseparticle::fdCollisionId, collision2.globalIndex(), cache); auto groupPartsPhi = partsPhiMCReco->sliceByCached(aod::femtouniverseparticle::fdCollisionId, collision1.globalIndex(), cache); - doMixedEvent(groupPartsTrack, groupPartsPhi, parts, magFieldTesla1, multiplicityCol, mcparts); + doMixedEvent(groupPartsTrack, groupPartsPhi, parts, magFieldTesla1, multiplicityCol, mcparts); } } PROCESS_SWITCH(FemtoUniversePairTaskTrackPhi, processMixedEventMCReco, "Enable processing mixed events for MC Reco", false); @@ -750,12 +786,12 @@ struct FemtoUniversePairTaskTrackPhi { if (mcpart.pdgMCTruth() == ConfTrackPDGCode && (part.pt() > ConfTrackPtLow) && (part.pt() < ConfTrackPtHigh) && isParticleNSigmaAccepted(part.p(), trackCuts.getNsigmaTPC(part, o2::track::PID::Proton), trackCuts.getNsigmaTOF(part, o2::track::PID::Proton), trackCuts.getNsigmaTPC(part, o2::track::PID::Pion), trackCuts.getNsigmaTOF(part, o2::track::PID::Pion), trackCuts.getNsigmaTPC(part, o2::track::PID::Kaon), trackCuts.getNsigmaTOF(part, o2::track::PID::Kaon))) { registryMCpT.fill(HIST("MCReco/NC_p_pT"), part.pt()); - float weightTrack = efficiencyCalculator.getWeight(ParticleNo::TWO, part.pt()); + float weightTrack = effCorrection.getWeight(ParticleNo::TWO, part); registryMCpT.fill(HIST("MCReco/C_p_pT"), part.pt(), weightTrack); } if ((mcpart.pdgMCTruth() == 333) && (part.partType() == aod::femtouniverseparticle::ParticleType::kPhi) && (part.pt() > ConfPhiPtLow) && (part.pt() < ConfPhiPtHigh)) { registryMCpT.fill(HIST("MCReco/NC_phi_pT"), part.pt()); - float weightPhi = efficiencyCalculator.getWeight(ParticleNo::ONE, part.pt()); + float weightPhi = effCorrection.getWeight(ParticleNo::ONE, part); registryMCpT.fill(HIST("MCReco/C_phi_pT"), part.pt(), weightPhi); } @@ -778,7 +814,6 @@ struct FemtoUniversePairTaskTrackPhi { registryMCreco.fill(HIST("MCrecoPnegPt"), mcpart.pt()); } } - } // partType kTrack } } From 754df180b161286b4df4a960da8d0e98b5860e6e Mon Sep 17 00:00:00 2001 From: Zuzanna <01150674@pw.edu.pl> Date: Mon, 7 Jul 2025 13:21:34 +0000 Subject: [PATCH 2/2] removing commited sections --- .../Tasks/femtoUniversePairTaskTrackPhi.cxx | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackPhi.cxx b/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackPhi.cxx index deb644166e3..2753e6a0200 100644 --- a/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackPhi.cxx +++ b/PWGCF/FemtoUniverse/Tasks/femtoUniversePairTaskTrackPhi.cxx @@ -117,11 +117,6 @@ struct FemtoUniversePairTaskTrackPhi { (aod::femtouniverseparticle::pt > ConfTrackPtLow) && (aod::femtouniverseparticle::pt < ConfTrackPtHigh); - // Partition> partsTrackMCTruth = - // aod::femtouniverseparticle::partType == static_cast(aod::femtouniverseparticle::ParticleType::kMCTruthTrack) && - // aod::femtouniverseparticle::pt < ConfTrackPtHigh && - // aod::femtouniverseparticle::pt > ConfTrackPtLow; - /// Particle 2 --- PHI MESON Configurable ConfPhiPtLow{"ConfPhiPtLow", 0.8, "Lower limit of the Phi pT."}; Configurable ConfPhiPtHigh{"ConfPhiPtHigh", 4.0, "Higher limit of the Phi pT."}; @@ -141,11 +136,6 @@ struct FemtoUniversePairTaskTrackPhi { (aod::femtouniverseparticle::tempFitVar > confInvMassLowLimitPhi) && (aod::femtouniverseparticle::tempFitVar < confInvMassUpLimitPhi); - // Partition> partsPhiMCTruth = - // aod::femtouniverseparticle::partType == static_cast(aod::femtouniverseparticle::ParticleType::kMCTruthTrack) && - // aod::femtouniverseparticle::pt < ConfPhiPtHigh && - // aod::femtouniverseparticle::pt > ConfPhiPtLow; - /// Partitions for Phi daughters kPhiChild Partition partsPhiDaugh = (aod::femtouniverseparticle::partType == uint8_t(aod::femtouniverseparticle::ParticleType::kPhiChild)); Partition> partsPhiDaughMC = (aod::femtouniverseparticle::partType == uint8_t(aod::femtouniverseparticle::ParticleType::kPhiChild));