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 vec_of<Length>(p.vertex);
20}
21[[nodiscard]] inline Vec3<Momentum> momentum(SHiP::MCParticle const& p) {
22 return vec_of<Momentum>(p.momentum);
23}
25[[nodiscard]] inline Energy energy(SHiP::MCParticle const& p) {
26 return quantity_of<Energy>(p.energy);
27}
28[[nodiscard]] inline Time time(SHiP::MCParticle const& p) {
29 return quantity_of<Time>(p.time);
30}
31inline void set_vertex(SHiP::MCParticle& p, Vec3<Length> const& v) {
32 p.vertex = raw(v);
33}
34inline void set_momentum(SHiP::MCParticle& p, Vec3<Momentum> const& v) {
35 p.momentum = raw(v);
36}
37inline void set_energy(SHiP::MCParticle& p, Energy e) { p.energy = raw(e); }
38inline void set_time(SHiP::MCParticle& p, Time t) { p.time = raw(t); }
39
40// --- SimHit ---------------------------------------------------------------
41[[nodiscard]] inline Vec3<Length> position(SHiP::SimHit const& h) {
42 return vec_of<Length>(h.position);
43}
44[[nodiscard]] inline Vec3<Momentum> momentum(SHiP::SimHit const& h) {
45 return vec_of<Momentum>(h.momentum);
46}
47[[nodiscard]] inline Energy energy_deposit(SHiP::SimHit const& h) {
48 return quantity_of<Energy>(h.energy_deposit);
49}
50[[nodiscard]] inline Time time(SHiP::SimHit const& h) {
51 return quantity_of<Time>(h.time);
52}
53[[nodiscard]] inline Length path_length(SHiP::SimHit const& h) {
54 return quantity_of<Length>(h.path_length);
55}
56inline void set_position(SHiP::SimHit& h, Vec3<Length> const& v) {
57 h.position = raw(v);
58}
59inline void set_momentum(SHiP::SimHit& h, Vec3<Momentum> const& v) {
60 h.momentum = raw(v);
61}
63 h.energy_deposit = raw(e);
64}
65inline void set_time(SHiP::SimHit& h, Time t) { h.time = raw(t); }
67 h.path_length = raw(l);
68}
69
70// --- SimParticle ----------------------------------------------------------
71[[nodiscard]] inline Vec3<Length> vertex(SHiP::SimParticle const& p) {
72 return vec_of<Length>(p.vertex);
73}
74[[nodiscard]] inline Vec3<Length> endpoint(SHiP::SimParticle const& p) {
75 return vec_of<Length>(p.endpoint);
76}
77[[nodiscard]] inline Vec3<Momentum> momentum(SHiP::SimParticle const& p) {
78 return vec_of<Momentum>(p.momentum);
79}
81[[nodiscard]] inline Energy energy(SHiP::SimParticle const& p) {
82 return quantity_of<Energy>(p.energy);
83}
84[[nodiscard]] inline Time time(SHiP::SimParticle const& p) {
85 return quantity_of<Time>(p.time);
86}
87inline void set_vertex(SHiP::SimParticle& p, Vec3<Length> const& v) {
88 p.vertex = raw(v);
89}
90inline void set_endpoint(SHiP::SimParticle& p, Vec3<Length> const& v) {
91 p.endpoint = raw(v);
92}
94 p.momentum = raw(v);
95}
96inline void set_energy(SHiP::SimParticle& p, Energy e) { p.energy = raw(e); }
97inline void set_time(SHiP::SimParticle& p, Time t) { p.time = raw(t); }
98
99// --- RecParticle ----------------------------------------------------------
100[[nodiscard]] inline Vec3<Length> vertex(SHiP::RecParticle const& p) {
101 return vec_of<Length>(p.vertex);
102}
103[[nodiscard]] inline Vec3<Length> endpoint(SHiP::RecParticle const& p) {
104 return vec_of<Length>(p.endpoint);
105}
106[[nodiscard]] inline Vec3<Momentum> momentum(SHiP::RecParticle const& p) {
107 return vec_of<Momentum>(p.momentum);
108}
110[[nodiscard]] inline Energy energy(SHiP::RecParticle const& p) {
111 return quantity_of<Energy>(p.energy);
112}
113[[nodiscard]] inline Time time(SHiP::RecParticle const& p) {
114 return quantity_of<Time>(p.time);
115}
117[[nodiscard]] inline Length ip_pv(SHiP::RecParticle const& p) {
118 return quantity_of<Length>(p.ip_pv);
119}
120inline void set_vertex(SHiP::RecParticle& p, Vec3<Length> const& v) {
121 p.vertex = raw(v);
122}
123inline void set_endpoint(SHiP::RecParticle& p, Vec3<Length> const& v) {
124 p.endpoint = raw(v);
125}
127 p.momentum = raw(v);
128}
129inline void set_energy(SHiP::RecParticle& p, Energy e) { p.energy = raw(e); }
130inline void set_time(SHiP::RecParticle& p, Time t) { p.time = raw(t); }
131inline void set_ip_pv(SHiP::RecParticle& p, Length l) { p.ip_pv = raw(l); }
132
133} // namespace SHiP::view
Quantity views over the persisted data classes.
Definition QuantityView.hpp:15
void set_momentum(SHiP::MCParticle &p, Vec3< Momentum > const &v)
Definition QuantityView.hpp:34
Vec3< Length > endpoint(SHiP::SimParticle const &p)
Definition QuantityView.hpp:74
void set_position(SHiP::SimHit &h, Vec3< Length > const &v)
Definition QuantityView.hpp:56
void set_energy_deposit(SHiP::SimHit &h, Energy e)
Definition QuantityView.hpp:62
Length path_length(SHiP::SimHit const &h)
Definition QuantityView.hpp:53
void set_ip_pv(SHiP::RecParticle &p, Length l)
Definition QuantityView.hpp:131
void set_energy(SHiP::MCParticle &p, Energy e)
Definition QuantityView.hpp:37
Energy energy_deposit(SHiP::SimHit const &h)
Definition QuantityView.hpp:47
void set_endpoint(SHiP::SimParticle &p, Vec3< Length > const &v)
Definition QuantityView.hpp:90
Energy energy(SHiP::MCParticle const &p)
Total energy.
Definition QuantityView.hpp:25
Time time(SHiP::MCParticle const &p)
Definition QuantityView.hpp:28
void set_vertex(SHiP::MCParticle &p, Vec3< Length > const &v)
Definition QuantityView.hpp:31
Vec3< Length > position(SHiP::SimHit const &h)
Definition QuantityView.hpp:41
Vec3< Momentum > momentum(SHiP::MCParticle const &p)
Definition QuantityView.hpp:21
Vec3< Length > vertex(SHiP::MCParticle const &p)
Definition QuantityView.hpp:18
void set_path_length(SHiP::SimHit &h, Length l)
Definition QuantityView.hpp:66
Length ip_pv(SHiP::RecParticle const &p)
Impact parameter wrt the primary vertex.
Definition QuantityView.hpp:117
void set_time(SHiP::MCParticle &p, Time t)
Definition QuantityView.hpp:38
std::array< Q, 3 > Vec3
Definition Units.hpp:65
mp_units::quantity< units::ns, double > Time
Definition Units.hpp:57
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::GeV, double > Energy
Definition Units.hpp:58
mp_units::quantity< units::mm, double > Length
Canonical quantity types: double representation, storage unit baked in.
Definition Units.hpp:56
Monte Carlo particle — input to simulation.
Definition MCParticle.hpp:48
std::array< double, 3 > vertex
Production vertex [mm].
Definition MCParticle.hpp:50
double time
Production time [ns].
Definition MCParticle.hpp:53
std::array< double, 3 > momentum
Momentum (px, py, pz) [GeV/c].
Definition MCParticle.hpp:51
double energy
Total energy [GeV].
Definition MCParticle.hpp:52
Reconstructed particle.
Definition RecParticle.hpp:13
double energy
Initial kinetic energy [GeV].
Definition RecParticle.hpp:21
std::array< double, 3 > vertex
Production vertex [mm].
Definition RecParticle.hpp:17
double ip_pv
IP wrt to the PV (at 0,0,0) [mm].
Definition RecParticle.hpp:24
double time
Production time [ns].
Definition RecParticle.hpp:22
std::array< double, 3 > endpoint
End point [mm].
Definition RecParticle.hpp:18
std::array< double, 3 > momentum
Initial momentum [GeV/c].
Definition RecParticle.hpp:19
Simulation hit from Geant4 sensitive detectors.
Definition SimHit.hpp:9
double energy_deposit
Energy deposited [GeV].
Definition SimHit.hpp:16
std::array< double, 3 > momentum
Momentum at hit [GeV/c].
Definition SimHit.hpp:15
std::array< double, 3 > position
Hit position [mm].
Definition SimHit.hpp:14
double time
Global time [ns].
Definition SimHit.hpp:17
double path_length
Step length [mm].
Definition SimHit.hpp:18
Tracked particle from simulation.
Definition SimParticle.hpp:9
double energy
Initial kinetic energy [GeV].
Definition SimParticle.hpp:16
std::array< double, 3 > momentum
Initial momentum [GeV/c].
Definition SimParticle.hpp:15
std::array< double, 3 > endpoint
End point [mm].
Definition SimParticle.hpp:14
std::array< double, 3 > vertex
Production vertex [mm].
Definition SimParticle.hpp:13
double time
Production time [ns].
Definition SimParticle.hpp:17