Analysis Software
Documentation for sPHENIX simulation software
|
#include <acts/blob/sPHENIX/Fatras/include/ActsFatras/EventData/Barcode.hpp>
Public Types | |
using | Value = T |
The type of their underlying storage value. | |
Public Types inherited from Acts::MultiIndex< uint64_t, 12, 12, 16, 8, 16 > | |
enum | |
using | Value = uint64_t |
The type of their underlying storage value. | |
Public Member Functions | |
Barcode () | |
Barcode (const Barcode &)=default | |
Barcode (Barcode &&)=default | |
Barcode & | operator= (const Barcode &)=default |
Barcode & | operator= (Barcode &&)=default |
constexpr Value | vertexPrimary () const |
Return the primary vertex identifier. | |
constexpr Value | vertexSecondary () const |
Return the secondary vertex identifier. | |
constexpr Value | particle () const |
Return the particle identifier. | |
constexpr Value | generation () const |
Return the generation identifier. | |
constexpr Value | subParticle () const |
Return the sub-particle identifier. | |
constexpr Barcode & | setVertexPrimary (Value id) |
Set the primary vertex identifier. | |
constexpr Barcode & | setVertexSecondary (Value id) |
Set the secondary vertex identifier. | |
constexpr Barcode & | setParticle (Value id) |
Set the parent particle identifier. | |
constexpr Barcode & | setGeneration (Value id) |
Set the particle identifier. | |
constexpr Barcode & | setSubParticle (Value id) |
Set the process identifier. | |
Barcode | makeDescendant (Value sub=0u) const |
Public Member Functions inherited from Acts::MultiIndex< uint64_t, 12, 12, 16, 8, 16 > | |
constexpr | MultiIndex (Value encoded) |
Construct a MultiIndex from an already encoded value. | |
MultiIndex ()=default | |
Construct a default MultiIndex with undefined values for each level. | |
MultiIndex (const MultiIndex &)=default | |
MultiIndex (MultiIndex &)=default | |
MultiIndex & | operator= (const MultiIndex &)=default |
MultiIndex & | operator= (MultiIndex &&)=default |
constexpr MultiIndex & | operator= (Value encoded) |
Allow setting the MultiIndex from an already encoded value. | |
constexpr Value | value () const |
Get the encoded value of all index levels. | |
constexpr Value | level (std::size_t lvl) const |
Get the value for the index level. | |
constexpr MultiIndex & | set (std::size_t lvl, Value val) |
Set the value of the index level. | |
constexpr MultiIndex | makeNextSibling (std::size_t lvl) const |
Create index with the selected level increased and levels below zeroed. | |
constexpr MultiIndex | makeLastDescendant (std::size_t lvl) const |
Create index with every level below the selected level maximized. | |
Private Types | |
using | Base = Acts::MultiIndex< uint64_t, 12, 12, 16, 8, 16 > |
Additional Inherited Members | |
Static Public Member Functions inherited from Acts::MultiIndex< uint64_t, 12, 12, 16, 8, 16 > | |
static constexpr MultiIndex | Zeros () |
Construct a MultiIndex with all levels set to zero. | |
static constexpr MultiIndex | Encode (Us &&...us) |
static constexpr std::size_t | bits (std::size_t lvl) |
Get the number of bits for the associated level. | |
Particle identifier that encodes additional event information.
The barcode has to fulfill two separate requirements: be able to act as unique identifier for particles within an event and to encode details on the event structure for fast lookup. Since we only care about tracking here, we need to support two scenarios:
The vertex information is encoded as two numbers that define the primary and secondary vertex. The primary vertex must be non-zero. Particles with a zero secondary vertex originate directly from the primary vertex.
Within one vertex (primary+secondary) each particle is identified by a particle, generation, and sub-particle number. Particles originating from the vertex must have zero generation and zero sub-particle number; a consequence is that only non-zero generation can have non-zero sub-particle numbers. A non-zero generation indicates that the particle is a descendant of the original particle, e.g. from interactions or decay, while the sub-particle number identifies the descendant particle.
With this encoding, non-primary particles and their primary parent can be easily identified at the expense of not storing the exact decay history.
A barcode with all elements set to zero (the default value) is an invalid value that can be used e.g. to mark missing or unknown particles.
A particle generated in a primary interaction might have the barcode
2|0|14|0|0 -> vertex=2 (primary), particle=14, generation=0, sub=0
A simulation module might generate an interaction and create two new particles. These are descendants of the initial particle and the simulation module can generate the new barcodes directly by increasing the generation number and choosing sub-particle identifiers:
2|0|14|1|0 -> vertex=2 (primary), particle=14, generation=1, sub=0 2|0|14|1|1 -> vertex=2 (primary), particle=14, generation=1, sub=1
If these secondary particles generate further tertiary particles the barcode would be e.g.
2|0|14|2|0 -> vertex=2 (primary), particle=14, generation=2, sub=0
The hierarchical nature of the barcode allows barcode creation without a central service. Since the full history is not stored, generated barcodes for higher-generation particles can overlap when generated by independent interactions. Assuming an initial primary particle with barcode
3|4|5|0|0 -> particle=5
a first interaction might create a secondary particle by increasing the generation number (without destroying the initial particle)
3|4|5|1|0 -> particle=5, generation+=1, first sub-particle
The initial particle gets simulated further and at another step a second interaction also creates a new particle. Since it knows nothing about the previously created particle (no central service), it will generate
3|4|5|1|0 -> particle=5, generation+=1, first sub-particle
which is identical to the previously create barcode. These cases can be easily solved by renumbering the sub-particle identifier within each generation to contain unique values. However, this can only be done when all particles are known.
Definition at line 94 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 94 of file Barcode.hpp
|
private |
Definition at line 95 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 95 of file Barcode.hpp
using Acts::MultiIndex< T, BitsPerLevel >::Value = T |
The type of their underlying storage value.
Definition at line 39 of file MultiIndex.hpp.
View newest version in sPHENIX GitHub at line 39 of file MultiIndex.hpp
|
inline |
Definition at line 102 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 102 of file Barcode.hpp
Referenced by makeDescendant().
|
default |
|
default |
|
inline |
Return the generation identifier.
Definition at line 115 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 115 of file Barcode.hpp
References Acts::MultiIndex< uint64_t, 12, 12, 16, 8, 16 >::level().
Referenced by ActsFatras::Particle::isSecondary(), and makeDescendant().
Construct a new barcode representing a descendant particle.
sub | sub-particle index of the new barcode. |
Definition at line 133 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 133 of file Barcode.hpp
References Barcode(), and generation().
Referenced by BOOST_AUTO_TEST_CASE(), ActsFatras::BetheHeitler::bremPhoton(), ActsFatras::NuclearInteraction::convertParametersToParticles(), ActsFatras::Geant4Decay::decayParticle(), and ActsFatras::PhotonConversion::generateChildren().
|
inline |
Return the particle identifier.
Definition at line 113 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 113 of file Barcode.hpp
References Acts::MultiIndex< uint64_t, 12, 12, 16, 8, 16 >::level().
Set the particle identifier.
Definition at line 126 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 126 of file Barcode.hpp
References train_ambiguity_solver::id.
Set the parent particle identifier.
Definition at line 124 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 124 of file Barcode.hpp
References train_ambiguity_solver::id.
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_DATA_TEST_CASE(), Dataset::makeParticle(), ActsExamples::ParametricParticleGenerator::operator()(), ActsExamples::HepMC3Particle::particle(), ActsExamples::EDM4hepParticleReader::read(), and ActsExamples::EDM4hepSimHitReader::read().
Set the process identifier.
Definition at line 128 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 128 of file Barcode.hpp
References train_ambiguity_solver::id.
Set the primary vertex identifier.
Definition at line 120 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 120 of file Barcode.hpp
References train_ambiguity_solver::id.
Referenced by BOOST_AUTO_TEST_CASE(), BOOST_DATA_TEST_CASE(), Dataset::makeParticle(), ActsExamples::detail::PrimaryVertexIdGetter::operator()(), and ActsExamples::detail::SecondaryVertexIdGetter::operator()().
Set the secondary vertex identifier.
Definition at line 122 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 122 of file Barcode.hpp
References train_ambiguity_solver::id.
Referenced by BOOST_AUTO_TEST_CASE().
|
inline |
Return the sub-particle identifier.
Definition at line 117 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 117 of file Barcode.hpp
References Acts::MultiIndex< uint64_t, 12, 12, 16, 8, 16 >::level().
Referenced by ActsFatras::Particle::isSecondary().
|
inline |
Return the primary vertex identifier.
Definition at line 109 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 109 of file Barcode.hpp
References Acts::MultiIndex< uint64_t, 12, 12, 16, 8, 16 >::level().
Referenced by ActsExamples::detail::PrimaryVertexIdGetter::operator()(), and ActsExamples::detail::SecondaryVertexIdGetter::operator()().
|
inline |
Return the secondary vertex identifier.
Definition at line 111 of file Barcode.hpp.
View newest version in sPHENIX GitHub at line 111 of file Barcode.hpp
References Acts::MultiIndex< uint64_t, 12, 12, 16, 8, 16 >::level().
Referenced by ActsFatras::Particle::isSecondary(), and ActsExamples::detail::SecondaryVertexIdGetter::operator()().