Skip to content

Commit 4a17e60

Browse files
committed
Use statusTpcOrTof or statusTpc for PID selection
1 parent 9fc053f commit 4a17e60

File tree

1 file changed

+41
-24
lines changed

1 file changed

+41
-24
lines changed

PWGHF/TableProducer/candidateSelectorXicToXiPiPi.cxx

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ struct HfCandidateSelectorXicToXiPiPi {
4747
Configurable<bool> activateQA{"activateQA", false, "Flag to enable QA histogram"};
4848
// Enable PID
4949
Configurable<bool> usePid{"usePid", true, "Switch for PID selection at track level"};
50-
Configurable<bool> acceptPIDNotApplicable{"acceptPIDNotApplicable", true, "Switch to accept Status::NotApplicable [(NotApplicable for one detector) and (NotApplicable or Conditional for the other)] in PID selection"};
50+
Configurable<bool> useTpcPidOnly{"useTpcPidOnly", false, "Switch to use TPC PID only instead of TPC OR TOF)"};
5151
// TPC PID
5252
Configurable<float> ptPidTpcMin{"ptPidTpcMin", 0.15, "Lower bound of track pT for TPC PID"};
5353
Configurable<float> ptPidTpcMax{"ptPidTpcMax", 20., "Upper bound of track pT for TPC PID"};
@@ -194,24 +194,27 @@ struct HfCandidateSelectorXicToXiPiPi {
194194
}
195195

196196
/// Apply PID selection
197-
/// \param pidTrackPi0 PID status of trackPi0 (prong1 of Xic candidate)
198-
/// \param pidTrackPi1 PID status of trackPi1 (prong2 of Xic candidate)
199-
/// \param pidTrackPr PID status of trackPr (positive daughter of V0 candidate)
200-
/// \param pidTrackPiLam PID status of trackPiLam (negative daughter of V0 candidate)
201-
/// \param pidTrackPiXi PID status of trackPiXi (Bachelor of cascade candidate)
202-
/// \param acceptPIDNotApplicable switch to accept Status::NotApplicable
197+
/// \param statusPidPi0 PID status of trackPi0 (prong1 of Xic candidate)
198+
/// \param statusPidPi1 PID status of trackPi1 (prong2 of Xic candidate)
199+
/// \param statusPidPiXi PID status of trackPiXi (Bachelor of cascade candidate)
200+
/// \param statusPidPrLam PID status of trackPr (positive daughter of V0 candidate)
201+
/// \param statusPidPiLam PID status of trackPiLam (negative daughter of V0 candidate)
202+
/// \param usePidTpcOnly switch to check only TPC status
203203
/// \return true if prongs of Xic candidate pass all selections
204-
bool selectionPid(TrackSelectorPID::Status const pidTrackPi0,
205-
TrackSelectorPID::Status const pidTrackPi1,
206-
TrackSelectorPID::Status const pidTrackPr,
207-
TrackSelectorPID::Status const pidTrackPiLam,
208-
TrackSelectorPID::Status const pidTrackPiXi,
209-
bool const acceptPIDNotApplicable)
204+
bool selectionPid(TrackSelectorPID::Status const statusPidPi0,
205+
TrackSelectorPID::Status const statusPidPi1,
206+
TrackSelectorPID::Status const statusPidPiXi,
207+
TrackSelectorPID::Status const statusPidPrLam,
208+
TrackSelectorPID::Status const statusPidPiLam,
209+
bool const useTpcPidOnly)
210210
{
211-
if (!acceptPIDNotApplicable && (pidTrackPi0 != TrackSelectorPID::Accepted || pidTrackPi1 != TrackSelectorPID::Accepted || pidTrackPr != TrackSelectorPID::Accepted || pidTrackPiLam != TrackSelectorPID::Accepted || pidTrackPiXi != TrackSelectorPID::Accepted)) {
212-
return false;
211+
if (useTpcPidOnly) {
212+
if ((statusPidPi0 != TrackSelectorPID::Accepted && statusPidPi0 != TrackSelectorPID::NotApplicable) || (statusPidPi1 != TrackSelectorPID::Accepted && statusPidPi1 != TrackSelectorPID::NotApplicable) || (statusPidPiXi != TrackSelectorPID::Accepted && statusPidPiXi != TrackSelectorPID::NotApplicable) || (statusPidPrLam != TrackSelectorPID::Accepted && statusPidPrLam != TrackSelectorPID::NotApplicable) || (statusPidPiLam != TrackSelectorPID::Accepted && statusPidPiLam != TrackSelectorPID::NotApplicable)) {
213+
return false;
214+
}
215+
return true;
213216
}
214-
if (acceptPIDNotApplicable && (pidTrackPi0 == TrackSelectorPID::Rejected || pidTrackPi1 == TrackSelectorPID::Rejected || pidTrackPr == TrackSelectorPID::Rejected || pidTrackPiLam == TrackSelectorPID::Rejected || pidTrackPiXi == TrackSelectorPID::Rejected)) {
217+
if (statusPidPi0 == TrackSelectorPID::Rejected || statusPidPi1 == TrackSelectorPID::Rejected || statusPidPiXi == TrackSelectorPID::Rejected || statusPidPrLam == TrackSelectorPID::Rejected || statusPidPiLam == TrackSelectorPID::Rejected) {
215218
return false;
216219
}
217220
return true;
@@ -252,6 +255,12 @@ struct HfCandidateSelectorXicToXiPiPi {
252255

253256
// track-level PID selection
254257
if (usePid) {
258+
TrackSelectorPID::Status statusPidPi0 = TrackSelectorPID::NotApplicable;
259+
TrackSelectorPID::Status statusPidPi1 = TrackSelectorPID::NotApplicable;
260+
TrackSelectorPID::Status statusPidPiXi = TrackSelectorPID::NotApplicable;
261+
TrackSelectorPID::Status statusPidPrLam = TrackSelectorPID::NotApplicable;
262+
TrackSelectorPID::Status statusPidPiLam = TrackSelectorPID::NotApplicable;
263+
255264
auto trackPi0 = hfCandXic.pi0_as<TracksPidWithSel>();
256265
auto trackPi1 = hfCandXic.pi1_as<TracksPidWithSel>();
257266
auto trackV0PosDau = hfCandXic.posTrack_as<TracksPidWithSel>();
@@ -264,14 +273,22 @@ struct HfCandidateSelectorXicToXiPiPi {
264273
trackPr = trackV0NegDau;
265274
trackPiFromLam = trackV0PosDau;
266275
}
267-
// PID info
268-
TrackSelectorPID::Status pidTrackPi0 = selectorPion.statusTpcAndTof(trackPi0);
269-
TrackSelectorPID::Status pidTrackPi1 = selectorPion.statusTpcAndTof(trackPi1);
270-
TrackSelectorPID::Status pidTrackPr = selectorProton.statusTpcAndTof(trackPr);
271-
TrackSelectorPID::Status pidTrackPiLam = selectorPion.statusTpcAndTof(trackPiFromLam);
272-
TrackSelectorPID::Status pidTrackPiXi = selectorPion.statusTpcAndTof(trackPiFromXi);
273-
274-
if (!selectionPid(pidTrackPi0, pidTrackPi1, pidTrackPr, pidTrackPiLam, pidTrackPiXi, acceptPIDNotApplicable.value)) {
276+
277+
if (useTpcPidOnly) {
278+
TrackSelectorPID::Status statusPidPi0 = selectorPion.statusTpc(trackPi0);
279+
TrackSelectorPID::Status statusPidPi1 = selectorPion.statusTpc(trackPi1);
280+
TrackSelectorPID::Status statusPidPiXi = selectorPion.statusTpc(trackPiFromXi);
281+
TrackSelectorPID::Status statusPidPrLam = selectorProton.statusTpc(trackPr);
282+
TrackSelectorPID::Status statusPidPiLam = selectorPion.statusTpc(trackPiFromLam);
283+
} else {
284+
TrackSelectorPID::Status statusPidPi0 = selectorPion.statusTpcOrTof(trackPi0);
285+
TrackSelectorPID::Status statusPidPi1 = selectorPion.statusTpcOrTof(trackPi1);
286+
TrackSelectorPID::Status statusPidPiXi = selectorPion.statusTpcOrTof(trackPiFromXi);
287+
TrackSelectorPID::Status statusPidPrLam = selectorProton.statusTpcOrTof(trackPr);
288+
TrackSelectorPID::Status statusPidPiLam = selectorPion.statusTpcOrTof(trackPiFromLam);
289+
}
290+
291+
if (!selectionPid(statusPidPi0, statusPidPi1, statusPidPiXi, statusPidPrLam, statusPidPiLam, useTpcPidOnly.value)) {
275292
hfSelXicToXiPiPiCandidate(statusXicToXiPiPi);
276293
if (applyMl) {
277294
hfMlXicToXiPiPiCandidate(outputMlXicToXiPiPi);

0 commit comments

Comments
 (0)