Warning, /eicd/eic_data.yaml is written in an unsupported language. File is not indexed.
0001 ---
0002 options :
0003 # should getters / setters be prefixed with get / set?
0004 getSyntax: True
0005 # should POD members be exposed with getters/setters in classes that have them as members?
0006 exposePODMembers: False
0007 includeSubfolder: True
0008
0009 ## Some guidance:
0010 ## - Ensure data products usable without library dependencies (favor PODness where
0011 ## possible).
0012 ## - Move towards EDM4hep compatibility (to allow a transition to mainly use EDM4hep).
0013 ## - migrate away from custom indices in favor of podio relations
0014 ## - Use float most of the time except for 4-vectors where ppm precision is important.
0015 ## - Data alignment:
0016 ## - data should be aligned with a 64-bit structure where possible.
0017 ## - when using 32 bit values, use them in pairs (or after all 64-bit variables are defined).
0018 ## - same goes for 16-bit values (keep them aligned with the largest following component)
0019 ## - Explicitly specify the integer length (use the typedefs from <cstdint>,
0020 ## such as int32_t etc)
0021
0022 components:
0023
0024 eicd::CovDiag3f:
0025 Members:
0026 - float xx
0027 - float yy
0028 - float zz
0029 ExtraCode:
0030 declaration: "
0031 CovDiag3f() : xx{0}, yy{0}, zz{0} {}\n
0032 CovDiag3f(double x, double y, double z)\n
0033 : xx{static_cast<float>(x)}, yy{static_cast<float>(y)}, zz{static_cast<float>(z)} {}\n
0034 float operator()(unsigned i, unsigned j) const {return (i == j) ? *(&xx + i) : 0.;}\n
0035 "
0036
0037 eicd::Cov2f:
0038 Members:
0039 - float xx
0040 - float yy
0041 - float xy
0042 ExtraCode:
0043 declaration: "
0044 Cov2f() : xx{0}, yy{0}, xy{0} {}\n
0045 Cov2f(double vx, double vy, double vxy = 0)\n
0046 : xx{static_cast<float>(vx)}, yy{static_cast<float>(vy)}, xy{static_cast<float>(vxy)} {}\n
0047 float operator()(unsigned i, unsigned j) const {\n
0048 // diagonal\n
0049 if (i == j) {\n
0050 return *(&xx + i);\n
0051 }\n
0052 // off-diagonal\n
0053 // we have as options (0, 1), and (1, 0)\n
0054 // note that, starting from xy, we find the correct element at (i+j+1)/2)\n
0055 return *(&xy + (i + j + 1) / 2);\n
0056 }\n
0057 "
0058
0059 eicd::Cov3f:
0060 Members:
0061 - float xx
0062 - float yy
0063 - float zz
0064 - float xy
0065 - float xz
0066 - float yz
0067 ExtraCode:
0068 declaration: "
0069 Cov3f() : xx{0}, yy{0}, zz{0}, xy{0}, xz{0}, yz{0} {}\n
0070 Cov3f(double vx, double vy, double vz, double vxy = 0, double vxz = 0, double vyz = 0)\n
0071 : xx{static_cast<float>(vx)}, yy{static_cast<float>(vy)}, zz{static_cast<float>(vz)},\n
0072 xy{static_cast<float>(vxy)}, xz{static_cast<float>(vxz)}, yz{static_cast<float>(vyz)} {}\n
0073 float operator()(unsigned i, unsigned j) const {\n
0074 // diagonal\n
0075 if (i == j) {\n
0076 return *(&xx + i);\n
0077 }\n
0078 // off-diagonal\n
0079 // we have as options (0, 1), (0, 2) and (1, 2) (and mirrored)\n
0080 // note that, starting from xy, we find the correct element at (i+j-1)\n
0081 return *(&xy + i + j - 1);\n
0082 }\n
0083 "
0084
0085 eicd::Cov4f:
0086 Members:
0087 - float xx
0088 - float yy
0089 - float zz
0090 - float tt
0091 - float xy
0092 - float xz
0093 - float xt
0094 - float yz
0095 - float yt
0096 - float zt
0097 ExtraCode:
0098 declaration: "
0099 Cov4f() : xx{0}, yy{0}, zz{0}, tt{0}, xy{0}, xz{0}, xt{0}, yz{0}, yt{0}, zt{0} {}\n
0100 Cov4f(double vx, double vy, double vz, double vt,\n
0101 double vxy = 0, double vxz = 0, double vxt = 0,\n
0102 double vyz = 0, double vyt = 0, double vzt = 0)\n
0103 : xx{static_cast<float>(vx)}, yy{static_cast<float>(vy)}, zz{static_cast<float>(vz)}, tt{static_cast<float>(vt)},\n
0104 xy{static_cast<float>(vxy)}, xz{static_cast<float>(vxz)}, xt{static_cast<float>(vxt)},\n
0105 yz{static_cast<float>(vyz)}, yt{static_cast<float>(vyt)}, zt{static_cast<float>(vzt)} {}\n
0106 float operator()(unsigned i, unsigned j) const {\n
0107 // diagonal\n
0108 if (i == j) {\n
0109 return *(&xx + i);\n
0110 // off-diagonal, can probably be done with less if statements \n
0111 } else {\n
0112 if (i > j) { \n
0113 std::swap(i,j); \n
0114 } \n
0115 if (i == 0) { \n
0116 return *(&xy + j - 1); \n
0117 } else if (i == 1) { \n
0118 return *(&yz + j - 2); \n
0119 } else { \n
0120 return zt; \n
0121 } \n
0122 } \n
0123 }\n
0124 "
0125
0126 ## A point along a track
0127 eicd::TrackPoint:
0128 Members:
0129 - edm4hep::Vector3f position // Position of the trajectory point [mm]
0130 - eicd::Cov3f positionError // Error on the position
0131 - edm4hep::Vector3f momentum // 3-momentum at the point [GeV]
0132 - eicd::Cov3f momentumError // Error on the 3-momentum
0133 - float time // Time at this point [ns]
0134 - float timeError // Error on the time at this point
0135 - float theta // polar direction of the track at the surface [rad]
0136 - float phi // azimuthal direction of the track at the surface [rad]
0137 - eicd::Cov2f directionError // Error on the polar and azimuthal angles
0138 - float pathlength // Pathlength from the origin to this point
0139 - float pathlengthError // Error on the pathlenght
0140
0141 datatypes:
0142
0143 ## ==========================================================================
0144 ## Particle info
0145 ## ==========================================================================
0146
0147 eicd::ReconstructedParticle:
0148 Description: "EIC Reconstructed Particle"
0149 Author: "W. Armstrong, S. Joosten, F. Gaede"
0150 Members:
0151 - int32_t type // type of reconstructed particle. Check/set collection parameters ReconstructedParticleTypeNames and ReconstructedParticleTypeValues.
0152 - float energy // [GeV] energy of the reconstructed particle. Four momentum state is not kept consistent internally.
0153 - edm4hep::Vector3f momentum // [GeV] particle momentum. Four momentum state is not kept consistent internally.
0154 - edm4hep::Vector3f referencePoint // [mm] reference, i.e. where the particle has been measured
0155 - float charge // charge of the reconstructed particle.
0156 - float mass // [GeV] mass of the reconstructed particle, set independently from four vector. Four momentum state is not kept consistent internally.
0157 - float goodnessOfPID // overall goodness of the PID on a scale of [0;1]
0158 - eicd::Cov4f covMatrix // cvariance matrix of the reconstructed particle 4vector (10 parameters).
0159 ##@TODO: deviation from EDM4hep: store explicit PDG ID here. Needs to be discussed how we
0160 ## move forward as this could easiliy become unwieldy without this information here.
0161 ## The only acceptable alternative would be to store reconstructed identified
0162 ## particles in separate collections for the different particle types (which would
0163 ## require some algorithmic changes but might work. Doing both might even make
0164 ## sense. Needs some discussion, note that PID is more emphasized in NP than
0165 ## HEP).
0166 - int32_t PDG // PDG code for this particle
0167 ## @TODO: Do we need timing info? Or do we rely on the start vertex time?
0168 OneToOneRelations:
0169 - eicd::Vertex startVertex // Start vertex associated to this particle
0170 - edm4hep::ParticleID particleIDUsed // particle ID used for the kinematics of this particle
0171 OneToManyRelations:
0172 - eicd::Cluster clusters // Clusters used for this particle
0173 - eicd::Track tracks // Tracks used for this particle
0174 - eicd::ReconstructedParticle particles // Reconstructed particles that have been combined to this particle
0175 - edm4hep::ParticleID particleIDs // All associated particle IDs for this particle (not sorted by likelihood)
0176 ExtraCode:
0177 declaration: "
0178 bool isCompound() const {return particles_size() > 0;}\n
0179 "
0180
0181 ## ==========================================================================
0182 ## Calorimetry
0183 ## ==========================================================================
0184 eicd::RawCalorimeterHit:
0185 Description: "Raw (digitized) calorimeter hit"
0186 Author: "W. Armstrong, S. Joosten"
0187 Members:
0188 - uint64_t cellID // The detector specific (geometrical) cell id.
0189 - uint64_t amplitude // The magnitude of the hit in ADC counts.
0190 ## @TODO: should we also add integral and time-over-threshold (ToT) here? Or should
0191 ## those all be different raw sensor types? Amplitude is
0192 ## really not what most calorimetry sensors will give us AFAIK...
0193 - uint64_t timeStamp // Timing in TDC
0194
0195 eicd::CalorimeterHit:
0196 Description: "Calorimeter hit"
0197 Author: "W. Armstrong, S. Joosten"
0198 Members:
0199 - uint64_t cellID // The detector specific (geometrical) cell id.
0200 - float energy // The energy for this hit in [GeV].
0201 - float energyError // Error on energy [GeV].
0202 - float time // The time of the hit in [ns].
0203 - float timeError // Error on the time
0204 - edm4hep::Vector3f position // The global position of the hit in world coordinates [mm].
0205 - edm4hep::Vector3f dimension // The dimension information of the cell [mm].
0206 - int32_t sector // Sector that this hit occured in
0207 - int32_t layer // Layer that the hit occured in
0208 - edm4hep::Vector3f local // The local coordinates of the hit in the detector segment [mm].
0209
0210 ## ==========================================================================
0211 ## Clustering
0212 ## ==========================================================================
0213
0214 eicd::ProtoCluster:
0215 Description: "Collection of hits identified by the clustering algorithm to belong together"
0216 Author: "S. Joosten"
0217 OneToManyRelations:
0218 - eicd::CalorimeterHit hits // Hits associated with this cluster
0219 VectorMembers:
0220 - float weights // Weight for each of the hits, mirrors hits array
0221
0222 eicd::Cluster:
0223 Description: "EIC hit cluster, reworked to more closely resemble EDM4hep"
0224 Author: "W. Armstrong, S. Joosten, C.Peng"
0225 Members:
0226 # main variables
0227 - int32_t type // Flagword that defines the type of the cluster
0228 - float energy // Reconstructed energy of the cluster [GeV].
0229 - float energyError // Error on the cluster energy [GeV]
0230 - float time // [ns]
0231 - float timeError // Error on the cluster time
0232 - uint32_t nhits // Number of hits in the cluster.
0233 - edm4hep::Vector3f position // Global position of the cluster [mm].
0234 - eicd::Cov3f positionError // Covariance matrix of the position (6 Parameters).
0235 - float intrinsicTheta // Intrinsic cluster propagation direction polar angle [rad]
0236 - float intrinsicPhi // Intrinsic cluster propagation direction azimuthal angle [rad]
0237 - eicd::Cov2f intrinsicDirectionError // Error on the intrinsic cluster propagation direction
0238 VectorMembers:
0239 - float shapeParameters // Should be set in metadata, for now radius/skewness
0240 - float hitContributions // Energy contributions of the hits. Runs parallel to ::hits()
0241 - float subdetectorEnergies // Energies observed in each subdetector used for this cluster.
0242 OneToManyRelations:
0243 - eicd::Cluster clusters // Clusters that have been combined to form this cluster
0244 - eicd::CalorimeterHit hits // Hits that have been combined to form this cluster
0245 - edm4hep::ParticleID particleIDs // Particle IDs sorted by likelihood
0246
0247 ## ==========================================================================
0248 ## RICH/Cherenkov and PID
0249 ## ==========================================================================
0250
0251 eicd::RawPMTHit:
0252 Description: "EIC Raw PMT hit"
0253 Author: "S. Joosten, C. Peng"
0254 Members:
0255 - uint64_t cellID // The detector specific (geometrical) cell id.
0256 - uint32_t integral // PMT signal integral [ADC]
0257 ## @TODO: same question as posed by RawCalorimeterHits, needs revisiting
0258 ## when we increase realism
0259 - uint32_t timeStamp // PMT signal time [TDC]
0260
0261 eicd::PMTHit:
0262 Description: "EIC PMT hit"
0263 Author: "S. Joosten, C. Peng"
0264 Members:
0265 - uint64_t cellID // The detector specific (geometrical) cell id.
0266 - float npe // Estimated number of photo-electrons [#]
0267 # @TODO do we need an uncertainty on NPE?
0268 - float time // Time [ns]
0269 - float timeError // Error on the time [ns]
0270 - edm4hep::Vector3f position // PMT hit position [mm]
0271 - edm4hep::Vector3f dimension // The dimension information of the pixel [mm].
0272 - int32_t sector // The sector this hit occured in
0273 - edm4hep::Vector3f local // The local position of the hit in detector coordinates (relative to the sector) [mm]
0274
0275 eicd::RingImage:
0276 ##@TODO: RICH reconstruction still needs an overhaul
0277 Description: "EIC Ring Image Cluster"
0278 Author: "S. Joosten, C. Peng"
0279 Members:
0280 - float npe // Number of photo-electrons [#]
0281 - edm4hep::Vector3f position // Global position of the cluster [mm]
0282 - edm4hep::Vector3f positionError // Error on the position
0283 - float theta // Opening angle of the ring [rad, 0->pi]
0284 - float thetaError // Error on the opening angle
0285 - float radius // Radius of the best fit ring [mm]
0286 - float radiusError // Estimated error from the fit [mm]
0287
0288 ## ==========================================================================
0289 ## Tracking
0290 ## ==========================================================================
0291
0292 eicd::RawTrackerHit:
0293 Description: "Raw (digitized) tracker hit"
0294 Author: "W. Armstrong, S. Joosten"
0295 Members:
0296 - uint64_t cellID // The detector specific (geometrical) cell id.
0297 - int32_t charge // ADC value
0298 ## @TODO: is charge appropriate here? Needs revisiting.
0299 - int32_t timeStamp // TDC value.
0300
0301 eicd::TrackerHit:
0302 Description: "Tracker hit (reconstructed from Raw)"
0303 Author: "W. Armstrong, S. Joosten"
0304 Members:
0305 - uint64_t cellID // The detector specific (geometrical) cell id.
0306 - edm4hep::Vector3f position // Hit (cell) position and time [mm, ns]
0307 - eicd::CovDiag3f positionError // Covariance Matrix
0308 - float time // Hit time
0309 - float timeError // Error on the time
0310 - float edep // Energy deposit in this hit [GeV]
0311 - float edepError // Error on the energy deposit [GeV]
0312
0313 eicd::Trajectory:
0314 Description: "Raw trajectory from the tracking algorithm"
0315 Author: "S. Joosten, S. Li"
0316 Members:
0317 - uint32_t type // 0 (does not have good track fit), 1 (has good track fit)
0318 - uint32_t nStates // Number of tracking steps
0319 - uint32_t nMeasurements // Number of hits used
0320 - uint32_t nOutliers // Number of hits not considered
0321 - uint32_t nHoles // Number of missing hits
0322 - float chi2 // Total chi2
0323 - uint32_t ndf // Number of degrees of freedom
0324 - uint32_t nSharedHits // Number of shared hits with other trajectories
0325 VectorMembers:
0326 - float measurementChi2 // Chi2 for each of the measurements
0327 - float outlierChi2 // Chi2 for each of the outliers
0328 OneToOneRelations:
0329 - eicd::TrackParameters trackParameters // Associated track parameters, if any
0330 OneToManyRelations:
0331 - eicd::TrackerHit measurementHits // Measurement hits used in this trajectory
0332 - eicd::TrackerHit outlierHits // Outlier hits not used in this trajectory
0333
0334 eicd::TrackParameters:
0335 Description: "ACTS Bound Track parameters"
0336 Author: "W. Armstrong, S. Joosten"
0337 Members:
0338 - int32_t type // Type of track parameters (-1/seed, 0/head, ...)
0339 - edm4hep::Vector2f loc // 2D location on surface
0340 - eicd::Cov2f locError // Covariance on loc
0341 - float theta // Track polar angle [rad]
0342 - float phi // Track azimuthal angle [rad]
0343 - float qOverP // [e/GeV]
0344 - eicd::Cov3f momentumError // Covariance on theta, phi and qOverP
0345 - float time // Track time [ns]
0346 - float timeError // Error on the time
0347 - float charge // Particle charge
0348 OneToOneRelations:
0349 - eicd::Trajectory trajectory // Trajectory associated with these track parameters
0350
0351 eicd::Track:
0352 Description: "Track information at the vertex"
0353 Author: "S. Joosten"
0354 Members:
0355 - int32_t type // Flag that defines the type of track
0356 - float chi2 // Total chi2 (sum) of the track fit
0357 - int32_t ndf // Numbers of degrees of freedom of the track fit
0358 - edm4hep::Vector3f momentum // Track 3-momentum at the vertex [GeV]
0359 - eicd::Cov3f momentumError // Covariance matrix on the momentum
0360 - float time // Track time at the vertex [ns]
0361 - float timeError // Error on the track vertex time
0362 - float charge // Particle charge
0363 OneToManyRelations:
0364 - eicd::TrackParameters parameters // Track fit parameters, the first entry (if present) is evaluated at the track head
0365 - eicd::TrackerHit trackerHits // Hits that were used for this track
0366 - eicd::Track tracks // Tracks (segments) that have been combined to create this track
0367
0368 eicd::TrackSegment:
0369 Description: "A track segment defined by one or more points along a track."
0370 Author: "S. Joosten"
0371 Members:
0372 - float length // Pathlength from the first to the last point
0373 - float lengthError // Error on the segment length
0374 OneToOneRelations:
0375 - eicd::Track track // Track used for this projection
0376 VectorMembers:
0377 - eicd::TrackPoint points // Points where the track parameters were evaluated
0378
0379 ## ==========================================================================
0380 ## Vertexing
0381 ## ==========================================================================
0382
0383 eicd::Vertex:
0384 Description: "EIC vertex"
0385 Author: "W. Armstrong, S. Joosten, based off EDM4hep"
0386 Members:
0387 - int32_t primary // Boolean flag, if vertex is the primary vertex of the event
0388 - float chi2 // Chi-squared of the vertex fit
0389 - float probability // Probability of the vertex fit
0390 - edm4hep::Vector3f position // [mm] position of the vertex.
0391 ## this is named "covMatrix" in EDM4hep, renamed for consistency with the rest of EICD
0392 - eicd::Cov3f positionError // Covariance matrix of the position
0393 - int32_t algorithmType // Type code for the algorithm that has been used to create the vertex - check/set the collection parameters AlgorithmName and AlgorithmType.
0394 ## Additional parameter not in EDM4hep: vertex time
0395 - float time // Vertex time
0396 VectorMembers:
0397 - float parameters // Additional parameters related to this vertex - check/set the collection parameter "VertexParameterNames" for the parameters meaning.
0398 OneToOneRelations:
0399 ## @TODO: why one and not multiple particles?
0400 - eicd::ReconstructedParticle associatedParticle // reconstructed particle associated to this vertex.
0401
0402 ## ==========================================================================
0403 ## Kinematic reconstruction
0404 ## ==========================================================================
0405
0406 eicd::InclusiveKinematics:
0407 Description: "Kinematic variables for DIS events"
0408 Author: "S. Joosten, W. Deconinck"
0409 Members:
0410 - float x // Bjorken x (Q2/2P.q)
0411 - float Q2 // Four-momentum transfer squared [GeV^2]
0412 - float W // Invariant mass of final state [GeV]
0413 - float y // Inelasticity (P.q/P.k)
0414 - float nu // Energy transfer P.q/M [GeV]
0415 OneToOneRelations:
0416 - eicd::ReconstructedParticle scat // Associated scattered electron (if identified)
0417 ## @TODO: Spin state?
0418 ## - phi_S?
0419
0420 ## ==========================================================================
0421 ## Data-Montecarlo relations
0422 ## ==========================================================================
0423
0424 eicd::MCRecoParticleAssociation:
0425 Description: "Used to keep track of the correspondence between MC and reconstructed particles"
0426 Author: "S. Joosten"
0427 Members:
0428 - uint32_t simID // Index of corresponding MCParticle (position in MCParticles array)
0429 - uint32_t recID // Index of corresponding ReconstructedParticle (position in ReconstructedParticles array)
0430 - float weight // weight of this association
0431 OneToOneRelations :
0432 - eicd::ReconstructedParticle rec // reference to the reconstructed particle
0433 - edm4hep::MCParticle sim // reference to the Monte-Carlo particle
0434
0435 eicd::MCRecoClusterParticleAssociation:
0436 Description: "Association between a Cluster and a MCParticle"
0437 Author : "S. Joosten"
0438 Members:
0439 - uint32_t simID // Index of corresponding MCParticle (position in MCParticles array)
0440 - uint32_t recID // Index of corresponding Cluster (position in Clusters array)
0441 - float weight // weight of this association
0442 OneToOneRelations:
0443 - eicd::Cluster rec // reference to the cluster
0444 - edm4hep::MCParticle sim // reference to the Monte-Carlo particle
0445
0446 eicd::MCRecoTrackParticleAssociation:
0447 Description: "Association between a Track and a MCParticle"
0448 Author : "S. Joosten"
0449 Members:
0450 - uint32_t simID // Index of corresponding MCParticle (position in MCParticles array)
0451 - uint32_t recID // Index of corresponding Track (position in Tracks array)
0452 - float weight // weight of this association
0453 OneToOneRelations:
0454 - eicd::Track rec // reference to the track
0455 - edm4hep::MCParticle sim // reference to the Monte-Carlo particle
0456
0457 eicd::MCRecoVertexParticleAssociation:
0458 Description: "Association between a Vertex and a MCParticle"
0459 Author : "S. Joosten"
0460 Members:
0461 - uint32_t simID // Index of corresponding MCParticle (position in MCParticles array)
0462 - uint32_t recID // Index of corresponding Vertex (position in Vertices array)
0463 - float weight // weight of this association
0464 OneToOneRelations:
0465 - eicd::Vertex rec // reference to the vertex
0466 - edm4hep::MCParticle sim // reference to the Monte-Carlo particle