Skip to content

Commit 7d84d7f

Browse files
authored
Enhance signal calculations for TOF response
Make possibility to ask the TOF response from the dynamic tables
1 parent 47e4395 commit 7d84d7f

File tree

1 file changed

+94
-18
lines changed

1 file changed

+94
-18
lines changed

Common/DataModel/PIDResponseTOF.h

Lines changed: 94 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#define COMMON_DATAMODEL_PIDRESPONSETOF_H_
2222

2323
#include "Common/Core/PID/PIDTOF.h"
24+
#include "Common/Core/PID/PIDTOFParamService.h"
2425

2526
#include <Framework/ASoA.h>
2627
#include <Framework/AnalysisDataModel.h>
@@ -274,42 +275,42 @@ namespace pidtof
274275
{
275276
// Expected signals
276277
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalEl, tofExpSignalEl, //! Expected time for electron
277-
[](float nsigma, float sigma, float tofsignal) -> float { return tofsignal - nsigma * sigma; });
278+
[](float nsigma, float sigma, float tofsignal) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : tofsignal - nsigma * sigma; });
278279
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalMu, tofExpSignalMu, //! Expected time for muon
279-
[](float nsigma, float sigma, float tofsignal) -> float { return tofsignal - nsigma * sigma; });
280+
[](float nsigma, float sigma, float tofsignal) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : tofsignal - nsigma * sigma; });
280281
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalPi, tofExpSignalPi, //! Expected time for pion
281-
[](float nsigma, float sigma, float tofsignal) -> float { return tofsignal - nsigma * sigma; });
282+
[](float nsigma, float sigma, float tofsignal) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : tofsignal - nsigma * sigma; });
282283
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalKa, tofExpSignalKa, //! Expected time for kaon
283-
[](float nsigma, float sigma, float tofsignal) -> float { return tofsignal - nsigma * sigma; });
284+
[](float nsigma, float sigma, float tofsignal) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : tofsignal - nsigma * sigma; });
284285
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalPr, tofExpSignalPr, //! Expected time for proton
285-
[](float nsigma, float sigma, float tofsignal) -> float { return tofsignal - nsigma * sigma; });
286+
[](float nsigma, float sigma, float tofsignal) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : tofsignal - nsigma * sigma; });
286287
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalDe, tofExpSignalDe, //! Expected time for deuteron
287-
[](float nsigma, float sigma, float tofsignal) -> float { return tofsignal - nsigma * sigma; });
288+
[](float nsigma, float sigma, float tofsignal) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : tofsignal - nsigma * sigma; });
288289
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalTr, tofExpSignalTr, //! Expected time for triton
289-
[](float nsigma, float sigma, float tofsignal) -> float { return tofsignal - nsigma * sigma; });
290+
[](float nsigma, float sigma, float tofsignal) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : tofsignal - nsigma * sigma; });
290291
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalHe, tofExpSignalHe, //! Expected time for helium3
291-
[](float nsigma, float sigma, float tofsignal) -> float { return tofsignal - nsigma * sigma; });
292+
[](float nsigma, float sigma, float tofsignal) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : tofsignal - nsigma * sigma; });
292293
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalAl, tofExpSignalAl, //! Expected time for alpha
293-
[](float nsigma, float sigma, float tofsignal) -> float { return tofsignal - nsigma * sigma; });
294+
[](float nsigma, float sigma, float tofsignal) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : tofsignal - nsigma * sigma; });
294295
// Delta with respect to signal
295296
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalDiffEl, tofExpSignalDiffEl, //! Difference between signal and expected for electron
296-
[](float nsigma, float sigma) -> float { return nsigma * sigma; });
297+
[](float nsigma, float sigma) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : nsigma * sigma; });
297298
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalDiffMu, tofExpSignalDiffMu, //! Difference between signal and expected for muon
298-
[](float nsigma, float sigma) -> float { return nsigma * sigma; });
299+
[](float nsigma, float sigma) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : nsigma * sigma; });
299300
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalDiffPi, tofExpSignalDiffPi, //! Difference between signal and expected for pion
300-
[](float nsigma, float sigma) -> float { return nsigma * sigma; });
301+
[](float nsigma, float sigma) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : nsigma * sigma; });
301302
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalDiffKa, tofExpSignalDiffKa, //! Difference between signal and expected for kaon
302-
[](float nsigma, float sigma) -> float { return nsigma * sigma; });
303+
[](float nsigma, float sigma) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : nsigma * sigma; });
303304
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalDiffPr, tofExpSignalDiffPr, //! Difference between signal and expected for proton
304-
[](float nsigma, float sigma) -> float { return nsigma * sigma; });
305+
[](float nsigma, float sigma) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : nsigma * sigma; });
305306
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalDiffDe, tofExpSignalDiffDe, //! Difference between signal and expected for deuteron
306-
[](float nsigma, float sigma) -> float { return nsigma * sigma; });
307+
[](float nsigma, float sigma) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : nsigma * sigma; });
307308
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalDiffTr, tofExpSignalDiffTr, //! Difference between signal and expected for triton
308-
[](float nsigma, float sigma) -> float { return nsigma * sigma; });
309+
[](float nsigma, float sigma) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : nsigma * sigma; });
309310
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalDiffHe, tofExpSignalDiffHe, //! Difference between signal and expected for helium3
310-
[](float nsigma, float sigma) -> float { return nsigma * sigma; });
311+
[](float nsigma, float sigma) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : nsigma * sigma; });
311312
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSignalDiffAl, tofExpSignalDiffAl, //! Difference between signal and expected for alpha
312-
[](float nsigma, float sigma) -> float { return nsigma * sigma; });
313+
[](float nsigma, float sigma) -> float { return sigma <= 0.f ? o2::pid::tof::defaultReturnValue : nsigma * sigma; });
313314
// Expected sigma
314315
DECLARE_SOA_COLUMN(TOFExpSigmaEl, tofExpSigmaEl, float); //! Expected resolution with the TOF detector for electron
315316
DECLARE_SOA_COLUMN(TOFExpSigmaMu, tofExpSigmaMu, float); //! Expected resolution with the TOF detector for muon
@@ -331,8 +332,83 @@ DECLARE_SOA_COLUMN(TOFNSigmaTr, tofNSigmaTr, float); //! Nsigma separation with
331332
DECLARE_SOA_COLUMN(TOFNSigmaHe, tofNSigmaHe, float); //! Nsigma separation with the TOF detector for helium3
332333
DECLARE_SOA_COLUMN(TOFNSigmaAl, tofNSigmaAl, float); //! Nsigma separation with the TOF detector for alpha
333334

