BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
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 -------------------------------------------
17
CbmMCTrack::CbmMCTrack
()
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 ------------------------------------------
34
CbmMCTrack::CbmMCTrack
(
Int_t
pdgCode,
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 ----------------------------------------------
63
CbmMCTrack::CbmMCTrack
(
const
CbmMCTrack
& track)
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 ------------------------------------
82
CbmMCTrack::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
// 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 ----------------------------------------------------
108
CbmMCTrack::~CbmMCTrack
() {}
109
110
// ----- Public method Print -------------------------------------------
111
void
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 -----------------------------------------
127
Double_t
CbmMCTrack::GetMass
()
const
128
{
129
if
(
TDatabasePDG::Instance
()) {
130
TParticlePDG
* particle =
TDatabasePDG::Instance
()->
GetParticle
(
fPdgCode
);
131
if
(particle)
132
return
particle->
Mass
();
133
else
134
return
0.;
135
}
136
137
return
0.;
138
}
139
140
// ----- Public method GetRapidity -------------------------------------
141
Double_t
CbmMCTrack::GetRapidity
()
const
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
151
Long64_t
CbmMCTrack::GetNPoints
(
DetectorId
detId)
const
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 --------------------------------------
210
void
CbmMCTrack::SetNPoints
(
Int_t
iDet,
Long64_t
nPoints)
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
}
i
int i
Definition
P4_F32vec4.h:22
Int_t
int Int_t
Double_t
double Double_t
Long64_t
long long Long64_t
TDatabasePDG.h
TParticlePDG.h
TParticle.h
DetectorId
DetectorId
BM@N DetectorID enumerator.
Definition
BmnDetectorList.h:12
kBC
@ kBC
Definition
BmnDetectorList.h:31
kSILICON
@ kSILICON
Definition
BmnDetectorList.h:25
kBD
@ kBD
Definition
BmnDetectorList.h:14
kNDET
@ kNDET
Definition
BmnDetectorList.h:35
kGEM
@ kGEM
Definition
BmnDetectorList.h:15
kTOF
@ kTOF
Definition
BmnDetectorList.h:18
kSiProf
@ kSiProf
Definition
BmnDetectorList.h:29
kVSP
@ kVSP
Definition
BmnDetectorList.h:21
kREF
@ kREF
Definition
BmnDetectorList.h:13
kSSD
@ kSSD
Definition
BmnDetectorList.h:37
kHGND
@ kHGND
Definition
BmnDetectorList.h:36
kTOF1
@ kTOF1
Definition
BmnDetectorList.h:16
kFHCAL
@ kFHCAL
Definition
BmnDetectorList.h:34
kSCWALL
@ kSCWALL
Definition
BmnDetectorList.h:32
kCSC
@ kCSC
Definition
BmnDetectorList.h:24
kMSC
@ kMSC
Definition
BmnDetectorList.h:39
kFD
@ kFD
Definition
BmnDetectorList.h:26
kVACWALL
@ kVACWALL
Definition
BmnDetectorList.h:38
kMWPC
@ kMWPC
Definition
BmnDetectorList.h:22
kTOF701
@ kTOF701
Definition
BmnDetectorList.h:19
kDCH
@ kDCH
Definition
BmnDetectorList.h:17
kSiMD
@ kSiMD
Definition
BmnDetectorList.h:27
kECAL
@ kECAL
Definition
BmnDetectorList.h:23
kSiBT
@ kSiBT
Definition
BmnDetectorList.h:28
kZDC
@ kZDC
Definition
BmnDetectorList.h:20
kARMTRIG
@ kARMTRIG
Definition
BmnDetectorList.h:30
kHODO
@ kHODO
Definition
BmnDetectorList.h:33
CbmMCTrack.h
CbmMCTrack::CbmMCTrack
CbmMCTrack()
Default constructor.
Definition
CbmMCTrack.cxx:17
CbmMCTrack::GetMass
Double_t GetMass() const
Definition
CbmMCTrack.cxx:127
CbmMCTrack::fPolar
Double32_t fPolar[3]
Definition
CbmMCTrack.h:126
CbmMCTrack::GetEnergy
Double_t GetEnergy() const
Definition
CbmMCTrack.h:133
CbmMCTrack::fNPoints
Long64_t fNPoints
Bitvector representing the number of MCPoints for this track in each subdetector.
Definition
CbmMCTrack.h:125
CbmMCTrack::GetNPoints
Long64_t GetNPoints(DetectorId detId) const
Accessors to the number of MCPoints in the detectors.
Definition
CbmMCTrack.cxx:151
CbmMCTrack::fPx
Double32_t fPx
Momentum components at start vertex [GeV].
Definition
CbmMCTrack.h:92
CbmMCTrack::fPy
Double32_t fPy
Definition
CbmMCTrack.h:92
CbmMCTrack::fStartZ
Double32_t fStartZ
Definition
CbmMCTrack.h:95
CbmMCTrack::fStartT
Double32_t fStartT
Definition
CbmMCTrack.h:95
CbmMCTrack::GetRapidity
Double_t GetRapidity() const
Definition
CbmMCTrack.cxx:141
CbmMCTrack::fMotherId
Int_t fMotherId
Index of mother track.
Definition
CbmMCTrack.h:89
CbmMCTrack::~CbmMCTrack
virtual ~CbmMCTrack()
Destructor.
Definition
CbmMCTrack.cxx:108
CbmMCTrack::fStartY
Double32_t fStartY
Definition
CbmMCTrack.h:95
CbmMCTrack::fPdgCode
Int_t fPdgCode
PDG particle code.
Definition
CbmMCTrack.h:86
CbmMCTrack::SetNPoints
void SetNPoints(Int_t iDet, Long64_t np)
Definition
CbmMCTrack.cxx:210
CbmMCTrack::fPz
Double32_t fPz
Definition
CbmMCTrack.h:92
CbmMCTrack::fStartX
Double32_t fStartX
Coordinates of start vertex [cm, ns].
Definition
CbmMCTrack.h:95
CbmMCTrack::Print
void Print(Int_t iTrack=0) const
Output to screen.
Definition
CbmMCTrack.cxx:111
CbmMCTrack::GetPdgCode
Int_t GetPdgCode() const
Accessors.
Definition
CbmMCTrack.h:56
TDatabasePDG::Instance
static TDatabasePDG * Instance()
TDatabasePDG::GetParticle
TParticlePDG * GetParticle(const char *name) const
TObject::SetBit
void SetBit(UInt_t f)
TObject::TestBits
Int_t TestBits(UInt_t f) const
TObject::TObject
TObject()
TParticlePDG
TParticlePDG::Mass
Double_t Mass() const
TParticle
TParticle::GetPolarisation
void GetPolarisation(Double_t &theta, Double_t &phi) const
TVector3
TMath::Log
Double_t Log(Double_t x)
base
data
CbmMCTrack.cxx
Generated on
for BmnRoot by
1.17.0