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