Skip to content

Commit 6ff6862

Browse files
committed
Transparent fix proposal draft 1
1 parent 433890f commit 6ff6862

2 files changed

Lines changed: 42 additions & 14 deletions

File tree

Framework/Core/include/Framework/AnalysisDataModel.h

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1918,6 +1918,8 @@ DECLARE_SOA_TABLE_VERSIONED(McCollisions_001, "AOD", "MCCOLLISION", 1, //! MC co
19181918
using McCollisions = McCollisions_001;
19191919
using McCollision = McCollisions::iterator;
19201920

1921+
1922+
19211923
namespace mcparticle
19221924
{
19231925
DECLARE_SOA_INDEX_COLUMN(McCollision, mcCollision); //! MC collision of this particle
@@ -1984,34 +1986,56 @@ DECLARE_SOA_EXPRESSION_COLUMN(Y, y, float, //! Particle rapidity, conditionally
19841986
(aod::mcparticle::e - aod::mcparticle::pz))));
19851987
} // namespace mcparticle
19861988

1989+
namespace mcparticle_v2
1990+
{
1991+
// for improved getters with protection against incorrect physical primary tagging
1992+
// note: this has to be declared in a separate namespace so it does not conflict with existing
1993+
// derived data table declarations in O2Physics
1994+
DECLARE_SOA_DYNAMIC_COLUMN(IsPhysicalPrimary, isPhysicalPrimary, //! True if particle is considered a physical primary according to the ALICE definition
1995+
[](uint8_t flags, float vx, float vy) -> bool {
1996+
if(std::hypot(vx, vy) > o2::aod::mcparticle::maxRadiusForPhysicalPrimary) return o2::aod::mcparticle::enums::FromBackgroundEvent;
1997+
return (flags & o2::aod::mcparticle::enums::PhysicalPrimary) == o2::aod::mcparticle::enums::PhysicalPrimary; });
1998+
1999+
// avoid that the stored flags are provided unprotected via
2000+
// the getter '.flags': analysers will get the correct bit map transparently
2001+
DECLARE_SOA_COLUMN(Flags, storedFlags, uint8_t); //! ALICE specific flags, see MCParticleFlags. Do not use directly. Use the dynamic columns, e.g. producedByGenerator()
2002+
DECLARE_SOA_DYNAMIC_COLUMN(McParticleFlags, flags, //! protected against
2003+
[](uint8_t input_flags, float vx, float vy) -> uint8_t {
2004+
if(std::hypot(vx, vy) > o2::aod::mcparticle::maxRadiusForPhysicalPrimary) return o2::aod::mcparticle::enums::FromBackgroundEvent;
2005+
return input_flags; });
2006+
2007+
}
2008+
19872009
DECLARE_SOA_TABLE_FULL(StoredMcParticles_000, "McParticles", "AOD", "MCPARTICLE", //! MC particle table, version 000
19882010
o2::soa::Index<>, mcparticle::McCollisionId,
1989-
mcparticle::PdgCode, mcparticle::StatusCode, mcparticle::Flags,
2011+
mcparticle::PdgCode, mcparticle::StatusCode, mcparticle_v2::Flags,
19902012
mcparticle::Mother0Id, mcparticle::Mother1Id,
19912013
mcparticle::Daughter0Id, mcparticle::Daughter1Id, mcparticle::Weight,
19922014
mcparticle::Px, mcparticle::Py, mcparticle::Pz, mcparticle::E,
19932015
mcparticle::Vx, mcparticle::Vy, mcparticle::Vz, mcparticle::Vt,
19942016
mcparticle::PVector<mcparticle::Px, mcparticle::Py, mcparticle::Pz>,
1995-
mcparticle::ProducedByGenerator<mcparticle::Flags>,
1996-
mcparticle::FromBackgroundEvent<mcparticle::Flags>,
1997-
mcparticle::GetGenStatusCode<mcparticle::Flags, mcparticle::StatusCode>,
1998-
mcparticle::GetHepMCStatusCode<mcparticle::Flags, mcparticle::StatusCode>,
1999-
mcparticle::GetProcess<mcparticle::Flags, mcparticle::StatusCode>,
2000-
mcparticle::IsPhysicalPrimary<mcparticle::Flags>);
2017+
mcparticle::ProducedByGenerator<mcparticle_v2::Flags>,
2018+
mcparticle::FromBackgroundEvent<mcparticle_v2::Flags>,
2019+
mcparticle::GetGenStatusCode<mcparticle_v2::Flags, mcparticle::StatusCode>,
2020+
mcparticle::GetHepMCStatusCode<mcparticle_v2::Flags, mcparticle::StatusCode>,
2021+
mcparticle::GetProcess<mcparticle_v2::Flags, mcparticle::StatusCode>,
2022+
mcparticle_v2::McParticleFlags<mcparticle_v2::Flags, mcparticle::Vx, mcparticle::Vy>,
2023+
mcparticle_v2::IsPhysicalPrimary<mcparticle_v2::Flags, mcparticle::Vx, mcparticle::Vy>);
20012024

