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