From cff795b7b89fe2d9ded277d2c798f89f40365394 Mon Sep 17 00:00:00 2001 From: YazhenLin Date: Thu, 5 Nov 2026 15:37:03 +0800 Subject: [PATCH 1/6] Add files via upload --- PWGDQ/Core/VarManager.cxx | 3 +++ PWGDQ/Core/VarManager.h | 1 + 2 files changed, 4 insertions(+) diff --git a/PWGDQ/Core/VarManager.cxx b/PWGDQ/Core/VarManager.cxx index b85e284dd40..ff979d87bf7 100644 --- a/PWGDQ/Core/VarManager.cxx +++ b/PWGDQ/Core/VarManager.cxx @@ -1721,6 +1721,8 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kDeltaPhiSym] = "rad."; fgVariableNames[kCosChi] = "Cos#chi"; fgVariableUnits[kCosChi] = ""; + fgVariableNames[kECBootstrapSample] = "EC bootstrap sample"; + fgVariableUnits[kECBootstrapSample] = ""; fgVariableNames[kCosTheta] = "Cos#theta"; fgVariableUnits[kCosTheta] = ""; fgVariableNames[kPtDau] = "hadron P_{T}"; @@ -2849,6 +2851,7 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kCosChi"] = kCosChi; fgVarNamesMap["kWeight"] = kWeight; fgVarNamesMap["kECWeight"] = kECWeight; + fgVarNamesMap["kECBootstrapSample"] = kECBootstrapSample; fgVarNamesMap["kEWeight_before"] = kEWeight_before; fgVarNamesMap["kWeight_before"] = kWeight_before; fgVarNamesMap["kPtDau"] = kPtDau; diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index a3b9d9d367b..7fdc4a2949d 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -1051,6 +1051,7 @@ class VarManager : public TObject kPhiDau, kWeight, kECWeight, + kECBootstrapSample, kPtDau, kCosTheta, kEWeight_before, From 3ade72321bf140bb6452eda51f33d6c481613829 Mon Sep 17 00:00:00 2001 From: YazhenLin Date: Thu, 5 Nov 2026 15:37:54 +0800 Subject: [PATCH 2/6] Add files via upload --- PWGDQ/Tasks/dqEnergyCorrelator_direct.cxx | 19 ++++++++++---- PWGDQ/Tasks/tableReader_withAssoc.h | 31 ++++++++++++++++++++++- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/PWGDQ/Tasks/dqEnergyCorrelator_direct.cxx b/PWGDQ/Tasks/dqEnergyCorrelator_direct.cxx index ed8ea9265bb..72646c00d5c 100644 --- a/PWGDQ/Tasks/dqEnergyCorrelator_direct.cxx +++ b/PWGDQ/Tasks/dqEnergyCorrelator_direct.cxx @@ -116,6 +116,8 @@ struct AnalysisEnergyCorrelator { Configurable fConfigJpsiPtMin{"cfgJpsiPtMin", 0.0, "J/psi pt minimum"}; Configurable fConfigJpsiPtMax{"cfgJpsiPtMax", 100.0, "J/psi pt maximum"}; Configurable fConfigJpsiRapMax{"cfgJpsiRapMax", 0.9, "J/psi rapidity maximum"}; + Configurable fConfigJpsiTauxyMin{"cfgJpsiTauxyMin", -10000, "J/psi tauxy minimum"}; + Configurable fConfigJpsiTauxyMax{"cfgJpsiTauxyMax", 10000.0, "J/psi tauxy maximum"}; Configurable fConfigAddSEPHistogram{"cfgAddSEPHistogram", "", "Comma separated list of histograms"}; Configurable recSignals{"cfgMCRecSignals", "eeFromJpsi", "Comma separated list of MC signals (reconstructed)"}; Configurable recSignalsJSON{"cfgMCRecSignalsJSON", "", "Comma separated list of MC signals (reconstructed) via JSON"}; @@ -627,8 +629,8 @@ struct AnalysisEnergyCorrelator { } // Template function to run same event pairing (barrel-barrel, muon-muon, barrel-muon) - template - void runSameEventPairing(TTrack1 const& t1, TTrack2 const& t2, int iEleCut, aod::McParticles const& /*mcParticles*/) + template + void runSameEventPairing(TTrack1 const& t1, TTrack2 const& t2, int iEleCut, TEvent const& event, aod::McParticles const& /*mcParticles*/) { std::map> histNames = fTrackHistNames; std::map> histNamesMC = fBarrelHistNamesMCmatched; @@ -647,6 +649,7 @@ struct AnalysisEnergyCorrelator { } // end loop over MC signals VarManager::FillPair(t1, t2); + VarManager::FillPairVertexing(event, t1, t2, false, VarManager::fgValues); if (sign1 * sign2 < 0) { // +- pairs fHistMan->FillHistClass(histNames[iEleCut][0].Data(), VarManager::fgValues); // reconstructed, unmatched @@ -802,18 +805,20 @@ struct AnalysisEnergyCorrelator { // Fill pair histograms for all cuts that both tracks pass for (size_t iCut = 0; iCut < fTrackCuts.size(); iCut++) { if (twoTrackFilter & (static_cast(1) << iCut)) { - runSameEventPairing(t1, t2, iCut, mcParticles); + runSameEventPairing(t1, t2, iCut, event, mcParticles); } } float mass = VarManager::fgValues[VarManager::kMass]; float pt = VarManager::fgValues[VarManager::kPt]; float rap = VarManager::fgValues[VarManager::kRap]; + float tauxy = VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMass]; // Apply J/psi cuts if (mass < fConfigPairOptions.fConfigJpsiMassMin.value || mass > fConfigPairOptions.fConfigJpsiMassMax.value || pt < fConfigPairOptions.fConfigJpsiPtMin.value || pt > fConfigPairOptions.fConfigJpsiPtMax.value || - std::abs(rap) > fConfigPairOptions.fConfigJpsiRapMax.value) { + std::abs(rap) > fConfigPairOptions.fConfigJpsiRapMax.value || + tauxy < fConfigPairOptions.fConfigJpsiTauxyMin.value || tauxy > fConfigPairOptions.fConfigJpsiTauxyMax.value) { continue; } @@ -928,13 +933,17 @@ struct AnalysisEnergyCorrelator { } // Fill pair variables for cut VarManager::FillPair(t1, t2, VarManager::fgValues); + VarManager::FillPairVertexing(event1, t1, t2, false, VarManager::fgValues); float mass = VarManager::fgValues[VarManager::kMass]; float pt = VarManager::fgValues[VarManager::kPt]; float rap = VarManager::fgValues[VarManager::kRap]; + float tauxy = VarManager::fgValues[VarManager::kVertexingTauxyProjectedPoleJPsiMass]; + // Apply J/psi cuts if (mass < fConfigPairOptions.fConfigJpsiMassMin.value || mass > fConfigPairOptions.fConfigJpsiMassMax.value || pt < fConfigPairOptions.fConfigJpsiPtMin.value || pt > fConfigPairOptions.fConfigJpsiPtMax.value || - std::abs(rap) > fConfigPairOptions.fConfigJpsiRapMax.value) { + std::abs(rap) > fConfigPairOptions.fConfigJpsiRapMax.value || + tauxy < fConfigPairOptions.fConfigJpsiTauxyMin.value || tauxy > fConfigPairOptions.fConfigJpsiTauxyMax.value) { continue; } if (t1.sign() * t2.sign() >= 0) { diff --git a/PWGDQ/Tasks/tableReader_withAssoc.h b/PWGDQ/Tasks/tableReader_withAssoc.h index 354e9fe815d..f22fd2b4e5c 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc.h +++ b/PWGDQ/Tasks/tableReader_withAssoc.h @@ -4133,7 +4133,7 @@ struct AnalysisDileptonTrack { o2::framework::Configurable fConfigApplyMassEC{"cfgApplyMassEC", false, "Apply fit mass for sideband for the energy correlator study"}; o2::framework::Configurable> fConfigFitmassEC{"cfgTFitmassEC", std::vector{-0.541438, 2.8, 3.2}, "parameter from the fit fuction and fit range"}; o2::framework::Configurable> fConfigTransRange{"cfgTransRange", std::vector{0.333333, 0.666667}, "Transverse region for the energy correlstor analysis"}; - + o2::framework::Configurable fConfigbootstrapRN{"cfgBootstrapRN", -1, "Number of bootstrap samples for the energy correlator study"}; o2::framework::Configurable fConfigApplyEfficiency{"cfgApplyEfficiency", false, "If true, apply efficiency correction for the energy correlator study"}; o2::framework::Configurable fConfigApplyEfficiencyME{"cfgApplyEfficiencyME", false, "If true, apply efficiency correction for the energy correlator study"}; o2::framework::Configurable fConfigAccCCDBPath{"AccCCDBPath", "Users/y/yalin/pptest/test2", "Path of the efficiency corrections"}; @@ -4176,6 +4176,9 @@ struct AnalysisDileptonTrack { TH2F* hEfficiency_dilepton = nullptr; TH2F* hEfficiency_hadron = nullptr; TH1F* hMasswindow = nullptr; + TRandom3 fRndm{0}; + using BootstrapEventKey = std::pair; + std::map fBootstrapSampleMap; void init(o2::framework::InitContext& context) { @@ -4459,6 +4462,24 @@ struct AnalysisDileptonTrack { return hEff->Interpolate(safeX, safeY); } + template + int getBootstrapSample(TEvent const& event) + { + const BootstrapEventKey key{ + static_cast(event.timestamp()), + static_cast(event.globalIndex())}; + + if (auto it = fBootstrapSampleMap.find(key); + it != fBootstrapSampleMap.end()) { + return it->second; + } + + const int sample = static_cast(fRndm.Rndm() * fConfigbootstrapRN.value); + fBootstrapSampleMap.emplace(key, sample); + + return sample; + } + // Template function to run pair - hadron combinations template void runDileptonHadron(TEvent const& event, TTrackAssocs const& assocs, TTracks const& tracks, TDileptons const& dileptons) @@ -4468,6 +4489,10 @@ struct AnalysisDileptonTrack { VarManager::FillEvent(event, fValuesHadron); VarManager::FillEvent(event, fValuesDilepton); + if (fConfigbootstrapRN.value > 0) { + const int bootstrapSample = getBootstrapSample(event); + fValuesHadron[VarManager::kECBootstrapSample] = bootstrapSample; + } for (auto const& dilepton : dileptons) { // get full track info of tracks based on the index auto lepton1 = tracks.rawIteratorAt(dilepton.index0Id()); @@ -4740,6 +4765,10 @@ struct AnalysisDileptonTrack { auto evAssocs = assocs.sliceBy(trackAssocsPerCollision, event2.globalIndex()); evAssocs.bindExternalIndices(&events); + if (fConfigbootstrapRN.value > 0) { + const int bootstrapSample = getBootstrapSample(event1); + dqtablereader_helpers::varValues()[VarManager::kECBootstrapSample] = bootstrapSample; + } // loop over associations for (auto const& assoc : evAssocs) { From ca5c0689f567d69f2cc7f99cf24ad321b7c99415 Mon Sep 17 00:00:00 2001 From: YazhenLin Date: Thu, 5 Nov 2026 16:30:20 +0800 Subject: [PATCH 3/6] Add files via upload --- PWGDQ/Tasks/tableReader_withAssoc.h | 1 + 1 file changed, 1 insertion(+) diff --git a/PWGDQ/Tasks/tableReader_withAssoc.h b/PWGDQ/Tasks/tableReader_withAssoc.h index f22fd2b4e5c..061bae28f04 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc.h +++ b/PWGDQ/Tasks/tableReader_withAssoc.h @@ -63,6 +63,7 @@ #include #include #include +#include #include #include From a7abcce1ff8cbffe29fb8ac2ed7f9b34600de174 Mon Sep 17 00:00:00 2001 From: YazhenLin Date: Thu, 5 Nov 2026 16:57:56 +0800 Subject: [PATCH 4/6] Add files via upload --- PWGDQ/Tasks/dqEnergyCorrelator_direct.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGDQ/Tasks/dqEnergyCorrelator_direct.cxx b/PWGDQ/Tasks/dqEnergyCorrelator_direct.cxx index 72646c00d5c..7bcc2b70076 100644 --- a/PWGDQ/Tasks/dqEnergyCorrelator_direct.cxx +++ b/PWGDQ/Tasks/dqEnergyCorrelator_direct.cxx @@ -649,7 +649,7 @@ struct AnalysisEnergyCorrelator { } // end loop over MC signals VarManager::FillPair(t1, t2); - VarManager::FillPairVertexing(event, t1, t2, false, VarManager::fgValues); + VarManager::FillPairVertexing(event, t1, t2, VarManager::fgValues); if (sign1 * sign2 < 0) { // +- pairs fHistMan->FillHistClass(histNames[iEleCut][0].Data(), VarManager::fgValues); // reconstructed, unmatched @@ -933,7 +933,7 @@ struct AnalysisEnergyCorrelator { } // Fill pair variables for cut VarManager::FillPair(t1, t2, VarManager::fgValues); - VarManager::FillPairVertexing(event1, t1, t2, false, VarManager::fgValues); + VarManager::FillPairVertexing(event1, t1, t2, VarManager::fgValues); float mass = VarManager::fgValues[VarManager::kMass]; float pt = VarManager::fgValues[VarManager::kPt]; float rap = VarManager::fgValues[VarManager::kRap]; From 25a425c4ab4a5ed63fcfcf6f92b5351fe84d1e98 Mon Sep 17 00:00:00 2001 From: YazhenLin Date: Thu, 5 Nov 2026 20:01:57 +0800 Subject: [PATCH 5/6] Add files via upload --- PWGDQ/Core/VarManager.cxx | 3 --- PWGDQ/Core/VarManager.h | 1 - 2 files changed, 4 deletions(-) diff --git a/PWGDQ/Core/VarManager.cxx b/PWGDQ/Core/VarManager.cxx index ff979d87bf7..b85e284dd40 100644 --- a/PWGDQ/Core/VarManager.cxx +++ b/PWGDQ/Core/VarManager.cxx @@ -1721,8 +1721,6 @@ void VarManager::SetDefaultVarNames() fgVariableUnits[kDeltaPhiSym] = "rad."; fgVariableNames[kCosChi] = "Cos#chi"; fgVariableUnits[kCosChi] = ""; - fgVariableNames[kECBootstrapSample] = "EC bootstrap sample"; - fgVariableUnits[kECBootstrapSample] = ""; fgVariableNames[kCosTheta] = "Cos#theta"; fgVariableUnits[kCosTheta] = ""; fgVariableNames[kPtDau] = "hadron P_{T}"; @@ -2851,7 +2849,6 @@ void VarManager::SetDefaultVarNames() fgVarNamesMap["kCosChi"] = kCosChi; fgVarNamesMap["kWeight"] = kWeight; fgVarNamesMap["kECWeight"] = kECWeight; - fgVarNamesMap["kECBootstrapSample"] = kECBootstrapSample; fgVarNamesMap["kEWeight_before"] = kEWeight_before; fgVarNamesMap["kWeight_before"] = kWeight_before; fgVarNamesMap["kPtDau"] = kPtDau; diff --git a/PWGDQ/Core/VarManager.h b/PWGDQ/Core/VarManager.h index 7fdc4a2949d..a3b9d9d367b 100644 --- a/PWGDQ/Core/VarManager.h +++ b/PWGDQ/Core/VarManager.h @@ -1051,7 +1051,6 @@ class VarManager : public TObject kPhiDau, kWeight, kECWeight, - kECBootstrapSample, kPtDau, kCosTheta, kEWeight_before, From 436b143a363ac0585934b1fdc8c9576997cd6ad5 Mon Sep 17 00:00:00 2001 From: YazhenLin Date: Thu, 5 Nov 2026 20:05:31 +0800 Subject: [PATCH 6/6] Add files via upload --- PWGDQ/Tasks/tableReader_withAssoc.h | 32 +---------------------------- 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/PWGDQ/Tasks/tableReader_withAssoc.h b/PWGDQ/Tasks/tableReader_withAssoc.h index 061bae28f04..354e9fe815d 100644 --- a/PWGDQ/Tasks/tableReader_withAssoc.h +++ b/PWGDQ/Tasks/tableReader_withAssoc.h @@ -63,7 +63,6 @@ #include #include #include -#include #include #include @@ -4134,7 +4133,7 @@ struct AnalysisDileptonTrack { o2::framework::Configurable fConfigApplyMassEC{"cfgApplyMassEC", false, "Apply fit mass for sideband for the energy correlator study"}; o2::framework::Configurable> fConfigFitmassEC{"cfgTFitmassEC", std::vector{-0.541438, 2.8, 3.2}, "parameter from the fit fuction and fit range"}; o2::framework::Configurable> fConfigTransRange{"cfgTransRange", std::vector{0.333333, 0.666667}, "Transverse region for the energy correlstor analysis"}; - o2::framework::Configurable fConfigbootstrapRN{"cfgBootstrapRN", -1, "Number of bootstrap samples for the energy correlator study"}; + o2::framework::Configurable fConfigApplyEfficiency{"cfgApplyEfficiency", false, "If true, apply efficiency correction for the energy correlator study"}; o2::framework::Configurable fConfigApplyEfficiencyME{"cfgApplyEfficiencyME", false, "If true, apply efficiency correction for the energy correlator study"}; o2::framework::Configurable fConfigAccCCDBPath{"AccCCDBPath", "Users/y/yalin/pptest/test2", "Path of the efficiency corrections"}; @@ -4177,9 +4176,6 @@ struct AnalysisDileptonTrack { TH2F* hEfficiency_dilepton = nullptr; TH2F* hEfficiency_hadron = nullptr; TH1F* hMasswindow = nullptr; - TRandom3 fRndm{0}; - using BootstrapEventKey = std::pair; - std::map fBootstrapSampleMap; void init(o2::framework::InitContext& context) { @@ -4463,24 +4459,6 @@ struct AnalysisDileptonTrack { return hEff->Interpolate(safeX, safeY); } - template - int getBootstrapSample(TEvent const& event) - { - const BootstrapEventKey key{ - static_cast(event.timestamp()), - static_cast(event.globalIndex())}; - - if (auto it = fBootstrapSampleMap.find(key); - it != fBootstrapSampleMap.end()) { - return it->second; - } - - const int sample = static_cast(fRndm.Rndm() * fConfigbootstrapRN.value); - fBootstrapSampleMap.emplace(key, sample); - - return sample; - } - // Template function to run pair - hadron combinations template void runDileptonHadron(TEvent const& event, TTrackAssocs const& assocs, TTracks const& tracks, TDileptons const& dileptons) @@ -4490,10 +4468,6 @@ struct AnalysisDileptonTrack { VarManager::FillEvent(event, fValuesHadron); VarManager::FillEvent(event, fValuesDilepton); - if (fConfigbootstrapRN.value > 0) { - const int bootstrapSample = getBootstrapSample(event); - fValuesHadron[VarManager::kECBootstrapSample] = bootstrapSample; - } for (auto const& dilepton : dileptons) { // get full track info of tracks based on the index auto lepton1 = tracks.rawIteratorAt(dilepton.index0Id()); @@ -4766,10 +4740,6 @@ struct AnalysisDileptonTrack { auto evAssocs = assocs.sliceBy(trackAssocsPerCollision, event2.globalIndex()); evAssocs.bindExternalIndices(&events); - if (fConfigbootstrapRN.value > 0) { - const int bootstrapSample = getBootstrapSample(event1); - dqtablereader_helpers::varValues()[VarManager::kECBootstrapSample] = bootstrapSample; - } // loop over associations for (auto const& assoc : evAssocs) {