LDMX Software
TruthTrack.h
1#pragma once
2
3#include <TObject.h>
4
5#include <vector>
6
7namespace ldmx {
8
9class TruthTrack {
10 public:
14 TruthTrack() = default;
15
16 virtual ~TruthTrack() = default;
24 // TruthTrack(const ldmx::SimParticle &particle);
25
26 void Print() const {};
27
36 // TruthTrack(const ldmx::SimParticle &particle,
37 // const ldmx::SimTrackerHit &hit) {};
38
47 // TruthTrack(const std::vector<double> &pos_vec,
48 // const std::vector<double> &p_vec, int charge){};
49
50 /*
51 Acts::Vector3 pos{pos_vec.data()};
52 Acts::Vector3 mom{p_vec.data()};
53 double time{0.};
54
55 // Rotate the position and momentum into the ACTS frame.
56 pos = tracking::sim::utils::Ldmx2Acts(pos);
57 mom = tracking::sim::utils::Ldmx2Acts(mom);
58
59 // Get the charge of the particle.
60 // TODO: Add function that uses the PDG ID to calculate this.
61 double q{charge * Acts::UnitConstants::e};
62
63 // Transform the position, momentum and charge to free parameters.
64 auto free_params{tracking::sim::utils::toFreeParameters(pos, mom, q)};
65
66 // Create a line surface at the perigee. The perigee position is extracted
67 // from a particle's vertex or the particle's position at a specific
68 // scoring plane.
69 auto gen_surface{Acts::Surface::makeShared<Acts::PerigeeSurface>(
70 Acts::Vector3(free_params[Acts::eFreePos0],
71 free_params[Acts::eFreePos1], free_params[Acts::eFreePos2]))};
72
73 // Transform the parameters to local positions on the perigee surface.
74 auto bound_params{Acts::detail::transformFreeToBoundParameters(
75 free_params, *gen_surface, gctx_)
76 .value()};
77
78 // Create the seed track object.
79 auto seed_track = ldmx::Track();
80 seed_track.setPerigeeLocation(free_params[Acts::eFreePos0],
81 free_params[Acts::eFreePos1],
82 free_params[Acts::eFreePos2]);
83
84
85 seed_track.setPerigeeParameters(
86 tracking::sim::utils::convertActsToLdmxPars(bound_params));
87
88
89 };
90 */
91
92 void setTrackID(int trackid) { trackID_ = trackid; };
93 int getTrackID() const { return trackID_; };
94
95 void setPdgID(int pdgID) { pdgID_ = pdgID; };
96 int getPdgID() const { return pdgID_; };
97
98 void setNhits(int nHits) { nHits_ = nHits; };
99 int getNhits() const { return nHits_; }
100
101 // in units of e
102 int q() const { return perigee_pars_[4] > 0 ? 1 : -1; }
103
104 // Vector representation
105 void setPerigeeParameters(const std::vector<double>& par) {
106 perigee_pars_ = par;
107 }
108 std::vector<double> getPerigeeParameters() const { return perigee_pars_; }
109
110 void setPerigeeLocation(const std::vector<double>& perigee) {
111 perigee_ = perigee;
112 }
113
114 void setPerigeeLocation(const double& x, const double& y, const double& z) {
115 perigee_[0] = x;
116 perigee_[1] = y;
117 perigee_[2] = z;
118 }
119
120 void setMomentum(const double& px, const double& py, const double& pz) {
121 momentum_[0] = px;
122 momentum_[1] = py;
123 momentum_[2] = pz;
124 }
125
126 void setPosition(const double& x, const double& y, const double& z) {
127 position_[0] = x;
128 position_[1] = y;
129 position_[2] = z;
130 }
131
132 std::vector<double> getPerigeeLocation() const { return perigee_; };
133 double getPerigeeX() const { return perigee_[0]; };
134 double getPerigeeY() const { return perigee_[1]; };
135 double getPerigeeZ() const { return perigee_[2]; };
136
137 std::vector<double> getMomentum() const { return momentum_; };
138 std::vector<double> getPosition() const { return position_; };
139
140 // getters -- TODO use an enum instead
141
142 double getD0() const { return perigee_pars_[0]; };
143 double getZ0() const { return perigee_pars_[1]; };
144 double getPhi() const { return perigee_pars_[2]; };
145 double getTheta() const { return perigee_pars_[3]; };
146 double getQoP() const { return perigee_pars_[4]; };
147 double getT() const { return perigee_pars_[5]; };
148
149 friend std::ostream& operator<<(std::ostream& output, const TruthTrack& trk);
150
151 private:
152 // 6 elements
153 // d0 / z0 / phi / theta / qop / t
154 std::vector<double> perigee_pars_{0., 0., 0., 0., 0., 0.};
155
156 // The perigee location
157 std::vector<double> perigee_{0., 0., 0.};
158
159 // The 3-momentum at the perigee
160 std::vector<double> momentum_{0., 0., 0.};
161
162 // The 3-position at the perigee
163 std::vector<double> position_{0., 0., 0.};
164
165 // N hits
166 int nHits_{0};
167
168 // ID of the matched particle in the SimParticles map
169 int trackID_{-1};
170
171 // pdgID
172 int pdgID_{0};
173
176
177}; // TruthTrack
178
179} // namespace ldmx
void setTrackID(int trackid)
Use the scoring plane hit at the target to extract (x, y, z, px, py, pz) and create a track seed.
Definition TruthTrack.h:92
ClassDef(TruthTrack, 2)
Class declaration needed by the ROOT dictionary.
void Print() const
Use the vertex position of the SimParticle to extract (x, y, z, px, py, pz, q) and create a track see...
Definition TruthTrack.h:26
TruthTrack()=default
default constructor