BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
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>
18using namespace std;
19
20// ----- Default constructor -------------------------------------------
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 ------------------------------------------
33BmnTrackDrawP::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
45{
46 if (fVerbose > 1)
47 cout << "BmnTrackDrawP::Init()" << endl;
48
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
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// -------------------------------------------------------------------------
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 ----------------------------------------------------
241
242// -------------------------------------------------------------------------
244
245// -------------------------------------------------------------------------
247
248// -------------------------------------------------------------------------
250{
251 // clear EVE track lists (fEveTrList)
252 for (Int_t i = 0; i < fEveTrList->GetEntriesFast(); i++) {
254 gEve->RemoveElement(ele, fEventManager->EveRecoTracks);
255 }
256
257 fEveTrList->Clear();
258}
259
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) {
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}
int i
Definition P4_F32vec4.h:22
bool Bool_t
int Int_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
R__EXTERN TEveManager * gEve
TEvePathMarkT< Float_t > TEvePathMark
TEveVectorT< Float_t > TEveVector
#define gROOT
TEveTrackList * GetTrGroup(TParticle *P)
Float_t x2[3]
Float_t x1[3]
TObjArray * fEveTrList
Float_t p1[3]
virtual void Exec(Option_t *option)
Executed task.
BmnTrackDrawP()
Default constructor.
MpdEventManager * fEventManager
FairGeanePro * fPro
virtual ~BmnTrackDrawP()
Destructor.
virtual void Finish()
virtual InitStatus Init()
TEveTrackList * fTrList
Float_t p2[3]
virtual void SetParContainers()
FairTrajFilter * fTrajFilter
TClonesArray * fTrackList
TEveTrackPropagator * fTrPr
FairTrackParam * GetParamFirst()
Definition BmnTrack.h:63
CbmStack.h.
Definition CbmStack.h:43
void SetMinPoints(Int_t min)
Definition CbmStack.h:173
static MpdEventManager * Instance()
void SetLineColor(Color_t col) override
void AddPathMark(const TEvePathMark &pm)
Int_t GetPoint(Double_t tof, Double_t *point, Int_t istart=0) const
Int_t GetNpoints() const override
const char * GetName() const override
Int_t GetPdgCode() const
const char * GetName() const override
void SetPoint(Int_t n, Double_t x, Double_t y, Double_t z)
const char * GetName() const override
const char * Data() const
Double_t Z() const
Double_t Y() const
Double_t X() const
@ RecoTrackList
*brief user defined string literal for JSON values *sa std::size_t n
Definition json.hpp:20362
Double_t Abs(Double_t d)
Definition json.hpp:4446