Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-21 09:58:21

0001 // AUTOMATICALLY GENERATED FILE - DO NOT EDIT
0002 
0003 #include "podio/DatamodelRegistry.h"
0004 #include "podio/SchemaEvolution.h"
0005 
0006 namespace edm4hep::meta {
0007 /**
0008  * The complete definition of the datamodel at generation time in JSON format.
0009  */
0010 static constexpr auto edm4hep__JSONDefinition =
0011     R"DATAMODELDEF({"options": {"getSyntax": true, "exposePODMembers": false, "includeSubfolder": "edm4hep/"}, "schema_version": 1, "components": {"edm4hep::Vector4f": {"Description": "Generic vector for storing classical 4D coordinates in memory. Four momentum helper functions are in edm4hep::utils", "Members": ["float x", "float y", "float z", "float t"], "ExtraCode": {"declaration": " constexpr Vector4f() : x(0),y(0),z(0),t(0) {}\n constexpr Vector4f(float xx, float yy, float zz, float tt) : x(xx),y(yy),z(zz),t(tt) {}\n constexpr Vector4f(const float* v) : x(v[0]),y(v[1]),z(v[2]),t(v[3]) {}\n constexpr bool operator==(const Vector4f& v) const { return (x==v.x&&y==v.y&&z==v.z&&t==v.t) ; }\n constexpr float operator[](unsigned i) const { return *( &x + i ) ; }\n "}}, "edm4hep::Vector3f": {"Members": ["float x", "float y", "float z"], "ExtraCode": {"declaration": " constexpr Vector3f() : x(0),y(0),z(0) {}\n constexpr Vector3f(float xx, float yy, float zz) : x(xx),y(yy),z(zz) {}\n constexpr Vector3f(const float* v) : x(v[0]),y(v[1]),z(v[2]) {}\n constexpr bool operator==(const Vector3f& v) const { return (x==v.x&&y==v.y&&z==v.z) ; }\n constexpr float operator[](unsigned i) const { return *( &x + i ) ; }\n "}}, "edm4hep::Vector3d": {"Members": ["double x", "double y", "double z"], "ExtraCode": {"declaration": " constexpr Vector3d() : x(0),y(0),z(0) {}\n constexpr Vector3d(double xx, double yy, double zz) : x(xx),y(yy),z(zz) {}\n constexpr Vector3d(const double* v) : x(v[0]),y(v[1]),z(v[2]) {}\n constexpr Vector3d(const float* v) : x(v[0]),y(v[1]),z(v[2]) {}\n constexpr bool operator==(const Vector3d& v) const { return (x==v.x&&y==v.y&&z==v.z) ; }\n constexpr double operator[](unsigned i) const { return *( &x + i ) ; }\n "}}, "edm4hep::Vector2i": {"Members": ["std::int32_t a", "std::int32_t b"], "ExtraCode": {"declaration": " constexpr Vector2i() : a(0),b(0) {}\n constexpr Vector2i(int32_t aa, int32_t bb) : a(aa),b(bb) {}\n constexpr Vector2i( const int32_t* v) : a(v[0]), b(v[1]) {}\n constexpr bool operator==(const Vector2i& v) const { return (a==v.a&&b==v.b) ; }\n constexpr int operator[](unsigned i) const { return *( &a + i ) ; }\n "}}, "edm4hep::Vector2f": {"Members": ["float a", "float b"], "ExtraCode": {"declaration": " constexpr Vector2f() : a(0),b(0) {}\n constexpr Vector2f(float aa,float bb) : a(aa),b(bb) {}\n constexpr Vector2f(const float* v) : a(v[0]), b(v[1]) {}\n constexpr bool operator==(const Vector2f& v) const { return (a==v.a&&b==v.b) ; }\n constexpr float operator[](unsigned i) const { return *( &a + i ) ; }\n "}}, "edm4hep::TrackState": {"Members": ["std::int32_t location // for use with At{Other|IP|FirstHit|LastHit|Calorimeter|Vertex}|LastLocation", "float D0 // transverse impact parameter", "float phi // azimuthal angle", "float omega // is the signed curvature of the track in [1/mm].", "float Z0 // longitudinal impact parameter", "float tanLambda // lambda is the dip angle of the track in r-z", "float time // time of the track at this trackstate", "edm4hep::Vector3f referencePoint // Reference point of the track parameters, e.g. the origin at the IP, or the position  of the first/last hits or the entry point into the calorimeter. [mm]", "std::array<float, 21> covMatrix // lower triangular covariance matrix of the track parameters.  the order of parameters is  d0, phi, omega, z0, tan(lambda), time. the array is a row-major flattening of the matrix."], "ExtraCode": {"declaration": " static const int AtOther = 0 ; // any location other than the ones defined below\n static const int AtIP = 1 ;\n static const int AtFirstHit = 2 ;\n static const int AtLastHit = 3 ;\n static const int AtCalorimeter = 4 ;\n static const int AtVertex = 5 ;\n static const int LastLocation = AtVertex  ;\n "}}, "edm4hep::ObjectID": {"Members": ["std::int32_t index", "std::int32_t collectionID"], "ExtraCode": {"includes": "#include <podio/ObjectID.h>\n", "declaration": " ObjectID() = default;\n ObjectID(const podio::ObjectID& id ): index(id.index), collectionID(id.collectionID) {}\n "}}, "edm4hep::Quantity": {"Members": ["std::int16_t type // flag identifying how to interpret the quantity", "float value // value of the quantity", "float error // error on the value of the quantity"]}, "edm4hep::Hypothesis": {"Members": ["float chi2 // chi2", "float expected // expected value", "float sigma // sigma value"]}, "edm4hep::HitLevelData": {"Members": ["std::uint64_t cellID // cell id", "std::uint32_t N // number of reconstructed ionization cluster.", "float eDep // reconstructed energy deposit [GeV].", "float pathLength // track path length [mm]."]}}, "datatypes": {"edm4hep::EventHeader": {"Description": "Event Header. Additional parameters are assumed to go into the metadata tree.", "Author": "F.Gaede", "Members": ["std::int32_t eventNumber // event number", "std::int32_t runNumber // run number", "std::uint64_t timeStamp // time stamp", "float weight // event weight"], "VectorMembers": [], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::MCParticle": {"Description": "The Monte Carlo particle - based on the lcio::MCParticle.", "Author": "F.Gaede, DESY", "Members": ["std::int32_t PDG // PDG code of the particle", "std::int32_t generatorStatus // status of the particle as defined by the generator", "std::int32_t simulatorStatus // status of the particle from the simulation program - use BIT constants below", "float charge // particle charge", "float time // creation time of the particle in [ns] wrt. the event, e.g. for preassigned decays or decays in flight from the simulator.", "double mass // mass of the particle in [GeV]", "edm4hep::Vector3d vertex // production vertex of the particle in [mm].", "edm4hep::Vector3d endpoint // endpoint of the particle in [mm]", "edm4hep::Vector3f momentum // particle 3-momentum at the production vertex in [GeV]", "edm4hep::Vector3f momentumAtEndpoint // particle 3-momentum at the endpoint in [GeV]", "edm4hep::Vector3f spin // spin (helicity) vector of the particle.", "edm4hep::Vector2i colorFlow // color flow as defined by the generator"], "OneToManyRelations": ["edm4hep::MCParticle parents // The parents of this particle.", "edm4hep::MCParticle daughters // The daughters this particle."], "MutableExtraCode": {"includes": "#include <cmath>", "declaration": " int32_t  set_bit(int32_t val, int num, bool bitval){ return (val & ~(1<<num)) | (bitval << num); }                               \n void setCreatedInSimulation(bool bitval) { setSimulatorStatus( set_bit( getSimulatorStatus() , BITCreatedInSimulation , bitval ) ) ;  }  \t\t     \n void setBackscatter(bool bitval) { setSimulatorStatus( set_bit( getSimulatorStatus() , BITBackscatter , bitval ) ) ;   }  \t\t\t     \n void setVertexIsNotEndpointOfParent(bool bitval) { setSimulatorStatus( set_bit( getSimulatorStatus() , BITVertexIsNotEndpointOfParent , bitval ) ) ; } \n void setDecayedInTracker(bool bitval) { setSimulatorStatus( set_bit( getSimulatorStatus() , BITDecayedInTracker , bitval ) ) ;   }  \t\t     \n void setDecayedInCalorimeter(bool bitval) { setSimulatorStatus( set_bit( getSimulatorStatus() , BITDecayedInCalorimeter , bitval ) ) ;   }  \t\t     \n void setHasLeftDetector(bool bitval) { setSimulatorStatus( set_bit( getSimulatorStatus() , BITLeftDetector , bitval ) ) ;   }  \t\t\t     \n void setStopped(bool bitval) { setSimulatorStatus( set_bit( getSimulatorStatus() , BITStopped , bitval ) ) ;   }  \t\t\t\t     \n void setOverlay(bool bitval) { setSimulatorStatus( set_bit( getSimulatorStatus() , BITOverlay , bitval ) ) ;   }         \n "}, "ExtraCode": {"declaration": " // define the bit positions for the simulation flag\n static const int BITEndpoint = 31;\n static const int BITCreatedInSimulation = 30;\n static const int BITBackscatter = 29 ;\n static const int BITVertexIsNotEndpointOfParent = 28 ;  \n static const int BITDecayedInTracker = 27 ; \n static const int BITDecayedInCalorimeter = 26 ;   \n static const int BITLeftDetector = 25 ;     \n static const int BITStopped = 24 ;    \n static const int BITOverlay = 23 ;    \n /// return energy computed from momentum and mass \n double getEnergy() const { return sqrt( getMomentum()[0]*getMomentum()[0]+getMomentum()[1]*getMomentum()[1]+\n getMomentum()[2]*getMomentum()[2] + getMass()*getMass()  )  ;} \n\n/// True if the particle has been created by the simulation program (rather than the generator).     \n bool isCreatedInSimulation() const { return ( getSimulatorStatus() & ( 0x1 << BITCreatedInSimulation ))  ; }    \n /// True if the particle is the result of a backscatter from a calorimeter shower. \n bool isBackscatter() const { return ( getSimulatorStatus() & ( 0x1 << BITBackscatter )) ; }   \n /// True if the particle's vertex is not the endpoint of the  parent particle.     \n bool vertexIsNotEndpointOfParent() const { return ( getSimulatorStatus() & ( 0x1 << BITVertexIsNotEndpointOfParent )) ; } \n /// True if the particle has interacted in a tracking region.                \n bool isDecayedInTracker() const { return ( getSimulatorStatus() & ( 0x1 << BITDecayedInTracker )) ; }     \n /// True if the particle has interacted in a calorimeter region.             \n bool isDecayedInCalorimeter() const { return ( getSimulatorStatus() & ( 0x1 << BITDecayedInCalorimeter )) ; }   \n /// True if the particle has left the world volume undecayed.                \n bool hasLeftDetector() const { return ( getSimulatorStatus() & ( 0x1 << BITLeftDetector )) ; }\n /// True if the particle has been stopped by the simulation program.         \n bool isStopped() const { return ( getSimulatorStatus() & ( 0x1 << BITStopped )) ; }     \n /// True if the particle has been overlayed by the simulation (or digitization)  program.\n bool isOverlay() const { return ( getSimulatorStatus() & ( 0x1 << BITOverlay )) ; }     \n "}, "VectorMembers": [], "OneToOneRelations": []}, "edm4hep::SimTrackerHit": {"Description": "Simulated tracker hit", "Author": "F.Gaede, DESY", "Members": ["std::uint64_t cellID // ID of the sensor that created this hit", "float EDep // energy deposited in the hit [GeV].", "float time // proper time of the hit in the lab frame in [ns].", "float pathLength // path length of the particle in the sensitive material that resulted in this hit.", "std::int32_t quality // quality bit flag.", "edm4hep::Vector3d position // the hit position in [mm].", "edm4hep::Vector3f momentum // the 3-momentum of the particle at the hits position in [GeV]"], "OneToOneRelations": ["edm4hep::MCParticle MCParticle // MCParticle that caused the hit."], "MutableExtraCode": {"includes": "#include <cmath>", "declaration": " int32_t  set_bit(int32_t val, int num, bool bitval){ return (val & ~(1<<num)) | (bitval << num); }\n void setOverlay(bool val) { setQuality( set_bit( getQuality() , BITOverlay , val ) ) ;   }\n void setProducedBySecondary(bool val) { setQuality( set_bit( getQuality() , BITProducedBySecondary , val ) ) ;   }\n "}, "ExtraCode": {"declaration": " static const int  BITOverlay = 31;\n static const int  BITProducedBySecondary = 30;\n bool isOverlay() const { return getQuality() & (1 << BITOverlay) ; }\n bool isProducedBySecondary() const { return getQuality() & (1 << BITProducedBySecondary) ; }\n double x() const {return getPosition()[0];}\n double y() const {return getPosition()[1];}\n double z() const {return getPosition()[2];}\n double rho() const {return sqrt(x()*x() + y()*y());}\n "}, "VectorMembers": [], "OneToManyRelations": []}, "edm4hep::CaloHitContribution": {"Description": "Monte Carlo contribution to SimCalorimeterHit", "Author": "F.Gaede, DESY", "Members": ["std::int32_t PDG // PDG code of the shower particle that caused this contribution.", "float energy // energy in [GeV] of the this contribution", "float time // time in [ns] of this contribution", "edm4hep::Vector3f stepPosition // position of this energy deposition (step) [mm]"], "OneToOneRelations": ["edm4hep::MCParticle particle // primary MCParticle that caused the shower responsible for this contribution to the hit."], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::SimCalorimeterHit": {"Description": "Simulated calorimeter hit", "Author": "F.Gaede, DESY", "Members": ["std::uint64_t cellID // ID of the sensor that created this hit", "float energy // energy of the hit in [GeV].", "edm4hep::Vector3f position // position of the hit in world coordinates in [mm]."], "OneToManyRelations": ["edm4hep::CaloHitContribution contributions // Monte Carlo step contribution - parallel to particle"], "VectorMembers": [], "OneToOneRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::RawCalorimeterHit": {"Description": "Raw calorimeter hit", "Author": "F.Gaede, DESY", "Members": ["std::uint64_t cellID // detector specific (geometrical) cell id.", "std::int32_t amplitude // amplitude of the hit in ADC counts.", "std::int32_t timeStamp // time stamp for the hit."], "VectorMembers": [], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::CalorimeterHit": {"Description": "Calorimeter hit", "Author": "F.Gaede, DESY", "Members": ["std::uint64_t cellID // detector specific (geometrical) cell id.", "float energy // energy of the hit in [GeV].", "float energyError // error of the hit energy in [GeV].", "float time // time of the hit in [ns].", "edm4hep::Vector3f position // position of the hit in world coordinates in [mm].", "std::int32_t type // type of hit. Mapping of integer types to names via collection parameters \"CalorimeterHitTypeNames\" and \"CalorimeterHitTypeValues\"."], "VectorMembers": [], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::ParticleID": {"Description": "ParticleID", "Author": "F.Gaede, DESY", "Members": ["std::int32_t type // userdefined type", "std::int32_t PDG // PDG code of this id - ( 999999 ) if unknown.", "std::int32_t algorithmType // type of the algorithm/module that created this hypothesis", "float likelihood // likelihood of this hypothesis - in a user defined normalization."], "VectorMembers": ["float parameters // parameters associated with this hypothesis. Check/set collection parameters ParameterNames_PIDAlgorithmTypeName for decoding the indices."], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::Cluster": {"Description": "Calorimeter Hit Cluster", "Author": "F.Gaede, DESY", "Members": ["std::int32_t type // flagword that defines the type of cluster. Bits 16-31 are used internally.", "float energy // energy of the cluster [GeV]", "float energyError // error on the energy", "edm4hep::Vector3f position // position of the cluster [mm]", "std::array<float, 6> positionError // covariance matrix of the position (6 Parameters)", "float iTheta // intrinsic direction of cluster at position  Theta. Not to be confused with direction cluster is seen from IP.", "float phi // intrinsic direction of cluster at position - Phi. Not to be confused with direction cluster is seen from IP.", "edm4hep::Vector3f directionError // covariance matrix of the direction (3 Parameters) [mm^2]"], "VectorMembers": ["float shapeParameters // shape parameters - check/set collection parameter ClusterShapeParameters for size and names of parameters.", "float subdetectorEnergies // energy observed in a particular subdetector. Check/set collection parameter ClusterSubdetectorNames for decoding the indices of the array."], "OneToManyRelations": ["edm4hep::Cluster clusters // clusters that have been combined to this cluster.", "edm4hep::CalorimeterHit hits // hits that have been combined to this cluster.", "edm4hep::ParticleID particleIDs // particle IDs (sorted by their likelihood)"], "OneToOneRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::TrackerHit": {"Description": "Tracker hit", "Author": "F.Gaede, DESY", "Members": ["std::uint64_t cellID // ID of the sensor that created this hit", "std::int32_t type // type of raw data hit, either one of edm4hep::RawTimeSeries, edm4hep::SIMTRACKERHIT - see collection parameters \"TrackerHitTypeNames\" and \"TrackerHitTypeValues\".", "std::int32_t quality // quality bit flag of the hit.", "float time // time of the hit [ns].", "float eDep // energy deposited on the hit [GeV].", "float eDepError // error measured on EDep [GeV].", "edm4hep::Vector3d position // hit position in [mm].", "std::array<float, 6> covMatrix // covariance of the position (x,y,z), stored as lower triangle matrix. i.e. cov(x,x) , cov(y,x) , cov(y,y) , cov(z,x) , cov(z,y) , cov(z,z)"], "VectorMembers": ["edm4hep::ObjectID rawHits // raw data hits. Check getType to get actual data type."], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::TrackerHitPlane": {"Description": "Tracker hit plane", "Author": "Placido Fernandez Declara, CERN", "Members": ["std::uint64_t cellID // ID of the sensor that created this hit", "std::int32_t type // type of raw data hit, either one of edm4hep::RawTimeSeries, edm4hep::SIMTRACKERHIT - see collection parameters \"TrackerHitTypeNames\" and \"TrackerHitTypeValues\".", "std::int32_t quality // quality bit flag of the hit.", "float time // time of the hit [ns].", "float eDep // energy deposited on the hit [GeV].", "float eDepError // error measured on EDep [GeV].", "edm4hep::Vector2f u // measurement direction vector, u lies in the x-y plane", "edm4hep::Vector2f v // measurement direction vector, v is along z", "float du // measurement error along the direction", "float dv // measurement error along the direction", "edm4hep::Vector3d position // hit position in [mm].", "std::array<float, 6> covMatrix // covariance of the position (x,y,z), stored as lower triangle matrix. i.e. cov(x,x) , cov(y,x) , cov(y,y) , cov(z,x) , cov(z,y) , cov(z,z)"], "VectorMembers": ["edm4hep::ObjectID rawHits // raw data hits. Check getType to get actual data type."], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::RawTimeSeries": {"Description": "Raw data of a detector readout", "Author": "F.Gaede, DESY", "Members": ["std::uint64_t cellID // detector specific cell id.", "std::int32_t quality // quality flag for the hit.", "float time // time of the hit [ns].", "float charge // integrated charge of the hit [fC].", "float interval // interval of each sampling [ns]."], "VectorMembers": ["std::int32_t adcCounts // raw data (32-bit) word at i."], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::Track": {"Description": "Reconstructed track", "Author": "F.Gaede, DESY", "Members": ["std::int32_t type // flagword that defines the type of track.Bits 16-31 are used internally", "float chi2 // Chi^2 of the track fit", "std::int32_t ndf // number of degrees of freedom of the track fit", "float dEdx // dEdx of the track.", "float dEdxError // error of dEdx.", "float radiusOfInnermostHit // radius of the innermost hit that has been used in the track fit"], "VectorMembers": ["std::int32_t subdetectorHitNumbers // number of hits in particular subdetectors.Check/set collection variable TrackSubdetectorNames for decoding the indices", "edm4hep::TrackState trackStates // track states", "edm4hep::Quantity dxQuantities // different measurements of dx quantities"], "OneToManyRelations": ["edm4hep::TrackerHit trackerHits // hits that have been used to create this track", "edm4hep::Track tracks // tracks (segments) that have been combined to create this track"], "OneToOneRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::Vertex": {"Description": "Vertex", "Author": "F.Gaede, DESY", "Members": ["std::int32_t primary // boolean flag, if vertex is the primary vertex of the event", "float chi2 // chi-squared of the vertex fit", "float probability // probability of the vertex fit", "edm4hep::Vector3f position // [mm] position of the vertex.", "std::array<float, 6> covMatrix // covariance matrix of the position (stored as lower triangle matrix, i.e. cov(xx),cov(y,x),cov(z,x),cov(y,y),... )", "std::int32_t algorithmType // type code for the algorithm that has been used to create the vertex - check/set the collection parameters AlgorithmName and AlgorithmType."], "VectorMembers": ["float parameters // additional parameters related to this vertex - check/set the collection parameter \"VertexParameterNames\" for the parameters meaning."], "OneToOneRelations": ["edm4hep::ReconstructedParticle associatedParticle // reconstructed particle associated to this vertex."], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::ReconstructedParticle": {"Description": "Reconstructed Particle", "Author": "F.Gaede, DESY", "Members": ["std::int32_t type // type of reconstructed particle. Check/set collection parameters ReconstructedParticleTypeNames and ReconstructedParticleTypeValues.", "float energy // [GeV] energy of the reconstructed particle. Four momentum state is not kept consistent internally.", "edm4hep::Vector3f momentum // [GeV] particle momentum. Four momentum state is not kept consistent internally.", "edm4hep::Vector3f referencePoint // [mm] reference, i.e. where the particle has been measured", "float charge // charge of the reconstructed particle.", "float mass // [GeV] mass of the reconstructed particle, set independently from four vector. Four momentum state is not kept consistent internally.", "float goodnessOfPID // overall goodness of the PID on a scale of [0;1]", "std::array<float, 10> covMatrix // cvariance matrix of the reconstructed particle 4vector (10 parameters). Stored as lower triangle matrix of the four momentum (px,py,pz,E), i.e. cov(px,px), cov(py,##"], "OneToOneRelations": ["edm4hep::Vertex startVertex // start vertex associated to this particle", "edm4hep::ParticleID particleIDUsed // particle Id used for the kinematics of this particle"], "OneToManyRelations": ["edm4hep::Cluster clusters // clusters that have been used for this particle.", "edm4hep::Track tracks // tracks that have been used for this particle.", "edm4hep::ReconstructedParticle particles // reconstructed particles that have been combined to this particle.", "edm4hep::ParticleID particleIDs // particle Ids (not sorted by their likelihood)"], "ExtraCode": {"declaration": " bool isCompound() const { return particles_size() > 0 ;}\n "}, "MutableExtraCode": {"declaration": " //vertex where the particle decays This method actually returns the start vertex from the first daughter particle found.\n //TODO: edm4hep::Vertex  getEndVertex() { return  edm4hep::Vertex(  (getParticles(0).isAvailable() ? getParticles(0).getStartVertex() :  edm4hep::Vertex(0,0) ) ) ; }\n "}, "VectorMembers": []}, "edm4hep::MCRecoParticleAssociation": {"Description": "Used to keep track of the correspondence between MC and reconstructed particles", "Author": "C. Bernet, B. Hegner", "Members": ["float weight // weight of this association"], "OneToOneRelations": ["edm4hep::ReconstructedParticle rec // reference to the reconstructed particle", "edm4hep::MCParticle sim // reference to the Monte-Carlo particle"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::MCRecoCaloAssociation": {"Description": "Association between a CaloHit and the corresponding simulated CaloHit", "Author": "C. Bernet, B. Hegner", "Members": ["float weight // weight of this association"], "OneToOneRelations": ["edm4hep::CalorimeterHit rec // reference to the reconstructed hit", "edm4hep::SimCalorimeterHit sim // reference to the simulated hit"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::MCRecoTrackerAssociation": {"Description": "Association between a TrackerHit and the corresponding simulated TrackerHit", "Author": "C. Bernet, B. Hegner", "Members": ["float weight // weight of this association"], "OneToOneRelations": ["edm4hep::TrackerHit rec // reference to the reconstructed hit", "edm4hep::SimTrackerHit sim // reference to the simulated hit"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::MCRecoTrackerHitPlaneAssociation": {"Description": "Association between a TrackerHitPlane and the corresponding simulated TrackerHit", "Author": "Placido Fernandez Declara", "Members": ["float weight // weight of this association"], "OneToOneRelations": ["edm4hep::TrackerHitPlane rec // reference to the reconstructed hit", "edm4hep::SimTrackerHit sim // reference to the simulated hit"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::MCRecoCaloParticleAssociation": {"Description": "Association between a CalorimeterHit and a MCParticle", "Author": "Placido Fernandez Declara", "Members": ["float weight // weight of this association"], "OneToOneRelations": ["edm4hep::CalorimeterHit rec // reference to the reconstructed hit", "edm4hep::MCParticle sim // reference to the Monte-Carlo particle"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::MCRecoClusterParticleAssociation": {"Description": "Association between a Cluster and a MCParticle", "Author": "Placido Fernandez Declara", "Members": ["float weight // weight of this association"], "OneToOneRelations": ["edm4hep::Cluster rec // reference to the cluster", "edm4hep::MCParticle sim // reference to the Monte-Carlo particle"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::MCRecoTrackParticleAssociation": {"Description": "Association between a Track and a MCParticle", "Author": "Placido Fernandez Declara", "Members": ["float weight // weight of this association"], "OneToOneRelations": ["edm4hep::Track rec // reference to the track", "edm4hep::MCParticle sim // reference to the Monte-Carlo particle"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::RecoParticleVertexAssociation": {"Description": "Association between a Reconstructed Particle and a Vertex", "Author": "Placido Fernandez Declara", "Members": ["float weight // weight of this association"], "OneToOneRelations": ["edm4hep::ReconstructedParticle rec // reference to the reconstructed particle", "edm4hep::Vertex vertex // reference to the vertex"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::SimPrimaryIonizationCluster": {"Description": "Simulated Primary Ionization", "Author": "Wenxing Fang, IHEP", "Members": ["std::uint64_t cellID // cell id.", "float time // the primary ionization's time in the lab frame [ns].", "edm4hep::Vector3d position // the primary ionization's position [mm].", "std::int16_t type // type."], "VectorMembers": ["std::uint64_t electronCellID // cell id.", "float electronTime // the time in the lab frame [ns].", "edm4hep::Vector3d electronPosition // the position in the lab frame [mm].", "float pulseTime // the pulse's time in the lab frame [ns].", "float pulseAmplitude // the pulse's amplitude [fC]."], "OneToOneRelations": ["edm4hep::MCParticle MCParticle // the particle that caused the ionizing collisions."], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::TrackerPulse": {"Description": "Reconstructed Tracker Pulse", "Author": "Wenxing Fang, IHEP", "Members": ["std::uint64_t cellID // cell id.", "float time // time [ns].", "float charge // charge [fC].", "std::int16_t quality // quality.", "std::array<float, 3> covMatrix // lower triangle covariance matrix of the charge(c) and time(t) measurements."], "OneToOneRelations": ["edm4hep::TimeSeries timeSeries // Optionally, the timeSeries that has been used to create the pulse can be stored with the pulse."], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::RecIonizationCluster": {"Description": "Reconstructed Ionization Cluster", "Author": "Wenxing Fang, IHEP", "Members": ["std::uint64_t cellID // cell id.", "float significance // significance.", "std::int16_t type // type."], "OneToManyRelations": ["edm4hep::TrackerPulse trackerPulse // the TrackerPulse used to create the ionization cluster."], "VectorMembers": [], "OneToOneRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::TimeSeries": {"Description": "Calibrated Detector Data", "Author": "Wenxing Fang, IHEP", "Members": ["std::uint64_t cellID // cell id.", "float time // begin time [ns].", "float interval // interval of each sampling [ns]."], "VectorMembers": ["float amplitude // calibrated detector data."], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4hep::RecDqdx": {"Description": "dN/dx or dE/dx info of Track.", "Author": "Wenxing Fang, IHEP", "Members": ["edm4hep::Quantity dQdx // the reconstructed dEdx or dNdx and its error", "std::int16_t particleType // particle type, e(0),mu(1),pi(2),K(3),p(4).", "std::int16_t type // type.", "std::array<edm4hep::Hypothesis, 5> hypotheses // 5 particle hypothesis"], "VectorMembers": ["edm4hep::HitLevelData hitData // hit level data"], "OneToOneRelations": ["edm4hep::Track track // the corresponding track."], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}}, "interfaces": {}})DATAMODELDEF";
0012 
0013 /**
0014  * The names of all relations and vector members for all datatypes
0015  */
0016 inline podio::RelationNameMapping edm4hep__getRelationNames() {
0017   using namespace std::string_view_literals;
0018   return {
0019       {
0020           "edm4hep::EventHeader"sv,
0021           {},
0022           {},
0023       },
0024       {
0025           "edm4hep::MCParticle"sv,
0026           {"parents"sv, "daughters"sv},
0027           {},
0028       },
0029       {
0030           "edm4hep::SimTrackerHit"sv,
0031           {"MCParticle"sv},
0032           {},
0033       },
0034       {
0035           "edm4hep::CaloHitContribution"sv,
0036           {"particle"sv},
0037           {},
0038       },
0039       {
0040           "edm4hep::SimCalorimeterHit"sv,
0041           {"contributions"sv},
0042           {},
0043       },
0044       {
0045           "edm4hep::RawCalorimeterHit"sv,
0046           {},
0047           {},
0048       },
0049       {
0050           "edm4hep::CalorimeterHit"sv,
0051           {},
0052           {},
0053       },
0054       {
0055           "edm4hep::ParticleID"sv,
0056           {},
0057           {"parameters"sv},
0058       },
0059       {
0060           "edm4hep::Cluster"sv,
0061           {"clusters"sv, "hits"sv, "particleIDs"sv},
0062           {"shapeParameters"sv, "subdetectorEnergies"sv},
0063       },
0064       {
0065           "edm4hep::TrackerHit"sv,
0066           {},
0067           {"rawHits"sv},
0068       },
0069       {
0070           "edm4hep::TrackerHitPlane"sv,
0071           {},
0072           {"rawHits"sv},
0073       },
0074       {
0075           "edm4hep::RawTimeSeries"sv,
0076           {},
0077           {"adcCounts"sv},
0078       },
0079       {
0080           "edm4hep::Track"sv,
0081           {"trackerHits"sv, "tracks"sv},
0082           {"subdetectorHitNumbers"sv, "trackStates"sv, "dxQuantities"sv},
0083       },
0084       {
0085           "edm4hep::Vertex"sv,
0086           {"associatedParticle"sv},
0087           {"parameters"sv},
0088       },
0089       {
0090           "edm4hep::ReconstructedParticle"sv,
0091           {"clusters"sv, "tracks"sv, "particles"sv, "particleIDs"sv, "startVertex"sv, "particleIDUsed"sv},
0092           {},
0093       },
0094       {
0095           "edm4hep::MCRecoParticleAssociation"sv,
0096           {"rec"sv, "sim"sv},
0097           {},
0098       },
0099       {
0100           "edm4hep::MCRecoCaloAssociation"sv,
0101           {"rec"sv, "sim"sv},
0102           {},
0103       },
0104       {
0105           "edm4hep::MCRecoTrackerAssociation"sv,
0106           {"rec"sv, "sim"sv},
0107           {},
0108       },
0109       {
0110           "edm4hep::MCRecoTrackerHitPlaneAssociation"sv,
0111           {"rec"sv, "sim"sv},
0112           {},
0113       },
0114       {
0115           "edm4hep::MCRecoCaloParticleAssociation"sv,
0116           {"rec"sv, "sim"sv},
0117           {},
0118       },
0119       {
0120           "edm4hep::MCRecoClusterParticleAssociation"sv,
0121           {"rec"sv, "sim"sv},
0122           {},
0123       },
0124       {
0125           "edm4hep::MCRecoTrackParticleAssociation"sv,
0126           {"rec"sv, "sim"sv},
0127           {},
0128       },
0129       {
0130           "edm4hep::RecoParticleVertexAssociation"sv,
0131           {"rec"sv, "vertex"sv},
0132           {},
0133       },
0134       {
0135           "edm4hep::SimPrimaryIonizationCluster"sv,
0136           {"MCParticle"sv},
0137           {"electronCellID"sv, "electronTime"sv, "electronPosition"sv, "pulseTime"sv, "pulseAmplitude"sv},
0138       },
0139       {
0140           "edm4hep::TrackerPulse"sv,
0141           {"timeSeries"sv},
0142           {},
0143       },
0144       {
0145           "edm4hep::RecIonizationCluster"sv,
0146           {"trackerPulse"sv},
0147           {},
0148       },
0149       {
0150           "edm4hep::TimeSeries"sv,
0151           {},
0152           {"amplitude"sv},
0153       },
0154       {
0155           "edm4hep::RecDqdx"sv,
0156           {"track"sv},
0157           {"hitData"sv},
0158       },
0159   };
0160 }
0161 
0162 /**
0163  * The schema version at generation time
0164  */
0165 static constexpr podio::SchemaVersionT schemaVersion = 1;
0166 
0167 /**
0168  * The helper class that takes care of registering the datamodel definition to
0169  * the DatamodelRegistry and to provide the index in that registry.
0170  *
0171  * Implemented as a singleton mainly to ensure only a single registration of
0172  * each datamodel, during the constructor
0173  */
0174 class DatamodelRegistryIndex {
0175 public:
0176   static size_t value() {
0177     static const auto relationNames = edm4hep__getRelationNames();
0178     static auto index = DatamodelRegistryIndex(
0179         podio::DatamodelRegistry::mutInstance().registerDatamodel("edm4hep", edm4hep__JSONDefinition, relationNames));
0180     return index.m_value;
0181   }
0182 
0183 private:
0184   DatamodelRegistryIndex(size_t v) : m_value(v) {
0185   }
0186   size_t m_value{podio::DatamodelRegistry::NoDefinitionAvailable};
0187 };
0188 
0189 namespace static_registration {
0190   // The usual trick via an IIFE and a const variable that we assign to, to
0191   // ensure that we populate this before everything starts
0192   inline bool ensureRegistration() {
0193     const static auto reg = []() {
0194       return edm4hep::meta::DatamodelRegistryIndex::value() != podio::DatamodelRegistry::NoDefinitionAvailable;
0195     }();
0196     return reg;
0197   }
0198 
0199   const auto registrationEnsured = ensureRegistration();
0200 } // namespace static_registration
0201 
0202 } // namespace edm4hep::meta