Back to home page

EIC code displayed by LXR

 
 

    


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