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>
20- #include < algorithm>
21- #include < numeric>
22- #include < vector>
23- #include < string>
24- #include < unordered_map>
17+ #include " GFWWeights.h"
2518
26- #include " Framework/runDataProcessing.h"
27- #include " Framework/AnalysisTask.h"
28- #include " Framework/ASoAHelpers.h"
29- #include " Framework/RunningWorkflowInfo.h"
30- #include " Framework/HistogramRegistry.h"
31- #include " Framework/O2DatabasePDGPlugin.h"
19+ #include " PWGCF/DataModel/SPTableZDC.h"
3220
33- #include " Common/DataModel/EventSelection .h"
21+ #include " Common/Core/RecoDecay .h"
3422#include " Common/Core/TrackSelection.h"
35- #include " Common/DataModel/TrackSelectionTables.h"
36- #include " Common/DataModel/Multiplicity.h"
3723#include " Common/DataModel/Centrality.h"
38- #include " Common/Core/RecoDecay.h"
24+ #include " Common/DataModel/EventSelection.h"
25+ #include " Common/DataModel/Multiplicity.h"
3926#include " Common/DataModel/PIDResponse.h"
27+ #include " Common/DataModel/TrackSelectionTables.h"
28+
29+ #include " CCDB/BasicCCDBManager.h"
30+ #include " DataFormatsParameters/GRPLHCIFData.h"
31+ #include " DataFormatsParameters/GRPMagField.h"
32+ #include " DataFormatsParameters/GRPObject.h"
33+ #include " Framework/ASoAHelpers.h"
34+ #include " Framework/AnalysisTask.h"
35+ #include " Framework/HistogramRegistry.h"
36+ #include " Framework/O2DatabasePDGPlugin.h"
37+ #include " Framework/RunningWorkflowInfo.h"
38+ #include " Framework/runDataProcessing.h"
4039
41- #include " PWGCF/DataModel/SPTableZDC.h"
42- #include " GFWWeights.h"
4340#include " TF1.h"
4441#include " TPDGCode.h"
4542
43+ #include < algorithm>
44+ #include < numeric>
45+ #include < string>
46+ #include < unordered_map>
47+ #include < utility>
48+ #include < vector>
49+
4650using namespace o2 ;
4751using namespace o2 ::framework;
4852using namespace o2 ::framework::expressions;
@@ -93,6 +97,7 @@ struct FlowSP {
9397 O2_DEFINE_CONFIGURABLE (cfgTrackSelsDCApt1, float , 0.1 , " DcaZ < a * b / pt^1.1 -> this sets a" );
9498 O2_DEFINE_CONFIGURABLE (cfgTrackSelsDCApt2, float , 0.035 , " DcaZ < a * b / pt^1.1 -> this sets b" );
9599 O2_DEFINE_CONFIGURABLE (cfgTrackSelsPIDNsigma, float , 2.0 , " nSigma cut for PID" );
100+ O2_DEFINE_CONFIGURABLE (cfgTrackSelDoTrackQAvsCent, bool , true , " Do track selection QA plots as function of centrality" );
96101 // Additional event selections
97102 O2_DEFINE_CONFIGURABLE (cfgEvSelsUseAdditionalEventCut, bool , true , " Bool to enable Additional Event Cut" );
98103 O2_DEFINE_CONFIGURABLE (cfgEvSelsMaxOccupancy, int , 10000 , " Maximum occupancy of selected events" );
@@ -366,15 +371,6 @@ struct FlowSP {
366371
367372 if (cfgFillTrackQA) {
368373 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});
378374 registry.add <TH3>(" incl/QA/after/hPhi_Eta_vz" , " " , kTH3D , {axisPhi, axisEta, axisVz});
379375 registry.add <TH3>(" incl/QA/after/hPhi_Eta_vz_corrected" , " " , kTH3D , {axisPhi, axisEta, axisVz});
380376 registry.add <TH2>(" incl/QA/after/hDCAxy_pt" , " " , kTH2D , {axisPt, axisDCAxy});
@@ -383,6 +379,28 @@ struct FlowSP {
383379 registry.add (" incl/QA/after/hCrossedRows_pt" , " " , {HistType::kTH2D , {axisPt, axisCl}});
384380 registry.add (" incl/QA/after/hCrossedRows_vs_SharedClusters" , " " , {HistType::kTH2D , {axisCl, axisShCl}});
385381
382+ if (cfgTrackSelDoTrackQAvsCent) {
383+ registry.add <TH2>(" incl/QA/after/hPt" , " " , kTH2D , {axisPt, axisCent});
384+ registry.add <TH2>(" incl/QA/after/hPt_forward" , " " , kTH2D , {axisPt, axisCent});
385+ registry.add <TH2>(" incl/QA/after/hPt_forward_uncorrected" , " " , kTH2D , {axisPt, axisCent});
386+ registry.add <TH2>(" incl/QA/after/hPt_backward" , " " , kTH2D , {axisPt, axisCent});
387+ registry.add <TH2>(" incl/QA/after/hPt_backward_uncorrected" , " " , kTH2D , {axisPt, axisCent});
388+ registry.add <TH2>(" incl/QA/after/hPhi" , " " , kTH2D , {axisPhi, axisCent});
389+ registry.add <TH2>(" incl/QA/after/hPhi_uncorrected" , " " , kTH2D , {axisPhi, axisCent});
390+ registry.add <TH2>(" incl/QA/after/hEta" , " " , kTH2D , {axisEta, axisCent});
391+ registry.add <TH2>(" incl/QA/after/hEta_uncorrected" , " " , kTH2D , {axisEta, axisCent});
392+ } else {
393+ registry.add <TH1>(" incl/QA/after/hPt" , " " , kTH1D , {axisPt});
394+ registry.add <TH1>(" incl/QA/after/hPt_forward" , " " , kTH1D , {axisPt});
395+ registry.add <TH1>(" incl/QA/after/hPt_forward_uncorrected" , " " , kTH1D , {axisPt});
396+ registry.add <TH1>(" incl/QA/after/hPt_backward" , " " , kTH1D , {axisPt});
397+ registry.add <TH1>(" incl/QA/after/hPt_backward_uncorrected" , " " , kTH1D , {axisPt});
398+ registry.add <TH1>(" incl/QA/after/hPhi" , " " , kTH1D , {axisPhi});
399+ registry.add <TH1>(" incl/QA/after/hPhi_uncorrected" , " " , kTH1D , {axisPhi});
400+ registry.add <TH1>(" incl/QA/after/hEta" , " " , kTH1D , {axisEta});
401+ registry.add <TH1>(" incl/QA/after/hEta_uncorrected" , " " , kTH1D , {axisEta});
402+ }
403+
386404 if (cfgFillQABefore)
387405 registry.addClone (" incl/QA/after/" , " incl/QA/before/" );
388406 }
@@ -656,6 +674,19 @@ struct FlowSP {
656674 return grpo->getNominalL3Field ();
657675 }
658676
677+ std::pair<float , uint16_t > getCrossingAngleCCDB (uint64_t timestamp)
678+ {
679+ // TODO done only once (and not per run). Will be replaced by CCDBConfigurable
680+ auto grpo = ccdb->getForTimeStamp <o2::parameters::GRPLHCIFData>(" GLO/Config/GRPLHCIF" , timestamp);
681+ if (grpo == nullptr ) {
682+ LOGF (fatal, " GRP object for Crossing Angle not found for timestamp %llu" , timestamp);
683+ return {0 , 0 };
684+ }
685+ float crossingAngle = grpo->getCrossingAngle ();
686+ uint16_t crossingAngleTime = grpo->getCrossingAngleTime ();
687+ return {crossingAngle, crossingAngleTime};
688+ }
689+
659690 // From Generic Framework
660691 void loadCorrections (uint64_t timestamp)
661692 {
@@ -916,7 +947,7 @@ struct FlowSP {
916947 registry.fill (HIST (" QA/" ) + HIST (Time[ft]) + HIST (" /CentFT0C_vs_CentNGlobal" ), collision.centFT0C (), collision.centNGlobal (), centWeight);
917948
918949 if (cfgFillEventPlaneQA) {
919- if constexpr (framework::has_type_v<aod::sptablezdc::Vx, typename CollisionObject::all_columns>) {
950+ if constexpr (o2:: framework::has_type_v<aod::sptablezdc::Vx, typename CollisionObject::all_columns>) {
920951 double psiA = 1.0 * std::atan2 (collision.qyA (), collision.qxA ());
921952 double psiC = 1.0 * std::atan2 (collision.qyC (), collision.qxC ());
922953 double psiFull = 1.0 * std::atan2 (collision.qyA () + collision.qyC (), collision.qxA () + collision.qxC ());
@@ -1074,6 +1105,35 @@ struct FlowSP {
10741105 registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hCrossedRows_vs_SharedClusters" ), track.tpcNClsFound (), track.tpcFractionSharedCls (), wacc * weff);
10751106 }
10761107
1108+ template <FillType ft, ChargeType ct, ParticleType pt, typename TrackObject>
1109+ inline void fillTrackQA (TrackObject track, double vz, double centrality, float wacc = 1 , float weff = 1 )
1110+ {
1111+ if (!cfgFillTrackQA)
1112+ return ;
1113+
1114+ static constexpr std::string_view Time[] = {" before/" , " after/" };
1115+ // NOTE: species[kUnidentified] = "" (when no PID)
1116+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPt" ), track.pt (), centrality, wacc * weff);
1117+ if (track.eta () > 0 ) {
1118+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPt_forward" ), track.pt (), centrality, wacc * weff);
1119+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPt_forward_uncorrected" ), track.pt (), centrality);
1120+ } else {
1121+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPt_backward" ), track.pt (), centrality, wacc * weff);
1122+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPt_backward_uncorrected" ), track.pt (), centrality);
1123+ }
1124+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPhi" ), track.phi (), centrality, wacc);
1125+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPhi_uncorrected" ), track.phi (), centrality);
1126+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hEta" ), track.eta (), centrality, wacc);
1127+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hEta_uncorrected" ), track.eta (), centrality);
1128+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPhi_Eta_vz" ), track.phi (), track.eta (), vz);
1129+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hPhi_Eta_vz_corrected" ), track.phi (), track.eta (), vz, wacc);
1130+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hDCAxy_pt" ), track.pt (), track.dcaXY (), wacc * weff);
1131+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hDCAz_pt" ), track.pt (), track.dcaZ (), wacc * weff);
1132+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hSharedClusters_pt" ), track.pt (), track.tpcFractionSharedCls (), wacc * weff);
1133+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hCrossedRows_pt" ), track.pt (), track.tpcNClsFound (), wacc * weff);
1134+ registry.fill (HIST (Charge[ct]) + HIST (Species[pt]) + HIST (" QA/" ) + HIST (Time[ft]) + HIST (" hCrossedRows_vs_SharedClusters" ), track.tpcNClsFound (), track.tpcFractionSharedCls (), wacc * weff);
1135+ }
1136+
10771137 template <FillType ft, ChargeType ct, typename TrackObject>
10781138 inline void fillPIDQA (TrackObject track)
10791139 {
@@ -1141,15 +1201,27 @@ struct FlowSP {
11411201 }
11421202
11431203 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 )
1204+ 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 )
11451205 {
1146- fillTrackQA<ft, kInclusive , ct>(track, vtxz, wacc, weff);
1206+ if (!cfgTrackSelDoTrackQAvsCent) {
1207+ fillTrackQA<ft, kInclusive , ct>(track, vtxz, wacc, weff);
1208+ } else {
1209+ fillTrackQA<ft, kInclusive , ct>(track, vtxz, centrality, wacc, weff);
1210+ }
11471211 fillPIDQA<ft, kInclusive >(track);
11481212 if (pos) {
1149- fillTrackQA<ft, kPositive , ct>(track, vtxz, waccP, weffP);
1213+ if (!cfgTrackSelDoTrackQAvsCent) {
1214+ fillTrackQA<ft, kPositive , ct>(track, vtxz, waccP, weffP);
1215+ } else {
1216+ fillTrackQA<ft, kPositive , ct>(track, vtxz, centrality, waccP, weffP);
1217+ }
11501218 fillPIDQA<ft, kPositive >(track);
11511219 } else {
1152- fillTrackQA<ft, kNegative , ct>(track, vtxz, waccN, weffN);
1220+ if (!cfgTrackSelDoTrackQAvsCent) {
1221+ fillTrackQA<ft, kNegative , ct>(track, vtxz, waccN, weffN);
1222+ } else {
1223+ fillTrackQA<ft, kNegative , ct>(track, vtxz, centrality, waccN, weffN);
1224+ }
11531225 fillPIDQA<ft, kNegative >(track);
11541226 }
11551227 }
@@ -1291,16 +1363,16 @@ struct FlowSP {
12911363 if (cfgFillQABefore) {
12921364 switch (trackPID) {
12931365 case kUnidentified :
1294- fillAllQA<kBefore , kUnidentified >(track, vtxz, pos);
1366+ fillAllQA<kBefore , kUnidentified >(track, vtxz, centrality, pos);
12951367 break ;
12961368 case kPion :
1297- fillAllQA<kBefore , kPion >(track, vtxz, pos);
1369+ fillAllQA<kBefore , kPion >(track, vtxz, centrality, pos);
12981370 break ;
12991371 case kKaon :
1300- fillAllQA<kBefore , kKaon >(track, vtxz, pos);
1372+ fillAllQA<kBefore , kKaon >(track, vtxz, centrality, pos);
13011373 break ;
13021374 case kProton :
1303- fillAllQA<kBefore , kProton >(track, vtxz, pos);
1375+ fillAllQA<kBefore , kProton >(track, vtxz, centrality, pos);
13041376 break ;
13051377 }
13061378 }
@@ -1345,16 +1417,16 @@ struct FlowSP {
13451417
13461418 switch (trackPID) {
13471419 case kUnidentified :
1348- fillAllQA<kAfter , kUnidentified >(track, vtxz, pos, wacc, weff, waccP, weffP, waccN, weffN);
1420+ fillAllQA<kAfter , kUnidentified >(track, vtxz, centrality, pos, wacc, weff, waccP, weffP, waccN, weffN);
13491421 break ;
13501422 case kPion :
1351- fillAllQA<kAfter , kPion >(track, vtxz, pos, wacc, weff, waccP, weffP, waccN, weffN);
1423+ fillAllQA<kAfter , kPion >(track, vtxz, centrality, pos, wacc, weff, waccP, weffP, waccN, weffN);
13521424 break ;
13531425 case kKaon :
1354- fillAllQA<kAfter , kKaon >(track, vtxz, pos, wacc, weff, waccP, weffP, waccN, weffN);
1426+ fillAllQA<kAfter , kKaon >(track, vtxz, centrality, pos, wacc, weff, waccP, weffP, waccN, weffN);
13551427 break ;
13561428 case kProton :
1357- fillAllQA<kAfter , kProton >(track, vtxz, pos, wacc, weff, waccP, weffP, waccN, weffN);
1429+ fillAllQA<kAfter , kProton >(track, vtxz, centrality, pos, wacc, weff, waccP, weffP, waccN, weffN);
13581430 break ;
13591431 }
13601432
0 commit comments