Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Hit.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file Hit.h
1 #ifndef HIT_H
2 #define HIT_H
3 
4 #include <cmath>
5 #include <iostream>
6 #include <stdio.h>
7 
8 #include <TObject.h>
9 #include <TRandom3.h>
10 #include <TVector3.h>
11 
12 using namespace std;
13 
14 class Hit : public TObject
15 {
16  public:
17  Hit();
18  Hit(float, float, float, float, float, float, int);
19  Hit(float, float, float, float, float, float, int, int);
20  Hit(float, float); // simple construct
21  ~Hit();
22 
23  float posX();
24  float posY();
25  float posZ();
26  float rho();
27  float vtxX();
28  float vtxY();
29  float vtxZ();
30  float Eta();
31  float Phi();
32  float R();
33  int Layer();
34  int PhiSize() { return _phisize; }
35  pair<float, float> Edge();
36 
37  void Update();
38  void SetPos(float, float, float);
39  void SetVtx(float, float, float);
40  void SetEdge(float, float);
41  void SetMatchedTkl();
42  bool IsMatchedTkl();
43  void Print();
44 
45  TVector3 VecPos();
46  TVector3 VecVtx();
47  TVector3 VecRel();
48 
49  private:
50  float _x;
51  float _y;
52  float _z;
53  float _vtxX;
54  float _vtxY;
55  float _vtxZ;
56  float _eta;
57  float _phi;
58  float _R;
59  int _layer;
60  int _phisize;
61  pair<float, float> _edge;
63  TVector3 vechit;
64  TVector3 vecvtx;
65  TVector3 vecrel;
66 };
67 
69 {
70  vechit.SetXYZ(0, 0, 0);
71  vecvtx.SetXYZ(0, 0, 0);
72  _layer = -999;
73  vecrel = vechit - vecvtx;
74  _eta = vecrel.Eta();
75  _phi = vecrel.Phi();
76  _R = vecrel.Mag();
77  _matched_tkl = false;
78 }
79 
80 Hit::Hit(float x, float y, float z, float vtxX, float vtxY, float vtxZ, int layer)
81 {
82  vechit.SetXYZ(x, y, z);
83  vecvtx.SetXYZ(vtxX, vtxY, vtxZ);
84  _layer = layer;
85  vecrel = vechit - vecvtx;
86  _eta = vecrel.Eta();
87  _phi = vecrel.Phi();
88  _R = vecrel.Mag();
89  _matched_tkl = false;
90 }
91 
92 Hit::Hit(float x, float y, float z, float vtxX, float vtxY, float vtxZ, int layer, int phisize)
93 {
94  vechit.SetXYZ(x, y, z);
95  vecvtx.SetXYZ(vtxX, vtxY, vtxZ);
96  _layer = layer;
97  _phisize = phisize;
98  vecrel = vechit - vecvtx;
99  _eta = vecrel.Eta();
100  _phi = vecrel.Phi();
101  _R = vecrel.Mag();
102  _matched_tkl = false;
103 }
104 
105 Hit::Hit(float eta, float phi)
106 {
107  _eta = eta;
108  _phi = phi;
109  _matched_tkl = false;
110 }
111 
113 
114 float Hit::posX() { return (vechit.X()); }
115 
116 float Hit::posY() { return (vechit.Y()); }
117 
118 float Hit::posZ() { return (vechit.Z()); }
119 
120 float Hit::rho() { return (sqrt(vechit.X() * vechit.X() + vechit.Y() * vechit.Y())); }
121 
122 float Hit::vtxX() { return (vecvtx.X()); }
123 
124 float Hit::vtxY() { return (vecvtx.Y()); }
125 
126 float Hit::vtxZ() { return (vecvtx.Z()); }
127 
128 float Hit::Eta() { return (_eta); } // with respect to the vertex that it associates to
129 
130 float Hit::Phi() { return (_phi); } // with respect to the vertex that it associates to
131 
132 float Hit::R() { return (_R); } // with respect to the vertex that it associates to
133 
134 int Hit::Layer() { return (_layer); }
135 
136 pair<float, float> Hit::Edge() { return (_edge); }
137 
138 void Hit::SetPos(float x, float y, float z) { vechit.SetXYZ(x, y, z); }
139 
140 void Hit::SetVtx(float vtxX, float vtxY, float vtxZ) { vecvtx.SetXYZ(vtxX, vtxY, vtxZ); }
141 
142 void Hit::SetEdge(float edge1, float edge2) { _edge = make_pair(edge1, edge2); }
143 
145 {
146  vecrel = vechit - vecvtx;
147  _eta = vecrel.Eta();
148  _phi = vecrel.Phi();
149  _R = vecrel.Mag();
150 }
151 
152 void Hit::SetMatchedTkl() { _matched_tkl = true; }
153 
154 bool Hit::IsMatchedTkl() { return _matched_tkl; }
155 
156 TVector3 Hit::VecPos() { return (vechit); }
157 
158 TVector3 Hit::VecVtx() { return (vecvtx); }
159 
160 TVector3 Hit::VecRel() { return (vecrel); }
161 
162 void Hit::Print() { printf("[Hit::Print()] (posX, posY, posZ) = (%f, %f, %f), (vtxX, vtxY, vtxZ) = (%f, %f, %f), (eta, phi) = (%f, %f) \n", vechit.X(), vechit.Y(), vechit.Z(), vecvtx.X(), vecvtx.Y(), vecvtx.Z(), vecrel.Eta(), vecrel.Phi()); }
163 
164 void UpdateHits(vector<Hit *> &Hits, vector<float> PV)
165 {
166  for (auto &hit : Hits)
167  {
168  hit->SetVtx(PV[0], PV[1], PV[2]);
169  hit->Update();
170  }
171 }
172 
173 Hit *RandomHit(float etaMin, float etaMax, float phiMin, float phiMax)
174 {
175  float eta = etaMin + (etaMax - etaMin) * gRandom->Rndm();
176  float phi = phiMin + (phiMax - phiMin) * gRandom->Rndm();
177  Hit *randhit = new Hit(eta, phi);
178  randhit->SetPos(-999., -999., -999.);
179  randhit->SetVtx(0., 0., 0.);
180  return randhit;
181 }
182 
183 // For mis-alignment
184 
185 #endif