BmnRoot
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 ------------------------------------
82CbmMCTrack::CbmMCTrack(TParticle* part)
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 // AZ-310822
96 TVector3 polar3;
97 part->GetPolarisation(polar3);
98 for (Int_t i = 0; i < 3; ++i)
99 fPolar[i] = polar3[i];
100}
101
102// ----- Destructor ----------------------------------------------------
104
105// ----- Public method Print -------------------------------------------
106void CbmMCTrack::Print(Int_t trackId) const
107{
108 LOG(debug) << "Track " << trackId << ", mother : " << fMotherId << ", Type " << fPdgCode << ", momentum (" << fPx
109 << ", " << fPy << ", " << fPz << ") GeV";
110
111 LOG(debug) << " Ref " << GetNPoints(kREF) << ", BD " << GetNPoints(kBD) << ", GEM " << GetNPoints(kGEM)
112 << ", TOF1 " << GetNPoints(kTOF1) << ", DCH " << GetNPoints(kDCH) << ", TOF2 " << GetNPoints(kTOF)
113 << ", ZDC " << GetNPoints(kZDC) << ", FHCAL " << GetNPoints(kFHCAL) << ", NDET " << GetNPoints(kNDET)
114 << ", VSP " << GetNPoints(kVSP) << ", MWPC " << GetNPoints(kMWPC) << ", ECAL " << GetNPoints(kECAL)
115 << ", CSC " << GetNPoints(kCSC) << ", SI " << GetNPoints(kSILICON) << ", FD " << GetNPoints(kFD)
116 << ", ARMs " << GetNPoints(kARMTRIG) << ", BC " << GetNPoints(kBC) << ", SCWALL " << GetNPoints(kSCWALL)
117 << ", HODO " << GetNPoints(kHODO) << ", SiMD " << GetNPoints(kSiMD) << ", SiBT " << GetNPoints(kSiBT)
118 << ", SiProf " << GetNPoints(kSiProf) << ", VACWALL " << GetNPoints(kVACWALL);
119}
120
121// ----- Public method GetMass -----------------------------------------
122Double_t CbmMCTrack::GetMass() const
123{
124 if (TDatabasePDG::Instance()) {
125 TParticlePDG* particle = TDatabasePDG::Instance()->GetParticle(fPdgCode);
126 if (particle)
127 return particle->Mass();
128 else
129 return 0.;
130 }
131
132 return 0.;
133}
134
135// ----- Public method GetRapidity -------------------------------------
137{
138 Double_t e = GetEnergy();
139 Double_t y = 0.5 * TMath::Log((e + fPz) / (e - fPz));
140
141 return y;
142}
143
144// ----- Public method GetNPoints --------------------------------------
145// TODO: check bitfields & where it is used / filled. Seems not used
147{
148 if (detId == kREF)
149 return (fNPoints & (Long64_t)1);
150 else if (detId == kBD)
151 return ((fNPoints & ((Long64_t)1 << 1)) >> 1);
152 else if (detId == kGEM)
153 return ((fNPoints & ((Long64_t)7 << 2)) >> 2);
154 else if (detId == kTOF1)
155 return ((fNPoints & ((Long64_t)3 << 5)) >> 5);
156 else if (detId == kDCH)
157 return ((fNPoints & ((Long64_t)31 << 7)) >> 7);
158 else if (detId == kTOF || detId == kTOF701)
159 return ((fNPoints & ((Long64_t)3 << 12)) >> 12);
160 else if (detId == kZDC)
161 return ((fNPoints & ((Long64_t)127 << 14)) >> 14);
162 else if (detId == kVSP)
163 return ((fNPoints & ((Long64_t)7 << 21)) >> 21);
164 else if (detId == kMWPC)
165 return ((fNPoints & ((Long64_t)31 << 24)) >> 24);
166 else if (detId == kECAL)
167 return ((fNPoints & ((Long64_t)127 << 29)) >> 29);
168 else if (detId == kCSC)
169 return ((fNPoints & ((Long64_t)7 << 36)) >> 36);
170 else if (detId == kSILICON)
171 return ((fNPoints & ((Long64_t)7 << 39)) >> 39);
172 else if (detId == kFD)
173 return ((fNPoints & ((Long64_t)1 << 48)) >> 48);
174 else if (detId == kARMTRIG)
175 return ((fNPoints & ((Long64_t)3 << 49)) >> 49);
176 else if (detId == kBC)
177 return ((fNPoints & ((Long64_t)1 << 51)) >> 51);
178 else if (detId == kSCWALL)
179 return ((fNPoints & ((Long64_t)1 << 52)) >> 52);
180 else if (detId == kHODO)
181 return ((fNPoints & ((Long64_t)1 << 53)) >> 53);
182 else if (detId == kSiMD)
183 return ((fNPoints & ((Long64_t)1 << 54)) >> 54);
184 else if (detId == kSiBT)
185 return ((fNPoints & ((Long64_t)3 << 55)) >> 55);
186 else if (detId == kFHCAL)
187 return ((fNPoints & ((Long64_t)1 << 57)) >> 57);
188 else if (detId == kNDET)
189 return ((fNPoints & ((Long64_t)1 << 58)) >> 58);
190 else if (detId == kSiProf)
191 return ((fNPoints & ((Long64_t)3 << 59)) >> 59);
192 else if (detId == kSSD)
193 return ((fNPoints & ((Long64_t)1 << 60)) >> 60);
194 else if (detId == kVACWALL)
195 return ((fNPoints & ((Long64_t)1 << 61)) >> 61);
196 else if (detId == kMSC)
197 return 0;
198 else {
199 LOG(error) << "GetNPoints: Unknown detector ID " << detId;
200 return 0;
201 }
202}
203
204// ----- Public method SetNPoints --------------------------------------
205void CbmMCTrack::SetNPoints(Int_t iDet, Long64_t nPoints)
206{
207 if (iDet == kREF) {
208 if (nPoints < 0)
209 nPoints = 0;
210 else if (nPoints > 1)
211 nPoints = 1;
212 fNPoints = (fNPoints & (~(Long64_t)1)) | nPoints;
213 }
214
215 else if (iDet == kBD)
216 {
217 if (nPoints < 0)
218 nPoints = 0;
219 else if (nPoints > 1)
220 nPoints = 1;
221 fNPoints = (fNPoints & (~((Long64_t)1 << 1))) | (nPoints << 1);
222 }
223
224 else if (iDet == kGEM)
225 {
226 if (nPoints < 0)
227 nPoints = 0;
228 else if (nPoints > 7)
229 nPoints = 7;
230 fNPoints = (fNPoints & (~((Long64_t)7 << 2))) | (nPoints << 2);
231 }
232
233 else if (iDet == kTOF1)
234 {
235 if (nPoints < 0)
236 nPoints = 0;
237 else if (nPoints > 3)
238 nPoints = 3;
239 fNPoints = (fNPoints & (~((Long64_t)3 << 5))) | (nPoints << 5);
240 }
241
242 else if (iDet == kDCH)
243 {
244 if (nPoints < 0)
245 nPoints = 0;
246 else if (nPoints > 31)
247 nPoints = 31;
248 fNPoints = (fNPoints & (~((Long64_t)31 << 7))) | (nPoints << 7);
249 }
250
251 else if (iDet == kTOF || iDet == kTOF701)
252 {
253 if (nPoints < 0)
254 nPoints = 0;
255 else if (nPoints > 3)
256 nPoints = 3;
257 fNPoints = (fNPoints & (~((Long64_t)3 << 12))) | (nPoints << 12);
258 }
259
260 else if (iDet == kZDC)
261 {
262 if (nPoints < 0)
263 nPoints = 0;
264 else if (nPoints > 127)
265 nPoints = 127;
266 fNPoints = (fNPoints & (~((Long64_t)127 << 14))) | (nPoints << 14);
267 }
268
269 else if (iDet == kVSP)
270 {
271 if (nPoints < 0)
272 nPoints = 0;
273 else if (nPoints > 7)
274 nPoints = 7;
275 fNPoints = (fNPoints & (~((Long64_t)7 << 21))) | (nPoints << 21);
276 }
277
278 else if (iDet == kMWPC)
279 {
280 if (nPoints < 0)
281 nPoints = 0;
282 else if (nPoints > 31)
283 nPoints = 31;
284 fNPoints = (fNPoints & (~((Long64_t)31 << 24))) | (nPoints << 24);
285 }
286
287 else if (iDet == kECAL)
288 {
289 if (nPoints < 0)
290 nPoints = 0;
291 else if (nPoints > 127)
292 nPoints = 127;
293 fNPoints = (fNPoints & (~((Long64_t)127 << 29))) | (nPoints << 29);
294 }
295
296 else if (iDet == kCSC)
297 {
298 if (nPoints < 0)
299 nPoints = 0;
300 else if (nPoints > 7)
301 nPoints = 7;
302 fNPoints = (fNPoints & (~((Long64_t)7 << 36))) | (nPoints << 36);
303 }
304
305 else if (iDet == kSILICON)
306 {
307 if (nPoints < 0)
308 nPoints = 0;
309 else if (nPoints > 7)
310 nPoints = 7;
311 fNPoints = (fNPoints & (~((Long64_t)7 << 39))) | (nPoints << 39);
312 }
313
314 else if (iDet == kFD)
315 {
316 if (nPoints < 0)
317 nPoints = 0;
318 else if (nPoints > 1)
319 nPoints = 1;
320 fNPoints = (fNPoints & (~((Long64_t)1 << 48))) | (nPoints << 48);
321 }
322
323 else if (iDet == kARMTRIG)
324 {
325 if (nPoints < 0)
326 nPoints = 0;
327 else if (nPoints > 3)
328 nPoints = 3;
329 fNPoints = (fNPoints & (~((Long64_t)3 << 49))) | (nPoints << 49);
330 }
331
332 else if (iDet == kBC)
333 {
334 if (nPoints < 0)
335 nPoints = 0;
336 else if (nPoints > 1)
337 nPoints = 1;
338 fNPoints = (fNPoints & (~((Long64_t)1 << 51))) | (nPoints << 51);
339 }
340
341 else if (iDet == kSCWALL)
342 {
343 if (nPoints < 0)
344 nPoints = 0;
345 else if (nPoints > 1)
346 nPoints = 1;
347 fNPoints = (fNPoints & (~((Long64_t)1 << 52))) | (nPoints << 52);
348 }
349
350 else if (iDet == kHODO)
351 {
352 if (nPoints < 0)
353 nPoints = 0;
354 else if (nPoints > 1)
355 nPoints = 1;
356 fNPoints = (fNPoints & (~((Long64_t)1 << 53))) | (nPoints << 53);
357 }
358
359 else if (iDet == kSiMD)
360 {
361 if (nPoints < 0)
362 nPoints = 0;
363 else if (nPoints > 1)
364 nPoints = 1;
365 fNPoints = (fNPoints & (~((Long64_t)1 << 54))) | (nPoints << 54);
366 }
367
368 else if (iDet == kSiBT)
369 {
370 if (nPoints < 0)
371 nPoints = 0;
372 else if (nPoints > 1)
373 nPoints = 3;
374 fNPoints = (fNPoints & (~((Long64_t)3 << 55))) | (nPoints << 55);
375 }
376
377 else if (iDet == kFHCAL)
378 {
379 if (nPoints < 0)
380 nPoints = 0;
381 else if (nPoints > 1)
382 nPoints = 1;
383 fNPoints = (fNPoints & (~((Long64_t)1 << 57))) | (nPoints << 57);
384 }
385
386 else if (iDet == kNDET || iDet == kHGND)
387 {
388 if (nPoints < 0)
389 nPoints = 0;
390 else if (nPoints > 1)
391 nPoints = 1;
392 fNPoints = (fNPoints & (~((Long64_t)1 << 58))) | (nPoints << 58);
393 }
394
395 else if (iDet == kSiProf)
396 {
397 if (nPoints < 0)
398 nPoints = 0;
399 else if (nPoints > 1)
400 nPoints = 3;
401 fNPoints = (fNPoints & (~((Long64_t)3 << 59))) | (nPoints << 59);
402 }
403
404 else if (iDet == kSSD)
405 {
406 if (nPoints < 0)
407 nPoints = 0;
408 else if (nPoints > 1)
409 nPoints = 1;
410 fNPoints = (fNPoints & (~((Long64_t)1 << 60))) | (nPoints << 60);
411 }
412
413 else if (iDet == kVACWALL)
414 {
415 if (nPoints < 0)
416 nPoints = 0;
417 else if (nPoints > 1)
418 nPoints = 1;
419 fNPoints = (fNPoints & (~((Long64_t)1 << 61))) | (nPoints << 61);
420 }
421
422 else if (iDet == kMSC)
423 {
424 ; // skip
425 }
426
427 else
428 LOG(error) << "Unknown detector ID " << iDet;
429}
int i
Definition P4_F32vec4.h:22
DetectorId
@ 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
Double_t GetMass() const
Double_t GetEnergy() const
Definition CbmMCTrack.h:133
Long64_t GetNPoints(DetectorId detId) const
Double_t GetRapidity() const
virtual ~CbmMCTrack()
void SetNPoints(Int_t iDet, Long64_t np)
void Print(Int_t iTrack=0) const