Skip to content

Commit 8a121ad

Browse files
committed
Fix
1 parent 8f4a8bf commit 8a121ad

File tree

2 files changed

+144
-62
lines changed

2 files changed

+144
-62
lines changed

Common/DataModel/PIDResponseTOF.h

Lines changed: 126 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -57,33 +57,38 @@ template <class T>
5757
using hasTOFAl = decltype(std::declval<T&>().tofNSigmaAl());
5858

5959
// PID index as template argument
60-
#define perSpeciesWrapper(functionName) \
61-
template <o2::track::PID::ID index, typename TrackType> \
62-
auto functionName(const TrackType& track) \
63-
{ \
64-
if constexpr (index == o2::track::PID::Electron) { \
65-
return track.functionName##El(); \
66-
} else if constexpr (index == o2::track::PID::Muon) { \
67-
return track.functionName##Mu(); \
68-
} else if constexpr (index == o2::track::PID::Pion) { \
69-
return track.functionName##Pi(); \
70-
} else if constexpr (index == o2::track::PID::Kaon) { \
71-
return track.functionName##Ka(); \
72-
} else if constexpr (index == o2::track::PID::Proton) { \
73-
return track.functionName##Pr(); \
74-
} else if constexpr (index == o2::track::PID::Deuteron) { \
75-
return track.functionName##De(); \
76-
} else if constexpr (index == o2::track::PID::Triton) { \
77-
return track.functionName##Tr(); \
78-
} else if constexpr (index == o2::track::PID::Helium3) { \
79-
return track.functionName##He(); \
80-
} else if constexpr (index == o2::track::PID::Alpha) { \
81-
return track.functionName##Al(); \
82-
} \
60+
#define perSpeciesWrapper(functionName) \
61+
template <o2::track::PID::ID index, typename TrackType> \
62+
auto functionName(const TrackType& track) \
63+
{ \
64+
if constexpr (index == o2::track::PID::Electron) { \
65+
return track.functionName##El(); \
66+
} else if constexpr (index == o2::track::PID::Muon) { \
67+
return track.functionName##Mu(); \
68+
} else if constexpr (index == o2::track::PID::Pion) { \
69+
return track.functionName##Pi(); \
70+
} else if constexpr (index == o2::track::PID::Kaon) { \
71+
return track.functionName##Ka(); \
72+
} else if constexpr (index == o2::track::PID::Proton) { \
73+
return track.functionName##Pr(); \
74+
} else if constexpr (index == o2::track::PID::Deuteron) { \
75+
return track.functionName##De(); \
76+
} else if constexpr (index == o2::track::PID::Triton) { \
77+
return track.functionName##Tr(); \
78+
} else if constexpr (index == o2::track::PID::Helium3) { \
79+
return track.functionName##He(); \
80+
} else if constexpr (index == o2::track::PID::Alpha) { \
81+
return track.functionName##Al(); \
82+
} \
83+
LOGF(fatal, "%s %i (%s) is not available", #functionName, index, o2::track::PID::getName(index)); \
84+
return 0.f; \
8385
}
8486

8587
perSpeciesWrapper(tofNSigma);
8688
perSpeciesWrapper(tofExpSigma);
89+
perSpeciesWrapper(tofExpSignalDiff);
90+
#undef perSpeciesWrapper
91+
8792
template <o2::track::PID::ID index, typename TrackType>
8893
auto tofExpSignal(const TrackType& track)
8994
{
@@ -106,10 +111,35 @@ auto tofExpSignal(const TrackType& track)
106111
} else if constexpr (index == o2::track::PID::Alpha) {
107112
return track.tofExpSignalAl(track.tofSignal());
108113
}
114+
LOGF(fatal, "tofExpSignal %i (%s) is not available", index, o2::track::PID::getName(index));
115+
return 0.f;
109116
}
110-
perSpeciesWrapper(tofExpSignalDiff);
111117

112-
#undef perSpeciesWrapper
118+
template <o2::track::PID::ID index, typename TrackType>
119+
auto tofExpTime(const TrackType& track)
120+
{
121+
if constexpr (index == o2::track::PID::Electron) {
122+
return track.tofExpTimeEl();
123+
} else if constexpr (index == o2::track::PID::Muon) {
124+
return track.tofExpTimeMu();
125+
} else if constexpr (index == o2::track::PID::Pion) {
126+
return track.tofExpTimePi();
127+
} else if constexpr (index == o2::track::PID::Kaon) {
128+
return track.tofExpTimeKa();
129+
} else if constexpr (index == o2::track::PID::Proton) {
130+
return track.tofExpTimePr();
131+
} else if constexpr (index == o2::track::PID::Deuteron) {
132+
return track.tofExpTimeDe();
133+
} else if constexpr (index == o2::track::PID::Triton) {
134+
return track.tofExpTimeTr();
135+
} else if constexpr (index == o2::track::PID::Helium3) {
136+
return track.tofExpTimeHe();
137+
} else if constexpr (index == o2::track::PID::Alpha) {
138+
return track.tofExpTimeAl();
139+
}
140+
LOGF(fatal, "tofExpTime %i (%s) is not available", index, o2::track::PID::getName(index));
141+
return 0.f;
142+
}
113143

114144
// PID index as function argument for TOF
115145
#define perSpeciesWrapper(functionName) \
@@ -161,6 +191,9 @@ perSpeciesWrapper(tofExpSignalDiff);
161191

162192
perSpeciesWrapper(tofNSigma);
163193
perSpeciesWrapper(tofExpSigma);
194+
perSpeciesWrapper(tofExpSignalDiff);
195+
#undef perSpeciesWrapper
196+
164197
template <typename TrackType>
165198
auto tofExpSignal(const o2::track::PID::ID index, const TrackType& track)
166199
{
@@ -206,9 +239,6 @@ auto tofExpSignal(const o2::track::PID::ID index, const TrackType& track)
206239
return 0.f;
207240
}
208241
}
209-
perSpeciesWrapper(tofExpSignalDiff);
210-
211-
#undef perSpeciesWrapper
212242

