@@ -57,33 +57,38 @@ template <class T>
5757using 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
8587perSpeciesWrapper (tofNSigma);
8688perSpeciesWrapper (tofExpSigma);
89+ perSpeciesWrapper (tofExpSignalDiff);
90+ #undef perSpeciesWrapper
91+
8792template <o2::track::PID::ID index, typename TrackType>
8893auto 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
162192perSpeciesWrapper (tofNSigma);
163193perSpeciesWrapper (tofExpSigma);
194+ perSpeciesWrapper (tofExpSignalDiff);
195+ #undef perSpeciesWrapper
196+
164197template <typename TrackType>
165198auto 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);
364394PERSPECIES_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);
393455PERSPECIES_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>;
398495using TOFExpSigmaDynEl = pidtof::TOFExpSigmaElImp<track::TOFExpMom, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTimeErr>;
399496using TOFExpSigmaDynMu = pidtof::TOFExpSigmaMuImp<track::TOFExpMom, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTimeErr>;
400497using 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
405502using TOFExpSigmaDynHe = pidtof::TOFExpSigmaHeImp<track::TOFExpMom, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTimeErr>;
406503using 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>;
408506using TOFNSigmaDynEl = pidtof::TOFNSigmaElImp<track::TOFExpMom, track::Length, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
409507using TOFNSigmaDynMu = pidtof::TOFNSigmaMuImp<track::TOFExpMom, track::Length, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
410508using TOFNSigmaDynPi = pidtof::TOFNSigmaPiImp<track::TOFExpMom, track::Length, track::P, track::Eta, pidtofsignal::TOFSignal, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
0 commit comments