Project
Loading...
Searching...
No Matches
AnalysisDataModel.h
Go to the documentation of this file.
1// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11#ifndef O2_FRAMEWORK_ANALYSISDATAMODEL_H_
12#define O2_FRAMEWORK_ANALYSISDATAMODEL_H_
13
14#include "Framework/ASoA.h" // IWYU pragma: export
15
16#include <cmath>
17#include <bitset>
18#include <limits>
19#include <numeric>
20
21#include "Framework/DataTypes.h"
27#include "Framework/PID.h"
28
29namespace o2
30{
31namespace aod
32{
33namespace bc
34{
35DECLARE_SOA_COLUMN(RunNumber, runNumber, int);
36DECLARE_SOA_COLUMN(GlobalBC, globalBC, uint64_t);
37DECLARE_SOA_COLUMN(TriggerMask, triggerMask, uint64_t);
38DECLARE_SOA_COLUMN(InputMask, inputMask, uint64_t);
39DECLARE_SOA_COLUMN(Flags, flags, uint8_t);
40} // namespace bc
41
42DECLARE_SOA_TABLE(BCs_000, "AOD", "BC",
44 bc::RunNumber, bc::GlobalBC,
45 bc::TriggerMask);
46DECLARE_SOA_TABLE_VERSIONED(BCs_001, "AOD", "BC", 1,
48 bc::RunNumber, bc::GlobalBC,
49 bc::TriggerMask, bc::InputMask);
50DECLARE_SOA_TABLE(BCFlags, "AOD", "BCFLAG",
51 bc::Flags);
52
53using BCs = BCs_001; // current version
54using BC = BCs::iterator;
55
56namespace timestamp
57{
58DECLARE_SOA_COLUMN(Timestamp, timestamp, uint64_t);
59} // namespace timestamp
60
61DECLARE_SOA_TABLE(Timestamps, "AOD", "TIMESTAMPS",
62 timestamp::Timestamp);
63
65} // namespace aod
66
67namespace soa
68{
69extern template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::BCs, aod::Timestamps>;
70}
71namespace aod
72{
73namespace collision
74{
76DECLARE_SOA_COLUMN(PosX, posX, float);
77DECLARE_SOA_COLUMN(PosY, posY, float);
78DECLARE_SOA_COLUMN(PosZ, posZ, float);
79DECLARE_SOA_COLUMN(CovXX, covXX, float);
80DECLARE_SOA_COLUMN(CovXY, covXY, float);
81DECLARE_SOA_COLUMN(CovXZ, covXZ, float);
82DECLARE_SOA_COLUMN(CovYY, covYY, float);
83DECLARE_SOA_COLUMN(CovYZ, covYZ, float);
84DECLARE_SOA_COLUMN(CovZZ, covZZ, float);
85DECLARE_SOA_COLUMN(Flags, flags, uint16_t);
86DECLARE_SOA_COLUMN(Chi2, chi2, float);
87DECLARE_SOA_COLUMN(NumContrib, numContrib, uint16_t);
88DECLARE_SOA_COLUMN(CollisionTime, collisionTime, float);
89DECLARE_SOA_COLUMN(CollisionTimeRes, collisionTimeRes, float);
90} // namespace collision
91
92DECLARE_SOA_TABLE(Collisions_000, "AOD", "COLLISION",
93 o2::soa::Index<>, collision::BCId,
94 collision::PosX, collision::PosY, collision::PosZ,
95 collision::CovXX, collision::CovXY, collision::CovXZ, collision::CovYY, collision::CovYZ, collision::CovZZ,
96 collision::Flags, collision::Chi2, collision::NumContrib,
97 collision::CollisionTime, collision::CollisionTimeRes);
98
99DECLARE_SOA_TABLE_VERSIONED(Collisions_001, "AOD", "COLLISION", 1,
100 o2::soa::Index<>, collision::BCId,
101 collision::PosX, collision::PosY, collision::PosZ,
102 collision::CovXX, collision::CovXY, collision::CovYY, collision::CovXZ, collision::CovYZ, collision::CovZZ,
103 collision::Flags, collision::Chi2, collision::NumContrib,
104 collision::CollisionTime, collision::CollisionTimeRes);
105
106using Collisions = Collisions_001; // current version
107using Collision = Collisions::iterator;
108
109// NOTE Relation between Collisions and BC table
110// (important for pp in case of ambiguous assignment)
111// A collision entry points to the entry in the BC table based on the calculated BC from the collision time
112// To study other compatible triggers with the collision time, check the tutorial: compatibleBCs.cxx
113
114namespace track
115{
116// TRACKPAR TABLE definition
118DECLARE_SOA_COLUMN(TrackType, trackType, uint8_t);
120DECLARE_SOA_COLUMN(Alpha, alpha, float);
123DECLARE_SOA_COLUMN(Snp, snp, float);
124DECLARE_SOA_COLUMN(Tgl, tgl, float);
125DECLARE_SOA_COLUMN(Signed1Pt, signed1Pt, float);
126DECLARE_SOA_EXPRESSION_COLUMN(Phi, phi, float,
127 ifnode(nasin(aod::track::snp) + aod::track::alpha < 0.0f, nasin(aod::track::snp) + aod::track::alpha + o2::constants::math::TwoPI,
128 ifnode(nasin(aod::track::snp) + aod::track::alpha >= o2::constants::math::TwoPI, nasin(aod::track::snp) + aod::track::alpha - o2::constants::math::TwoPI,
129 nasin(aod::track::snp) + aod::track::alpha)));
131 -1.f * nlog(ntan(o2::constants::math::PIQuarter - 0.5f * natan(aod::track::tgl))));
133 ifnode(nabs(aod::track::signed1Pt) <= o2::constants::math::Almost0, o2::constants::math::VeryBig, nabs(1.f / aod::track::signed1Pt)));
134DECLARE_SOA_DYNAMIC_COLUMN(IsWithinBeamPipe, isWithinBeamPipe,
135 [](float x) -> bool { return (std::fabs(x) < o2::constants::geom::XBeamPipeOuterRef); });
137 [](float signed1Pt) -> short { return (signed1Pt > 0) ? 1 : -1; });
139 [](float signed1Pt, float snp, float alpha) -> float {
140 auto pt = 1.f / std::abs(signed1Pt);
141 // FIXME: GCC & clang should optimize to sincosf
142 float cs = cosf(alpha), sn = sinf(alpha);
143 auto r = std::sqrt((1.f - snp) * (1.f + snp));
144 return pt * (r * cs - snp * sn);
145 });
147 [](float signed1Pt, float snp, float alpha) -> float {
148 auto pt = 1.f / std::abs(signed1Pt);
149 // FIXME: GCC & clang should optimize to sincosf
150 float cs = cosf(alpha), sn = sinf(alpha);
151 auto r = std::sqrt((1.f - snp) * (1.f + snp));
152 return pt * (snp * cs + r * sn);
153 });
155 [](float signed1Pt, float tgl) -> float {
156 auto pt = 1.f / std::abs(signed1Pt);
157 return pt * tgl;
158 });
160 [](float signed1Pt, float snp, float alpha, float tgl) -> std::array<float, 3> {
161 const auto pt = 1.f / std::abs(signed1Pt);
162 // FIXME: GCC & clang should optimize to sincosf
163 const float cs = cosf(alpha), sn = sinf(alpha);
164 const auto r = std::sqrt((1.f - snp) * (1.f + snp));
165 const auto px = pt * (r * cs - snp * sn);
166 const auto py = pt * (snp * cs + r * sn);
167 const auto pz = pt * tgl;
168 return std::array<float, 3>{px, py, pz};
169 });
171 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)));
173 [](float signed1Pt, float tgl, float mass) -> float {
174 const auto pt = 1.f / std::abs(signed1Pt);
175 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;
176 return std::sqrt(p * p + mass * mass);
177 });
178DECLARE_SOA_DYNAMIC_COLUMN(Rapidity, rapidity,
179 [](float signed1Pt, float tgl, float mass) -> float {
180 const auto pt = 1.f / std::abs(signed1Pt);
181 const auto pz = pt * tgl;
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 const auto energy = std::sqrt(p * p + mass * mass);
184 return 0.5f * std::log((energy + pz) / (energy - pz));
185 });
186
187// TRACKPARCOV TABLE definition
188DECLARE_SOA_COLUMN(SigmaY, sigmaY, float);
189DECLARE_SOA_COLUMN(SigmaZ, sigmaZ, float);
190DECLARE_SOA_COLUMN(SigmaSnp, sigmaSnp, float);
191DECLARE_SOA_COLUMN(SigmaTgl, sigmaTgl, float);
192DECLARE_SOA_COLUMN(Sigma1Pt, sigma1Pt, float);
193DECLARE_SOA_COLUMN(RhoZY, rhoZY, int8_t);
194DECLARE_SOA_COLUMN(RhoSnpY, rhoSnpY, int8_t);
195DECLARE_SOA_COLUMN(RhoSnpZ, rhoSnpZ, int8_t);
196DECLARE_SOA_COLUMN(RhoTglY, rhoTglY, int8_t);
197DECLARE_SOA_COLUMN(RhoTglZ, rhoTglZ, int8_t);
198DECLARE_SOA_COLUMN(RhoTglSnp, rhoTglSnp, int8_t);
199DECLARE_SOA_COLUMN(Rho1PtY, rho1PtY, int8_t);
200DECLARE_SOA_COLUMN(Rho1PtZ, rho1PtZ, int8_t);
201DECLARE_SOA_COLUMN(Rho1PtSnp, rho1PtSnp, int8_t);
202DECLARE_SOA_COLUMN(Rho1PtTgl, rho1PtTgl, int8_t);
203
205 aod::track::sigmaY* aod::track::sigmaY);
207 (aod::track::rhoZY / 128.f) * (aod::track::sigmaZ * aod::track::sigmaY));
209 aod::track::sigmaZ* aod::track::sigmaZ);
210DECLARE_SOA_EXPRESSION_COLUMN(CSnpY, cSnpY, float,
211 (aod::track::rhoSnpY / 128.f) * (aod::track::sigmaSnp * aod::track::sigmaY));
212DECLARE_SOA_EXPRESSION_COLUMN(CSnpZ, cSnpZ, float,
213 (aod::track::rhoSnpZ / 128.f) * (aod::track::sigmaSnp * aod::track::sigmaZ));
214DECLARE_SOA_EXPRESSION_COLUMN(CSnpSnp, cSnpSnp, float,
215 aod::track::sigmaSnp* aod::track::sigmaSnp);
216DECLARE_SOA_EXPRESSION_COLUMN(CTglY, cTglY, float,
217 (aod::track::rhoTglY / 128.f) * (aod::track::sigmaTgl * aod::track::sigmaY));
218DECLARE_SOA_EXPRESSION_COLUMN(CTglZ, cTglZ, float,
219 (aod::track::rhoTglZ / 128.f) * (aod::track::sigmaTgl * aod::track::sigmaZ));
220DECLARE_SOA_EXPRESSION_COLUMN(CTglSnp, cTglSnp, float,
221 (aod::track::rhoTglSnp / 128.f) * (aod::track::sigmaTgl * aod::track::sigmaSnp));
222DECLARE_SOA_EXPRESSION_COLUMN(CTglTgl, cTglTgl, float,
223 aod::track::sigmaTgl* aod::track::sigmaTgl);
224DECLARE_SOA_EXPRESSION_COLUMN(C1PtY, c1PtY, float,
225 (aod::track::rho1PtY / 128.f) * (aod::track::sigma1Pt * aod::track::sigmaY));
226DECLARE_SOA_EXPRESSION_COLUMN(C1PtZ, c1PtZ, float,
227 (aod::track::rho1PtZ / 128.f) * (aod::track::sigma1Pt * aod::track::sigmaZ));
228DECLARE_SOA_EXPRESSION_COLUMN(C1PtSnp, c1PtSnp, float,
229 (aod::track::rho1PtSnp / 128.f) * (aod::track::sigma1Pt * aod::track::sigmaSnp));
230DECLARE_SOA_EXPRESSION_COLUMN(C1PtTgl, c1PtTgl, float,
231 (aod::track::rho1PtTgl / 128.f) * (aod::track::sigma1Pt * aod::track::sigmaTgl));
232DECLARE_SOA_EXPRESSION_COLUMN(C1Pt21Pt2, c1Pt21Pt2, float,
233 aod::track::sigma1Pt* aod::track::sigma1Pt);
234
235// TRACKEXTRA TABLE definition
236DECLARE_SOA_COLUMN(TPCInnerParam, tpcInnerParam, float);
237DECLARE_SOA_COLUMN(Flags, flags, uint32_t);
238DECLARE_SOA_COLUMN(ITSClusterSizes, itsClusterSizes, uint32_t);
239DECLARE_SOA_COLUMN(ITSClusterMap, itsClusterMap, uint8_t);
240DECLARE_SOA_COLUMN(TPCNClsFindable, tpcNClsFindable, uint8_t);
241DECLARE_SOA_COLUMN(TPCNClsFindableMinusFound, tpcNClsFindableMinusFound, int8_t);
242DECLARE_SOA_COLUMN(TPCNClsFindableMinusPID, tpcNClsFindableMinusPID, int8_t);
243DECLARE_SOA_COLUMN(TPCNClsFindableMinusCrossedRows, tpcNClsFindableMinusCrossedRows, int8_t);
244DECLARE_SOA_COLUMN(TPCNClsShared, tpcNClsShared, uint8_t);
245DECLARE_SOA_COLUMN(ITSSharedClusterMap, itsSharedClusterMap, uint8_t);
246DECLARE_SOA_COLUMN(TRDPattern, trdPattern, uint8_t);
247DECLARE_SOA_COLUMN(ITSChi2NCl, itsChi2NCl, float);
248DECLARE_SOA_COLUMN(TPCChi2NCl, tpcChi2NCl, float);
249DECLARE_SOA_COLUMN(TRDChi2, trdChi2, float);
250DECLARE_SOA_COLUMN(TOFChi2, tofChi2, float);
251DECLARE_SOA_COLUMN(ITSSignal, itsSignal, float);
252DECLARE_SOA_COLUMN(TPCSignal, tpcSignal, float);
253DECLARE_SOA_COLUMN(TRDSignal, trdSignal, float);
254DECLARE_SOA_COLUMN(Length, length, float);
255DECLARE_SOA_COLUMN(TOFExpMom, tofExpMom, float);
256DECLARE_SOA_COLUMN(TrackEtaEMCAL, trackEtaEmcal, float);
257DECLARE_SOA_COLUMN(TrackPhiEMCAL, trackPhiEmcal, float);
258DECLARE_SOA_COLUMN(TrackTime, trackTime, float);
259DECLARE_SOA_COLUMN(TrackTimeRes, trackTimeRes, float);
260
261// expression columns changing between versions have to be declared in different namespaces
262
263DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t,
264 ifnode(aod::track::itsClusterMap > (uint8_t)0, static_cast<uint8_t>(o2::aod::track::ITS), (uint8_t)0x0) |
265 ifnode(aod::track::tpcNClsFindable > (uint8_t)0, static_cast<uint8_t>(o2::aod::track::TPC), (uint8_t)0x0) |
266 ifnode(aod::track::trdPattern > (uint8_t)0, static_cast<uint8_t>(o2::aod::track::TRD), (uint8_t)0x0) |
267 ifnode((aod::track::tofChi2 >= 0.f) && (aod::track::tofExpMom > 0.f), static_cast<uint8_t>(o2::aod::track::TOF), (uint8_t)0x0));
268
269DECLARE_SOA_DYNAMIC_COLUMN(TOFExpTimeEl, tofExpTimeEl,
270 [](float length, float tofExpMom) -> float {
272 return o2::framework::pid::tof::MassToExpTime(tofExpMom, length, massSquared);
273 });
274
275DECLARE_SOA_DYNAMIC_COLUMN(TOFExpTimeMu, tofExpTimeMu,
276 [](float length, float tofExpMom) -> float {
278 return o2::framework::pid::tof::MassToExpTime(tofExpMom, length, massSquared);
279 });
280
281DECLARE_SOA_DYNAMIC_COLUMN(TOFExpTimePi, tofExpTimePi,
282 [](float length, float tofExpMom) -> float {
284 return o2::framework::pid::tof::MassToExpTime(tofExpMom, length, massSquared);
285 });
286
287DECLARE_SOA_DYNAMIC_COLUMN(TOFExpTimeKa, tofExpTimeKa,
288 [](float length, float tofExpMom) -> float {
290 return o2::framework::pid::tof::MassToExpTime(tofExpMom, length, massSquared);
291 });
292
293DECLARE_SOA_DYNAMIC_COLUMN(TOFExpTimePr, tofExpTimePr,
294 [](float length, float tofExpMom) -> float {
296 return o2::framework::pid::tof::MassToExpTime(tofExpMom, length, massSquared);
297 });
298
299DECLARE_SOA_DYNAMIC_COLUMN(TOFExpTimeDe, tofExpTimeDe,
300 [](float length, float tofExpMom) -> float {
302 return o2::framework::pid::tof::MassToExpTime(tofExpMom, length, massSquared);
303 });
304
305DECLARE_SOA_DYNAMIC_COLUMN(TOFExpTimeTr, tofExpTimeTr,
306 [](float length, float tofExpMom) -> float {
308 return o2::framework::pid::tof::MassToExpTime(tofExpMom, length, massSquared);
309 });
310
311DECLARE_SOA_DYNAMIC_COLUMN(TOFExpTimeHe, tofExpTimeHe,
312 [](float length, float tofExpMom) -> float {
314 return o2::framework::pid::tof::MassToExpTime(tofExpMom, length, massSquared);
315 });
316
317DECLARE_SOA_DYNAMIC_COLUMN(TOFExpTimeAl, tofExpTimeAl,
318 [](float length, float tofExpMom) -> float {
320 return o2::framework::pid::tof::MassToExpTime(tofExpMom, length, massSquared);
321 });
322
323namespace v001
324{
325DECLARE_SOA_EXPRESSION_COLUMN(DetectorMap, detectorMap, uint8_t,
326 ifnode(aod::track::itsClusterSizes > (uint32_t)0, static_cast<uint8_t>(o2::aod::track::ITS), (uint8_t)0x0) |
327 ifnode(aod::track::tpcNClsFindable > (uint8_t)0, static_cast<uint8_t>(o2::aod::track::TPC), (uint8_t)0x0) |
328 ifnode(aod::track::trdPattern > (uint8_t)0, static_cast<uint8_t>(o2::aod::track::TRD), (uint8_t)0x0) |
329 ifnode((aod::track::tofChi2 >= 0.f) && (aod::track::tofExpMom > 0.f), static_cast<uint8_t>(o2::aod::track::TOF), (uint8_t)0x0));
330DECLARE_SOA_DYNAMIC_COLUMN(ITSClusterMap, itsClusterMap,
331 [](uint32_t itsClusterSizes) -> uint8_t {
332 uint8_t clmap = 0;
333 for (unsigned int layer = 0; layer < 7; layer++) {
334 if ((itsClusterSizes >> (layer * 4)) & 0xf) {
335 clmap |= (1 << layer);
336 }
337 }
338 return clmap;
339 });
341 [](uint32_t itsClusterSizes) -> uint8_t {
342 uint8_t itsNcls = 0;
343 for (int layer = 0; layer < 7; layer++) {
344 if ((itsClusterSizes >> (layer * 4)) & 0xf)
345 itsNcls++;
346 }
347 return itsNcls;
348 });
349DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel,
350 [](uint32_t itsClusterSizes) -> uint8_t {
351 uint8_t itsNclsInnerBarrel = 0;
352 for (int layer = 0; layer < 3; layer++) {
353 if ((itsClusterSizes >> (layer * 4)) & 0xf)
354 itsNclsInnerBarrel++;
355 }
356 return itsNclsInnerBarrel;
357 });
358DECLARE_SOA_DYNAMIC_COLUMN(ITSClsSizeInLayer, itsClsSizeInLayer,
359 [](uint32_t itsClusterSizes, int layer) -> uint8_t {
360 if (layer >= 7 || layer < 0) {
361 return 0;
362 }
363 return (itsClusterSizes >> (layer * 4)) & 0xf;
364 });
365
366DECLARE_SOA_DYNAMIC_COLUMN(IsITSAfterburner, isITSAfterburner,
367 [](uint8_t detectorMap, float itsChi2Ncl) -> bool {
368 return (detectorMap & o2::aod::track::ITS) && (itsChi2Ncl < 0.f);
369 });
370
371namespace extensions
372{
374DECLARE_SOA_DYNAMIC_COLUMN(TPCDeltaTFwd, tpcDeltaTFwd,
375 [](float timeErr, uint32_t trackType) -> float {
376 if (!(trackType & TrackFlags::TrackTimeAsym)) {
378 }
380 enc.encoding.timeErr = timeErr;
381 return enc.getDeltaTFwd();
382 });
383
384DECLARE_SOA_DYNAMIC_COLUMN(TPCDeltaTBwd, tpcDeltaTBwd,
385 [](float timeErr, uint32_t trackType) -> float {
386 if (!(trackType & TrackFlags::TrackTimeAsym)) {
388 }
390 p.encoding.timeErr = timeErr;
391 return p.getDeltaTBwd();
392 });
393} // namespace extensions
394
395} // namespace v001
396
398 [](uint8_t detectorMap) -> bool { return detectorMap & o2::aod::track::ITS; });
400 [](uint8_t detectorMap) -> bool { return detectorMap & o2::aod::track::TPC; });
402 [](uint8_t detectorMap) -> bool { return detectorMap & o2::aod::track::TRD; });
404 [](uint8_t detectorMap) -> bool { return detectorMap & o2::aod::track::TOF; });
405DECLARE_SOA_DYNAMIC_COLUMN(IsPVContributor, isPVContributor,
407DECLARE_SOA_DYNAMIC_COLUMN(HasTPCSideA, hasTPCSideA,
409DECLARE_SOA_DYNAMIC_COLUMN(HasTPCSideAOnly, hasTPCSideAOnly,
411DECLARE_SOA_DYNAMIC_COLUMN(HasTPCSideC, hasTPCSideC,
413DECLARE_SOA_DYNAMIC_COLUMN(HasTPCSideCOnly, hasTPCSideCOnly,
415DECLARE_SOA_DYNAMIC_COLUMN(HasTPCBothSides, hasTPCBothSides,
417DECLARE_SOA_DYNAMIC_COLUMN(PIDForTracking, pidForTracking,
418 [](uint32_t flags) -> uint32_t { return flags >> 28; });
419DECLARE_SOA_DYNAMIC_COLUMN(TPCNClsFound, tpcNClsFound,
420 [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) -> int16_t { return (int16_t)tpcNClsFindable - tpcNClsFindableMinusFound; });
421DECLARE_SOA_DYNAMIC_COLUMN(TPCNClsPID, tpcNClsPID,
422 [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusPID) -> int16_t { return (int16_t)tpcNClsFindable - tpcNClsFindableMinusPID; });
423DECLARE_SOA_DYNAMIC_COLUMN(TPCNClsCrossedRows, tpcNClsCrossedRows,
424 [](uint8_t tpcNClsFindable, int8_t TPCNClsFindableMinusCrossedRows) -> int16_t { return (int16_t)tpcNClsFindable - TPCNClsFindableMinusCrossedRows; });
426 [](uint8_t itsClusterMap) -> uint8_t {
427 uint8_t itsNcls = 0;
428 constexpr uint8_t bit = 1;
429 for (int layer = 0; layer < 7; layer++) {
430 if (itsClusterMap & (bit << layer))
431 itsNcls++;
432 }
433 return itsNcls;
434 });
435DECLARE_SOA_DYNAMIC_COLUMN(ITSNClsInnerBarrel, itsNClsInnerBarrel,
436 [](uint8_t itsClusterMap) -> uint8_t {
437 uint8_t itsNclsInnerBarrel = 0;
438 constexpr uint8_t bit = 1;
439 for (int layer = 0; layer < 3; layer++) {
440 if (itsClusterMap & (bit << layer))
441 itsNclsInnerBarrel++;
442 }
443 return itsNclsInnerBarrel;
444 });
446 [](uint8_t itsSharedClusterMap) -> uint8_t {
448 constexpr uint8_t bit = 1;
449 for (int layer = 0; layer < 6; layer++) { // ITS1: 6 layers
450 if (itsSharedClusterMap & (bit << layer))
452 }
454 });
455DECLARE_SOA_DYNAMIC_COLUMN(TPCFoundOverFindableCls, tpcFoundOverFindableCls,
456 [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) -> float {
457 int16_t tpcNClsFound = (int16_t)tpcNClsFindable - tpcNClsFindableMinusFound;
458 return (float)tpcNClsFound / (float)tpcNClsFindable;
459 });
460
461DECLARE_SOA_DYNAMIC_COLUMN(TPCCrossedRowsOverFindableCls, tpcCrossedRowsOverFindableCls,
462 [](uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusCrossedRows) -> float {
463 int16_t tpcNClsCrossedRows = (int16_t)tpcNClsFindable - tpcNClsFindableMinusCrossedRows;
464 return (float)tpcNClsCrossedRows / (float)tpcNClsFindable;
465 });
466
467DECLARE_SOA_DYNAMIC_COLUMN(TPCFractionSharedCls, tpcFractionSharedCls,
468 [](uint8_t tpcNClsShared, uint8_t tpcNClsFindable, int8_t tpcNClsFindableMinusFound) -> float {
469 int16_t tpcNClsFound = (int16_t)tpcNClsFindable - tpcNClsFindableMinusFound;
470 return (float)tpcNClsShared / (float)tpcNClsFound;
471 });
472
473DECLARE_SOA_DYNAMIC_COLUMN(TRDHasNeighbor, trdPattern,
474 [](uint8_t trdPattern) -> bool { return trdPattern & o2::aod::track::HasNeighbor; });
475
476DECLARE_SOA_DYNAMIC_COLUMN(TRDHasCrossing, trdPattern,
477 [](uint8_t trdPattern) -> bool { return trdPattern & o2::aod::track::HasCrossing; });
478
479DECLARE_SOA_DYNAMIC_COLUMN(TRDNLayers, trdPattern,
480 [](uint8_t trdPattern) -> std::size_t { return std::bitset<6>(trdPattern).count(); });
481} // namespace track
482
483DECLARE_SOA_TABLE_FULL(StoredTracks, "Tracks", "AOD", "TRACK",
484 o2::soa::Index<>, track::CollisionId, track::TrackType,
485 track::X, track::Alpha,
486 track::Y, track::Z, track::Snp, track::Tgl,
487 track::Signed1Pt, track::IsWithinBeamPipe<track::X>,
488 track::Px<track::Signed1Pt, track::Snp, track::Alpha>,
489 track::Py<track::Signed1Pt, track::Snp, track::Alpha>,
490 track::Pz<track::Signed1Pt, track::Tgl>,
491 track::PVector<track::Signed1Pt, track::Snp, track::Alpha, track::Tgl>,
492 track::Energy<track::Signed1Pt, track::Tgl>,
493 track::Rapidity<track::Signed1Pt, track::Tgl>,
494 track::Sign<track::Signed1Pt>,
496
497DECLARE_SOA_EXTENDED_TABLE(Tracks, StoredTracks, "EXTRACK", 0,
498 aod::track::Pt,
499 aod::track::P,
500 aod::track::Eta,
501 aod::track::Phi);
502
503DECLARE_SOA_TABLE_FULL(StoredTracksIU, "Tracks_IU", "AOD", "TRACK_IU",
504 o2::soa::Index<>, track::CollisionId, track::TrackType,
505 track::X, track::Alpha,
506 track::Y, track::Z, track::Snp, track::Tgl,
507 track::Signed1Pt, track::IsWithinBeamPipe<track::X>,
508 track::Px<track::Signed1Pt, track::Snp, track::Alpha>,
509 track::Py<track::Signed1Pt, track::Snp, track::Alpha>,
510 track::Pz<track::Signed1Pt, track::Tgl>,
511 track::PVector<track::Signed1Pt, track::Snp, track::Alpha, track::Tgl>,
512 track::Energy<track::Signed1Pt, track::Tgl>,
513 track::Rapidity<track::Signed1Pt, track::Tgl>,
514 track::Sign<track::Signed1Pt>,
516
517DECLARE_SOA_EXTENDED_TABLE(TracksIU, StoredTracksIU, "EXTRACK_IU", 0,
518 aod::track::Pt,
519 aod::track::P,
520 aod::track::Eta,
521 aod::track::Phi);
522
523DECLARE_SOA_TABLE_FULL(StoredTracksCov, "TracksCov", "AOD", "TRACKCOV",
524 track::SigmaY, track::SigmaZ, track::SigmaSnp, track::SigmaTgl, track::Sigma1Pt,
525 track::RhoZY, track::RhoSnpY, track::RhoSnpZ, track::RhoTglY, track::RhoTglZ,
526 track::RhoTglSnp, track::Rho1PtY, track::Rho1PtZ, track::Rho1PtSnp, track::Rho1PtTgl, o2::soa::Marker<1>);
527
528DECLARE_SOA_EXTENDED_TABLE(TracksCov, StoredTracksCov, "EXTRACKCOV", 0,
529 aod::track::CYY,
530 aod::track::CZY,
531 aod::track::CZZ,
532 aod::track::CSnpY,
533 aod::track::CSnpZ,
534 aod::track::CSnpSnp,
535 aod::track::CTglY,
536 aod::track::CTglZ,
537 aod::track::CTglSnp,
538 aod::track::CTglTgl,
539 aod::track::C1PtY,
540 aod::track::C1PtZ,
541 aod::track::C1PtSnp,
542 aod::track::C1PtTgl,
543 aod::track::C1Pt21Pt2);
544
545DECLARE_SOA_TABLE_FULL(StoredTracksCovIU, "TracksCov_IU", "AOD", "TRACKCOV_IU",
546 track::SigmaY, track::SigmaZ, track::SigmaSnp, track::SigmaTgl, track::Sigma1Pt,
547 track::RhoZY, track::RhoSnpY, track::RhoSnpZ, track::RhoTglY, track::RhoTglZ,
548 track::RhoTglSnp, track::Rho1PtY, track::Rho1PtZ, track::Rho1PtSnp, track::Rho1PtTgl, o2::soa::Marker<2>);
549
550DECLARE_SOA_EXTENDED_TABLE(TracksCovIU, StoredTracksCovIU, "EXTRACKCOV_IU", 0,
551 aod::track::CYY,
552 aod::track::CZY,
553 aod::track::CZZ,
554 aod::track::CSnpY,
555 aod::track::CSnpZ,
556 aod::track::CSnpSnp,
557 aod::track::CTglY,
558 aod::track::CTglZ,
559 aod::track::CTglSnp,
560 aod::track::CTglTgl,
561 aod::track::C1PtY,
562 aod::track::C1PtZ,
563 aod::track::C1PtSnp,
564 aod::track::C1PtTgl,
565 aod::track::C1Pt21Pt2);
566
567DECLARE_SOA_TABLE_FULL(StoredTracksExtra_000, "TracksExtra", "AOD", "TRACKEXTRA",
568 track::TPCInnerParam, track::Flags, track::ITSClusterMap,
569 track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows,
570 track::TPCNClsShared, track::TRDPattern, track::ITSChi2NCl,
571 track::TPCChi2NCl, track::TRDChi2, track::TOFChi2,
572 track::TPCSignal, track::TRDSignal, track::Length, track::TOFExpMom,
573 track::PIDForTracking<track::Flags>,
574 track::IsPVContributor<track::Flags>,
575 track::HasITS<track::DetectorMap>, track::HasTPC<track::DetectorMap>,
576 track::HasTRD<track::DetectorMap>, track::HasTOF<track::DetectorMap>,
577 track::TPCNClsFound<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
578 track::TPCNClsCrossedRows<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
579 track::TOFExpTimeEl<track::Length, track::TOFExpMom>,
580 track::TOFExpTimeMu<track::Length, track::TOFExpMom>,
581 track::TOFExpTimePi<track::Length, track::TOFExpMom>,
582 track::TOFExpTimeKa<track::Length, track::TOFExpMom>,
583 track::TOFExpTimePr<track::Length, track::TOFExpMom>,
584 track::TOFExpTimeDe<track::Length, track::TOFExpMom>,
585 track::TOFExpTimeTr<track::Length, track::TOFExpMom>,
586 track::TOFExpTimeHe<track::Length, track::TOFExpMom>,
587 track::TOFExpTimeAl<track::Length, track::TOFExpMom>,
588 track::ITSNCls<track::ITSClusterMap>, track::ITSNClsInnerBarrel<track::ITSClusterMap>,
589 track::TPCCrossedRowsOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
590 track::TPCFoundOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
591 track::TPCFractionSharedCls<track::TPCNClsShared, track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
592 track::TrackEtaEMCAL, track::TrackPhiEMCAL, track::TrackTime, track::TrackTimeRes);
593
594DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_001, "TracksExtra", "AOD", "TRACKEXTRA", 1, // On disk version of TracksExtra, version 1
595 track::TPCInnerParam, track::Flags, track::ITSClusterSizes,
596 track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusCrossedRows,
597 track::TPCNClsShared, track::v001::extensions::TPCDeltaTFwd<track::TrackTimeRes, track::Flags>, track::v001::extensions::TPCDeltaTBwd<track::TrackTimeRes, track::Flags>,
598 track::TRDPattern, track::ITSChi2NCl, track::TPCChi2NCl, track::TRDChi2, track::TOFChi2,
599 track::TPCSignal, track::TRDSignal, track::Length, track::TOFExpMom,
600 track::PIDForTracking<track::Flags>,
601 track::IsPVContributor<track::Flags>,
602 track::HasITS<track::v001::DetectorMap>, track::HasTPC<track::v001::DetectorMap>,
603 track::HasTRD<track::v001::DetectorMap>, track::HasTOF<track::v001::DetectorMap>,
604 track::TPCNClsFound<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
605 track::TPCNClsCrossedRows<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
606 track::v001::ITSClusterMap<track::ITSClusterSizes>, track::v001::ITSNCls<track::ITSClusterSizes>, track::v001::ITSNClsInnerBarrel<track::ITSClusterSizes>,
607 track::v001::ITSClsSizeInLayer<track::ITSClusterSizes>,
608 track::v001::IsITSAfterburner<track::v001::DetectorMap, track::ITSChi2NCl>,
609 track::TOFExpTimeEl<track::Length, track::TOFExpMom>,
610 track::TOFExpTimeMu<track::Length, track::TOFExpMom>,
611 track::TOFExpTimePi<track::Length, track::TOFExpMom>,
612 track::TOFExpTimeKa<track::Length, track::TOFExpMom>,
613 track::TOFExpTimePr<track::Length, track::TOFExpMom>,
614 track::TOFExpTimeDe<track::Length, track::TOFExpMom>,
615 track::TOFExpTimeTr<track::Length, track::TOFExpMom>,
616 track::TOFExpTimeHe<track::Length, track::TOFExpMom>,
617 track::TOFExpTimeAl<track::Length, track::TOFExpMom>,
618 track::TPCCrossedRowsOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
619 track::TPCFoundOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
620 track::TPCFractionSharedCls<track::TPCNClsShared, track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
621 track::TrackEtaEMCAL, track::TrackPhiEMCAL, track::TrackTime, track::TrackTimeRes);
622
623DECLARE_SOA_TABLE_FULL_VERSIONED(StoredTracksExtra_002, "TracksExtra", "AOD", "TRACKEXTRA", 2, // On disk version of TracksExtra, version 2
624 track::TPCInnerParam, track::Flags, track::ITSClusterSizes,
625 track::TPCNClsFindable, track::TPCNClsFindableMinusFound, track::TPCNClsFindableMinusPID, track::TPCNClsFindableMinusCrossedRows,
626 track::TPCNClsShared, track::v001::extensions::TPCDeltaTFwd<track::TrackTimeRes, track::Flags>, track::v001::extensions::TPCDeltaTBwd<track::TrackTimeRes, track::Flags>,
627 track::TRDPattern, track::ITSChi2NCl, track::TPCChi2NCl, track::TRDChi2, track::TOFChi2,
628 track::TPCSignal, track::TRDSignal, track::Length, track::TOFExpMom,
629 track::PIDForTracking<track::Flags>,
630 track::IsPVContributor<track::Flags>,
631 track::HasITS<track::v001::DetectorMap>, track::HasTPC<track::v001::DetectorMap>,
632 track::HasTRD<track::v001::DetectorMap>, track::HasTOF<track::v001::DetectorMap>,
633 track::TPCNClsFound<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
634 track::TPCNClsPID<track::TPCNClsFindable, track::TPCNClsFindableMinusPID>,
635 track::TPCNClsCrossedRows<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
636 track::v001::ITSClusterMap<track::ITSClusterSizes>, track::v001::ITSNCls<track::ITSClusterSizes>, track::v001::ITSNClsInnerBarrel<track::ITSClusterSizes>,
637 track::v001::ITSClsSizeInLayer<track::ITSClusterSizes>,
638 track::v001::IsITSAfterburner<track::v001::DetectorMap, track::ITSChi2NCl>,
639 track::TOFExpTimeEl<track::Length, track::TOFExpMom>,
640 track::TOFExpTimeMu<track::Length, track::TOFExpMom>,
641 track::TOFExpTimePi<track::Length, track::TOFExpMom>,
642 track::TOFExpTimeKa<track::Length, track::TOFExpMom>,
643 track::TOFExpTimePr<track::Length, track::TOFExpMom>,
644 track::TOFExpTimeDe<track::Length, track::TOFExpMom>,
645 track::TOFExpTimeTr<track::Length, track::TOFExpMom>,
646 track::TOFExpTimeHe<track::Length, track::TOFExpMom>,
647 track::TOFExpTimeAl<track::Length, track::TOFExpMom>,
648 track::TPCCrossedRowsOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusCrossedRows>,
649 track::TPCFoundOverFindableCls<track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
650 track::TPCFractionSharedCls<track::TPCNClsShared, track::TPCNClsFindable, track::TPCNClsFindableMinusFound>,
651 track::TrackEtaEMCAL, track::TrackPhiEMCAL, track::TrackTime, track::TrackTimeRes);
652
653DECLARE_SOA_EXTENDED_TABLE(TracksExtra_000, StoredTracksExtra_000, "EXTRACKEXTRA", 0,
654 track::DetectorMap);
655DECLARE_SOA_EXTENDED_TABLE(TracksExtra_001, StoredTracksExtra_001, "EXTRACKEXTRA", 1,
656 track::v001::DetectorMap);
657DECLARE_SOA_EXTENDED_TABLE(TracksExtra_002, StoredTracksExtra_002, "EXTRACKEXTRA", 2,
658 track::v001::DetectorMap);
659
660DECLARE_SOA_TABLE(Run2TrackExtras_000, "AOD", "RUN2TRACKEXTRA",
661 track::ITSSignal);
662DECLARE_SOA_TABLE_VERSIONED(Run2TrackExtras_001, "AOD", "RUN2TRACKEXTRA", 1,
663 track::ITSSignal, track::ITSSharedClusterMap,
664 track::ITSNSharedCls<track::ITSSharedClusterMap>);
665
666using StoredTracksExtra = StoredTracksExtra_002;
667using TracksExtra = TracksExtra_002;
668
669using Track = Tracks::iterator;
670using TrackIU = TracksIU::iterator;
671using TrackCov = TracksCov::iterator;
672using TrackCovIU = TracksCovIU::iterator;
673using TrackExtra = TracksExtra::iterator;
674using Run2TrackExtras = Run2TrackExtras_001;
675using Run2TrackExtra = Run2TrackExtras::iterator;
676
677} // namespace aod
678namespace soa
679{
680extern template struct soa::JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Tracks, aod::TracksExtra>;
681extern template struct soa::JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Tracks, aod::TracksCov, aod::TracksExtra>;
682extern template struct soa::JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::TracksExtension, aod::StoredTracks>;
683} // namespace soa
684namespace aod
685{
688
689namespace trackqa
690{
691// TRACKQA TABLE COLUMNS
693DECLARE_SOA_COLUMN(TPCTime0, tpcTime0, float);
694DECLARE_SOA_COLUMN(TPCdEdxNorm, tpcdEdxNorm, float);
695DECLARE_SOA_COLUMN(TPCDCAR, tpcdcaR, int16_t);
696DECLARE_SOA_COLUMN(TPCDCAZ, tpcdcaZ, int16_t);
697DECLARE_SOA_COLUMN(TPCClusterByteMask, tpcClusterByteMask, uint8_t);
698DECLARE_SOA_COLUMN(TPCdEdxMax0R, tpcdEdxMax0R, uint8_t);
699DECLARE_SOA_COLUMN(TPCdEdxMax1R, tpcdEdxMax1R, uint8_t);
700DECLARE_SOA_COLUMN(TPCdEdxMax2R, tpcdEdxMax2R, uint8_t);
701DECLARE_SOA_COLUMN(TPCdEdxMax3R, tpcdEdxMax3R, uint8_t);
702DECLARE_SOA_COLUMN(TPCdEdxTot0R, tpcdEdxTot0R, uint8_t);
703DECLARE_SOA_COLUMN(TPCdEdxTot1R, tpcdEdxTot1R, uint8_t);
704DECLARE_SOA_COLUMN(TPCdEdxTot2R, tpcdEdxTot2R, uint8_t);
705DECLARE_SOA_COLUMN(TPCdEdxTot3R, tpcdEdxTot3R, uint8_t);
706DECLARE_SOA_COLUMN(DeltaRefContParamY, deltaRefContParamY, int8_t);
707DECLARE_SOA_COLUMN(DeltaRefContParamZ, deltaRefITSParamZ, int8_t);
708DECLARE_SOA_COLUMN(DeltaRefContParamSnp, deltaRefContParamSnp, int8_t);
709DECLARE_SOA_COLUMN(DeltaRefContParamTgl, deltaRefContParamTgl, int8_t);
710DECLARE_SOA_COLUMN(DeltaRefContParamQ2Pt, deltaRefContParamQ2Pt, int8_t);
711DECLARE_SOA_COLUMN(DeltaRefGloParamY, deltaRefGloParamY, int8_t);
712DECLARE_SOA_COLUMN(DeltaRefGloParamZ, deltaRefGloParamZ, int8_t);
713DECLARE_SOA_COLUMN(DeltaRefGloParamSnp, deltaRefGloParamSnp, int8_t);
714DECLARE_SOA_COLUMN(DeltaRefGloParamTgl, deltaRefGloParamTgl, int8_t);
715DECLARE_SOA_COLUMN(DeltaRefGloParamQ2Pt, deltaRefGloParamQ2Pt, int8_t);
716DECLARE_SOA_COLUMN(DeltaTOFdX, deltaTOFdX, int8_t);
717DECLARE_SOA_COLUMN(DeltaTOFdZ, deltaTOFdZ, int8_t);
718
720 [](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 {
721 constexpr int8_t m = std::numeric_limits<int8_t>::min();
722 return (cY == m && cZ == m && cSnp == m && cTgl == m && cQ2Pt == m && gY == m && gZ == m && gSnp == m && gTgl == m && gQ2Pt == m);
723 });
724} // namespace trackqa
725
726DECLARE_SOA_TABLE(TracksQA_000, "AOD", "TRACKQA",
727 o2::soa::Index<>, trackqa::TrackId, trackqa::TPCTime0, trackqa::TPCDCAR, trackqa::TPCDCAZ, trackqa::TPCClusterByteMask,
728 trackqa::TPCdEdxMax0R, trackqa::TPCdEdxMax1R, trackqa::TPCdEdxMax2R, trackqa::TPCdEdxMax3R,
729 trackqa::TPCdEdxTot0R, trackqa::TPCdEdxTot1R, trackqa::TPCdEdxTot2R, trackqa::TPCdEdxTot3R);
730// o2::soa::Index<>, trackqa::TrackId, trackqa::TPCDCAR, trackqa::TPCDCAZ, trackqa::TPCClusterByteMask,
731
732DECLARE_SOA_TABLE_VERSIONED(TracksQA_001, "AOD", "TRACKQA", 1,
733 o2::soa::Index<>, trackqa::TrackId, trackqa::TPCTime0, trackqa::TPCDCAR, trackqa::TPCDCAZ, trackqa::TPCClusterByteMask,
734 trackqa::TPCdEdxMax0R, trackqa::TPCdEdxMax1R, trackqa::TPCdEdxMax2R, trackqa::TPCdEdxMax3R,
735 trackqa::TPCdEdxTot0R, trackqa::TPCdEdxTot1R, trackqa::TPCdEdxTot2R, trackqa::TPCdEdxTot3R,
736 trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
737 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt,
738 trackqa::IsDummy<trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
739 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt>);
740
741DECLARE_SOA_TABLE_VERSIONED(TracksQA_002, "AOD", "TRACKQA", 2,
742 o2::soa::Index<>, trackqa::TrackId, trackqa::TPCTime0, trackqa::TPCDCAR, trackqa::TPCDCAZ, trackqa::TPCClusterByteMask,
743 trackqa::TPCdEdxMax0R, trackqa::TPCdEdxMax1R, trackqa::TPCdEdxMax2R, trackqa::TPCdEdxMax3R,
744 trackqa::TPCdEdxTot0R, trackqa::TPCdEdxTot1R, trackqa::TPCdEdxTot2R, trackqa::TPCdEdxTot3R,
745 trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
746 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt,
747 trackqa::DeltaTOFdX, trackqa::DeltaTOFdZ,
748 trackqa::IsDummy<trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
749 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt>);
750
751DECLARE_SOA_TABLE_VERSIONED(TracksQA_003, "AOD", "TRACKQA", 3,
752 o2::soa::Index<>, trackqa::TrackId, trackqa::TPCTime0, trackqa::TPCdEdxNorm, trackqa::TPCDCAR, trackqa::TPCDCAZ, trackqa::TPCClusterByteMask,
753 trackqa::TPCdEdxMax0R, trackqa::TPCdEdxMax1R, trackqa::TPCdEdxMax2R, trackqa::TPCdEdxMax3R,
754 trackqa::TPCdEdxTot0R, trackqa::TPCdEdxTot1R, trackqa::TPCdEdxTot2R, trackqa::TPCdEdxTot3R,
755 trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
756 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt,
757 trackqa::DeltaTOFdX, trackqa::DeltaTOFdZ,
758 trackqa::IsDummy<trackqa::DeltaRefContParamY, trackqa::DeltaRefContParamZ, trackqa::DeltaRefContParamSnp, trackqa::DeltaRefContParamTgl, trackqa::DeltaRefContParamQ2Pt,
759 trackqa::DeltaRefGloParamY, trackqa::DeltaRefGloParamZ, trackqa::DeltaRefGloParamSnp, trackqa::DeltaRefGloParamTgl, trackqa::DeltaRefGloParamQ2Pt>);
760
761using TracksQAVersion = TracksQA_003;
762using TracksQA = TracksQAVersion::iterator;
763
764namespace fwdtrack
765{
766// FwdTracks and MFTTracks Columns definitions
768DECLARE_SOA_COLUMN(TrackType, trackType, uint8_t);
772DECLARE_SOA_COLUMN(Phi, phi, float);
773DECLARE_SOA_COLUMN(Tgl, tgl, float);
774DECLARE_SOA_COLUMN(Signed1Pt, signed1Pt, float);
775DECLARE_SOA_COLUMN(NClusters, nClusters, int8_t);
776DECLARE_SOA_COLUMN(MFTClusterSizesAndTrackFlags, mftClusterSizesAndTrackFlags, uint64_t);
777DECLARE_SOA_COLUMN(Chi2, chi2, float);
778DECLARE_SOA_COLUMN(PDca, pDca, float);
779DECLARE_SOA_COLUMN(RAtAbsorberEnd, rAtAbsorberEnd, float);
780DECLARE_SOA_COLUMN(Chi2MatchMCHMID, chi2MatchMCHMID, float);
781DECLARE_SOA_COLUMN(Chi2MatchMCHMFT, chi2MatchMCHMFT, float);
782DECLARE_SOA_COLUMN(MatchScoreMCHMFT, matchScoreMCHMFT, float);
783DECLARE_SOA_SELF_INDEX_COLUMN_FULL(MCHTrack, matchMCHTrack, int, "FwdTracks_MatchMCHTrack");
784DECLARE_SOA_COLUMN(MCHBitMap, mchBitMap, uint16_t);
785DECLARE_SOA_COLUMN(MIDBitMap, midBitMap, uint8_t);
786DECLARE_SOA_COLUMN(MIDBoards, midBoards, uint32_t);
787DECLARE_SOA_COLUMN(TrackTime, trackTime, float);
788DECLARE_SOA_COLUMN(TrackTimeRes, trackTimeRes, float);
790 [](float signed1Pt) -> short { return (signed1Pt > 0) ? 1 : -1; });
792 [](uint64_t mftClusterSizesAndTrackFlags) -> bool { return mftClusterSizesAndTrackFlags & (0x1ULL << 60); });
794 -1.f * nlog(ntan(o2::constants::math::PIQuarter - 0.5f * natan(aod::fwdtrack::tgl))));
796 ifnode(nabs(aod::fwdtrack::signed1Pt) < o2::constants::math::Almost0, o2::constants::math::VeryBig, nabs(1.f / aod::fwdtrack::signed1Pt)));
798 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)));
800 [](float pt, float phi) -> float {
801 return pt * std::cos(phi);
802 });
804 [](float pt, float phi) -> float {
805 return pt * std::sin(phi);
806 });
808 [](float pt, float tgl) -> float {
809 return pt * tgl;
810 });
811DECLARE_SOA_DYNAMIC_COLUMN(MIDBoardCh1, midBoardCh1,
812 [](uint32_t midBoards) -> int {
813 return static_cast<int>(midBoards & 0xFF);
814 });
815DECLARE_SOA_DYNAMIC_COLUMN(MIDBoardCh2, midBoardCh2,
816 [](uint32_t midBoards) -> int {
817 return static_cast<int>((midBoards >> 8) & 0xFF);
818 });
819DECLARE_SOA_DYNAMIC_COLUMN(MIDBoardCh3, midBoardCh3,
820 [](uint32_t midBoards) -> int {
821 return static_cast<int>((midBoards >> 16) & 0xFF);
822 });
823DECLARE_SOA_DYNAMIC_COLUMN(MIDBoardCh4, midBoardCh4,
824 [](uint32_t midBoards) -> int {
825 return static_cast<int>((midBoards >> 24) & 0xFF);
826 });
827
828namespace v001
829{
831 [](uint64_t mftClusterSizesAndTrackFlags) -> int8_t {
832 int8_t nClusters = 0;
833 for (int layer = 0; layer < 10; layer++) {
834 if ((mftClusterSizesAndTrackFlags >> (layer * 6)) & 0x3F) {
835 nClusters++;
836 }
837 }
838 return nClusters;
839 });
840} // namespace v001
841
842// FwdTracksCov columns definitions
843DECLARE_SOA_COLUMN(SigmaX, sigmaX, float);
844DECLARE_SOA_COLUMN(SigmaY, sigmaY, float);
845DECLARE_SOA_COLUMN(SigmaPhi, sigmaPhi, float);
846DECLARE_SOA_COLUMN(SigmaTgl, sigmaTgl, float);
847DECLARE_SOA_COLUMN(Sigma1Pt, sigma1Pt, float);
848DECLARE_SOA_COLUMN(RhoXY, rhoXY, int8_t);
849DECLARE_SOA_COLUMN(RhoPhiX, rhoPhiX, int8_t);
850DECLARE_SOA_COLUMN(RhoPhiY, rhoPhiY, int8_t);
851DECLARE_SOA_COLUMN(RhoTglX, rhoTglX, int8_t);
852DECLARE_SOA_COLUMN(RhoTglY, rhoTglY, int8_t);
853DECLARE_SOA_COLUMN(RhoTglPhi, rhoTglPhi, int8_t);
854DECLARE_SOA_COLUMN(Rho1PtX, rho1PtX, int8_t);
855DECLARE_SOA_COLUMN(Rho1PtY, rho1PtY, int8_t);
856DECLARE_SOA_COLUMN(Rho1PtPhi, rho1PtPhi, int8_t);
857DECLARE_SOA_COLUMN(Rho1PtTgl, rho1PtTgl, int8_t);
858
860 aod::fwdtrack::sigmaX* aod::fwdtrack::sigmaX);
862 (aod::fwdtrack::rhoXY / 128.f) * (aod::fwdtrack::sigmaX * aod::fwdtrack::sigmaY));
864 aod::fwdtrack::sigmaY* aod::fwdtrack::sigmaY);
865DECLARE_SOA_EXPRESSION_COLUMN(CPhiX, cPhiX, float,
866 (aod::fwdtrack::rhoPhiX / 128.f) * (aod::fwdtrack::sigmaPhi * aod::fwdtrack::sigmaX));
867DECLARE_SOA_EXPRESSION_COLUMN(CPhiY, cPhiY, float,
868 (aod::fwdtrack::rhoPhiY / 128.f) * (aod::fwdtrack::sigmaPhi * aod::fwdtrack::sigmaY));
869DECLARE_SOA_EXPRESSION_COLUMN(CPhiPhi, cPhiPhi, float,
870 aod::fwdtrack::sigmaPhi* aod::fwdtrack::sigmaPhi);
871DECLARE_SOA_EXPRESSION_COLUMN(CTglX, cTglX, float,
872 (aod::fwdtrack::rhoTglX / 128.f) * (aod::fwdtrack::sigmaTgl * aod::fwdtrack::sigmaX));
873DECLARE_SOA_EXPRESSION_COLUMN(CTglY, cTglY, float,
874 (aod::fwdtrack::rhoTglY / 128.f) * (aod::fwdtrack::sigmaTgl * aod::fwdtrack::sigmaY));
875DECLARE_SOA_EXPRESSION_COLUMN(CTglPhi, cTglPhi, float,
876 (aod::fwdtrack::rhoTglPhi / 128.f) * (aod::fwdtrack::sigmaTgl * aod::fwdtrack::sigmaPhi));
877DECLARE_SOA_EXPRESSION_COLUMN(CTglTgl, cTglTgl, float,
878 aod::fwdtrack::sigmaTgl* aod::fwdtrack::sigmaTgl);
879DECLARE_SOA_EXPRESSION_COLUMN(C1PtY, c1PtY, float,
880 (aod::fwdtrack::rho1PtY / 128.f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaY));
881DECLARE_SOA_EXPRESSION_COLUMN(C1PtX, c1PtX, float,
882 (aod::fwdtrack::rho1PtX / 128.f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaX));
883DECLARE_SOA_EXPRESSION_COLUMN(C1PtPhi, c1PtPhi, float,
884 (aod::fwdtrack::rho1PtPhi / 128.f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaPhi));
885DECLARE_SOA_EXPRESSION_COLUMN(C1PtTgl, c1PtTgl, float,
886 (aod::fwdtrack::rho1PtTgl / 128.f) * (aod::fwdtrack::sigma1Pt * aod::fwdtrack::sigmaTgl));
887DECLARE_SOA_EXPRESSION_COLUMN(C1Pt21Pt2, c1Pt21Pt2, float,
888 aod::fwdtrack::sigma1Pt* aod::fwdtrack::sigma1Pt);
889} // namespace fwdtrack
890
891// MFTStandalone tracks
892DECLARE_SOA_TABLE_FULL(StoredMFTTracks_000, "MFTTracks", "AOD", "MFTTRACK",
893 o2::soa::Index<>, fwdtrack::CollisionId,
894 fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
895 fwdtrack::Signed1Pt, fwdtrack::NClusters,
896 fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
897 fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
898 fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
899 fwdtrack::Sign<fwdtrack::Signed1Pt>, fwdtrack::Chi2,
900 fwdtrack::TrackTime, fwdtrack::TrackTimeRes);
901
902DECLARE_SOA_TABLE_FULL_VERSIONED(StoredMFTTracks_001, "MFTTracks", "AOD", "MFTTRACK", 1,
903 o2::soa::Index<>, fwdtrack::CollisionId,
904 fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
905 fwdtrack::Signed1Pt, fwdtrack::v001::NClusters<fwdtrack::MFTClusterSizesAndTrackFlags>, fwdtrack::MFTClusterSizesAndTrackFlags, fwdtrack::IsCA<fwdtrack::MFTClusterSizesAndTrackFlags>,
906 fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
907 fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
908 fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
909 fwdtrack::Sign<fwdtrack::Signed1Pt>, fwdtrack::Chi2,
910 fwdtrack::TrackTime, fwdtrack::TrackTimeRes);
911
912DECLARE_SOA_EXTENDED_TABLE(MFTTracks_000, StoredMFTTracks_000, "EXMFTTRACK", 0,
913 aod::fwdtrack::Pt,
914 aod::fwdtrack::Eta,
915 aod::fwdtrack::P);
916
917DECLARE_SOA_EXTENDED_TABLE(MFTTracks_001, StoredMFTTracks_001, "EXMFTTRACK", 1,
918 aod::fwdtrack::Pt,
919 aod::fwdtrack::Eta,
920 aod::fwdtrack::P);
921
922using MFTTracks = MFTTracks_001;
923using StoredMFTTracks = StoredMFTTracks_001;
924
925using MFTTrack = MFTTracks::iterator;
926
927namespace fwdtrack // Index to MFTtrack column must be defined after table definition.
928{
930}
931
932// Tracks including MCH and/or MCH (plus optionally MFT) //!
933DECLARE_SOA_TABLE_FULL(StoredFwdTracks, "FwdTracks", "AOD", "FWDTRACK",
934 o2::soa::Index<>, fwdtrack::CollisionId, fwdtrack::TrackType,
935 fwdtrack::X, fwdtrack::Y, fwdtrack::Z, fwdtrack::Phi, fwdtrack::Tgl,
936 fwdtrack::Signed1Pt, fwdtrack::NClusters, fwdtrack::PDca, fwdtrack::RAtAbsorberEnd,
937 fwdtrack::Px<fwdtrack::Pt, fwdtrack::Phi>,
938 fwdtrack::Py<fwdtrack::Pt, fwdtrack::Phi>,
939 fwdtrack::Pz<fwdtrack::Pt, fwdtrack::Tgl>,
940 fwdtrack::Sign<fwdtrack::Signed1Pt>,
941 fwdtrack::Chi2, fwdtrack::Chi2MatchMCHMID, fwdtrack::Chi2MatchMCHMFT,
942 fwdtrack::MatchScoreMCHMFT, fwdtrack::MFTTrackId, fwdtrack::MCHTrackId,
943 fwdtrack::MCHBitMap, fwdtrack::MIDBitMap, fwdtrack::MIDBoards,
944 fwdtrack::TrackTime, fwdtrack::TrackTimeRes);
945
946DECLARE_SOA_EXTENDED_TABLE(FwdTracks, StoredFwdTracks, "EXFWDTRACK", 0,
947 aod::fwdtrack::Pt,
948 aod::fwdtrack::Eta,
949 aod::fwdtrack::P);
950
951DECLARE_SOA_TABLE_FULL(StoredFwdTracksCov, "FwdTracksCov", "AOD", "FWDTRACKCOV",
952 fwdtrack::SigmaX, fwdtrack::SigmaY, fwdtrack::SigmaPhi, fwdtrack::SigmaTgl, fwdtrack::Sigma1Pt,
953 fwdtrack::RhoXY, fwdtrack::RhoPhiY, fwdtrack::RhoPhiX, fwdtrack::RhoTglX, fwdtrack::RhoTglY,
954 fwdtrack::RhoTglPhi, fwdtrack::Rho1PtX, fwdtrack::Rho1PtY, fwdtrack::Rho1PtPhi, fwdtrack::Rho1PtTgl);
955
956DECLARE_SOA_EXTENDED_TABLE(FwdTracksCov, StoredFwdTracksCov, "EXFWDTRACKCOV", 0,
957 aod::fwdtrack::CXX,
958 aod::fwdtrack::CXY,
959 aod::fwdtrack::CYY,
960 aod::fwdtrack::CPhiX,
961 aod::fwdtrack::CPhiY,
962 aod::fwdtrack::CPhiPhi,
963 aod::fwdtrack::CTglX,
964 aod::fwdtrack::CTglY,
965 aod::fwdtrack::CTglPhi,
966 aod::fwdtrack::CTglTgl,
967 aod::fwdtrack::C1PtX,
968 aod::fwdtrack::C1PtY,
969 aod::fwdtrack::C1PtPhi,
970 aod::fwdtrack::C1PtTgl,
971 aod::fwdtrack::C1Pt21Pt2);
972
973using FwdTrack = FwdTracks::iterator;
974using FwdTrackCovFwd = FwdTracksCov::iterator;
975
976DECLARE_SOA_TABLE_FULL(StoredMFTTracksCov, "MFTTracksCov", "AOD", "MFTTRACKCOV",
977 o2::soa::Index<>, fwdtrack::MFTTrackId,
978 fwdtrack::SigmaX, fwdtrack::SigmaY, fwdtrack::SigmaPhi, fwdtrack::SigmaTgl, fwdtrack::Sigma1Pt,
979 fwdtrack::RhoXY, fwdtrack::RhoPhiX, fwdtrack::RhoPhiY, fwdtrack::RhoTglX, fwdtrack::RhoTglY,
980 fwdtrack::RhoTglPhi, fwdtrack::Rho1PtX, fwdtrack::Rho1PtY, fwdtrack::Rho1PtPhi, fwdtrack::Rho1PtTgl);
981
982DECLARE_SOA_EXTENDED_TABLE(MFTTracksCov, StoredMFTTracksCov, "EXMFTTRACKCOV", 0,
983 aod::fwdtrack::CXX,
984 aod::fwdtrack::CXY,
985 aod::fwdtrack::CYY,
986 aod::fwdtrack::CPhiX,
987 aod::fwdtrack::CPhiY,
988 aod::fwdtrack::CPhiPhi,
989 aod::fwdtrack::CTglX,
990 aod::fwdtrack::CTglY,
991 aod::fwdtrack::CTglPhi,
992 aod::fwdtrack::CTglTgl,
993 aod::fwdtrack::C1PtX,
994 aod::fwdtrack::C1PtY,
995 aod::fwdtrack::C1PtPhi,
996 aod::fwdtrack::C1PtTgl,
997 aod::fwdtrack::C1Pt21Pt2);
998
999using MFTTrack = MFTTracks::iterator;
1000using MFTTrackCovFwd = MFTTracksCov::iterator;
1001
1002} // namespace aod
1003namespace soa
1004{
1005extern template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::FwdTracks, aod::FwdTracksCov>;
1006}
1007namespace aod
1008{
1011
1012// Some tracks cannot be uniquely identified with a collision. Some tracks cannot be assigned to a collision at all.
1013// Those tracks have -1 as collision index and have an entry in the AmbiguousTracks table.
1014// The estimated track time is used to assign BCs which are compatible with this track. Those are stored as a slice.
1015// All collisions compatible with these BCs may then have produced the ambiguous track.
1016// In the future possibly the DCA information can be exploited to reduce the possible collisions and then this table will be extended.
1024
1025DECLARE_SOA_TABLE(AmbiguousTracks, "AOD", "AMBIGUOUSTRACK",
1026 o2::soa::Index<>, ambiguous::TrackId, ambiguous::BCIdSlice);
1027
1028using AmbiguousTrack = AmbiguousTracks::iterator;
1029
1030DECLARE_SOA_TABLE(AmbiguousMFTTracks, "AOD", "AMBIGUOUSMFTTR",
1031 o2::soa::Index<>, ambiguous::MFTTrackId, ambiguous::BCIdSlice);
1032
1033using AmbiguousMFTTrack = AmbiguousMFTTracks::iterator;
1034
1035DECLARE_SOA_TABLE(AmbiguousFwdTracks, "AOD", "AMBIGUOUSFWDTR",
1036 o2::soa::Index<>, ambiguous::FwdTrackId, ambiguous::BCIdSlice);
1037
1038using AmbiguousFwdTrack = AmbiguousFwdTracks::iterator;
1039
1040// Forward Tracks Cluster information
1041namespace fwdtrkcl
1042{
1047DECLARE_SOA_COLUMN(ClInfo, clInfo, uint16_t);
1048DECLARE_SOA_DYNAMIC_COLUMN(DEId, deId, [](uint16_t info) -> uint16_t { return (info & 0x7FF); });
1049DECLARE_SOA_DYNAMIC_COLUMN(IsGoodX, isGoodX, [](uint16_t info) -> bool { return ((info & 0x800) >> 11); });
1050DECLARE_SOA_DYNAMIC_COLUMN(IsGoodY, isGoodY, [](uint16_t info) -> bool { return ((info & 0x1000) >> 12); });
1051} // namespace fwdtrkcl
1052
1053DECLARE_SOA_TABLE(FwdTrkCls, "AOD", "FWDTRKCL",
1055 fwdtrkcl::FwdTrackId,
1056 fwdtrkcl::X,
1057 fwdtrkcl::Y,
1058 fwdtrkcl::Z,
1059 fwdtrkcl::ClInfo,
1060 fwdtrkcl::DEId<fwdtrkcl::ClInfo>,
1061 fwdtrkcl::IsGoodX<fwdtrkcl::ClInfo>,
1062 fwdtrkcl::IsGoodY<fwdtrkcl::ClInfo>);
1063
1064using FwdTrkCl = FwdTrkCls::iterator;
1065
1066// HMPID information
1067namespace hmpid
1068{
1070DECLARE_SOA_COLUMN(HMPIDSignal, hmpidSignal, float);
1071DECLARE_SOA_COLUMN(HMPIDDistance, hmpidDistance, float);
1072DECLARE_SOA_COLUMN(HMPIDXTrack, hmpidXTrack, float);
1073DECLARE_SOA_COLUMN(HMPIDYTrack, hmpidYTrack, float);
1074DECLARE_SOA_COLUMN(HMPIDXMip, hmpidXMip, float);
1075DECLARE_SOA_COLUMN(HMPIDYMip, hmpidYMip, float);
1076DECLARE_SOA_COLUMN(HMPIDNPhotons, hmpidNPhotons, int);
1077DECLARE_SOA_COLUMN(HMPIDQMip, hmpidQMip, float);
1078DECLARE_SOA_COLUMN(HMPIDClusSize, hmpidClusSize, int);
1079DECLARE_SOA_COLUMN(HMPIDMom, hmpidMom, float);
1080DECLARE_SOA_COLUMN(HMPIDPhotsCharge, hmpidPhotsCharge, float[10]);
1081} // namespace hmpid
1082
1083DECLARE_SOA_TABLE(HMPID_000, "AOD", "HMPID",
1085 hmpid::TrackId,
1086 hmpid::HMPIDSignal,
1087 hmpid::HMPIDDistance,
1088 hmpid::HMPIDNPhotons,
1089 hmpid::HMPIDQMip);
1090
1091DECLARE_SOA_TABLE_VERSIONED(HMPID_001, "AOD", "HMPID", 1,
1093 hmpid::TrackId,
1094 hmpid::HMPIDSignal,
1095 hmpid::HMPIDXTrack,
1096 hmpid::HMPIDYTrack,
1097 hmpid::HMPIDXMip,
1098 hmpid::HMPIDYMip,
1099 hmpid::HMPIDNPhotons,
1100 hmpid::HMPIDQMip,
1101 hmpid::HMPIDClusSize,
1102 hmpid::HMPIDMom,
1103 hmpid::HMPIDPhotsCharge);
1104
1105using HMPIDs = HMPID_001;
1106using HMPID = HMPIDs::iterator;
1107
1108namespace calo
1109{
1111DECLARE_SOA_COLUMN(CellNumber, cellNumber, int16_t);
1112DECLARE_SOA_COLUMN(Amplitude, amplitude, float);
1114DECLARE_SOA_COLUMN(CellType, cellType, int8_t);
1115DECLARE_SOA_COLUMN(CaloType, caloType, int8_t);
1116} // namespace calo
1117
1118DECLARE_SOA_TABLE(Calos, "AOD", "CALO",
1119 o2::soa::Index<>, calo::BCId, calo::CellNumber, calo::Amplitude,
1120 calo::Time, calo::CellType, calo::CaloType);
1121using Calo = Calos::iterator;
1122
1123namespace calotrigger
1124{
1126DECLARE_SOA_COLUMN(FastOrAbsID, fastOrAbsID, int16_t);
1127DECLARE_SOA_COLUMN(LnAmplitude, lnAmplitude, int16_t);
1128DECLARE_SOA_COLUMN(TriggerBits, triggerBits, int32_t);
1129DECLARE_SOA_COLUMN(CaloType, caloType, int8_t);
1130} // namespace calotrigger
1131
1132DECLARE_SOA_TABLE(CaloTriggers, "AOD", "CALOTRIGGER",
1133 o2::soa::Index<>, calotrigger::BCId, calotrigger::FastOrAbsID,
1134 calotrigger::LnAmplitude, calotrigger::TriggerBits, calotrigger::CaloType);
1135using CaloTrigger = CaloTriggers::iterator;
1136
1137namespace cpvcluster
1138{
1140DECLARE_SOA_COLUMN(PosX, posX, float);
1141DECLARE_SOA_COLUMN(PosZ, posZ, float);
1142DECLARE_SOA_COLUMN(Amplitude, amplitude, float);
1143DECLARE_SOA_COLUMN(ClusterStatus, clusterStatus, uint8_t);
1144DECLARE_SOA_DYNAMIC_COLUMN(PadMult, padMult, [](uint8_t status) -> uint8_t {
1145 return status & 0b00011111;
1146});
1147DECLARE_SOA_DYNAMIC_COLUMN(ModuleNumber, moduleNumber, [](uint8_t status) -> uint8_t {
1148 return 2 + ((status & 0b01100000) >> 5);
1149});
1150DECLARE_SOA_DYNAMIC_COLUMN(IsUnfolded, isUnfolded, [](uint8_t status) -> bool {
1151 return (status & 0b01100000) >> 7;
1152});
1153} // namespace cpvcluster
1154
1155DECLARE_SOA_TABLE(CPVClusters, "AOD", "CPVCLUSTER",
1156 o2::soa::Index<>, cpvcluster::BCId, cpvcluster::PosX, cpvcluster::PosZ, cpvcluster::Amplitude,
1157 cpvcluster::ClusterStatus, cpvcluster::PadMult<cpvcluster::ClusterStatus>,
1158 cpvcluster::ModuleNumber<cpvcluster::ClusterStatus>, cpvcluster::IsUnfolded<cpvcluster::ClusterStatus>);
1159using CPVCluster = CPVClusters::iterator;
1160
1161namespace zdc
1162{
1164DECLARE_SOA_COLUMN(EnergyZEM1, energyZEM1, float);
1165DECLARE_SOA_COLUMN(EnergyZEM2, energyZEM2, float);
1166DECLARE_SOA_COLUMN(EnergyCommonZNA, energyCommonZNA, float);
1167DECLARE_SOA_COLUMN(EnergyCommonZNC, energyCommonZNC, float);
1168DECLARE_SOA_COLUMN(EnergyCommonZPA, energyCommonZPA, float);
1169DECLARE_SOA_COLUMN(EnergyCommonZPC, energyCommonZPC, float);
1170DECLARE_SOA_COLUMN(EnergySectorZNA, energySectorZNA, float[4]);
1171DECLARE_SOA_COLUMN(EnergySectorZNC, energySectorZNC, float[4]);
1172DECLARE_SOA_COLUMN(EnergySectorZPA, energySectorZPA, float[4]);
1173DECLARE_SOA_COLUMN(EnergySectorZPC, energySectorZPC, float[4]);
1174DECLARE_SOA_COLUMN(TimeZEM1, timeZEM1, float);
1175DECLARE_SOA_COLUMN(TimeZEM2, timeZEM2, float);
1176DECLARE_SOA_COLUMN(TimeZNA, timeZNA, float);
1177DECLARE_SOA_COLUMN(TimeZNC, timeZNC, float);
1178DECLARE_SOA_COLUMN(TimeZPA, timeZPA, float);
1179DECLARE_SOA_COLUMN(TimeZPC, timeZPC, float);
1180// New summarized table, minimal disk footprint, per channel like other detectors
1181DECLARE_SOA_COLUMN(Energy, energy, std::vector<float>);
1182DECLARE_SOA_COLUMN(ChannelE, channelE, std::vector<uint8_t>);
1183DECLARE_SOA_COLUMN(Amplitude, amplitude, std::vector<float>);
1184DECLARE_SOA_COLUMN(Time, time, std::vector<float>);
1185DECLARE_SOA_COLUMN(ChannelT, channelT, std::vector<uint8_t>);
1186// Dynamic columns to take into account packed information; replace old getters
1187DECLARE_SOA_DYNAMIC_COLUMN(DyEnergyZEM1, energyZEM1,
1188 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> float {
1189 auto ne = channelE.size();
1190 auto thisenergy = -std::numeric_limits<float>::infinity();
1191 for (uint64_t ie = 0; ie < channelE.size(); ie++) {
1192 if (channelE[ie] == o2::zdc::IdZEM1) {
1193 thisenergy = energy[ie];
1194 break; // avoid unnecessary looping
1195 }
1196 }
1197 return thisenergy;
1198 });
1199DECLARE_SOA_DYNAMIC_COLUMN(DyEnergyZEM2, energyZEM2,
1200 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> float {
1201 auto thisenergy = -std::numeric_limits<float>::infinity();
1202 for (uint64_t ie = 0; ie < channelE.size(); ie++) {
1203 if (channelE[ie] == o2::zdc::IdZEM2) {
1204 thisenergy = energy[ie];
1205 break; // avoid unnecessary looping
1206 }
1207 }
1208 return thisenergy;
1209 });
1210DECLARE_SOA_DYNAMIC_COLUMN(DyEnergyCommonZNA, energyCommonZNA,
1211 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> float {
1212 auto thisenergy = -std::numeric_limits<float>::infinity();
1213 for (uint64_t ie = 0; ie < channelE.size(); ie++) {
1214 if (channelE[ie] == o2::zdc::IdZNAC) {
1215 thisenergy = energy[ie];
1216 break; // avoid unnecessary looping
1217 }
1218 }
1219 return thisenergy;
1220 });
1221DECLARE_SOA_DYNAMIC_COLUMN(DyEnergyCommonZNC, energyCommonZNC,
1222 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> float {
1223 auto thisenergy = -std::numeric_limits<float>::infinity();
1224 for (uint64_t ie = 0; ie < channelE.size(); ie++) {
1225 if (channelE[ie] == o2::zdc::IdZNCC) {
1226 thisenergy = energy[ie];
1227 break; // avoid unnecessary looping
1228 }
1229 }
1230 return thisenergy;
1231 });
1232DECLARE_SOA_DYNAMIC_COLUMN(DyEnergyCommonZPA, energyCommonZPA,
1233 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> float {
1234 auto thisenergy = -std::numeric_limits<float>::infinity();
1235 for (uint64_t ie = 0; ie < channelE.size(); ie++) {
1236 if (channelE[ie] == o2::zdc::IdZPAC) {
1237 thisenergy = energy[ie];
1238 break; // avoid unnecessary looping
1239 }
1240 }
1241 return thisenergy;
1242 });
1243DECLARE_SOA_DYNAMIC_COLUMN(DyEnergyCommonZPC, energyCommonZPC,
1244 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> float {
1245 auto thisenergy = -std::numeric_limits<float>::infinity();
1246 for (uint64_t ie = 0; ie < channelE.size(); ie++) {
1247 if (channelE[ie] == o2::zdc::IdZPCC) {
1248 thisenergy = energy[ie];
1249 break; // avoid unnecessary looping
1250 }
1251 }
1252 return thisenergy;
1253 });
1254DECLARE_SOA_DYNAMIC_COLUMN(DyEnergySectorZNA, energySectorZNA,
1255 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> std::array<float, 4> {
1256 std::array<float, 4> thisenergy = {
1257 -std::numeric_limits<float>::infinity(),
1258 -std::numeric_limits<float>::infinity(),
1259 -std::numeric_limits<float>::infinity(),
1260 -std::numeric_limits<float>::infinity()};
1261 for (uint64_t ie = 0; ie < channelE.size(); ie++) {
1262 if (channelE[ie] == o2::zdc::IdZNA1)
1263 thisenergy[0] = energy[ie];
1264 if (channelE[ie] == o2::zdc::IdZNA2)
1265 thisenergy[1] = energy[ie];
1266 if (channelE[ie] == o2::zdc::IdZNA3)
1267 thisenergy[2] = energy[ie];
1268 if (channelE[ie] == o2::zdc::IdZNA4)
1269 thisenergy[3] = energy[ie];
1270 }
1272 });
1273DECLARE_SOA_DYNAMIC_COLUMN(DyEnergySectorZNC, energySectorZNC,
1274 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> std::array<float, 4> {
1275 std::array<float, 4> thisenergy = {
1276 -std::numeric_limits<float>::infinity(),
1277 -std::numeric_limits<float>::infinity(),
1278 -std::numeric_limits<float>::infinity(),
1279 -std::numeric_limits<float>::infinity()};
1280 for (uint64_t ie = 0; ie < channelE.size(); ie++) {
1281 if (channelE[ie] == o2::zdc::IdZNC1)
1282 thisenergy[0] = energy[ie];
1283 if (channelE[ie] == o2::zdc::IdZNC2)
1284 thisenergy[1] = energy[ie];
1285 if (channelE[ie] == o2::zdc::IdZNC3)
1286 thisenergy[2] = energy[ie];
1287 if (channelE[ie] == o2::zdc::IdZNC4)
1288 thisenergy[3] = energy[ie];
1289 }
1290 return thisenergy;
1291 });
1292DECLARE_SOA_DYNAMIC_COLUMN(DyEnergySectorZPA, energySectorZPA,
1293 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> std::array<float, 4> {
1294 std::array<float, 4> thisenergy = {
1295 -std::numeric_limits<float>::infinity(),
1296 -std::numeric_limits<float>::infinity(),
1297 -std::numeric_limits<float>::infinity(),
1298 -std::numeric_limits<float>::infinity()};
1299 for (uint64_t ie = 0; ie < channelE.size(); ie++) {
1300 if (channelE[ie] == o2::zdc::IdZPA1)
1301 thisenergy[0] = energy[ie];
1302 if (channelE[ie] == o2::zdc::IdZPA2)
1303 thisenergy[1] = energy[ie];
1304 if (channelE[ie] == o2::zdc::IdZPA3)
1305 thisenergy[2] = energy[ie];
1306 if (channelE[ie] == o2::zdc::IdZPA4)
1307 thisenergy[3] = energy[ie];
1308 }
1309 return thisenergy;
1310 });
1311DECLARE_SOA_DYNAMIC_COLUMN(DyEnergySectorZPC, energySectorZPC,
1312 [](gsl::span<const uint8_t> channelE, gsl::span<const float> energy) -> std::array<float, 4> {
1313 std::array<float, 4> thisenergy = {
1314 -std::numeric_limits<float>::infinity(),
1315 -std::numeric_limits<float>::infinity(),
1316 -std::numeric_limits<float>::infinity(),
1317 -std::numeric_limits<float>::infinity()};
1318 for (uint64_t ie = 0; ie < channelE.size(); ie++) {
1319 if (channelE[ie] == o2::zdc::IdZPC1)
1320 thisenergy[0] = energy[ie];
1321 if (channelE[ie] == o2::zdc::IdZPC2)
1322 thisenergy[1] = energy[ie];
1323 if (channelE[ie] == o2::zdc::IdZPC3)
1324 thisenergy[2] = energy[ie];
1325 if (channelE[ie] == o2::zdc::IdZPC4)
1326 thisenergy[3] = energy[ie];
1327 }
1328 return thisenergy;
1329 });
1330DECLARE_SOA_DYNAMIC_COLUMN(DyTimeZEM1, timeZEM1,
1331 [](gsl::span<const uint8_t> channelT, gsl::span<const float> time) -> float {
1332 auto thistime = -std::numeric_limits<float>::infinity();
1333 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1334 if (channelT[ie] == o2::zdc::IdZEM1) {
1335 thistime = time[ie];
1336 break; // avoid unnecessary looping
1337 }
1338 }
1339 return thistime;
1340 });
1341DECLARE_SOA_DYNAMIC_COLUMN(DyTimeZEM2, timeZEM2,
1342 [](gsl::span<const uint8_t> channelT, gsl::span<const float> time) -> float {
1343 auto thistime = -std::numeric_limits<float>::infinity();
1344 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1345 if (channelT[ie] == o2::zdc::IdZEM2) {
1346 thistime = time[ie];
1347 break; // avoid unnecessary looping
1348 }
1349 }
1350 return thistime;
1351 });
1352DECLARE_SOA_DYNAMIC_COLUMN(DyTimeZNA, timeZNA,
1353 [](gsl::span<const uint8_t> channelT, gsl::span<const float> time) -> float {
1354 auto thistime = -std::numeric_limits<float>::infinity();
1355 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1356 if (channelT[ie] == o2::zdc::IdZNAC) {
1357 thistime = time[ie];
1358 break; // avoid unnecessary looping
1359 }
1360 }
1361 return thistime;
1362 });
1363DECLARE_SOA_DYNAMIC_COLUMN(DyTimeZNC, timeZNC,
1364 [](gsl::span<const uint8_t> channelT, gsl::span<const float> time) -> float {
1365 auto thistime = -std::numeric_limits<float>::infinity();
1366 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1367 if (channelT[ie] == o2::zdc::IdZNCC) {
1368 thistime = time[ie];
1369 break; // avoid unnecessary looping
1370 }
1371 }
1372 return thistime;
1373 });
1374DECLARE_SOA_DYNAMIC_COLUMN(DyTimeZPA, timeZPA,
1375 [](gsl::span<const uint8_t> channelT, gsl::span<const float> time) -> float {
1376 auto thistime = -std::numeric_limits<float>::infinity();
1377 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1378 if (channelT[ie] == o2::zdc::IdZPAC) {
1379 thistime = time[ie];
1380 break; // avoid unnecessary looping
1381 }
1382 }
1383 return thistime;
1384 });
1385DECLARE_SOA_DYNAMIC_COLUMN(DyTimeZPC, timeZPC,
1386 [](gsl::span<const uint8_t> channelT, gsl::span<const float> time) -> float {
1387 auto thistime = -std::numeric_limits<float>::infinity();
1388 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1389 if (channelT[ie] == o2::zdc::IdZPCC) {
1390 thistime = time[ie];
1391 break; // avoid unnecessary looping
1392 }
1393 }
1394 return thistime;
1395 });
1396
1397DECLARE_SOA_DYNAMIC_COLUMN(DyAmplitudeZEM1, amplitudeZEM1,
1398 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) -> float {
1399 auto thisamplitude = -std::numeric_limits<float>::infinity();
1400 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1401 if (channelT[ie] == o2::zdc::IdZEM1) {
1402 thisamplitude = amplitude[ie];
1403 break; // avoid unnecessary looping
1404 }
1405 }
1406 return thisamplitude;
1407 });
1408DECLARE_SOA_DYNAMIC_COLUMN(DyAmplitudeZEM2, amplitudeZEM2,
1409 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) -> float {
1410 auto thisamplitude = -std::numeric_limits<float>::infinity();
1411 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1412 if (channelT[ie] == o2::zdc::IdZEM2) {
1413 thisamplitude = amplitude[ie];
1414 break; // avoid unnecessary looping
1415 }
1416 }
1417 return thisamplitude;
1418 });
1419DECLARE_SOA_DYNAMIC_COLUMN(DyAmplitudeZNA, amplitudeZNA,
1420 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) -> float {
1421 auto thisamplitude = -std::numeric_limits<float>::infinity();
1422 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1423 if (channelT[ie] == o2::zdc::IdZNAC) {
1424 thisamplitude = amplitude[ie];
1425 break; // avoid unnecessary looping
1426 }
1427 }
1428 return thisamplitude;
1429 });
1430DECLARE_SOA_DYNAMIC_COLUMN(DyAmplitudeZNC, amplitudeZNC,
1431 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) -> float {
1432 auto thisamplitude = -std::numeric_limits<float>::infinity();
1433 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1434 if (channelT[ie] == o2::zdc::IdZNCC) {
1435 thisamplitude = amplitude[ie];
1436 break; // avoid unnecessary looping
1437 }
1438 }
1439 return thisamplitude;
1440 });
1441DECLARE_SOA_DYNAMIC_COLUMN(DyAmplitudeZPA, amplitudeZPA,
1442 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) -> float {
1443 auto thisamplitude = -std::numeric_limits<float>::infinity();
1444 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1445 if (channelT[ie] == o2::zdc::IdZPAC) {
1446 thisamplitude = amplitude[ie];
1447 break; // avoid unnecessary looping
1448 }
1449 }
1450 return thisamplitude;
1451 });
1452DECLARE_SOA_DYNAMIC_COLUMN(DyAmplitudeZPC, amplitudeZPC,
1453 [](gsl::span<const uint8_t> channelT, gsl::span<const float> amplitude) -> float {
1454 auto thisamplitude = -std::numeric_limits<float>::infinity();
1455 for (uint64_t ie = 0; ie < channelT.size(); ie++) {
1456 if (channelT[ie] == o2::zdc::IdZPCC) {
1457 thisamplitude = amplitude[ie];
1458 break; // avoid unnecessary looping
1459 }
1460 }
1461 return thisamplitude;
1462 });
1463} // namespace zdc
1464
1465DECLARE_SOA_TABLE(Zdcs_000, "AOD", "ZDC",
1466 o2::soa::Index<>, zdc::BCId, zdc::EnergyZEM1, zdc::EnergyZEM2,
1467 zdc::EnergyCommonZNA, zdc::EnergyCommonZNC, zdc::EnergyCommonZPA, zdc::EnergyCommonZPC,
1468 zdc::EnergySectorZNA, zdc::EnergySectorZNC, zdc::EnergySectorZPA, zdc::EnergySectorZPC,
1469 zdc::TimeZEM1, zdc::TimeZEM2, zdc::TimeZNA, zdc::TimeZNC, zdc::TimeZPA, zdc::TimeZPC);
1470
1471// new version of tables: different names for dynamic columns, but same getters
1472DECLARE_SOA_TABLE_VERSIONED(Zdcs_001, "AOD", "ZDC", 1,
1473 o2::soa::Index<>, zdc::BCId, zdc::Energy, zdc::ChannelE, zdc::Amplitude, zdc::Time, zdc::ChannelT,
1474 zdc::DyEnergyZEM1<zdc::ChannelE, zdc::Energy>, zdc::DyEnergyZEM2<zdc::ChannelE, zdc::Energy>,
1475 zdc::DyEnergyCommonZNA<zdc::ChannelE, zdc::Energy>, zdc::DyEnergyCommonZNC<zdc::ChannelE, zdc::Energy>,
1476 zdc::DyEnergyCommonZPA<zdc::ChannelE, zdc::Energy>, zdc::DyEnergyCommonZPC<zdc::ChannelE, zdc::Energy>,
1477 zdc::DyEnergySectorZNA<zdc::ChannelE, zdc::Energy>, zdc::DyEnergySectorZNC<zdc::ChannelE, zdc::Energy>,
1478 zdc::DyEnergySectorZPA<zdc::ChannelE, zdc::Energy>, zdc::DyEnergySectorZPC<zdc::ChannelE, zdc::Energy>,
1479 zdc::DyTimeZEM1<zdc::ChannelT, zdc::Time>, zdc::DyTimeZEM2<zdc::ChannelT, zdc::Time>,
1480 zdc::DyTimeZNA<zdc::ChannelT, zdc::Time>, zdc::DyTimeZNC<zdc::ChannelT, zdc::Time>,
1481 zdc::DyTimeZPA<zdc::ChannelT, zdc::Time>, zdc::DyTimeZPC<zdc::ChannelT, zdc::Time>,
1482 zdc::DyAmplitudeZEM1<zdc::ChannelT, zdc::Amplitude>, zdc::DyAmplitudeZEM2<zdc::ChannelT, zdc::Amplitude>,
1483 zdc::DyAmplitudeZNA<zdc::ChannelT, zdc::Amplitude>, zdc::DyAmplitudeZNC<zdc::ChannelT, zdc::Amplitude>,
1484 zdc::DyAmplitudeZPA<zdc::ChannelT, zdc::Amplitude>, zdc::DyAmplitudeZPC<zdc::ChannelT, zdc::Amplitude>); //
1485using Zdcs = Zdcs_001;
1486using Zdc = Zdcs::iterator;
1487
1488namespace fv0a
1489{
1491DECLARE_SOA_COLUMN(Amplitude, amplitude, std::vector<float>);
1492DECLARE_SOA_COLUMN(TimeFV0A, timeFV0A, std::vector<float>);
1493DECLARE_SOA_COLUMN(Channel, channel, std::vector<uint8_t>);
1495DECLARE_SOA_COLUMN(TriggerMask, triggerMask, uint8_t);
1496} // namespace fv0a
1497
1498DECLARE_SOA_TABLE(FV0As, "AOD", "FV0A",
1499 o2::soa::Index<>, fv0a::BCId, fv0a::Amplitude, fv0a::Channel, fv0a::Time, fv0a::TriggerMask);
1500using FV0A = FV0As::iterator;
1501
1502DECLARE_SOA_TABLE(FV0AsExtra, "AOD", "FV0AEXTRA",
1503 o2::soa::Index<>, fv0a::BCId, fv0a::TimeFV0A);
1504using FV0AExtra = FV0AsExtra::iterator;
1505
1506// V0C table for Run2 only
1507namespace fv0c
1508{
1510DECLARE_SOA_COLUMN(Amplitude, amplitude, std::vector<float>);
1511DECLARE_SOA_COLUMN(Channel, channel, std::vector<uint8_t>);
1513} // namespace fv0c
1514
1515DECLARE_SOA_TABLE(FV0Cs, "AOD", "FV0C",
1516 o2::soa::Index<>, fv0c::BCId, fv0c::Amplitude, fv0a::Channel, fv0c::Time);
1517using FV0C = FV0Cs::iterator;
1518
1519namespace ft0
1520{
1522DECLARE_SOA_COLUMN(AmplitudeA, amplitudeA, std::vector<float>);
1523DECLARE_SOA_COLUMN(TimeFT0A, timeFT0A, std::vector<float>);
1524DECLARE_SOA_COLUMN(ChannelA, channelA, std::vector<uint8_t>);
1525DECLARE_SOA_COLUMN(AmplitudeC, amplitudeC, std::vector<float>);
1526DECLARE_SOA_COLUMN(TimeFT0C, timeFT0C, std::vector<float>);
1527DECLARE_SOA_COLUMN(ChannelC, channelC, std::vector<uint8_t>);
1530DECLARE_SOA_COLUMN(TriggerMask, triggerMask, uint8_t);
1532 [](float timeA, float timeC) -> float {
1534 });
1535DECLARE_SOA_DYNAMIC_COLUMN(CollTime, collTime,
1536 [](float timeA, float timeC) -> float {
1537 return (timeA + timeC) / 2;
1538 });
1539DECLARE_SOA_DYNAMIC_COLUMN(IsValidTimeA, isValidTimeA,
1540 [](float timeA) -> bool {
1541 return timeA < 30.f; // Due to HW limitations time can be only within range (-25,25) ns, dummy time is around 32 ns
1542 });
1543DECLARE_SOA_DYNAMIC_COLUMN(IsValidTimeC, isValidTimeC,
1544 [](float timeC) -> bool {
1545 return timeC < 30.f; // Due to HW limitations time can be only within range (-25,25) ns, dummy time is around 32 ns
1546 });
1547DECLARE_SOA_DYNAMIC_COLUMN(IsValidTime, isValidTime,
1548 [](float timeA, float timeC) -> bool {
1549 return (timeA < 30.f) && (timeC < 30.f); // Due to HW limitations time can be only within range (-25,25) ns, dummy time is around 32 ns
1550 });
1552 [](gsl::span<const float> vecAmpA) -> float {
1553 return std::accumulate(vecAmpA.begin(), vecAmpA.end(), 0.f, [](auto&& sum, auto&& curr) { return sum + (curr > 0 ? curr : 0); });
1554 });
1556 [](gsl::span<const float> vecAmpC) -> float {
1557 return std::accumulate(vecAmpC.begin(), vecAmpC.end(), 0.f, [](auto&& sum, auto&& curr) { return sum + (curr > 0 ? curr : 0); });
1558 });
1559
1560} // namespace ft0
1561
1562DECLARE_SOA_TABLE(FT0s, "AOD", "FT0",
1563 o2::soa::Index<>, ft0::BCId,
1564 ft0::AmplitudeA, ft0::ChannelA, ft0::AmplitudeC, ft0::ChannelC, ft0::TimeA, ft0::TimeC,
1565 ft0::TriggerMask, ft0::PosZ<ft0::TimeA, ft0::TimeC>, ft0::CollTime<ft0::TimeA, ft0::TimeC>,
1566 ft0::IsValidTimeA<ft0::TimeA>, ft0::IsValidTimeC<ft0::TimeC>, ft0::IsValidTime<ft0::TimeA, ft0::TimeC>,
1567 ft0::SumAmpA<ft0::AmplitudeA>, ft0::SumAmpC<ft0::AmplitudeC>);
1568using FT0 = FT0s::iterator;
1569
1570DECLARE_SOA_TABLE(FT0sExtra, "AOD", "FT0EXTRA",
1571 o2::soa::Index<>, ft0::BCId,
1572 ft0::TimeFT0A, ft0::TimeFT0C);
1573using FT0Extra = FT0sExtra::iterator;
1574
1575namespace fdd
1576{
1578DECLARE_SOA_COLUMN(AmplitudeA, amplitudeA, float[4]);
1579DECLARE_SOA_COLUMN(AmplitudeC, amplitudeC, float[4]);
1580
1581DECLARE_SOA_COLUMN(ChargeA, chargeA, int16_t[8]);
1582DECLARE_SOA_COLUMN(ChargeC, chargeC, int16_t[8]);
1583
1584DECLARE_SOA_COLUMN(TimeFDDA, timeFDDA, float[8]);
1585DECLARE_SOA_COLUMN(TimeFDDC, timeFDDC, float[8]);
1586
1589DECLARE_SOA_COLUMN(TriggerMask, triggerMask, uint8_t);
1590} // namespace fdd
1591
1592DECLARE_SOA_TABLE(FDDs_000, "AOD", "FDD",
1593 o2::soa::Index<>, fdd::BCId,
1594 fdd::AmplitudeA, fdd::AmplitudeC,
1595 fdd::TimeA, fdd::TimeC,
1596 fdd::TriggerMask);
1597
1598DECLARE_SOA_TABLE_VERSIONED(FDDs_001, "AOD", "FDD", 1,
1600 fdd::BCId,
1601 fdd::ChargeA, fdd::ChargeC,
1602 fdd::TimeA, fdd::TimeC,
1603 fdd::TriggerMask);
1604
1605using FDDs = FDDs_001;
1606using FDD = FDDs::iterator;
1607
1608DECLARE_SOA_TABLE(FDDsExtra, "AOD", "FDDEXTRA",
1609 o2::soa::Index<>, fdd::BCId,
1610 fdd::TimeFDDA, fdd::TimeFDDC);
1611using FDDExtra = FDDsExtra::iterator;
1612
1613namespace v0
1614{
1615DECLARE_SOA_INDEX_COLUMN_FULL(PosTrack, posTrack, int, Tracks, "_Pos");
1616DECLARE_SOA_INDEX_COLUMN_FULL(NegTrack, negTrack, int, Tracks, "_Neg");
1618DECLARE_SOA_COLUMN(V0Type, v0Type, uint8_t);
1619
1620DECLARE_SOA_DYNAMIC_COLUMN(IsStandardV0, isStandardV0,
1621 [](uint8_t V0Type) -> bool { return V0Type == 1; });
1622DECLARE_SOA_DYNAMIC_COLUMN(IsPhotonV0, isPhotonV0,
1623 [](uint8_t V0Type) -> bool { return V0Type & (1 << 1); });
1624DECLARE_SOA_DYNAMIC_COLUMN(IsCollinearV0, isCollinearV0,
1625 [](uint8_t V0Type) -> bool { return V0Type & (1 << 2); });
1626
1627} // namespace v0
1628
1629DECLARE_SOA_TABLE(V0s_000, "AOD", "V0",
1631 v0::PosTrackId, v0::NegTrackId);
1632DECLARE_SOA_TABLE_VERSIONED(V0s_001, "AOD", "V0", 1,
1633 o2::soa::Index<>, v0::CollisionId,
1634 v0::PosTrackId, v0::NegTrackId);
1635DECLARE_SOA_TABLE_VERSIONED(V0s_002, "AOD", "V0", 2,
1636 o2::soa::Index<>, v0::CollisionId,
1637 v0::PosTrackId, v0::NegTrackId,
1638 v0::V0Type,
1639 v0::IsStandardV0<v0::V0Type>,
1640 v0::IsPhotonV0<v0::V0Type>,
1641 v0::IsCollinearV0<v0::V0Type>);
1642
1643using V0s = V0s_002;
1644using V0 = V0s::iterator;
1645
1646namespace cascade
1647{
1649DECLARE_SOA_INDEX_COLUMN_FULL(Bachelor, bachelor, int, Tracks, "");
1651} // namespace cascade
1652
1653DECLARE_SOA_TABLE(Cascades_000, "AOD", "CASCADE",
1654 o2::soa::Index<>, cascade::V0Id, cascade::BachelorId);
1655DECLARE_SOA_TABLE_VERSIONED(Cascades_001, "AOD", "CASCADE", 1,
1656 o2::soa::Index<>, cascade::CollisionId, cascade::V0Id, cascade::BachelorId);
1657
1658using Cascades = Cascades_001;
1659using Cascade = Cascades::iterator;
1660
1661namespace decay3body
1662{
1663DECLARE_SOA_INDEX_COLUMN_FULL(Track0, track0, int, Tracks, "_0");
1664DECLARE_SOA_INDEX_COLUMN_FULL(Track1, track1, int, Tracks, "_1");
1665DECLARE_SOA_INDEX_COLUMN_FULL(Track2, track2, int, Tracks, "_2");
1667} // namespace decay3body
1668
1669DECLARE_SOA_TABLE(Decay3Bodys, "AOD", "DECAY3BODY",
1670 o2::soa::Index<>, decay3body::CollisionId, decay3body::Track0Id, decay3body::Track1Id, decay3body::Track2Id);
1671
1673using Decay3Body = Decay3Bodys::iterator;
1674
1675namespace strangenesstracking
1676{
1678DECLARE_SOA_INDEX_COLUMN_FULL(ITSTrack, itsTrack, int, Tracks, "_ITS");
1682
1683DECLARE_SOA_COLUMN(DecayX, decayX, float);
1684DECLARE_SOA_COLUMN(DecayY, decayY, float);
1685DECLARE_SOA_COLUMN(DecayZ, decayZ, float);
1686DECLARE_SOA_COLUMN(XiMass, xiMass, float);
1687DECLARE_SOA_COLUMN(OmegaMass, omegaMass, float);
1688DECLARE_SOA_COLUMN(H3Lmass, h3Lmass, float);
1689DECLARE_SOA_COLUMN(H4Lmass, h4Lmass, float);
1690DECLARE_SOA_COLUMN(He4Lmass, he4Lmass, float);
1691DECLARE_SOA_COLUMN(MatchingChi2, matchingChi2, float);
1692DECLARE_SOA_COLUMN(TopologyChi2, topologyChi2, float);
1693DECLARE_SOA_COLUMN(ITSclsSize, itsClsSize, float);
1694} // namespace strangenesstracking
1695
1697DECLARE_SOA_TABLE_FULL(TrackedCascades, "TrackedCascade", "AOD", "TRACKEDCASCADE",
1699 strangenesstracking::TrackId,
1700 strangenesstracking::ITSTrackId,
1701 strangenesstracking::CascadeId,
1702 strangenesstracking::DecayX,
1703 strangenesstracking::DecayY,
1704 strangenesstracking::DecayZ,
1705 strangenesstracking::XiMass,
1706 strangenesstracking::OmegaMass,
1707 strangenesstracking::MatchingChi2,
1708 strangenesstracking::TopologyChi2,
1709 strangenesstracking::ITSclsSize);
1710
1711DECLARE_SOA_TABLE_FULL(TrackedV0s, "TrackedV0", "AOD", "TRACKEDV0",
1713 strangenesstracking::TrackId,
1714 strangenesstracking::ITSTrackId,
1715 strangenesstracking::V0Id,
1716 strangenesstracking::DecayX,
1717 strangenesstracking::DecayY,
1718 strangenesstracking::DecayZ,
1719 strangenesstracking::H3Lmass,
1720 strangenesstracking::H4Lmass,
1721 strangenesstracking::MatchingChi2,
1722 strangenesstracking::TopologyChi2,
1723 strangenesstracking::ITSclsSize);
1724
1725DECLARE_SOA_TABLE_FULL(Tracked3Bodys, "Tracked3Body", "AOD", "TRACKED3BODY",
1727 strangenesstracking::TrackId,
1728 strangenesstracking::ITSTrackId,
1729 strangenesstracking::Decay3BodyId,
1730 strangenesstracking::DecayX,
1731 strangenesstracking::DecayY,
1732 strangenesstracking::DecayZ,
1733 strangenesstracking::H3Lmass,
1734 strangenesstracking::He4Lmass,
1735 strangenesstracking::MatchingChi2,
1736 strangenesstracking::TopologyChi2,
1737 strangenesstracking::ITSclsSize);
1738
1740using TrackedCascade = TrackedCascades::iterator;
1742using TrackedV0 = TrackedV0s::iterator;
1744using Tracked3body = Tracked3Bodys::iterator;
1745
1746namespace origins
1747{
1748DECLARE_SOA_COLUMN(DataframeID, dataframeID, uint64_t);
1749} // namespace origins
1750
1751DECLARE_SOA_TABLE(Origins, "AOD", "ORIGIN",
1752 o2::soa::Index<>, origins::DataframeID);
1753
1754using Origin = Origins::iterator;
1755
1756// ---- Run 2 tables ----
1757namespace run2
1758{
1759DECLARE_SOA_COLUMN(EventCuts, eventCuts, uint32_t);
1760DECLARE_SOA_COLUMN(TriggerMaskNext50, triggerMaskNext50, uint64_t);
1761DECLARE_SOA_COLUMN(L0TriggerInputMask, l0TriggerInputMask, uint32_t);
1762DECLARE_SOA_COLUMN(SPDClustersL0, spdClustersL0, uint16_t);
1763DECLARE_SOA_COLUMN(SPDClustersL1, spdClustersL1, uint16_t);
1764DECLARE_SOA_COLUMN(SPDFiredChipsL0, spdFiredChipsL0, uint16_t);
1765DECLARE_SOA_COLUMN(SPDFiredChipsL1, spdFiredChipsL1, uint16_t);
1766DECLARE_SOA_COLUMN(SPDFiredFastOrL0, spdFiredFastOrL0, uint16_t);
1767DECLARE_SOA_COLUMN(SPDFiredFastOrL1, spdFiredFastOrL1, uint16_t);
1768DECLARE_SOA_COLUMN(V0TriggerChargeA, v0TriggerChargeA, uint16_t);
1769DECLARE_SOA_COLUMN(V0TriggerChargeC, v0TriggerChargeC, uint16_t);
1770DECLARE_SOA_COLUMN(NTPCClusters, nTPCClusters, uint32_t);
1771DECLARE_SOA_COLUMN(NSDDSSDClusters, nSDDSSDClusters, uint32_t);
1772namespace oftv0
1773{
1775DECLARE_SOA_INDEX_COLUMN_FULL(PosTrack, posTrack, int, Tracks, "_Pos");
1776DECLARE_SOA_INDEX_COLUMN_FULL(NegTrack, negTrack, int, Tracks, "_Neg");
1777DECLARE_SOA_COLUMN(Px, px, float);
1778DECLARE_SOA_COLUMN(Py, py, float);
1779DECLARE_SOA_COLUMN(Pz, pz, float);
1781DECLARE_SOA_COLUMN(Qt, qt, float);
1786DECLARE_SOA_COLUMN(Chi2NDF, chi2NDF, float);
1787DECLARE_SOA_COLUMN(PsiPair, psiPair, float);
1788DECLARE_SOA_COLUMN(DCAr, dcaR, float);
1789DECLARE_SOA_COLUMN(DCAz, dcaZ, float);
1790DECLARE_SOA_COLUMN(MassInMeV, mass, float);
1791} // namespace oftv0
1792namespace pmd
1793{
1795DECLARE_SOA_COLUMN(X, pmdclsx, float);
1796DECLARE_SOA_COLUMN(Y, pmdclsy, float);
1797DECLARE_SOA_COLUMN(Z, pmdclsz, float);
1798DECLARE_SOA_COLUMN(CluADC, pmdclsadc, float);
1799DECLARE_SOA_COLUMN(CluPID, pmdclspid, float);
1800DECLARE_SOA_COLUMN(Det, pmddet, uint8_t);
1801DECLARE_SOA_COLUMN(Ncell, pmdncell, uint8_t);
1802DECLARE_SOA_COLUMN(Smn, pmdmodule, int32_t);
1803DECLARE_SOA_COLUMN(TrackNo, pmdtrackno, int32_t);
1804DECLARE_SOA_COLUMN(TrackPid, pmdtrackpid, int32_t);
1805DECLARE_SOA_COLUMN(SigX, pmdsigx, float);
1806DECLARE_SOA_COLUMN(SigY, pmdsigy, float);
1807DECLARE_SOA_COLUMN(ClMatching, pmdclmatching, int32_t);
1808} // namespace pmd
1809} // namespace run2
1810
1811DECLARE_SOA_TABLE(Run2BCInfos_000, "AOD", "RUN2BCINFO", run2::EventCuts,
1812 run2::TriggerMaskNext50, run2::L0TriggerInputMask,
1813 run2::SPDClustersL0, run2::SPDClustersL1,
1814 run2::SPDFiredChipsL0, run2::SPDFiredChipsL1,
1815 run2::SPDFiredFastOrL0, run2::SPDFiredFastOrL1,
1816 run2::V0TriggerChargeA, run2::V0TriggerChargeC);
1817
1818DECLARE_SOA_TABLE_VERSIONED(Run2BCInfos_001, "AOD", "RUN2BCINFO", 1,
1819 run2::EventCuts,
1820 run2::TriggerMaskNext50, run2::L0TriggerInputMask,
1821 run2::SPDClustersL0, run2::SPDClustersL1,
1822 run2::SPDFiredChipsL0, run2::SPDFiredChipsL1,
1823 run2::SPDFiredFastOrL0, run2::SPDFiredFastOrL1,
1824 run2::V0TriggerChargeA, run2::V0TriggerChargeC,
1825 run2::NTPCClusters, run2::NSDDSSDClusters);
1826
1827using Run2BCInfos = Run2BCInfos_001;
1828using Run2BCInfo = Run2BCInfos::iterator;
1829
1830DECLARE_SOA_TABLE(Run2OTFV0s, "AOD", "Run2OTFV0",
1832 run2::oftv0::CollisionId, run2::oftv0::PosTrackId, run2::oftv0::NegTrackId,
1833 run2::oftv0::Px, run2::oftv0::Py, run2::oftv0::Pz, run2::oftv0::E,
1834 run2::oftv0::Qt, run2::oftv0::Alpha,
1835 run2::oftv0::X, run2::oftv0::Y, run2::oftv0::Z,
1836 run2::oftv0::Chi2NDF, run2::oftv0::PsiPair,
1837 run2::oftv0::DCAr, run2::oftv0::DCAz,
1838 run2::oftv0::MassInMeV);
1839
1840using Run2OTFV0 = Run2OTFV0s::iterator;
1841
1842DECLARE_SOA_TABLE(Pmds, "AOD", "PMD",
1843 o2::soa::Index<>, run2::pmd::BCId, run2::pmd::X, run2::pmd::Y,
1844 run2::pmd::Z, run2::pmd::CluADC, run2::pmd::CluPID, run2::pmd::Det,
1845 run2::pmd::Ncell, run2::pmd::Smn, run2::pmd::TrackNo, run2::pmd::TrackPid,
1846 run2::pmd::SigX, run2::pmd::SigY, run2::pmd::ClMatching);
1847
1848using Pmd = Pmds::iterator;
1849
1850// ---- MC tables ----
1851namespace mccollision
1852{
1854DECLARE_SOA_COLUMN(GeneratorsID, generatorsID, short);
1855DECLARE_SOA_COLUMN(PosX, posX, float);
1856DECLARE_SOA_COLUMN(PosY, posY, float);
1857DECLARE_SOA_COLUMN(PosZ, posZ, float);
1860DECLARE_SOA_COLUMN(ImpactParameter, impactParameter, float);
1861DECLARE_SOA_COLUMN(EventPlaneAngle, eventPlaneAngle, float);
1862DECLARE_SOA_DYNAMIC_COLUMN(GetGeneratorId, getGeneratorId,
1863 [](short generatorsID) -> int { return o2::mcgenid::getGeneratorId(generatorsID); });
1864DECLARE_SOA_DYNAMIC_COLUMN(GetSubGeneratorId, getSubGeneratorId,
1865 [](short generatorsID) -> int { return o2::mcgenid::getSubGeneratorId(generatorsID); });
1866DECLARE_SOA_DYNAMIC_COLUMN(GetSourceId, getSourceId,
1867 [](short generatorsID) -> int { return o2::mcgenid::getSourceId(generatorsID); });
1868
1869} // namespace mccollision
1870
1871DECLARE_SOA_TABLE(McCollisions_000, "AOD", "MCCOLLISION",
1872 o2::soa::Index<>, mccollision::BCId,
1873 mccollision::GeneratorsID,
1874 mccollision::PosX, mccollision::PosY, mccollision::PosZ,
1875 mccollision::T, mccollision::Weight,
1876 mccollision::ImpactParameter,
1877 mccollision::GetGeneratorId<mccollision::GeneratorsID>,
1878 mccollision::GetSubGeneratorId<mccollision::GeneratorsID>,
1879 mccollision::GetSourceId<mccollision::GeneratorsID>);
1880DECLARE_SOA_TABLE_VERSIONED(McCollisions_001, "AOD", "MCCOLLISION", 1,
1881 o2::soa::Index<>, mccollision::BCId,
1882 mccollision::GeneratorsID,
1883 mccollision::PosX, mccollision::PosY, mccollision::PosZ,
1884 mccollision::T, mccollision::Weight,
1885 mccollision::ImpactParameter,
1886 mccollision::EventPlaneAngle,
1887 mccollision::GetGeneratorId<mccollision::GeneratorsID>,
1888 mccollision::GetSubGeneratorId<mccollision::GeneratorsID>,
1889 mccollision::GetSourceId<mccollision::GeneratorsID>);
1890
1891using McCollisions = McCollisions_001;
1892using McCollision = McCollisions::iterator;
1893
1894namespace mcparticle
1895{
1897DECLARE_SOA_COLUMN(PdgCode, pdgCode, int);
1898DECLARE_SOA_COLUMN(StatusCode, statusCode, int);
1899DECLARE_SOA_COLUMN(Flags, flags, uint8_t);
1900DECLARE_SOA_SELF_INDEX_COLUMN_FULL(Mother0, mother0, int, "McParticles_Mother0");
1901DECLARE_SOA_SELF_INDEX_COLUMN_FULL(Mother1, mother1, int, "McParticles_Mother1");
1902DECLARE_SOA_SELF_INDEX_COLUMN_FULL(Daughter0, daughter0, int, "McParticles_Daughter0");
1903DECLARE_SOA_SELF_INDEX_COLUMN_FULL(Daughter1, daughter1, int, "McParticles_Daughter1");
1907DECLARE_SOA_COLUMN(Px, px, float);
1908DECLARE_SOA_COLUMN(Py, py, float);
1909DECLARE_SOA_COLUMN(Pz, pz, float);
1911DECLARE_SOA_COLUMN(Vx, vx, float);
1912DECLARE_SOA_COLUMN(Vy, vy, float);
1913DECLARE_SOA_COLUMN(Vz, vz, float);
1914DECLARE_SOA_COLUMN(Vt, vt, float);
1915DECLARE_SOA_DYNAMIC_COLUMN(ProducedByGenerator, producedByGenerator,
1916 [](uint8_t flags) -> bool { return (flags & o2::aod::mcparticle::enums::ProducedByTransport) == 0x0; });
1917DECLARE_SOA_DYNAMIC_COLUMN(FromBackgroundEvent, fromBackgroundEvent,
1919DECLARE_SOA_DYNAMIC_COLUMN(GetProcess, getProcess,
1920 [](uint8_t flags, int statusCode) -> int { if ((flags & o2::aod::mcparticle::enums::ProducedByTransport) == 0x0) { return 0 /*TMCProcess::kPrimary*/; } else { return statusCode; } });
1921DECLARE_SOA_DYNAMIC_COLUMN(GetGenStatusCode, getGenStatusCode,
1922 [](uint8_t flags, int statusCode) -> int { if ((flags & o2::aod::mcparticle::enums::ProducedByTransport) == 0x0) { return o2::mcgenstatus::getGenStatusCode(statusCode); } else { return -1; } });
1923DECLARE_SOA_DYNAMIC_COLUMN(GetHepMCStatusCode, getHepMCStatusCode,
1924 [](uint8_t flags, int statusCode) -> int { if ((flags & o2::aod::mcparticle::enums::ProducedByTransport) == 0x0) { return o2::mcgenstatus::getHepMCStatusCode(statusCode); } else { return -1; } });
1925DECLARE_SOA_DYNAMIC_COLUMN(IsPhysicalPrimary, isPhysicalPrimary,
1928 [](float px, float py, float pz) -> std::array<float, 3> { return std::array<float, 3>{px, py, pz}; });
1929
1930DECLARE_SOA_EXPRESSION_COLUMN(Phi, phi, float,
1931 o2::constants::math::PI + natan2(-1.0f * aod::mcparticle::py, -1.0f * aod::mcparticle::px));
1933 ifnode((nsqrt(aod::mcparticle::px * aod::mcparticle::px +
1934 aod::mcparticle::py * aod::mcparticle::py +
1935 aod::mcparticle::pz * aod::mcparticle::pz) -
1936 aod::mcparticle::pz) < static_cast<float>(1e-7),
1937 ifnode(aod::mcparticle::pz < 0.f, -100.f, 100.f),
1938 0.5f * nlog((nsqrt(aod::mcparticle::px * aod::mcparticle::px +
1939 aod::mcparticle::py * aod::mcparticle::py +
1940 aod::mcparticle::pz * aod::mcparticle::pz) +
1941 aod::mcparticle::pz) /
1942 (nsqrt(aod::mcparticle::px * aod::mcparticle::px +
1943 aod::mcparticle::py * aod::mcparticle::py +
1944 aod::mcparticle::pz * aod::mcparticle::pz) -
1945 aod::mcparticle::pz))));
1947 nsqrt(aod::mcparticle::px* aod::mcparticle::px +
1948 aod::mcparticle::py * aod::mcparticle::py));
1950 nsqrt(aod::mcparticle::px* aod::mcparticle::px +
1951 aod::mcparticle::py * aod::mcparticle::py +
1952 aod::mcparticle::pz * aod::mcparticle::pz));
1954 ifnode((aod::mcparticle::e - aod::mcparticle::pz) < static_cast<float>(1e-7),
1955 ifnode(aod::mcparticle::pz < 0.f, -100.f, 100.f),
1956 0.5f * nlog((aod::mcparticle::e + aod::mcparticle::pz) /
1957 (aod::mcparticle::e - aod::mcparticle::pz))));
1958} // namespace mcparticle
1959
1960DECLARE_SOA_TABLE_FULL(StoredMcParticles_000, "McParticles", "AOD", "MCPARTICLE",
1961 o2::soa::Index<>, mcparticle::McCollisionId,
1962 mcparticle::PdgCode, mcparticle::StatusCode, mcparticle::Flags,
1963 mcparticle::Mother0Id, mcparticle::Mother1Id,
1964 mcparticle::Daughter0Id, mcparticle::Daughter1Id, mcparticle::Weight,
1965 mcparticle::Px, mcparticle::Py, mcparticle::Pz, mcparticle::E,
1966 mcparticle::Vx, mcparticle::Vy, mcparticle::Vz, mcparticle::Vt,
1967 mcparticle::PVector<mcparticle::Px, mcparticle::Py, mcparticle::Pz>,
1968 mcparticle::ProducedByGenerator<mcparticle::Flags>,
1969 mcparticle::FromBackgroundEvent<mcparticle::Flags>,
1970 mcparticle::GetGenStatusCode<mcparticle::Flags, mcparticle::StatusCode>,
1971 mcparticle::GetHepMCStatusCode<mcparticle::Flags, mcparticle::StatusCode>,
1972 mcparticle::GetProcess<mcparticle::Flags, mcparticle::StatusCode>,
1973 mcparticle::IsPhysicalPrimary<mcparticle::Flags>);
1974
1975DECLARE_SOA_TABLE_FULL_VERSIONED(StoredMcParticles_001, "McParticles", "AOD", "MCPARTICLE", 1,
1976 o2::soa::Index<>, mcparticle::McCollisionId,
1977 mcparticle::PdgCode, mcparticle::StatusCode, mcparticle::Flags,
1978 mcparticle::MothersIds, mcparticle::DaughtersIdSlice, mcparticle::Weight,
1979 mcparticle::Px, mcparticle::Py, mcparticle::Pz, mcparticle::E,
1980 mcparticle::Vx, mcparticle::Vy, mcparticle::Vz, mcparticle::Vt,
1981 mcparticle::PVector<mcparticle::Px, mcparticle::Py, mcparticle::Pz>,
1982 mcparticle::ProducedByGenerator<mcparticle::Flags>,
1983 mcparticle::FromBackgroundEvent<mcparticle::Flags>,
1984 mcparticle::GetGenStatusCode<mcparticle::Flags, mcparticle::StatusCode>,
1985 mcparticle::GetHepMCStatusCode<mcparticle::Flags, mcparticle::StatusCode>,
1986 mcparticle::GetProcess<mcparticle::Flags, mcparticle::StatusCode>,
1987 mcparticle::IsPhysicalPrimary<mcparticle::Flags>);
1988
1989DECLARE_SOA_EXTENDED_TABLE(McParticles_000, StoredMcParticles_000, "EXMCPARTICLE", 0,
1990 mcparticle::Phi,
1991 mcparticle::Eta,
1992 mcparticle::Pt,
1993 mcparticle::P,
1994 mcparticle::Y);
1995
1996DECLARE_SOA_EXTENDED_TABLE(McParticles_001, StoredMcParticles_001, "EXMCPARTICLE", 1,
1997 mcparticle::Phi,
1998 mcparticle::Eta,
1999 mcparticle::Pt,
2000 mcparticle::P,
2001 mcparticle::Y);
2002
2003using StoredMcParticles = StoredMcParticles_001;
2004using McParticles = McParticles_001;
2005using McParticle = McParticles::iterator;
2006} // namespace aod
2007namespace soa
2008{
2009DECLARE_EQUIVALENT_FOR_INDEX_NG("COLLISION/0", "COLLISION/1");
2010DECLARE_EQUIVALENT_FOR_INDEX_NG("MCPARTICLE/0", "MCPARTICLE/1");
2011DECLARE_EQUIVALENT_FOR_INDEX_NG("TRACK/0", "TRACK_IU/0");
2012DECLARE_EQUIVALENT_FOR_INDEX_NG("TRACK/0", "TRACKEXTRA/0");
2013DECLARE_EQUIVALENT_FOR_INDEX_NG("TRACK_IU/0", "TRACKEXTRA/0");
2014DECLARE_EQUIVALENT_FOR_INDEX_NG("TRACK/0", "TRACKEXTRA/1");
2015DECLARE_EQUIVALENT_FOR_INDEX_NG("TRACK_IU/0", "TRACKEXTRA/1");
2016DECLARE_EQUIVALENT_FOR_INDEX_NG("TRACK/0", "TRACKEXTRA/2");
2017DECLARE_EQUIVALENT_FOR_INDEX_NG("TRACK_IU/0", "TRACKEXTRA/2");
2018DECLARE_EQUIVALENT_FOR_INDEX_NG("TRACKEXTRA/0", "TRACKEXTRA/1");
2019DECLARE_EQUIVALENT_FOR_INDEX_NG("TRACKEXTRA/0", "TRACKEXTRA/2");
2020DECLARE_EQUIVALENT_FOR_INDEX_NG("TRACKEXTRA/1", "TRACKEXTRA/2");
2022DECLARE_EQUIVALENT_FOR_INDEX_NG("MFTTracks/0", "MFTTracks/1");
2023} // namespace soa
2024
2025namespace aod
2026{
2027namespace mctracklabel
2028{
2030DECLARE_SOA_COLUMN(McMask, mcMask, uint16_t);
2031} // namespace mctracklabel
2032
2033DECLARE_SOA_TABLE(McTrackLabels, "AOD", "MCTRACKLABEL",
2034 mctracklabel::McParticleId, mctracklabel::McMask);
2035using McTrackLabel = McTrackLabels::iterator;
2036
2037namespace mcmfttracklabel
2038{
2040DECLARE_SOA_COLUMN(McMask, mcMask, uint8_t);
2041} // namespace mcmfttracklabel
2042
2043DECLARE_SOA_TABLE(McMFTTrackLabels, "AOD", "MCMFTTRACKLABEL",
2044 mcmfttracklabel::McParticleId, mcmfttracklabel::McMask);
2045using McMFTTrackLabel = McMFTTrackLabels::iterator;
2046
2047namespace mcfwdtracklabel
2048{
2050DECLARE_SOA_COLUMN(McMask, mcMask, uint8_t);
2051} // namespace mcfwdtracklabel
2052
2053DECLARE_SOA_TABLE(McFwdTrackLabels, "AOD", "MCFWDTRACKLABEL",
2054 mcfwdtracklabel::McParticleId, mcfwdtracklabel::McMask);
2055using McFwdTrackLabel = McFwdTrackLabels::iterator;
2056
2057namespace mccalolabel
2058{
2061DECLARE_SOA_COLUMN(McMask, mcMask, uint16_t);
2062DECLARE_SOA_COLUMN(AmplitudeA, amplitudeA, std::vector<float>);
2063} // namespace mccalolabel
2064
2065DECLARE_SOA_TABLE(McCaloLabels_000, "AOD", "MCCALOLABEL",
2066 mccalolabel::McParticleId, mccalolabel::McMask);
2067DECLARE_SOA_TABLE_VERSIONED(McCaloLabels_001, "AOD", "MCCALOLABEL", 1,
2068 mccalolabel::McParticleIds, mccalolabel::AmplitudeA);
2069using McCaloLabels = McCaloLabels_000;
2070using McCaloLabel = McCaloLabels::iterator;
2071
2072namespace mccollisionlabel
2073{
2075DECLARE_SOA_COLUMN(McMask, mcMask, uint16_t);
2076} // namespace mccollisionlabel
2077
2078DECLARE_SOA_TABLE(McCollisionLabels, "AOD", "MCCOLLISLABEL",
2079 mccollisionlabel::McCollisionId, mccollisionlabel::McMask);
2080using McCollisionLabel = McCollisionLabels::iterator;
2081
2082// --- HepMC ---
2083namespace hepmcxsection
2084{
2086DECLARE_SOA_COLUMN(GeneratorsID, generatorsID, short);
2087DECLARE_SOA_COLUMN(Accepted, accepted, uint64_t);
2088DECLARE_SOA_COLUMN(Attempted, attempted, uint64_t);
2089DECLARE_SOA_COLUMN(XsectGen, xsectGen, float);
2090DECLARE_SOA_COLUMN(XsectErr, xsectErr, float);
2091DECLARE_SOA_COLUMN(PtHard, ptHard, float);
2092DECLARE_SOA_COLUMN(NMPI, nMPI, int);
2093DECLARE_SOA_COLUMN(ProcessId, processId, int);
2094} // namespace hepmcxsection
2095
2096DECLARE_SOA_TABLE(HepMCXSections, "AOD", "HEPMCXSECTION",
2097 o2::soa::Index<>, hepmcxsection::McCollisionId, hepmcxsection::GeneratorsID,
2098 hepmcxsection::Accepted, hepmcxsection::Attempted, hepmcxsection::XsectGen,
2099 hepmcxsection::XsectErr, hepmcxsection::PtHard, hepmcxsection::NMPI, hepmcxsection::ProcessId);
2100using HepMCXSection = HepMCXSections::iterator;
2101
2102namespace hepmcpdfinfo
2103{
2105DECLARE_SOA_COLUMN(GeneratorsID, generatorsID, short);
2106DECLARE_SOA_COLUMN(Id1, id1, int);
2107DECLARE_SOA_COLUMN(Id2, id2, int);
2108DECLARE_SOA_COLUMN(PdfId1, pdfId1, int);
2109DECLARE_SOA_COLUMN(PdfId2, pdfId2, int);
2111DECLARE_SOA_COLUMN(X2, x2, float);
2112DECLARE_SOA_COLUMN(ScalePdf, scalePdf, float);
2113DECLARE_SOA_COLUMN(Pdf1, pdf1, float);
2114DECLARE_SOA_COLUMN(Pdf2, pdf2, float);
2115} // namespace hepmcpdfinfo
2116
2117DECLARE_SOA_TABLE(HepMCPdfInfos, "AOD", "HEPMCPDFINFO",
2118 o2::soa::Index<>, hepmcpdfinfo::McCollisionId, hepmcpdfinfo::GeneratorsID,
2119 hepmcpdfinfo::Id1, hepmcpdfinfo::Id2,
2120 hepmcpdfinfo::PdfId1, hepmcpdfinfo::PdfId2,
2121 hepmcpdfinfo::X1, hepmcpdfinfo::X2,
2122 hepmcpdfinfo::ScalePdf, hepmcpdfinfo::Pdf1, hepmcpdfinfo::Pdf2);
2123using HepMCPdfInfo = HepMCPdfInfos::iterator;
2124
2125namespace hepmcheavyion
2126{
2128DECLARE_SOA_COLUMN(GeneratorsID, generatorsID, short);
2129DECLARE_SOA_COLUMN(NcollHard, ncollHard, int);
2130DECLARE_SOA_COLUMN(NpartProj, npartProj, int);
2131DECLARE_SOA_COLUMN(NpartTarg, npartTarg, int);
2132DECLARE_SOA_COLUMN(Ncoll, ncoll, int);
2133DECLARE_SOA_COLUMN(NNwoundedCollisions, nNwoundedCollisions, int);
2134DECLARE_SOA_COLUMN(NwoundedNCollisions, nwoundedNCollisions, int);
2135DECLARE_SOA_COLUMN(NwoundedNwoundedCollisions, nwoundedNwoundedCollisions, int);
2136DECLARE_SOA_COLUMN(SpectatorNeutrons, spectatorNeutrons, int);
2137DECLARE_SOA_COLUMN(SpectatorProtons, spectatorProtons, int);
2138DECLARE_SOA_COLUMN(ImpactParameter, impactParameter, float);
2139DECLARE_SOA_COLUMN(EventPlaneAngle, eventPlaneAngle, float);
2140DECLARE_SOA_COLUMN(Eccentricity, eccentricity, float);
2141DECLARE_SOA_COLUMN(SigmaInelNN, sigmaInelNN, float);
2142DECLARE_SOA_COLUMN(Centrality, centrality, float);
2143} // namespace hepmcheavyion
2144
2145DECLARE_SOA_TABLE(HepMCHeavyIons, "AOD", "HEPMCHEAVYION",
2146 o2::soa::Index<>, hepmcheavyion::McCollisionId, hepmcheavyion::GeneratorsID,
2147 hepmcheavyion::NcollHard, hepmcheavyion::NpartProj, hepmcheavyion::NpartTarg,
2148 hepmcheavyion::Ncoll, hepmcheavyion::NNwoundedCollisions, hepmcheavyion::NwoundedNCollisions,
2149 hepmcheavyion::NwoundedNwoundedCollisions, hepmcheavyion::SpectatorNeutrons,
2150 hepmcheavyion::SpectatorProtons, hepmcheavyion::ImpactParameter, hepmcheavyion::EventPlaneAngle,
2151 hepmcheavyion::Eccentricity, hepmcheavyion::SigmaInelNN, hepmcheavyion::Centrality);
2152using HepMCHeavyIon = HepMCHeavyIons::iterator;
2153
2154// --- Matching between collisions and other tables through BC ---
2155
2167
2168// First entry: Collision
2169#define INDEX_LIST_RUN2 indices::CollisionId, indices::ZdcId, indices::BCId, indices::FT0Id, indices::FV0AId, indices::FV0CId, indices::FDDId
2170DECLARE_SOA_INDEX_TABLE_EXCLUSIVE(Run2MatchedExclusive, BCs, "MA_RN2_EX", INDEX_LIST_RUN2);
2171DECLARE_SOA_INDEX_TABLE(Run2MatchedSparse, BCs, "MA_RN2_SP", INDEX_LIST_RUN2);
2172
2173#define INDEX_LIST_RUN3 indices::CollisionId, indices::ZdcId, indices::BCId, indices::FT0Id, indices::FV0AId, indices::FDDId
2174DECLARE_SOA_INDEX_TABLE_EXCLUSIVE(Run3MatchedExclusive, BCs, "MA_RN3_EX", INDEX_LIST_RUN3);
2175DECLARE_SOA_INDEX_TABLE(Run3MatchedSparse, BCs, "MA_RN3_SP", INDEX_LIST_RUN3);
2176
2177// First entry: BC
2178DECLARE_SOA_INDEX_TABLE_EXCLUSIVE(MatchedBCCollisionsExclusive, BCs, "MA_BCCOL_EX",
2179 indices::BCId, indices::CollisionId);
2180DECLARE_SOA_INDEX_TABLE(MatchedBCCollisionsSparse, BCs, "MA_BCCOL_SP",
2181 indices::BCId, indices::CollisionId);
2182
2183DECLARE_SOA_INDEX_TABLE_EXCLUSIVE(MatchedBCCollisionsExclusiveMulti, BCs, "MA_BCCOLS_EX",
2184 indices::BCId, indices::CollisionIds);
2185DECLARE_SOA_INDEX_TABLE(MatchedBCCollisionsSparseMulti, BCs, "MA_BCCOLS_SP",
2186 indices::BCId, indices::CollisionIds);
2187
2188DECLARE_SOA_INDEX_TABLE_EXCLUSIVE(Run3MatchedToBCExclusive, BCs, "MA_RN3_BC_EX",
2189 indices::BCId, indices::ZdcId, indices::FT0Id, indices::FV0AId, indices::FDDId);
2190DECLARE_SOA_INDEX_TABLE(Run3MatchedToBCSparse, BCs, "MA_RN3_BC_SP",
2191 indices::BCId, indices::ZdcId, indices::FT0Id, indices::FV0AId, indices::FDDId);
2192
2193DECLARE_SOA_INDEX_TABLE(Run2MatchedToBCSparse, BCs, "MA_RN2_BC_SP",
2194 indices::BCId, indices::ZdcId, indices::FT0Id, indices::FV0AId, indices::FV0CId, indices::FDDId);
2195
2196} // namespace aod
2197namespace soa
2198{
2199// equivalences
2200DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracks, aod::McTrackLabels);
2201DECLARE_EQUIVALENT_FOR_INDEX(aod::StoredTracksIU, aod::McTrackLabels);
2203// Joins with collisions (only for sparse ones)
2204// NOTE: index table needs to be always last argument
2205extern template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Collisions, aod::Run2MatchedSparse>;
2206extern template struct JoinFull<o2::aod::Hash<"JOIN/0"_h>, aod::Collisions, aod::Run3MatchedSparse>;
2207} // namespace soa
2208namespace aod
2209{
2212
2213} // namespace aod
2214
2215} // namespace o2
2216#endif // O2_FRAMEWORK_ANALYSISDATAMODEL_H_
#define DECLARE_SOA_ARRAY_INDEX_COLUMN(_Name_, _Getter_)
Definition ASoA.h:2832
#define DECLARE_SOA_SELF_INDEX_COLUMN_FULL(_Name_, _Getter_, _Type_, _Label_)
Definition ASoA.h:2974
#define DECLARE_SOA_SLICE_INDEX_COLUMN(_Name_, _Getter_)
Definition ASoA.h:2691
#define DECLARE_SOA_DYNAMIC_COLUMN(_Name_, _Getter_,...)
Definition ASoA.h:3140
#define DECLARE_SOA_TABLE(_Name_, _Origin_, _Desc_,...)
Definition ASoA.h:3226
#define DECLARE_SOA_EXPRESSION_COLUMN(_Name_, _Getter_, _Type_, _Expression_)
Definition ASoA.h:2546
#define DECLARE_SOA_COLUMN(_Name_, _Getter_, _Type_)
Definition ASoA.h:2472
#define DECLARE_SOA_INDEX_COLUMN_FULL(_Name_, _Getter_, _Type_, _Table_, _Suffix_)
Definition ASoA.h:2913
#define DECLARE_EQUIVALENT_FOR_INDEX(_Base_, _Equiv_)
Definition ASoA.h:2389
#define DECLARE_SOA_SELF_SLICE_INDEX_COLUMN(_Name_, _Getter_)
Definition ASoA.h:3039
#define DECLARE_SOA_TABLE_FULL(_Name_, _Label_, _Origin_, _Desc_,...)
Definition ASoA.h:3221
#define DECLARE_EQUIVALENT_FOR_INDEX_NG(_Base_, _Equiv_)
Definition ASoA.h:2395
#define DECLARE_SOA_TABLE_VERSIONED(_Name_, _Origin_, _Desc_, _Version_,...)
Definition ASoA.h:3229
#define DECLARE_SOA_INDEX_COLUMN(_Name_, _Getter_)
Definition ASoA.h:2914
#define DECLARE_SOA_TABLE_FULL_VERSIONED(_Name_, _Label_, _Origin_, _Desc_, _Version_,...)
Definition ASoA.h:3217
#define DECLARE_SOA_EXTENDED_TABLE(_Name_, _Table_, _Description_, _Version_,...)
Definition ASoA.h:3268
#define DECLARE_SOA_INDEX_TABLE_EXCLUSIVE(_Name_, _Key_, _Description_,...)
Definition ASoA.h:3367
#define DECLARE_SOA_INDEX_TABLE(_Name_, _Key_, _Description_,...)
Definition ASoA.h:3364
#define DECLARE_SOA_SELF_ARRAY_INDEX_COLUMN(_Name_, _Getter_)
Definition ASoA.h:3110
#define INDEX_LIST_RUN3
#define INDEX_LIST_RUN2
int64_t timeC
int64_t timeA
uint64_t bc
Definition RawEventData.h:5
int16_t time
Definition RawEventData.h:4
TOF PID utilities to work with the information stored in the AO2D.
Some ALICE geometry constants of common interest.
useful math constants
Header to collect physics constants.
Some ZDC constants shared between O2 and O2Physics.
int nClusters
float sum(float s, o2::dcs::DataPointValue v)
Definition dcs-ccdb.cxx:39
constexpr bool run2
GLfloat GLfloat GLfloat alpha
Definition glcorearb.h:279
GLint GLenum GLint x
Definition glcorearb.h:403
const GLfloat * m
Definition glcorearb.h:4066
GLuint GLfloat GLfloat GLfloat x1
Definition glcorearb.h:5034
GLuint GLuint GLfloat weight
Definition glcorearb.h:5477
GLuint GLsizei GLsizei * length
Definition glcorearb.h:790
GLsizei GLenum const void * indices
Definition glcorearb.h:400
GLfloat v0
Definition glcorearb.h:811
GLbitfield flags
Definition glcorearb.h:1570
GLenum GLuint GLint GLint layer
Definition glcorearb.h:1310
GLboolean r
Definition glcorearb.h:1233
GLdouble GLdouble GLdouble z
Definition glcorearb.h:843
o2::constants::math::PI natan2(-1.0f *aod::mcparticle::py, -1.0f *aod::mcparticle::px))
uint8_t itsSharedClusterMap uint8_t
constexpr uint8_t bit
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
FV0Cs::iterator FV0C
StoredMcParticles_001 StoredMcParticles
TrackedV0s::iterator TrackedV0
Calos::iterator Calo
FT0sExtra::iterator FT0Extra
McParticles_001 McParticles
Origins::iterator Origin
FullTracks::iterator FullTrack
BCs::iterator BC
Pmds::iterator Pmd
FDDsExtra::iterator FDDExtra
HepMCHeavyIons::iterator HepMCHeavyIon
FT0s::iterator FT0
Tracked3Bodys Tracked3Bodys
TracksExtra::iterator TrackExtra
TrackedCascades TrackedCascades
McCollisions_001 McCollisions
AmbiguousMFTTracks::iterator AmbiguousMFTTrack
Zdcs::iterator Zdc
new version
TracksQA_003 TracksQAVersion
FDDs::iterator FDD
this defines the current default version
AmbiguousFwdTracks::iterator AmbiguousFwdTrack
Run2OTFV0s::iterator Run2OTFV0
TrackedV0s TrackedV0s
FV0AsExtra::iterator FV0AExtra
StoredTracksExtra_002 StoredTracksExtra
HepMCXSections::iterator HepMCXSection
Decay3Bodys Decay3Bodys
FV0As::iterator FV0A
McFwdTrackLabels::iterator McFwdTrackLabel
Cascades_001 Cascades
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
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
HMPIDs::iterator HMPID
McMFTTrackLabels::iterator McMFTTrackLabel
TracksCov::iterator TrackCov
HepMCPdfInfos::iterator HepMCPdfInfo
TracksExtra_002 TracksExtra
StoredMFTTracks_001 StoredMFTTracks
Decay3Bodys::iterator Decay3Body
this defines the current default version
Tracks::iterator Track
HMPID_001 HMPIDs
FullFwdTracks::iterator FullFwdTrack
TracksCovIU::iterator TrackCovIU
MFTTracks_001 MFTTracks
Run2BCInfos::iterator Run2BCInfo
McCaloLabels_000 McCaloLabels
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
constexpr float Almost0
constexpr float TwoPI
constexpr float PI
constexpr float PIQuarter
constexpr float VeryBig
constexpr double MassHelium3
constexpr double MassTriton
constexpr double MassMuon
constexpr double MassKaonCharged
constexpr float LightSpeedCm2NS
constexpr double MassDeuteron
constexpr double MassAlpha
constexpr double MassElectron
constexpr double MassProton
constexpr double MassPionCharged
float MassToExpTime(float tofExpMom, float length, float massSquared)
Compute the expected time of flight for a given momentum, length and massSquared.
Definition PID.h:36
int getSourceId(short encoded)
int getGeneratorId(short encoded)
int getSubGeneratorId(short encoded)
int getGenStatusCode(MCGenStatusEncoding enc)
int getHepMCStatusCode(MCGenStatusEncoding enc)
constexpr int IdZPC4
constexpr int IdZPA2
constexpr int IdZNA3
constexpr int IdZNA1
constexpr int IdZPA1
constexpr int IdZNC2
constexpr int IdZEM1
constexpr int IdZNCC
constexpr int IdZPAC
constexpr int IdZPC2
constexpr int IdZPA4
constexpr int IdZNC1
constexpr int IdZNC3
constexpr int IdZPCC
constexpr int IdZPC1
constexpr int IdZPA3
constexpr int IdZNC4
constexpr int IdZEM2
constexpr int IdZNA2
constexpr int IdZPC3
constexpr int IdZNA4
constexpr int IdZNAC
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
union o2::aod::track::extensions::TPCTimeErrEncoding::TPCDeltaTime encoding
table_t::template iterator_template< DefaultIndexPolicy, self_t, Ts... > iterator
Definition ASoA.h:3405