BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
CbmMCTrack.cxx
Go to the documentation of this file.
1// -------------------------------------------------------------------------
2// ----- CbmMCTrack source file -----
3// ----- should be replaced by BmnMCTrack -----
4// -------------------------------------------------------------------------
5#include "CbmMCTrack.h"
6
7#include "FairLogger.h"
8#include "TParticle.h"
9#ifndef ROOT_TParticlePDG
10#include "TParticlePDG.h"
11#endif
12#ifndef ROOT_TDatabasePDG
13#include "TDatabasePDG.h"
14#endif
15
16// ----- Default constructor -------------------------------------------
18 : TObject()
19 , fPdgCode(0)
20 , fMotherId(-1)
21 , fPx(0.)
22 , fPy(0.)
23 , fPz(0.)
24 , fStartX(0.)
25 , fStartY(0.)
26 , fStartZ(0.)
27 , fStartT(0.)
28 , fNPoints(0)
29{
30 fPolar[0] = fPolar[1] = fPolar[2] = 0.0; // AZ-310822
31}
32
33// ----- Standard constructor ------------------------------------------
35 Int_t motherId,
36 Double_t px,
37 Double_t py,
38 Double_t pz,
39 Double_t x,
40 Double_t y,
41 Double_t z,
42 Double_t t,
43 Long64_t nPoints = 0)
44 : TObject()
45 , fPdgCode(pdgCode)
46 , fMotherId(motherId)
47 , fPx(px)
48 , fPy(py)
49 , fPz(pz)
50 , fStartX(x)
51 , fStartY(y)
52 , fStartZ(z)
53 , fStartT(t)
54 , fNPoints(0)
55{
56 if (nPoints >= 0)
57 fNPoints = nPoints;
58 // else fNPoints = 0;
59 fPolar[0] = fPolar[1] = fPolar[2] = 0.0; // AZ-310822
60}
61
62// ----- Copy constructor ----------------------------------------------
64 : TObject(track)
65 , fPdgCode(track.fPdgCode)
66 , fMotherId(track.fMotherId)
67 , fPx(track.fPx)
68 , fPy(track.fPy)
69 , fPz(track.fPz)
70 , fStartX(track.fStartX)
71 , fStartY(track.fStartY)
72 , fStartZ(track.fStartZ)
73 , fStartT(track.fStartT)
74 , fNPoints(track.fNPoints)
75{
76 // *this = track;
77 for (Int_t i = 0; i < 3; ++i)
78 fPolar[i] = track.fPolar[i]; // AZ-310822
79}
80
81// ----- Constructor from TParticle ------------------------------------
83 : TObject()
84 , fPdgCode(part->GetPdgCode())
85 , fMotherId(part->GetMother(0))
86 , fPx(part->Px())
87 , fPy(part->Py())
88 , fPz(part->Pz())
89 , fStartX(part->Vx())
90 , fStartY(part->Vy())
91 , fStartZ(part->Vz())
92 , fStartT(part->T() * 1e09)
93 , fNPoints(0)
94{
95 // carry over the status bits set at the generation stage: TObject keeps the bits 0-13 of fBits for itself and
96 // leaves 14-23 to the user, so a generator can mark its particles and the mark reaches the reconstructed data
97 // (BmnParticleEqualizer1D/2D mark this way the particles they add to equalize the particle numbers)
98 SetBit(part->TestBits(0x00FFC000));
99
100 // AZ-310822
101 TVector3 polar3;
102 part->GetPolarisation(polar3);
103 for (Int_t i = 0; i < 3; ++i)
104 fPolar[i] = polar3[i];
105}
106
107// ----- Destructor ----------------------------------------------------
109
110// ----- Public method Print -------------------------------------------
111void CbmMCTrack::Print(Int_t trackId) const
112{
113 LOG(debug) << "Track " << trackId << ", mother : " << fMotherId << ", Type " << fPdgCode << ", momentum (" << fPx
114 << ", " << fPy << ", " << fPz << ") GeV";
115
116 LOG(debug) << " Ref " << GetNPoints(kREF) << ", BD " << GetNPoints(kBD) << ", GEM " << GetNPoints(kGEM)
117 << ", TOF1 " << GetNPoints(kTOF1) << ", DCH " << GetNPoints(kDCH) << ", TOF2 " << GetNPoints(kTOF)
118 << ", ZDC " << GetNPoints(kZDC) << ", FHCAL " << GetNPoints(kFHCAL) << ", NDET " << GetNPoints(kNDET)
119 << ", VSP " << GetNPoints(kVSP) << ", MWPC " << GetNPoints(kMWPC) << ", ECAL " << GetNPoints(kECAL)
120 << ", CSC " << GetNPoints(kCSC) << ", SI " << GetNPoints(kSILICON) << ", FD " << GetNPoints(kFD)
121 << ", ARMs " << GetNPoints(kARMTRIG) << ", BC " << GetNPoints(kBC) << ", SCWALL " << GetNPoints(kSCWALL)
122 << ", HODO " << GetNPoints(kHODO) << ", SiMD " << GetNPoints(kSiMD) << ", SiBT " << GetNPoints(kSiBT)
123 << ", SiProf " << GetNPoints(kSiProf) << ", VACWALL " << GetNPoints(kVACWALL);
124}
125
126// ----- Public method GetMass -----------------------------------------
128{
131 if (particle)
132 return particle->Mass();
133 else
134 return 0.;
135 }
136
137 return 0.;
138}
139
140// ----- Public method GetRapidity -------------------------------------
142{
143 Double_t e = GetEnergy();
144 Double_t y = 0.5 * TMath::Log((e + fPz) / (e - fPz));
145
146 return y;
147}
148
149// ----- Public method GetNPoints --------------------------------------
150// TODO: check bitfields & where it is used / filled. Seems not used
152{
153 if (detId == kREF)
154 return (fNPoints & (Long64_t)1);
155 else if (detId == kBD)
156 return ((fNPoints & ((Long64_t)1 << 1)) >> 1);
157 else if (detId == kGEM)
158 return ((fNPoints & ((Long64_t)7 << 2)) >> 2);
159 else if (detId == kTOF1)
160 return ((fNPoints & ((Long64_t)3 << 5)) >> 5);
161 else if (detId == kDCH)
162 return ((fNPoints & ((Long64_t)31 << 7)) >> 7);
163 else if (detId == kTOF || detId == kTOF701)
164 return ((fNPoints & ((Long64_t)3 << 12)) >> 12);
165 else if (detId == kZDC)
166 return ((fNPoints & ((Long64_t)127 << 14)) >> 14);
167 else if (detId == kVSP)
168 return ((fNPoints & ((Long64_t)7 << 21)) >> 21);
169 else if (detId == kMWPC)
170 return ((fNPoints & ((Long64_t)31 << 24)) >> 24);
171 else if (detId == kECAL)
172 return ((fNPoints & ((Long64_t)127 << 29)) >> 29);
173 else if (detId == kCSC)
174 return ((fNPoints & ((Long64_t)7 << 36)) >> 36);
175 else if (detId == kSILICON)
176 return ((fNPoints & ((Long64_t)7 << 39)) >> 39);
177 else if (detId == kFD)
178 return ((fNPoints & ((Long64_t)1 << 48)) >> 48);
179 else if (detId == kARMTRIG)
180 return ((fNPoints & ((Long64_t)3 << 49)) >> 49);
181 else if (detId == kBC)
182 return ((fNPoints & ((Long64_t)1 << 51)) >> 51);
183 else if (detId == kSCWALL)
184 return ((fNPoints & ((Long64_t)1 << 52)) >> 52);
185 else if (detId == kHODO)
186 return ((fNPoints & ((Long64_t)1 << 53)) >> 53);
187 else if (detId == kSiMD)
188 return ((fNPoints & ((Long64_t)1 << 54)) >> 54);
189 else if (detId == kSiBT)
190 return ((fNPoints & ((Long64_t)3 << 55)) >> 55);
191 else if (detId == kFHCAL)
192 return ((fNPoints & ((Long64_t)1 << 57)) >> 57);
193 else if (detId == kNDET)
194 return ((fNPoints & ((Long64_t)1 << 58)) >> 58);
195 else if (detId == kSiProf)
196 return ((fNPoints & ((Long64_t)3 << 59)) >> 59);
197 else if (detId == kSSD)
198 return ((fNPoints & ((Long64_t)1 << 60)) >> 60);
199 else if (detId == kVACWALL)
200 return ((fNPoints & ((Long64_t)1 << 61)) >> 61);
201 else if (detId == kMSC)
202 return 0;
203 else {
204 LOG(error) << "GetNPoints: Unknown detector ID " << detId;
205 return 0;
206 }
207}
208
209// ----- Public method SetNPoints --------------------------------------
211{
212 if (iDet == kREF) {
213 if (nPoints < 0)
214 nPoints = 0;
215 else if (nPoints > 1)
216 nPoints = 1;
217 fNPoints = (fNPoints & (~(Long64_t)1)) | nPoints;
218 }
219
220 else if (iDet == kBD)
221 {
222 if (nPoints < 0)
223 nPoints = 0;
224 else if (nPoints > 1)
225 nPoints = 1;
226 fNPoints = (fNPoints & (~((Long64_t)1 << 1))) | (nPoints << 1);
227 }
228
229 else if (iDet == kGEM)
230 {
231 if (nPoints < 0)
232 nPoints = 0;
233 else if (nPoints > 7)
234 nPoints = 7;
235 fNPoints = (fNPoints & (~((Long64_t)7 << 2))) | (nPoints << 2);
236 }
237
238 else if (iDet == kTOF1)
239 {
240 if (nPoints < 0)
241 nPoints = 0;
242 else if (nPoints > 3)
243 nPoints = 3;
244 fNPoints = (fNPoints & (~((Long64_t)3 << 5))) | (nPoints << 5);
245 }
246
247 else if (iDet == kDCH)
248 {
249 if (nPoints < 0)
250 nPoints = 0;
251 else if (nPoints > 31)
252 nPoints = 31;
253 fNPoints = (fNPoints & (~((Long64_t)31 << 7))) | (nPoints << 7);
254 }
255
256 else if (iDet == kTOF || iDet == kTOF701)
257 {
258 if (nPoints < 0)
259 nPoints = 0;
260 else if (nPoints > 3)
261 nPoints = 3;
262 fNPoints = (fNPoints & (~((Long64_t)3 << 12))) | (nPoints << 12);
263 }
264
265 else if (iDet == kZDC)
266 {
267 if (nPoints < 0)
268 nPoints = 0;
269 else if (nPoints > 127)
270 nPoints = 127;
271 fNPoints = (fNPoints & (~((Long64_t)127 << 14))) | (nPoints << 14);
272 }
273
274 else if (iDet == kVSP)
275 {
276 if (nPoints < 0)
277 nPoints = 0;
278 else if (nPoints > 7)
279 nPoints = 7;
280 fNPoints = (fNPoints & (~((Long64_t)7 << 21))) | (nPoints << 21);
281 }
282
283 else if (iDet == kMWPC)
284 {
285 if (nPoints < 0)
286 nPoints = 0;
287 else if (nPoints > 31)
288 nPoints = 31;
289 fNPoints = (fNPoints & (~((Long64_t)31 << 24))) | (nPoints << 24);
290 }
291
292 else if (iDet == kECAL)
293 {
294 if (nPoints < 0)
295 nPoints = 0;
296 else if (nPoints > 127)
297 nPoints = 127;
298 fNPoints = (fNPoints & (~((Long64_t)127 << 29))) | (nPoints << 29);
299 }
300
301 else if (iDet == kCSC)
302 {
303 if (nPoints < 0)
304 nPoints = 0;
305 else if (nPoints > 7)
306 nPoints = 7;
307 fNPoints = (fNPoints & (~((Long64_t)7 << 36))) | (nPoints << 36);
308 }
309
310 else if (iDet == kSILICON)
311 {
312 if (nPoints < 0)
313 nPoints = 0;
314 else if (nPoints > 7)
315 nPoints = 7;
316 fNPoints = (fNPoints & (~((Long64_t)7 << 39))) | (nPoints << 39);
317 }
318
319 else if (iDet == kFD)
320 {
321 if (nPoints < 0)
322 nPoints = 0;
323 else if (nPoints > 1)
324 nPoints = 1;
325 fNPoints = (fNPoints & (~((Long64_t)1 << 48))) | (nPoints << 48);
326 }
327
328 else if (iDet == kARMTRIG)
329 {
330 if (nPoints < 0)
331 nPoints = 0;
332 else if (nPoints > 3)
333 nPoints = 3;
334 fNPoints = (fNPoints & (~((Long64_t)3 << 49))) | (nPoints << 49);
335 }
336
337 else if (iDet == kBC)
338 {
339 if (nPoints < 0)
340 nPoints = 0;
341 else if (nPoints > 1)
342 nPoints = 1;
343 fNPoints = (fNPoints & (~((Long64_t)1 << 51))) | (nPoints << 51);
344 }
345
346 else if (iDet == kSCWALL)
347 {
348 if (nPoints < 0)
349 nPoints = 0;
350 else if (nPoints > 1)
351 nPoints = 1;
352 fNPoints = (fNPoints & (~((Long64_t)1 << 52))) | (nPoints << 52);
353 }
354
355 else if (iDet == kHODO)
356 {
357 if (nPoints < 0)
358 nPoints = 0;
359 else if (nPoints > 1)
360 nPoints = 1;
361 fNPoints = (fNPoints & (~((Long64_t)1 << 53))) | (nPoints << 53);
362 }
363
364 else if (iDet == kSiMD)
365 {
366 if (nPoints < 0)
367 nPoints = 0;
368 else if (nPoints > 1)
369 nPoints = 1;
370 fNPoints = (fNPoints & (~((Long64_t)1 << 54))) | (nPoints << 54);
371 }
372
373 else if (iDet == kSiBT)
374 {
375 if (nPoints < 0)
376 nPoints = 0;
377 else if (nPoints > 1)
378 nPoints = 3;
379 fNPoints = (fNPoints & (~((Long64_t)3 << 55))) | (nPoints << 55);
380 }
381
382 else if (iDet == kFHCAL)
383 {
384 if (nPoints < 0)
385 nPoints = 0;
386 else if (nPoints > 1)
387 nPoints = 1;
388 fNPoints = (fNPoints & (~((Long64_t)1 << 57))) | (nPoints << 57);
389 }
390
391 else if (iDet == kNDET || iDet == kHGND)
392 {
393 if (nPoints < 0)
394 nPoints = 0;
395 else if (nPoints > 1)
396 nPoints = 1;
397 fNPoints = (fNPoints & (~((Long64_t)1 << 58))) | (nPoints << 58);
398 }
399
400 else if (iDet == kSiProf)
401 {
402 if (nPoints < 0)
403 nPoints = 0;
404 else if (nPoints > 1)
405 nPoints = 3;
406 fNPoints = (fNPoints & (~((Long64_t)3 << 59))) | (nPoints << 59);
407 }
408
409 else if (iDet == kSSD)
410 {
411 if (nPoints < 0)
412 nPoints = 0;
413 else if (nPoints > 1)
414 nPoints = 1;
415 fNPoints = (fNPoints & (~((Long64_t)1 << 60))) | (nPoints << 60);
416 }
417
418 else if (iDet == kVACWALL)
419 {
420 if (nPoints < 0)
421 nPoints = 0;
422 else if (nPoints > 1)
423 nPoints = 1;
424 fNPoints = (fNPoints & (~((Long64_t)1 << 61))) | (nPoints << 61);
425 }
426
427 else if (iDet == kMSC)
428 {
429 ; // skip
430 }
431
432 else
433 LOG(error) << "Unknown detector ID " << iDet;
434}
int i
Definition P4_F32vec4.h:22
int Int_t
double Double_t
long long Long64_t
DetectorId
BM@N DetectorID enumerator.
@ kBC
@ kSILICON
@ kBD
@ kNDET
@ kGEM
@ kTOF
@ kSiProf
@ kVSP
@ kREF
@ kSSD
@ kHGND
@ kTOF1
@ kFHCAL
@ kSCWALL
@ kCSC
@ kMSC
@ kFD
@ kVACWALL
@ kMWPC
@ kTOF701
@ kDCH
@ kSiMD
@ kECAL
@ kSiBT
@ kZDC
@ kARMTRIG
@ kHODO
CbmMCTrack()
Default constructor.
Double_t GetMass() const
Double32_t fPolar[3]
Definition CbmMCTrack.h:126
Double_t GetEnergy() const
Definition CbmMCTrack.h:133
Long64_t fNPoints
Bitvector representing the number of MCPoints for this track in each subdetector.
Definition CbmMCTrack.h:125
Long64_t GetNPoints(DetectorId detId) const
Accessors to the number of MCPoints in the detectors.
Double32_t fPx
Momentum components at start vertex [GeV].
Definition CbmMCTrack.h:92
Double32_t fPy
Definition CbmMCTrack.h:92
Double32_t fStartZ
Definition CbmMCTrack.h:95
Double32_t fStartT
Definition CbmMCTrack.h:95
Double_t GetRapidity() const
Int_t fMotherId
Index of mother track.
Definition CbmMCTrack.h:89
virtual ~CbmMCTrack()
Destructor.
Double32_t fStartY
Definition CbmMCTrack.h:95
Int_t fPdgCode
PDG particle code.
Definition CbmMCTrack.h:86
void SetNPoints(Int_t iDet, Long64_t np)
Double32_t fPz
Definition CbmMCTrack.h:92
Double32_t fStartX
Coordinates of start vertex [cm, ns].
Definition CbmMCTrack.h:95
void Print(Int_t iTrack=0) const
Output to screen.
Int_t GetPdgCode() const
Accessors.
Definition CbmMCTrack.h:56
static TDatabasePDG * Instance()
TParticlePDG * GetParticle(const char *name) const
void SetBit(UInt_t f)
Int_t TestBits(UInt_t f) const
Double_t Mass() const
void GetPolarisation(Double_t &theta, Double_t &phi) const
Double_t Log(Double_t x)