335+
//! Expected resolution with the TOF detector for electron (computed on the fly)
336+
#define PERSPECIES_TOF_SIGMA_COLUMN(name, id) \
337+
DECLARE_SOA_DYNAMIC_COLUMN(TOFExpSigma##name##Imp, tofExpSigma2##name, \
338+
[](float tofSignal, \
339+
float tofExpMom, \
340+
float momentum, \
341+
float eta, \
342+
float tofEvTimeErr) -> float { \
343+
return o2::pid::tof::TOFResponseImpl::expectedSigma<id>(tofSignal, \
344+
tofExpMom, \
345+
momentum, \
346+
eta, \
347+
tofEvTimeErr); \
348+
});
349+
350+
PERSPECIES_TOF_SIGMA_COLUMN(El, o2::track::PID::Electron);
351+
PERSPECIES_TOF_SIGMA_COLUMN(Mu, o2::track::PID::Muon);
352+
PERSPECIES_TOF_SIGMA_COLUMN(Pi, o2::track::PID::Pion);
353+
PERSPECIES_TOF_SIGMA_COLUMN(Ka, o2::track::PID::Kaon);
354+
PERSPECIES_TOF_SIGMA_COLUMN(Pr, o2::track::PID::Proton);
355+
PERSPECIES_TOF_SIGMA_COLUMN(De, o2::track::PID::Deuteron);
356+
PERSPECIES_TOF_SIGMA_COLUMN(Tr, o2::track::PID::Triton);
357+
PERSPECIES_TOF_SIGMA_COLUMN(He, o2::track::PID::Helium3);
358+
PERSPECIES_TOF_SIGMA_COLUMN(Al, o2::track::PID::Alpha);
359+
#undef PERSPECIES_TOF_SIGMA_COLUMN
360+
361+
#define PERSPECIES_TOF_SEPARATION_COLUMN(name, id) \
362+
DECLARE_SOA_DYNAMIC_COLUMN(TOFNSigma##name##Imp, tofNSigma2##name, \
363+
[](const float tofSignal, \
364+
const float tofExpMom, \
365+
const float length, \
366+
const float momentum, \
367+
const float eta, \
368+
const float tofEvTime, \
369+
const float tofEvTimeErr) -> float { \
370+
return o2::pid::tof::TOFResponseImpl::nSigma<id>(tofSignal, \
371+
tofExpMom, \
372+
length, \
373+
momentum, \
374+
eta, \
375+
tofEvTime, \
376+
tofEvTimeErr); \
377+
});
378+
379+
PERSPECIES_TOF_SEPARATION_COLUMN(El, o2::track::PID::Electron);
380+
PERSPECIES_TOF_SEPARATION_COLUMN(Mu, o2::track::PID::Muon);
381+
PERSPECIES_TOF_SEPARATION_COLUMN(Pi, o2::track::PID::Pion);
382+
PERSPECIES_TOF_SEPARATION_COLUMN(Ka, o2::track::PID::Kaon);
383+
PERSPECIES_TOF_SEPARATION_COLUMN(Pr, o2::track::PID::Proton);
384+
PERSPECIES_TOF_SEPARATION_COLUMN(De, o2::track::PID::Deuteron);
385+
PERSPECIES_TOF_SEPARATION_COLUMN(Tr, o2::track::PID::Triton);
386+
PERSPECIES_TOF_SEPARATION_COLUMN(He, o2::track::PID::Helium3);
387+
PERSPECIES_TOF_SEPARATION_COLUMN(Al, o2::track::PID::Alpha);
388+
#undef PERSPECIES_TOF_SEPARATION_COLUMN
389+
334390
} // namespace pidtof
335391

