Skip to content

Commit 8dc418b

Browse files
authored
Phi expression column, use MathConstants.h (#7583)
1 parent 2332bfe commit 8dc418b

4 files changed

Lines changed: 33 additions & 37 deletions

File tree

Common/Constants/include/CommonConstants/MathConstants.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ constexpr float VeryBig = 1.f / Almost0;
2929
constexpr float PI = 3.14159274101257324e+00f;
3030
constexpr float TwoPI = 2.f * PI;
3131
constexpr float PIHalf = 0.5f * PI;
32+
constexpr float PIThird = PI / 3.0f;
33+
constexpr float PIQuarter = 0.25f * PI;
3234
constexpr float Rad2Deg = 180.f / PI;
3335
constexpr float Deg2Rad = PI / 180.f;
3436

Detectors/AOD/src/StandaloneAODProducer.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ void fillCollisionAndTrackTable()
138138
auto collCursor = collBuilder.cursor<o2::aod::Collisions>();
139139

140140
TableBuilder trackBuilder;
141-
auto trackCursor = trackBuilder.cursor<o2::aod::Tracks>();
141+
auto trackCursor = trackBuilder.cursor<o2::aod::StoredTracks>();
142142

143143
int index = 0;
144144
for (auto& v : *vertices) {
@@ -190,7 +190,7 @@ void fillCollisionAndTrackTable()
190190
std::array<float, 3> pxpypz;
191191
track->getPxPyPzGlo(pxpypz);
192192
trackCursor(0, index, 0 /* CORRECT THIS */, track->getX(), track->getAlpha(), track->getY(), track->getZ(), track->getSnp(), track->getTgl(),
193-
track->getPt() /*CHECK!!*/, track->getPhi(), pxpypz[0], pxpypz[1], pxpypz[2]);
193+
track->getPt() /*CHECK!!*/);
194194
}
195195
index++;
196196
}

Framework/Core/include/Framework/AnalysisDataModel.h

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@
1515
#include "MathUtils/Utils.h"
1616
#include <cmath>
1717
#include "Framework/DataTypes.h"
18+
#include "CommonConstants/MathConstants.h"
1819
#include "CommonConstants/PhysicsConstants.h"
1920

21+
using namespace o2::constants::math;
22+
2023
namespace o2
2124
{
2225
namespace aod
@@ -89,29 +92,21 @@ using Collision = Collisions::iterator;
8992
namespace track
9093
{
9194
// TRACKPAR TABLE definition
92-
DECLARE_SOA_INDEX_COLUMN(Collision, collision); //! Collision to which this track belongs
93-
DECLARE_SOA_COLUMN(TrackType, trackType, uint8_t); //! Type of track. See enum TrackTypeEnum
94-
DECLARE_SOA_COLUMN(X, x, float); //!
95-
DECLARE_SOA_COLUMN(Alpha, alpha, float); //!
96-
DECLARE_SOA_COLUMN(Y, y, float); //!
97-
DECLARE_SOA_COLUMN(Z, z, float); //!
98-
DECLARE_SOA_COLUMN(Snp, snp, float); //!
99-
DECLARE_SOA_COLUMN(Tgl, tgl, float); //!
100-
DECLARE_SOA_COLUMN(Signed1Pt, signed1Pt, float); //! (sign of charge)/Pt in c/GeV. Use pt() and sign() instead
101-
DECLARE_SOA_EXPRESSION_COLUMN(RawPhi, phiraw, float, //! Raw Phi (not folded onto [0, 2pi)). Use phi() instead
102-
nasin(aod::track::snp) + aod::track::alpha);
103-
// FIXME: make expression column when conditional nodes are supported in Gandiva
104-
DECLARE_SOA_DYNAMIC_COLUMN(NormalizedPhi, phi, //! Phi of the track, in radians within [0, 2pi)
105-
[](float phi) -> float {
106-
constexpr float twopi = 2.0f * static_cast<float>(M_PI);
107-
if (phi < 0)
108-
phi += twopi;
109-
if (phi > twopi)
110-
phi -= twopi;
111-
return phi;
112-
});
95+
DECLARE_SOA_INDEX_COLUMN(Collision, collision); //! Collision to which this track belongs
96+
DECLARE_SOA_COLUMN(TrackType, trackType, uint8_t); //! Type of track. See enum TrackTypeEnum
97+
DECLARE_SOA_COLUMN(X, x, float); //!
98+
DECLARE_SOA_COLUMN(Alpha, alpha, float); //!
99+
DECLARE_SOA_COLUMN(Y, y, float); //!
100+
DECLARE_SOA_COLUMN(Z, z, float); //!
101+
DECLARE_SOA_COLUMN(Snp, snp, float); //!
102+
DECLARE_SOA_COLUMN(Tgl, tgl, float); //!
103+
DECLARE_SOA_COLUMN(Signed1Pt, signed1Pt, float); //! (sign of charge)/Pt in c/GeV. Use pt() and sign() instead
104+
DECLARE_SOA_EXPRESSION_COLUMN(Phi, phi, float, //! Phi of the track, in radians within [0, 2pi)
105+
ifnode(nasin(aod::track::snp) + aod::track::alpha < 0.0f, nasin(aod::track::snp) + aod::track::alpha + TwoPI,
106+
ifnode(nasin(aod::track::snp) + aod::track::alpha > TwoPI, nasin(aod::track::snp) + aod::track::alpha - TwoPI,
107+
nasin(aod::track::snp) + aod::track::alpha)));
113108
DECLARE_SOA_EXPRESSION_COLUMN(Eta, eta, float, //! Pseudorapidity
114-
-1.f * nlog(ntan(0.25f * static_cast<float>(M_PI) - 0.5f * natan(aod::track::tgl))));
109+
-1.f * nlog(ntan(PIQuarter - 0.5f * natan(aod::track::tgl))));
115110
DECLARE_SOA_EXPRESSION_COLUMN(Pt, pt, float, //! Transverse momentum of the track in GeV/c
116111
nabs(1.f / aod::track::signed1Pt));
117112

@@ -140,7 +135,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(Pz, pz, //! Momentum in z-direction in GeV/c
140135
});
141136

