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