diff --git a/eic_data.yaml b/eic_data.yaml index d2faa59f091313c6201d7d9d652083e41036e237..f5fc81196bd382bd5cc407ab1a497403d7c57481 100644 --- a/eic_data.yaml +++ b/eic_data.yaml @@ -248,10 +248,13 @@ components: ## A point along a trajectory eic::TrajectoryPoint: Members: - - eic::VectorXYZ position // Position of the trajectory point - - eic::VectorPolar p // 3-momentum at the point (in P, theta, phi) + - eic::VectorXYZ position // Position of the trajectory point [mm] + - eic::VectorXYZ p // 3-momentum at the point [GeV] + - eic::Direction direction // (theta, phi) direction of track at the surface [mrad] + - float momentum // magnitude of 3-momentum [GeV] - float pathlength // Pathlength from the origin to this point + ## PID hypothesis from Cherenkov detectors eic::CherenkovPdgHypothesis: Members: - int32_t pdg // PDG code @@ -324,7 +327,6 @@ datatypes: Members: - eic::Index ID // Unique entry ID - eic::Index recID // Index of the associated ReconstructedParticle particle, if any - VectorMembers: - eic::CherenkovPdgHypothesis options // Evaluated PDG hypotheses, typically (e/pi/K/p) @@ -509,20 +511,20 @@ datatypes: Members: - eic::Index ID // Unique trajectory ID - eic::Index trackID // Corresponding track ID - - eic::VectorXYZ momentum // 3-momentum at the vertex for the trajectory - - float charge // Charge of particle trajectory + - eic::VectorXYZ p // 3-momentum at the vertex for the trajectory + - float charge // Charge of the particle trajectory VectorMembers: - eic::TrajectoryPoint points // Points along this trajectory - eic::Track: - Description: "Particle Track" + Description: "Track information" Author: "W. Armstrong, S. Joosten" Members: - - eic::Index ID // Unique track ID. - - eic::Index parameters // Index for track parameters - - eic::VectorXYZT momentum // Momentum of vertex [mm] - + - eic::Index ID // Unique track ID, same as the ID in the corresponding TrackParameters + - eic::VectorXYZ p // Track momementum + - float charge // Charge of particle trajectory + - float length // Track length from first to last hit[mm] + - float TOF // Time of flight from first to last hit [ns] ## ========================================================================== ## Vertexing diff --git a/eic_data2.yaml b/eic_data2.yaml deleted file mode 100644 index ff80cce2242c1b15507e2a16965fddeb2cfb2bd1..0000000000000000000000000000000000000000 --- a/eic_data2.yaml +++ /dev/null @@ -1,534 +0,0 @@ ---- -options : - # should getters / setters be prefixed with get / set? - getSyntax: False - # should POD members be exposed with getters/setters in classes that have them as members? - exposePODMembers: False - includeSubfolder: True - -## right now we rigurously enforce: -## - No breaking of PODness: -## - No use of relations and vectors -## - Use special Relation structures where needed, indexing by ID (index) -## - IDs are stored as eic::Index, which is a thin layer of an signed integer -## where -1 relates to "no index". -## - For 1-to-many relations: Use many-to-1 IDs instead --> use forward links -## This puts the burden on the reconstruction algorithm and keeps the data 2D! -## - Use float most of the time except for 4-vectors where ppm precision is important. -## - Data alignment: -## - data should be aligned with a 64-bit structure where possible. -## - when using 32 bit values, use them in pairs (or after all 64-bit variables are defined). -## - same goes for 16-bit values (keep them aligned with the largest following component) -## - Explicitly specify the integer length (use the typedefs from <cstdint>, -## such as int32_t etc) - -components: - - ## Unique field identifier. Has 2 components: source and ID where - ## source identifies the originating collection (or algorithm) and ID - ## the ID of the entry within this collection. - ## Defaults to -1 for an unset index. - eic::Index: - Members: - - int32_t value - - int32_t source - ExtraCode: - declaration: " - Index() : source{0}, value{-1} {}\n - Index(int32_t id) : value{id}, source{0} {}\n - Index(int32_t id, int32_t src) : value{id}, source{src} {}\n - Index(Index rhs, int32_t new_src) : Index(rhs.value, new_src) {} \n - bool empty() const {return value < 0;}\n - bool valid() const {return value >= 0 && source != 0;}\n - bool equals(const eic::Index& rhs) const {return rhs.source == source && rhs.value == value;}\n - bool operator==(const eic::Index& rhs) const {return equals(rhs);}\n - bool operator!=(const eic::Index& rhs) const {return !equals(rhs);}\n - bool operator<(const eic::Index& rhs) const {return long_form() < rhs.long_form();}\n - int64_t long_form() const {int64_t l = static_cast<int64_t>(source) << 32 | value; return l;}\n - explicit operator bool() const {return valid();} - " - - ## simple weight that defaults to 1 if not set - eic::Weight: - Members: - - float value - ExtraCode: - declaration: " - Weight() : value{1.} {}\n - Weight(double w) : value {static_cast<float>(w)} {}\n - Weight& operator=(double w) {value = static_cast<float>(w); return *this;}\n - operator float() const {return value;} - " - - - ## first-second pair of float s - eic::FloatPair: - Members: - - float first - - float second - ExtraCode: - includes: "#include <tuple>" - declaration: " - FloatPair() : first{0}, second{0} {}\n - FloatPair(double a, double b) : first{static_cast<float>(a)}, second{static_cast<float>(b)} {}\n - FloatPair(const std::pair<float, float>& p) : first{p.first}, second{p.second} {}\n - FloatPair& operator=(const std::pair<float, float>& p) {first = p.first; second = p.second; return *this;}\n - float& operator[](unsigned i) {return *(&first + i);}\n - const float& operator[](unsigned i) const {return *(&first + i);}\n - operator std::pair<float, float>() const {return {first, second};}\n - " - - eic::VectorXY: - Members: - - float x // [mm] or [GeV] - - float y // - ExtraCode: - includes: "#include <cmath>\n" - declaration: " - VectorXY() : x{0}, y{0} {}\n - VectorXY(double xx, double yy) : x{static_cast<float>(xx)}, y{static_cast<float>(yy)} {}\n - float& operator[](unsigned i) {return *(&x + i);}\n - const float& operator[](unsigned i) const {return *(&x + i);}\n - float mag() const {return std::hypot(x, y);}\n - float r() const {return mag();}\n - float phi() const {return atan2(y, x);}\n - operator std::pair<float, float>() const {return {x, y};}\n - float dot(const VectorXY& rhs) const {return x*rhs.x + y*rhs.y;}\n - VectorXY add(const VectorXY& rhs) const {return {x+rhs.x, y+rhs.y};}\n - VectorXY subtract(const VectorXY& rhs) const {return {x-rhs.x, y-rhs.y};}\n - VectorXY scale(double f) const {return {f*x, f*y};}\n - " - - eic::Direction: - Members: - - float theta // [rad, 0->pi] - - float phi // [rad, -pi->pi] - ExtraCode: - includes: "#include <cmath>\n#include <tuple>" - declaration: " - Direction() : theta{0}, phi{0} {}\n - Direction(double th, double ph) : theta{static_cast<float>(th)}, phi{static_cast<float>(ph)} {}\n - Direction(double x, double y, double z)\n - : theta{static_cast<float>(acos(z/std::hypot(x,y,z)))}\n - , phi{static_cast<float>(atan2(y,x))} {}\n - template <class VectorType> Direction(const VectorType& v) : Direction(v.theta(), v.phi()) {}\n - operator std::pair<float, float>() const {return {theta, phi};}\n - float eta() const {return -log(tan(0.5*theta));}\n - Direction add(const Direction& rhs) const {return {theta+rhs.theta, phi+rhs.phi};}\n - Direction subtract(const Direction& rhs) const {return {theta-rhs.theta, phi-rhs.phi};}\n - " - - eic::VectorXYZ: - Members: - - float x // [mm] or [GeV] - - float y // - - float z // - ExtraCode: - includes: "#include <cmath>\n#include<tuple>" - declaration: " - VectorXYZ() : x{0}, y{0}, z{0} {}\n - VectorXYZ(double xx, double yy, double zz) : x{static_cast<float>(xx)}, y{static_cast<float>(yy)}, z{static_cast<float>(zz)} {}\n - template<class VectorPolarType> VectorXYZ(const VectorPolarType& v) : VectorXYZ(v.x(), v.y(), v.z()) {}\n - float& operator[](unsigned i) {return *(&x + i);}\n - const float& operator[](unsigned i) const {return *(&x + i);}\n - float mag() const {return std::hypot(x, y, z);}\n - float r() const {return mag();}\n - float theta() const {return acos(z/mag());}\n - float phi() const {return atan2(y,x);}\n - float eta() const {return -log(tan(0.5*theta()));}\n - operator std::tuple<float, float, float>() {return {x, y, z};}\n - float dot(const VectorXYZ& rhs) const {return x*rhs.x + y*rhs.y + z*rhs.z;}\n - VectorXYZ add(const VectorXYZ& rhs) const {return {x+rhs.x, y+rhs.y, z+rhs.z};}\n - VectorXYZ subtract(const VectorXYZ& rhs) const {return {x-rhs.x, y-rhs.y, z-rhs.z};}\n - VectorXYZ scale(double f) const {return {f*x, f*y, f*z};}\n - " - eic::VectorPolar: - Members: - - float r // [mm] or [GeV] - - float theta // [rad, 0->pi] - - float phi // [rad, -pi->pi] - ExtraCode: - includes: "#include <cmath>\n#include<tuple>" - declaration: " - VectorPolar() : r{0}, theta{0}, phi{0} {}\n - VectorPolar(double rr, double th, double ph) : r{static_cast<float>(rr)}, theta{static_cast<float>(th)}, phi{static_cast<float>(ph)} {}\n - template<class VectorXYZType> VectorPolar(const VectorXYZType& v) : VectorPolar(v.r(), v.theta(), v.phi()) {}\n - float mag() const {return r;}\n - float x() const {return r * cos(phi) * sin(theta);}\n - float y() const {return r * sin(phi) * sin(theta);}\n - float z() const {return r * cos(theta);}\n - float eta() const {return -log(tan(0.5*theta));}\n - operator std::tuple<float, float, float>() {return {r, theta, phi};}\n - " - - eic::VectorXYZT: - Members: - - double x // [mm] or [GeV] - - double y // - - double z // - - double t // [ns] or [GeV] - ExtraCode: - includes: "#include <cmath>\n#include <tuple>" - declaration: " - VectorXYZT() : x{0}, y{0}, z{0}, t{0} {}\n - VectorXYZT(double xx, double yy, double zz, double tt) : x{xx}, y{yy}, z{zz}, t{tt} {}\n - double& operator[](unsigned i) {return *(&x + i);}\n - const double& operator[](unsigned i) const {return *(&x + i);}\n - double mag() const {return std::hypot(x, y, z);}\n - double r() const {return mag();}\n - double theta() const {return acos(z/mag());}\n - double phi() const {return atan2(y,x);}\n - double eta() const {return -log(tan(0.5*theta()));} - double energy() const {return t;}\n - double mass() const {return sqrt(t*t - x*x - y*y - z*z);}\n - operator std::tuple<double, double, double, double>() {return {x, y, z, t};}\n - double dot(const VectorXYZT& rhs) const {return t*rhs.t - x*rhs.x - y*rhs.y - z*rhs.z;}\n - VectorXYZT add(const VectorXYZT& rhs) const {return {x+rhs.x, y+rhs.y, z+rhs.z, t+rhs.t};}\n - VectorXYZT subtract(const VectorXYZT& rhs) const {return {x-rhs.x, y-rhs.y, z-rhs.z, t-rhs.t};}\n - VectorXYZT scale(double f) const {return {f*x, f*y, f*z, f*t};}\n - " - - eic::CovDiagXYZ: - Members: - - float xx - - float yy - - float zz - ExtraCode: - declaration: " - CovDiagXYZ() : xx{0}, yy{0}, zz{0} {}\n - CovDiagXYZ(double x, double y, double z) : xx{static_cast<float>(x)}, yy{static_cast<float>(y)}, zz{static_cast<float>(z)} {}\n - float operator()(unsigned i, unsigned j) const {return (i == j) ? *(&xx + i) : 0.;}\n - " - - eic::CovDiagXYZT: - Members: - - double xx - - double yy - - double zz - - double tt - ExtraCode: - declaration: " - CovDiagXYZT() : xx{0}, yy{0}, zz{0}, tt{0} {}\n - CovDiagXYZT(double x, double y, double z, double t) : xx{x}, yy{y}, zz{z}, tt{t} {}\n - double operator()(unsigned i, unsigned j) const {return (i == j) ? *(&xx + i) : 0.;}\n - " - - eic::CovXYZ: - Members: - - float xx - - float yy - - float zz - - float xy - - float xz - - float yz - ExtraCode: - declaration: " - CovXYZ() : xx{0}, yy{0}, zz{0}, xy{0}, xz{0}, yz{0} {}\n - CovXYZ(double vx, double vy, double vz, double vxy, double vxz, double vyz)\n - : xx{static_cast<float>(vx)}, yy{static_cast<float>(vy)}, zz{static_cast<float>(vz)},\n - xy{static_cast<float>(vxy)}, xz{static_cast<float>(vxz)}, yz{static_cast<float>(vyz)} {}\n - float operator()(unsigned i, unsigned j) const {\n - // diagonal\n - if (i == j) {\n - return *(&xx + i);\n - }\n - // off-diagonal\n - // we have as options (0, 1), (0, 2) and (1, 2) (and mirrored)\n - // note that, starting from xy, we find the correct element at (i+j-1)\n - return *(&xy + i + j - 1);\n - }\n - " - ## ProtoCluster hit relation - eic::ProtoClusterHit: - Members: - - eic::Index ID // ID of the hit - - uint32_t index // Raw index of the hit in the relevant array - - eic::Weight weight // weight of the hit - -datatypes: - - ## ========================================================================== - ## Event info - ## ========================================================================== - - eic::EventInfo: - Description: "Event Info" - Author: "W. Armstrong, S. Joosten" - Members: - - uint64_t run // Run number. - - uint64_t number // Event number. - - int32_t type // Event type identifier (TBD). - - int32_t proc // Process identifier (TBD). - - int32_t source // Source/identifier (TBD) - - eic::Weight weight // Optional event weight (useful for MC) - - - ## ========================================================================== - ## Particle info - ## ========================================================================== - - eic::BasicParticle: - Description: "Basic particle used internally to communicate basic particle properties." - Author: "W. Armstrong, S. Joosten" - Members: - - eic::Index ID // Unique particle index - - eic::VectorXYZ p // Momentum [GeV] - - eic::VectorXYZ v // Vertex [mm] - - float time // Time in [ns] - - int32_t pid // Particle PDG code - - int16_t status // Status code - - int16_t charge // Particle charge (or sign) - - eic::Weight weight // Particle weight, e.g. from PID algorithm [0-1] - - eic::ReconstructedParticle: - Description: "EIC Reconstructed Particle" - Author: "W. Armstrong, S. Joosten" - Members: - - eic::Index ID // Unique particle index - - eic::VectorXYZ p // Momentum vector [GeV] - - eic::VectorXYZ v // Vertex [mm] - - float time // Time in [ns] - - int32_t pid // PID of reconstructed particle. - - int16_t status // Status code - - int16_t charge // Particle charge (or sign) - - eic::Weight weight // Particle weight, e.g. from PID algorithm [0-1] - - eic::Direction direction // Direction (theta/phi of this particle [mrad]) - - float momentum // particle 3-momentum magnitude [GeV] - - float energy // Particle energy, consistent with PID assigment [GeV] - - float mass // The mass of the particle in [GeV] - - eic::Index vertexID // Start vertex for this particle - - eic::Index trackID // Index of the associated track, if any - - eic::Index ecalID // Index of associated pos/barrel/neg ECAL cluster, if any - - eic::Index hcalID // Index of associated pos/barrel/neg HCAL cluster, if any - - eic::Index cherID // Index of associated pos/barrel/neg Cherenkov info, if any - - eic::Index tofID // Index of the associated TOF info, if any - - eic::Index mcID // Index of the associated MC particle, if any - - ## ========================================================================== - ## Calorimetry - ## ========================================================================== - eic::RawCalorimeterHit: - Description: "Raw (digitized) calorimeter hit" - Author: "W. Armstrong, S. Joosten" - Members: - - eic::Index ID // Unique hit ID. For MC, the value equals the Geant4 hit index. - - int64_t cellID // The detector specific (geometrical) cell id. - - int64_t amplitude // The amplitude of the hit in ADC counts. - - int64_t time // Timing in TDC - - eic::CalorimeterHit: - Description: "Calorimeter hit" - Author: "W. Armstrong, S. Joosten" - Members: - - eic::Index ID // Unique hit ID, same as one of the involved raw hits. - - int64_t cellID // The detector specific (geometrical) cell id. - - int32_t layer // Layer for this hit - - int32_t sector // Sector for this hit - - float energy // The energy for this hit in [GeV]. - - float energyError // Error on energy [GeV]. - - float time // The time of the hit in [ns]. - - eic::VectorXYZ position // The global position of the hit in world coordinates [mm]. - - eic::VectorXYZ local // The local position of the hit in detector coordinates [mm]. - - eic::VectorXYZ dimension // The dimension information of the cell [mm]. - - - ## ========================================================================== - ## Clustering - ## ========================================================================== - - eic::ProtoCluster: - Description: "Relational info linking hits to their associated cluster" - Author: "S. Joosten" - Members: - - eic::Index ID // ID of the cluster - VectorMembers: - - eic::ProtoClusterHit hits // List of hits associated with the cluster - - eic::Cluster: - Description: "EIC cluster" - Author: "W. Armstrong, S. Joosten, C.Peng" - Members: - - eic::Index ID // Unique ID for this cluster, value identical to ProtoCluster ID - - float energy // Reconstructed energy of the cluster [GeV]. - - float energyError // Error on the cluster energy [GeV] - - float time // [ns] - - uint32_t nhits // Number of hits in the cluster. - - eic::VectorXYZ position // Global position of the cluster [mm]. - - eic::CovXYZ positionError // Covariance matrix of the position (6 Parameters). - - float radius // Shower radius [mm] - - float skewness // Shower skewness [unitless] - - eic::VectorPolar polar // Cluster position polar information - - float eta // Cluster pseudorapidity - - eic::Direction direction // Intrinsic direction of the cluster propagation [rad, 0->pi, -pi->pi] - - eic::Index mcID // For MC only - associated MC particle - - eic::ClusterLayer: - Description: "2D Cluster in a single layer for a multi-layer detector" - Author: "S. Joosten, C. Peng" - Members: - - eic::Index ID // Unique layer ID - - eic::Index clusterID // Associated full 3D cluster, -1 if none - - int32_t layer // Layer number for this cluster layer - - uint32_t nhits // Number of hits - - float energy // Energy in this cluster layer [GeV] - - float energyError // Error on energy [GeV] - - float radius // Shower radius [mm] - - float skewness // Skewness of hits distribution - - eic::VectorXYZ position // Global center position. [mm] - - eic::MergedClusterRelations: - Description: "Relational info between a merged cluster and its parents" - Author: "S. Joosten" - Members: - - eic::Index clusterID // Associated cluster ID - - uint32_t size // Number of valid parents - - std::array<eic::Index, 4> parent // (Up to 4) parents for this cluster - - ## ========================================================================== - ## RICH/Cherenkov data structures - ## ========================================================================== - - eic::RawPMTHit: - Description: "EIC Raw PMT hit" - Author: "S. Joosten, C. Peng" - Members: - - eic::Index ID // Unique hit ID. For MC, the value equals the Geant4 hit index. - - int64_t cellID // The detector specific (geometrical) cell id. - - uint32_t amplitude // PMT signal amplitude [ADC] - - uint32_t time // PMT signal time [TDC] - - eic::PMTHit: - Description: "EIC PMT hit" - Author: "S. Joosten, C. Peng" - Members: - - eic::Index ID // Unique hit ID, same as one of the involved raw hits. - - int64_t cellID // The detector specific (geometrical) cell id. - - float npe // Estimated number of photo-electrons [#] - - float time // Time [ns] - - float timeError // Error on the time [ns] - - eic::VectorXYZ position // PMT hit position [mm] - - eic::VectorXYZ local // The local position of the hit in detector coordinates [mm] - - eic::VectorXYZ dimension // The dimension information of the pixel [mm]. - - eic::RingImage: - Description: "EIC Ring Image Cluster" - Author: "S. Joosten, C. Peng" - Members: - - eic::Index ID // Unique cluster ID - - float npe // Number of photo-electrons [#] - - eic::VectorXYZ position // Global position of the cluster [mm] - - eic::VectorXYZ positionError // Error on the position - - float theta // Opening angle of the ring [rad, 0->pi] - - float thetaError // Error on the opening angle - - float radius // Radius of the best fit ring [mm] - - float radiusError // Estimated error from the fit [mm] - - ## ========================================================================== - ## Tracking - ## ========================================================================== - - eic::RawTrackerHit: - Description: "Raw (digitized) tracker hit" - Author: "W. Armstrong, S. Joosten" - Members: - - eic::Index ID // Unique hit ID. For MC, the value equals the Geant4 hit index. - - int64_t cellID // The detector specific (geometrical) cell id. - - int32_t time // TDC value. - - int32_t charge // ADC value - - eic::TrackerHit: - Description: "Tracker hit (reconstructed from Raw)" - Author: "W. Armstrong, S. Joosten" - Members: - - eic::Index ID // Unique hit ID, same as one of the involved raw hits. - - int64_t cellID // The detector specific (geometrical) cell id. - - eic::VectorXYZT position // Hit (cell) position and time [mm, ns] - - eic::CovDiagXYZT covMatrix // Covariance Matrix - - float edep // Energy deposit in this hit [GeV] - - float edepError // Error on the energy deposit [GeV] - ConstExtraCode: - declaration: " - double time() const {return position().t;}\n - " - - ## Here's a stub for a prototrack setup. If this is all we use we should - ## probably just use protocluster instead, but I assume there will be other - ## members we'll need to communicate - ## eic::ProtoTrack: - ## Description: "Proto track info" - ## Author: "W. Armstrong, S. Joosten" - ## Members: - ## eic::Index ID // Unique identifier - ## eic::Index seedID // Index of corresponding initial track parameters - ## eic::Weight weight // prototrack weight, in case we share pixels [0-1] - ## VectorMembers: - ## int32_t hits // tracker hit indicies - - eic::TrackParameters: - Description: "ACTS Bound Track parameters" - Author: "W. Armstrong, S. Joosten" - Members: - - eic::Index ID // Unique track ID. - - eic::FloatPair loc // Tracking location - - eic::FloatPair locError // Error on the location - - eic::Direction direction // Track direction (theta, phi) [rad, 0-pi and -pi->pi] - - eic::Direction directionError // Error on the direction [rad] - - float qOverP // [e/GeV] - - float qOverPError // Error on qOverP - - float time // Track time [ns] - - float timeError // Error on the time - - float charge // Assumed track charge, units of [e] - - eic::Trajectory: - Description: "Trajectory" - Author: "W. Armstrong, S. Joosten" - Members: - - eic::Index ID // Unique trajectory ID, the value equals the track ID. - - eic::Index protoTrackID // Proto track index - - eic::Index parameters // Index for track parameters - - eic::VectorXYZT momentum // Postion of vertex [mm] - - float length // Track length from first to last hit[mm] - - float charge // Charge of particle trajectory - - float TOF // Time of flight from first to last hit [ns] - - - eic::Track: - Description: "Particle Track" - Author: "W. Armstrong, S. Joosten" - Members: - - eic::Index ID // Unique track ID. - - eic::Index parameters // Index for track parameters - - eic::VectorXYZT momentum // Momentum of vertex [mm] - - - ## ========================================================================== - ## Vertexing - ## ========================================================================== - - eic::Vertex: - Description: "EIC vertex" - Author: "W. Armstrong, S. Joosten" - Members: - - eic::Index ID // Unique vertex ID - - eic::VectorXYZ position // Postion of vertex [mm] - - float time // Time of vertex [ns] - - float chi2 // Chi squared of the vertex fit. - - float probability // Probability of the vertex fit - - bool primary // Whether it is the primary vertex of the event - - ## ========================================================================== - ## Kinematic reconstruction - ## ========================================================================== - - eic::ScatteringKinematics: - Description: "Kinematic variables for DIS events" - Author: "S. Joosten, W. Deconinck" - Members: - - float x // Bjorken x (Q2/2P.q) - - float Q2 // Four-momentum transfer squared [GeV^2] - - float W // Invariant mass of final state [GeV] - - float y // Inelasticity (P.q/P.k) - - float nu // Energy transfer P.q/M [GeV] - ## Spin state? - ## phi_S? - - eic::Index scatID // Associated scattered electron (if identified)