From b408ca19f1c8ae19f5acc1f5828a5d288b83413b Mon Sep 17 00:00:00 2001 From: joachimckh Date: Fri, 26 Jun 2026 13:23:00 +0200 Subject: [PATCH] add h2 ft0c/ft0a qnred, psi44+psi42 --- PWGJE/Tasks/jetSpectraEseTask.cxx | 136 +++++++++++++++++++++--------- 1 file changed, 94 insertions(+), 42 deletions(-) diff --git a/PWGJE/Tasks/jetSpectraEseTask.cxx b/PWGJE/Tasks/jetSpectraEseTask.cxx index c91fe3bad7e..e7ad69403dd 100644 --- a/PWGJE/Tasks/jetSpectraEseTask.cxx +++ b/PWGJE/Tasks/jetSpectraEseTask.cxx @@ -100,11 +100,8 @@ struct JetSpectraEseTask { Configurable cfgChi2PrTPCcls{"cfgChi2PrTPCcls", 2.5, "cut for chi2 per TPC cluster for tracks"}; Configurable cfgChi2PrITScls{"cfgChi2PrITScls", 36, "cut for chi2 per ITS cluster for tracks"}; - Configurable trackPtMinRhoPhi{"trackPtMinRhoPhi", 0.2, "minimum pT acceptance for tracks used in rho(phi) calculation"}; - Configurable trackPtMaxRhoPhi{"trackPtMaxRhoPhi", 5.0, "maximum pT acceptance for tracks used in rho(phi) calculation"}; - - Configurable jetEtaMin{"jetEtaMin", -0.7, "minimum jet pseudorapidity"}; - Configurable jetEtaMax{"jetEtaMax", 0.7, "maximum jet pseudorapidity"}; + Configurable> trackPtRhoPhi{"trackPtRhoPhi", {0.2, 5.0}, "pT range for tracks used in rho(phi) calculation"}; + Configurable> cfgJetEta{"cfgJetEta", {-0.7, 0.7}, "jet eta range for analysis"}; Configurable eventSelections{"eventSelections", "sel8FullPbPb", "choose event selection"}; Configurable trackSelections{"trackSelections", "globalTracks", "set track selections"}; @@ -117,6 +114,7 @@ struct JetSpectraEseTask { Configurable cfgnTotalSystem{"cfgnTotalSystem", 7, "total qvector number // look in Qvector table for this number"}; Configurable cfgnCorrLevel{"cfgnCorrLevel", 3, "QVector step: 0 = no corr, 1 = rect, 2 = twist, 3 = full"}; + Configurable cfgnredCorrLevel{"cfgnredCorrLevel", 2, "For the correlation of the reduced q vector, QVector step: 0 = no corr, 1 = rect, 2 = twist, 3 = full"}; Configurable cfgEPRefA{"cfgEPRefA", "FT0A", "EP reference A"}; Configurable cfgEPRefB{"cfgEPRefB", "TPCpos", "EP reference B"}; @@ -460,13 +458,23 @@ struct JetSpectraEseTask { registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi3FT0C"); registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi3FT0A"); - 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", "eventQA/hCosPsi2AmB"); - registry.addClone("eventQA/hCosPsi2AmC", "eventQA/hCosPsi2BmC"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi4FT0C"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi4FT0A"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi4FV0A"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi4TPCpos"); + registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi4TPCneg"); + + registry.add("eventQA/hCos2Psi2AmC", ";Centrality;cos(2(#Psi_{2}^{A}-#Psi_{2}^{B}));#it{q}_{2}", {HistType::kTH3F, {{centAxis}, {cosAxis}, {eseAxis}}}); + registry.addClone("eventQA/hCos2Psi2AmC", "eventQA/hCos2Psi2AmB"); + registry.addClone("eventQA/hCos2Psi2AmC", "eventQA/hCos2Psi2BmC"); - registry.addClone("eventQA/hCosPsi2AmC", "eventQA/hCos4PsiAmC"); - registry.addClone("eventQA/hCosPsi2AmC", "eventQA/hCos4PsiAmB"); - registry.addClone("eventQA/hCosPsi2AmC", "eventQA/hCos4PsiBmC"); + registry.addClone("eventQA/hCos2Psi2AmC", "eventQA/hCos4Psi2AmC"); + registry.addClone("eventQA/hCos2Psi2AmC", "eventQA/hCos4Psi2AmB"); + registry.addClone("eventQA/hCos2Psi2AmC", "eventQA/hCos4Psi2BmC"); + + registry.addClone("eventQA/hCos2Psi2AmC", "eventQA/hCos4Psi4AmC"); + registry.addClone("eventQA/hCos2Psi2AmC", "eventQA/hCos4Psi4AmB"); + registry.addClone("eventQA/hCos2Psi2AmC", "eventQA/hCos4Psi4BmC"); registry.add("eventQA/hQvecUncorV2", ";Centrality;Q_x;Q_y", {HistType::kTH3F, {{centAxis}, {qvecAxis}, {qvecAxis}}}); registry.addClone("eventQA/hQvecUncorV2", "eventQA/hQvecRectrV2"); @@ -475,6 +483,8 @@ struct JetSpectraEseTask { registry.addClone("eventQA/hPsi2FT0C", "eventQA/hEPUncorV2"); registry.addClone("eventQA/hPsi2FT0C", "eventQA/hEPRectrV2"); registry.addClone("eventQA/hPsi2FT0C", "eventQA/hEPTwistV2"); + + registry.add("eventQA/h3Centq2FT0Cq2FT0A", ";Centrality;#it{q}_{2}^{FT0C};#it{q}_{2}^{FT0A}", {HistType::kTH3F, {{centAxis}, {250, 0, 35}, {250, 0, 35}}}); } if (doprocessESEBackground) { LOGF(info, "JetSpectraEseTask::init() - Background Process"); @@ -674,7 +684,7 @@ struct JetSpectraEseTask { auto corrL = [&](const auto& j) { return j.pt() - evalRho(rhoFit.get(), jetR, j.phi(), collision.rho()) * j.area(); }; for (const auto& jet : jets) { - if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) + if (!jetfindingutilities::isInEtaAcceptance(jet, cfgJetEta->at(0), cfgJetEta->at(1), trackEtaMin, trackEtaMax)) continue; // if (!isAcceptedJet(jet)) { if (!isAcceptedJet>(jet)) { @@ -809,7 +819,7 @@ struct JetSpectraEseTask { auto corrL = [&](const auto& j) { return j.pt() - evalRho(rhoFit.get(), jetR, j.phi(), c1.rho()) * j.area(); }; for (const auto& jet : jets1) { - if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) + if (!jetfindingutilities::isInEtaAcceptance(jet, cfgJetEta->at(0), cfgJetEta->at(1), trackEtaMin, trackEtaMax)) continue; if (!isAcceptedJet>(jet)) { continue; @@ -896,6 +906,7 @@ struct JetSpectraEseTask { return; [[maybe_unused]] const auto psi{procEP(collision)}; + detCorrelation(collision); } PROCESS_SWITCH(JetSpectraEseTask, processESEEPData, "process ese collisions for filling EP and EPR", false); @@ -939,7 +950,7 @@ struct JetSpectraEseTask { registry.fill(HIST("hTrackPhi"), collision.centFT0M(), track.phi(), occupancy); } for (const auto& jet : jets) { - if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) + if (!jetfindingutilities::isInEtaAcceptance(jet, cfgJetEta->at(0), cfgJetEta->at(1), trackEtaMin, trackEtaMax)) continue; if (!isAcceptedJet(jet)) { continue; @@ -1203,6 +1214,27 @@ struct JetSpectraEseTask { } PROCESS_SWITCH(JetSpectraEseTask, processMCRecoTrack, "jet MC process: Reconstructed track", false); + float redqn(const std::vector& vec) + { + float redq = -999.0f; + if (vec[2] > LowFT0Cut) { + redq = std::sqrt(vec[0] * vec[0] + vec[1] * vec[1]) * std::sqrt(vec[2]); + } + return redq; + } + template + void detCorrelation(Col const& col) + { + + auto qC = qVecNoESE(col, 2, cfgnredCorrLevel); + auto qA = qVecNoESE(col, 2, cfgnredCorrLevel); + + auto redFT0C = redqn(qC); + auto redFT0A = redqn(qA); + + registry.fill(HIST("eventQA/h3Centq2FT0Cq2FT0A"), col.centFT0M(), redFT0C, redFT0A); + } + static constexpr float InvalidValue = 999.; template @@ -1213,52 +1245,66 @@ struct JetSpectraEseTask { }; 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)}}; + {"FT0A", computeEP(qVecNoESE(vec, 2, cfgnCorrLevel), LowFT0Cut, 2.0f)}, + {"FT0C", computeEP(qVecNoESE(vec, 2, cfgnCorrLevel), LowFT0Cut, 2.0f)}, + {"FV0A", computeEP(qVecNoESE(vec, 2, cfgnCorrLevel), LowFT0Cut, 2.0f)}, + {"TPCpos", computeEP(qVecNoESE(vec, 2, cfgnCorrLevel), 0.0f, 2.0f)}, + {"TPCneg", computeEP(qVecNoESE(vec, 2, cfgnCorrLevel), 0.0f, 2.0f)}}; std::map ep3Map{ - {"FT0A", computeEP(qVecNoESE(vec, 3), LowFT0Cut, 3.0f)}, - {"FT0C", computeEP(qVecNoESE(vec, 3), LowFT0Cut, 3.0f)}}; + {"FT0A", computeEP(qVecNoESE(vec, 3, cfgnCorrLevel), LowFT0Cut, 3.0f)}, + {"FT0C", computeEP(qVecNoESE(vec, 3, cfgnCorrLevel), LowFT0Cut, 3.0f)}}; + std::map ep4Map{ + {"FT0A", computeEP(qVecNoESE(vec, 4, cfgnCorrLevel), LowFT0Cut, 4.0f)}, + {"FT0C", computeEP(qVecNoESE(vec, 4, cfgnCorrLevel), LowFT0Cut, 4.0f)}, + {"FV0A", computeEP(qVecNoESE(vec, 4, cfgnCorrLevel), LowFT0Cut, 4.0f)}, + {"TPCpos", computeEP(qVecNoESE(vec, 4, cfgnCorrLevel), 0.0f, 4.0f)}, + {"TPCneg", computeEP(qVecNoESE(vec, 4, cfgnCorrLevel), 0.0f, 4.0f)}}; if constexpr (P.psi) { if constexpr (P.hist) { - fillEP(vec, epMap, ep3Map); + fillEP(vec, epMap, ep3Map, ep4Map); } auto cosPsi = [](float psiX, float psiY, const float harmonic = 2.0f) { return psiX == InvalidValue || psiY == InvalidValue ? InvalidValue : std::cos(harmonic * (psiX - psiY)); }; - const std::array epCorrContainer{ + const std::array epCorrContainer22{ 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{ + const std::array epCorrContainer24{ cosPsi(epMap.at(cfgEPRefA), epMap.at(cfgEPRefC), 4.0f), cosPsi(epMap.at(cfgEPRefA), epMap.at(cfgEPRefB), 4.0f), cosPsi(epMap.at(cfgEPRefB), epMap.at(cfgEPRefC), 4.0f)}; + const std::array epCorrContainer44{ + cosPsi(ep4Map.at(cfgEPRefA), ep4Map.at(cfgEPRefC), 4.0f), + cosPsi(ep4Map.at(cfgEPRefA), ep4Map.at(cfgEPRefB), 4.0f), + cosPsi(ep4Map.at(cfgEPRefB), ep4Map.at(cfgEPRefC), 4.0f)}; if constexpr (P.hist) { - fillEPCos(vec, epCorrContainer, epCorrContainer4); + fillEPCos(vec, epCorrContainer22, epCorrContainer24, epCorrContainer44); } } return {epMap.at(cfgEPRefA), ep3Map.at(cfgEPRefA)}; } template - void fillEPCos(const collision& col, const std::array& Corr, const std::array& Corr4) + void fillEPCos(const collision& col, const std::array& Corr22, const std::array& Corr42, const std::array& Corr44) { - 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/hCos2Psi2AmC"), col.centFT0M(), Corr22[0], col.qPERCFT0C()[0]); + registry.fill(HIST("eventQA/hCos2Psi2AmB"), col.centFT0M(), Corr22[1], col.qPERCFT0C()[0]); + registry.fill(HIST("eventQA/hCos2Psi2BmC"), col.centFT0M(), Corr22[2], col.qPERCFT0C()[0]); + + registry.fill(HIST("eventQA/hCos4Psi2AmC"), col.centFT0M(), Corr42[0], col.qPERCFT0C()[0]); + registry.fill(HIST("eventQA/hCos4Psi2AmB"), col.centFT0M(), Corr42[1], col.qPERCFT0C()[0]); + registry.fill(HIST("eventQA/hCos4Psi2BmC"), col.centFT0M(), Corr42[2], col.qPERCFT0C()[0]); - registry.fill(HIST("eventQA/hCos4PsiAmC"), col.centFT0M(), Corr4[0], col.qPERCFT0C()[0]); - registry.fill(HIST("eventQA/hCos4PsiAmB"), col.centFT0M(), Corr4[1], col.qPERCFT0C()[0]); - registry.fill(HIST("eventQA/hCos4PsiBmC"), col.centFT0M(), Corr4[2], col.qPERCFT0C()[0]); + registry.fill(HIST("eventQA/hCos4Psi4AmC"), col.centFT0M(), Corr44[0], col.qPERCFT0C()[0]); + registry.fill(HIST("eventQA/hCos4Psi4AmB"), col.centFT0M(), Corr44[1], col.qPERCFT0C()[0]); + registry.fill(HIST("eventQA/hCos4Psi4BmC"), col.centFT0M(), Corr44[2], col.qPERCFT0C()[0]); } template - void fillEP(const collision& col, const std::map& epMap, const std::map& ep3Map) + void fillEP(const collision& col, const std::map& epMap, const std::map& ep3Map, const std::map& ep4Map) { registry.fill(HIST("eventQA/hPsi2FT0A"), col.centFT0M(), epMap.at("FT0A")); registry.fill(HIST("eventQA/hPsi2FV0A"), col.centFT0M(), epMap.at("FV0A")); @@ -1268,6 +1314,12 @@ struct JetSpectraEseTask { 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")); + registry.fill(HIST("eventQA/hPsi4FV0A"), col.centFT0M(), ep4Map.at("FV0A")); + registry.fill(HIST("eventQA/hPsi4TPCpos"), col.centFT0M(), ep4Map.at("TPCpos")); + registry.fill(HIST("eventQA/hPsi4TPCneg"), col.centFT0M(), ep4Map.at("TPCneg")); } constexpr int detIDN(const DetID id) { @@ -1292,7 +1344,7 @@ struct JetSpectraEseTask { const int secondHarmonic{2}; template - std::vector qVecNoESE(Col collision, int nmode = 2) + std::vector qVecNoESE(Col collision, int nmode = 2, int corrLevel = 3) { int detId{detIDN(id)}; int detInd{detId * 4 + cfgnTotalSystem * 4 * (nmode - 2)}; @@ -1308,8 +1360,8 @@ struct JetSpectraEseTask { } } std::vector qVec{}; - qVec.push_back(collision.qvecRe()[detInd + cfgnCorrLevel]); - qVec.push_back(collision.qvecIm()[detInd + cfgnCorrLevel]); + qVec.push_back(collision.qvecRe()[detInd + corrLevel]); + qVec.push_back(collision.qvecIm()[detInd + corrLevel]); qVec.push_back(collision.qvecAmp()[detId]); return qVec; } @@ -1370,7 +1422,7 @@ struct JetSpectraEseTask { for (const auto& track : tracks) { if constexpr (fillHist) registry.fill(HIST("trackQA/hRhoTrackCounter"), 0.5); - if (jetderiveddatautilities::selectTrack(track, trackSelection) && (std::fabs(track.eta() - leadingJetEta) > jetR) && track.pt() >= trackPtMinRhoPhi && track.pt() <= trackPtMaxRhoPhi) { + if (jetderiveddatautilities::selectTrack(track, trackSelection) && (std::fabs(track.eta() - leadingJetEta) > jetR) && track.pt() >= trackPtRhoPhi->at(0) && track.pt() <= trackPtRhoPhi->at(1)) { nTrk++; if constexpr (fillHist) registry.fill(HIST("trackQA/hRhoTrackCounter"), 1.5); @@ -1382,7 +1434,7 @@ struct JetSpectraEseTask { auto hPhiPt = std::unique_ptr(new TH1F("h_ptsum_sumpt_fit", "h_ptsum_sumpt fit use", TMath::CeilNint(std::sqrt(nTrk)), 0., o2::constants::math::TwoPI)); for (const auto& track : tracks) { - if (jetderiveddatautilities::selectTrack(track, trackSelection) && (std::fabs(track.eta() - leadingJetEta) > jetR) && track.pt() >= trackPtMinRhoPhi && track.pt() <= trackPtMaxRhoPhi) { + if (jetderiveddatautilities::selectTrack(track, trackSelection) && (std::fabs(track.eta() - leadingJetEta) > jetR) && track.pt() >= trackPtRhoPhi->at(0) && track.pt() <= trackPtRhoPhi->at(1)) { hPhiPt->Fill(track.phi(), track.pt()); if constexpr (fillHist) { registry.fill(HIST("trackQA/hRhoTrackCounter"), 2.5); @@ -1617,7 +1669,7 @@ struct JetSpectraEseTask { { float weight = 1.0; for (const auto& jet : jets) { - if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) { + if (!jetfindingutilities::isInEtaAcceptance(jet, cfgJetEta->at(0), cfgJetEta->at(1), trackEtaMin, trackEtaMax)) { continue; } if (!isAcceptedJet(jet)) { @@ -1640,7 +1692,7 @@ struct JetSpectraEseTask { bool mcLevelIsParticleLevel = true; float weight = 1.0; for (const auto& jet : jets) { - if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) { + if (!jetfindingutilities::isInEtaAcceptance(jet, cfgJetEta->at(0), cfgJetEta->at(1), trackEtaMin, trackEtaMax)) { continue; } if (!isAcceptedJet(jet, mcLevelIsParticleLevel)) { @@ -1662,7 +1714,7 @@ struct JetSpectraEseTask { { float weight = 1.0; for (const auto& jet : jets) { - if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) { + if (!jetfindingutilities::isInEtaAcceptance(jet, cfgJetEta->at(0), cfgJetEta->at(1), trackEtaMin, trackEtaMax)) { continue; } if (!isAcceptedJet(jet)) { @@ -1711,7 +1763,7 @@ struct JetSpectraEseTask { float leadJetEta = -999; bool hasLeadingJet = false; for (const auto& jet : jets) { - if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) + if (!jetfindingutilities::isInEtaAcceptance(jet, cfgJetEta->at(0), cfgJetEta->at(1), trackEtaMin, trackEtaMax)) continue; if (!isAcceptedJet>(jet)) { continue;