@@ -75,10 +75,11 @@ using namespace o2;
7575using namespace o2 ::framework;
7676using namespace o2 ::framework::expressions;
7777using namespace o2 ::analysis::genericframework;
78+ using namespace o2 ::aod::rctsel;
7879
7980#define O2_DEFINE_CONFIGURABLE (NAME, TYPE, DEFAULT, HELP ) Configurable<TYPE> NAME{#NAME, DEFAULT, HELP};
8081static 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 }};
82+ 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 }};
8283
8384struct FlowTask {
8485
@@ -97,15 +98,16 @@ struct FlowTask {
9798 O2_DEFINE_CONFIGURABLE (cfgEtaVnPt, float , 0.4 , " eta range for pt in vn-pt correlations" )
9899 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" };
99100 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" };
101+ 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" };
101102 enum TrackCut {
102103 // enum for labelledArray track selection
103104 kChi2prTPCcls = 0 , // max chi2 per TPC clusters
104105 kTPCclu , // minimum TPC found clusters
105106 kTPCCrossedRows , // minimum TPC crossed rows
106107 kITSclu , // minimum ITS found clusters
107108 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
109+ 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+ kDCAzNSigma // 0: disable; Cut on number of sigma deviations from expected DCA in the transverse direction
109111 };
110112 enum TrackCutGroup {
111113 kTrCutNch = 0 ,
@@ -129,6 +131,7 @@ struct FlowTask {
129131 O2_DEFINE_CONFIGURABLE (cfgEvSelkNoCollInRofStandard, bool , false , " no other collisions in this Readout Frame with per-collision multiplicity above threshold" )
130132 O2_DEFINE_CONFIGURABLE (cfgEvSelkNoHighMultCollInPrevRof, bool , false , " veto an event if FT0C amplitude in previous ITS ROF is above threshold" )
131133 O2_DEFINE_CONFIGURABLE (cfgEvSelMultCorrelation, bool , true , " Multiplicity correlation cut" )
134+ O2_DEFINE_CONFIGURABLE (cfgEvSelRCTflags, std::string, " " , " keep empty to disable, usage: 'CentralBarrelTracking', 'CBT_hadronPID' " )
132135 O2_DEFINE_CONFIGURABLE (cfgGetInteractionRate, bool , false , " Get interaction rate from CCDB" )
133136 O2_DEFINE_CONFIGURABLE (cfgUseInteractionRateCut, bool , false , " Use events with low interaction rate" )
134137 O2_DEFINE_CONFIGURABLE (cfgCutMaxIR, float , 50 .0f , " maximum interaction rate (kHz)" )
@@ -211,7 +214,10 @@ struct FlowTask {
211214 // Functional form of pt-dependent DCAxy cut
212215 TF1* fPtDepDCAxy = nullptr ;
213216 TF1* fPtDepDCAxyForNch = nullptr ;
217+ TF1* fPtDepDCAz = nullptr ;
218+ TF1* fPtDepDCAzForNch = nullptr ;
214219 O2_DEFINE_CONFIGURABLE (cfgDCAxyFunc, std::string, " (0.0026+0.005/(x^1.01))" , " Functional form of pt-dependent DCAxy cut" );
220+ O2_DEFINE_CONFIGURABLE (cfgDCAzFunc, std::string, " (0.0026+0.005/(x^1.01))" , " Functional form of pt-dependent DCAz cut" );
215221 } cfgFuncParas;
216222
217223 struct : ConfigurableGroup {
@@ -316,6 +322,7 @@ struct FlowTask {
316322 std::unordered_map<int , TH2*> gHadronicRate ;
317323 ctpRateFetcher mRateFetcher ;
318324 TH2* gCurrentHadronicRate ;
325+ RCTFlagsChecker rctChecker{ " CentralBarrelTracking" };
319326
320327 // phi-EP correction
321328 std::vector<TF1*> funcEff;
@@ -346,7 +353,7 @@ struct FlowTask {
346353 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (3 , " after supicious Runs removal" );
347354 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (4 , " after additional event cut" );
348355 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (5 , " after correction loads" );
349- registry.add (" hEventCountSpecific" , " Number of Event;; Count" , {HistType::kTH1D , {{12 , 0 , 12 }}});
356+ registry.add (" hEventCountSpecific" , " Number of Event;; Count" , {HistType::kTH1D , {{13 , 0 , 13 }}});
350357 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (1 , " after sel8" );
351358 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (2 , " kNoSameBunchPileup" );
352359 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (3 , " kNoITSROFrameBorder" );
@@ -360,6 +367,7 @@ struct FlowTask {
360367 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (10 , " occupancy" );
361368 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (11 , " MultCorrelation" );
362369 registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (12 , " cfgEvSelV0AT0ACut" );
370+ registry.get <TH1>(HIST (" hEventCountSpecific" ))->GetXaxis ()->SetBinLabel (13 , " RCTflags" );
363371 registry.add (" hVtxZ" , " Vexter Z distribution" , {HistType::kTH1D , {axisVertex}});
364372 registry.add (" hMult" , " Multiplicity distribution" , {HistType::kTH1D , {{3000 , 0.5 , 3000.5 }}});
365373 std::string hCentTitle = " Centrality distribution, Estimator " + std::to_string (cfgCentEstimator);
@@ -739,6 +747,19 @@ struct FlowTask {
739747 cfgFuncParas.fPtDepDCAxyForNch ->SetParameter (0 , cfgTrackCuts->getData ()[kDCAxyNSigma ][kTrCutNch ]);
740748 LOGF (info, " DCAxy pt-dependence function for Nch: %s" , Form (" %0.1f * %s" , cfgTrackCuts->getData ()[kDCAxyNSigma ][kTrCutNch ], cfgFuncParas.cfgDCAxyFunc ->c_str ()));
741749 }
750+ if (cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutObs ]) {
751+ cfgFuncParas.fPtDepDCAz = new TF1 (" ptDepDCAz" , Form (" [0]*%s" , cfgFuncParas.cfgDCAzFunc ->c_str ()), 0.001 , 1000 );
752+ cfgFuncParas.fPtDepDCAz ->SetParameter (0 , cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutObs ]);
753+ LOGF (info, " DCAz pt-dependence function: %s" , Form (" %0.1f * %s" , cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutObs ], cfgFuncParas.cfgDCAzFunc ->c_str ()));
754+ }
755+ if (cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutNch ]) {
756+ cfgFuncParas.fPtDepDCAzForNch = new TF1 (" ptDepDCAzForNch" , Form (" [0]*%s" , cfgFuncParas.cfgDCAzFunc ->c_str ()), 0.001 , 1000 );
757+ cfgFuncParas.fPtDepDCAzForNch ->SetParameter (0 , cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutNch ]);
758+ LOGF (info, " DCAz pt-dependence function for Nch: %s" , Form (" %0.1f * %s" , cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutNch ], cfgFuncParas.cfgDCAzFunc ->c_str ()));
759+ }
760+ if (!cfgEvSelRCTflags.value .empty ()) {
761+ rctChecker.init (cfgEvSelRCTflags.value .c_str (), true ); // override initialzation
762+ }
742763 }
743764
744765 void createOutputObjectsForRun (int runNumber)
@@ -1054,6 +1075,11 @@ struct FlowTask {
10541075 if (cfgFuncParas.cfgEvSelV0AT0ACut )
10551076 registry.fill (HIST (" hEventCountSpecific" ), 11.5 );
10561077
1078+ if (!cfgEvSelRCTflags.value .empty () && !rctChecker (*collision))
1079+ return 0 ;
1080+ if (!cfgEvSelRCTflags.value .empty ())
1081+ registry.fill (HIST (" hEventCountSpecific" ), 12.5 );
1082+
10571083 return 1 ;
10581084 }
10591085
@@ -1076,6 +1102,8 @@ struct FlowTask {
10761102 {
10771103 if (cfgTrackCuts->getData ()[kDCAxyNSigma ][kTrCutObs ] && (std::fabs (track.dcaXY ()) > cfgFuncParas.fPtDepDCAxy ->Eval (track.pt ())))
10781104 return false ;
1105+ if (cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutObs ] && (std::fabs (track.dcaZ ()) > cfgFuncParas.fPtDepDCAz ->Eval (track.pt ())))
1106+ return false ;
10791107 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 ]));
10801108 }
10811109
@@ -1084,6 +1112,8 @@ struct FlowTask {
10841112 {
10851113 if (cfgTrackCuts->getData ()[kDCAxyNSigma ][kTrCutNch ] && (std::fabs (track.dcaXY ()) > cfgFuncParas.fPtDepDCAxyForNch ->Eval (track.pt ())))
10861114 return false ;
1115+ if (cfgTrackCuts->getData ()[kDCAzNSigma ][kTrCutNch ] && (std::fabs (track.dcaZ ()) > cfgFuncParas.fPtDepDCAzForNch ->Eval (track.pt ())))
1116+ return false ;
10871117 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 ]));
10881118 }
10891119
0 commit comments