213243
} // namespace pidutils
214244

@@ -364,6 +394,38 @@ PERSPECIES_TOF_SIGMA_COLUMN(He, o2::track::PID::Helium3);
364394
PERSPECIES_TOF_SIGMA_COLUMN(Al, o2::track::PID::Alpha);
365395
#undef PERSPECIES_TOF_SIGMA_COLUMN
366396

397+
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSigmaImp, tofExpSigmaDyn,
398+
[](float tofExpMom,
399+
float momentum,
400+
float eta,
401+
float tofSignal,
402+
float tofEvTimeErr,
403+
o2::track::PID::ID particleId) -> float {
404+
switch (particleId) {
405+
case o2::track::PID::Electron: // El
406+
return o2::pid::tof::TOFResponseImpl::expectedSigma<o2::track::PID::Electron>(tofSignal, tofExpMom, momentum, eta, tofEvTimeErr);
407+
case o2::track::PID::Muon: // Mu
408+
return o2::pid::tof::TOFResponseImpl::expectedSigma<o2::track::PID::Muon>(tofSignal, tofExpMom, momentum, eta, tofEvTimeErr);
409+
case o2::track::PID::Pion: // Pi
410+
return o2::pid::tof::TOFResponseImpl::expectedSigma<o2::track::PID::Pion>(tofSignal, tofExpMom, momentum, eta, tofEvTimeErr);
411+
case o2::track::PID::Kaon: // Ka
412+
return o2::pid::tof::TOFResponseImpl::expectedSigma<o2::track::PID::Kaon>(tofSignal, tofExpMom, momentum, eta, tofEvTimeErr);
413+
case o2::track::PID::Proton: // Pr
414+
return o2::pid::tof::TOFResponseImpl::expectedSigma<o2::track::PID::Proton>(tofSignal, tofExpMom, momentum, eta, tofEvTimeErr);
415+
case o2::track::PID::Deuteron: // De
416+
return o2::pid::tof::TOFResponseImpl::expectedSigma<o2::track::PID::Deuteron>(tofSignal, tofExpMom, momentum, eta, tofEvTimeErr);
417+
case o2::track::PID::Triton: // Tr
418+
return o2::pid::tof::TOFResponseImpl::expectedSigma<o2::track::PID::Triton>(tofSignal, tofExpMom, momentum, eta, tofEvTimeErr);
419+
case o2::track::PID::Helium3: // He3
420+
return o2::pid::tof::TOFResponseImpl::expectedSigma<o2::track::PID::Helium3>(tofSignal, tofExpMom, momentum, eta, tofEvTimeErr);
421+
case o2::track::PID::Alpha: // Al
422+
return o2::pid::tof::TOFResponseImpl::expectedSigma<o2::track::PID::Alpha>(tofSignal, tofExpMom, momentum, eta, tofEvTimeErr);
423+
default:
424+
LOGF(fatal, "TOFExpSigmaImp for PID index %i (%s) is not available", particleId, o2::track::PID::getName(particleId));
425+
return 0.f;
426+
}
427+
});
428+
367429
#define PERSPECIES_TOF_SEPARATION_COLUMN(name, id) \
368430
DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigma##name##Imp, tofNSigmaDyn##name, \
369431
[](const float tofExpMom, \
@@ -393,8 +455,43 @@ PERSPECIES_TOF_SEPARATION_COLUMN(He, o2::track::PID::Helium3);
393455
PERSPECIES_TOF_SEPARATION_COLUMN(Al, o2::track::PID::Alpha);
394456
#undef PERSPECIES_TOF_SEPARATION_COLUMN
395457

458+
DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigmaImp, tofNSigmaDyn,
459+
[](float tofExpMom,
460+
const float length,
461+
float momentum,
462+
float eta,
463+
float tofSignal,
464+
float tofEvTime,
465+
float tofEvTimeErr,
466+
o2::track::PID::ID particleId) -> float {
467+
switch (particleId) {
468+
case o2::track::PID::Electron: // El
469+
return o2::pid::tof::TOFResponseImpl::nSigma<o2::track::PID::Electron>(tofSignal, tofExpMom, length, momentum, eta, tofEvTime, tofEvTimeErr);
470+
case o2::track::PID::Muon: // Mu
471+
return o2::pid::tof::TOFResponseImpl::nSigma<o2::track::PID::Muon>(tofSignal, tofExpMom, length, momentum, eta, tofEvTime, tofEvTimeErr);
472+
case o2::track::PID::Pion: // Pi
473+
return o2::pid::tof::TOFResponseImpl::nSigma<o2::track::PID::Pion>(tofSignal, tofExpMom, length, momentum, eta, tofEvTime, tofEvTimeErr);
474+
case o2::track::PID::Kaon: // Ka
475+
return o2::pid::tof::TOFResponseImpl::nSigma<o2::track::PID::Kaon>(tofSignal, tofExpMom, length, momentum, eta, tofEvTime, tofEvTimeErr);
476+
case o2::track::PID::Proton: // Pr
477+
return o2::pid::tof::TOFResponseImpl::nSigma<o2::track::PID::Proton>(tofSignal, tofExpMom, length, momentum, eta, tofEvTime, tofEvTimeErr);
478+
case o2::track::PID::Deuteron: // De
479+
return o2::pid::tof::TOFResponseImpl::nSigma<o2::track::PID::Deuteron>(tofSignal, tofExpMom, length, momentum, eta, tofEvTime, tofEvTimeErr);
480+
case o2::track::PID::Triton: // Tr
481+
return o2::pid::tof::TOFResponseImpl::nSigma<o2::track::PID::Triton>(tofSignal, tofExpMom, length, momentum, eta, tofEvTime, tofEvTimeErr);
482+
case o2::track::PID::Helium3: // He3
483+
return o2::pid::tof::TOFResponseImpl::nSigma<o2::track::PID::Helium3>(tofSignal, tofExpMom, length, momentum, eta, tofEvTime, tofEvTimeErr);
484+
case o2::track::PID::Alpha: // Al
485+
return o2::pid::tof::TOFResponseImpl::nSigma<o2::track::PID::Alpha>(tofSignal, tofExpMom, length, momentum, eta, tofEvTime, tofEvTimeErr);
486+
default:
487+
LOGF(fatal, "TOFNSigmaImp for PID index %i (%s) is not available", particleId, o2::track::PID::getName(particleId));
488+
return 0.f;
489+
}
490+
});
491+
396492
} // namespace pidtof
397493

