From 993db1a1d0db1a06358c9e9079b5869601e874cd Mon Sep 17 00:00:00 2001 From: joachimckh Date: Tue, 23 Jun 2026 14:53:07 +0200 Subject: [PATCH 1/2] add psi4, fix psi3 bug using Q2 --- PWGJE/Tasks/jetSpectraEseTask.cxx | 141 +++++++++++++++++------------- 1 file changed, 82 insertions(+), 59 deletions(-) diff --git a/PWGJE/Tasks/jetSpectraEseTask.cxx b/PWGJE/Tasks/jetSpectraEseTask.cxx index 4a5240f27df..b3aaf4560bf 100644 --- a/PWGJE/Tasks/jetSpectraEseTask.cxx +++ b/PWGJE/Tasks/jetSpectraEseTask.cxx @@ -452,20 +452,32 @@ struct JetSpectraEseTask { if (doprocessESEEPData) { LOGF(info, "JetSpectraEseTask::init() - Event Plane Process"); registry.add("eventQA/hPsi2FT0C", ";Centrality; #Psi_{2}", {HistType::kTH2F, {{centAxis}, {150, -2.5, 2.5}}}); - registry.addClone("eventQA/hPsi2FT0C", "hPsi2FT0A"); - registry.addClone("eventQA/hPsi2FT0C", "hPsi2FV0A"); - registry.addClone("eventQA/hPsi2FT0C", "hPsi2TPCpos"); - registry.addClone("eventQA/hPsi2FT0C", "hPsi2TPCneg"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi2FT0A"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi2FV0A"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi2TPCpos"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi2TPCneg"); + + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi3FT0C"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi3FT0A"); + + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi4FT0C"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi4FT0A"); + registry.add("eventQA/hCosPsi2AmC", ";Centrality;cos(2(#Psi_{2}^{A}-#Psi_{2}^{B}));#it{q}_{2}", {HistType::kTH3F, {{centAxis}, {cosAxis}, {eseAxis}}}); - registry.addClone("eventQA/hCosPsi2AmC", "hCosPsi2AmB"); - registry.addClone("eventQA/hCosPsi2AmC", "hCosPsi2BmC"); + registry.addClone("eventQA/hCosPsi2AmC", "eventQA/hCosPsi2AmB"); + registry.addClone("eventQA/hCosPsi2AmC", "eventQA/hCosPsi2BmC"); + + registry.addClone("eventQA/hCosPsi2AmC", "eventQA/hCosPsi4AmC"); + registry.addClone("eventQA/hCosPsi4AmC", "eventQA/hCosPsi4AmB"); + registry.addClone("eventQA/hCosPsi4AmC", "eventQA/hCosPsi4BmC"); + registry.add("eventQA/hQvecUncorV2", ";Centrality;Q_x;Q_y", {HistType::kTH3F, {{centAxis}, {qvecAxis}, {qvecAxis}}}); - registry.addClone("eventQA/hQvecUncorV2", "hQvecRectrV2"); - registry.addClone("eventQA/hQvecUncorV2", "hQvecTwistV2"); - registry.addClone("eventQA/hQvecUncorV2", "hQvecFinalV2"); - registry.addClone("eventQA/hPsi2FT0C", "hEPUncorV2"); - registry.addClone("eventQA/hPsi2FT0C", "hEPRectrV2"); - registry.addClone("eventQA/hPsi2FT0C", "hEPTwistV2"); + registry.addClone("eventQA/hQvecUncorV2", "eventQA/hQvecRectrV2"); + registry.addClone("eventQA/hQvecUncorV2", "eventQA/hQvecTwistV2"); + registry.addClone("eventQA/hQvecUncorV2", "eventQA/hQvecFinalV2"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hEPUncorV2"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hEPRectrV2"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hEPTwistV2"); } if (doprocessESEBackground) { LOGF(info, "JetSpectraEseTask::init() - Background Process"); @@ -1193,67 +1205,79 @@ struct JetSpectraEseTask { static constexpr float InvalidValue = 999.; - // template template EventPlane procEP(EPCol const& vec) { - constexpr std::array AmpCut{LowFT0Cut, 0.0}; - auto computeEP = [&AmpCut](const std::vector& vec, auto det, float n) { return vec[2] > AmpCut[det] ? (1.0 / n) * std::atan2(vec[1], vec[0]) : InvalidValue; }; - std::map epMap; - std::map ep3Map; - auto vec1{qVecNoESE(vec)}; - epMap["FT0A"] = computeEP(vec1, 0, 2.0); - ep3Map["FT0A"] = computeEP(vec1, 0, 3.0); - auto vec2{qVecNoESE(vec)}; - epMap["FT0C"] = computeEP(vec2, 0, 2.0); - ep3Map["FT0C"] = computeEP(vec2, 0, 3.0); - epMap["FV0A"] = computeEP(qVecNoESE(vec), 0, 2.0); - epMap["TPCpos"] = computeEP(qVecNoESE(vec), 1, 2.0); - epMap["TPCneg"] = computeEP(qVecNoESE(vec), 1, 2.0); + auto computeEP = [](const std::vector& qVec, float minAmp, float harmonic) { + return qVec[2] > minAmp ? std::atan2(qVec[1], qVec[0]) / harmonic : InvalidValue; + }; + + std::map epMap{ + {"FT0A", computeEP(qVecNoESE(vec, 2), LowFT0Cut, 2.0f)}, + {"FT0C", computeEP(qVecNoESE(vec, 2), LowFT0Cut, 2.0f)}, + {"FV0A", computeEP(qVecNoESE(vec), LowFT0Cut, 2.0f)}, + {"TPCpos", computeEP(qVecNoESE(vec), 0.0f, 2.0f)}, + {"TPCneg", computeEP(qVecNoESE(vec), 0.0f, 2.0f)}}; + std::map ep3Map{ + {"FT0A", computeEP(qVecNoESE(vec, 3), LowFT0Cut, 3.0f)}, + {"FT0C", computeEP(qVecNoESE(vec, 3), LowFT0Cut, 3.0f)}}; + std::map ep4Map{ + {"FT0A", computeEP(qVecNoESE(vec, 4), LowFT0Cut, 4.0f)}, + {"FT0C", computeEP(qVecNoESE(vec, 4), LowFT0Cut, 4.0f)}, + {"FV0A", computeEP(qVecNoESE(vec, 4), LowFT0Cut, 4.0f)}, + {"TPCpos", computeEP(qVecNoESE(vec, 4), 0.0f, 4.0f)}, + {"TPCneg", computeEP(qVecNoESE(vec, 4), 0.0f, 4.0f)}}; + if constexpr (P.psi) { - if constexpr (P.hist) - fillEP(/*std::make_index_sequence<5>{},*/ vec, epMap); - auto cosPsi = [](float psiX, float psiY) { return (static_cast(psiX) == InvalidValue || static_cast(psiY) == InvalidValue) ? InvalidValue : std::cos(2.0 * (psiX - psiY)); }; - std::array epCorrContainer{}; - epCorrContainer[0] = cosPsi(epMap.at(cfgEPRefA), epMap.at(cfgEPRefC)); - epCorrContainer[1] = cosPsi(epMap.at(cfgEPRefA), epMap.at(cfgEPRefB)); - epCorrContainer[2] = cosPsi(epMap.at(cfgEPRefB), epMap.at(cfgEPRefC)); - if constexpr (P.hist) - fillEPCos(/*std::make_index_sequence<3>{},*/ vec, epCorrContainer); - } - EventPlane localPlane; - localPlane.psi2 = epMap.at(cfgEPRefA); - localPlane.psi3 = ep3Map.at(cfgEPRefA); - return localPlane; - // return epMap.at(cfgEPRefA); + if constexpr (P.hist) { + fillEP(vec, epMap, ep3Map, ep4Map); + } + + auto cosPsi = [](float psiX, float psiY) { + return psiX == InvalidValue || psiY == InvalidValue ? InvalidValue : std::cos(2.0f * (psiX - psiY)); + }; + const std::array epCorrContainer{ + cosPsi(epMap.at(cfgEPRefA), epMap.at(cfgEPRefC)), + cosPsi(epMap.at(cfgEPRefA), epMap.at(cfgEPRefB)), + cosPsi(epMap.at(cfgEPRefB), epMap.at(cfgEPRefC))}; + const std::array epCorrContainer4{ + cosPsi(ep4Map.at(cfgEPRefA), ep4Map.at(cfgEPRefC)), + cosPsi(ep4Map.at(cfgEPRefA), ep4Map.at(cfgEPRefB)), + cosPsi(ep4Map.at(cfgEPRefB), ep4Map.at(cfgEPRefC))}; + + if constexpr (P.hist) { + fillEPCos(vec, epCorrContainer, epCorrContainer4); + } + } + return {epMap.at(cfgEPRefA), ep3Map.at(cfgEPRefA)}; } - template - void fillEPCos(/*const std::index_sequence&,*/ const collision& col, const std::array& Corr) + template + void fillEPCos(const collision& col, const std::array& Corr, const std::array& Corr4) { - // static constexpr std::string CosList[] = {"hCosPsi2AmC", "hCosPsi2AmB", "hCosPsi2BmC"}; - // (registry.fill(HIST(CosList[Idx]), col.centrality(), Corr[Idx], col.qPERCFT0C()[0]), ...); registry.fill(HIST("eventQA/hCosPsi2AmC"), col.centFT0M(), Corr[0], col.qPERCFT0C()[0]); registry.fill(HIST("eventQA/hCosPsi2AmB"), col.centFT0M(), Corr[1], col.qPERCFT0C()[0]); registry.fill(HIST("eventQA/hCosPsi2BmC"), col.centFT0M(), Corr[2], col.qPERCFT0C()[0]); + + registry.fill(HIST("eventQA/hCosPsi4AmC"), col.centFT0M(), Corr4[0], col.qPERCFT0C()[0]); + registry.fill(HIST("eventQA/hCosPsi4AmB"), col.centFT0M(), Corr4[1], col.qPERCFT0C()[0]); + registry.fill(HIST("eventQA/hCosPsi4BmC"), col.centFT0M(), Corr4[2], col.qPERCFT0C()[0]); } - template - void fillEP(/*const std::index_sequence&,*/ const collision& col, const std::map& epMap) + template + void fillEP(const collision& col, const std::map& epMap, const std::map& ep3Map, const std::map& ep4Map) { - // static constexpr std::string_view EpList[] = {"hPsi2FT0A", "hPsi2FV0A", "hPsi2FT0C", "hPsi2TPCpos", "hPsi2TPCneg"}; - // (registry.fill(HIST(EpList[Idx]), col.centrality(), epMap.at(std::string(RemovePrefix(EpList[Idx])))), ...); registry.fill(HIST("eventQA/hPsi2FT0A"), col.centFT0M(), epMap.at("FT0A")); registry.fill(HIST("eventQA/hPsi2FV0A"), col.centFT0M(), epMap.at("FV0A")); registry.fill(HIST("eventQA/hPsi2FT0C"), col.centFT0M(), epMap.at("FT0C")); registry.fill(HIST("eventQA/hPsi2TPCpos"), col.centFT0M(), epMap.at("TPCpos")); registry.fill(HIST("eventQA/hPsi2TPCneg"), col.centFT0M(), epMap.at("TPCneg")); - } - constexpr std::string_view RemovePrefix(std::string_view str) - { - constexpr std::string_view Prefix{"hPsi2"}; - return str.substr(Prefix.size()); - } + registry.fill(HIST("eventQA/hPsi3FT0A"), col.centFT0M(), ep3Map.at("FT0A")); + registry.fill(HIST("eventQA/hPsi3FT0C"), col.centFT0M(), ep3Map.at("FT0C")); + + registry.fill(HIST("eventQA/hPsi4FT0A"), col.centFT0M(), ep4Map.at("FT0A")); + registry.fill(HIST("eventQA/hPsi4FT0C"), col.centFT0M(), ep4Map.at("FT0C")); + } constexpr int detIDN(const DetID id) { switch (id) { @@ -1276,13 +1300,12 @@ struct JetSpectraEseTask { } template - std::vector qVecNoESE(Col collision) + std::vector qVecNoESE(Col collision, int nmode = 2) { - // const int nmode{2}; int detId{detIDN(id)}; - int detInd{detId * 4 /*+ cfgnTotalSystem * 4 * (nmode - 2)*/}; + int detInd{detId * 4 + cfgnTotalSystem * 4 * (nmode - 2)}; if constexpr (fill) { - if (collision.qvecAmp()[detInd] > LowFT0Cut) { + if (collision.qvecAmp()[detInd] > LowFT0Cut && nmode == 2) { registry.fill(HIST("eventQA/hQvecUncorV2"), collision.centFT0M(), collision.qvecRe()[detInd], collision.qvecIm()[detInd]); registry.fill(HIST("eventQA/hQvecRectrV2"), collision.centFT0M(), collision.qvecRe()[detInd + 1], collision.qvecIm()[detInd + 1]); registry.fill(HIST("eventQA/hQvecTwistV2"), collision.centFT0M(), collision.qvecRe()[detInd + 2], collision.qvecIm()[detInd + 2]); From 7e72f7acd4c31db804a5c5debf1cc829e6530dba Mon Sep 17 00:00:00 2001 From: joachimckh Date: Tue, 23 Jun 2026 14:58:34 +0200 Subject: [PATCH 2/2] zz --- PWGJE/Tasks/jetSpectraEseTask.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PWGJE/Tasks/jetSpectraEseTask.cxx b/PWGJE/Tasks/jetSpectraEseTask.cxx index b3aaf4560bf..40d150b33a2 100644 --- a/PWGJE/Tasks/jetSpectraEseTask.cxx +++ b/PWGJE/Tasks/jetSpectraEseTask.cxx @@ -1299,13 +1299,14 @@ struct JetSpectraEseTask { return -1; } + const int secondHarmonic{2}; template std::vector qVecNoESE(Col collision, int nmode = 2) { int detId{detIDN(id)}; int detInd{detId * 4 + cfgnTotalSystem * 4 * (nmode - 2)}; if constexpr (fill) { - if (collision.qvecAmp()[detInd] > LowFT0Cut && nmode == 2) { + if (collision.qvecAmp()[detInd] > LowFT0Cut && nmode == secondHarmonic) { registry.fill(HIST("eventQA/hQvecUncorV2"), collision.centFT0M(), collision.qvecRe()[detInd], collision.qvecIm()[detInd]); registry.fill(HIST("eventQA/hQvecRectrV2"), collision.centFT0M(), collision.qvecRe()[detInd + 1], collision.qvecIm()[detInd + 1]); registry.fill(HIST("eventQA/hQvecTwistV2"), collision.centFT0M(), collision.qvecRe()[detInd + 2], collision.qvecIm()[detInd + 2]);