Skip to content

Commit b2a3bf9

Browse files
committed
Unify PID method configuration in selectors
1 parent 9856292 commit b2a3bf9

File tree

6 files changed

+57
-41
lines changed

6 files changed

+57
-41
lines changed

PWGHF/D2H/TableProducer/candidateSelectorB0ToDPiReduced.cxx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@
2929
#include "PWGHF/DataModel/CandidateReconstructionTables.h"
3030
#include "PWGHF/DataModel/CandidateSelectionTables.h"
3131
#include "PWGHF/D2H/DataModel/ReducedDataModel.h"
32+
#include "PWGHF/Utils/utilsPid.h"
3233

3334
using namespace o2;
3435
using namespace o2::aod;
3536
using namespace o2::framework;
3637
using namespace o2::analysis;
38+
using namespace o2::aod::pid_tpc_tof_utils;
3739

3840
struct HfCandidateSelectorB0ToDPiReduced {
3941
Produces<aod::HfSelB0ToDPi> hfSelB0ToDPiCandidate; // table defined in CandidateSelectionTables.h
@@ -42,7 +44,7 @@ struct HfCandidateSelectorB0ToDPiReduced {
4244
Configurable<float> ptCandMin{"ptCandMin", 0., "Lower bound of candidate pT"};
4345
Configurable<float> ptCandMax{"ptCandMax", 50., "Upper bound of candidate pT"};
4446
// Enable PID
45-
Configurable<int> pionPidMethod{"pionPidMethod", 1, "PID selection method for the bachelor pion (0: none, 1: TPC or TOF, 2: TPC and TOF)"};
47+
Configurable<int> pidMethod{"pidMethod", PidMethod::TpcOrTof, "PID selection method for the bachelor pion (PidMethod::NoPid: none, PidMethod::TpcOrTof: TPC or TOF, PidMethod::TpcAndTof: TPC and TOF)"};
4648
Configurable<bool> acceptPIDNotApplicable{"acceptPIDNotApplicable", true, "Switch to accept Status::NotApplicable [(NotApplicable for one detector) and (NotApplicable or Conditional for the other)] in PID selection"};
4749
// TPC PID
4850
Configurable<float> ptPidTpcMin{"ptPidTpcMin", 0.15, "Lower bound of track pT for TPC PID"};
@@ -97,11 +99,11 @@ struct HfCandidateSelectorB0ToDPiReduced {
9799
LOGP(fatal, "Only one process function for data should be enabled at a time.");
98100
}
99101

100-
if (pionPidMethod < 0 || pionPidMethod > 2) {
102+
if (pidMethod < 0 || pidMethod >= PidMethod::NPidMethods) {
101103
LOGP(fatal, "Invalid PID option in configurable, please set 0 (no PID), 1 (TPC or TOF), or 2 (TPC and TOF)");
102104
}
103105

104-
if (pionPidMethod) {
106+
if (pidMethod != PidMethod::NoPid) {
105107
selectorPion.setRangePtTpc(ptPidTpcMin, ptPidTpcMax);
106108
selectorPion.setRangeNSigmaTpc(-nSigmaTpcMax, nSigmaTpcMax);
107109
selectorPion.setRangeNSigmaTpcCondTof(-nSigmaTpcCombinedMax, nSigmaTpcCombinedMax);
@@ -190,11 +192,11 @@ struct HfCandidateSelectorB0ToDPiReduced {
190192

191193
// track-level PID selection
192194
auto trackPi = hfCandB0.template prong1_as<TracksPion>();
193-
if (pionPidMethod) {
195+
if (pidMethod == PidMethod::TpcOrTof || pidMethod == PidMethod::TpcAndTof) {
194196
int pidTrackPi{TrackSelectorPID::Status::NotApplicable};
195-
if (pionPidMethod == 1) {
197+
if (pidMethod == PidMethod::TpcOrTof) {
196198
pidTrackPi = selectorPion.statusTpcOrTof(trackPi);
197-
} else {
199+
} else if (pidMethod == PidMethod::TpcAndTof) {
198200
pidTrackPi = selectorPion.statusTpcAndTof(trackPi);
199201
}
200202
if (!hfHelper.selectionB0ToDPiPid(pidTrackPi, acceptPIDNotApplicable.value)) {
@@ -221,7 +223,7 @@ struct HfCandidateSelectorB0ToDPiReduced {
221223
hfSelB0ToDPiCandidate(statusB0ToDPi);
222224
continue;
223225
}
224-
SETBIT(statusB0ToDPi, SelectionStep::RecoMl); // RecoML = 3 --> statusB0ToDPi = 15 if pionPidMethod, 11 otherwise
226+
SETBIT(statusB0ToDPi, SelectionStep::RecoMl); // RecoML = 3 --> statusB0ToDPi = 15 if pidMethod, 11 otherwise
225227
if (activateQA) {
226228
registry.fill(HIST("hSelections"), 2 + SelectionStep::RecoMl, ptCandB0);
227229
}

PWGHF/D2H/TableProducer/candidateSelectorBplusToD0PiReduced.cxx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@
2828
#include "PWGHF/DataModel/CandidateReconstructionTables.h"
2929
#include "PWGHF/DataModel/CandidateSelectionTables.h"
3030
#include "PWGHF/D2H/DataModel/ReducedDataModel.h"
31+
#include "PWGHF/Utils/utilsPid.h"
3132

3233
using namespace o2;
3334
using namespace o2::aod;
3435
using namespace o2::framework;
3536
using namespace o2::analysis;
37+
using namespace o2::aod::pid_tpc_tof_utils;
3638

3739
struct HfCandidateSelectorBplusToD0PiReduced {
3840
Produces<aod::HfSelBplusToD0Pi> hfSelBplusToD0PiCandidate; // table defined in CandidateSelectionTables.h
@@ -41,7 +43,7 @@ struct HfCandidateSelectorBplusToD0PiReduced {
4143
Configurable<double> ptCandMin{"ptCandMin", 0., "Lower bound of candidate pT"};
4244
Configurable<double> ptCandMax{"ptCandMax", 50., "Upper bound of candidate pT"};
4345
// Enable PID
44-
Configurable<int> pionPidMethod{"pionPidMethod", 1, "PID selection method for the bachelor pion (0: none, 1: TPC or TOF, 2: TPC and TOF)"};
46+
Configurable<int> pidMethod{"pidMethod", PidMethod::TpcOrTof, "PID selection method for the bachelor pion (PidMethod::NoPid: none, PidMethod::TpcOrTof: TPC or TOF, PidMethod::TpcAndTof: TPC and TOF)"};
4547
Configurable<bool> acceptPIDNotApplicable{"acceptPIDNotApplicable", true, "Switch to accept Status::NotApplicable [(NotApplicable for one detector) and (NotApplicable or Conditional for the other)] in PID selection"};
4648
// TPC PID
4749
Configurable<double> ptPidTpcMin{"ptPidTpcMin", 0.15, "Lower bound of track pT for TPC PID"};
@@ -97,11 +99,11 @@ struct HfCandidateSelectorBplusToD0PiReduced {
9799
LOGP(fatal, "Only one process function for data should be enabled at a time.");
98100
}
99101

100-
if (pionPidMethod < 0 || pionPidMethod > 2) {
102+
if (pidMethod < 0 || pidMethod >= PidMethod::NPidMethods) {
101103
LOGP(fatal, "Invalid PID option in configurable, please set 0 (no PID), 1 (TPC or TOF), or 2 (TPC and TOF)");
102104
}
103105

104-
if (pionPidMethod) {
106+
if (pidMethod != PidMethod::NoPid) {
105107
selectorPion.setRangePtTpc(ptPidTpcMin, ptPidTpcMax);
106108
selectorPion.setRangeNSigmaTpc(-nSigmaTpcMax, nSigmaTpcMax);
107109
selectorPion.setRangeNSigmaTpcCondTof(-nSigmaTpcCombinedMax, nSigmaTpcCombinedMax);
@@ -191,11 +193,11 @@ struct HfCandidateSelectorBplusToD0PiReduced {
191193

192194
// track-level PID selection
193195
auto trackPi = hfCandBp.template prong1_as<TracksPion>();
194-
if (pionPidMethod) {
196+
if (pidMethod == PidMethod::TpcOrTof || pidMethod == PidMethod::TpcAndTof) {
195197
int pidTrackPi{TrackSelectorPID::Status::NotApplicable};
196-
if (pionPidMethod == 1) {
198+
if (pidMethod == PidMethod::TpcOrTof) {
197199
pidTrackPi = selectorPion.statusTpcOrTof(trackPi);
198-
} else {
200+
} else if (pidMethod == PidMethod::TpcAndTof) {
199201
pidTrackPi = selectorPion.statusTpcAndTof(trackPi);
200202
}
201203
if (!hfHelper.selectionBplusToD0PiPid(pidTrackPi, acceptPIDNotApplicable.value)) {
@@ -221,7 +223,7 @@ struct HfCandidateSelectorBplusToD0PiReduced {
221223
hfSelBplusToD0PiCandidate(statusBplus);
222224
continue;
223225
}
224-
SETBIT(statusBplus, SelectionStep::RecoMl); // RecoML = 3 --> statusBplus = 15 if pionPidMethod, 11 otherwise
226+
SETBIT(statusBplus, SelectionStep::RecoMl); // RecoML = 3 --> statusBplus = 15 if pidMethod, 11 otherwise
225227
if (activateQA) {
226228
registry.fill(HIST("hSelections"), 2 + SelectionStep::RecoMl, ptCandBplus);
227229
}

PWGHF/D2H/TableProducer/candidateSelectorBsToDsPiReduced.cxx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@
2828
#include "PWGHF/DataModel/CandidateReconstructionTables.h"
2929
#include "PWGHF/DataModel/CandidateSelectionTables.h"
3030
#include "PWGHF/D2H/DataModel/ReducedDataModel.h"
31+
#include "PWGHF/Utils/utilsPid.h"
3132

3233
using namespace o2;
3334
using namespace o2::aod;
3435
using namespace o2::framework;
3536
using namespace o2::analysis;
37+
using namespace o2::aod::pid_tpc_tof_utils;
3638

3739
struct HfCandidateSelectorBsToDsPiReduced {
3840
Produces<aod::HfSelBsToDsPi> hfSelBsToDsPiCandidate; // table defined in CandidateSelectionTables.h
@@ -41,7 +43,7 @@ struct HfCandidateSelectorBsToDsPiReduced {
4143
Configurable<float> ptCandMin{"ptCandMin", 0., "Lower bound of candidate pT"};
4244
Configurable<float> ptCandMax{"ptCandMax", 50., "Upper bound of candidate pT"};
4345
// Enable PID
44-
Configurable<int> pionPidMethod{"pionPidMethod", 1, "PID selection method for the bachelor pion (0: none, 1: TPC or TOF, 2: TPC and TOF)"};
46+
Configurable<int> pidMethod{"pidMethod", PidMethod::TpcOrTof, "PID selection method for the bachelor pion (PidMethod::NoPid: none, PidMethod::TpcOrTof: TPC or TOF, PidMethod::TpcAndTof: TPC and TOF)"};
4547
Configurable<bool> acceptPIDNotApplicable{"acceptPIDNotApplicable", true, "Switch to accept Status::NotApplicable [(NotApplicable for one detector) and (NotApplicable or Conditional for the other)] in PID selection"};
4648
// TPC PID
4749
Configurable<float> ptPidTpcMin{"ptPidTpcMin", 0.15, "Lower bound of track pT for TPC PID"};
@@ -93,11 +95,11 @@ struct HfCandidateSelectorBsToDsPiReduced {
9395
LOGP(fatal, "Only one process function for data should be enabled at a time.");
9496
}
9597

96-
if (pionPidMethod < 0 || pionPidMethod > 2) {
98+
if (pidMethod < 0 || pidMethod >= PidMethod::NPidMethods) {
9799
LOGP(fatal, "Invalid PID option in configurable, please set 0 (no PID), 1 (TPC or TOF), or 2 (TPC and TOF)");
98100
}
99101

100-
if (pionPidMethod) {
102+
if (pidMethod != PidMethod::NoPid) {
101103
selectorPion.setRangePtTpc(ptPidTpcMin, ptPidTpcMax);
102104
selectorPion.setRangeNSigmaTpc(-nSigmaTpcMax, nSigmaTpcMax);
103105
selectorPion.setRangeNSigmaTpcCondTof(-nSigmaTpcCombinedMax, nSigmaTpcCombinedMax);
@@ -180,11 +182,11 @@ struct HfCandidateSelectorBsToDsPiReduced {
180182

181183
// track-level PID selection
182184
auto trackPi = hfCandBs.template prong1_as<TracksPion>();
183-
if (pionPidMethod) {
185+
if (pidMethod == PidMethod::TpcOrTof || pidMethod == PidMethod::TpcAndTof) {
184186
int pidTrackPi{TrackSelectorPID::Status::NotApplicable};
185-
if (pionPidMethod == 1) {
187+
if (pidMethod == PidMethod::TpcOrTof) {
186188
pidTrackPi = selectorPion.statusTpcOrTof(trackPi);
187-
} else {
189+
} else if (pidMethod == PidMethod::TpcAndTof) {
188190
pidTrackPi = selectorPion.statusTpcAndTof(trackPi);
189191
}
190192
if (!hfHelper.selectionBsToDsPiPid(pidTrackPi, acceptPIDNotApplicable.value)) {
@@ -210,7 +212,7 @@ struct HfCandidateSelectorBsToDsPiReduced {
210212
hfSelBsToDsPiCandidate(statusBsToDsPi);
211213
continue;
212214
}
213-
SETBIT(statusBsToDsPi, SelectionStep::RecoMl); // RecoML = 3 --> statusBsToDsPi = 15 if pionPidMethod, 11 otherwise
215+
SETBIT(statusBsToDsPi, SelectionStep::RecoMl); // RecoML = 3 --> statusBsToDsPi = 15 if pidMethod, 11 otherwise
214216
if (activateQA) {
215217
registry.fill(HIST("hSelections"), 2 + SelectionStep::RecoMl, ptCandBs);
216218
}

PWGHF/D2H/TableProducer/candidateSelectorLbToLcPiReduced.cxx

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,13 @@
2828
#include "PWGHF/DataModel/CandidateReconstructionTables.h"
2929
#include "PWGHF/DataModel/CandidateSelectionTables.h"
3030
#include "PWGHF/D2H/DataModel/ReducedDataModel.h"
31+
#include "PWGHF/Utils/utilsPid.h"
3132

3233
using namespace o2;
3334
using namespace o2::aod;
3435
using namespace o2::framework;
3536
using namespace o2::analysis;
36-
37-
enum PidMethod {
38-
NoPid = 0, // none
39-
TpcOrTof, // TPC or TOF
40-
TpcAndTof // TPC and TOF
41-
};
37+
using namespace o2::aod::pid_tpc_tof_utils;
4238

4339
struct HfCandidateSelectorLbToLcPiReduced {
4440
Produces<aod::HfSelLbToLcPi> hfSelLbToLcPiCandidate; // table defined in CandidateSelectionTables.h
@@ -47,7 +43,7 @@ struct HfCandidateSelectorLbToLcPiReduced {
4743
Configurable<float> ptCandMin{"ptCandMin", 0., "Lower bound of candidate pT"};
4844
Configurable<float> ptCandMax{"ptCandMax", 50., "Upper bound of candidate pT"};
4945
// Enable PID
50-
Configurable<int> pidMethod{"pidMethod", 1, "PID selection method for the bachelor pion (PidMethod::NoPid: none, PidMethod::TpcOrTof: TPC or TOF, PidMethod::TpcAndTof: TPC and TOF)"};
46+
Configurable<int> pidMethod{"pidMethod", PidMethod::TpcOrTof, "PID selection method for the bachelor pion (PidMethod::NoPid: none, PidMethod::TpcOrTof: TPC or TOF, PidMethod::TpcAndTof: TPC and TOF)"};
5147
Configurable<bool> acceptPIDNotApplicable{"acceptPIDNotApplicable", true, "Switch to accept Status::NotApplicable [(NotApplicable for one detector) and (NotApplicable or Conditional for the other)] in PID selection"};
5248
// TPC PID
5349
Configurable<float> ptPidTpcMin{"ptPidTpcMin", 0.15, "Lower bound of track pT for TPC PID"};
@@ -100,11 +96,11 @@ struct HfCandidateSelectorLbToLcPiReduced {
10096
LOGP(fatal, "Only one process function for data should be enabled at a time.");
10197
}
10298

103-
if (pidMethod < PidMethod::NoPid || pidMethod > PidMethod::TpcAndTof) {
99+
if (pidMethod < 0 || pidMethod >= PidMethod::NPidMethods) {
104100
LOGP(fatal, "Invalid PID option in configurable, please set 0 (no PID), 1 (TPC or TOF), or 2 (TPC and TOF)");
105101
}
106102

107-
if (pidMethod == PidMethod::TpcOrTof || pidMethod == PidMethod::TpcAndTof) {
103+
if (pidMethod != PidMethod::NoPid) {
108104
selectorPion.setRangePtTpc(ptPidTpcMin, ptPidTpcMax);
109105
selectorPion.setRangeNSigmaTpc(-nSigmaTpcMax, nSigmaTpcMax);
110106
selectorPion.setRangeNSigmaTpcCondTof(-nSigmaTpcCombinedMax, nSigmaTpcCombinedMax);
@@ -191,7 +187,7 @@ struct HfCandidateSelectorLbToLcPiReduced {
191187
int pidTrackPi{TrackSelectorPID::Status::NotApplicable};
192188
if (pidMethod == PidMethod::TpcOrTof) {
193189
pidTrackPi = selectorPion.statusTpcOrTof(trackPi);
194-
} else {
190+
} else if (pidMethod == PidMethod::TpcAndTof) {
195191
pidTrackPi = selectorPion.statusTpcAndTof(trackPi);
196192
}
197193
if (!hfHelper.selectionLbToLcPiPid(pidTrackPi, acceptPIDNotApplicable.value)) {

PWGHF/TableProducer/candidateSelectorBplusToD0Pi.cxx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,13 @@
3131
#include "PWGHF/Core/SelectorCuts.h"
3232
#include "PWGHF/DataModel/CandidateReconstructionTables.h"
3333
#include "PWGHF/DataModel/CandidateSelectionTables.h"
34+
#include "PWGHF/Utils/utilsPid.h"
3435

3536
using namespace o2;
3637
using namespace o2::aod;
3738
using namespace o2::framework;
3839
using namespace o2::analysis;
40+
using namespace o2::aod::pid_tpc_tof_utils;
3941

4042
struct HfCandidateSelectorBplusToD0Pi {
4143
Produces<aod::HfSelBplusToD0Pi> hfSelBplusToD0PiCandidate; // table defined in CandidateSelectionTables.h
@@ -44,7 +46,7 @@ struct HfCandidateSelectorBplusToD0Pi {
4446
Configurable<double> ptCandMin{"ptCandMin", 0., "Lower bound of candidate pT"};
4547
Configurable<double> ptCandMax{"ptCandMax", 50., "Upper bound of candidate pT"};
4648
// Enable PID
47-
Configurable<int> pionPidMethod{"pionPidMethod", 1, "PID selection method for the bachelor pion (0: none, 1: TPC or TOF, 2: TPC and TOF)"};
49+
Configurable<int> pidMethod{"pidMethod", PidMethod::TpcOrTof, "PID selection method for the bachelor pion (PidMethod::NoPid: none, PidMethod::TpcOrTof: TPC or TOF, PidMethod::TpcAndTof: TPC and TOF)"};
4850
Configurable<bool> acceptPIDNotApplicable{"acceptPIDNotApplicable", true, "Switch to accept Status::NotApplicable [(NotApplicable for one detector) and (NotApplicable or Conditional for the other)] in PID selection"};
4951
// TPC PID
5052
Configurable<double> ptPidTpcMin{"ptPidTpcMin", 0.15, "Lower bound of track pT for TPC PID"};
@@ -97,11 +99,11 @@ struct HfCandidateSelectorBplusToD0Pi {
9799
LOGP(fatal, "Only one process function for data should be enabled at a time.");
98100
}
99101

100-
if (pionPidMethod < 0 || pionPidMethod > 2) {
102+
if (pidMethod < 0 || pidMethod >= PidMethod::NPidMethods) {
101103
LOGP(fatal, "Invalid PID option in configurable, please set 0 (no PID), 1 (TPC or TOF), or 2 (TPC and TOF)");
102104
}
103105

104-
if (pionPidMethod != 0) {
106+
if (pidMethod != PidMethod::NoPid) {
105107
selectorPion.setRangePtTpc(ptPidTpcMin, ptPidTpcMax);
106108
selectorPion.setRangeNSigmaTpc(-nSigmaTpcMax, nSigmaTpcMax);
107109
selectorPion.setRangeNSigmaTpcCondTof(-nSigmaTpcCombinedMax, nSigmaTpcCombinedMax);
@@ -194,11 +196,11 @@ struct HfCandidateSelectorBplusToD0Pi {
194196
}
195197

196198
// track-level PID selection
197-
if (pionPidMethod) {
199+
if (pidMethod == PidMethod::TpcOrTof || pidMethod == PidMethod::TpcAndTof) {
198200
int pidTrackPi{TrackSelectorPID::Status::NotApplicable};
199-
if (pionPidMethod == 1) {
201+
if (pidMethod == PidMethod::TpcOrTof) {
200202
pidTrackPi = selectorPion.statusTpcOrTof(trackPi);
201-
} else {
203+
} else if (pidMethod == PidMethod::TpcAndTof) {
202204
pidTrackPi = selectorPion.statusTpcAndTof(trackPi);
203205
}
204206
if (!hfHelper.selectionBplusToD0PiPid(pidTrackPi, acceptPIDNotApplicable.value)) {
@@ -228,7 +230,7 @@ struct HfCandidateSelectorBplusToD0Pi {
228230
hfSelBplusToD0PiCandidate(statusBplus);
229231
continue;
230232
}
231-
SETBIT(statusBplus, SelectionStep::RecoMl); // RecoML = 3 --> statusBplus = 15 if pionPidMethod, 11 otherwise
233+
SETBIT(statusBplus, SelectionStep::RecoMl); // RecoML = 3 --> statusBplus = 15 if pidMethod, 11 otherwise
232234
if (activateQA) {
233235
registry.fill(HIST("hSelections"), 2 + SelectionStep::RecoMl, ptCandBplus);
234236
}

PWGHF/Utils/utilsPid.h

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,21 @@
1919

2020
namespace o2::aod::pid_tpc_tof_utils
2121
{
22-
enum HfProngSpecies : uint8_t { Pion = 0,
23-
Kaon,
24-
Proton };
22+
/// @brief Species of HF-candidate daughter tracks
23+
enum HfProngSpecies : uint8_t {
24+
Pion = 0,
25+
Kaon,
26+
Proton,
27+
NHfProngSpecies
28+
};
29+
30+
/// @brief PID methods used for HF-candidate daughter tracks
31+
enum PidMethod {
32+
NoPid = 0, // none
33+
TpcOrTof, // TPC or TOF
34+
TpcAndTof, // TPC and TOF
35+
NPidMethods
36+
};
2537

2638
/// Function to combine TPC and TOF NSigma
2739
/// \param tiny switch between full and tiny (binned) PID tables

0 commit comments

Comments
 (0)