BmnRoot
26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Toggle main menu visibility
Loading...
Searching...
No Matches
BmnTrackDrawP.cxx
Go to the documentation of this file.
1
// -------------------------------------------------------------------------
2
// ----- BmnTrackDrawP source file -----
3
// ----- Created 02/12/15 by K. Gertsenberger -----
4
// -------------------------------------------------------------------------
5
6
#include "
BmnTrackDrawP.h
"
7
8
#include "BmnTrack.h"
9
#include "CbmStack.h"
10
#include "
TDatabasePDG.h
"
11
#include "
TEveManager.h
"
12
#include "
TEveTrackPropagator.h
"
13
#include "TGeant3.h"
14
#include "TGeant3TGeo.h"
15
#include "
TROOT.h
"
16
17
#include <iostream>
18
using namespace
std
;
19
20
// ----- Default constructor -------------------------------------------
21
BmnTrackDrawP::BmnTrackDrawP
()
22
:
FairTask
(
"BmnTrackDrawP"
, 0)
23
,
fEventManager
(nullptr)
24
,
fTrackList
(nullptr)
25
,
fTrList
(nullptr)
26
,
fPro
(nullptr)
27
,
fTrPr
(nullptr)
28
,
fEveTrList
(nullptr)
29
,
fTrajFilter
(nullptr)
30
{}
31
32
// ----- Standard constructor ------------------------------------------
33
BmnTrackDrawP::BmnTrackDrawP
(
const
char
* name,
Int_t
iVerbose)
34
:
FairTask
(name, iVerbose)
35
,
fEventManager
(nullptr)
36
,
fTrackList
(nullptr)
37
,
fTrList
(nullptr)
38
,
fPro
(nullptr)
39
,
fTrPr
(nullptr)
40
,
fEveTrList
(new
TObjArray
(16))
41
,
fTrajFilter
(nullptr)
42
{}
43
44
InitStatus
BmnTrackDrawP::Init
()
45
{
46
if
(fVerbose > 1)
47
cout <<
"BmnTrackDrawP::Init()"
<< endl;
48
49
fEventManager
=
MpdEventManager::Instance
();
50
if
(fVerbose > 2)
51
cout <<
"BmnTrackDrawP::Init() get instance of EventManager"
<< endl;
52
53
FairRootManager* fManager = FairRootManager::Instance();
54
if
(fVerbose > 2)
55
cout <<
"BmnExpTrackDraw::Init() get instance of FairRootManager: "
<< fManager << endl;
56
57
fTrackList
= (
TClonesArray
*)fManager->GetObject(GetName());
58
if
(fVerbose > 2)
59
cout <<
"BmnTrackDrawP::Init() get track list "
<<
fTrackList
<<
" from branch '"
<< GetName() <<
"'"
<< endl;
60
61
if
(gMC == NULL)
62
InitGeant3
();
63
64
fPro
=
new
FairGeanePro();
65
66
fTrajFilter
= FairTrajFilter::Instance();
67
68
return
kSUCCESS;
69
}
70
71
void
BmnTrackDrawP::InitGeant3
()
72
{
73
/** Private method for setting Geane configuration and cuts*/
74
TString
work = getenv(
"VMCWORKDIR"
);
75
TString
work_config = work +
"/gconfig/"
;
76
TString
LibMacro = work_config +
"g3libs.C"
;
77
TString
ConfigMacro = work_config +
"g3Config.C"
;
78
TString
cuts = work_config +
"SetCuts.C"
;
79
80
// Now load the Config and Cuts
81
gROOT
->LoadMacro(LibMacro.
Data
());
82
gROOT
->ProcessLine(
"g3libs()"
);
83
84
// gROOT->LoadMacro(ConfigMacro.Data());
85
// gROOT->ProcessLine("Config()");
86
87
TGeant3* geant3 =
new
TGeant3TGeo(
"C++ Interface to Geant3"
);
88
// TGeant3* geant3 = new TGeant3("C++ Interface to Geant3");
89
// create Cbm Specific Stack
90
CbmStack
* st =
new
CbmStack
();
91
// Set minimum number of points to store the track
92
// The default value is one, which means each track
93
// needs at least 1 point in any detector
94
st->
SetMinPoints
(1);
95
geant3->SetStack(st);
96
// ******* GEANT3 specific configuration for simulated Runs *******
97
geant3->SetTRIG(1);
// Number of events to be processed
98
geant3->SetSWIT(4, 100);
99
geant3->SetDEBU(0, 0, 1);
100
geant3->SetRAYL(1);
101
geant3->SetSTRA(0);
// 1);
102
geant3->SetAUTO(0);
// Select automatic STMIN etc... calc. (AUTO 1) or manual (AUTO 0)
103
geant3->SetABAN(0);
// Restore 3.16 behaviour for abandoned tracks
104
geant3->SetOPTI(2);
// Select optimisation level for GEANT geometry searches (0,1,2)
105
geant3->SetERAN(5.e-7);
106
geant3->SetCKOV(1);
// cerenkov photons
107
108
gROOT
->LoadMacro(cuts);
109
gROOT
->ProcessLine(
"SetCuts()"
);
110
111
// gMC->SetMagField(fxField);
112
// gMC->Init();
113
gMC->BuildPhysics();
114
}
115
116
// -------------------------------------------------------------------------
117
void
BmnTrackDrawP::Exec
(
Option_t
* option)
118
{
119
if
(!IsActive())
120
return
;
121
122
if
(fVerbose > 1)
123
cout <<
"BmnTrackDrawP::Exec"
<< endl;
124
125
Reset
();
126
127
BmnTrack
* current_track;
128
cout <<
"Tracks: "
<<
fTrackList
->GetEntriesFast() << endl;
129
for
(
Int_t
i
= 0;
i
<
fTrackList
->GetEntriesFast();
i
++) {
130
if
(fVerbose > 2)
131
cout <<
"BmnTrackDrawP::Exec "
<<
i
<< endl;
132
133
current_track = (
BmnTrack
*)
fTrackList
->At(
i
);
134
FairTrackParam* pParamFirst = (FairTrackParam*)current_track->
GetParamFirst
();
135
136
// define whether track AL-TURAis primary
137
bool
isPrimary = ((
TMath::Abs
(pParamFirst->GetX()) < 10) && (
TMath::Abs
(pParamFirst->GetY()) < 10)
138
&& (
TMath::Abs
(pParamFirst->GetZ()) < 10));
139
140
// skip secondary tracks if primary flag is set
141
if
(
fEventManager
->IsPriOnly() && (!isPrimary))
142
continue
;
143
144
// set PDG particle code
145
int
particlePDG = 2212;
// 0; // without identification - Rootino
146
147
// get momentum
148
TVector3
mom;
149
pParamFirst->SetQp(1);
150
pParamFirst->Momentum(mom);
151
Double_t
px = mom.
X
(), py = mom.
Y
(), pz = mom.
Z
();
152
153
// create particle
154
// TParticlePDG* fParticlePDG = TDatabasePDG::Instance()->GetParticle(particlePDG);
155
// TParticle(Int_t pdg, Int_t status, Int_t mother1, Int_t mother2, Int_t daughter1, Int_t daughter2, Double_t
156
// px, Double_t py, Double_t pz, Double_t etot, Double_t vx, Double_t vy, Double_t vz, Double_t time)
157
TParticle
* P =
new
TParticle
(particlePDG,
i
, -1, -1, -1, -1, px, py, pz, 0, pParamFirst->GetX(),
158
pParamFirst->GetY(), pParamFirst->GetZ(), 0);
159
160
// get EVE track list for this particle
161
fTrList
=
GetTrGroup
(P);
162
// create EVE track corresponding global track
163
TEveTrack
* track =
new
TEveTrack
(P, particlePDG,
fTrPr
);
164
// set line color corresponding PDG particle code
165
track->
SetLineColor
(
fEventManager
->Color(particlePDG));
166
167
// propagate the tracks by Geane
168
x1
[0] = pParamFirst->GetX();
169
x1
[1] = pParamFirst->GetY();
170
x1
[2] = pParamFirst->GetZ();
171
p1
[0] = px;
172
p1
[1] = py;
173
p1
[2] = pz;
174
175
x2
[0] = 0;
176
x2
[1] = 0;
177
x2
[2] = 0;
178
p2
[0] = 0;
179
p2
[1] = 0;
180
p2
[2] = 0;
181
182
cout <<
"Propagate track from ("
<< pParamFirst->GetX() <<
","
<< pParamFirst->GetY() <<
","
183
<< pParamFirst->GetZ() <<
") with momentum: ("
<< px <<
","
<< py <<
","
<< pz <<
")"
<< endl;
184
185
Bool_t
isSuccess =
fPro
->Propagate(
x1
,
p1
,
x2
,
p2
, particlePDG);
186
187
cout <<
"isSuccess: "
<< isSuccess <<
". Track end point: ("
<<
x2
[0] <<
","
<<
x2
[1] <<
","
<<
x2
[2]
188
<<
") with momentum: ("
<<
p2
[0] <<
","
<<
p2
[1] <<
","
<<
p2
[2] <<
")"
<< endl;
189
190
/*FairTrackParH* fTrackParH = new FairTrackParH(tr1.GetPos()*TMath::Cos(tr1.Theta())*TMath::Cos(tr1.Phi()),
191
tr1.GetPos()*TMath::Cos(tr1.Theta())*TMath::Sin(tr1.Phi()),
192
tr1.GetPos()*TMath::Cos(tr1.Theta()), tr1.Theta(), tr1.Phi(), 1/tr1.Momentum(), tr1.GetCovariance());
193
fGeanePro->Init(fTrackParH);
194
fGeanePro->PropagateToVolume("tof1", 1, 0);
195
fGeanePro->Propagate(211);*/
196
197
TGeoTrack
* geo_track =
fTrajFilter
->GetCurrentTrk();
198
Int_t
Np = geo_track->
GetNpoints
();
199
// cycle: add hits (points) to EVE path for this track
200
cout <<
"Points: "
<< Np << endl;
201
for
(
Int_t
n
= 0;
n
< Np;
n
++) {
202
const
Double_t
* point = geo_track->
GetPoint
(
n
);
203
204
track->
SetPoint
(
n
, point[0], point[1], point[2]);
205
206
TEvePathMark
* path =
new
TEvePathMark
();
207
TEveVector
pos =
TEveVector
(point[0], point[1], point[2]);
208
// cout<<"Point: X="<<point[0]<<" Y="<<point[1]<<" Z="<<point[2]<<endl;
209
path->fV = pos;
210
path->fTime = point[3];
211
if
(
n
== 0) {
212
TEveVector
Mom =
TEveVector
(px, py, pz);
213
path->fP = Mom;
214
}
215
216
if
(fVerbose > 3)
217
cout <<
"Path marker added "
<< path << endl;
218
219
// add path marker for current EVETChain* bmn_data_tree; //! track
220
track->
AddPathMark
(*path);
221
222
if
(fVerbose > 3)
223
cout <<
"Path marker added "
<< path << endl;
224
}
225
226
// add track to EVE track list
227
fTrList
->AddElement(track);
228
229
if
(fVerbose > 3)
230
cout <<
"track added "
<< track->
GetName
() << endl;
231
}
232
233
fEventManager
->AddEventElement(
fTrList
,
RecoTrackList
);
234
235
// redraw EVE scenes
236
gEve
->Redraw3D(
kFALSE
);
237
}
238
239
// ----- Destructor ----------------------------------------------------
240
BmnTrackDrawP::~BmnTrackDrawP
() {}
241
242
// -------------------------------------------------------------------------
243
void
BmnTrackDrawP::SetParContainers
() {}
244
245
// -------------------------------------------------------------------------
246
void
BmnTrackDrawP::Finish
() {}
247
248
// -------------------------------------------------------------------------
249
void
BmnTrackDrawP::Reset
()
250
{
251
// clear EVE track lists (fEveTrList)
252
for
(
Int_t
i
= 0;
i
<
fEveTrList
->GetEntriesFast();
i
++) {
253
TEveTrackList
* ele = (
TEveTrackList
*)
fEveTrList
->At(
i
);
254
gEve
->RemoveElement(ele,
fEventManager
->EveRecoTracks);
255
}
256
257
fEveTrList
->Clear();
258
}
259
260
TEveTrackList
*
BmnTrackDrawP::GetTrGroup
(
TParticle
* P)
261
{
262
fTrList
= 0;
263
264
// serch if there us existing track list for this particle (with given name)
265
for
(
Int_t
i
= 0;
i
<
fEveTrList
->GetEntriesFast();
i
++) {
266
TEveTrackList
* TrListIn = (
TEveTrackList
*)
fEveTrList
->At(
i
);
267
if
(strcmp(TrListIn->
GetName
(), P->
GetName
()) == 0) {
268
fTrList
= TrListIn;
269
break
;
270
}
271
}
272
273
// create new track list for new particle's name
274
if
(
fTrList
== 0) {
275
fTrPr
=
new
TEveTrackPropagator
();
276
fTrList
=
new
TEveTrackList
(P->
GetName
(),
fTrPr
);
277
fTrList
->SetMainColor(
fEventManager
->Color(P->
GetPdgCode
()));
278
fEveTrList
->Add(
fTrList
);
279
280
gEve
->AddElement(
fTrList
,
fEventManager
->EveRecoTracks);
281
fTrList
->SetRnrLine(
kTRUE
);
282
}
283
284
return
fTrList
;
285
}
i
int i
Definition
P4_F32vec4.h:22
Bool_t
bool Bool_t
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
TEvePathMarkT< Float_t > TEvePathMark
TEveTrackPropagator.h
TEveVector
TEveVectorT< Float_t > TEveVector
TROOT.h
gROOT
#define gROOT
BmnTrackDrawP::GetTrGroup
TEveTrackList * GetTrGroup(TParticle *P)
Definition
BmnTrackDrawP.cxx:260
BmnTrackDrawP::x2
Float_t x2[3]
Definition
BmnTrackDrawP.h:60
BmnTrackDrawP::x1
Float_t x1[3]
Definition
BmnTrackDrawP.h:58
BmnTrackDrawP::fEveTrList
TObjArray * fEveTrList
Definition
BmnTrackDrawP.h:55
BmnTrackDrawP::p1
Float_t p1[3]
Definition
BmnTrackDrawP.h:59
BmnTrackDrawP::Exec
virtual void Exec(Option_t *option)
Executed task.
Definition
BmnTrackDrawP.cxx:117
BmnTrackDrawP::Reset
void Reset()
Definition
BmnTrackDrawP.cxx:249
BmnTrackDrawP::BmnTrackDrawP
BmnTrackDrawP()
Default constructor.
Definition
BmnTrackDrawP.cxx:21
BmnTrackDrawP::fEventManager
MpdEventManager * fEventManager
Definition
BmnTrackDrawP.h:49
BmnTrackDrawP::fPro
FairGeanePro * fPro
Definition
BmnTrackDrawP.h:53
BmnTrackDrawP::~BmnTrackDrawP
virtual ~BmnTrackDrawP()
Destructor.
Definition
BmnTrackDrawP.cxx:240
BmnTrackDrawP::Finish
virtual void Finish()
Definition
BmnTrackDrawP.cxx:246
BmnTrackDrawP::Init
virtual InitStatus Init()
Definition
BmnTrackDrawP.cxx:44
BmnTrackDrawP::fTrList
TEveTrackList * fTrList
Definition
BmnTrackDrawP.h:51
BmnTrackDrawP::p2
Float_t p2[3]
Definition
BmnTrackDrawP.h:61
BmnTrackDrawP::SetParContainers
virtual void SetParContainers()
Definition
BmnTrackDrawP.cxx:243
BmnTrackDrawP::InitGeant3
void InitGeant3()
Definition
BmnTrackDrawP.cxx:71
BmnTrackDrawP::fTrajFilter
FairTrajFilter * fTrajFilter
Definition
BmnTrackDrawP.h:56
BmnTrackDrawP::fTrackList
TClonesArray * fTrackList
Definition
BmnTrackDrawP.h:50
BmnTrackDrawP::fTrPr
TEveTrackPropagator * fTrPr
Definition
BmnTrackDrawP.h:54
BmnTrack
Definition
BmnTrack.h:20
BmnTrack::GetParamFirst
FairTrackParam * GetParamFirst()
Definition
BmnTrack.h:63
CbmStack
CbmStack.h.
Definition
CbmStack.h:43
CbmStack::SetMinPoints
void SetMinPoints(Int_t min)
Definition
CbmStack.h:173
FairTask
MpdEventManager::Instance
static MpdEventManager * Instance()
Definition
MpdEventManager.cxx:30
TClonesArray
TEveLine::SetLineColor
void SetLineColor(Color_t col) override
TEveTrackList
TEveTrackPropagator
TEveTrack
TEveTrack::AddPathMark
void AddPathMark(const TEvePathMark &pm)
TGeoTrack
TGeoTrack::GetPoint
Int_t GetPoint(Double_t tof, Double_t *point, Int_t istart=0) const
TGeoTrack::GetNpoints
Int_t GetNpoints() const override
TNamed::GetName
const char * GetName() const override
TObjArray
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
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
BmnTrackDrawP.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
BmnTrackDrawP.cxx
Generated on
for BmnRoot by
1.17.0