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