Skip to content

Commit 3154013

Browse files
authored
[PWGJE] add psi4, fix psi3 bug using Q2 (#16776)
1 parent 178c15c commit 3154013

1 file changed

Lines changed: 83 additions & 59 deletions

File tree

PWGJE/Tasks/jetSpectraEseTask.cxx

Lines changed: 83 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -452,20 +452,32 @@ struct JetSpectraEseTask {
452452
if (doprocessESEEPData) {
453453
LOGF(info, "JetSpectraEseTask::init() - Event Plane Process");
454454
registry.add("eventQA/hPsi2FT0C", ";Centrality; #Psi_{2}", {HistType::kTH2F, {{centAxis}, {150, -2.5, 2.5}}});
455-
registry.addClone("eventQA/hPsi2FT0C", "hPsi2FT0A");
456-
registry.addClone("eventQA/hPsi2FT0C", "hPsi2FV0A");
457-
registry.addClone("eventQA/hPsi2FT0C", "hPsi2TPCpos");
458-
registry.addClone("eventQA/hPsi2FT0C", "hPsi2TPCneg");
455+
registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi2FT0A");
456+
registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi2FV0A");
457+
registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi2TPCpos");
458+
registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi2TPCneg");
459+
460+
registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi3FT0C");
461+
registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi3FT0A");
462+
463+
registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi4FT0C");
464+
registry.addClone("eventQA/hPsi2FT0C", "eventQA/hPsi4FT0A");
465+
459466
registry.add("eventQA/hCosPsi2AmC", ";Centrality;cos(2(#Psi_{2}^{A}-#Psi_{2}^{B}));#it{q}_{2}", {HistType::kTH3F, {{centAxis}, {cosAxis}, {eseAxis}}});
460-
registry.addClone("eventQA/hCosPsi2AmC", "hCosPsi2AmB");
461-
registry.addClone("eventQA/hCosPsi2AmC", "hCosPsi2BmC");
467+
registry.addClone("eventQA/hCosPsi2AmC", "eventQA/hCosPsi2AmB");
468+
registry.addClone("eventQA/hCosPsi2AmC", "eventQA/hCosPsi2BmC");
469+
470+
registry.addClone("eventQA/hCosPsi2AmC", "eventQA/hCosPsi4AmC");
471+
registry.addClone("eventQA/hCosPsi4AmC", "eventQA/hCosPsi4AmB");
472+
registry.addClone("eventQA/hCosPsi4AmC", "eventQA/hCosPsi4BmC");
473+
462474
registry.add("eventQA/hQvecUncorV2", ";Centrality;Q_x;Q_y", {HistType::kTH3F, {{centAxis}, {qvecAxis}, {qvecAxis}}});
463-
registry.addClone("eventQA/hQvecUncorV2", "hQvecRectrV2");
464-
registry.addClone("eventQA/hQvecUncorV2", "hQvecTwistV2");
465-
registry.addClone("eventQA/hQvecUncorV2", "hQvecFinalV2");
466-
registry.addClone("eventQA/hPsi2FT0C", "hEPUncorV2");
467-
registry.addClone("eventQA/hPsi2FT0C", "hEPRectrV2");
468-
registry.addClone("eventQA/hPsi2FT0C", "hEPTwistV2");
475+
registry.addClone("eventQA/hQvecUncorV2", "eventQA/hQvecRectrV2");
476+
registry.addClone("eventQA/hQvecUncorV2", "eventQA/hQvecTwistV2");
477+
registry.addClone("eventQA/hQvecUncorV2", "eventQA/hQvecFinalV2");
478+
registry.addClone("eventQA/hPsi2FT0C", "eventQA/hEPUncorV2");
479+
registry.addClone("eventQA/hPsi2FT0C", "eventQA/hEPRectrV2");
480+
registry.addClone("eventQA/hPsi2FT0C", "eventQA/hEPTwistV2");
469481
}
470482
if (doprocessESEBackground) {
471483
LOGF(info, "JetSpectraEseTask::init() - Background Process");
@@ -1193,67 +1205,79 @@ struct JetSpectraEseTask {
11931205

11941206
static constexpr float InvalidValue = 999.;
11951207

1196-
// template <bool FillAllPsi, bool FillHist, typename EPCol>
11971208
template <EventPlaneFiller P, typename EPCol>
11981209
EventPlane procEP(EPCol const& vec)
11991210
{
1200-
constexpr std::array<float, 2> AmpCut{LowFT0Cut, 0.0};
1201-
auto computeEP = [&AmpCut](const std::vector<float>& vec, auto det, float n) { return vec[2] > AmpCut[det] ? (1.0 / n) * std::atan2(vec[1], vec[0]) : InvalidValue; };
1202-
std::map<std::string, float> epMap;
1203-
std::map<std::string, float> ep3Map;
1204-
auto vec1{qVecNoESE<DetID::FT0A, P.hist>(vec)};
1205-
epMap["FT0A"] = computeEP(vec1, 0, 2.0);
1206-
ep3Map["FT0A"] = computeEP(vec1, 0, 3.0);
1207-
auto vec2{qVecNoESE<DetID::FT0C, false>(vec)};
1208-
epMap["FT0C"] = computeEP(vec2, 0, 2.0);
1209-
ep3Map["FT0C"] = computeEP(vec2, 0, 3.0);
1210-
epMap["FV0A"] = computeEP(qVecNoESE<DetID::FV0A, false>(vec), 0, 2.0);
1211-
epMap["TPCpos"] = computeEP(qVecNoESE<DetID::TPCpos, false>(vec), 1, 2.0);
1212-
epMap["TPCneg"] = computeEP(qVecNoESE<DetID::TPCneg, false>(vec), 1, 2.0);
1211+
auto computeEP = [](const std::vector<float>& qVec, float minAmp, float harmonic) {
1212+
return qVec[2] > minAmp ? std::atan2(qVec[1], qVec[0]) / harmonic : InvalidValue;
1213+
};
1214+
1215+
std::map<std::string, float> epMap{
1216+
{"FT0A", computeEP(qVecNoESE<DetID::FT0A, P.hist>(vec, 2), LowFT0Cut, 2.0f)},
1217+
{"FT0C", computeEP(qVecNoESE<DetID::FT0C, false>(vec, 2), LowFT0Cut, 2.0f)},
1218+
{"FV0A", computeEP(qVecNoESE<DetID::FV0A, false>(vec), LowFT0Cut, 2.0f)},
1219+
{"TPCpos", computeEP(qVecNoESE<DetID::TPCpos, false>(vec), 0.0f, 2.0f)},
1220+
{"TPCneg", computeEP(qVecNoESE<DetID::TPCneg, false>(vec), 0.0f, 2.0f)}};
1221+
std::map<std::string, float> ep3Map{
1222+
{"FT0A", computeEP(qVecNoESE<DetID::FT0A, false>(vec, 3), LowFT0Cut, 3.0f)},
1223+
{"FT0C", computeEP(qVecNoESE<DetID::FT0C, false>(vec, 3), LowFT0Cut, 3.0f)}};
1224+
std::map<std::string, float> ep4Map{
1225+
{"FT0A", computeEP(qVecNoESE<DetID::FT0A, false>(vec, 4), LowFT0Cut, 4.0f)},
1226+
{"FT0C", computeEP(qVecNoESE<DetID::FT0C, false>(vec, 4), LowFT0Cut, 4.0f)},
1227+
{"FV0A", computeEP(qVecNoESE<DetID::FV0A, false>(vec, 4), LowFT0Cut, 4.0f)},
1228+
{"TPCpos", computeEP(qVecNoESE<DetID::TPCpos, false>(vec, 4), 0.0f, 4.0f)},
1229+
{"TPCneg", computeEP(qVecNoESE<DetID::TPCneg, false>(vec, 4), 0.0f, 4.0f)}};
1230+
12131231
if constexpr (P.psi) {
1214-
if constexpr (P.hist)
1215-
fillEP(/*std::make_index_sequence<5>{},*/ vec, epMap);
1216-
auto cosPsi = [](float psiX, float psiY) { return (static_cast<double>(psiX) == InvalidValue || static_cast<double>(psiY) == InvalidValue) ? InvalidValue : std::cos(2.0 * (psiX - psiY)); };
1217-
std::array<float, 3> epCorrContainer{};
1218-
epCorrContainer[0] = cosPsi(epMap.at(cfgEPRefA), epMap.at(cfgEPRefC));
1219-
epCorrContainer[1] = cosPsi(epMap.at(cfgEPRefA), epMap.at(cfgEPRefB));
1220-
epCorrContainer[2] = cosPsi(epMap.at(cfgEPRefB), epMap.at(cfgEPRefC));
1221-
if constexpr (P.hist)
1222-
fillEPCos(/*std::make_index_sequence<3>{},*/ vec, epCorrContainer);
1223-
}
1224-
EventPlane localPlane;
1225-
localPlane.psi2 = epMap.at(cfgEPRefA);
1226-
localPlane.psi3 = ep3Map.at(cfgEPRefA);
1227-
return localPlane;
1228-
// return epMap.at(cfgEPRefA);
1232+
if constexpr (P.hist) {
1233+
fillEP(vec, epMap, ep3Map, ep4Map);
1234+
}
1235+
1236+
auto cosPsi = [](float psiX, float psiY) {
1237+
return psiX == InvalidValue || psiY == InvalidValue ? InvalidValue : std::cos(2.0f * (psiX - psiY));
1238+
};
1239+
const std::array<float, 3> epCorrContainer{
1240+
cosPsi(epMap.at(cfgEPRefA), epMap.at(cfgEPRefC)),
1241+
cosPsi(epMap.at(cfgEPRefA), epMap.at(cfgEPRefB)),
1242+
cosPsi(epMap.at(cfgEPRefB), epMap.at(cfgEPRefC))};
1243+
const std::array<float, 3> epCorrContainer4{
1244+
cosPsi(ep4Map.at(cfgEPRefA), ep4Map.at(cfgEPRefC)),
1245+
cosPsi(ep4Map.at(cfgEPRefA), ep4Map.at(cfgEPRefB)),
1246+
cosPsi(ep4Map.at(cfgEPRefB), ep4Map.at(cfgEPRefC))};
1247+
1248+
if constexpr (P.hist) {
1249+
fillEPCos(vec, epCorrContainer, epCorrContainer4);
1250+
}
1251+
}
1252+
return {epMap.at(cfgEPRefA), ep3Map.at(cfgEPRefA)};
12291253
}
1230-
template </*std::size_t... Idx,*/ typename collision>
1231-
void fillEPCos(/*const std::index_sequence<Idx...>&,*/ const collision& col, const std::array<float, 3>& Corr)
1254+
template <typename collision>
1255+
void fillEPCos(const collision& col, const std::array<float, 3>& Corr, const std::array<float, 3>& Corr4)
12321256
{
1233-
// static constexpr std::string CosList[] = {"hCosPsi2AmC", "hCosPsi2AmB", "hCosPsi2BmC"};
1234-
// (registry.fill(HIST(CosList[Idx]), col.centrality(), Corr[Idx], col.qPERCFT0C()[0]), ...);
12351257
registry.fill(HIST("eventQA/hCosPsi2AmC"), col.centFT0M(), Corr[0], col.qPERCFT0C()[0]);
12361258
registry.fill(HIST("eventQA/hCosPsi2AmB"), col.centFT0M(), Corr[1], col.qPERCFT0C()[0]);
12371259
registry.fill(HIST("eventQA/hCosPsi2BmC"), col.centFT0M(), Corr[2], col.qPERCFT0C()[0]);
1260+
1261+
registry.fill(HIST("eventQA/hCosPsi4AmC"), col.centFT0M(), Corr4[0], col.qPERCFT0C()[0]);
1262+
registry.fill(HIST("eventQA/hCosPsi4AmB"), col.centFT0M(), Corr4[1], col.qPERCFT0C()[0]);
1263+
registry.fill(HIST("eventQA/hCosPsi4BmC"), col.centFT0M(), Corr4[2], col.qPERCFT0C()[0]);
12381264
}
12391265

1240-
template </*std::size_t... Idx,*/ typename collision>
1241-
void fillEP(/*const std::index_sequence<Idx...>&,*/ const collision& col, const std::map<std::string, float>& epMap)
1266+
template <typename collision>
1267+
void fillEP(const collision& col, const std::map<std::string, float>& epMap, const std::map<std::string, float>& ep3Map, const std::map<std::string, float>& ep4Map)
12421268
{
1243-
// static constexpr std::string_view EpList[] = {"hPsi2FT0A", "hPsi2FV0A", "hPsi2FT0C", "hPsi2TPCpos", "hPsi2TPCneg"};
1244-
// (registry.fill(HIST(EpList[Idx]), col.centrality(), epMap.at(std::string(RemovePrefix(EpList[Idx])))), ...);
12451269
registry.fill(HIST("eventQA/hPsi2FT0A"), col.centFT0M(), epMap.at("FT0A"));
12461270
registry.fill(HIST("eventQA/hPsi2FV0A"), col.centFT0M(), epMap.at("FV0A"));
12471271
registry.fill(HIST("eventQA/hPsi2FT0C"), col.centFT0M(), epMap.at("FT0C"));
12481272
registry.fill(HIST("eventQA/hPsi2TPCpos"), col.centFT0M(), epMap.at("TPCpos"));
12491273
registry.fill(HIST("eventQA/hPsi2TPCneg"), col.centFT0M(), epMap.at("TPCneg"));
1250-
}
1251-
constexpr std::string_view RemovePrefix(std::string_view str)
1252-
{
1253-
constexpr std::string_view Prefix{"hPsi2"};
1254-
return str.substr(Prefix.size());
1255-
}
12561274

1275+
registry.fill(HIST("eventQA/hPsi3FT0A"), col.centFT0M(), ep3Map.at("FT0A"));
1276+
registry.fill(HIST("eventQA/hPsi3FT0C"), col.centFT0M(), ep3Map.at("FT0C"));
1277+
1278+
registry.fill(HIST("eventQA/hPsi4FT0A"), col.centFT0M(), ep4Map.at("FT0A"));
1279+
registry.fill(HIST("eventQA/hPsi4FT0C"), col.centFT0M(), ep4Map.at("FT0C"));
1280+
}
12571281
constexpr int detIDN(const DetID id)
12581282
{
12591283
switch (id) {
@@ -1275,14 +1299,14 @@ struct JetSpectraEseTask {
12751299
return -1;
12761300
}
12771301

1302+
const int secondHarmonic{2};
12781303
template <DetID id, bool fill, typename Col>
1279-
std::vector<float> qVecNoESE(Col collision)
1304+
std::vector<float> qVecNoESE(Col collision, int nmode = 2)
12801305
{
1281-
// const int nmode{2};
12821306
int detId{detIDN(id)};
1283-
int detInd{detId * 4 /*+ cfgnTotalSystem * 4 * (nmode - 2)*/};
1307+
int detInd{detId * 4 + cfgnTotalSystem * 4 * (nmode - 2)};
12841308
if constexpr (fill) {
1285-
if (collision.qvecAmp()[detInd] > LowFT0Cut) {
1309+
if (collision.qvecAmp()[detInd] > LowFT0Cut && nmode == secondHarmonic) {
12861310
registry.fill(HIST("eventQA/hQvecUncorV2"), collision.centFT0M(), collision.qvecRe()[detInd], collision.qvecIm()[detInd]);
12871311
registry.fill(HIST("eventQA/hQvecRectrV2"), collision.centFT0M(), collision.qvecRe()[detInd + 1], collision.qvecIm()[detInd + 1]);
12881312
registry.fill(HIST("eventQA/hQvecTwistV2"), collision.centFT0M(), collision.qvecRe()[detInd + 2], collision.qvecIm()[detInd + 2]);

0 commit comments

Comments
 (0)