142137
DECLARE_SOA_EXPRESSION_COLUMN(P, p, float, //! Momentum in Gev/c
143-
0.5f * (ntan(0.25f * static_cast<float>(M_PI) - 0.5f * natan(aod::track::tgl)) + 1.f / ntan(0.25f * static_cast<float>(M_PI) - 0.5f * natan(aod::track::tgl))) / nabs(aod::track::signed1Pt));
138+
0.5f * (ntan(PIQuarter - 0.5f * natan(aod::track::tgl)) + 1.f / ntan(PIQuarter - 0.5f * natan(aod::track::tgl))) / nabs(aod::track::signed1Pt));
144139

145140
// TRACKPARCOV TABLE definition
146141
DECLARE_SOA_COLUMN(SigmaY, sigmaY, float); //! Covariance matrix
@@ -275,7 +270,6 @@ DECLARE_SOA_TABLE_FULL(StoredTracks, "Tracks", "AOD", "TRACK", //! On disk versi
275270
track::X, track::Alpha,
276271
track::Y, track::Z, track::Snp, track::Tgl,
277272
track::Signed1Pt,
278-
track::NormalizedPhi<track::RawPhi>,
279273
track::Px<track::Signed1Pt, track::Snp, track::Alpha>,
280274
track::Py<track::Signed1Pt, track::Snp, track::Alpha>,
281275
track::Pz<track::Signed1Pt, track::Tgl>,
@@ -285,7 +279,7 @@ DECLARE_SOA_EXTENDED_TABLE(Tracks, StoredTracks, "TRACK", //! Basic track proper
285279
aod::track::Pt,
286280
aod::track::P,
287281
aod::track::Eta,
288-
aod::track::RawPhi);
282+
aod::track::Phi);
289283

