Skip to content

Commit 5bee1de

Browse files
committed
Add options for 2d qa track histos for centrality dependence
1 parent d8a7fcf commit 5bee1de

File tree

1 file changed

+95
-25
lines changed

1 file changed

+95
-25
lines changed

PWGCF/Flow/Tasks/flowSP.cxx

Lines changed: 95 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@
1414
/// \since 01/12/2024
1515
/// \brief task to evaluate flow with respect to spectator plane.
1616

17-
#include <CCDB/BasicCCDBManager.h>
18-
#include <DataFormatsParameters/GRPObject.h>
19-
#include <DataFormatsParameters/GRPMagField.h>
2017
#include <algorithm>
2118
#include <numeric>
2219
#include <vector>
@@ -29,6 +26,10 @@
2926
#include "Framework/RunningWorkflowInfo.h"
3027
#include "Framework/HistogramRegistry.h"
3128
#include "Framework/O2DatabasePDGPlugin.h"
29+
#include "CCDB/BasicCCDBManager.h"
30+
#include "DataFormatsParameters/GRPObject.h"
31+
#include "DataFormatsParameters/GRPMagField.h"
32+
#include "DataFormatsParameters/GRPLHCIFData.h"
3233

3334
#include "Common/DataModel/EventSelection.h"
3435
#include "Common/Core/TrackSelection.h"
@@ -93,6 +94,7 @@ struct FlowSP {
9394
O2_DEFINE_CONFIGURABLE(cfgTrackSelsDCApt1, float, 0.1, "DcaZ < a * b / pt^1.1 -> this sets a");
9495
O2_DEFINE_CONFIGURABLE(cfgTrackSelsDCApt2, float, 0.035, "DcaZ < a * b / pt^1.1 -> this sets b");
9596
O2_DEFINE_CONFIGURABLE(cfgTrackSelsPIDNsigma, float, 2.0, "nSigma cut for PID");
97+
O2_DEFINE_CONFIGURABLE(cfgTrackSelDoTrackQAvsCent, bool, true, "Do track selection QA plots as function of centrality");
9698
// Additional event selections
9799
O2_DEFINE_CONFIGURABLE(cfgEvSelsUseAdditionalEventCut, bool, true, "Bool to enable Additional Event Cut");
98100
O2_DEFINE_CONFIGURABLE(cfgEvSelsMaxOccupancy, int, 10000, "Maximum occupancy of selected events");
@@ -366,15 +368,6 @@ struct FlowSP {
366368

367369
if (cfgFillTrackQA) {
368370
registry.add("QA/after/pt_phi", "", {HistType::kTH2D, {axisPt, axisPhiMod}});
369-
registry.add<TH1>("incl/QA/after/hPt", "", kTH1D, {axisPt});
370-
registry.add<TH1>("incl/QA/after/hPt_forward", "", kTH1D, {axisPt});
371-
registry.add<TH1>("incl/QA/after/hPt_forward_uncorrected", "", kTH1D, {axisPt});
372-
registry.add<TH1>("incl/QA/after/hPt_backward", "", kTH1D, {axisPt});
373-
registry.add<TH1>("incl/QA/after/hPt_backward_uncorrected", "", kTH1D, {axisPt});
374-
registry.add<TH1>("incl/QA/after/hPhi", "", kTH1D, {axisPhi});
375-
registry.add<TH1>("incl/QA/after/hPhi_uncorrected", "", kTH1D, {axisPhi});
376-
registry.add<TH1>("incl/QA/after/hEta", "", kTH1D, {axisEta});
377-
registry.add<TH1>("incl/QA/after/hEta_uncorrected", "", kTH1D, {axisEta});
378371
registry.add<TH3>("incl/QA/after/hPhi_Eta_vz", "", kTH3D, {axisPhi, axisEta, axisVz});
379372
registry.add<TH3>("incl/QA/after/hPhi_Eta_vz_corrected", "", kTH3D, {axisPhi, axisEta, axisVz});
380373
registry.add<TH2>("incl/QA/after/hDCAxy_pt", "", kTH2D, {axisPt, axisDCAxy});
@@ -383,6 +376,28 @@ struct FlowSP {
383376
registry.add("incl/QA/after/hCrossedRows_pt", "", {HistType::kTH2D, {axisPt, axisCl}});
384377
registry.add("incl/QA/after/hCrossedRows_vs_SharedClusters", "", {HistType::kTH2D, {axisCl, axisShCl}});
385378

379+
if(cfgTrackSelDoTrackQAvsCent){
380+
registry.add<TH2>("incl/QA/after/hPt", "", kTH2D, {axisPt, axisCent});
381+
registry.add<TH2>("incl/QA/after/hPt_forward", "", kTH2D, {axisPt, axisCent});
382+
registry.add<TH2>("incl/QA/after/hPt_forward_uncorrected", "", kTH2D, {axisPt, axisCent});
383+
registry.add<TH2>("incl/QA/after/hPt_backward", "", kTH2D, {axisPt, axisCent});
384+
registry.add<TH2>("incl/QA/after/hPt_backward_uncorrected", "", kTH2D, {axisPt, axisCent});
385+
registry.add<TH2>("incl/QA/after/hPhi", "", kTH2D, {axisPhi, axisCent});
386+
registry.add<TH2>("incl/QA/after/hPhi_uncorrected", "", kTH2D, {axisPhi, axisCent});
387+
registry.add<TH2>("incl/QA/after/hEta", "", kTH2D, {axisEta, axisCent});
388+
registry.add<TH2>("incl/QA/after/hEta_uncorrected", "", kTH2D, {axisEta, axisCent});
389+
} else {
390+
registry.add<TH1>("incl/QA/after/hPt", "", kTH1D, {axisPt});
391+
registry.add<TH1>("incl/QA/after/hPt_forward", "", kTH1D, {axisPt});
392+
registry.add<TH1>("incl/QA/after/hPt_forward_uncorrected", "", kTH1D, {axisPt});
393+
registry.add<TH1>("incl/QA/after/hPt_backward", "", kTH1D, {axisPt});
394+
registry.add<TH1>("incl/QA/after/hPt_backward_uncorrected", "", kTH1D, {axisPt});
395+
registry.add<TH1>("incl/QA/after/hPhi", "", kTH1D, {axisPhi});
396+
registry.add<TH1>("incl/QA/after/hPhi_uncorrected", "", kTH1D, {axisPhi});
397+
registry.add<TH1>("incl/QA/after/hEta", "", kTH1D, {axisEta});
398+
registry.add<TH1>("incl/QA/after/hEta_uncorrected", "", kTH1D, {axisEta});
399+
}
400+
386401
if (cfgFillQABefore)
387402
registry.addClone("incl/QA/after/", "incl/QA/before/");
388403
}
@@ -641,7 +656,7 @@ struct FlowSP {
641656
return -1;
642657
}
643658

644-
int getMagneticField(uint64_t timestamp)
659+
int getMagneticField(uint64_t timestamp)
645660
{
646661
// TODO done only once (and not per run). Will be replaced by CCDBConfigurable
647662
static o2::parameters::GRPMagField* grpo = nullptr;
@@ -656,6 +671,19 @@ struct FlowSP {
656671
return grpo->getNominalL3Field();
657672
}
658673

674+
std::pair<float, long> getCrossingAngleCCDB(uint64_t timestamp)
675+
{
676+
// TODO done only once (and not per run). Will be replaced by CCDBConfigurable
677+
auto grpo = ccdb->getForTimeStamp<o2::parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", timestamp);
678+
if (grpo == nullptr) {
679+
LOGF(fatal, "GRP object for Crossing Angle not found for timestamp %llu", timestamp);
680+
return {0, 0};
681+
}
682+
float crossingAngle = grpo->getCrossingAngle();
683+
long crossingAngleTime = grpo->getCrossingAngleTime();
684+
return {crossingAngle, crossingAngleTime};
685+
}
686+
659687
// From Generic Framework
660688
void loadCorrections(uint64_t timestamp)
661689
{
@@ -916,7 +944,7 @@ struct FlowSP {
916944
registry.fill(HIST("QA/") + HIST(Time[ft]) + HIST("/CentFT0C_vs_CentNGlobal"), collision.centFT0C(), collision.centNGlobal(), centWeight);
917945

918946
if (cfgFillEventPlaneQA) {
919-
if constexpr (framework::has_type_v<aod::sptablezdc::Vx, typename CollisionObject::all_columns>) {
947+
if constexpr (o2::framework::has_type_v<aod::sptablezdc::Vx, typename CollisionObject::all_columns>) {
920948
double psiA = 1.0 * std::atan2(collision.qyA(), collision.qxA());
921949
double psiC = 1.0 * std::atan2(collision.qyC(), collision.qxC());
922950
double psiFull = 1.0 * std::atan2(collision.qyA() + collision.qyC(), collision.qxA() + collision.qxC());
@@ -1074,6 +1102,36 @@ struct FlowSP {
10741102
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hCrossedRows_vs_SharedClusters"), track.tpcNClsFound(), track.tpcFractionSharedCls(), wacc * weff);
10751103
}
10761104

1105+
template <FillType ft, ChargeType ct, ParticleType pt, typename TrackObject>
1106+
inline void fillTrackQA(TrackObject track, double vz, double centrality, float wacc = 1, float weff = 1)
1107+
{
1108+
if (!cfgFillTrackQA)
1109+
return;
1110+
1111+
static constexpr std::string_view Time[] = {"before/", "after/"};
1112+
// NOTE: species[kUnidentified] = "" (when no PID)
1113+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hPt"), track.pt(), centrality, wacc * weff);
1114+
if (track.eta() > 0) {
1115+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hPt_forward"), track.pt(), centrality, wacc * weff);
1116+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hPt_forward_uncorrected"), track.pt(), centrality);
1117+
} else {
1118+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hPt_backward"), track.pt(), centrality, wacc * weff);
1119+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hPt_backward_uncorrected"), track.pt(), centrality);
1120+
}
1121+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hPhi"), track.phi(), centrality, wacc);
1122+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hPhi_uncorrected"), track.phi(), centrality);
1123+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hEta"), track.eta(), centrality, wacc);
1124+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hEta_uncorrected"), track.eta(), centrality);
1125+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hPhi_Eta_vz"), track.phi(), track.eta(), vz);
1126+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hPhi_Eta_vz_corrected"), track.phi(), track.eta(), vz, wacc);
1127+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hDCAxy_pt"), track.pt(), track.dcaXY(), wacc * weff);
1128+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hDCAz_pt"), track.pt(), track.dcaZ(), wacc * weff);
1129+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hSharedClusters_pt"), track.pt(), track.tpcFractionSharedCls(), wacc * weff);
1130+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hCrossedRows_pt"), track.pt(), track.tpcNClsFound(), wacc * weff);
1131+
registry.fill(HIST(Charge[ct]) + HIST(Species[pt]) + HIST("QA/") + HIST(Time[ft]) + HIST("hCrossedRows_vs_SharedClusters"), track.tpcNClsFound(), track.tpcFractionSharedCls(), wacc * weff);
1132+
}
1133+
1134+
10771135
template <FillType ft, ChargeType ct, typename TrackObject>
10781136
inline void fillPIDQA(TrackObject track)
10791137
{
@@ -1141,15 +1199,27 @@ struct FlowSP {
11411199
}
11421200

11431201
template <FillType ft, ParticleType ct, typename TrackObject>
1144-
void fillAllQA(TrackObject track, double vtxz, bool pos, float wacc = 1, float weff = 1, float waccP = 1, float weffP = 1, float waccN = 1, float weffN = 1)
1202+
void fillAllQA(TrackObject track, double vtxz, double centrality, bool pos, float wacc = 1, float weff = 1, float waccP = 1, float weffP = 1, float waccN = 1, float weffN = 1)
11451203
{
1146-
fillTrackQA<ft, kInclusive, ct>(track, vtxz, wacc, weff);
1204+
if(!cfgTrackSelDoTrackQAvsCent) {
1205+
fillTrackQA<ft, kInclusive, ct>(track, vtxz, wacc, weff);
1206+
} else {
1207+
fillTrackQA<ft, kInclusive, ct>(track, vtxz, centrality, wacc, weff);
1208+
}
11471209
fillPIDQA<ft, kInclusive>(track);
11481210
if (pos) {
1211+
if(!cfgTrackSelDoTrackQAvsCent) {
11491212
fillTrackQA<ft, kPositive, ct>(track, vtxz, waccP, weffP);
1213+
} else {
1214+
fillTrackQA<ft, kPositive, ct>(track, vtxz, centrality, waccP, weffP);
1215+
}
11501216
fillPIDQA<ft, kPositive>(track);
11511217
} else {
1152-
fillTrackQA<ft, kNegative, ct>(track, vtxz, waccN, weffN);
1218+
if(!cfgTrackSelDoTrackQAvsCent) {
1219+
fillTrackQA<ft, kNegative, ct>(track, vtxz, waccN, weffN);
1220+
} else {
1221+
fillTrackQA<ft, kNegative, ct>(track, vtxz, centrality, waccN, weffN);
1222+
}
11531223
fillPIDQA<ft, kNegative>(track);
11541224
}
11551225
}
@@ -1291,16 +1361,16 @@ struct FlowSP {
12911361
if (cfgFillQABefore) {
12921362
switch (trackPID) {
12931363
case kUnidentified:
1294-
fillAllQA<kBefore, kUnidentified>(track, vtxz, pos);
1364+
fillAllQA<kBefore, kUnidentified>(track, vtxz, centrality, pos);
12951365
break;
12961366
case kPion:
1297-
fillAllQA<kBefore, kPion>(track, vtxz, pos);
1367+
fillAllQA<kBefore, kPion>(track, vtxz, centrality, pos);
12981368
break;
12991369
case kKaon:
1300-
fillAllQA<kBefore, kKaon>(track, vtxz, pos);
1370+
fillAllQA<kBefore, kKaon>(track, vtxz, centrality, pos);
13011371
break;
13021372
case kProton:
1303-
fillAllQA<kBefore, kProton>(track, vtxz, pos);
1373+
fillAllQA<kBefore, kProton>(track, vtxz, centrality, pos);
13041374
break;
13051375
}
13061376
}
@@ -1345,16 +1415,16 @@ struct FlowSP {
13451415

13461416
switch (trackPID) {
13471417
case kUnidentified:
1348-
fillAllQA<kAfter, kUnidentified>(track, vtxz, pos, wacc, weff, waccP, weffP, waccN, weffN);
1418+
fillAllQA<kAfter, kUnidentified>(track, vtxz, centrality, pos, wacc, weff, waccP, weffP, waccN, weffN);
13491419
break;
13501420
case kPion:
1351-
fillAllQA<kAfter, kPion>(track, vtxz, pos, wacc, weff, waccP, weffP, waccN, weffN);
1421+
fillAllQA<kAfter, kPion>(track, vtxz, centrality, pos, wacc, weff, waccP, weffP, waccN, weffN);
13521422
break;
13531423
case kKaon:
1354-
fillAllQA<kAfter, kKaon>(track, vtxz, pos, wacc, weff, waccP, weffP, waccN, weffN);
1424+
fillAllQA<kAfter, kKaon>(track, vtxz, centrality, pos, wacc, weff, waccP, weffP, waccN, weffN);
13551425
break;
13561426
case kProton:
1357-
fillAllQA<kAfter, kProton>(track, vtxz, pos, wacc, weff, waccP, weffP, waccN, weffN);
1427+
fillAllQA<kAfter, kProton>(track, vtxz, centrality, pos, wacc, weff, waccP, weffP, waccN, weffN);
13581428
break;
13591429
}
13601430

0 commit comments

Comments
 (0)