BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnTrackDrawH.cxx
Go to the documentation of this file.
1
// -------------------------------------------------------------------------
2
// ----- BmnTrackDrawH source file -----
3
// ----- created 05/10/15 by K. Gertsenberger -----
4
// ----- class to visualize GlobalTracks from *.root in EventDisplay -----
5
// -------------------------------------------------------------------------
6
7
#include "
BmnTrackDrawH.h
"
8
9
#include "BmnTrack.h"
10
#include "CbmStsTrack.h"
11
#include "FairHit.h"
12
#include "FairLogger.h"
13
#include "
TDatabasePDG.h
"
14
#include "
TEveManager.h
"
15
#include "
TEvePathMark.h
"
16
#include "
TEveVector.h
"
17
18
#include <iostream>
19
using namespace
std
;
20
21
// default constructor
22
BmnTrackDrawH::BmnTrackDrawH
()
23
:
FairTask
(
"BmnTrackDrawH"
, 0)
24
,
fTrackList
(nullptr)
25
,
fHitList
(nullptr)
26
,
fTrPr
(nullptr)
27
,
fEventManager
(nullptr)
28
,
fEveTrList
(nullptr)
29
,
fTrList
(nullptr)
30
,
fHitsBranchName
(
""
)
31
,
fIsCbmStsTrack
(
kFALSE
)
32
{}
33
34
// standard constructor
35
BmnTrackDrawH::BmnTrackDrawH
(
const
char
* name,
TString
hitsBranchName,
Int_t
iVerbose)
36
:
FairTask
(name, iVerbose)
37
,
fTrackList
(nullptr)
38
,
fHitList
(nullptr)
39
,
fTrPr
(nullptr)
40
,
fEventManager
(nullptr)
41
,
fEveTrList
(new
TObjArray
(16))
42
,
fTrList
(nullptr)
43
,
fHitsBranchName
(hitsBranchName)
44
,
fIsCbmStsTrack
(
kFALSE
)
45
{}
46
47
// initialization of the track drawing task
48
InitStatus
BmnTrackDrawH::Init
()
49
{
50
if
(fVerbose > 0)
51
LOG(info) <<
"BmnTrackDrawH::Init()"
;
52
53
fEventManager
=
MpdEventManager::Instance
();
54
if
(fVerbose > 1)
55
LOG(debug) <<
"BmnTrackDrawH::Init() get instance of EventManager: "
<<
fEventManager
;
56
57
FairRootManager* fManager = FairRootManager::Instance();
58
if
(fVerbose > 1)
59
LOG(debug) <<
"BmnTrackDrawH::Init() get instance of FairRootManager: "
<< fManager;
60
61
fTrackList
= (
TClonesArray
*)fManager->GetObject(GetName());
62
if
(
fTrackList
== 0) {
63
LOG(error) <<
"BmnTrackDrawH::Init() branch "
<< GetName() <<
" not found! Task will be deactivated"
;
64
SetActive(
kFALSE
);
65
return
kERROR;
66
}
67
if
(fVerbose > 1)
68
LOG(debug) <<
"BmnTrackDrawH::Init() get track list "
<<
fTrackList
<<
" from branch '"
<< GetName() <<
"'"
;
69
70
fHitList
= (
TClonesArray
*)fManager->GetObject(
fHitsBranchName
);
71
if
(
fHitList
== 0) {
72
LOG(error) <<
"BmnTrackDrawH::Init() branch "
<<
fHitsBranchName
<<
" not found! Task will be deactivated"
;
73
SetActive(
kFALSE
);
74
return
kERROR;
75
}
76
if
(fVerbose > 1)
77
LOG(debug) <<
"BmnTrackDrawH::Init() get list of hits "
<<
fHitList
<<
" from branch '"
<<
fHitsBranchName
78
<<
"'"
;
79
80
fIsCbmStsTrack
=
fTrackList
->GetClass()->InheritsFrom(
"CbmStsTrack"
);
81
82
return
kSUCCESS;
83
}
84
85
// -------------------------------------------------------------------------
86
void
BmnTrackDrawH::Exec
(
Option_t
* option)
87
{
88
if
(fVerbose > 0)
89
LOG(info) <<
"BmnTrackDrawH::Exec() "
;
90
91
if
(!IsActive())
92
return
;
93
94
Reset
();
95
96
if
(fVerbose > 0)
97
LOG(info) <<
"BmnTrackDrawH::Exec(): the number of tracks is "
<<
fTrackList
->GetEntriesFast();
98
99
TObject
* current_track;
100
for
(
Int_t
i
= 0;
i
<
fTrackList
->GetEntriesFast();
i
++) {
101
if
(fVerbose > 2)
102
LOG(debug) <<
"BmnTrackDrawH::Exec() "
<<
i
;
103
104
current_track =
fTrackList
->At(
i
);
105
106
const
FairTrackParam* pParamFirst;
107
if
(
fIsCbmStsTrack
) {
108
pParamFirst = ((
CbmStsTrack
*)current_track)->GetParamFirst();
109
}
else
{
110
pParamFirst = ((
BmnTrack
*)current_track)->GetParamFirst();
111
}
112
113
// define whether track is primary
114
bool
isPrimary = ((
TMath::Abs
(pParamFirst->GetX()) < 10) && (
TMath::Abs
(pParamFirst->GetY()) < 10)
115
&& (
TMath::Abs
(pParamFirst->GetZ()) < 10));
116
117
// skip secondary tracks if primary flag is set
118
if
(
fEventManager
->IsPriOnly() && (!isPrimary))
119
continue
;
120
121
// get PDG particle code, without identification - Rootino
122
int
particlePDG = 0;
123
124
// get momentum
125
TVector3
mom;
126
pParamFirst->Momentum(mom);
127
Double_t
px = mom.
X
(), py = mom.
Y
(), pz = mom.
Z
();
128
129
// create particle
130
// TParticlePDG *fParticlePDG = TDatabasePDG::Instance()->GetParticle(particlePDG);
131
TParticle
* P =
new
TParticle
(particlePDG,
i
, -1, -1, -1, -1, px, py, pz, 0, pParamFirst->GetX(),
132
pParamFirst->GetY(), pParamFirst->GetZ(), 0);
133
134
// get EVE track list for this particle
135
fTrList
=
GetTrGroup
(
TString
(GetName()), P);
136
// create EVE track corresponding global track
137
TEveTrack
* track =
new
TEveTrack
(P, particlePDG,
fTrPr
);
138
// set line color corresponding PDG particle code
139
track->
SetLineColor
(
fTrList
->GetMainColor());
140
track->
SetLineWidth
(2);
141
142
Int_t
Np;
143
if
(
fIsCbmStsTrack
) {
144
Np = ((
CbmStsTrack
*)current_track)->GetNStsHits();
145
}
else
{
146
Np = ((
BmnTrack
*)current_track)->GetNHits();
147
}
148
149
// cycle: add hits (points) to EVE path for this track
150
if
(fVerbose > 2)
151
LOG(debug) <<
"BmnTrackDrawH::Exec(): number of track hits = "
<< Np;
152
for
(
Int_t
n
= 0;
n
< Np;
n
++) {
153
FairHit
* pHit =
nullptr
;
154
if
(
fIsCbmStsTrack
) {
155
pHit = (
FairHit
*)
fHitList
->UncheckedAt(((
CbmStsTrack
*)current_track)->GetStsHitIndex(
n
));
156
}
else
{
157
pHit = (
FairHit
*)
fHitList
->UncheckedAt(((
BmnTrack
*)current_track)->GetHitIndex(
n
));
158
}
159
160
track->
SetPoint
(
n
, pHit->GetX(), pHit->GetY(), pHit->GetZ());
161
162
TEvePathMark
* path =
new
TEvePathMark
();
163
TEveVector
pos =
TEveVector
(pHit->GetX(), pHit->GetY(), pHit->GetZ());
164
if
(fVerbose > 3)
165
LOG(debug) <<
"BmnTrackDrawH::Exec(): point "
<<
n
<<
": X="
<< pHit->GetX() <<
" Y="
<< pHit->GetY()
166
<<
" Z="
<< pHit->GetZ();
167
path->fV = pos;
168
path->fTime = pHit->GetTimeStamp();
169
if
(
n
== 0) {
170
TEveVector
Mom =
TEveVector
(px, py, pz);
171
path->fP = Mom;
172
}
173
174
// add path marker for current EVE track
175
track->
AddPathMark
(*path);
176
177
if
(fVerbose > 3)
178
LOG(debug) <<
"BmnTrackDrawH::Exec: path marker added "
<< path;
179
}
180
181
// add track to EVE track list
182
fTrList
->AddElement(track);
183
184
if
(fVerbose > 2)
185
LOG(debug) <<
"BmnTrackDrawH::Exec: track was added "
<< track->
GetName
();
186
}
187
188
// redraw EVE scenes
189
// gEve->Redraw3D(kFALSE);
190
}
191
192
// destructor
193
BmnTrackDrawH::~BmnTrackDrawH
() {}
194
195
void
BmnTrackDrawH::SetParContainers
() {}
196
197
void
BmnTrackDrawH::Finish
() {}
198
199
void
BmnTrackDrawH::Reset
()
200
{
201
// clear EVE track lists (fEveTrList)
202
for
(
Int_t
i
= 0;
i
<
fEveTrList
->GetEntriesFast();
i
++) {
203
TEveTrackList
* ele = (
TEveTrackList
*)
fEveTrList
->At(
i
);
204
gEve
->RemoveElement(ele,
fEventManager
->EveRecoTracks);
205
}
206
fEveTrList
->Clear();
207
}
208
209
// return pointer to EVE track list for given group_name and/or particle name. if list don't exist then create it
210
TEveTrackList
*
BmnTrackDrawH::GetTrGroup
(
const
char
* group_name,
TParticle
* P)
211
{
212
fTrList
= 0;
213
TString
track_group =
""
;
214
if
((group_name !=
nullptr
) && (strcmp(group_name,
""
)))
215
track_group += group_name;
216
if
(P !=
nullptr
) {
217
if
(track_group !=
""
)
218
track_group +=
"_"
;
219
track_group += P->
GetName
();
220
}
221
if
(track_group ==
""
) {
222
LOG(error) <<
"BmnTrackDrawH::GetTrGroup() function parameteres are empty (null)"
;
223
return
nullptr
;
224
}
225
226
// search if there us existing track list for this particle (with given name)
227
for
(
Int_t
i
= 0;
i
<
fEveTrList
->GetEntriesFast();
i
++) {
228
TEveTrackList
* TrListIn = (
TEveTrackList
*)
fEveTrList
->At(
i
);
229
if
(strcmp(TrListIn->
GetName
(), track_group.
Data
()) == 0) {
230
fTrList
= TrListIn;
231
break
;
232
}
233
}
234
235
// create new track list for new name
236
if
(
fTrList
== 0) {
237
fTrPr
=
new
TEveTrackPropagator
();
238
fTrList
=
new
TEveTrackList
(track_group,
fTrPr
);
239
// set track color by particle PDG from MpdEventManager if group_name is not set
240
Int_t
new_color = 0;
241
if
(group_name ==
nullptr
)
242
new_color =
fEventManager
->Color(P->
GetPdgCode
());
243
else
244
new_color =
245
track_group.
Hash
() % 9
246
+ 2;
// fEventManager->EveRecoTracks == nullptr ? 2 : fEventManager->EveRecoTracks->NumChildren() + 2;
247
fTrList
->SetMainColor(new_color);
248
fEveTrList
->Add(
fTrList
);
249
fTrList
->SetRnrLine(
kTRUE
);
250
251
fEventManager
->AddEventElement(
fTrList
,
RecoTrackList
);
252
}
253
254
return
fTrList
;
255
}
i
int i
Definition
P4_F32vec4.h:22
Int_t
int Int_t
kFALSE
constexpr Bool_t kFALSE
Double_t
double Double_t
kTRUE
constexpr Bool_t kTRUE
Option_t
const char Option_t
TDatabasePDG.h
TEveManager.h
gEve
R__EXTERN TEveManager * gEve
TEvePathMark.h
TEvePathMark
TEvePathMarkT< Float_t > TEvePathMark
TEveVector.h
TEveVector
TEveVectorT< Float_t > TEveVector
BmnTrackDrawH::~BmnTrackDrawH
virtual ~BmnTrackDrawH()
Destructor.
Definition
BmnTrackDrawH.cxx:193
BmnTrackDrawH::fIsCbmStsTrack
Bool_t fIsCbmStsTrack
Definition
BmnTrackDrawH.h:59
BmnTrackDrawH::fTrPr
TEveTrackPropagator * fTrPr
Definition
BmnTrackDrawH.h:53
BmnTrackDrawH::fTrList
TEveTrackList * fTrList
Definition
BmnTrackDrawH.h:56
BmnTrackDrawH::fTrackList
TClonesArray * fTrackList
Definition
BmnTrackDrawH.h:48
BmnTrackDrawH::GetTrGroup
TEveTrackList * GetTrGroup(const char *group_name, TParticle *P=nullptr)
Definition
BmnTrackDrawH.cxx:210
BmnTrackDrawH::SetParContainers
virtual void SetParContainers()
Definition
BmnTrackDrawH.cxx:195
BmnTrackDrawH::fHitsBranchName
TString fHitsBranchName
Definition
BmnTrackDrawH.h:57
BmnTrackDrawH::fEventManager
MpdEventManager * fEventManager
Definition
BmnTrackDrawH.h:54
BmnTrackDrawH::fEveTrList
TObjArray * fEveTrList
Definition
BmnTrackDrawH.h:55
BmnTrackDrawH::BmnTrackDrawH
BmnTrackDrawH()
Default constructor.
Definition
BmnTrackDrawH.cxx:22
BmnTrackDrawH::Init
virtual InitStatus Init()
Definition
BmnTrackDrawH.cxx:48
BmnTrackDrawH::Exec
virtual void Exec(Option_t *option)
execute function of this task
Definition
BmnTrackDrawH.cxx:86
BmnTrackDrawH::Reset
void Reset()
Definition
BmnTrackDrawH.cxx:199
BmnTrackDrawH::Finish
virtual void Finish()
Definition
BmnTrackDrawH.cxx:197
BmnTrackDrawH::fHitList
TClonesArray * fHitList
Definition
BmnTrackDrawH.h:50
BmnTrack
Definition
BmnTrack.h:20
CbmStsTrack
Definition
CbmStsTrack.h:28
FairHit
FairTask
MpdEventManager::Instance
static MpdEventManager * Instance()
Definition
MpdEventManager.cxx:30
TClonesArray
TEveLine::SetLineColor
void SetLineColor(Color_t col) override
TEveLine::SetLineWidth
void SetLineWidth(Width_t lwidth) override
TEveTrackList
TEveTrackPropagator
TEveTrack
TEveTrack::AddPathMark
void AddPathMark(const TEvePathMark &pm)
TNamed::GetName
const char * GetName() const override
TObjArray
TObject
TParticle
TParticle::GetPdgCode
Int_t GetPdgCode() const
TParticle::GetName
const char * GetName() const override
TPolyMarker3D::SetPoint
void SetPoint(Int_t n, Double_t x, Double_t y, Double_t z)
TPolyMarker3D::GetName
const char * GetName() const override
TString
TString::Data
const char * Data() const
TString::Hash
UInt_t Hash(ECaseCompare cmp=kExact) const
TVector3
TVector3::Z
Double_t Z() const
TVector3::Y
Double_t Y() const
TVector3::X
Double_t X() const
RecoTrackList
@ RecoTrackList
Definition
MpdEventManager.h:27
BmnTrackDrawH.h
n
*brief user defined string literal for JSON values *sa std::size_t n
Definition
json.hpp:20362
TMath::Abs
Double_t Abs(Double_t d)
std
Definition
json.hpp:4446
eventdisplay
bmn
BmnTrackDrawH.cxx
Generated on
for BmnRoot by
1.17.0