494+
using TOFExpSigmaDyn = pidtof::TOFExpSigmaImp<track::TOFExpMom, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTimeErr>;
398495
using TOFExpSigmaDynEl = pidtof::TOFExpSigmaElImp<track::TOFExpMom, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTimeErr>;
399496
using TOFExpSigmaDynMu = pidtof::TOFExpSigmaMuImp<track::TOFExpMom, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTimeErr>;
400497
using TOFExpSigmaDynPi = pidtof::TOFExpSigmaPiImp<track::TOFExpMom, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTimeErr>;
@@ -405,6 +502,7 @@ using TOFExpSigmaDynTr = pidtof::TOFExpSigmaTrImp<track::TOFExpMom, track::P, tr
405502
using TOFExpSigmaDynHe = pidtof::TOFExpSigmaHeImp<track::TOFExpMom, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTimeErr>;
406503
using TOFExpSigmaDynAl = pidtof::TOFExpSigmaAlImp<track::TOFExpMom, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTimeErr>;
407504

505+
using TOFNSigmaDyn = pidtof::TOFNSigmaImp<track::TOFExpMom, track::Length, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
408506
using TOFNSigmaDynEl = pidtof::TOFNSigmaElImp<track::TOFExpMom, track::Length, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
409507
using TOFNSigmaDynMu = pidtof::TOFNSigmaMuImp<track::TOFExpMom, track::Length, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
410508
using TOFNSigmaDynPi = pidtof::TOFNSigmaPiImp<track::TOFExpMom, track::Length, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;

0 commit comments

Comments
 (0)