Skip to content

Commit 0a8ae16

Browse files
[PWGHF] Add single-track cuts to Hc creator (#15658)
1 parent 1fdd48f commit 0a8ae16

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

PWGHF/D2H/TableProducer/dataCreatorHiddenCharmReduced.cxx

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,19 @@ struct HfDataCreatorHiddenCharmReduced {
8383
Configurable<int> tpcNClsCrossedRowsMin{"tpcNClsCrossedRowsMin", 80, "Minimum number of crossed TPC rows"};
8484
Configurable<double> ptMinTrack{"ptMinTrack", 0.5, "Minimum proton-track pT"};
8585
Configurable<double> etaMaxTrack{"etaMaxTrack", 0.8, "Maximum proton-track |eta|"};
86-
Configurable<float> momForCombinedPid{"momForCombinedPid", 0.75f, "Momentum threshold above which combined TPC+TOF proton PID is used"};
86+
Configurable<float> trackChi2Cut{"trackChi2Cut", 4.f, "Maximum chi2/ncls in TPC"};
87+
Configurable<float> trackMinChi2Cut{"trackMinChi2Cut", 0.f, "Minimum chi2/ncls in TPC"};
88+
Configurable<float> trackMaxChi2ITS{"trackMaxChi2ITS", 36.f, "Maximum chi2/ncls in ITS"};
8789
Configurable<std::vector<double>> binsPtTrack{"binsPtTrack", std::vector<double>{hf_cuts_single_track::vecBinsPtTrack}, "Track pT bin limits for DCA cuts"};
8890
Configurable<LabeledArray<double>> cutsTrack{"cutsTrack", {hf_cuts_single_track::CutsTrack[0], hf_cuts_single_track::NBinsPtTrack, hf_cuts_single_track::NCutVarsTrack, hf_cuts_single_track::labelsPtTrack, hf_cuts_single_track::labelsCutVarTrack}, "Single-track DCA selections per pT bin"};
91+
// DCA
92+
Configurable<std::vector<float>> paramsDCAxyPtDep{"paramsDCAxyPtDep", std::vector<float>{0.0010, 0.0080, 0.73}, "Parameters for pT-dependent DCAxy cut: p0, p1, p2 for cut = p0 + p1/pt^p2"};
93+
Configurable<std::vector<float>> paramsDCAzPtDep{"paramsDCAzPtDep", std::vector<float>{-0.0044, 0.0152, 0.47}, "Parameters for pT-dependent DCAz cut: p0, p1, p2 for cut = p0 + p1/pt^p2"};
94+
// PID
95+
Configurable<float> momForCombinedPid{"momForCombinedPid", 0.75f, "Momentum threshold above which combined TPC+TOF proton PID is used"};
8996
Configurable<float> maxNsigmaTofPi{"maxNsigmaTofPi", 2.f, "Maximum pion n-sigma in TOF for proton rejection"};
9097
Configurable<float> maxNsigmaTofKa{"maxNsigmaTofKa", 2.f, "Maximum kaon n-sigma in TOF for proton rejection"};
98+
Configurable<float> maxNsigmaTofPr{"maxNsigmaTofPr", 3.f, "Maximum proton n-sigma in TOF"};
9199
Configurable<float> maxNsigmaCombinedPr{"maxNsigmaCombinedPr", 3.f, "Maximum combined proton n-sigma from TPC and TOF"};
92100
Configurable<float> maxNsigmaTpcPi{"maxNsigmaTpcPi", 2.f, "Maximum pion n-sigma in TPC for proton rejection"};
93101
Configurable<float> maxNsigmaTpcKa{"maxNsigmaTpcKa", 2.f, "Maximum kaon n-sigma in TPC for proton rejection"};
@@ -148,6 +156,7 @@ struct HfDataCreatorHiddenCharmReduced {
148156
registry.add("hNSigmaTPCProton", "Selected proton tracks;#it{p}_{T}^{track} (GeV/#it{c});n#sigma_{TPC}", {HistType::kTH2D, {axisPt, axisNSigma}});
149157
registry.add("hNSigmaTOFProton", "Selected proton tracks;#it{p}_{T}^{track} (GeV/#it{c});n#sigma_{TOF}", {HistType::kTH2D, {axisPt, axisNSigma}});
150158
registry.add("hInvMass", "Invariant mass of selected proton with all other tracks in the event;#it{p}_{T}^{proton} (GeV/#it{c});invariant mass with other tracks (GeV/#it{c}^{2})", {HistType::kTH2D, {axisPt, AxisSpec{100, 2.85, 3.25, "invariant mass with other tracks (GeV/#it{c}^{2})"}}});
159+
registry.add("hDeDxTPCProton", "Selected proton tracks;#it{p}_{T}^{track} (GeV/#it{c});TPC dE/dx (a.u.)", {HistType::kTH2D, {axisPt, AxisSpec{100, 0., 200., "TPC dE/dx (a.u.)"}}});
151160
}
152161

153162
// init HF event selection helper
@@ -163,6 +172,11 @@ struct HfDataCreatorHiddenCharmReduced {
163172
}
164173
}
165174

175+
static float dcaSigma(float const& pt, float const& p0, float const& p1, float const& p2)
176+
{
177+
return p0 + p1 / std::pow(std::abs(pt), p2);
178+
}
179+
166180
template <typename TTrack>
167181
bool isSelectedPid(TTrack const& track) const
168182
{
@@ -188,10 +202,17 @@ struct HfDataCreatorHiddenCharmReduced {
188202
bool rejectAsPion = false;
189203
bool rejectAsKaon = false;
190204

191-
if (mom < momForCombinedPid || !hasTOF) {
205+
if (mom < momForCombinedPid) {
192206
isProton = std::abs(nSigmaTPCPr) < maxNsigmaTpcPr;
193207
rejectAsPion = std::abs(nSigmaTPCPi) < maxNsigmaTpcPi;
194208
rejectAsKaon = std::abs(nSigmaTPCKa) < maxNsigmaTpcKa;
209+
210+
if (hasTOF) {
211+
rejectAsPion = rejectAsPion || std::abs(track.tofNSigmaPi()) < maxNsigmaTofPi;
212+
rejectAsKaon = rejectAsKaon || std::abs(track.tofNSigmaKa()) < maxNsigmaTofKa;
213+
isProton = isProton || std::abs(track.tofNSigmaPr()) < maxNsigmaCombinedPr;
214+
}
215+
195216
} else {
196217
const float nSigmaTOFPr = track.tofNSigmaPr();
197218
const float nSigmaTOFPi = track.tofNSigmaPi();
@@ -211,6 +232,11 @@ struct HfDataCreatorHiddenCharmReduced {
211232
const int itsNClsMin = config.itsNClsMin.value;
212233
const double etaMaxTrack = config.etaMaxTrack.value;
213234
const double ptMinTrack = config.ptMinTrack.value;
235+
const float trackChi2Cut = config.trackChi2Cut.value;
236+
const float trackMinChi2Cut = config.trackMinChi2Cut.value;
237+
const float trackMaxChi2ITS = config.trackMaxChi2ITS.value;
238+
const float dcaXY = track.dcaXY();
239+
const float dcaZ = track.dcaZ();
214240

215241
if (!track.isGlobalTrackWoDCA()) {
216242
return false;
@@ -224,6 +250,12 @@ struct HfDataCreatorHiddenCharmReduced {
224250
if (track.itsNCls() < itsNClsMin) {
225251
return false;
226252
}
253+
if (track.tpcChi2NCl() > trackChi2Cut || track.tpcChi2NCl() < trackMinChi2Cut) {
254+
return false;
255+
}
256+
if (track.itsChi2NCl() > trackMaxChi2ITS) {
257+
return false;
258+
}
227259
if (std::abs(track.eta()) > etaMaxTrack) {
228260
return false;
229261
}
@@ -233,6 +265,9 @@ struct HfDataCreatorHiddenCharmReduced {
233265
if (!isSelectedTrackDca(config.binsPtTrack, config.cutsTrack, track.pt(), track.dcaXY(), track.dcaZ())) {
234266
return false;
235267
}
268+
if (dcaSigma(track.pt(), config.paramsDCAxyPtDep.value[0], config.paramsDCAxyPtDep.value[1], config.paramsDCAxyPtDep.value[2]) > std::abs(dcaXY) || dcaSigma(track.pt(), config.paramsDCAzPtDep.value[0], config.paramsDCAzPtDep.value[1], config.paramsDCAzPtDep.value[2]) > std::abs(dcaZ)) {
269+
return false;
270+
}
236271
return isSelectedPid(track);
237272
}
238273

@@ -276,6 +311,7 @@ struct HfDataCreatorHiddenCharmReduced {
276311
registry.fill(HIST("hEtaCutsProton"), trk.eta());
277312
registry.fill(HIST("hDCAToPrimXYVsPtCutsProton"), trk.pt(), trk.dcaXY());
278313
registry.fill(HIST("hNSigmaTPCProton"), trk.pt(), trk.tpcNSigmaPr());
314+
registry.fill(HIST("hDeDxTPCProton"), trk.pt(), trk.tpcSignal());
279315
if (trk.hasTOF()) {
280316
registry.fill(HIST("hNSigmaTOFProton"), trk.pt(), trk.tofNSigmaPr());
281317
}

0 commit comments

Comments
 (0)