2121#include " PWGCF/GenericFramework/Core/GFWWeights.h"
2222
2323#include " Common/CCDB/EventSelectionParams.h"
24+ #include " Common/CCDB/RCTSelectionFlags.h"
2425#include " Common/CCDB/ctpRateFetcher.h"
2526#include " Common/DataModel/Centrality.h"
2627#include " Common/DataModel/EventSelection.h"
@@ -75,10 +76,11 @@ using namespace o2;
7576using namespace o2 ::framework;
7677using namespace o2 ::framework::expressions;
7778using namespace o2 ::analysis::genericframework;
79+ using namespace o2 ::aod::rctsel;
7880
7981#define O2_DEFINE_CONFIGURABLE (NAME, TYPE, DEFAULT, HELP ) Configurable<TYPE> NAME{#NAME, DEFAULT, HELP};
8082static constexpr double LongArrayDouble[4 ][2 ] = {{-2.0 , -2.0 }, {-2.0 , -2.0 }, {-2.0 , -2.0 }, {-2.0 , -2.0 }};
81- static constexpr float TrackCutArray[6 ][2 ] = {{2 .5f , 2 .5f }, {50 .0f , 50 .0f }, {70 .0f , 70 .0f }, {5 .0f , 5 .0f }, {2 .0f , 2 .0f }, {7 .0f , 7 .0f }};
83+ static constexpr float TrackCutArray[7 ][2 ] = {{2 .5f , 2 .5f }, {50 .0f , 50 .0f }, {70 .0f , 70 .0f }, {5 .0f , 5 .0f }, {2 .0f , 2 .0f }, {7 .0f , 7 .0f }, { 0 . f , 0 . f }};
8284
8385struct FlowTask {
8486
@@ -97,15 +99,16 @@ struct FlowTask {
9799 O2_DEFINE_CONFIGURABLE (cfgEtaVnPt, float , 0.4 , " eta range for pt in vn-pt correlations" )
98100 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" };
99101 O2_DEFINE_CONFIGURABLE (cfgEtaGapPtPtEnabled, bool , false , " switch of subevent pt-pt correlations" )
100- Configurable<LabeledArray<float >> cfgTrackCuts{" cfgTrackCuts" , {TrackCutArray[0 ], 6 , 2 , {" chi2 per TPCcls" , " TPC cluster" , " TPC crossed rows" , " ITS cluster" , " DCAz" , " DCAxy Nsigma" }, {" Nch" , " Observable" }}, " separate Nch and observable track selections" };
102+ 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" };
101103 enum TrackCut {
102104 // enum for labelledArray track selection
103105 kChi2prTPCcls = 0 , // max chi2 per TPC clusters
104106 kTPCclu , // minimum TPC found clusters
105107 kTPCCrossedRows , // minimum TPC crossed rows
106108 kITSclu , // minimum ITS found clusters
107109 kDCAz , // max DCA to vertex z
108- kDCAxyNSigma // 0: disable; Cut on number of sigma deviations from expected DCA in the transverse direction, nsigma=7 is the same with global track
110+ kDCAxyNSigma , // 0: disable; Cut on number of sigma deviations from expected DCA in the transverse direction, nsigma=7 is the same with global track
111+ kDCAzNSigma // 0: disable; Cut on number of sigma deviations from expected DCA in the transverse direction
109112 };
110113 enum TrackCutGroup {
111114 kTrCutNch = 0 ,
@@ -129,6 +132,7 @@ struct FlowTask {
129132 O2_DEFINE_CONFIGURABLE (cfgEvSelkNoCollInRofStandard, bool , false , " no other collisions in this Readout Frame with per-collision multiplicity above threshold" )
130133 O2_DEFINE_CONFIGURABLE (cfgEvSelkNoHighMultCollInPrevRof, bool , false , " veto an event if FT0C amplitude in previous ITS ROF is above threshold" )
131134 O2_DEFINE_CONFIGURABLE (cfgEvSelMultCorrelation, bool , true , " Multiplicity correlation cut" )
135+ O2_DEFINE_CONFIGURABLE (cfgEvSelRCTflags, std::string, " " , " keep empty to disable, usage: 'CentralBarrelTracking', 'CBT_hadronPID' " )
132136 O2_DEFINE_CONFIGURABLE (cfgGetInteractionRate, bool , false , " Get interaction rate from CCDB" )
133137 O2_DEFINE_CONFIGURABLE (cfgUseInteractionRateCut, bool , false , " Use events with low interaction rate" )
134138 O2_DEFINE_CONFIGURABLE (cfgCutMaxIR, float , 50 .0f , " maximum interaction rate (kHz)" )
@@ -211,7 +215,10 @@ struct FlowTask {
211215 // Functional form of pt-dependent DCAxy cut
212216 TF1* fPtDepDCAxy = nullptr ;
213217 TF1* fPtDepDCAxyForNch = nullptr ;
218+ TF1* fPtDepDCAz = nullptr ;
219+ TF1* fPtDepDCAzForNch = nullptr ;
214220 O2_DEFINE_CONFIGURABLE (cfgDCAxyFunc, std::string, " (0.0026+0.005/(x^1.01))" , " Functional form of pt-dependent DCAxy cut" );
221+ O2_DEFINE_CONFIGURABLE (cfgDCAzFunc, std::string, " (0.0026+0.005/(x^1.01))" , " Functional form of pt-dependent DCAz cut" );
215222 } cfgFuncParas;
216223
217224 struct : ConfigurableGroup {
@@ -316,6 +323,7 @@ struct FlowTask {
316323 std::unordered_map<int , TH2*> gHadronicRate ;
317324 ctpRateFetcher mRateFetcher ;
318325 TH2* gCurrentHadronicRate ;
326+ RCTFlagsChecker rctChecker{" CentralBarrelTracking" };
319327
320328 // phi-EP correction
321329 std::vector<TF1*> funcEff;
@@ -346,7 +354,7 @@ struct FlowTask {
346354 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (3 , " after supicious Runs removal" );
347355 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (4 , " after additional event cut" );
348356 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (5 , " after correction loads" );
349- registry.add (" hEventCountSpecific" , " Number of Event;; Count" , {HistType::kTH1D , {{12 , 0 , 12 }}});
357+ registry.add (" hEventCountSpecific" , " Number of Event;; Count" , {HistType::kTH1D , {{13 , 0 , 13 }}});
350358 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (1 , " after sel8" );
351359 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (2 , " kNoSameBunchPileup" );
352360 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (3 , " kNoITSROFrameBorder" );
@@ -360,6 +368,7 @@ struct FlowTask {
360368 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (10 , " occupancy" );
361369 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (11 , " MultCorrelation" );
362370 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (12 , " cfgEvSelV0AT0ACut" );
371+ registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (13 , " RCTflags" );
363372 registry.add (" hVtxZ" , " Vexter Z distribution" , {HistType::kTH1D , {axisVertex}});
364373 registry.add (" hMult" , " Multiplicity distribution" , {HistType::kTH1D , {{3000 , 0.5 , 3000.5 }}});
365374 std::string hCentTitle = " Centrality distribution, Estimator " + std::to_string (cfgCentEstimator);
@@ -739,6 +748,19 @@ struct FlowTask {
739748 cfgFuncParas.fPtDepDCAxyForNch ->SetParameter (0 , cfgTrackCuts->getData ()[kDCAxyNSigma ][kTrCutNch ]);
740749 LOGF (info, " DCAxy pt-dependence function for Nch: %s" , Form (" %0.1f * %s" , cfgTrackCuts->getData ()[kDCAxyNSigma ][kTrCutNch ], cfgFuncParas.cfgDCAxyFunc ->c_str ()));
741750 }
751+ if (cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutObs ]) {
752+ cfgFuncParas.fPtDepDCAz = new TF1 (" ptDepDCAz" , Form (" [0]*%s" , cfgFuncParas.cfgDCAzFunc ->c_str ()), 0.001 , 1000 );
753+ cfgFuncParas.fPtDepDCAz ->SetParameter (0 , cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutObs ]);
754+ LOGF (info, " DCAz pt-dependence function: %s" , Form (" %0.1f * %s" , cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutObs ], cfgFuncParas.cfgDCAzFunc ->c_str ()));
755+ }
756+ if (cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutNch ]) {
757+ cfgFuncParas.fPtDepDCAzForNch = new TF1 (" ptDepDCAzForNch" , Form (" [0]*%s" , cfgFuncParas.cfgDCAzFunc ->c_str ()), 0.001 , 1000 );
758+ cfgFuncParas.fPtDepDCAzForNch ->SetParameter (0 , cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutNch ]);
759+ LOGF (info, " DCAz pt-dependence function for Nch: %s" , Form (" %0.1f * %s" , cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutNch ], cfgFuncParas.cfgDCAzFunc ->c_str ()));
760+ }
761+ if (!cfgEvSelRCTflags.value .empty ()) {
762+ rctChecker.init (cfgEvSelRCTflags.value .c_str (), true ); // override initialzation
763+ }
742764 }
743765
744766 void createOutputObjectsForRun (int runNumber)
@@ -1054,6 +1076,11 @@ struct FlowTask {
10541076 if (cfgFuncParas.cfgEvSelV0AT0ACut )
10551077 registry.fill (HIST (" hEventCountSpecific" ), 11.5 );
10561078
1079+ if (!cfgEvSelRCTflags.value .empty () && !rctChecker (*collision))
1080+ return 0 ;
1081+ if (!cfgEvSelRCTflags.value .empty ())
1082+ registry.fill (HIST (" hEventCountSpecific" ), 12.5 );
1083+
10571084 return 1 ;
10581085 }
10591086
@@ -1076,6 +1103,8 @@ struct FlowTask {
10761103 {
10771104 if (cfgTrackCuts->getData ()[kDCAxyNSigma ][kTrCutObs ] && (std::fabs (track.dcaXY ()) > cfgFuncParas.fPtDepDCAxy ->Eval (track.pt ())))
10781105 return false ;
1106+ if (cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutObs ] && (std::fabs (track.dcaZ ()) > cfgFuncParas.fPtDepDCAz ->Eval (track.pt ())))
1107+ return false ;
10791108 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 ]));
10801109 }
10811110
@@ -1084,6 +1113,8 @@ struct FlowTask {
10841113 {
10851114 if (cfgTrackCuts->getData ()[kDCAxyNSigma ][kTrCutNch ] && (std::fabs (track.dcaXY ()) > cfgFuncParas.fPtDepDCAxyForNch ->Eval (track.pt ())))
10861115 return false ;
1116+ if (cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutNch ] && (std::fabs (track.dcaZ ()) > cfgFuncParas.fPtDepDCAzForNch ->Eval (track.pt ())))
1117+ return false ;
10871118 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 ]));
10881119 }
10891120
0 commit comments