Skip to content

Commit ec85005

Browse files
authored
[PWGCF] add cuts for MC and data (#12289)
1 parent 822373c commit ec85005

File tree

2 files changed

+89
-36
lines changed

2 files changed

+89
-36
lines changed

PWGCF/Flow/Tasks/flowMc.cxx

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ struct FlowMc {
6767
O2_DEFINE_CONFIGURABLE(cfgCutITSclu, float, 5.0f, "minimum ITS clusters")
6868
O2_DEFINE_CONFIGURABLE(cfgCutChi2prTPCcls, float, 2.5f, "max chi2 per TPC clusters")
6969
O2_DEFINE_CONFIGURABLE(cfgCutTPCcrossedrows, float, 70.0f, "minimum TPC crossed rows")
70+
O2_DEFINE_CONFIGURABLE(cfgCutDCAxy, float, 0.2f, "DCAxy cut for tracks")
71+
O2_DEFINE_CONFIGURABLE(cfgDCAxyNSigma, float, 7, "Cut on number of sigma deviations from expected DCA in the transverse direction");
72+
O2_DEFINE_CONFIGURABLE(cfgDCAxyFunction, std::string, "(0.0015+0.005/(x^1.1))", "Functional form of pt-dependent DCAxy cut");
73+
O2_DEFINE_CONFIGURABLE(cfgCutDCAz, float, 2.0f, "DCAz cut for tracks")
74+
O2_DEFINE_CONFIGURABLE(cfgCutDCAzPtDepEnabled, bool, false, "switch of DCAz pt dependent cut")
75+
O2_DEFINE_CONFIGURABLE(cfgEnableITSCuts, bool, true, "switch of enabling ITS based track selection cuts")
76+
O2_DEFINE_CONFIGURABLE(cfgTrkSelRun3ITSMatch, bool, false, "GlobalTrackRun3ITSMatching::Run3ITSall7Layers selection")
7077
O2_DEFINE_CONFIGURABLE(cfgFlowAcceptance, std::string, "", "CCDB path to acceptance object")
7178
O2_DEFINE_CONFIGURABLE(cfgFlowEfficiency, std::string, "", "CCDB path to efficiency object")
7279
O2_DEFINE_CONFIGURABLE(cfgCentVsIPTruth, std::string, "", "CCDB path to centrality vs IP truth")
@@ -103,6 +110,10 @@ struct FlowMc {
103110

104111
// using FilteredTracks = soa::Join<aod::TracksIU, aod::TracksExtra, aod::TrackSelection>;
105112

113+
// Additional filters for tracks
114+
TrackSelection myTrackSel;
115+
TF1* fPtDepDCAxy = nullptr;
116+
106117
// Cent vs IP
107118
TH1D* mCentVsIPTruth = nullptr;
108119
bool centVsIPTruthLoaded = false;
@@ -247,6 +258,28 @@ struct FlowMc {
247258
fGFWReco->CreateRegions();
248259
}
249260

261+
if (cfgEnableITSCuts) {
262+
if (cfgTrkSelRun3ITSMatch) {
263+
myTrackSel = getGlobalTrackSelectionRun3ITSMatch(TrackSelection::GlobalTrackRun3ITSMatching::Run3ITSall7Layers, TrackSelection::GlobalTrackRun3DCAxyCut::Default);
264+
} else {
265+
myTrackSel = getGlobalTrackSelectionRun3ITSMatch(TrackSelection::GlobalTrackRun3ITSMatching::Run3ITSibAny, TrackSelection::GlobalTrackRun3DCAxyCut::Default);
266+
}
267+
}
268+
if (cfgCutDCAxy != 0.0) {
269+
myTrackSel.SetMaxDcaXY(cfgCutDCAxy);
270+
} else {
271+
fPtDepDCAxy = new TF1("ptDepDCAxy", Form("[0]*%s", cfgDCAxyFunction->c_str()), 0.001, 100);
272+
fPtDepDCAxy->SetParameter(0, cfgDCAxyNSigma);
273+
LOGF(info, "DCAxy pt-dependence function: %s", Form("[0]*%s", cfgDCAxyFunction->c_str()));
274+
myTrackSel.SetMaxDcaXYPtDep([fPtDepDCAxy = this->fPtDepDCAxy](float pt) { return fPtDepDCAxy->Eval(pt); });
275+
}
276+
myTrackSel.SetMinNClustersTPC(cfgCutTPCclu);
277+
myTrackSel.SetMinNCrossedRowsTPC(cfgCutTPCcrossedrows);
278+
if (cfgEnableITSCuts)
279+
myTrackSel.SetMinNClustersITS(cfgCutITSclu);
280+
if (!cfgCutDCAzPtDepEnabled)
281+
myTrackSel.SetMaxDcaZ(cfgCutDCAz);
282+
250283
if (cfgTrackDensityCorrUse) {
251284
std::vector<double> pTEffBins = {0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.4, 1.8, 2.2, 2.6, 3.0};
252285
hFindPtBin = new TH1D("hFindPtBin", "hFindPtBin", pTEffBins.size() - 1, &pTEffBins[0]);
@@ -378,7 +411,10 @@ struct FlowMc {
378411
template <typename TTrack>
379412
bool trackSelected(TTrack track)
380413
{
381-
return ((track.tpcNClsFound() >= cfgCutTPCclu) && (track.tpcNClsCrossedRows() >= cfgCutTPCcrossedrows) && (track.itsNCls() >= cfgCutITSclu));
414+
if (cfgCutDCAzPtDepEnabled && (track.dcaZ() > (0.004f + 0.013f / track.pt()))) {
415+
return false;
416+
}
417+
return myTrackSel.IsSelected(track);
382418
}
383419

384420
void process(FilteredMcCollisions::iterator const& mcCollision, aod::BCsWithTimestamps const&, soa::SmallGroups<soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels>> const& collisions, FilteredMcParticles const& mcParticles, FilteredTracks const&)

PWGCF/Flow/Tasks/flowTask.cxx

Lines changed: 52 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,28 @@ struct FlowTask {
119119
Configurable<std::vector<double>> cfgMultT0CCutPars{"cfgMultT0CCutPars", std::vector<double>{143.04, -4.58368, 0.0766055, -0.000727796, 2.86153e-06, 23.3108, -0.36304, 0.00437706, -4.717e-05, 1.98332e-07}, "Global multiplicity vs T0C centrality cut parameter values"};
120120
O2_DEFINE_CONFIGURABLE(cfgMultPVT0CCutEnabled, bool, false, "Enable PV multiplicity vs T0C centrality cut")
121121
Configurable<std::vector<double>> cfgMultPVT0CCutPars{"cfgMultPVT0CCutPars", std::vector<double>{195.357, -6.15194, 0.101313, -0.000955828, 3.74793e-06, 30.0326, -0.43322, 0.00476265, -5.11206e-05, 2.13613e-07}, "PV multiplicity vs T0C centrality cut parameter values"};
122-
O2_DEFINE_CONFIGURABLE(cfgMultMultHighCutFunction, std::string, "[0]+[1]*x + 5.*([2]+[3]*x)", "Functional for multiplicity correlation cut");
123-
O2_DEFINE_CONFIGURABLE(cfgMultMultLowCutFunction, std::string, "[0]+[1]*x - 5.*([2]+[3]*x)", "Functional for multiplicity correlation cut");
122+
O2_DEFINE_CONFIGURABLE(cfgMultMultPVHighCutFunction, std::string, "[0]+[1]*x + 5.*([2]+[3]*x)", "Functional for multiplicity correlation cut");
123+
O2_DEFINE_CONFIGURABLE(cfgMultMultPVLowCutFunction, std::string, "[0]+[1]*x - 5.*([2]+[3]*x)", "Functional for multiplicity correlation cut");
124124
O2_DEFINE_CONFIGURABLE(cfgMultGlobalPVCutEnabled, bool, false, "Enable global multiplicity vs PV multiplicity cut")
125125
Configurable<std::vector<double>> cfgMultGlobalPVCutPars{"cfgMultGlobalPVCutPars", std::vector<double>{-0.140809, 0.734344, 2.77495, 0.0165935}, "PV multiplicity vs T0C centrality cut parameter values"};
126+
O2_DEFINE_CONFIGURABLE(cfgMultMultV0AHighCutFunction, std::string, "[0] + [1]*x + [2]*x*x + [3]*x*x*x + [4]*x*x*x*x + 4.*([5] + [6]*x + [7]*x*x + [8]*x*x*x + [9]*x*x*x*x)", "Functional for multiplicity correlation cut");
127+
O2_DEFINE_CONFIGURABLE(cfgMultMultV0ALowCutFunction, std::string, "[0] + [1]*x + [2]*x*x + [3]*x*x*x + [4]*x*x*x*x - 3.*([5] + [6]*x + [7]*x*x + [8]*x*x*x + [9]*x*x*x*x)", "Functional for multiplicity correlation cut");
128+
O2_DEFINE_CONFIGURABLE(cfgMultMultV0ACutEnabled, bool, false, "Enable global multiplicity vs V0A multiplicity cut")
129+
Configurable<std::vector<double>> cfgMultMultV0ACutPars{"cfgMultMultV0ACutPars", std::vector<double>{534.893, 184.344, 0.423539, -0.00331436, 5.34622e-06, 871.239, 53.3735, -0.203528, 0.000122758, 5.41027e-07}, "Global multiplicity vs V0A multiplicity cut parameter values"};
126130
std::vector<double> multT0CCutPars;
127131
std::vector<double> multPVT0CCutPars;
128132
std::vector<double> multGlobalPVCutPars;
133+
std::vector<double> multMultV0ACutPars;
134+
TF1* fMultPVT0CCutLow = nullptr;
135+
TF1* fMultPVT0CCutHigh = nullptr;
136+
TF1* fMultT0CCutLow = nullptr;
137+
TF1* fMultT0CCutHigh = nullptr;
138+
TF1* fMultGlobalPVCutLow = nullptr;
139+
TF1* fMultGlobalPVCutHigh = nullptr;
140+
TF1* fMultMultV0ACutLow = nullptr;
141+
TF1* fMultMultV0ACutHigh = nullptr;
142+
TF1* fT0AV0AMean = nullptr;
143+
TF1* fT0AV0ASigma = nullptr;
129144
} cfgFuncParas;
130145

131146
ConfigurableAxis axisPtHist{"axisPtHist", {100, 0., 10.}, "pt axis for histograms"};
@@ -198,16 +213,6 @@ struct FlowTask {
198213
TF1* funcV3;
199214
TF1* funcV4;
200215

201-
// Additional Event selection cuts - Copy from flowGenericFramework.cxx
202-
TF1* fMultPVT0CCutLow = nullptr;
203-
TF1* fMultPVT0CCutHigh = nullptr;
204-
TF1* fMultT0CCutLow = nullptr;
205-
TF1* fMultT0CCutHigh = nullptr;
206-
TF1* fMultGlobalPVCutLow = nullptr;
207-
TF1* fMultGlobalPVCutHigh = nullptr;
208-
TF1* fT0AV0AMean = nullptr;
209-
TF1* fT0AV0ASigma = nullptr;
210-
211216
void init(InitContext const&)
212217
{
213218
const AxisSpec axisVertex{40, -20, 20, "Vtxz (cm)"};
@@ -469,25 +474,31 @@ struct FlowTask {
469474
cfgFuncParas.multT0CCutPars = cfgFuncParas.cfgMultT0CCutPars;
470475
cfgFuncParas.multPVT0CCutPars = cfgFuncParas.cfgMultPVT0CCutPars;
471476
cfgFuncParas.multGlobalPVCutPars = cfgFuncParas.cfgMultGlobalPVCutPars;
472-
fMultPVT0CCutLow = new TF1("fMultPVT0CCutLow", cfgFuncParas.cfgMultCentLowCutFunction->c_str(), 0, 100);
473-
fMultPVT0CCutLow->SetParameters(&(cfgFuncParas.multPVT0CCutPars[0]));
474-
fMultPVT0CCutHigh = new TF1("fMultPVT0CCutHigh", cfgFuncParas.cfgMultCentHighCutFunction->c_str(), 0, 100);
475-
fMultPVT0CCutHigh->SetParameters(&(cfgFuncParas.multPVT0CCutPars[0]));
477+
cfgFuncParas.multMultV0ACutPars = cfgFuncParas.cfgMultMultV0ACutPars;
478+
cfgFuncParas.fMultPVT0CCutLow = new TF1("fMultPVT0CCutLow", cfgFuncParas.cfgMultCentLowCutFunction->c_str(), 0, 100);
479+
cfgFuncParas.fMultPVT0CCutLow->SetParameters(&(cfgFuncParas.multPVT0CCutPars[0]));
480+
cfgFuncParas.fMultPVT0CCutHigh = new TF1("fMultPVT0CCutHigh", cfgFuncParas.cfgMultCentHighCutFunction->c_str(), 0, 100);
481+
cfgFuncParas.fMultPVT0CCutHigh->SetParameters(&(cfgFuncParas.multPVT0CCutPars[0]));
482+
483+
cfgFuncParas.fMultT0CCutLow = new TF1("fMultT0CCutLow", cfgFuncParas.cfgMultCentLowCutFunction->c_str(), 0, 100);
484+
cfgFuncParas.fMultT0CCutLow->SetParameters(&(cfgFuncParas.multT0CCutPars[0]));
485+
cfgFuncParas.fMultT0CCutHigh = new TF1("fMultT0CCutHigh", cfgFuncParas.cfgMultCentHighCutFunction->c_str(), 0, 100);
486+
cfgFuncParas.fMultT0CCutHigh->SetParameters(&(cfgFuncParas.multT0CCutPars[0]));
476487

477-
fMultT0CCutLow = new TF1("fMultT0CCutLow", cfgFuncParas.cfgMultCentLowCutFunction->c_str(), 0, 100);
478-
fMultT0CCutLow->SetParameters(&(cfgFuncParas.multT0CCutPars[0]));
479-
fMultT0CCutHigh = new TF1("fMultT0CCutHigh", cfgFuncParas.cfgMultCentHighCutFunction->c_str(), 0, 100);
480-
fMultT0CCutHigh->SetParameters(&(cfgFuncParas.multT0CCutPars[0]));
488+
cfgFuncParas.fMultGlobalPVCutLow = new TF1("fMultGlobalPVCutLow", cfgFuncParas.cfgMultMultPVLowCutFunction->c_str(), 0, 4000);
489+
cfgFuncParas.fMultGlobalPVCutLow->SetParameters(&(cfgFuncParas.multGlobalPVCutPars[0]));
490+
cfgFuncParas.fMultGlobalPVCutHigh = new TF1("fMultGlobalPVCutHigh", cfgFuncParas.cfgMultMultPVHighCutFunction->c_str(), 0, 4000);
491+
cfgFuncParas.fMultGlobalPVCutHigh->SetParameters(&(cfgFuncParas.multGlobalPVCutPars[0]));
481492

482-
fMultGlobalPVCutLow = new TF1("fMultGlobalPVCutLow", cfgFuncParas.cfgMultMultLowCutFunction->c_str(), 0, 4000);
483-
fMultGlobalPVCutLow->SetParameters(&(cfgFuncParas.multGlobalPVCutPars[0]));
484-
fMultGlobalPVCutHigh = new TF1("fMultGlobalPVCutHigh", cfgFuncParas.cfgMultMultHighCutFunction->c_str(), 0, 4000);
485-
fMultGlobalPVCutHigh->SetParameters(&(cfgFuncParas.multGlobalPVCutPars[0]));
493+
cfgFuncParas.fMultMultV0ACutLow = new TF1("fMultMultV0ACutLow", cfgFuncParas.cfgMultMultV0ALowCutFunction->c_str(), 0, 4000);
494+
cfgFuncParas.fMultMultV0ACutLow->SetParameters(&(cfgFuncParas.multMultV0ACutPars[0]));
495+
cfgFuncParas.fMultMultV0ACutHigh = new TF1("fMultMultV0ACutHigh", cfgFuncParas.cfgMultMultV0AHighCutFunction->c_str(), 0, 4000);
496+
cfgFuncParas.fMultMultV0ACutHigh->SetParameters(&(cfgFuncParas.multMultV0ACutPars[0]));
486497

487-
fT0AV0AMean = new TF1("fT0AV0AMean", "[0]+[1]*x", 0, 200000);
488-
fT0AV0AMean->SetParameters(-1601.0581, 9.417652e-01);
489-
fT0AV0ASigma = new TF1("fT0AV0ASigma", "[0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x", 0, 200000);
490-
fT0AV0ASigma->SetParameters(463.4144, 6.796509e-02, -9.097136e-07, 7.971088e-12, -2.600581e-17);
498+
cfgFuncParas.fT0AV0AMean = new TF1("fT0AV0AMean", "[0]+[1]*x", 0, 200000);
499+
cfgFuncParas.fT0AV0AMean->SetParameters(-1601.0581, 9.417652e-01);
500+
cfgFuncParas.fT0AV0ASigma = new TF1("fT0AV0ASigma", "[0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x", 0, 200000);
501+
cfgFuncParas.fT0AV0ASigma->SetParameters(463.4144, 6.796509e-02, -9.097136e-07, 7.971088e-12, -2.600581e-17);
491502
}
492503

493504
if (cfgTrackDensityCorrUse) {
@@ -682,21 +693,27 @@ struct FlowTask {
682693

683694
if (cfgEvSelMultCorrelation) {
684695
if (cfgFuncParas.cfgMultPVT0CCutEnabled) {
685-
if (multNTracksPV < fMultPVT0CCutLow->Eval(centrality))
696+
if (multNTracksPV < cfgFuncParas.fMultPVT0CCutLow->Eval(centrality))
686697
return 0;
687-
if (multNTracksPV > fMultPVT0CCutHigh->Eval(centrality))
698+
if (multNTracksPV > cfgFuncParas.fMultPVT0CCutHigh->Eval(centrality))
688699
return 0;
689700
}
690701
if (cfgFuncParas.cfgMultT0CCutEnabled) {
691-
if (multTrk < fMultT0CCutLow->Eval(centrality))
702+
if (multTrk < cfgFuncParas.fMultT0CCutLow->Eval(centrality))
692703
return 0;
693-
if (multTrk > fMultT0CCutHigh->Eval(centrality))
704+
if (multTrk > cfgFuncParas.fMultT0CCutHigh->Eval(centrality))
694705
return 0;
695706
}
696707
if (cfgFuncParas.cfgMultGlobalPVCutEnabled) {
697-
if (multTrk < fMultGlobalPVCutLow->Eval(multNTracksPV))
708+
if (multTrk < cfgFuncParas.fMultGlobalPVCutLow->Eval(multNTracksPV))
709+
return 0;
710+
if (multTrk > cfgFuncParas.fMultGlobalPVCutHigh->Eval(multNTracksPV))
711+
return 0;
712+
}
713+
if (cfgFuncParas.cfgMultMultV0ACutEnabled) {
714+
if (collision.multFV0A() < cfgFuncParas.fMultMultV0ACutLow->Eval(multTrk))
698715
return 0;
699-
if (multTrk > fMultGlobalPVCutHigh->Eval(multNTracksPV))
716+
if (collision.multFV0A() > cfgFuncParas.fMultMultV0ACutHigh->Eval(multTrk))
700717
return 0;
701718
}
702719
}
@@ -705,7 +722,7 @@ struct FlowTask {
705722

706723
// V0A T0A 5 sigma cut
707724
float sigma = 5.0;
708-
if (cfgEvSelV0AT0ACut && (std::fabs(collision.multFV0A() - fT0AV0AMean->Eval(collision.multFT0A())) > sigma * fT0AV0ASigma->Eval(collision.multFT0A())))
725+
if (cfgEvSelV0AT0ACut && (std::fabs(collision.multFV0A() - cfgFuncParas.fT0AV0AMean->Eval(collision.multFT0A())) > sigma * cfgFuncParas.fT0AV0ASigma->Eval(collision.multFT0A())))
709726
return 0;
710727
if (cfgEvSelV0AT0ACut)
711728
registry.fill(HIST("hEventCountSpecific"), 11.5);

0 commit comments

Comments
 (0)