EDM4eic
EIC data model
Loading...
Searching...
No Matches
DatamodelDefinition.h
Go to the documentation of this file.
1// AUTOMATICALLY GENERATED FILE - DO NOT EDIT
2
3#include "podio/DatamodelRegistry.h"
4#include "podio/SchemaEvolution.h"
5
6namespace edm4eic::meta {
7/**
8 * The complete definition of the datamodel at generation time in JSON format.
9 */
10static constexpr auto edm4eic__JSONDefinition = R"DATAMODELDEF({"options": {"getSyntax": true, "exposePODMembers": false, "includeSubfolder": "edm4eic/"}, "schema_version": 800, "components": {"edm4eic::CovDiag3f": {"Members": ["float xx", "float yy", "float zz"], "ExtraCode": {"declaration": " CovDiag3f() : xx{0}, yy{0}, zz{0} {}\n CovDiag3f(double x, double y, double z)\n : xx{static_cast<float>(x)}, yy{static_cast<float>(y)}, zz{static_cast<float>(z)} {}\n float operator()(unsigned i, unsigned j) const {return (i == j) ? *(&xx + i) : 0.;}\n "}}, "edm4eic::Cov2f": {"Members": ["float xx", "float yy", "float xy"], "ExtraCode": {"declaration": " Cov2f() : xx{0}, yy{0}, xy{0} {}\n Cov2f(double vx, double vy, double vxy = 0)\n : xx{static_cast<float>(vx)}, yy{static_cast<float>(vy)}, xy{static_cast<float>(vxy)} {}\n float operator()(unsigned i, unsigned j) const {\n // diagonal\n if (i == j) {\n return *(&xx + i);\n }\n // off-diagonal\n // we have as options (0, 1), and (1, 0)\n // note that, starting from xy, we find the correct element at (i+j+1)/2)\n return *(&xy + (i + j + 1) / 2);\n }\n "}}, "edm4eic::Cov3f": {"Members": ["float xx", "float yy", "float zz", "float xy", "float xz", "float yz"], "ExtraCode": {"declaration": " Cov3f() : xx{0}, yy{0}, zz{0}, xy{0}, xz{0}, yz{0} {}\n Cov3f(double vx, double vy, double vz, double vxy = 0, double vxz = 0, double vyz = 0)\n : xx{static_cast<float>(vx)}, yy{static_cast<float>(vy)}, zz{static_cast<float>(vz)},\n xy{static_cast<float>(vxy)}, xz{static_cast<float>(vxz)}, yz{static_cast<float>(vyz)} {}\n float operator()(unsigned i, unsigned j) const {\n // diagonal\n if (i == j) {\n return *(&xx + i);\n }\n // off-diagonal\n // we have as options (0, 1), (0, 2) and (1, 2) (and mirrored)\n // note that, starting from xy, we find the correct element at (i+j-1)\n return *(&xy + i + j - 1);\n }\n "}}, "edm4eic::Cov4f": {"Members": ["float xx", "float yy", "float zz", "float tt", "float xy", "float xz", "float xt", "float yz", "float yt", "float zt"], "ExtraCode": {"declaration": " Cov4f() : xx{0}, yy{0}, zz{0}, tt{0}, xy{0}, xz{0}, xt{0}, yz{0}, yt{0}, zt{0} {}\n Cov4f(double vx, double vy, double vz, double vt,\n double vxy = 0, double vxz = 0, double vxt = 0,\n double vyz = 0, double vyt = 0, double vzt = 0)\n : xx{static_cast<float>(vx)}, yy{static_cast<float>(vy)}, zz{static_cast<float>(vz)}, tt{static_cast<float>(vt)},\n xy{static_cast<float>(vxy)}, xz{static_cast<float>(vxz)}, xt{static_cast<float>(vxt)},\n yz{static_cast<float>(vyz)}, yt{static_cast<float>(vyt)}, zt{static_cast<float>(vzt)} {}\n float operator()(unsigned i, unsigned j) const {\n // diagonal\n if (i == j) {\n return *(&xx + i);\n // off-diagonal, can probably be done with less if statements \n } else {\n if (i > j) { \n std::swap(i,j); \n } \n if (i == 0) { \n return *(&xy + j - 1); \n } else if (i == 1) { \n return *(&yz + j - 2); \n } else { \n return zt; \n } \n } \n }\n "}}, "edm4eic::Cov6f": {"Members": ["std::array<float, 21> covariance // 6d triangular packed covariance matrix"], "ExtraCode": {"declaration": " Cov6f() : covariance{} {}\n Cov6f(std::array<float, 21> vcov) : covariance{vcov}{}\n float operator()(unsigned i, unsigned j) const {\n if(i > j) {\n std::swap(i, j);\n }\n return covariance[i + 1 + (j + 1) * (j) / 2 - 1];\n }\n float& operator()(unsigned i, unsigned j) {\n if(i > j) {\n std::swap(i, j);\n }\n return covariance[i + 1 + (j + 1) * (j) / 2 - 1];\n }\n "}}, "edm4eic::TrackPoint": {"Members": ["std::uint64_t surface // Surface track was propagated to (possibly multiple per detector)", "std::uint32_t system // Detector system track was propagated to", "edm4hep::Vector3f position // Position of the trajectory point [mm]", "edm4eic::Cov3f positionError // Error on the position", "edm4hep::Vector3f momentum // 3-momentum at the point [GeV]", "edm4eic::Cov3f momentumError // Error on the 3-momentum", "float time // Time at this point [ns]", "float timeError // Error on the time at this point", "float theta // polar direction of the track at the surface [rad]", "float phi // azimuthal direction of the track at the surface [rad]", "edm4eic::Cov2f directionError // Error on the polar and azimuthal angles", "float pathlength // Pathlength from the origin to this point", "float pathlengthError // Error on the pathlength"]}, "edm4eic::CherenkovParticleIDHypothesis": {"Members": ["std::int32_t PDG // PDG code", "float npe // Overall photoelectron count", "float weight // Weight of this hypothesis, such as likelihood, moment, etc."]}, "edm4eic::Surface": {"Members": ["int surfaceType // Cone = 0, Cylinder = 1, Disc = 2, Perigee = 3, Plane = 4, Straw = 5, Curvilinear = 6, Other = 7", "int boundsType // eCone = 0, eCylinder = 1, eDiamond = 2, eDisc = 3, eEllipse = 4, eLine = 5, eRectangle = 6, eTrapezoid = 7, eTriangle = 8, eDiscTrapezoid = 9, eConvexPolygon = 10, eAnnulus = 11, eBoundless = 12, eOther = 13", "std::uint64_t geometryId // bit pattern volume:8,boundary:8,layer:12,approach:8,sensitive:20,extra:8", "std::uint64_t identifier // identifier of associated detector element, if available", "std::array<double, 10> boundValues // bound values, e.g. for RectangleBounds, BoundValues are eMinX = 0, eMinY = 1, eMaxX = 2, eMaxY = 3, eSize = 4", "std::uint32_t boundValuesSize // size of bound values", "std::array<double, 16> transform // row-wise 4x4 affine transform [R T; 0 1] with 3x3 rotation matrix R and translation column 3-vector T"]}}, "datatypes": {"edm4eic::Tensor": {"Description": "Tensor type for use in training in inference of ML models", "Author": "D. Kalinkin", "Members": ["std::int32_t elementType // Data type in the same encoding as \"ONNXTensorElementDataType\", 1 - float, 7 - int64"], "VectorMembers": ["std::int64_t shape // Vector of tensor lengths along its axes", "float floatData // Iff elementType==1, values are stored here", "std::int64_t int64Data // Iff elementType==7, values are stored here"], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::ReconstructedParticle": {"Description": "EIC Reconstructed Particle", "Author": "W. Armstrong, S. Joosten, F. Gaede", "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]", "edm4eic::Cov4f covMatrix // covariance matrix of the reconstructed particle 4vector (10 parameters).", "std::int32_t PDG // PDG code for this particle"], "OneToOneRelations": ["edm4eic::Vertex startVertex // Start vertex associated to this particle", "edm4hep::ParticleID particleIDUsed // particle ID used for the kinematics of this particle"], "OneToManyRelations": ["edm4eic::Cluster clusters // Clusters used for this particle", "edm4eic::Track tracks // Tracks used for this particle", "edm4eic::ReconstructedParticle particles // Reconstructed particles that have been combined to this particle", "edm4hep::ParticleID particleIDs // All associated particle IDs for this particle (not sorted by likelihood)"], "ExtraCode": {"declaration": " bool isCompound() const {return particles_size() > 0;}\n "}, "VectorMembers": [], "MutableExtraCode": {}}, "edm4eic::CalorimeterHit": {"Description": "Calorimeter hit", "Author": "W. Armstrong, S. Joosten", "Members": ["std::uint64_t cellID // The detector specific (geometrical) cell id.", "float energy // The energy for this hit in [GeV].", "float energyError // Error on energy [GeV].", "float time // The time of the hit in [ns].", "float timeError // Error on the time", "edm4hep::Vector3f position // The global position of the hit in world coordinates [mm].", "edm4hep::Vector3f dimension // The dimension information of the cell [mm].", "std::int32_t sector // Sector that this hit occurred in", "std::int32_t layer // Layer that the hit occurred in", "edm4hep::Vector3f local // The local coordinates of the hit in the detector segment [mm]."], "OneToOneRelations": ["edm4hep::RawCalorimeterHit rawHit // Related raw calorimeter hit"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::ProtoCluster": {"Description": "Collection of hits identified by the clustering algorithm to belong together", "Author": "S. Joosten", "OneToManyRelations": ["edm4eic::CalorimeterHit hits // Hits associated with this cluster"], "VectorMembers": ["float weights // Weight for each of the hits, mirrors hits array"], "Members": [], "OneToOneRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::Cluster": {"Description": "EIC hit cluster, reworked to more closely resemble EDM4hep", "Author": "W. Armstrong, S. Joosten, C.Peng", "Members": ["std::int32_t type // Flag-word that defines the type of the cluster", "float energy // Reconstructed energy of the cluster [GeV].", "float energyError // Error on the cluster energy [GeV]", "float time // [ns]", "float timeError // Error on the cluster time", "std::uint32_t nhits // Number of hits in the cluster.", "edm4hep::Vector3f position // Global position of the cluster [mm].", "edm4eic::Cov3f positionError // Covariance matrix of the position (6 Parameters).", "float intrinsicTheta // Intrinsic cluster propagation direction polar angle [rad]", "float intrinsicPhi // Intrinsic cluster propagation direction azimuthal angle [rad]", "edm4eic::Cov2f intrinsicDirectionError // Error on the intrinsic cluster propagation direction"], "VectorMembers": ["float shapeParameters // Should be set in metadata, for now it's a list of -- radius [mm], dispersion [mm], 2 entries for theta-phi widths [rad], 3 entries for x-y-z widths [mm].", "float hitContributions // Energy contributions of the hits. Runs parallel to ::hits()", "float subdetectorEnergies // Energies observed in each subdetector used for this cluster."], "OneToManyRelations": ["edm4eic::Cluster clusters // Clusters that have been combined to form this cluster", "edm4eic::CalorimeterHit hits // Hits that have been combined to form this cluster", "edm4hep::ParticleID particleIDs // Particle IDs sorted by likelihood"], "OneToOneRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::PMTHit": {"Description": "EIC PMT hit", "Author": "S. Joosten, C. Peng", "Members": ["std::uint64_t cellID // The detector specific (geometrical) cell id.", "float npe // Estimated number of photo-electrons [#]", "float time // Time [ns]", "float timeError // Error on the time [ns]", "edm4hep::Vector3f position // PMT hit position [mm]", "edm4hep::Vector3f dimension // The dimension information of the pixel [mm].", "std::int32_t sector // The sector this hit occurred in", "edm4hep::Vector3f local // The local position of the hit in detector coordinates (relative to the sector) [mm]"], "VectorMembers": [], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::CherenkovParticleID": {"Description": "Cherenkov detector PID", "Author": "A. Kiselev, C. Chatterjee, C. Dilks", "Members": ["float npe // Overall photoelectron count", "float refractiveIndex // Average refractive index at the Cherenkov photons' vertices", "float photonEnergy // Average energy for these Cherenkov photons [GeV]"], "VectorMembers": ["edm4eic::CherenkovParticleIDHypothesis hypotheses // Evaluated PDG hypotheses", "edm4hep::Vector2f thetaPhiPhotons // estimated (theta,phi) for each Cherenkov photon"], "OneToOneRelations": ["edm4eic::TrackSegment chargedParticle // reconstructed charged particle"], "OneToManyRelations": ["edm4eic::MCRecoTrackerHitAssociation rawHitAssociations // raw sensor hits, associated with MC hits"], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::RingImage": {"Description": "EIC Ring Image Cluster", "Author": "S. Joosten, C. Peng", "Members": ["float npe // Number of photo-electrons [#]", "edm4hep::Vector3f position // Global position of the cluster [mm]", "edm4hep::Vector3f positionError // Error on the position", "float theta // Opening angle of the ring [rad, 0->pi]", "float thetaError // Error on the opening angle", "float radius // Radius of the best fit ring [mm]", "float radiusError // Estimated error from the fit [mm]"], "VectorMembers": [], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::RawTrackerHit": {"Description": "Raw (digitized) tracker hit", "Author": "W. Armstrong, S. Joosten", "Members": ["std::uint64_t cellID // The detector specific (geometrical) cell id.", "std::int32_t charge // ADC value", "std::int32_t timeStamp // TDC value."], "VectorMembers": [], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::TrackerHit": {"Description": "Tracker hit (reconstructed from Raw)", "Author": "W. Armstrong, S. Joosten", "Members": ["std::uint64_t cellID // The detector specific (geometrical) cell id.", "edm4hep::Vector3f position // Hit (cell) position [mm]", "edm4eic::CovDiag3f positionError // Covariance Matrix", "float time // Hit time [ns]", "float timeError // Error on the time", "float edep // Energy deposit in this hit [GeV]", "float edepError // Error on the energy deposit [GeV]"], "OneToOneRelations": ["edm4eic::RawTrackerHit rawHit // Related raw tracker hit"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::Measurement2D": {"Description": "2D measurement (on an arbitrary surface)", "Author": "W. Deconinck", "Members": ["std::uint64_t surface // Surface for bound coordinates (geometryID)", "edm4hep::Vector2f loc // 2D location on surface", "float time // Measurement time", "edm4eic::Cov3f covariance // Covariance on location and time"], "VectorMembers": ["float weights // Weight for each of the hits, mirrors hits array"], "OneToManyRelations": ["edm4eic::TrackerHit hits // Hits in this measurement (single or clustered)"], "OneToOneRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::TrackSeed": {"Description": "Seed info from the realistic seed finder", "Author": "S. Li, B. Schmookler, J. Osborn", "Members": ["edm4hep::Vector3f perigee // Vector for the perigee (line surface)"], "OneToManyRelations": ["edm4eic::TrackerHit hits // Tracker hits triplet for seeding"], "OneToOneRelations": ["edm4eic::TrackParameters params // Initial track parameters"], "VectorMembers": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::Trajectory": {"Description": "Raw trajectory from the tracking algorithm. What is called hit here is 2d measurement indeed.", "Author": "S. Joosten, S. Li", "Members": ["std::uint32_t type // 0 (does not have good track fit), 1 (has good track fit)", "std::uint32_t nStates // Number of tracking steps", "std::uint32_t nMeasurements // Number of hits used", "std::uint32_t nOutliers // Number of hits not considered", "std::uint32_t nHoles // Number of missing hits", "std::uint32_t nSharedHits // Number of shared hits with other trajectories"], "VectorMembers": ["float measurementChi2 // Chi2 for each of the measurements", "float outlierChi2 // Chi2 for each of the outliers"], "OneToManyRelations": ["edm4eic::TrackParameters trackParameters // Associated track parameters, if any", "edm4eic::Measurement2D measurements_deprecated // Measurements that were used for this track. Will move this to the edm4eic::Track", "edm4eic::Measurement2D outliers_deprecated // Measurements that were not used for this track. Will move this to the edm4eic::Track"], "OneToOneRelations": ["edm4eic::TrackSeed seed // Corresponding track seed"], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::TrackParameters": {"Description": "ACTS Bound Track parameters", "Author": "W. Armstrong, S. Joosten, J. Osborn", "Members": ["std::int32_t type // Type of track parameters (-1/seed, 0/head, ...)", "std::uint64_t surface // Surface for bound parameters (geometryID)", "edm4hep::Vector2f loc // 2D location on surface", "float theta // Track polar angle [rad]", "float phi // Track azimuthal angle [rad]", "float qOverP // [e/GeV]", "float time // Track time [ns]", "std::int32_t pdg // pdg pid for these parameters", "edm4eic::Cov6f covariance // Full covariance in basis [l0,l1,theta,phi,q/p,t]"], "VectorMembers": [], "OneToOneRelations": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::Track": {"Description": "Track information at the vertex", "Author": "S. Joosten, J. Osborn", "Members": ["std::int32_t type // Flag that defines the type of track", "edm4hep::Vector3f position // Track 3-position at the vertex", "edm4hep::Vector3f momentum // Track 3-momentum at the vertex [GeV]", "edm4eic::Cov6f positionMomentumCovariance // Covariance matrix in basis [x,y,z,px,py,pz]", "float time // Track time at the vertex [ns]", "float timeError // Error on the track vertex time", "float charge // Particle charge", "float chi2 // Total chi2", "std::uint32_t ndf // Number of degrees of freedom", "std::int32_t pdg // PDG particle ID hypothesis"], "OneToOneRelations": ["edm4eic::Trajectory trajectory // Trajectory of this track"], "OneToManyRelations": ["edm4eic::Measurement2D measurements // Measurements that were used for this track", "edm4eic::Track tracks // Tracks (segments) that have been combined to create this track"], "VectorMembers": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::TrackSegment": {"Description": "A track segment defined by one or more points along a track.", "Author": "S. Joosten", "Members": ["float length // Pathlength from the first to the last point", "float lengthError // Error on the segment length"], "OneToOneRelations": ["edm4eic::Track track // Track used for this projection"], "VectorMembers": ["edm4eic::TrackPoint points // Points where the track parameters were evaluated"], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::Vertex": {"Description": "EIC vertex", "Author": "J. Osborn", "Members": ["std::int32_t type // Type flag, to identify what type of vertex it is (e.g. primary, secondary, generated, etc.)", "float chi2 // Chi-squared of the vertex fit", "int ndf // NDF of the vertex fit", "edm4hep::Vector4f position // position [mm] + time t0 [ns] of the vertex. Time is 4th component in vector", "edm4eic::Cov4f positionError // Covariance matrix of the position+time. Time is 4th component, similarly to 4vector"], "OneToManyRelations": ["edm4eic::ReconstructedParticle associatedParticles // particles associated to this vertex."], "VectorMembers": [], "OneToOneRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::InclusiveKinematics": {"Description": "Kinematic variables for DIS events", "Author": "S. Joosten, W. Deconinck", "Members": ["float x // Bjorken x (Q2/2P.q)", "float Q2 // Four-momentum transfer squared [GeV^2]", "float W // Invariant mass of final state [GeV]", "float y // Inelasticity (P.q/P.k)", "float nu // Energy transfer P.q/M [GeV]"], "OneToOneRelations": ["edm4eic::ReconstructedParticle scat // Associated scattered electron (if identified)"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::HadronicFinalState": {"Description": "Summed quantities of the hadronic final state", "Author": "T. Kutz", "Members": ["float sigma // Longitudinal energy-momentum balance (aka E - pz)", "float pT // Transverse momentum", "float gamma // Hadronic angle"], "OneToManyRelations": ["edm4eic::ReconstructedParticle hadrons // Reconstructed hadrons used in calculation"], "VectorMembers": [], "OneToOneRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::MCRecoParticleAssociation": {"Description": "Used to keep track of the correspondence between MC and reconstructed particles", "Author": "S. Joosten", "Members": ["std::uint32_t simID // Index of corresponding MCParticle (position in MCParticles array)", "std::uint32_t recID // Index of corresponding ReconstructedParticle (position in ReconstructedParticles array)", "float weight // weight of this association"], "OneToOneRelations": ["edm4eic::ReconstructedParticle rec // reference to the reconstructed particle", "edm4hep::MCParticle sim // reference to the Monte-Carlo particle"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::MCRecoClusterParticleAssociation": {"Description": "Association between a Cluster and a MCParticle", "Author": "S. Joosten", "Members": ["std::uint32_t simID // Index of corresponding MCParticle (position in MCParticles array)", "std::uint32_t recID // Index of corresponding Cluster (position in Clusters array)", "float weight // weight of this association"], "OneToOneRelations": ["edm4eic::Cluster rec // reference to the cluster", "edm4hep::MCParticle sim // reference to the Monte-Carlo particle"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::MCRecoTrackParticleAssociation": {"Description": "Association between a Track and a MCParticle", "Author": "S. Joosten", "Members": ["std::uint32_t simID // Index of corresponding MCParticle (position in MCParticles array)", "std::uint32_t recID // Index of corresponding Track (position in Tracks array)", "float weight // weight of this association"], "OneToOneRelations": ["edm4eic::Track rec // reference to the track", "edm4hep::MCParticle sim // reference to the Monte-Carlo particle"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::MCRecoVertexParticleAssociation": {"Description": "Association between a Vertex and a MCParticle", "Author": "S. Joosten", "Members": ["std::uint32_t simID // Index of corresponding MCParticle (position in MCParticles array)", "std::uint32_t recID // Index of corresponding Vertex (position in Vertices array)", "float weight // weight of this association"], "OneToOneRelations": ["edm4eic::Vertex rec // reference to the vertex", "edm4hep::MCParticle sim // reference to the Monte-Carlo particle"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::MCRecoTrackerHitAssociation": {"Description": "Association between a RawTrackerHit and a SimTrackerHit", "Author": "C. Dilks, W. Deconinck", "Members": ["float weight // weight of this association"], "OneToOneRelations": ["edm4eic::RawTrackerHit rawHit // reference to the digitized hit", "edm4hep::SimTrackerHit simHit // reference to the simulated hit"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::MCRecoCalorimeterHitAssociation": {"Description": "Association between a RawCalorimeterHit and a SimCalorimeterHit", "Author": "S. Rahman", "Members": ["float weight // weight of this association"], "OneToOneRelations": ["edm4hep::RawCalorimeterHit rawHit // reference to the digitized calorimeter hit", "edm4hep::SimCalorimeterHit simHit // reference to the simulated calorimeter hit"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}, "edm4eic::TrackClusterMatch": {"Description": "Match between a Cluster and a Track", "Author": "D. Anderson, D. Brandenburg, D. Kalinkin, S. Joosten", "Members": ["float weight // weight of this association"], "OneToOneRelations": ["edm4eic::Cluster cluster // reference to the cluster", "edm4eic::Track track // reference to the track"], "VectorMembers": [], "OneToManyRelations": [], "ExtraCode": {}, "MutableExtraCode": {}}}, "interfaces": {}})DATAMODELDEF";
11
12
13/**
14 * The names of all relations and vector members for all datatypes
15 */
16inline podio::RelationNameMapping edm4eic__getRelationNames() {
17 using namespace std::string_view_literals;
18 return {
19 {"edm4eic::Tensor"sv,
20 { },
21 { "shape"sv, "floatData"sv, "int64Data"sv },
22 },
23 {"edm4eic::ReconstructedParticle"sv,
24 { "clusters"sv, "tracks"sv, "particles"sv, "particleIDs"sv, "startVertex"sv, "particleIDUsed"sv },
25 { },
26 },
27 {"edm4eic::CalorimeterHit"sv,
28 { "rawHit"sv },
29 { },
30 },
31 {"edm4eic::ProtoCluster"sv,
32 { "hits"sv },
33 { "weights"sv },
34 },
35 {"edm4eic::Cluster"sv,
36 { "clusters"sv, "hits"sv, "particleIDs"sv },
37 { "shapeParameters"sv, "hitContributions"sv, "subdetectorEnergies"sv },
38 },
39 {"edm4eic::PMTHit"sv,
40 { },
41 { },
42 },
43 {"edm4eic::CherenkovParticleID"sv,
44 { "rawHitAssociations"sv, "chargedParticle"sv },
45 { "hypotheses"sv, "thetaPhiPhotons"sv },
46 },
47 {"edm4eic::RingImage"sv,
48 { },
49 { },
50 },
51 {"edm4eic::RawTrackerHit"sv,
52 { },
53 { },
54 },
55 {"edm4eic::TrackerHit"sv,
56 { "rawHit"sv },
57 { },
58 },
59 {"edm4eic::Measurement2D"sv,
60 { "hits"sv },
61 { "weights"sv },
62 },
63 {"edm4eic::TrackSeed"sv,
64 { "hits"sv, "params"sv },
65 { },
66 },
67 {"edm4eic::Trajectory"sv,
68 { "trackParameters"sv, "measurements_deprecated"sv, "outliers_deprecated"sv, "seed"sv },
69 { "measurementChi2"sv, "outlierChi2"sv },
70 },
71 {"edm4eic::TrackParameters"sv,
72 { },
73 { },
74 },
75 {"edm4eic::Track"sv,
76 { "measurements"sv, "tracks"sv, "trajectory"sv },
77 { },
78 },
79 {"edm4eic::TrackSegment"sv,
80 { "track"sv },
81 { "points"sv },
82 },
83 {"edm4eic::Vertex"sv,
84 { "associatedParticles"sv },
85 { },
86 },
87 {"edm4eic::InclusiveKinematics"sv,
88 { "scat"sv },
89 { },
90 },
91 {"edm4eic::HadronicFinalState"sv,
92 { "hadrons"sv },
93 { },
94 },
95 {"edm4eic::MCRecoParticleAssociation"sv,
96 { "rec"sv, "sim"sv },
97 { },
98 },
99 {"edm4eic::MCRecoClusterParticleAssociation"sv,
100 { "rec"sv, "sim"sv },
101 { },
102 },
103 {"edm4eic::MCRecoTrackParticleAssociation"sv,
104 { "rec"sv, "sim"sv },
105 { },
106 },
107 {"edm4eic::MCRecoVertexParticleAssociation"sv,
108 { "rec"sv, "sim"sv },
109 { },
110 },
111 {"edm4eic::MCRecoTrackerHitAssociation"sv,
112 { "rawHit"sv, "simHit"sv },
113 { },
114 },
115 {"edm4eic::MCRecoCalorimeterHitAssociation"sv,
116 { "rawHit"sv, "simHit"sv },
117 { },
118 },
119 {"edm4eic::TrackClusterMatch"sv,
120 { "cluster"sv, "track"sv },
121 { },
122 },
123 };
124}
125
126/**
127 * The schema version at generation time
128 */
129static constexpr podio::SchemaVersionT schemaVersion = 800;
130
131/**
132 * The helper class that takes care of registering the datamodel definition to
133 * the DatamodelRegistry and to provide the index in that registry.
134 *
135 * Implemented as a singleton mainly to ensure only a single registration of
136 * each datamodel, during the constructor
137 */
138class DatamodelRegistryIndex {
139public:
140 static size_t value() {
141 static const auto relationNames = edm4eic__getRelationNames();
142 static auto index = DatamodelRegistryIndex(podio::DatamodelRegistry::mutInstance().registerDatamodel("edm4eic", edm4eic__JSONDefinition, relationNames));
143 return index.m_value;
144 }
145private:
146 DatamodelRegistryIndex(size_t v) : m_value(v) {}
147 size_t m_value{podio::DatamodelRegistry::NoDefinitionAvailable};
148};
149
150
151namespace static_registration {
152 // The usual trick via an IIFE and a const variable that we assign to, to
153 // ensure that we populate this before everything starts
154 inline bool ensureRegistration() {
155 const static auto reg = []() {
156 return edm4eic::meta::DatamodelRegistryIndex::value() != podio::DatamodelRegistry::NoDefinitionAvailable;
157 }();
158 return reg;
159 }
160
161 const auto registrationEnsured = ensureRegistration();
162}
163
164} // namespace edm4eic::meta