20022025
DECLARE_SOA_TABLE_FULL_VERSIONED(StoredMcParticles_001, "McParticles", "AOD", "MCPARTICLE", 1, //! MC particle table, version 001
20032026
o2::soa::Index<>, mcparticle::McCollisionId,
2004-
mcparticle::PdgCode, mcparticle::StatusCode, mcparticle::Flags,
2027+
mcparticle::PdgCode, mcparticle::StatusCode, mcparticle_v2::Flags,
20052028
mcparticle::MothersIds, mcparticle::DaughtersIdSlice, mcparticle::Weight,
20062029
mcparticle::Px, mcparticle::Py, mcparticle::Pz, mcparticle::E,
20072030
mcparticle::Vx, mcparticle::Vy, mcparticle::Vz, mcparticle::Vt,
20082031
mcparticle::PVector<mcparticle::Px, mcparticle::Py, mcparticle::Pz>,
2009-
mcparticle::ProducedByGenerator<mcparticle::Flags>,
2010-
mcparticle::FromBackgroundEvent<mcparticle::Flags>,
2011-
mcparticle::GetGenStatusCode<mcparticle::Flags, mcparticle::StatusCode>,
2012-
mcparticle::GetHepMCStatusCode<mcparticle::Flags, mcparticle::StatusCode>,
2013-
mcparticle::GetProcess<mcparticle::Flags, mcparticle::StatusCode>,
2014-
mcparticle::IsPhysicalPrimary<mcparticle::Flags>);
2032+
mcparticle::ProducedByGenerator<mcparticle_v2::Flags>,
2033+
mcparticle::FromBackgroundEvent<mcparticle_v2::Flags>,
2034+
mcparticle::GetGenStatusCode<mcparticle_v2::Flags, mcparticle::StatusCode>,
2035+
mcparticle::GetHepMCStatusCode<mcparticle_v2::Flags, mcparticle::StatusCode>,
2036+
mcparticle::GetProcess<mcparticle_v2::Flags, mcparticle::StatusCode>,
2037+
mcparticle_v2::McParticleFlags<mcparticle_v2::Flags, mcparticle::Vx, mcparticle::Vy>,
2038+
mcparticle_v2::IsPhysicalPrimary<mcparticle_v2::Flags, mcparticle::Vx, mcparticle::Vy>);
20152039

20162040
DECLARE_SOA_EXTENDED_TABLE(McParticles_000, StoredMcParticles_000, "EXMCPARTICLE", 0, //! Basic MC particle properties
20172041
mcparticle::Phi,

Framework/Core/include/Framework/DataTypes.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ enum ForwardTrackTypeEnum : uint8_t {
148148
};
149149
} // namespace o2::aod::fwdtrack
150150

151+
namespace o2::aod::mcparticle{
152+
constexpr float maxRadiusForPhysicalPrimary{5.f};
153+
}
154+
151155
namespace o2::aod::mcparticle::enums
152156
{
153157
enum MCParticleFlags : uint8_t {

0 commit comments

Comments
 (0)