Skip to content

Commit 902770e

Browse files
Luzhiyonggalibuild
andauthored
[PWGCF] validation for new version flowPtContainer (#18487)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 9b9a7ab commit 902770e

1 file changed

Lines changed: 93 additions & 27 deletions

File tree

‎PWGCF/Flow/Tasks/flowTask.cxx‎

Lines changed: 93 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ struct FlowTask {
101101
Configurable<LabeledArray<double>> cfgPtPtGaps{"cfgPtPtGaps", {LongArrayDouble[0], 4, 2, {"subevent 1", "subevent 2", "subevent 3", "subevent 4"}, {"etamin", "etamax"}}, "{etamin,etamax} for all ptpt-subevents"};
102102
O2_DEFINE_CONFIGURABLE(cfgEtaGapPtPtEnabled, bool, false, "switch of subevent pt-pt correlations")
103103
Configurable<LabeledArray<float>> cfgTrackCuts{"cfgTrackCuts", {TrackCutArray[0], 7, 2, {"chi2 per TPCcls", "TPC cluster", "TPC crossed rows", "ITS cluster", "DCAz", "DCAxy Nsigma", "DCAz Nsigma(override)"}, {"Nch", "Observable"}}, "separate Nch and observable track selections"};
104+
std::array<std::array<float, 2>, 7> trackCuts{};
104105
enum TrackCut {
105106
// enum for labelledArray track selection
106107
kChi2prTPCcls = 0, // max chi2 per TPC clusters
@@ -244,6 +245,13 @@ struct FlowTask {
244245
std::vector<std::shared_ptr<TProfile2D>> listNptV2;
245246
std::vector<std::shared_ptr<TH2>> listPtX;
246247
O2_DEFINE_CONFIGURABLE(cfgManualCk, bool, false, "Produce pt-pt variance")
248+
O2_DEFINE_CONFIGURABLE(cfgNewPtContainer, bool, false, "Switch to new version of flowPtContainer. This switch will be removed after validation of new container.")
249+
Configurable<GFWRegions> cfgNpcRegions{"cfgNpcRegions", {{"refN", "refP", "refMid", "refFull"}, {-0.8, 0.4, -0.4, -0.8}, {-0.4, 0.8, 0.4, 0.8}, {0, 0, 0, 0}, {1, 1, 1, 1}}, "Configurations for GFW regions"};
250+
Configurable<GFWCorrConfigs> cfgNpcPtVnCorrConfig{"cfgNpcPtVnCorrConfig", {{"refP {pt} refN {pt}", "refP {2} refMid {pt} refN {-2}", "refP {2} refMid {pt pt} refN {-2}", "refFull {pt}", "refFull {pt pt}", "refFull {pt pt pt}", "refFull {pt pt pt pt}", "refP {pt} refMid {pt} refN {pt}"}, {"ChGapPtPt", "ChGap22pt", "ChGap22ptpt", "ChFullPt", "ChFullPtPt", "ChFullPtPtPt", "ChFullPtPtPtPt", "ChGapPtPtPtABC"}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, "Configurations for vn-pt correlations based on new version flowPtContainer"};
251+
Configurable<std::vector<std::string>> cfgNpcGFWCorr{"cfgNpcGFWCorr", std::vector<std::string>{"refN {2} refP {-2}", "refN {3} refP {-3}"}, "GFW corrconfig for new version flowPtContainer"};
252+
GFWRegions npcRegions;
253+
GFWCorrConfigs npcPtVnCorrConfig;
254+
GFW npcGfw;
247255
} cfgAdditionObs;
248256

249257
ConfigurableAxis axisPt{"axisPt", {VARIABLE_WIDTH, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2, 2.2, 2.4, 2.6, 2.8, 3, 3.5, 4, 5, 6, 8, 10}, "pt axis for histograms"};
@@ -667,14 +675,42 @@ struct FlowTask {
667675
// Mask 1: vn-[pT], 3: vn-[pT^2], 7: vn-[pT^3], 15: vn-[pT^4]
668676
gfwConfigs.SetpTCorrMasks(cfgUserPtVnCorrConfig->GetpTCorrMasks());
669677
gfwConfigs.Print();
670-
fFCpt->setUseCentralMoments(cfgUseCentralMoments);
671-
fFCpt->setUseGapMethod(true);
672678
if (!cfgUserIO.cfgUserPtVnEvWeightEnabled)
673679
fFCpt->setEventWeight(EventWeight::UnityWeight);
674680
else
675681
fFCpt->setEventWeight(EventWeight::TupleWeight);
676-
fFCpt->initialise(axisIndependent, cfgMpar, gfwConfigs, cfgNbootstrap);
677-
if (cfgEtaGapPtPtEnabled) {
682+
if (cfgAdditionObs.cfgNewPtContainer) {
683+
cfgAdditionObs.npcRegions.SetNames(cfgAdditionObs.cfgNpcRegions->GetNames());
684+
cfgAdditionObs.npcRegions.SetEtaMin(cfgAdditionObs.cfgNpcRegions->GetEtaMin());
685+
cfgAdditionObs.npcRegions.SetEtaMax(cfgAdditionObs.cfgNpcRegions->GetEtaMax());
686+
cfgAdditionObs.npcRegions.SetpTDifs(cfgAdditionObs.cfgNpcRegions->GetpTDifs());
687+
cfgAdditionObs.npcRegions.SetBitmasks(cfgAdditionObs.cfgNpcRegions->GetBitmasks());
688+
cfgAdditionObs.npcPtVnCorrConfig.SetCorrs(cfgAdditionObs.cfgNpcPtVnCorrConfig->GetCorrs());
689+
cfgAdditionObs.npcPtVnCorrConfig.SetHeads(cfgAdditionObs.cfgNpcPtVnCorrConfig->GetHeads());
690+
cfgAdditionObs.npcPtVnCorrConfig.SetpTDifs(cfgAdditionObs.cfgNpcPtVnCorrConfig->GetpTDifs());
691+
cfgAdditionObs.npcPtVnCorrConfig.SetpTCorrMasks(cfgAdditionObs.cfgNpcPtVnCorrConfig->GetpTCorrMasks());
692+
cfgAdditionObs.npcRegions.Print();
693+
cfgAdditionObs.npcPtVnCorrConfig.Print();
694+
fFCpt->initialise(axisIndependent, cfgAdditionObs.npcRegions, cfgAdditionObs.npcPtVnCorrConfig, cfgNbootstrap);
695+
696+
for (int region = 0; region < cfgAdditionObs.npcRegions.GetSize(); ++region) {
697+
cfgAdditionObs.npcGfw.AddRegion(cfgAdditionObs.npcRegions.GetNames()[region], cfgAdditionObs.npcRegions.GetEtaMin()[region],
698+
cfgAdditionObs.npcRegions.GetEtaMax()[region], 1,
699+
cfgAdditionObs.npcRegions.GetBitmasks()[region]);
700+
}
701+
std::vector<std::string> npcGFWCorr = cfgAdditionObs.cfgNpcGFWCorr;
702+
if (!npcGFWCorr.empty()) {
703+
for (uint i = 0; i < npcGFWCorr.size(); i++) {
704+
cfgAdditionObs.npcGfw.GetCorrelatorConfig(npcGFWCorr.at(i).c_str());
705+
}
706+
}
707+
cfgAdditionObs.npcGfw.CreateRegions();
708+
} else {
709+
fFCpt->setUseCentralMoments(cfgUseCentralMoments);
710+
fFCpt->setUseGapMethod(true);
711+
fFCpt->initialise(axisIndependent, cfgMpar, gfwConfigs, cfgNbootstrap);
712+
}
713+
if (!cfgAdditionObs.cfgNewPtContainer && cfgEtaGapPtPtEnabled) {
678714
for (int i = 0; i < 4; ++i) { // o2-linter: disable=magic-number (maximum of 4 subevents)
679715
if (cfgPtPtGaps->getData()[i][0] < -1. || cfgPtPtGaps->getData()[i][1] < -1.)
680716
continue;
@@ -756,31 +792,44 @@ struct FlowTask {
756792
funcV4->SetParameters(0.008845, 0.000259668, -3.24435e-06, 4.54837e-08, -6.01825e-10);
757793
}
758794

759-
if (cfgTrackCuts->getData()[kDCAxyNSigma][kTrCutObs]) {
795+
readMatrix(cfgTrackCuts->getData(), trackCuts);
796+
if (trackCuts[kDCAxyNSigma][kTrCutObs]) {
760797
cfgFuncParas.fPtDepDCAxy = new TF1("ptDepDCAxy", Form("[0]*%s", cfgFuncParas.cfgDCAxyFunc->c_str()), 0.001, 1000);
761-
cfgFuncParas.fPtDepDCAxy->SetParameter(0, cfgTrackCuts->getData()[kDCAxyNSigma][kTrCutObs]);
762-
LOGF(info, "DCAxy pt-dependence function: %s", Form("%0.1f * %s", cfgTrackCuts->getData()[kDCAxyNSigma][kTrCutObs], cfgFuncParas.cfgDCAxyFunc->c_str()));
798+
cfgFuncParas.fPtDepDCAxy->SetParameter(0, trackCuts[kDCAxyNSigma][kTrCutObs]);
799+
LOGF(info, "DCAxy pt-dependence function: %s", Form("%0.1f * %s", trackCuts[kDCAxyNSigma][kTrCutObs], cfgFuncParas.cfgDCAxyFunc->c_str()));
763800
}
764-
if (cfgTrackCuts->getData()[kDCAxyNSigma][kTrCutNch]) {
801+
if (trackCuts[kDCAxyNSigma][kTrCutNch]) {
765802
cfgFuncParas.fPtDepDCAxyForNch = new TF1("ptDepDCAxyForNch", Form("[0]*%s", cfgFuncParas.cfgDCAxyFunc->c_str()), 0.001, 1000);
766-
cfgFuncParas.fPtDepDCAxyForNch->SetParameter(0, cfgTrackCuts->getData()[kDCAxyNSigma][kTrCutNch]);
767-
LOGF(info, "DCAxy pt-dependence function for Nch: %s", Form("%0.1f * %s", cfgTrackCuts->getData()[kDCAxyNSigma][kTrCutNch], cfgFuncParas.cfgDCAxyFunc->c_str()));
803+
cfgFuncParas.fPtDepDCAxyForNch->SetParameter(0, trackCuts[kDCAxyNSigma][kTrCutNch]);
804+
LOGF(info, "DCAxy pt-dependence function for Nch: %s", Form("%0.1f * %s", trackCuts[kDCAxyNSigma][kTrCutNch], cfgFuncParas.cfgDCAxyFunc->c_str()));
768805
}
769-
if (cfgTrackCuts->getData()[kDCAzNSigma][kTrCutObs]) {
806+
if (trackCuts[kDCAzNSigma][kTrCutObs]) {
770807
cfgFuncParas.fPtDepDCAz = new TF1("ptDepDCAz", Form("[0]*%s", cfgFuncParas.cfgDCAzFunc->c_str()), 0.001, 1000);
771-
cfgFuncParas.fPtDepDCAz->SetParameter(0, cfgTrackCuts->getData()[kDCAzNSigma][kTrCutObs]);
772-
LOGF(info, "DCAz pt-dependence function: %s", Form("%0.1f * %s", cfgTrackCuts->getData()[kDCAzNSigma][kTrCutObs], cfgFuncParas.cfgDCAzFunc->c_str()));
808+
cfgFuncParas.fPtDepDCAz->SetParameter(0, trackCuts[kDCAzNSigma][kTrCutObs]);
809+
LOGF(info, "DCAz pt-dependence function: %s", Form("%0.1f * %s", trackCuts[kDCAzNSigma][kTrCutObs], cfgFuncParas.cfgDCAzFunc->c_str()));
773810
}
774-
if (cfgTrackCuts->getData()[kDCAzNSigma][kTrCutNch]) {
811+
if (trackCuts[kDCAzNSigma][kTrCutNch]) {
775812
cfgFuncParas.fPtDepDCAzForNch = new TF1("ptDepDCAzForNch", Form("[0]*%s", cfgFuncParas.cfgDCAzFunc->c_str()), 0.001, 1000);
776-
cfgFuncParas.fPtDepDCAzForNch->SetParameter(0, cfgTrackCuts->getData()[kDCAzNSigma][kTrCutNch]);
777-
LOGF(info, "DCAz pt-dependence function for Nch: %s", Form("%0.1f * %s", cfgTrackCuts->getData()[kDCAzNSigma][kTrCutNch], cfgFuncParas.cfgDCAzFunc->c_str()));
813+
cfgFuncParas.fPtDepDCAzForNch->SetParameter(0, trackCuts[kDCAzNSigma][kTrCutNch]);
814+
LOGF(info, "DCAz pt-dependence function for Nch: %s", Form("%0.1f * %s", trackCuts[kDCAzNSigma][kTrCutNch], cfgFuncParas.cfgDCAzFunc->c_str()));
778815
}
779816
if (!cfgEvSelRCTflags.value.empty()) {
780817
rctChecker.init(cfgEvSelRCTflags.value.c_str()); // override initialzation
781818
}
782819
}
783820

821+
template <typename T, typename P>
822+
void readMatrix(Array2D<T> const& mat, P& array)
823+
{
824+
for (auto i = 0; i < static_cast<int>(mat.rows); ++i) {
825+
for (auto j = 0; j < static_cast<int>(mat.cols); ++j) {
826+
array[i][j] = mat(i, j);
827+
}
828+
}
829+
830+
return;
831+
}
832+
784833
void createOutputObjectsForRun(int runNumber)
785834
{
786835
const AxisSpec axisPhi{60, 0.0, constants::math::TwoPI, "#varphi"};
@@ -1119,21 +1168,21 @@ struct FlowTask {
11191168
template <typename TTrack>
11201169
bool trackSelected(const TTrack& track)
11211170
{
1122-
if (cfgTrackCuts->getData()[kDCAxyNSigma][kTrCutObs] && (std::fabs(track.dcaXY()) > cfgFuncParas.fPtDepDCAxy->Eval(track.pt())))
1171+
if (trackCuts[kDCAxyNSigma][kTrCutObs] && cfgFuncParas.fPtDepDCAxy != nullptr && (std::fabs(track.dcaXY()) > cfgFuncParas.fPtDepDCAxy->Eval(track.pt())))
11231172
return false;
1124-
if (cfgTrackCuts->getData()[kDCAzNSigma][kTrCutObs] && (std::fabs(track.dcaZ()) > cfgFuncParas.fPtDepDCAz->Eval(track.pt())))
1173+
if (trackCuts[kDCAzNSigma][kTrCutObs] && cfgFuncParas.fPtDepDCAz != nullptr && (std::fabs(track.dcaZ()) > cfgFuncParas.fPtDepDCAz->Eval(track.pt())))
11251174
return false;
1126-
return ((track.tpcNClsFound() >= cfgTrackCuts->getData()[kTPCclu][kTrCutObs]) && (track.tpcNClsCrossedRows() >= cfgTrackCuts->getData()[kTPCCrossedRows][kTrCutObs]) && (track.itsNCls() >= cfgTrackCuts->getData()[kITSclu][kTrCutObs]) && (track.tpcChi2NCl() < cfgTrackCuts->getData()[kChi2prTPCcls][kTrCutObs]) && (std::fabs(track.dcaZ()) < cfgTrackCuts->getData()[kDCAz][kTrCutObs]));
1175+
return ((track.tpcNClsFound() >= trackCuts[kTPCclu][kTrCutObs]) && (track.tpcNClsCrossedRows() >= trackCuts[kTPCCrossedRows][kTrCutObs]) && (track.itsNCls() >= trackCuts[kITSclu][kTrCutObs]) && (track.tpcChi2NCl() < trackCuts[kChi2prTPCcls][kTrCutObs]) && (std::fabs(track.dcaZ()) < trackCuts[kDCAz][kTrCutObs]));
11271176
}
11281177

11291178
template <typename TTrack>
11301179
bool trackSelectedForNch(const TTrack& track)
11311180
{
1132-
if (cfgTrackCuts->getData()[kDCAxyNSigma][kTrCutNch] && (std::fabs(track.dcaXY()) > cfgFuncParas.fPtDepDCAxyForNch->Eval(track.pt())))
1181+
if (trackCuts[kDCAxyNSigma][kTrCutNch] && cfgFuncParas.fPtDepDCAxyForNch != nullptr && (std::fabs(track.dcaXY()) > cfgFuncParas.fPtDepDCAxyForNch->Eval(track.pt())))
11331182
return false;
1134-
if (cfgTrackCuts->getData()[kDCAzNSigma][kTrCutNch] && (std::fabs(track.dcaZ()) > cfgFuncParas.fPtDepDCAzForNch->Eval(track.pt())))
1183+
if (trackCuts[kDCAzNSigma][kTrCutNch] && cfgFuncParas.fPtDepDCAzForNch != nullptr && (std::fabs(track.dcaZ()) > cfgFuncParas.fPtDepDCAzForNch->Eval(track.pt())))
11351184
return false;
1136-
return ((track.tpcNClsFound() >= cfgTrackCuts->getData()[kTPCclu][kTrCutNch]) && (track.tpcNClsCrossedRows() >= cfgTrackCuts->getData()[kTPCCrossedRows][kTrCutNch]) && (track.itsNCls() >= cfgTrackCuts->getData()[kITSclu][kTrCutNch]) && (track.tpcChi2NCl() < cfgTrackCuts->getData()[kChi2prTPCcls][kTrCutNch]) && (std::fabs(track.dcaZ()) < cfgTrackCuts->getData()[kDCAz][kTrCutNch]));
1185+
return ((track.tpcNClsFound() >= trackCuts[kTPCclu][kTrCutNch]) && (track.tpcNClsCrossedRows() >= trackCuts[kTPCCrossedRows][kTrCutNch]) && (track.itsNCls() >= trackCuts[kITSclu][kTrCutNch]) && (track.tpcChi2NCl() < trackCuts[kChi2prTPCcls][kTrCutNch]) && (std::fabs(track.dcaZ()) < trackCuts[kDCAz][kTrCutNch]));
11371186
}
11381187

11391188
template <typename TTrack>
@@ -1264,6 +1313,9 @@ struct FlowTask {
12641313
fGFW->Clear();
12651314
fFCpt->clearVector();
12661315
cfgAdditionObs.nPt.clear();
1316+
if (cfgAdditionObs.cfgNewPtContainer) {
1317+
cfgAdditionObs.npcGfw.Clear();
1318+
}
12671319
if (cfgGetInteractionRate) {
12681320
initHadronicRate(bc);
12691321
double hadronicRate = mRateFetcher.fetch(ccdb.service, bc.timestamp(), mRunNumber, "ZNC hadronic") * 1.e-3; //
@@ -1443,10 +1495,20 @@ struct FlowTask {
14431495
fGFW->Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 2);
14441496
if (withinPtPOI && withinPtRef)
14451497
fGFW->Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 4);
1446-
if (cfgUsePtRef && withinPtRef)
1447-
fillPtSums<kReco>(track, weff);
1448-
if (!cfgUsePtRef && withinPtPOI)
1449-
fillPtSums<kReco>(track, weff);
1498+
if (cfgAdditionObs.cfgNewPtContainer) {
1499+
fFCpt->fill(track.eta(), weff, track.pt(), 1);
1500+
if (withinPtRef)
1501+
cfgAdditionObs.npcGfw.Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 1);
1502+
if (withinPtPOI)
1503+
cfgAdditionObs.npcGfw.Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 2);
1504+
if (withinPtPOI && withinPtRef)
1505+
cfgAdditionObs.npcGfw.Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 4);
1506+
} else {
1507+
if (cfgUsePtRef && withinPtRef)
1508+
fillPtSums<kReco>(track, weff);
1509+
if (!cfgUsePtRef && withinPtPOI)
1510+
fillPtSums<kReco>(track, weff);
1511+
}
14501512
}
14511513
registry.fill(HIST("hTrackCorrection2d"), nTracksUncorrected, nTracksCorrected);
14521514
if (cfgUseNch && cfgUseNchCorrected) {
@@ -1548,7 +1610,11 @@ struct FlowTask {
15481610
fillFC<kReco>(corrconfigs.at(l_ind), independent, lRandom);
15491611
}
15501612
// Filling pt Container
1551-
fillPtContainers<kReco>(independent, lRandom);
1613+
if (cfgAdditionObs.cfgNewPtContainer) {
1614+
fFCpt->fillPtProfiles(cfgAdditionObs.npcGfw, independent, lRandom);
1615+
} else {
1616+
fillPtContainers<kReco>(independent, lRandom);
1617+
}
15521618
}
15531619
PROCESS_SWITCH(FlowTask, processData, "Process analysis for non-derived data", true);
15541620

0 commit comments

Comments
 (0)