Skip to content

Commit 87b4198

Browse files
authored
Add momentum vector in track tables (#12991)
Allows faster calculation of px, py, pz in one go and reduces code operating with arrays.
1 parent 3e5abd9 commit 87b4198

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

Framework/Core/include/Framework/AnalysisDataModel.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,12 @@
1212
#define O2_FRAMEWORK_ANALYSISDATAMODEL_H_
1313

1414
#include "Framework/ASoA.h"
15+
1516
#include <cmath>
1617
#include <bitset>
1718
#include <numeric>
19+
#include <utility> // std::move
20+
1821
#include "Framework/DataTypes.h"
1922
#include "CommonConstants/MathConstants.h"
2023
#include "CommonConstants/PhysicsConstants.h"
@@ -153,6 +156,17 @@ DECLARE_SOA_DYNAMIC_COLUMN(Pz, pz, //! Momentum in z-direction in GeV/c
153156
auto pt = 1.f / std::abs(signed1Pt);
154157
return pt * tgl;
155158
});
159+
DECLARE_SOA_DYNAMIC_COLUMN(PVector, pVector, //! Momentum vector in x,y,z-directions in GeV/c
160+
[](float signed1Pt, float snp, float alpha, float tgl) -> std::array<float, 3> {
161+
const auto pt = 1.f / std::abs(signed1Pt);
162+
// FIXME: GCC & clang should optimize to sincosf
163+
const float cs = cosf(alpha), sn = sinf(alpha);
164+
const auto r = std::sqrt((1.f - snp) * (1.f + snp));
165+
const auto px = pt * (r * cs - snp * sn);
166+
const auto py = pt * (snp * cs + r * sn);
167+
const auto pz = pt * tgl;
168+
return std::move(std::array<float, 3>{std::move(px), std::move(py), std::move(pz)});
169+
});
156170
DECLARE_SOA_EXPRESSION_COLUMN(P, p, float, //! Momentum in Gev/c
157171
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)));
158172
DECLARE_SOA_DYNAMIC_COLUMN(Energy, energy, //! Track energy, computed under the mass assumption given as input
@@ -366,6 +380,7 @@ DECLARE_SOA_TABLE_FULL(StoredTracks, "Tracks", "AOD", "TRACK", //! On disk versi
366380
track::Px<track::Signed1Pt, track::Snp, track::Alpha>,
367381
track::Py<track::Signed1Pt, track::Snp, track::Alpha>,
368382
track::Pz<track::Signed1Pt, track::Tgl>,
383+
track::PVector<track::Signed1Pt, track::Snp, track::Alpha, track::Tgl>,
369384
track::Energy<track::Signed1Pt, track::Tgl>,
370385
track::Rapidity<track::Signed1Pt, track::Tgl>,
371386
track::Sign<track::Signed1Pt>,
@@ -385,6 +400,7 @@ DECLARE_SOA_TABLE_FULL(StoredTracksIU, "Tracks_IU", "AOD", "TRACK_IU", //! On di
385400
track::Px<track::Signed1Pt, track::Snp, track::Alpha>,
386401
track::Py<track::Signed1Pt, track::Snp, track::Alpha>,
387402
track::Pz<track::Signed1Pt, track::Tgl>,
403+
track::PVector<track::Signed1Pt, track::Snp, track::Alpha, track::Tgl>,
388404
track::Energy<track::Signed1Pt, track::Tgl>,
389405
track::Rapidity<track::Signed1Pt, track::Tgl>,
390406
track::Sign<track::Signed1Pt>,

0 commit comments

Comments
 (0)