392+
using TOFExpSigma2El = pidtof::TOFExpSigmaElImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::P, track::Eta, pidtofevtime::TOFEvTimeErr>;
393+
using TOFExpSigma2Mu = pidtof::TOFExpSigmaMuImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::P, track::Eta, pidtofevtime::TOFEvTimeErr>;
394+
using TOFExpSigma2Pi = pidtof::TOFExpSigmaPiImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::P, track::Eta, pidtofevtime::TOFEvTimeErr>;
395+
using TOFExpSigma2Ka = pidtof::TOFExpSigmaKaImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::P, track::Eta, pidtofevtime::TOFEvTimeErr>;
396+
using TOFExpSigma2Pr = pidtof::TOFExpSigmaPrImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::P, track::Eta, pidtofevtime::TOFEvTimeErr>;
397+
using TOFExpSigma2De = pidtof::TOFExpSigmaDeImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::P, track::Eta, pidtofevtime::TOFEvTimeErr>;
398+
using TOFExpSigma2Tr = pidtof::TOFExpSigmaTrImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::P, track::Eta, pidtofevtime::TOFEvTimeErr>;
399+
using TOFExpSigma2He = pidtof::TOFExpSigmaHeImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::P, track::Eta, pidtofevtime::TOFEvTimeErr>;
400+
using TOFExpSigma2Al = pidtof::TOFExpSigmaAlImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::P, track::Eta, pidtofevtime::TOFEvTimeErr>;
401+
402+
using TOFNSigma2El = pidtof::TOFNSigmaElImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::Length, track::P, track::Eta, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
403+
using TOFNSigma2Mu = pidtof::TOFNSigmaMuImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::Length, track::P, track::Eta, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
404+
using TOFNSigma2Pi = pidtof::TOFNSigmaPiImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::Length, track::P, track::Eta, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
405+
using TOFNSigma2Ka = pidtof::TOFNSigmaKaImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::Length, track::P, track::Eta, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
406+
using TOFNSigma2Pr = pidtof::TOFNSigmaPrImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::Length, track::P, track::Eta, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
407+
using TOFNSigma2De = pidtof::TOFNSigmaDeImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::Length, track::P, track::Eta, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
408+
using TOFNSigma2Tr = pidtof::TOFNSigmaTrImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::Length, track::P, track::Eta, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
409+
using TOFNSigma2He = pidtof::TOFNSigmaHeImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::Length, track::P, track::Eta, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
410+
using TOFNSigma2Al = pidtof::TOFNSigmaAlImp<pidtofsignal::TOFSignal, track::TOFExpMom, track::Length, track::P, track::Eta, pidtofevtime::TOFEvTime, pidtofevtime::TOFEvTimeErr>;
411+
336412
namespace pidtof_tiny
337413
{
338414
struct binning {

0 commit comments

Comments
 (0)