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