11#ifndef O2_FRAMEWORK_ANALYSISDATAMODEL_H_
12#define O2_FRAMEWORK_ANALYSISDATAMODEL_H_
29#include <fairmq/Version.h>
30#include <fairmq/shmem/Common.h>
47 bc::RunNumber, bc::GlobalBC,
51 bc::RunNumber, bc::GlobalBC,
52 bc::TriggerMask, bc::InputMask);
57template <aod::is_origin_hash O>
59using BC = BCs::iterator;
67 timestamp::Timestamp);
99 collision::PosX, collision::PosY, collision::PosZ,
100 collision::CovXX, collision::CovXY, collision::CovXZ, collision::CovYY, collision::CovYZ, collision::CovZZ,
101 collision::Flags, collision::Chi2, collision::NumContrib,
102 collision::CollisionTime, collision::CollisionTimeRes);
106 collision::PosX, collision::PosY, collision::PosZ,
107 collision::CovXX, collision::CovXY, collision::CovYY, collision::CovXZ, collision::CovYZ, collision::CovZZ,
108 collision::Flags, collision::Chi2, collision::NumContrib,
109 collision::CollisionTime, collision::CollisionTimeRes);
111template <aod::is_origin_hash O>
134 ifnode(nasin(aod::track::snp) + aod::track::alpha < 0.0f, nasin(aod::track::snp) + aod::track::alpha + o2::constants::math::TwoPI,
135 ifnode(nasin(aod::track::snp) + aod::track::alpha >= o2::constants::math::TwoPI, nasin(aod::track::snp) + aod::track::alpha - o2::constants::math::TwoPI,
136 nasin(aod::track::snp) + aod::track::alpha)));
138 -1.f * nlog(ntan(o2::constants::math::PIQuarter - 0.5f * natan(aod::track::tgl))));
140 ifnode(nabs(aod::track::signed1Pt) <= o2::constants::math::Almost0, o2::constants::math::VeryBig, nabs(1.f / aod::track::signed1Pt)));
144 [](
float signed1Pt) ->
short {
return (signed1Pt > 0) ? 1 : -1; });
146 [](
float signed1Pt,
float snp,
float alpha) ->
float {
147 auto pt = 1.f / std::abs(signed1Pt);
150 auto r = std::sqrt((1.f - snp) * (1.f + snp));
151 return pt * (
r * cs - snp * sn);
154 [](
float signed1Pt,
float snp,
float alpha) ->
float {
155 auto pt = 1.f / std::abs(signed1Pt);
158 auto r = std::sqrt((1.f - snp) * (1.f + snp));
159 return pt * (snp * cs +
r * sn);
162 [](
float signed1Pt,
float tgl) ->
float {
163 auto pt = 1.f / std::abs(signed1Pt);
167 [](
float signed1Pt,
float snp,
float alpha,
float tgl) -> std::array<float, 3> {
168 const auto pt = 1.f / std::abs(signed1Pt);
170 const float cs = cosf(
alpha), sn = sinf(
alpha);
171 const auto r = std::sqrt((1.f - snp) * (1.f + snp));
172 const auto px = pt * (
r * cs - snp * sn);
173 const auto py = pt * (snp * cs +
r * sn);
174 const auto pz = pt * tgl;
175 return std::array<float, 3>{px, py, pz};
178 ifnode(nabs(aod::track::signed1Pt) <= o2::constants::math::Almost0, o2::constants::math::VeryBig, 0.5f * (ntan(o2::constants::math::PIQuarter - 0.5f * natan(aod::track::tgl)) + 1.f / ntan(o2::constants::math::PIQuarter - 0.5f * natan(aod::track::tgl))) / nabs(aod::track::signed1Pt)));
180 [](
float signed1Pt,
float tgl,
float mass) ->
float {
181 const auto pt = 1.f / std::abs(signed1Pt);
182 const auto p = 0.5f * (std::tan(o2::constants::math::PIQuarter - 0.5f * std::atan(tgl)) + 1.f / std::tan(o2::constants::math::PIQuarter - 0.5f * std::atan(tgl))) * pt;
183 return std::sqrt(p * p + mass * mass);
186 [](
float signed1Pt,
float tgl,
float mass) ->
float {
187 const auto pt = 1.f / std::abs(signed1Pt);
188 const auto pz = pt * tgl;
189 const auto p = 0.5f * (std::tan(o2::constants::math::PIQuarter - 0.5f * std::atan(tgl)) + 1.f / std::tan(o2::constants::math::PIQuarter - 0.5f * std::atan(tgl))) * pt;
190 const auto energy = std::sqrt(p * p + mass * mass);
191 return 0.5f * std::log((energy + pz) / (energy - pz));
212 aod::track::sigmaY* aod::track::sigmaY);
214 (aod::track::rhoZY / 128.f) * (aod::track::sigmaZ * aod::track::sigmaY));
216 aod::track::sigmaZ* aod::track::sigmaZ);
218 (aod::track::rhoSnpY / 128.f) * (aod::track::sigmaSnp * aod::track::sigmaY));
220 (aod::track::rhoSnpZ / 128.f) * (aod::track::sigmaSnp * aod::track::sigmaZ));
222 aod::track::sigmaSnp* aod::track::sigmaSnp);
224 (aod::track::rhoTglY / 128.f) * (aod::track::sigmaTgl * aod::track::sigmaY));
226 (aod::track::rhoTglZ / 128.f) * (aod::track::sigmaTgl * aod::track::sigmaZ));
228 (aod::track::rhoTglSnp / 128.f) * (aod::track::sigmaTgl * aod::track::sigmaSnp));
230 aod::track::sigmaTgl* aod::track::sigmaTgl);
232 (aod::track::rho1PtY / 128.f) * (aod::track::sigma1Pt * aod::track::sigmaY));
234 (aod::track::rho1PtZ / 128.f) * (aod::track::sigma1Pt * aod::track::sigmaZ));
236 (aod::track::rho1PtSnp / 128.f) * (aod::track::sigma1Pt * aod::track::sigmaSnp));
238 (aod::track::rho1PtTgl / 128.f) * (aod::track::sigma1Pt * aod::track::sigmaTgl));
240 aod::track::sigma1Pt* aod::track::sigma1Pt);
277 [](
float length,
float tofExpMom) ->
float {
278 constexpr float massSquared = o2::constants::physics::MassElectron * o2::constants::physics::MassElectron;
283 [](
float length,
float tofExpMom) ->
float {
284 constexpr float massSquared = o2::constants::physics::MassMuon * o2::constants::physics::MassMuon;
289 [](
float length,
float tofExpMom) ->
float {
290 constexpr float massSquared = o2::constants::physics::MassPionCharged * o2::constants::physics::MassPionCharged;
295 [](
float length,
float tofExpMom) ->
float {
296 constexpr float massSquared = o2::constants::physics::MassKaonCharged * o2::constants::physics::MassKaonCharged;
301 [](
float length,
float tofExpMom) ->
float {
302 constexpr float massSquared = o2::constants::physics::MassProton * o2::constants::physics::MassProton;
307 [](
float length,
float tofExpMom) ->
float {
308 constexpr float massSquared = o2::constants::physics::MassDeuteron * o2::constants::physics::MassDeuteron;
313 [](
float length,
float tofExpMom) ->
float {
314 constexpr float massSquared = o2::constants::physics::MassTriton * o2::constants::physics::MassTriton;
319 [](
float length,
float tofExpMom) ->
float {
320 constexpr float massSquared = o2::constants::physics::MassHelium3 * o2::constants::physics::MassHelium3;
325 [](
float length,
float tofExpMom) ->
float {
326 constexpr float massSquared = o2::constants::physics::MassAlpha * o2::constants::physics::MassAlpha;
338 [](uint32_t itsClusterSizes) -> uint8_t {
341 if ((itsClusterSizes >> (
layer * 4)) & 0xf) {
342 clmap |= (1 <<
layer);
348 [](uint32_t itsClusterSizes) -> uint8_t {
351 if ((itsClusterSizes >> (
layer * 4)) & 0xf)
357 [](uint32_t itsClusterSizes) -> uint8_t {
358 uint8_t itsNclsInnerBarrel = 0;
360 if ((itsClusterSizes >> (
layer * 4)) & 0xf)
361 itsNclsInnerBarrel++;
363 return itsNclsInnerBarrel;
366 [](uint32_t itsClusterSizes,
int layer) -> uint8_t {
370 return (itsClusterSizes >> (
layer * 4)) & 0xf;
374 [](uint8_t detectorMap,
float itsChi2Ncl) ->
bool {
382 [](
float timeErr, uint32_t trackType) ->
float {
383 if (!(trackType & TrackFlags::TrackTimeAsym)) {
384 return TPCTimeErrEncoding::invalidValue;
392 [](
float timeErr, uint32_t trackType) ->
float {
393 if (!(trackType & TrackFlags::TrackTimeAsym)) {
394 return TPCTimeErrEncoding::invalidValue;
397 p.encoding.timeErr = timeErr;
398 return p.getDeltaTBwd();
406inline uint16_t fixTPCNClsFindable(uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound)
408 uint16_t
res = tpcNClsFindable;
409 if (tpcNClsFindable <= tpcNClsFindableMinusFound) {
437 [](uint32_t
flags) -> uint32_t {
return flags >> 28; });
439 [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) -> int16_t {
440 return fixTPCNClsFindable(tpcNClsFindable, tpcNClsFindableMinusFound) - tpcNClsFindableMinusFound;
443 [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusPID, int8_t tpcNClsFindableMinusFound) -> int16_t {
444 return fixTPCNClsFindable(tpcNClsFindable, tpcNClsFindableMinusFound) - tpcNClsFindableMinusPID;
447 [](uint8_t tpcNClsFindable, int8_t TPCNClsFindableMinusCrossedRows, int8_t tpcNClsFindableMinusFound) -> int16_t {
448 return fixTPCNClsFindable(tpcNClsFindable, tpcNClsFindableMinusFound) - TPCNClsFindableMinusCrossedRows;
451 [](uint8_t tpcNClsFindable, int8_t TPCNClsFindableMinusCrossedRows) -> int16_t {
return (int16_t)tpcNClsFindable - TPCNClsFindableMinusCrossedRows; });
453 [](uint8_t itsClusterMap) -> uint8_t {
463 [](uint8_t itsClusterMap) -> uint8_t {
464 uint8_t itsNclsInnerBarrel = 0;
468 itsNclsInnerBarrel++;
470 return itsNclsInnerBarrel;
473 [](uint8_t itsSharedClusterMap) -> uint8_t {
477 if (itsSharedClusterMap & (
bit <<
layer))
483 [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) ->
float {
484 int16_t tpcNClsFound = fixTPCNClsFindable(tpcNClsFindable, tpcNClsFindableMinusFound) - tpcNClsFindableMinusFound;
485 return (
float)tpcNClsFound / (float)fixTPCNClsFindable(tpcNClsFindable, tpcNClsFindableMinusFound);
489 [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusCrossedRows, int8_t tpcNClsFindableMinusFound) ->
float {
490 int16_t tpcNClsCrossedRows = fixTPCNClsFindable(tpcNClsFindable, tpcNClsFindableMinusFound) - tpcNClsFindableMinusCrossedRows;
491 return (
float)tpcNClsCrossedRows / (float)fixTPCNClsFindable(tpcNClsFindable, tpcNClsFindableMinusFound);
495 [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusCrossedRows) ->
float {
496 int16_t tpcNClsCrossedRows = (int16_t)tpcNClsFindable - tpcNClsFindableMinusCrossedRows;
497 return (
float)tpcNClsCrossedRows / (float)tpcNClsFindable;
501 [](uint8_t tpcNClsShared, uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) ->
float {
502 int16_t tpcNClsFound = fixTPCNClsFindable(tpcNClsFindable, tpcNClsFindableMinusFound) - tpcNClsFindableMinusFound;
503 return (
float)tpcNClsShared / (float)tpcNClsFound;
513 [](uint8_t trdPattern) -> std::size_t {
return std::bitset<6>(trdPattern).count(); });
518 track::X, track::Alpha,
519 track::Y, track::Z, track::Snp, track::Tgl,
520 track::Signed1Pt, track::IsWithinBeamPipe<track::X>,
521 track::Px<track::Signed1Pt, track::Snp, track::Alpha>,
522 track::Py<track::Signed1Pt, track::Snp, track::Alpha>,
523 track::Pz<track::Signed1Pt, track::Tgl>,
524 track::PVector<track::Signed1Pt, track::Snp, track::Alpha, track::Tgl>,
525 track::Energy<track::Signed1Pt, track::Tgl>,
526 track::Rapidity<track::Signed1Pt, track::Tgl>,
527 track::Sign<track::Signed1Pt>,
538 track::X, track::Alpha,
539 track::Y, track::Z, track::Snp, track::Tgl,
540 track::Signed1Pt, track::IsWithinBeamPipe<track::X>,
541 track::Px<track::Signed1Pt, track::Snp, track::Alpha>,
542 track::Py<track::Signed1Pt, track::Snp, track::Alpha>,
543 track::Pz<track::Signed1Pt, track::Tgl>,
544 track::PVector<track::Signed1Pt, track::Snp, track::Alpha, track::Tgl>,
545 track::Energy<track::Signed1Pt, track::Tgl>,
546 track::Rapidity<track::Signed1Pt, track::Tgl>,
547 track::Sign<track::Signed1Pt>,
557 track::SigmaY, track::SigmaZ, track::SigmaSnp, track::SigmaTgl, track::Sigma1Pt,
558 track::RhoZY, track::RhoSnpY, track::RhoSnpZ, track::RhoTglY, track::RhoTglZ,
559 track::RhoTglSnp, track::Rho1PtY, track::Rho1PtZ, track::Rho1PtSnp, track::Rho1PtTgl,
o2::soa::Marker<1>);
576 aod::track::C1Pt21Pt2);
579 track::SigmaY, track::SigmaZ, track::SigmaSnp, track::SigmaTgl, track::Sigma1Pt,
580 track::RhoZY, track::RhoSnpY, track::RhoSnpZ, track::RhoTglY, track::RhoTglZ,
581 track::RhoTglSnp, track::Rho1PtY, track::Rho1PtZ, track::Rho1PtSnp, track::Rho1PtTgl,
o2::soa::Marker<2>);
598 aod::track::C1Pt21Pt2);
601 track::TPCInnerParam, track::Flags, track::ITSClusterMap,
602 track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows,
603 track::TPCNClsShared, track::TRDPattern, track::ITSChi2NCl,
604 track::TPCChi2NCl, track::TRDChi2, track::TOFChi2,
605 track::TPCSignal, track::TRDSignal, track::Length, track::TOFExpMom,
606 track::PIDForTracking<track::Flags>,
607 track::IsPVContributor<track::Flags>,
608 track::HasITS<track::DetectorMap>, track::HasTPC<track::DetectorMap>,
609 track::HasTRD<track::DetectorMap>, track::HasTOF<track::DetectorMap>,
610 track::TPCNClsFound<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
611 track::TPCNClsCrossedRows_fix<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsFindableMinusFound>,
612 track::TOFExpTimeEl<track::Length, track::TOFExpMom>,
613 track::TOFExpTimeMu<track::Length, track::TOFExpMom>,
614 track::TOFExpTimePi<track::Length, track::TOFExpMom>,
615 track::TOFExpTimeKa<track::Length, track::TOFExpMom>,
616 track::TOFExpTimePr<track::Length, track::TOFExpMom>,
617 track::TOFExpTimeDe<track::Length, track::TOFExpMom>,
618 track::TOFExpTimeTr<track::Length, track::TOFExpMom>,
619 track::TOFExpTimeHe<track::Length, track::TOFExpMom>,
620 track::TOFExpTimeAl<track::Length, track::TOFExpMom>,
621 track::ITSNCls<track::ITSClusterMap>, track::ITSNClsInnerBarrel<track::ITSClusterMap>,
622 track::TPCCrossedRowsOverFindableCls_fix<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsFindableMinusFound>,
623 track::TPCFoundOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
624 track::TPCFractionSharedCls<track::TPCNClsShared, track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
625 track::TRDHasCrossing<track::TRDPattern>, track::TRDHasNeighbor<track::TRDPattern>, track::TRDNTracklets<track::TRDPattern>,
626 track::TrackEtaEMCAL, track::TrackPhiEMCAL, track::TrackTime, track::TrackTimeRes);
629 track::TPCInnerParam, track::Flags, track::ITSClusterSizes,
630 track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows,
631 track::TPCNClsShared, track::v001::extensions::TPCDeltaTFwd<track::TrackTimeRes, track::Flags>, track::v001::extensions::TPCDeltaTBwd<track::TrackTimeRes, track::Flags>,
632 track::TRDPattern, track::ITSChi2NCl, track::TPCChi2NCl, track::TRDChi2, track::TOFChi2,
633 track::TPCSignal, track::TRDSignal, track::Length, track::TOFExpMom,
634 track::PIDForTracking<track::Flags>,
635 track::IsPVContributor<track::Flags>,
636 track::HasITS<track::v001::DetectorMap>, track::HasTPC<track::v001::DetectorMap>,
637 track::HasTRD<track::v001::DetectorMap>, track::HasTOF<track::v001::DetectorMap>,
638 track::TPCNClsFound<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
639 track::TPCNClsCrossedRows_fix<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsFindableMinusFound>,
640 track::v001::ITSClusterMap<track::ITSClusterSizes>, track::v001::ITSNCls<track::ITSClusterSizes>, track::v001::ITSNClsInnerBarrel<track::ITSClusterSizes>,
641 track::v001::ITSClsSizeInLayer<track::ITSClusterSizes>,
642 track::v001::IsITSAfterburner<track::v001::DetectorMap, track::ITSChi2NCl>,
643 track::TOFExpTimeEl<track::Length, track::TOFExpMom>,
644 track::TOFExpTimeMu<track::Length, track::TOFExpMom>,
645 track::TOFExpTimePi<track::Length, track::TOFExpMom>,
646 track::TOFExpTimeKa<track::Length, track::TOFExpMom>,
647 track::TOFExpTimePr<track::Length, track::TOFExpMom>,
648 track::TOFExpTimeDe<track::Length, track::TOFExpMom>,
649 track::TOFExpTimeTr<track::Length, track::TOFExpMom>,
650 track::TOFExpTimeHe<track::Length, track::TOFExpMom>,
651 track::TOFExpTimeAl<track::Length, track::TOFExpMom>,
652 track::TPCCrossedRowsOverFindableCls_fix<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsFindableMinusFound>,
653 track::TPCFoundOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
654 track::TPCFractionSharedCls<track::TPCNClsShared, track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
655 track::TRDHasCrossing<track::TRDPattern>, track::TRDHasNeighbor<track::TRDPattern>, track::TRDNTracklets<track::TRDPattern>,
656 track::TrackEtaEMCAL, track::TrackPhiEMCAL, track::TrackTime, track::TrackTimeRes);
659 track::TPCInnerParam, track::Flags, track::ITSClusterSizes,
660 track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusPID, track::TPCNClsFindableMinusCrossedRows,
661 track::TPCNClsShared, track::v001::extensions::TPCDeltaTFwd<track::TrackTimeRes, track::Flags>, track::v001::extensions::TPCDeltaTBwd<track::TrackTimeRes, track::Flags>,
662 track::TRDPattern, track::ITSChi2NCl, track::TPCChi2NCl, track::TRDChi2, track::TOFChi2,
663 track::TPCSignal, track::TRDSignal, track::Length, track::TOFExpMom,
664 track::PIDForTracking<track::Flags>,
665 track::IsPVContributor<track::Flags>,
666 track::HasITS<track::v001::DetectorMap>, track::HasTPC<track::v001::DetectorMap>,
667 track::HasTRD<track::v001::DetectorMap>, track::HasTOF<track::v001::DetectorMap>,
668 track::TPCNClsFound<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
669 track::TPCNClsPID<track::TPCNClsFindable, track::TPCNClsFindableMinusPID, track::TPCNClsFindableMinusFound>,
670 track::TPCNClsCrossedRows_fix<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsFindableMinusFound>,
671 track::v001::ITSClusterMap<track::ITSClusterSizes>, track::v001::ITSNCls<track::ITSClusterSizes>, track::v001::ITSNClsInnerBarrel<track::ITSClusterSizes>,
672 track::v001::ITSClsSizeInLayer<track::ITSClusterSizes>,
673 track::v001::IsITSAfterburner<track::v001::DetectorMap, track::ITSChi2NCl>,
674 track::TOFExpTimeEl<track::Length, track::TOFExpMom>,
675 track::TOFExpTimeMu<track::Length, track::TOFExpMom>,
676 track::TOFExpTimePi<track::Length, track::TOFExpMom>,
677 track::TOFExpTimeKa<track::Length, track::TOFExpMom>,
678 track::TOFExpTimePr<track::Length, track::TOFExpMom>,
679 track::TOFExpTimeDe<track::Length, track::TOFExpMom>,
680 track::TOFExpTimeTr<track::Length, track::TOFExpMom>,
681 track::TOFExpTimeHe<track::Length, track::TOFExpMom>,
682 track::TOFExpTimeAl<track::Length, track::TOFExpMom>,
683 track::TPCCrossedRowsOverFindableCls_fix<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows, track::TPCNClsFindableMinusFound>,
684 track::TPCFoundOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
685 track::TPCFractionSharedCls<track::TPCNClsShared, track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
686 track::TRDHasCrossing<track::TRDPattern>, track::TRDHasNeighbor<track::TRDPattern>, track::TRDNTracklets<track::TRDPattern>,
687 track::TrackEtaEMCAL, track::TrackPhiEMCAL, track::TrackTime, track::TrackTimeRes);
692 track::v001::DetectorMap);
694 track::v001::DetectorMap);
699 track::ITSSignal, track::ITSSharedClusterMap,
700 track::ITSNSharedCls<track::ITSSharedClusterMap>);
702template <aod::is_origin_hash O>
758 [](int8_t cY, int8_t cZ, int8_t cSnp, int8_t cTgl, int8_t cQ2Pt, int8_t gY, int8_t gZ, int8_t gSnp, int8_t gTgl, int8_t gQ2Pt) ->
bool {
759 constexpr int8_t
m = std::numeric_limits<int8_t>::min();
760 return (cY ==
m && cZ ==
m && cSnp ==
m && cTgl ==
m && cQ2Pt ==
m && gY ==
m && gZ ==
m && gSnp ==
m && gTgl ==
m && gQ2Pt ==
m);
765 o2::soa::Index<>, trackqa::TrackId, trackqa::TPCTime0, trackqa::TPCDCAR, trackqa::TPCDCAZ, trackqa::TPCClusterByteMask,
766 trackqa::TPCdEdxMax0R, trackqa::TPCdEdxMax1R, trackqa::TPCdEdxMax2R, trackqa::TPCdEdxMax3R,
767 trackqa::TPCdEdxTot0R, trackqa::TPCdEdxTot1R, trackqa::TPCdEdxTot2R, trackqa::TPCdEdxTot3R);
771 o2::soa::Index<>, trackqa::TrackId, trackqa::TPCTime0, trackqa::TPCDCAR, trackqa::TPCDCAZ, trackqa::TPCClusterByteMask,
772 trackqa::TPCdEdxMax0R, trackqa::TPCdEdxMax1R, trackqa::TPCdEdxMax2R, trackqa::TPCdEdxMax3R,
773 trackqa::TPCdEdxTot0R, trackqa::TPCdEdxTot1R, trackqa::TPCdEdxTot2R, trackqa::TPCdEdxTot3R,
774 trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
775 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt,
776 trackqa::IsDummy<trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
777 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt>);
780 o2::soa::Index<>, trackqa::TrackId, trackqa::TPCTime0, trackqa::TPCDCAR, trackqa::TPCDCAZ, trackqa::TPCClusterByteMask,
781 trackqa::TPCdEdxMax0R, trackqa::TPCdEdxMax1R, trackqa::TPCdEdxMax2R, trackqa::TPCdEdxMax3R,
782 trackqa::TPCdEdxTot0R, trackqa::TPCdEdxTot1R, trackqa::TPCdEdxTot2R, trackqa::TPCdEdxTot3R,
783 trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
784 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt,
785 trackqa::DeltaTOFdX, trackqa::DeltaTOFdZ,
786 trackqa::IsDummy<trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
787 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt>);
790 o2::soa::Index<>, trackqa::TrackId, trackqa::TPCTime0, trackqa::TPCdEdxNorm, trackqa::TPCDCAR, trackqa::TPCDCAZ, trackqa::TPCClusterByteMask,
791 trackqa::TPCdEdxMax0R, trackqa::TPCdEdxMax1R, trackqa::TPCdEdxMax2R, trackqa::TPCdEdxMax3R,
792 trackqa::TPCdEdxTot0R, trackqa::TPCdEdxTot1R, trackqa::TPCdEdxTot2R, trackqa::TPCdEdxTot3R,
793 trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
794 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt,
795 trackqa::DeltaTOFdX, trackqa::DeltaTOFdZ,
796 trackqa::IsDummy<trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
797 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt>);
828 [](
float signed1Pt) ->
short {
return (signed1Pt > 0) ? 1 : -1; });
830 [](uint64_t mftClusterSizesAndTrackFlags) ->
bool {
return mftClusterSizesAndTrackFlags & (0x1ULL << 60); });
832 -1.f * nlog(ntan(o2::constants::math::PIQuarter - 0.5f * natan(aod::fwdtrack::tgl))));
834 ifnode(nabs(aod::fwdtrack::signed1Pt) < o2::constants::math::Almost0, o2::constants::math::VeryBig, nabs(1.f / aod::fwdtrack::signed1Pt)));
836 ifnode((nabs(aod::fwdtrack::signed1Pt) < o2::constants::math::Almost0) || (nabs(o2::constants::math::PIQuarter - 0.5f * natan(aod::fwdtrack::tgl)) < o2::constants::math::Almost0), o2::constants::math::VeryBig, 0.5f * (ntan(o2::constants::math::PIQuarter - 0.5f * natan(aod::fwdtrack::tgl)) + 1.f / ntan(o2::constants::math::PIQuarter - 0.5f * natan(aod::fwdtrack::tgl))) / nabs(aod::fwdtrack::signed1Pt)));
838 [](
float pt,
float phi) ->
float {
839 return pt * std::cos(phi);
842 [](
float pt,
float phi) ->
float {
843 return pt * std::sin(phi);
846 [](
float pt,
float tgl) ->
float {
850 [](uint32_t midBoards) ->
int {
851 return static_cast<int>(midBoards & 0xFF);
854 [](uint32_t midBoards) ->
int {
855 return static_cast<int>((midBoards >> 8) & 0xFF);
858 [](uint32_t midBoards) ->
int {
859 return static_cast<int>((midBoards >> 16) & 0xFF);
862 [](uint32_t midBoards) ->
int {
863 return static_cast<int>((midBoards >> 24) & 0xFF);
869 [](uint64_t mftClusterSizesAndTrackFlags) -> int8_t {
872 if ((mftClusterSizesAndTrackFlags >> (
layer * 6)) & 0x3F) {
898 aod::fwdtrack::sigmaX* aod::fwdtrack::sigmaX);
900 (aod::fwdtrack::rhoXY / 128.f) * (aod::fwdtrack::sigmaX * aod::fwdtrack::sigmaY));
902 aod::fwdtrack::sigmaY* aod::fwdtrack::sigmaY);
904 (aod::fwdtrack::rhoPhiX / 128.f) * (aod::fwdtrack::sigmaPhi * aod::fwdtrack::sigmaX));
906 (aod::fwdtrack::rhoPhiY / 128.f) * (aod::fwdtrack::sigmaPhi * aod::fwdtrack::sigmaY));
908 aod::fwdtrack::sigmaPhi* aod::fwdtrack::sigmaPhi);
910 (aod::fwdtrack::rhoTglX / 128.f) * (aod::fwdtrack::sigmaTgl * aod::fwdtrack::sigmaX));
912 (aod::fwdtrack::rhoTglY / 128.f) * (aod::fwdtrack::sigmaTgl * aod::fwdtrack::sigmaY));
914 (aod::fwdtrack::rhoTglPhi / 128.f) * (aod::fwdtrack::sigmaTgl * aod::fwdtrack::sigmaPhi));
916 aod::fwdtrack::sigmaTgl* aod::fwdtrack::sigmaTgl);
918 (aod::fwdtrack::rho1PtY / 128.f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaY));
920 (aod::fwdtrack::rho1PtX / 128.f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaX));
922 (aod::fwdtrack::rho1PtPhi / 128.f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaPhi));
924 (aod::fwdtrack::rho1PtTgl / 128.f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaTgl));
926 aod::fwdtrack::sigma1Pt* aod::fwdtrack::sigma1Pt);
932 fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
933 fwdtrack::Signed1Pt, fwdtrack::NClusters,
934 fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
935 fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
936 fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
937 fwdtrack::Sign<fwdtrack::Signed1Pt>, fwdtrack::Chi2,
938 fwdtrack::TrackTime, fwdtrack::TrackTimeRes);
942 fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
943 fwdtrack::Signed1Pt, fwdtrack::v001::NClusters<fwdtrack::MFTClusterSizesAndTrackFlags>, fwdtrack::MFTClusterSizesAndTrackFlags, fwdtrack::IsCA<fwdtrack::MFTClusterSizesAndTrackFlags>,
944 fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
945 fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
946 fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
947 fwdtrack::Sign<fwdtrack::Signed1Pt>, fwdtrack::Chi2,
948 fwdtrack::TrackTime, fwdtrack::TrackTimeRes);
964template <aod::is_origin_hash O>
975 fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
976 fwdtrack::Signed1Pt, fwdtrack::NClusters, fwdtrack::PDca, fwdtrack::RAtAbsorberEnd,
977 fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
978 fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
979 fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
980 fwdtrack::Sign<fwdtrack::Signed1Pt>,
981 fwdtrack::Chi2, fwdtrack::Chi2MatchMCHMID, fwdtrack::Chi2MatchMCHMFT,
982 fwdtrack::MatchScoreMCHMFT, fwdtrack::MFTTrackId, fwdtrack::MCHTrackId,
983 fwdtrack::MCHBitMap, fwdtrack::MIDBitMap, fwdtrack::MIDBoards,
984 fwdtrack::TrackTime, fwdtrack::TrackTimeRes);
992 fwdtrack::SigmaX, fwdtrack::SigmaY, fwdtrack::SigmaPhi, fwdtrack::SigmaTgl, fwdtrack::Sigma1Pt,
993 fwdtrack::RhoXY, fwdtrack::RhoPhiY, fwdtrack::RhoPhiX, fwdtrack::RhoTglX, fwdtrack::RhoTglY,
994 fwdtrack::RhoTglPhi, fwdtrack::Rho1PtX, fwdtrack::Rho1PtY, fwdtrack::Rho1PtPhi, fwdtrack::Rho1PtTgl);
1000 aod::fwdtrack::CPhiX,
1001 aod::fwdtrack::CPhiY,
1002 aod::fwdtrack::CPhiPhi,
1003 aod::fwdtrack::CTglX,
1004 aod::fwdtrack::CTglY,
1005 aod::fwdtrack::CTglPhi,
1006 aod::fwdtrack::CTglTgl,
1007 aod::fwdtrack::C1PtX,
1008 aod::fwdtrack::C1PtY,
1009 aod::fwdtrack::C1PtPhi,
1010 aod::fwdtrack::C1PtTgl,
1011 aod::fwdtrack::C1Pt21Pt2);
1018 fwdtrack::SigmaX, fwdtrack::SigmaY, fwdtrack::SigmaPhi, fwdtrack::SigmaTgl, fwdtrack::Sigma1Pt,
1019 fwdtrack::RhoXY, fwdtrack::RhoPhiX, fwdtrack::RhoPhiY, fwdtrack::RhoTglX, fwdtrack::RhoTglY,
1020 fwdtrack::RhoTglPhi, fwdtrack::Rho1PtX, fwdtrack::Rho1PtY, fwdtrack::Rho1PtPhi, fwdtrack::Rho1PtTgl);
1026 aod::fwdtrack::CPhiX,
1027 aod::fwdtrack::CPhiY,
1028 aod::fwdtrack::CPhiPhi,
1029 aod::fwdtrack::CTglX,
1030 aod::fwdtrack::CTglY,
1031 aod::fwdtrack::CTglPhi,
1032 aod::fwdtrack::CTglTgl,
1033 aod::fwdtrack::C1PtX,
1034 aod::fwdtrack::C1PtY,
1035 aod::fwdtrack::C1PtPhi,
1036 aod::fwdtrack::C1PtTgl,
1037 aod::fwdtrack::C1Pt21Pt2);
1039using MFTTrack = MFTTracks::iterator;
1045extern template struct Join<aod::FwdTracks, aod::FwdTracksCov>;
1095 fwdtrkcl::FwdTrackId,
1100 fwdtrkcl::DEId<fwdtrkcl::ClInfo>,
1101 fwdtrkcl::IsGoodX<fwdtrkcl::ClInfo>,
1102 fwdtrkcl::IsGoodY<fwdtrkcl::ClInfo>);
1127 hmpid::HMPIDDistance,
1128 hmpid::HMPIDNPhotons,
1139 hmpid::HMPIDNPhotons,
1141 hmpid::HMPIDClusSize,
1143 hmpid::HMPIDPhotsCharge);
1160 calo::Time, calo::CellType, calo::CaloType);
1163namespace calotrigger
1174 calotrigger::LnAmplitude, calotrigger::TriggerBits, calotrigger::CaloType);
1185 return status & 0b00011111;
1188 return 2 + ((status & 0b01100000) >> 5);
1191 return (status & 0b01100000) >> 7;
1196 o2::soa::Index<>, cpvcluster::BCId, cpvcluster::PosX, cpvcluster::PosZ, cpvcluster::Amplitude,
1197 cpvcluster::ClusterStatus, cpvcluster::PadMult<cpvcluster::ClusterStatus>,
1198 cpvcluster::ModuleNumber<cpvcluster::ClusterStatus>, cpvcluster::IsUnfolded<cpvcluster::ClusterStatus>);
1228 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) ->
float {
1230 auto thisenergy = -std::numeric_limits<float>::infinity();
1231 for (uint64_t ie = 0; ie <
channelE.size(); ie++) {
1240 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) ->
float {
1241 auto thisenergy = -std::numeric_limits<float>::infinity();
1242 for (uint64_t ie = 0; ie <
channelE.size(); ie++) {
1251 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) ->
float {
1252 auto thisenergy = -std::numeric_limits<float>::infinity();
1253 for (uint64_t ie = 0; ie <
channelE.size(); ie++) {
1262 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) ->
float {
1263 auto thisenergy = -std::numeric_limits<float>::infinity();
1264 for (uint64_t ie = 0; ie <
channelE.size(); ie++) {
1273 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) ->
float {
1274 auto thisenergy = -std::numeric_limits<float>::infinity();
1275 for (uint64_t ie = 0; ie <
channelE.size(); ie++) {
1284 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) ->
float {
1285 auto thisenergy = -std::numeric_limits<float>::infinity();
1286 for (uint64_t ie = 0; ie <
channelE.size(); ie++) {
1295 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> std::array<float, 4> {
1297 -std::numeric_limits<float>::infinity(),
1298 -std::numeric_limits<float>::infinity(),
1299 -std::numeric_limits<float>::infinity(),
1300 -std::numeric_limits<float>::infinity()};
1314 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> std::array<float, 4> {
1315 std::array<float, 4> thisenergy = {
1316 -std::numeric_limits<float>::infinity(),
1317 -std::numeric_limits<float>::infinity(),
1318 -std::numeric_limits<float>::infinity(),
1319 -std::numeric_limits<float>::infinity()};
1320 for (uint64_t ie = 0; ie < channelE.size(); ie++) {
1322 thisenergy[0] = energy[ie];
1324 thisenergy[1] = energy[ie];
1326 thisenergy[2] = energy[ie];
1328 thisenergy[3] = energy[ie];
1333 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> std::array<float, 4> {
1335 -std::numeric_limits<float>::infinity(),
1336 -std::numeric_limits<float>::infinity(),
1337 -std::numeric_limits<float>::infinity(),
1338 -std::numeric_limits<float>::infinity()};
1339 for (uint64_t ie = 0; ie <
channelE.size(); ie++) {
1352 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> std::array<float, 4> {
1354 -std::numeric_limits<float>::infinity(),
1355 -std::numeric_limits<float>::infinity(),
1356 -std::numeric_limits<float>::infinity(),
1357 -std::numeric_limits<float>::infinity()};
1358 for (uint64_t ie = 0; ie <
channelE.size(); ie++) {
1371 [](gsl::span<const uint8_t> channelT, gsl::span<const float>
time) ->
float {
1372 auto thistime = -std::numeric_limits<float>::infinity();
1373 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1375 thistime =
time[ie];
1382 [](gsl::span<const uint8_t> channelT, gsl::span<const float>
time) ->
float {
1383 auto thistime = -std::numeric_limits<float>::infinity();
1384 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1386 thistime =
time[ie];
1393 [](gsl::span<const uint8_t> channelT, gsl::span<const float>
time) ->
float {
1394 auto thistime = -std::numeric_limits<float>::infinity();
1395 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1397 thistime =
time[ie];
1404 [](gsl::span<const uint8_t> channelT, gsl::span<const float>
time) ->
float {
1405 auto thistime = -std::numeric_limits<float>::infinity();
1406 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1408 thistime =
time[ie];
1415 [](gsl::span<const uint8_t> channelT, gsl::span<const float>
time) ->
float {
1416 auto thistime = -std::numeric_limits<float>::infinity();
1417 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1419 thistime =
time[ie];
1426 [](gsl::span<const uint8_t> channelT, gsl::span<const float>
time) ->
float {
1427 auto thistime = -std::numeric_limits<float>::infinity();
1428 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1430 thistime =
time[ie];
1438 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) ->
float {
1439 auto thisamplitude = -std::numeric_limits<float>::infinity();
1440 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1442 thisamplitude = amplitude[ie];
1446 return thisamplitude;
1449 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) ->
float {
1450 auto thisamplitude = -std::numeric_limits<float>::infinity();
1451 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1453 thisamplitude = amplitude[ie];
1457 return thisamplitude;
1460 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) ->
float {
1461 auto thisamplitude = -std::numeric_limits<float>::infinity();
1462 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1464 thisamplitude = amplitude[ie];
1468 return thisamplitude;
1471 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) ->
float {
1472 auto thisamplitude = -std::numeric_limits<float>::infinity();
1473 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1475 thisamplitude = amplitude[ie];
1479 return thisamplitude;
1482 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) ->
float {
1483 auto thisamplitude = -std::numeric_limits<float>::infinity();
1484 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1486 thisamplitude = amplitude[ie];
1490 return thisamplitude;
1493 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) ->
float {
1494 auto thisamplitude = -std::numeric_limits<float>::infinity();
1495 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1497 thisamplitude = amplitude[ie];
1501 return thisamplitude;
1507 zdc::EnergyCommonZNA, zdc::EnergyCommonZNC, zdc::EnergyCommonZPA, zdc::EnergyCommonZPC,
1508 zdc::EnergySectorZNA, zdc::EnergySectorZNC, zdc::EnergySectorZPA, zdc::EnergySectorZPC,
1509 zdc::TimeZEM1, zdc::TimeZEM2, zdc::TimeZNA, zdc::TimeZNC, zdc::TimeZPA, zdc::TimeZPC);
1513 o2::soa::Index<>, zdc::BCId, zdc::Energy, zdc::ChannelE, zdc::Amplitude, zdc::Time, zdc::ChannelT,
1514 zdc::DyEnergyZEM1<zdc::ChannelE, zdc::Energy>, zdc::DyEnergyZEM2<zdc::ChannelE, zdc::Energy>,
1515 zdc::DyEnergyCommonZNA<zdc::ChannelE, zdc::Energy>, zdc::DyEnergyCommonZNC<zdc::ChannelE, zdc::Energy>,
1516 zdc::DyEnergyCommonZPA<zdc::ChannelE, zdc::Energy>, zdc::DyEnergyCommonZPC<zdc::ChannelE, zdc::Energy>,
1517 zdc::DyEnergySectorZNA<zdc::ChannelE, zdc::Energy>, zdc::DyEnergySectorZNC<zdc::ChannelE, zdc::Energy>,
1518 zdc::DyEnergySectorZPA<zdc::ChannelE, zdc::Energy>, zdc::DyEnergySectorZPC<zdc::ChannelE, zdc::Energy>,
1519 zdc::DyTimeZEM1<zdc::ChannelT, zdc::Time>, zdc::DyTimeZEM2<zdc::ChannelT, zdc::Time>,
1520 zdc::DyTimeZNA<zdc::ChannelT, zdc::Time>, zdc::DyTimeZNC<zdc::ChannelT, zdc::Time>,
1521 zdc::DyTimeZPA<zdc::ChannelT, zdc::Time>, zdc::DyTimeZPC<zdc::ChannelT, zdc::Time>,
1522 zdc::DyAmplitudeZEM1<zdc::ChannelT, zdc::Amplitude>, zdc::DyAmplitudeZEM2<zdc::ChannelT, zdc::Amplitude>,
1523 zdc::DyAmplitudeZNA<zdc::ChannelT, zdc::Amplitude>, zdc::DyAmplitudeZNC<zdc::ChannelT, zdc::Amplitude>,
1524 zdc::DyAmplitudeZPA<zdc::ChannelT, zdc::Amplitude>, zdc::DyAmplitudeZPC<zdc::ChannelT, zdc::Amplitude>);
1539 o2::soa::Index<>, fv0a::BCId, fv0a::Amplitude, fv0a::Channel, fv0a::Time, fv0a::TriggerMask);
1573 return o2::constants::physics::LightSpeedCm2NS * (
timeC -
timeA) / 2;
1580 [](
float timeA) ->
bool {
1581 return timeA < 30.f;
1584 [](
float timeC) ->
bool {
1585 return timeC < 30.f;
1592 [](gsl::span<const float> vecAmpA) ->
float {
1593 return std::accumulate(vecAmpA.begin(), vecAmpA.end(), 0.f, [](
auto&&
sum,
auto&& curr) { return sum + (curr > 0 ? curr : 0); });
1596 [](gsl::span<const float> vecAmpC) ->
float {
1597 return std::accumulate(vecAmpC.begin(), vecAmpC.end(), 0.f, [](
auto&&
sum,
auto&& curr) { return sum + (curr > 0 ? curr : 0); });
1604 ft0::AmplitudeA, ft0::ChannelA, ft0::AmplitudeC, ft0::ChannelC, ft0::TimeA, ft0::TimeC,
1605 ft0::TriggerMask, ft0::PosZ<ft0::TimeA, ft0::TimeC>, ft0::CollTime<ft0::TimeA, ft0::TimeC>,
1606 ft0::IsValidTimeA<ft0::TimeA>, ft0::IsValidTimeC<ft0::TimeC>, ft0::IsValidTime<ft0::TimeA, ft0::TimeC>,
1607 ft0::SumAmpA<ft0::AmplitudeA>, ft0::SumAmpC<ft0::AmplitudeC>);
1612 ft0::TimeFT0A, ft0::TimeFT0C);
1634 fdd::AmplitudeA, fdd::AmplitudeC,
1635 fdd::TimeA, fdd::TimeC,
1641 fdd::ChargeA, fdd::ChargeC,
1642 fdd::TimeA, fdd::TimeC,
1650 fdd::TimeFDDA, fdd::TimeFDDC);
1668 trd::TRDQ0s, trd::TRDQ1s, trd::TRDQ2s,
1669 trd::TRDQ0sCorrected, trd::TRDQ1sCorrected, trd::TRDQ2sCorrected,
1670 trd::TRDTgls, trd::TRDPhis);
1681 [](uint8_t V0Type) ->
bool {
return V0Type == 1; });
1683 [](uint8_t V0Type) ->
bool {
return V0Type & (1 << 1); });
1685 [](uint8_t V0Type) ->
bool {
return V0Type & (1 << 2); });
1691 v0::PosTrackId, v0::NegTrackId);
1694 v0::PosTrackId, v0::NegTrackId);
1697 v0::PosTrackId, v0::NegTrackId,
1699 v0::IsStandardV0<v0::V0Type>,
1700 v0::IsPhotonV0<v0::V0Type>,
1701 v0::IsCollinearV0<v0::V0Type>);
1716 o2::soa::Index<>, cascade::CollisionId, cascade::V0Id, cascade::BachelorId);
1730 o2::soa::Index<>, decay3body::CollisionId, decay3body::Track0Id, decay3body::Track1Id, decay3body::Track2Id);
1735namespace strangenesstracking
1759 strangenesstracking::TrackId,
1760 strangenesstracking::ITSTrackId,
1761 strangenesstracking::CascadeId,
1762 strangenesstracking::DecayX,
1763 strangenesstracking::DecayY,
1764 strangenesstracking::DecayZ,
1765 strangenesstracking::XiMass,
1766 strangenesstracking::OmegaMass,
1767 strangenesstracking::MatchingChi2,
1768 strangenesstracking::TopologyChi2,
1769 strangenesstracking::ITSclsSize);
1773 strangenesstracking::TrackId,
1774 strangenesstracking::ITSTrackId,
1775 strangenesstracking::V0Id,
1776 strangenesstracking::DecayX,
1777 strangenesstracking::DecayY,
1778 strangenesstracking::DecayZ,
1779 strangenesstracking::H3Lmass,
1780 strangenesstracking::H4Lmass,
1781 strangenesstracking::MatchingChi2,
1782 strangenesstracking::TopologyChi2,
1783 strangenesstracking::ITSclsSize);
1787 strangenesstracking::TrackId,
1788 strangenesstracking::ITSTrackId,
1789 strangenesstracking::Decay3BodyId,
1790 strangenesstracking::DecayX,
1791 strangenesstracking::DecayY,
1792 strangenesstracking::DecayZ,
1793 strangenesstracking::H3Lmass,
1794 strangenesstracking::He4Lmass,
1795 strangenesstracking::MatchingChi2,
1796 strangenesstracking::TopologyChi2,
1797 strangenesstracking::ITSclsSize);
1872 run2::TriggerMaskNext50, run2::L0TriggerInputMask,
1873 run2::SPDClustersL0, run2::SPDClustersL1,
1874 run2::SPDFiredChipsL0, run2::SPDFiredChipsL1,
1875 run2::SPDFiredFastOrL0, run2::SPDFiredFastOrL1,
1876 run2::V0TriggerChargeA, run2::V0TriggerChargeC);
1880 run2::TriggerMaskNext50, run2::L0TriggerInputMask,
1881 run2::SPDClustersL0, run2::SPDClustersL1,
1882 run2::SPDFiredChipsL0, run2::SPDFiredChipsL1,
1883 run2::SPDFiredFastOrL0, run2::SPDFiredFastOrL1,
1884 run2::V0TriggerChargeA, run2::V0TriggerChargeC,
1885 run2::NTPCClusters, run2::NSDDSSDClusters);
1892 run2::oftv0::CollisionId, run2::oftv0::PosTrackId, run2::oftv0::NegTrackId,
1893 run2::oftv0::Px, run2::oftv0::Py, run2::oftv0::Pz, run2::oftv0::E,
1894 run2::oftv0::Qt, run2::oftv0::Alpha,
1895 run2::oftv0::X, run2::oftv0::Y, run2::oftv0::Z,
1896 run2::oftv0::Chi2NDF, run2::oftv0::PsiPair,
1897 run2::oftv0::DCAr, run2::oftv0::DCAz,
1898 run2::oftv0::MassInMeV);
1904 run2::pmd::Z, run2::pmd::CluADC, run2::pmd::CluPID, run2::pmd::Det,
1905 run2::pmd::Ncell, run2::pmd::Smn, run2::pmd::TrackNo, run2::pmd::TrackPid,
1906 run2::pmd::SigX, run2::pmd::SigY, run2::pmd::ClMatching);
1911namespace mccollision
1933 mccollision::GeneratorsID,
1934 mccollision::PosX, mccollision::PosY, mccollision::PosZ,
1935 mccollision::T, mccollision::Weight,
1936 mccollision::ImpactParameter,
1937 mccollision::GetGeneratorId<mccollision::GeneratorsID>,
1938 mccollision::GetSubGeneratorId<mccollision::GeneratorsID>,
1939 mccollision::GetSourceId<mccollision::GeneratorsID>);
1942 mccollision::GeneratorsID,
1943 mccollision::PosX, mccollision::PosY, mccollision::PosZ,
1944 mccollision::T, mccollision::Weight,
1945 mccollision::ImpactParameter,
1946 mccollision::EventPlaneAngle,
1947 mccollision::GetGeneratorId<mccollision::GeneratorsID>,
1948 mccollision::GetSubGeneratorId<mccollision::GeneratorsID>,
1949 mccollision::GetSourceId<mccollision::GeneratorsID>);
1951template <aod::is_origin_hash O>
1990 [](
float px,
float py,
float pz) -> std::array<float, 3> {
return std::array<float, 3>{px, py, pz}; });
1993 o2::constants::math::PI +
natan2(-1.0f * aod::mcparticle::py, -1.0f * aod::mcparticle::px));
1995 ifnode((nsqrt(aod::mcparticle::px * aod::mcparticle::px +
1996 aod::mcparticle::py * aod::mcparticle::py +
1997 aod::mcparticle::pz * aod::mcparticle::pz) -
1998 aod::mcparticle::pz) <
static_cast<float>(1e-7),
1999 ifnode(aod::mcparticle::pz < 0.f, -100.f, 100.f),
2000 0.5f * nlog((nsqrt(aod::mcparticle::px * aod::mcparticle::px +
2001 aod::mcparticle::py * aod::mcparticle::py +
2002 aod::mcparticle::pz * aod::mcparticle::pz) +
2003 aod::mcparticle::pz) /
2004 (nsqrt(aod::mcparticle::px * aod::mcparticle::px +
2005 aod::mcparticle::py * aod::mcparticle::py +
2006 aod::mcparticle::pz * aod::mcparticle::pz) -
2007 aod::mcparticle::pz))));
2009 nsqrt(aod::mcparticle::px* aod::mcparticle::px +
2010 aod::mcparticle::py * aod::mcparticle::py));
2012 nsqrt(aod::mcparticle::px* aod::mcparticle::px +
2013 aod::mcparticle::py * aod::mcparticle::py +
2014 aod::mcparticle::pz * aod::mcparticle::pz));
2016 ifnode((aod::mcparticle::e - aod::mcparticle::pz) <
static_cast<float>(1e-7),
2017 ifnode(aod::mcparticle::pz < 0.f, -100.f, 100.f),
2018 0.5f * nlog((aod::mcparticle::e + aod::mcparticle::pz) /
2019 (aod::mcparticle::e - aod::mcparticle::pz))));
2022namespace mcparticle_v2
2040 mcparticle::PdgCode, mcparticle::StatusCode, mcparticle_v2::Flags,
2041 mcparticle::Mother0Id, mcparticle::Mother1Id,
2042 mcparticle::Daughter0Id, mcparticle::Daughter1Id, mcparticle::Weight,
2043 mcparticle::Px, mcparticle::Py, mcparticle::Pz, mcparticle::E,
2044 mcparticle::Vx, mcparticle::Vy, mcparticle::Vz, mcparticle::Vt,
2045 mcparticle::PVector<mcparticle::Px, mcparticle::Py, mcparticle::Pz>,
2046 mcparticle::ProducedByGenerator<mcparticle_v2::Flags>,
2047 mcparticle::FromBackgroundEvent<mcparticle_v2::Flags>,
2048 mcparticle::GetGenStatusCode<mcparticle_v2::Flags, mcparticle::StatusCode>,
2049 mcparticle::GetHepMCStatusCode<mcparticle_v2::Flags, mcparticle::StatusCode>,
2050 mcparticle::GetProcess<mcparticle_v2::Flags, mcparticle::StatusCode>,
2051 mcparticle_v2::ProtectedFlags<mcparticle_v2::Flags, mcparticle::Vx, mcparticle::Vy>,
2052 mcparticle_v2::IsPhysicalPrimary<mcparticle_v2::Flags, mcparticle::Vx, mcparticle::Vy>);
2056 mcparticle::PdgCode, mcparticle::StatusCode, mcparticle_v2::Flags,
2057 mcparticle::MothersIds, mcparticle::DaughtersIdSlice, mcparticle::Weight,
2058 mcparticle::Px, mcparticle::Py, mcparticle::Pz, mcparticle::E,
2059 mcparticle::Vx, mcparticle::Vy, mcparticle::Vz, mcparticle::Vt,
2060 mcparticle::PVector<mcparticle::Px, mcparticle::Py, mcparticle::Pz>,
2061 mcparticle::ProducedByGenerator<mcparticle_v2::Flags>,
2062 mcparticle::FromBackgroundEvent<mcparticle_v2::Flags>,
2063 mcparticle::GetGenStatusCode<mcparticle_v2::Flags, mcparticle::StatusCode>,
2064 mcparticle::GetHepMCStatusCode<mcparticle_v2::Flags, mcparticle::StatusCode>,
2065 mcparticle::GetProcess<mcparticle_v2::Flags, mcparticle::StatusCode>,
2066 mcparticle_v2::ProtectedFlags<mcparticle_v2::Flags, mcparticle::Vx, mcparticle::Vy>,
2067 mcparticle_v2::IsPhysicalPrimary<mcparticle_v2::Flags, mcparticle::Vx, mcparticle::Vy>);
2083template <aod::is_origin_hash O>
2089template <aod::is_origin_hash O>
2112namespace mctracklabel
2119 mctracklabel::McParticleId, mctracklabel::McMask);
2122namespace mcmfttracklabel
2129 mcmfttracklabel::McParticleId, mcmfttracklabel::McMask);
2132namespace mcfwdtracklabel
2139 mcfwdtracklabel::McParticleId, mcfwdtracklabel::McMask);
2142namespace mccalolabel
2151 mccalolabel::McParticleId, mccalolabel::McMask);
2153 mccalolabel::McParticleIds, mccalolabel::AmplitudeA);
2157namespace mccollisionlabel
2164 mccollisionlabel::McCollisionId, mccollisionlabel::McMask);
2168namespace hepmcxsection
2182 o2::soa::Index<>, hepmcxsection::McCollisionId, hepmcxsection::GeneratorsID,
2183 hepmcxsection::Accepted, hepmcxsection::Attempted, hepmcxsection::XsectGen,
2184 hepmcxsection::XsectErr, hepmcxsection::PtHard, hepmcxsection::NMPI, hepmcxsection::ProcessId);
2187namespace hepmcpdfinfo
2204 hepmcpdfinfo::Id1, hepmcpdfinfo::Id2,
2205 hepmcpdfinfo::PdfId1, hepmcpdfinfo::PdfId2,
2206 hepmcpdfinfo::X1, hepmcpdfinfo::X2,
2207 hepmcpdfinfo::ScalePdf, hepmcpdfinfo::Pdf1, hepmcpdfinfo::Pdf2);
2210namespace hepmcheavyion
2231 o2::soa::Index<>, hepmcheavyion::McCollisionId, hepmcheavyion::GeneratorsID,
2232 hepmcheavyion::NcollHard, hepmcheavyion::NpartProj, hepmcheavyion::NpartTarg,
2233 hepmcheavyion::Ncoll, hepmcheavyion::NNwoundedCollisions, hepmcheavyion::NwoundedNCollisions,
2234 hepmcheavyion::NwoundedNwoundedCollisions, hepmcheavyion::SpectatorNeutrons,
2235 hepmcheavyion::SpectatorProtons, hepmcheavyion::ImpactParameter, hepmcheavyion::EventPlaneAngle,
2236 hepmcheavyion::Eccentricity, hepmcheavyion::SigmaInelNN, hepmcheavyion::Centrality);
2254#define INDEX_LIST_RUN2 indices::CollisionId, indices::ZdcId, indices::BCId, indices::FT0Id, indices::FV0AId, indices::FV0CId, indices::FDDId
2258#define INDEX_LIST_RUN3 indices::CollisionId, indices::ZdcId, indices::BCId, indices::FT0Id, indices::FV0AId, indices::FDDId
2264 indices::BCId, indices::CollisionId);
2266 indices::BCId, indices::CollisionId);
2269 indices::BCId, indices::CollisionIds);
2271 indices::BCId, indices::CollisionIds);
2274 indices::BCId, indices::ZdcId, indices::FT0Id, indices::FV0AId, indices::FDDId);
2276 indices::BCId, indices::ZdcId, indices::FT0Id, indices::FV0AId, indices::FDDId);
2279 indices::BCId, indices::ZdcId, indices::FT0Id, indices::FV0AId, indices::FV0CId, indices::FDDId);
#define DECLARE_SOA_ARRAY_INDEX_COLUMN(_Name_, _Getter_)
#define DECLARE_SOA_SELF_INDEX_COLUMN_FULL(_Name_, _Getter_, _Type_, _Label_)
#define DECLARE_SOA_SLICE_INDEX_COLUMN(_Name_, _Getter_)
#define DECLARE_SOA_EXTENDED_TABLE_NG(_Name_, _OriginalTable_, _Desc_, _Version_,...)
#define DECLARE_SOA_DYNAMIC_COLUMN(_Name_, _Getter_,...)
#define DECLARE_SOA_TABLE(_Name_, _Origin_, _Desc_,...)
#define DECLARE_SOA_EXPRESSION_COLUMN(_Name_, _Getter_, _Type_, _Expression_)
#define DECLARE_SOA_COLUMN(_Name_, _Getter_, _Type_)
#define DECLARE_SOA_INDEX_COLUMN_FULL(_Name_, _Getter_, _Type_, _Table_, _Suffix_)
#define DECLARE_EQUIVALENT_FOR_INDEX(_Base_, _Equiv_)
#define DECLARE_SOA_SELF_SLICE_INDEX_COLUMN(_Name_, _Getter_)
#define DECLARE_SOA_TABLE_FULL(_Name_, _Label_, _Origin_, _Desc_,...)
#define DECLARE_EQUIVALENT_FOR_INDEX_NG(_Base_, _Equiv_)
#define DECLARE_SOA_TABLE_VERSIONED(_Name_, _Origin_, _Desc_, _Version_,...)
#define DECLARE_SOA_INDEX_COLUMN(_Name_, _Getter_)
#define DECLARE_SOA_TABLE_FULL_VERSIONED(_Name_, _Label_, _Origin_, _Desc_, _Version_,...)
#define DECLARE_SOA_EXTENDED_TABLE(_Name_, _Table_, _Description_, _Version_,...)
#define DECLARE_SOA_INDEX_TABLE_EXCLUSIVE(_Name_, _Key_, _Description_,...)
#define DECLARE_SOA_INDEX_TABLE(_Name_, _Key_, _Description_,...)
#define DECLARE_SOA_SELF_ARRAY_INDEX_COLUMN(_Name_, _Getter_)
TOF PID utilities to work with the information stored in the AO2D.
std::vector< double > sum
Some ALICE geometry constants of common interest.
Header to collect physics constants.
Some ZDC constants shared between O2 and O2Physics.
GLfloat GLfloat GLfloat alpha
GLuint GLfloat GLfloat GLfloat x1
GLuint GLuint GLfloat weight
GLuint GLsizei GLsizei * length
GLsizei GLenum const void * indices
GLenum GLuint GLint GLint layer
GLdouble GLdouble GLdouble z
o2::constants::math::PI natan2(-1.0f *aod::mcparticle::py, -1.0f *aod::mcparticle::px))
uint8_t itsSharedClusterMap uint8_t
ifnode(nasin(aod::track::snp)+aod::track::alpha< 0.0f, nasin(aod::track::snp)+aod::track::alpha+o2::constants::math::TwoPI, ifnode(nasin(aod::track::snp)+aod::track::alpha >=o2::constants::math::TwoPI, nasin(aod::track::snp)+aod::track::alpha - o2::constants::math::TwoPI, nasin(aod::track::snp)+aod::track::alpha)))
(sign of charge)/Pt in c/GeV. Use pt() and sign() instead
gsl::span< const uint8_t > channelE
McParticles::iterator McParticle
StoredMcParticles_001 StoredMcParticles
TrackedV0s::iterator TrackedV0
FT0sExtra::iterator FT0Extra
McParticles_001 McParticles
FullTracks::iterator FullTrack
TRDsExtra::iterator TRDExtra
FDDsExtra::iterator FDDExtra
HepMCHeavyIons::iterator HepMCHeavyIon
Tracked3Bodys Tracked3Bodys
TracksExtra::iterator TrackExtra
TrackedCascades TrackedCascades
McCollisions_001 McCollisions
AmbiguousMFTTracks::iterator AmbiguousMFTTrack
McParticles_001From< O > McParticlesFrom
Zdcs::iterator Zdc
new version
TracksQA_003 TracksQAVersion
FDDs::iterator FDD
this defines the current default version
AmbiguousFwdTracks::iterator AmbiguousFwdTrack
Run2OTFV0s::iterator Run2OTFV0
FV0AsExtra::iterator FV0AExtra
StoredTracksExtra_002 StoredTracksExtra
HepMCXSections::iterator HepMCXSection
McFwdTrackLabels::iterator McFwdTrackLabel
TracksExtra_002From< O > TracksExtraFrom
McCaloLabels::iterator McCaloLabel
Run2TrackExtras::iterator Run2TrackExtra
McCollisions::iterator McCollision
FwdTracksCov::iterator FwdTrackCovFwd
Collisions_001 Collisions
soa::Join< Collisions, Run2MatchedSparse >::iterator CollisionMatchedRun2Sparse
AmbiguousTracks::iterator AmbiguousTrack
TracksQAVersion::iterator TracksQA
MFTTracks_001From< O > MFTTracksFrom
FwdTrkCls::iterator FwdTrkCl
Run2TrackExtras_001 Run2TrackExtras
CPVClusters::iterator CPVCluster
McCollisionLabels::iterator McCollisionLabel
FwdTracks::iterator FwdTrack
TracksIU::iterator TrackIU
Cascades::iterator Cascade
this defines the current default version
McMFTTrackLabels::iterator McMFTTrackLabel
TracksCov::iterator TrackCov
HepMCPdfInfos::iterator HepMCPdfInfo
TracksExtra_002 TracksExtra
StoredMFTTracks_001 StoredMFTTracks
Decay3Bodys::iterator Decay3Body
this defines the current default version
McCollisions_001From< O > McCollisionsFrom
FullFwdTracks::iterator FullFwdTrack
TracksCovIU::iterator TrackCovIU
Run2BCInfos::iterator Run2BCInfo
McCaloLabels_000 McCaloLabels
Collisions_001From< O > CollisionsFrom
soa::Join< Collisions, Run3MatchedSparse >::iterator CollisionMatchedRun3Sparse
CaloTriggers::iterator CaloTrigger
Tracked3Bodys::iterator Tracked3body
McTrackLabels::iterator McTrackLabel
MFTTracksCov::iterator MFTTrackCovFwd
Run2BCInfos_001 Run2BCInfos
TrackedCascades::iterator TrackedCascade
Collisions::iterator Collision
MFTTracks::iterator MFTTrack
constexpr float XBeamPipeOuterRef
inner radius of the beam pipe
float MassToExpTime(float tofExpMom, float length, float massSquared)
Compute the expected time of flight for a given momentum, length and massSquared.
int getSourceId(short encoded)
int getGeneratorId(short encoded)
int getSubGeneratorId(short encoded)
int getGenStatusCode(MCGenStatusEncoding enc)
int getHepMCStatusCode(MCGenStatusEncoding enc)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
static uint8_t removeIsPhysicalPrimaryBit(uint8_t input_flags, float vx, float vy)
float getDeltaTFwd() const
union o2::aod::track::extensions::TPCTimeErrEncoding::TPCDeltaTime encoding
table_t::template iterator_template< DefaultIndexPolicy, self_t, Ts... > iterator