Back to home page

EIC code displayed by LXR

 
 

    


Warning, /EDM4eic/edm4eic.yaml is written in an unsupported language. File is not indexed.

0001 # SPDX-License-Identifier: LGPL-3.0-or-later
0002 # Copyright (C) 2023 Sylvester Joosten, Whitney Armstrong, Wouter Deconinck, Christopher Dilks
0003 # Some datatypes based on EDM4hep. EDM4hep license applies to those sections.
0004 ---
0005 ## Schema versioning
0006 ## This is required to be an integer, and defined as 100*major+minor.
0007 ## Patch level changes are required to be schema invariant.
0008 ##
0009 ## If there are schema version changes that can be evolved, see the podio documentation
0010 ## for an example: https://github.com/AIDASoft/podio/tree/master/tests/schema_evolution
0011 ##
0012 schema_version: 850
0013 
0014 options :
0015   # should getters / setters be prefixed with get / set?
0016   getSyntax: True
0017   # should POD members be exposed with getters/setters in classes that have them as members?
0018   exposePODMembers: False
0019   includeSubfolder: True
0020 
0021 ## Some guidance:
0022 ##  - Ensure data products usable without library dependencies (favor PODness where
0023 ##    possible).
0024 ##  - Move towards EDM4hep compatibility (to allow a transition to mainly use EDM4hep).
0025 ##        - migrate away from custom indices in favor of podio relations
0026 ##  - Use float most of the time except for 4-vectors where ppm precision is important.
0027 ##  - Data alignment: 
0028 ##        - data should be aligned with a 64-bit structure where possible.
0029 ##        - when using 32 bit values, use them in pairs (or after all 64-bit variables are defined). 
0030 ##        - same goes for 16-bit values (keep them aligned with the largest following component)
0031 ##  - Explicitly specify the integer length (use the typedefs from <cstdint>, 
0032 ##    such as int32_t etc)
0033 
0034 components:
0035 
0036   edm4eic::CovDiag3f:
0037     Members:
0038       - float xx
0039       - float yy
0040       - float zz
0041     ExtraCode:
0042       declaration: "
0043         CovDiag3f() : xx{0}, yy{0}, zz{0} {}\n
0044         CovDiag3f(double x, double y, double z)\n
0045           : xx{static_cast<float>(x)}, yy{static_cast<float>(y)}, zz{static_cast<float>(z)} {}\n
0046         float operator()(unsigned i, unsigned j) const {return (i == j) ? *(&xx + i) : 0.;}\n
0047         "
0048 
0049   edm4eic::Cov2f:
0050     Members:
0051       - float xx
0052       - float yy
0053       - float xy
0054     ExtraCode:
0055       declaration: "
0056         Cov2f() : xx{0}, yy{0}, xy{0} {}\n
0057         Cov2f(double vx, double vy, double vxy = 0)\n
0058           : xx{static_cast<float>(vx)}, yy{static_cast<float>(vy)}, xy{static_cast<float>(vxy)} {}\n
0059         float operator()(unsigned i, unsigned j) const {\n
0060           // diagonal\n
0061           if (i == j) {\n
0062             return *(&xx + i);\n
0063           }\n
0064           // off-diagonal\n
0065           // we have as options (0, 1), and (1, 0)\n
0066           // note that, starting from xy, we find the correct element at (i+j+1)/2)\n
0067           return *(&xy + (i + j + 1) / 2);\n
0068         }\n
0069       "
0070 
0071   edm4eic::Cov3f:
0072     Members:
0073       - float xx
0074       - float yy
0075       - float zz
0076       - float xy
0077       - float xz
0078       - float yz
0079     ExtraCode:
0080       declaration: "
0081         Cov3f() : xx{0}, yy{0}, zz{0}, xy{0}, xz{0}, yz{0} {}\n
0082         Cov3f(double vx, double vy, double vz, double vxy = 0, double vxz = 0, double vyz = 0)\n
0083           : xx{static_cast<float>(vx)}, yy{static_cast<float>(vy)}, zz{static_cast<float>(vz)},\n
0084             xy{static_cast<float>(vxy)}, xz{static_cast<float>(vxz)}, yz{static_cast<float>(vyz)} {}\n
0085         float operator()(unsigned i, unsigned j) const {\n
0086           // diagonal\n
0087           if (i == j) {\n
0088             return *(&xx + i);\n
0089           }\n
0090           // off-diagonal\n
0091           // we have as options (0, 1), (0, 2) and (1, 2) (and mirrored)\n
0092           // note that, starting from xy, we find the correct element at (i+j-1)\n
0093           return *(&xy + i + j - 1);\n
0094         }\n
0095       "
0096 
0097   edm4eic::Cov4f:
0098     Members:
0099       - float xx 
0100       - float yy
0101       - float zz
0102       - float tt
0103       - float xy
0104       - float xz
0105       - float xt
0106       - float yz
0107       - float yt
0108       - float zt
0109     ExtraCode:
0110       declaration: "
0111         Cov4f() : xx{0}, yy{0}, zz{0}, tt{0}, xy{0}, xz{0}, xt{0}, yz{0}, yt{0}, zt{0} {}\n
0112         Cov4f(double vx, double vy, double vz, double vt,\n
0113               double vxy = 0, double vxz = 0, double vxt = 0,\n
0114               double vyz = 0, double vyt = 0, double vzt = 0)\n
0115           : xx{static_cast<float>(vx)}, yy{static_cast<float>(vy)}, zz{static_cast<float>(vz)}, tt{static_cast<float>(vt)},\n
0116             xy{static_cast<float>(vxy)}, xz{static_cast<float>(vxz)}, xt{static_cast<float>(vxt)},\n
0117             yz{static_cast<float>(vyz)}, yt{static_cast<float>(vyt)}, zt{static_cast<float>(vzt)} {}\n
0118         float operator()(unsigned i, unsigned j) const {\n
0119           // diagonal\n
0120           if (i == j) {\n
0121             return *(&xx + i);\n
0122           // off-diagonal, can probably be done with less if statements \n
0123           } else {\n
0124             if (i > j) { \n
0125               std::swap(i,j); \n
0126             } \n
0127             if (i == 0) { \n
0128               return *(&xy + j - 1); \n
0129             } else if (i == 1) { \n
0130               return *(&yz + j - 2); \n
0131             } else { \n
0132               return zt; \n
0133             } \n
0134           } \n
0135         }\n
0136       "
0137 
0138   edm4eic::Cov6f:
0139     Members:
0140       - std::array<float, 21> covariance  // 6d triangular packed covariance matrix
0141     ExtraCode:
0142       declaration: "
0143         Cov6f() : covariance{} {}\n
0144         Cov6f(std::array<float, 21> vcov) : covariance{vcov}{}\n
0145         float operator()(unsigned i, unsigned j) const {\n
0146           if(i > j) {\n
0147             std::swap(i, j);\n
0148             }\n
0149           return covariance[i + 1 + (j + 1) * (j) / 2 - 1];\n
0150         }\n
0151         float& operator()(unsigned i, unsigned j) {\n
0152           if(i > j) {\n
0153             std::swap(i, j);\n
0154             }\n
0155           return covariance[i + 1 + (j + 1) * (j) / 2 - 1];\n
0156         }\n
0157       "
0158 
0159   ## A point along a track
0160   edm4eic::TrackPoint:
0161     Members:
0162       - uint64_t          surface         // Surface track was propagated to (possibly multiple per detector)
0163       - uint32_t          system          // Detector system track was propagated to
0164       - edm4hep::Vector3f position        // Position of the trajectory point [mm]
0165       - edm4eic::Cov3f    positionError   // Error on the position
0166       - edm4hep::Vector3f momentum        // 3-momentum at the point [GeV]
0167       - edm4eic::Cov3f    momentumError   // Error on the 3-momentum
0168       - float             time            // Time at this point [ns]
0169       - float             timeError       // Error on the time at this point
0170       - float             theta           // polar direction of the track at the surface [rad]
0171       - float             phi             // azimuthal direction of the track at the surface [rad]
0172       - edm4eic::Cov2f    directionError  // Error on the polar and azimuthal angles
0173       - float             pathlength      // Pathlength from the origin to this point
0174       - float             pathlengthError // Error on the pathlength
0175 
0176   ## PID hypothesis from Cherenkov detectors
0177   edm4eic::CherenkovParticleIDHypothesis:
0178     Members:
0179       - int32_t           PDG             // PDG code
0180       - float             npe             // Overall photoelectron count
0181       - float             weight          // Weight of this hypothesis, such as likelihood, moment, etc.
0182 
0183   ## Representation of surfaces, including dynamic perigee surfaces (identical to ActsPodioEdm::Surface)
0184   edm4eic::Surface:
0185     Members: 
0186       - int surfaceType                   // Cone = 0, Cylinder = 1, Disc = 2, Perigee = 3, Plane = 4, Straw = 5, Curvilinear = 6, Other = 7
0187       - 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
0188       - uint64_t geometryId               // bit pattern volume:8,boundary:8,layer:12,approach:8,sensitive:20,extra:8
0189       - uint64_t identifier               // identifier of associated detector element, if available
0190       - std::array<double,10> boundValues // bound values, e.g. for RectangleBounds, BoundValues are eMinX = 0, eMinY = 1, eMaxX = 2, eMaxY = 3, eSize = 4
0191       - uint32_t boundValuesSize          // size of bound values
0192       - 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
0193 
0194   ## An individual sample output by an HGCROC chip
0195   edm4eic::HGCROCSample:
0196     Members:
0197       - uint16_t ADC                // [ADC Counts], amplitude of signal during sample, valid IFF TOTInProgress is false
0198       - uint16_t timeOfArrival      // Time of arrival (TOA) [TDC counts], nonzero IFF ADC crossed threshold upwards during sample
0199       - uint16_t timeOverThreshold  // Time over threshold (TOT) [TDC counts], nonzero IFF ADC crossed threshold downwards during sample AND if TOA fired in a previous sample
0200       - bool     TOTInProgress      // Flag which indicates if TOT calculation is ongoing, ADC value may be corrupted if this is true
0201       - bool     TOTComplete        // Flag which indicates if a TOT calculation is complete and TOT value is valid
0202 
0203   ## Event-level truthiness information
0204   edm4eic::TruthinessContribution:
0205     Members:
0206       - float pid                 // Contribution of PID matching to truthiness
0207       - float energy              // Contribution of energy matching to truthiness
0208       - float momentum            // Contribution of momentum matching to truthiness
0209 
0210 datatypes:
0211 
0212   edm4eic::Tensor:
0213     Description: "Tensor type for use in training in inference of ML models"
0214     Author: "D. Kalinkin"
0215     Members:
0216       - int32_t           elementType     // Data type in the same encoding as "ONNXTensorElementDataType", 1 - float, 7 - int64
0217     VectorMembers:
0218       - int64_t           shape           // Vector of tensor lengths along its axes
0219       - float             floatData       // Iff elementType==1, values are stored here
0220       - int64_t           int64Data       // Iff elementType==7, values are stored here
0221 
0222   ## ==========================================================================
0223   ## Simulation info
0224   ## ==========================================================================
0225 
0226   edm4eic::SimPulse:
0227     Description: "Simulated pulse prior to digitization."
0228     Author: "D. Anderson, S. Gardner, S. Joosten., D. Kalinkin"
0229     Members:
0230       - uint64_t            cellID          // ID of the readout cell for this pulse.
0231       - float               integral        // Total pulse integral in relevant units.
0232       - edm4hep::Vector3f   position        // Position the pulse is evaluated in world coordinates [mm].
0233       - float               time            // Start time for the pulse in [ns].
0234       - float               interval        // Time interval between amplitude values [ns].
0235     VectorMembers:
0236       - float               amplitude       // Pulse amplitude in relevant units, sum of amplitude values equals integral
0237     OneToManyRelations:
0238       - edm4hep::SimCalorimeterHit calorimeterHits // SimCalorimeterHits used to create this pulse
0239       - edm4hep::SimTrackerHit     trackerHits     // SimTrackerHits used to create this pulse
0240       - edm4eic::SimPulse          pulses          // SimPulses used to create this pulse
0241       - edm4hep::MCParticle        particles       // MCParticle that caused the pulse
0242 
0243   ## ==========================================================================
0244   ## Particle info
0245   ## ==========================================================================
0246 
0247   edm4eic::ReconstructedParticle:
0248     Description: "EIC Reconstructed Particle"
0249     Author: "W. Armstrong, S. Joosten, F. Gaede"
0250     Members:
0251       - int32_t           type              // type of reconstructed particle. Check/set collection parameters ReconstructedParticleTypeNames and ReconstructedParticleTypeValues.
0252       - float             energy            // [GeV] energy of the reconstructed particle. Four momentum state is not kept consistent internally.
0253       - edm4hep::Vector3f momentum          // [GeV] particle momentum. Four momentum state is not kept consistent internally.
0254       - edm4hep::Vector3f referencePoint    // [mm] reference, i.e. where the particle has been measured
0255       - float             charge            // charge of the reconstructed particle.
0256       - float             mass              // [GeV] mass of the reconstructed particle, set independently from four vector. Four momentum state is not kept consistent internally.
0257       - float             goodnessOfPID     // overall goodness of the PID on a scale of [0;1]
0258       - edm4eic::Cov4f    covMatrix         // covariance matrix of the reconstructed particle 4vector (10 parameters).
0259       - int32_t           PDG               // PDG code for this particle
0260       ## @TODO: Do we need timing info? Or do we rely on the start vertex time?
0261     OneToOneRelations:
0262       - edm4eic::Vertex      startVertex    // Start vertex associated to this particle
0263       - edm4hep::ParticleID  particleIDUsed // particle ID used for the kinematics of this particle
0264     OneToManyRelations:
0265       - edm4eic::Cluster     clusters       // Clusters used for this particle
0266       - edm4eic::Track       tracks         // Tracks used for this particle
0267       - edm4eic::ReconstructedParticle particles // Reconstructed particles that have been combined to this particle
0268       - edm4hep::ParticleID  particleIDs    // All associated particle IDs for this particle (not sorted by likelihood)
0269     ExtraCode:
0270       declaration: "
0271         bool isCompound() const {return particles_size() > 0;}\n
0272         "
0273 
0274   ## ==========================================================================
0275   ## Calorimetry
0276   ## ==========================================================================
0277 
0278   edm4eic::RawHGCROCHit:
0279     Description: "Raw hit from an HGCROC chip"
0280     Author: "D. Anderson, S. Joosten, T. Protzman, N. Novitzky, D. Kalinkin"
0281     Members:
0282       - uint64_t cellID                // Detector specific (geometrical) cell id
0283       - int32_t  samplePhase           // Phase of samples in [# samples], for synchronizing across chips
0284       - int32_t  timeStamp             // [TDC counts]
0285     VectorMembers:
0286       - edm4eic::HGCROCSample samples  // ADC, Time of Arrival (TOA), and Time over Threshold (TOT) values for each sample read out
0287 
0288   edm4eic::CalorimeterHit:
0289     Description: "Calorimeter hit"
0290     Author: "W. Armstrong, S. Joosten"
0291     Members:
0292       - uint64_t          cellID            // The detector specific (geometrical) cell id.
0293       - float             energy            // The energy for this hit in [GeV].
0294       - float             energyError       // Error on energy [GeV].
0295       - float             time              // The time of the hit in [ns].
0296       - float             timeError         // Error on the time
0297       - edm4hep::Vector3f position          // The global position of the hit in world coordinates [mm].
0298       - edm4hep::Vector3f dimension         // The dimension information of the cell [mm].
0299       - int32_t           sector            // Sector that this hit occurred in
0300       - int32_t           layer             // Layer that the hit occurred in
0301       - edm4hep::Vector3f local             // The local coordinates of the hit in the detector segment [mm]. 
0302     OneToOneRelations:
0303       - edm4hep::RawCalorimeterHit rawHit   // Related raw calorimeter hit
0304 
0305   ## ==========================================================================
0306   ## Clustering
0307   ## ==========================================================================
0308   
0309   edm4eic::ProtoCluster:
0310     Description: "Collection of hits identified by the clustering algorithm to belong together"
0311     Author: "S. Joosten"
0312     OneToManyRelations:
0313       - edm4eic::CalorimeterHit hits        // Hits associated with this cluster
0314     VectorMembers:
0315       - float             weights           // Weight for each of the hits, mirrors hits array
0316 
0317   edm4eic::Cluster:
0318     Description: "EIC hit cluster, reworked to more closely resemble EDM4hep"
0319     Author: "W. Armstrong, S. Joosten, C.Peng"
0320     Members:
0321       # main variables
0322       - int32_t           type              // Flag-word that defines the type of the cluster
0323       - float             energy            // Reconstructed energy of the cluster [GeV].
0324       - float             energyError       // Error on the cluster energy [GeV]
0325       - float             time              // [ns]
0326       - float             timeError         // Error on the cluster time
0327       - uint32_t          nhits             // Number of hits in the cluster.
0328       - edm4hep::Vector3f position          // Global position of the cluster [mm].
0329       - edm4eic::Cov3f    positionError     // Covariance matrix of the position (6 Parameters).
0330       - float             intrinsicTheta    // Intrinsic cluster propagation direction polar angle [rad]
0331       - float             intrinsicPhi      // Intrinsic cluster propagation direction azimuthal angle [rad]
0332       - edm4eic::Cov2f    intrinsicDirectionError // Error on the intrinsic cluster propagation direction
0333     VectorMembers:
0334       - 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].
0335       - float             hitContributions  // Energy contributions of the hits. Runs parallel to ::hits()
0336       - float             subdetectorEnergies // Energies observed in each subdetector used for this cluster.
0337     OneToManyRelations:
0338       - edm4eic::Cluster        clusters    // Clusters that have been combined to form this cluster
0339       - edm4eic::CalorimeterHit hits        // Hits that have been combined to form this cluster
0340       - edm4hep::ParticleID     particleIDs // Particle IDs sorted by likelihood
0341 
0342   ## ==========================================================================
0343   ## RICH/Cherenkov and PID
0344   ## ==========================================================================
0345 
0346   edm4eic::PMTHit:
0347     Description: "EIC PMT hit"
0348     Author: "S. Joosten, C. Peng"
0349     Members:
0350       - uint64_t          cellID            // The detector specific (geometrical) cell id.
0351       - float             npe               // Estimated number of photo-electrons [#]
0352       # @TODO do we need an uncertainty on NPE?
0353       - float             time              // Time [ns]
0354       - float             timeError         // Error on the time [ns]
0355       - edm4hep::Vector3f position          // PMT hit position [mm]
0356       - edm4hep::Vector3f dimension         // The dimension information of the pixel [mm].
0357       - int32_t           sector            // The sector this hit occurred in
0358       - edm4hep::Vector3f local             // The local position of the hit in detector coordinates (relative to the sector) [mm]
0359 
0360   edm4eic::CherenkovParticleID:
0361     Description: "Cherenkov detector PID"
0362     Author: "A. Kiselev, C. Chatterjee, C. Dilks"
0363     Members:
0364       - float             npe               // Overall photoelectron count
0365       - float             refractiveIndex   // Average refractive index at the Cherenkov photons' vertices
0366       - float             photonEnergy      // Average energy for these Cherenkov photons [GeV]
0367     VectorMembers:
0368       - edm4eic::CherenkovParticleIDHypothesis hypotheses         // Evaluated PDG hypotheses
0369       - edm4hep::Vector2f                      thetaPhiPhotons    // estimated (theta,phi) for each Cherenkov photon
0370     OneToOneRelations:
0371       - edm4eic::TrackSegment                  chargedParticle    // reconstructed charged particle
0372     OneToManyRelations:
0373       - edm4eic::MCRecoTrackerHitAssociation   rawHitAssociations // raw sensor hits, associated with MC hits
0374 
0375   edm4eic::RingImage:
0376     ##@TODO: Juggler support; not used in EICrecon
0377     Description: "EIC Ring Image Cluster"
0378     Author: "S. Joosten, C. Peng"
0379     Members:
0380       - float             npe               // Number of photo-electrons [#]
0381       - edm4hep::Vector3f position          // Global position of the cluster [mm]
0382       - edm4hep::Vector3f positionError     // Error on the position
0383       - float             theta             // Opening angle of the ring [rad, 0->pi]
0384       - float             thetaError        // Error on the opening angle
0385       - float             radius            // Radius of the best fit ring [mm]
0386       - float             radiusError       // Estimated error from the fit [mm]
0387 
0388   ## ==========================================================================
0389   ## Tracking
0390   ## ==========================================================================
0391   
0392   edm4eic::RawTrackerHit:
0393     Description: "Raw (digitized) tracker hit"
0394     Author: "W. Armstrong, S. Joosten"
0395     Members:
0396       - uint64_t          cellID            // The detector specific (geometrical) cell id.
0397       - int32_t           charge            // ADC value
0398       ## @TODO: is charge appropriate here? Needs revisiting.
0399       - int32_t           timeStamp         // TDC value.
0400 
0401   edm4eic::TrackerHit:
0402     Description: "Tracker hit (reconstructed from Raw)"
0403     Author: "W. Armstrong, S. Joosten"
0404     Members:
0405       - uint64_t          cellID            // The detector specific (geometrical) cell id.
0406       - edm4hep::Vector3f position          // Hit (cell) position [mm]
0407       - edm4eic::CovDiag3f positionError    // Covariance Matrix
0408       - float             time              // Hit time [ns]
0409       - float             timeError         // Error on the time
0410       - float             edep              // Energy deposit in this hit [GeV]
0411       - float             edepError         // Error on the energy deposit [GeV]
0412     OneToOneRelations:
0413       - edm4eic::RawTrackerHit rawHit       // Related raw tracker hit
0414       
0415   edm4eic::Measurement2D:
0416     Description: "2D measurement (on an arbitrary surface)"
0417     Author: "W. Deconinck"
0418     Members:
0419       - uint64_t          surface           // Surface for bound coordinates (geometryID)
0420       - edm4hep::Vector2f loc               // 2D location on surface
0421       - float             time              // Measurement time
0422       - edm4eic::Cov3f    covariance        // Covariance on location and time
0423     VectorMembers:
0424       - float             weights           // Weight for each of the hits, mirrors hits array
0425     OneToManyRelations:
0426       - edm4eic::TrackerHit hits            // Hits in this measurement (single or clustered)
0427 
0428   edm4eic::TrackSeed:
0429     Description: "Seed info from the realistic seed finder"
0430     Author: "S. Li, B. Schmookler, J. Osborn"
0431     Members:
0432       - edm4hep::Vector3f         perigee   // Vector for the perigee (line surface)
0433     OneToManyRelations:
0434       - edm4eic::TrackerHit       hits      // Tracker hits triplet for seeding
0435     OneToOneRelations:
0436       - edm4eic::TrackParameters  params    // Initial track parameters
0437       
0438   edm4eic::Trajectory:
0439     Description: "Raw trajectory from the tracking algorithm. What is called hit here is 2d measurement indeed."
0440     Author: "S. Joosten, S. Li"
0441     Members:
0442       - uint32_t          type              // 0 (does not have good track fit), 1 (has good track fit)
0443       - uint32_t          nStates           // Number of tracking steps
0444       - uint32_t          nMeasurements     // Number of hits used 
0445       - uint32_t          nOutliers         // Number of hits not considered 
0446       - uint32_t          nHoles            // Number of missing hits
0447       - uint32_t          nSharedHits       // Number of shared hits with other trajectories
0448     VectorMembers:
0449       - float             measurementChi2   // Chi2 for each of the measurements
0450       - float             outlierChi2       // Chi2 for each of the outliers
0451     OneToManyRelations:
0452       - edm4eic::TrackParameters trackParameters            // Associated track parameters, if any
0453       - edm4eic::Measurement2D measurements_deprecated      // Measurements that were used for this track. Will move this to the edm4eic::Track
0454       - edm4eic::Measurement2D outliers_deprecated          // Measurements that were not used for this track. Will move this to the edm4eic::Track
0455     OneToOneRelations:
0456       - edm4eic::TrackSeed      seed      // Corresponding track seed
0457 
0458   edm4eic::TrackParameters:
0459     Description: "ACTS Bound Track parameters"
0460     Author: "W. Armstrong, S. Joosten, J. Osborn"
0461     Members:
0462       - int32_t              type              // Type of track parameters (-1/seed, 0/head, ...)
0463       - uint64_t             surface           // Surface for bound parameters (geometryID)
0464       - edm4hep::Vector2f    loc               // 2D location on surface
0465       - float                theta             // Track polar angle [rad]
0466       - float                phi               // Track azimuthal angle [rad]
0467       - float                qOverP            // [e/GeV]
0468       - float                time              // Track time [ns] 
0469       - int32_t              pdg               // pdg pid for these parameters
0470       - edm4eic::Cov6f       covariance        // Full covariance in basis [l0,l1,theta,phi,q/p,t]
0471 
0472 
0473   edm4eic::Track:
0474     Description: "Track information at the vertex"
0475     Author: "S. Joosten, J. Osborn"
0476     Members:
0477       - int32_t            type                           // Flag that defines the type of track
0478       - edm4hep::Vector3f  position                       // Track 3-position at the vertex 
0479       - edm4hep::Vector3f  momentum                       // Track 3-momentum at the vertex [GeV]
0480       - edm4eic::Cov6f     positionMomentumCovariance     // Covariance matrix in basis [x,y,z,px,py,pz]
0481       - float              time                           // Track time at the vertex [ns]
0482       - float              timeError                      // Error on the track vertex time
0483       - float              charge                         // Particle charge
0484       - float              chi2                           // Total chi2
0485       - uint32_t           ndf                            // Number of degrees of freedom
0486       - int32_t            pdg                            // PDG particle ID hypothesis
0487     OneToOneRelations:
0488       - edm4eic::Trajectory                     trajectory      // Trajectory of this track
0489     OneToManyRelations:
0490       - edm4eic::Measurement2D measurements      // Measurements that were used for this track
0491       - edm4eic::Track      tracks            // Tracks (segments) that have been combined to create this track
0492 
0493   edm4eic::TrackSegment:
0494     Description: "A track segment defined by one or more points along a track."
0495     Author: "S. Joosten"
0496     Members:
0497       - float             length            // Pathlength from the first to the last point
0498       - float             lengthError       // Error on the segment length
0499     OneToOneRelations:
0500       - edm4eic::Track    track             // Track used for this projection
0501     VectorMembers:
0502       - edm4eic::TrackPoint points          // Points where the track parameters were evaluated
0503 
0504   ## ==========================================================================
0505   ## Vertexing
0506   ## ==========================================================================
0507 
0508   edm4eic::Vertex:
0509     Description: "EIC vertex"
0510     Author: "J. Osborn"
0511     Members:
0512       - int32_t             type          // Type flag, to identify what type of vertex it is (e.g. primary, secondary, generated, etc.)
0513       - float               chi2          // Chi-squared of the vertex fit
0514       - int                 ndf           // NDF of the vertex fit
0515       - edm4hep::Vector4f   position      // position [mm] + time t0 [ns] of the vertex. Time is 4th component in vector
0516       ## this is named "covMatrix" in EDM4hep, renamed for consistency with the rest of edm4eic
0517       - edm4eic::Cov4f      positionError // Covariance matrix of the position+time. Time is 4th component, similarly to 4vector 
0518     OneToManyRelations:
0519       - edm4eic::ReconstructedParticle associatedParticles // particles associated to this vertex.
0520 
0521   ## ==========================================================================
0522   ## Kinematic reconstruction
0523   ## ==========================================================================
0524 
0525   edm4eic::InclusiveKinematics:
0526     Description: "Kinematic variables for DIS events"
0527     Author: "S. Joosten, W. Deconinck"
0528     Members:
0529       - float             x                 // Bjorken x (Q2/2P.q)
0530       - float             Q2                // Four-momentum transfer squared [GeV^2]
0531       - float             W                 // Invariant mass of final state [GeV]
0532       - float             y                 // Inelasticity (P.q/P.k)
0533       - float             nu                // Energy transfer P.q/M [GeV]
0534     OneToOneRelations:
0535       - edm4eic::ReconstructedParticle scat // Associated scattered electron (if identified)
0536       ## @TODO: Spin state?
0537       ## - phi_S?
0538 
0539   edm4eic::HadronicFinalState:
0540     Description: "Summed quantities of the hadronic final state"
0541     Author: "T. Kutz"
0542     Members:
0543       - float             sigma             // Longitudinal energy-momentum balance (aka E - pz)
0544       - float             pT                // Transverse momentum
0545       - float             gamma             // Hadronic angle
0546     OneToManyRelations:
0547       - edm4eic::ReconstructedParticle hadrons // Reconstructed hadrons used in calculation
0548 
0549   ## ==========================================================================
0550   ## Data-Monte Carlo relations
0551   ## ==========================================================================
0552 
0553   edm4eic::MCRecoParticleAssociation:
0554     Description: "Used to keep track of the correspondence between MC and reconstructed particles"
0555     Author: "S. Joosten"
0556     Members:
0557       - uint32_t          simID             // Index of corresponding MCParticle (position in MCParticles array)
0558       - uint32_t          recID             // Index of corresponding ReconstructedParticle (position in ReconstructedParticles array)
0559       - float             weight            // weight of this association
0560     OneToOneRelations :
0561       - edm4eic::ReconstructedParticle rec  // reference to the reconstructed particle
0562       - edm4hep::MCParticle sim             // reference to the Monte-Carlo particle
0563 
0564   edm4eic::MCRecoClusterParticleAssociation:
0565     Description: "Association between a Cluster and a MCParticle"
0566     Author : "S. Joosten"
0567     Members:
0568       - uint32_t          simID             // Index of corresponding MCParticle (position in MCParticles array)
0569       - uint32_t          recID             // Index of corresponding Cluster (position in Clusters array)
0570       - float             weight            // weight of this association
0571     OneToOneRelations:
0572       - edm4eic::Cluster  rec               // reference to the cluster
0573       - edm4hep::MCParticle sim             // reference to the Monte-Carlo particle
0574 
0575   edm4eic::MCRecoTrackParticleAssociation:
0576     Description: "Association between a Track and a MCParticle"
0577     Author : "S. Joosten"
0578     Members:
0579       - uint32_t          simID             // Index of corresponding MCParticle (position in MCParticles array)
0580       - uint32_t          recID             // Index of corresponding Track (position in Tracks array)
0581       - float             weight            // weight of this association
0582     OneToOneRelations:
0583       - edm4eic::Track    rec               // reference to the track
0584       - edm4hep::MCParticle sim             // reference to the Monte-Carlo particle
0585 
0586   edm4eic::MCRecoVertexParticleAssociation:
0587     Description: "Association between a Vertex and a MCParticle"
0588     Author : "S. Joosten"
0589     Members:
0590       - uint32_t          simID             // Index of corresponding MCParticle (position in MCParticles array)
0591       - uint32_t          recID             // Index of corresponding Vertex (position in Vertices array)
0592       - float             weight            // weight of this association
0593     OneToOneRelations:
0594       - edm4eic::Vertex     rec             // reference to the vertex
0595       - edm4hep::MCParticle sim             // reference to the Monte-Carlo particle
0596 
0597   edm4eic::MCRecoTrackerHitAssociation:
0598     Description: "Association between a RawTrackerHit and a SimTrackerHit"
0599     Author: "C. Dilks, W. Deconinck"
0600     Members:
0601       - float                 weight        // weight of this association
0602     OneToOneRelations:
0603       - edm4eic::RawTrackerHit rawHit       // reference to the digitized hit
0604       - edm4hep::SimTrackerHit simHit       // reference to the simulated hit
0605 
0606   edm4eic::MCRecoCalorimeterHitAssociation:
0607     Description: "Association between a RawCalorimeterHit and a SimCalorimeterHit"
0608     Author: "S. Rahman"
0609     Members:
0610       - float                 weight        // weight of this association
0611     OneToOneRelations:
0612       - edm4hep::RawCalorimeterHit rawHit   // reference to the digitized calorimeter hit
0613       - edm4hep::SimCalorimeterHit simHit   // reference to the simulated calorimeter hit
0614 
0615   edm4eic::TrackClusterMatch:
0616     Description: "Match between a Cluster and a Track"
0617     Author: "D. Anderson, D. Brandenburg, D. Kalinkin, S. Joosten"
0618     Members:
0619       - float                 weight        // weight of this association
0620     OneToOneRelations:
0621       - edm4eic::Cluster  cluster           // reference to the cluster
0622       - edm4eic::Track track                // reference to the track
0623 
0624   edm4eic::TrackProtoClusterMatch:
0625     Description: "Match between a ProtoCluster and a Track"
0626     Author: "D. Anderson, D. Kalinkin"
0627     Members:
0628       - float                 weight // weight of this association
0629     OneToOneRelations:
0630       - edm4eic::Track        from   // reference to the track
0631       - edm4eic::ProtoCluster to     // reference to the protocluster
0632 
0633   ## ==========================================================================
0634   ## Data-Monte Carlo comparisons
0635   ## ==========================================================================
0636 
0637   edm4eic::Truthiness:
0638     Description: "Positive-definite convex norm of how confidently wrong the reconstruction is,
0639                   with non-negative contributions from various aspects of the reconstruction,
0640                   where a zero value indicates a perfect reconstruction."
0641     Author: "W. Deconinck, S. Colbert"
0642     Members:
0643        - float truthiness                                         // Overall truthiness of the entire event
0644        - edm4eic::TruthinessContribution associationContribution  // Contribution from all associated particles
0645        - float unassociatedMCParticlesContribution                // Contribution from unassociated MC particles
0646        - float unassociatedRecoParticlesContribution              // Contribution from unassociated reconstructed particles
0647     VectorMembers:
0648       - edm4eic::TruthinessContribution associationContributions  // Contribution from associated particles
0649     OneToManyRelations:
0650        - edm4eic::MCRecoParticleAssociation associations          // Reference to the associated particles
0651        - edm4hep::MCParticle unassociatedMCParticles              // Reference to the unassociated MC particles
0652        - edm4eic::ReconstructedParticle unassociatedRecoParticles // Reference to the unassociated reconstructed particles
0653 
0654 links:
0655   edm4eic::TrackProtoClusterLink:
0656     Description: "Link between a ProtoCluster and a Track"
0657     Author: "D. Anderson, D. Kalinkin"
0658     From: edm4eic::Track
0659     To: edm4eic::ProtoCluster