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