SHiP Data Model
Event data model for the SHiP experiment: C++ data classes with ROOT dictionary support.
Loading...
Searching...
No Matches
QuantityView.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "SHiP/MCParticle.hpp"
5#include "SHiP/SimHit.hpp"
7#include "SHiP/Units.hpp"
8
15namespace ship::view {
16
17// --- MCParticle -----------------------------------------------------------
18[[nodiscard]] inline Vec3<Length> vertex(SHiP::MCParticle const& p) {
19 return vecOf<Length>(p.vertex);
20}
22 return vecOf<Momentum>(p.momentum);
23}
26 return quantityOf<Energy>(p.energy);
27}
28[[nodiscard]] inline Time time(SHiP::MCParticle const& p) {
29 return quantityOf<Time>(p.time);
30}
31inline void setVertex(SHiP::MCParticle& p, Vec3<Length> const& v) {
32 p.vertex = raw(v);
33}
35 p.momentum = raw(v);
36}
37inline void setEnergy(SHiP::MCParticle& p, Energy e) { p.energy = raw(e); }
38inline void setTime(SHiP::MCParticle& p, Time t) { p.time = raw(t); }
39
40// --- SimHit ---------------------------------------------------------------
42 return vecOf<Length>(h.position);
43}
45 return vecOf<Momentum>(h.momentum);
46}
48 return quantityOf<Energy>(h.energyDeposit);
49}
50[[nodiscard]] inline Time time(SHiP::SimHit const& h) {
51 return quantityOf<Time>(h.time);
52}
54 return quantityOf<Length>(h.pathLength);
55}
56inline void setPosition(SHiP::SimHit& h, Vec3<Length> const& v) {
57 h.position = raw(v);
58}
59inline void setMomentum(SHiP::SimHit& h, Vec3<Momentum> const& v) {
60 h.momentum = raw(v);
61}
63 h.energyDeposit = raw(e);
64}
65inline void setTime(SHiP::SimHit& h, Time t) { h.time = raw(t); }
66inline void setPathLength(SHiP::SimHit& h, Length l) { h.pathLength = raw(l); }
67
68// --- SimParticle ----------------------------------------------------------
70 return vecOf<Length>(p.vertex);
71}
73 return vecOf<Length>(p.endpoint);
74}
76 return vecOf<Momentum>(p.momentum);
77}
80 return quantityOf<Energy>(p.energy);
81}
83 return quantityOf<Time>(p.time);
84}
86 p.vertex = raw(v);
87}
89 p.endpoint = raw(v);
90}
92 p.momentum = raw(v);
93}
94inline void setEnergy(SHiP::SimParticle& p, Energy e) { p.energy = raw(e); }
95inline void setTime(SHiP::SimParticle& p, Time t) { p.time = raw(t); }
96
97// --- RecParticle ----------------------------------------------------------
99 return vecOf<Length>(p.vertex);
100}
102 return vecOf<Length>(p.endpoint);
103}
105 return vecOf<Momentum>(p.momentum);
106}
109 return quantityOf<Energy>(p.energy);
110}
112 return quantityOf<Time>(p.time);
113}
116 return quantityOf<Length>(p.ipPV);
117}
119 p.vertex = raw(v);
120}
122 p.endpoint = raw(v);
123}
125 p.momentum = raw(v);
126}
127inline void setEnergy(SHiP::RecParticle& p, Energy e) { p.energy = raw(e); }
128inline void setTime(SHiP::RecParticle& p, Time t) { p.time = raw(t); }
129inline void setIpPV(SHiP::RecParticle& p, Length l) { p.ipPV = raw(l); }
130
131} // namespace ship::view
Quantity views over the persisted data classes.
Definition QuantityView.hpp:15
void setVertex(SHiP::MCParticle &p, Vec3< Length > const &v)
Definition QuantityView.hpp:31
Vec3< Length > endpoint(SHiP::SimParticle const &p)
Definition QuantityView.hpp:72
void setPosition(SHiP::SimHit &h, Vec3< Length > const &v)
Definition QuantityView.hpp:56
void setPathLength(SHiP::SimHit &h, Length l)
Definition QuantityView.hpp:66
void setEnergyDeposit(SHiP::SimHit &h, Energy e)
Definition QuantityView.hpp:62
void setTime(SHiP::MCParticle &p, Time t)
Definition QuantityView.hpp:38
void setIpPV(SHiP::RecParticle &p, Length l)
Definition QuantityView.hpp:129
Energy energy(SHiP::MCParticle const &p)
Total energy.
Definition QuantityView.hpp:25
Length ipPV(SHiP::RecParticle const &p)
Impact parameter wrt the primary vertex.
Definition QuantityView.hpp:115
Vec3< Length > vertex(SHiP::MCParticle const &p)
Definition QuantityView.hpp:18
void setEnergy(SHiP::MCParticle &p, Energy e)
Definition QuantityView.hpp:37
void setEndpoint(SHiP::SimParticle &p, Vec3< Length > const &v)
Definition QuantityView.hpp:88
Time time(SHiP::MCParticle const &p)
Definition QuantityView.hpp:28
Vec3< Momentum > momentum(SHiP::MCParticle const &p)
Definition QuantityView.hpp:21
Energy energyDeposit(SHiP::SimHit const &h)
Definition QuantityView.hpp:47
void setMomentum(SHiP::MCParticle &p, Vec3< Momentum > const &v)
Definition QuantityView.hpp:34
Length pathLength(SHiP::SimHit const &h)
Definition QuantityView.hpp:53
Vec3< Length > position(SHiP::SimHit const &h)
Definition QuantityView.hpp:41
mp_units::quantity< units::mm, double > Length
Canonical quantity types: double representation, storage unit baked in.
Definition Units.hpp:56
mp_units::quantity< units::GeV, double > Energy
Definition Units.hpp:58
std::array< Q, 3 > Vec3
Definition Units.hpp:65
constexpr Vec3< Q > vecOf(std::array< double, 3 > const &v)
Wrap a raw 3-vector, interpreting it in Q's canonical unit (bitwise).
Definition Units.hpp:81
constexpr double raw(Q q)
Unwrap a scalar quantity to a raw double in Q's canonical unit (bitwise).
Definition Units.hpp:75
mp_units::quantity< units::ns, double > Time
Definition Units.hpp:57
Monte Carlo particle — input to simulation.
Definition MCParticle.hpp:9
Reconstructed particle.
Definition RecParticle.hpp:13
Simulation hit from Geant4 sensitive detectors.
Definition SimHit.hpp:9
Tracked particle from simulation.
Definition SimParticle.hpp:9