290284
DECLARE_SOA_TABLE_FULL(StoredTracksCov, "TracksCov", "AOD", "TRACKCOV", //! On disk version of the TracksCov table
291285
track::SigmaY, track::SigmaZ, track::SigmaSnp, track::SigmaTgl, track::Sigma1Pt,
@@ -372,11 +366,11 @@ DECLARE_SOA_COLUMN(TrackTimeRes, trackTimeRes, float);
372366
DECLARE_SOA_DYNAMIC_COLUMN(Sign, sign, //! Sign of the track eletric charge
373367
[](float signed1Pt) -> short { return (signed1Pt > 0) ? 1 : -1; });
374368
DECLARE_SOA_EXPRESSION_COLUMN(Eta, eta, float, //!
375-
-1.f * nlog(ntan(0.25f * static_cast<float>(M_PI) - 0.5f * natan(aod::fwdtrack::tgl))));
369+
-1.f * nlog(ntan(PIQuarter - 0.5f * natan(aod::fwdtrack::tgl))));
376370
DECLARE_SOA_EXPRESSION_COLUMN(Pt, pt, float, //!
377371
nabs(1.f / aod::fwdtrack::signed1Pt));
378372
DECLARE_SOA_EXPRESSION_COLUMN(P, p, float, //!
379-
0.5f * (ntan(0.25f * static_cast<float>(M_PI) - 0.5f * natan(aod::fwdtrack::tgl)) + 1.f / ntan(0.25f * static_cast<float>(M_PI) - 0.5f * natan(aod::fwdtrack::tgl))) / nabs(aod::fwdtrack::signed1Pt));
373+
0.5f * (ntan(PIQuarter - 0.5f * natan(aod::fwdtrack::tgl)) + 1.f / ntan(PIQuarter - 0.5f * natan(aod::fwdtrack::tgl))) / nabs(aod::fwdtrack::signed1Pt));
380374
DECLARE_SOA_DYNAMIC_COLUMN(Px, px, //!
381375
[](float pt, float phi) -> float {
382376
return pt * std::cos(phi);
@@ -807,7 +801,7 @@ DECLARE_SOA_COLUMN(Vy, vy, float);
807801
DECLARE_SOA_COLUMN(Vz, vz, float); //! Z production vertex in cm
808802
DECLARE_SOA_COLUMN(Vt, vt, float); //! Production time
809803
DECLARE_SOA_DYNAMIC_COLUMN(Phi, phi, //! Phi
810-
[](float px, float py) -> float { return static_cast<float>(M_PI) + std::atan2(-py, -px); });
804+
[](float px, float py) -> float { return PI + std::atan2(-py, -px); });
811805
DECLARE_SOA_DYNAMIC_COLUMN(ProducedByGenerator, producedByGenerator, //! True if particle produced by the generator (==TMCProcess::kPrimary); False if by the transport code
812806
[](uint8_t flags) -> bool { return (flags & o2::aod::mcparticle::enums::ProducedByTransport) == 0x0; });
813807
DECLARE_SOA_DYNAMIC_COLUMN(FromBackgroundEvent, fromBackgroundEvent, //! Particle from background event
@@ -820,7 +814,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(IsPhysicalPrimary, isPhysicalPrimary, //! True if par
820814
[](uint8_t flags) -> bool { return (flags & o2::aod::mcparticle::enums::PhysicalPrimary) == o2::aod::mcparticle::enums::PhysicalPrimary; });
821815

822816
// DECLARE_SOA_EXPRESSION_COLUMN(Phi, phi, float, //! Phi: NOTE this waits that the atan2 function is defined for expression columns
823-
// static_cast<float>(M_PI) + natan2(-aod::mcparticle::py, -aod::mcparticle::px));
817+
// PI + natan2(-aod::mcparticle::py, -aod::mcparticle::px));
824818
DECLARE_SOA_EXPRESSION_COLUMN(Eta, eta, float, //! Pseudorapidity, conditionally defined to avoid FPEs
825819
ifnode((nsqrt(aod::mcparticle::px * aod::mcparticle::px +
826820
aod::mcparticle::py * aod::mcparticle::py +

Framework/Core/test/test_Expressions.cxx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ BOOST_AUTO_TEST_CASE(TestGandivaTreeCreation)
204204
BOOST_AUTO_TEST_CASE(TestConditionalExpressions)
205205
{
206206
// simple conditional
207-
Filter cf = nabs(o2::aod::track::eta) < 1.0f && ifnode((o2::aod::track::pt < 1.0f), (o2::aod::track::phiraw > (float)(M_PI / 2.)), (o2::aod::track::phiraw < (float)(M_PI / 2.)));
207+
Filter cf = nabs(o2::aod::track::eta) < 1.0f && ifnode((o2::aod::track::pt < 1.0f), (o2::aod::track::phi > (float)(M_PI / 2.)), (o2::aod::track::phi < (float)(M_PI / 2.)));
208208
auto cfspecs = createOperations(cf);
209209
BOOST_REQUIRE_EQUAL(cfspecs[0].left, (DatumSpec{1u, atype::BOOL}));
210210
BOOST_REQUIRE_EQUAL(cfspecs[0].right, (DatumSpec{2u, atype::BOOL}));
@@ -219,11 +219,11 @@ BOOST_AUTO_TEST_CASE(TestConditionalExpressions)
219219
BOOST_REQUIRE_EQUAL(cfspecs[2].right, (DatumSpec{LiteralNode::var_t{1.0f}, atype::FLOAT}));
220220
BOOST_REQUIRE_EQUAL(cfspecs[2].result, (DatumSpec{5u, atype::BOOL}));
221221

222-
BOOST_REQUIRE_EQUAL(cfspecs[3].left, (DatumSpec{std::string{"fRawPhi"}, typeid(o2::aod::track::RawPhi).hash_code(), atype::FLOAT}));
222+
BOOST_REQUIRE_EQUAL(cfspecs[3].left, (DatumSpec{std::string{"fPhi"}, typeid(o2::aod::track::Phi).hash_code(), atype::FLOAT}));
223223
BOOST_REQUIRE_EQUAL(cfspecs[3].right, (DatumSpec{LiteralNode::var_t{(float)(M_PI / 2.)}, atype::FLOAT}));
224224
BOOST_REQUIRE_EQUAL(cfspecs[3].result, (DatumSpec{4u, atype::BOOL}));
225225

226-
BOOST_REQUIRE_EQUAL(cfspecs[4].left, (DatumSpec{std::string{"fRawPhi"}, typeid(o2::aod::track::RawPhi).hash_code(), atype::FLOAT}));
226+
BOOST_REQUIRE_EQUAL(cfspecs[4].left, (DatumSpec{std::string{"fPhi"}, typeid(o2::aod::track::Phi).hash_code(), atype::FLOAT}));
227227
BOOST_REQUIRE_EQUAL(cfspecs[4].right, (DatumSpec{LiteralNode::var_t{(float)(M_PI / 2.)}, atype::FLOAT}));
228228
BOOST_REQUIRE_EQUAL(cfspecs[4].result, (DatumSpec{3u, atype::BOOL}));
229229

@@ -237,13 +237,13 @@ BOOST_AUTO_TEST_CASE(TestConditionalExpressions)
237237

238238
auto infield1 = o2::aod::track::Pt::asArrowField();
239239
auto infield2 = o2::aod::track::Eta::asArrowField();
240-
auto infield3 = o2::aod::track::RawPhi::asArrowField();
240+
auto infield3 = o2::aod::track::Phi::asArrowField();
241241
auto schema = std::make_shared<arrow::Schema>(std::vector{infield1, infield2, infield3});
242242
auto gandiva_tree = createExpressionTree(cfspecs, schema);
243243
auto gandiva_condition = makeCondition(gandiva_tree);
244244
auto gandiva_filter = createFilter(schema, gandiva_condition);
245245

246-
BOOST_CHECK_EQUAL(gandiva_tree->ToString(), "bool less_than(float absf((float) fEta), (const float) 1 raw(3f800000)) && if (bool less_than((float) fPt, (const float) 1 raw(3f800000))) { bool greater_than((float) fRawPhi, (const float) 1.5708 raw(3fc90fdb)) } else { bool less_than((float) fRawPhi, (const float) 1.5708 raw(3fc90fdb)) }");
246+
BOOST_CHECK_EQUAL(gandiva_tree->ToString(), "bool less_than(float absf((float) fEta), (const float) 1 raw(3f800000)) && if (bool less_than((float) fPt, (const float) 1 raw(3f800000))) { bool greater_than((float) fPhi, (const float) 1.5708 raw(3fc90fdb)) } else { bool less_than((float) fPhi, (const float) 1.5708 raw(3fc90fdb)) }");
247247

248248
// nested conditional
249249
Filter cfn = o2::aod::track::signed1Pt > 0.f && ifnode(std::move(*cf.node), nabs(o2::aod::track::x) > 1.0f, nabs(o2::aod::track::y) > 1.0f);
@@ -256,5 +256,5 @@ BOOST_AUTO_TEST_CASE(TestConditionalExpressions)
256256
auto gandiva_condition2 = makeCondition(gandiva_tree2);
257257
auto gandiva_filter2 = createFilter(schema2, gandiva_condition2);
258258
BOOST_REQUIRE_EQUAL(gandiva_tree2->ToString(),
259-
"bool greater_than((float) fSigned1Pt, (const float) 0 raw(0)) && if (bool less_than(float absf((float) fEta), (const float) 1 raw(3f800000)) && if (bool less_than((float) fPt, (const float) 1 raw(3f800000))) { bool greater_than((float) fRawPhi, (const float) 1.5708 raw(3fc90fdb)) } else { bool less_than((float) fRawPhi, (const float) 1.5708 raw(3fc90fdb)) }) { bool greater_than(float absf((float) fX), (const float) 1 raw(3f800000)) } else { bool greater_than(float absf((float) fY), (const float) 1 raw(3f800000)) }");
259+
"bool greater_than((float) fSigned1Pt, (const float) 0 raw(0)) && if (bool less_than(float absf((float) fEta), (const float) 1 raw(3f800000)) && if (bool less_than((float) fPt, (const float) 1 raw(3f800000))) { bool greater_than((float) fPhi, (const float) 1.5708 raw(3fc90fdb)) } else { bool less_than((float) fPhi, (const float) 1.5708 raw(3fc90fdb)) }) { bool greater_than(float absf((float) fX), (const float) 1 raw(3f800000)) } else { bool greater_than(float absf((float) fY), (const float) 1 raw(3f800000)) }");
260260
}

0 commit comments

Comments
 (0)