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