9 #include "TEveTrackPropagator.h"
10 #include "TGeoTrack.h"
11 #include "TClonesArray.h"
12 #include "TObjArray.h"
13 #include "TEveManager.h"
14 #include "FairEventManager.h"
16 #include "TLorentzVector.h"
17 #include "TParticle.h"
18 #include "TEveBoxSet.h"
22 #include <FairField.h>
31 fDoPropagation(propagate),
41 : FairTask(name, iVerbose),
44 fUseEventTime(kTRUE), fEveTrList( new TObjArray(16)),
45 fDoPropagation(propagate), fListOfTracks(0)
58 cout <<
"PndTrackDraw::Init()" << endl;
60 FairRootManager* fManager = FairRootManager::Instance();
61 fPndTrackList = (TClonesArray *) fManager->GetObject(GetName());
63 cout <<
"PndTrackDraw::Init() branch " << GetName()
64 <<
" Not found! Task will be deactivated " << endl;
68 cout <<
"PndTrackDraw::Init() get track list" <<
fPndTrackList << endl;
72 cout <<
"PndTrackDraw::Init() get instance of FairEventManager "
101 if(
fVerbose>1) cout <<
" PndTrackDraw::Exec "<< endl;
113 trackName.Append(
"_Track");
114 fListOfTracks =
new TEveElementList(trackName.Data(),
"List of PndTracks");
118 if (FairRunAna::Instance()->IsTimeStamp()) {
119 std::cout <<
"Inside TimeStamp" << std::endl;
121 Double_t eventTime = FairRootManager::Instance()->GetEventTime();
125 cout <<
"EventTime: " << eventTime <<
" TimeWindow: " <<
fStartTime
128 fPndTrackList = FairRootManager::Instance()->GetData(GetName(),
135 if(
fVerbose>2) cout <<
"PndTrackDraw::Exec "<<
i << endl;
150 cout <<
"PndTrack " <<
i <<
":" << std::endl;
156 TVector3 posFirst = parFirst.GetPosition();
158 if (parFirst.GetMomentum().Mag() < 0.1) {
159 momFirst = parFirst.GetMomentum() * 100;
161 momFirst = parFirst.GetMomentum() * 10;
166 TEveElementList* arrowList =
new TEveElementList(groupName.Data(),
"PndMCTrack");
169 TEveArrow* myArrowFirst =
new TEveArrow(momFirst.X(), momFirst.Y(), momFirst.Z(),
170 posFirst.X(), posFirst.Y(), posFirst.Z());
171 myArrowFirst->SetMainColor(kRed);
172 myArrowFirst->SetTubeR(0.01);
173 fArrows.push_back(myArrowFirst);
175 arrowList->AddElement(myArrowFirst);
177 std::cout <<
"ParamFirst: " << posFirst.X() <<
" " << posFirst.Y() <<
" " << posFirst.Z() << std::endl;
178 std::cout <<
"ParamFirst Momentum: " << momFirst.X() <<
" " << momFirst.Y() <<
" " << momFirst.Z() << std::endl;
179 std::cout <<
"Charge: " << parFirst.GetQ() << std::endl;
184 TVector3 posLast = parLast.GetPosition();
186 if (parLast.GetMomentum().Mag() < 0.1) {
187 momLast = parLast.GetMomentum() * 100;
189 momLast = parLast.GetMomentum() * 10;
193 TEveArrow* myArrowLast =
new TEveArrow(momLast.X(), momLast.Y(), momLast.Z(),
194 posLast.X(), posLast.Y(), posLast.Z());
195 myArrowLast->SetMainColor(kBlue);
196 myArrowLast->SetTubeR(0.01);
197 fArrows.push_back(myArrowLast);
199 arrowList->AddElement(myArrowLast);
201 std::cout <<
"ParamLast: " << posLast.X() <<
" " << posLast.Y() <<
" " << posLast.Z() << std::endl;
202 std::cout <<
"ParamLast Momentum: " << momLast.X() <<
" " << momLast.Y() <<
" " << momLast.Z() << std::endl;
203 std::cout <<
"Charge: " << parLast.GetQ() << std::endl;
220 gEve->Redraw3D(kFALSE);
228 TVector3 posTrack = trackPar.GetPosition();
229 TVector3 momTrack = trackPar.GetMomentum();
232 FairField* Field = FairRunAna::Instance()->GetField();
237 Field->GetFieldValue(po,BB);
238 cout<<
"Field Strength: "<<BB[2]/10.<<endl;
249 TParticle *
P =
new TParticle(pidHypo, 0, -1, -1, -1, -1, TLorentzVector(momTrack, 10), TLorentzVector(posTrack, 0));
252 TEveTrack *
track =
new TEveTrack(P, pidHypo,
fTrPr);
253 track->SetLineColor(color);
256 for (Int_t
n = -Np;
n < Np;
n++){
259 track->SetPoint(index++, result.GetX(), result.GetY(), result.GetZ());
260 TEveVector
pos = TEveVector(result.GetX(), result.GetY(), result.GetZ());
261 TEvePathMark *path =
new TEvePathMark();
265 TEveVector
mom = TEveVector(result.GetPx(), result.GetPy(),result.GetPz());
267 track->SetPoint(index++, posTrack.X(), posTrack.Y(), posTrack.Z());
270 cout <<
"Path marker added " << path << endl;
271 #if ROOT_VERSION_CODE <= ROOT_VERSION(5,18,0)
272 track->AddPathMark(path);
274 track->AddPathMark(*path);
277 cout <<
"Path marker added " << path << endl;
280 group->AddElement(track);
284 cout <<
"track added " << track->GetName() << endl;
291 TVector3 posTrack = trackPar.GetPosition();
292 TVector3 momTrack = trackPar.GetMomentum();
305 TVector3 startU(1., 0., 0.);
306 TVector3 startV(0., 1., 0.);
307 fPro->PropagateFromPlane(startU, startV);
309 TVector3 stopTrack(0., 0., posTrack.z() - Np);
310 fPro->PropagateToPlane(stopTrack, startU, startV);
311 FairTrackParP parResult;
313 fPro->Propagate(&trackPar, &parResult, pidHypo);
315 TVector3 posStart = parResult.GetPosition();
316 TVector3 momStart = parResult.GetMomentum();
319 std::cout <<
"PosStart: " << posStart.X() <<
" " << posStart.Y() <<
" "
320 << posStart.Z() << std::endl;
322 TParticle *
P =
new TParticle(pidHypo, 0, -1, -1, -1, -1, TLorentzVector(
323 momStart, 10), TLorentzVector(posStart, 0));
326 TEveTrack *
track =
new TEveTrack(P, pidHypo,
fTrPr);
327 track->SetLineColor(color);
329 fPro->PropagateFromPlane(startU, startV);
333 for (Int_t
n = -Np;
n < Np;
n++) {
336 TVector3 stopO(0., 0., posTrack.z() + (0.1) *
n);
337 fPro->PropagateToPlane(stopO, startU, startV);
339 if (
n * momTrack.Z() < 0)
341 fPro->Propagate(&trackPar, &parResult, pidHypo);
344 std::cout <<
"ParResult " <<
n <<
": " << parResult.GetX() <<
" "
345 << parResult.GetY() <<
" " << parResult.GetZ() << std::endl;
347 track->SetPoint(index++, parResult.GetX(), parResult.GetY(),
349 TEveVector
pos = TEveVector(parResult.GetX(), parResult.GetY(),
351 TEvePathMark *path =
new TEvePathMark();
355 TEveVector
mom = TEveVector(parResult.GetPx(), parResult.GetPy(),
358 track->SetPoint(index++, posTrack.X(), posTrack.Y(), posTrack.Z());
361 cout <<
"Path marker added " << path << endl;
362 #if ROOT_VERSION_CODE <= ROOT_VERSION(5,18,0)
363 track->AddPathMark(path);
365 track->AddPathMark(*path);
368 cout <<
"Path marker added " << path << endl;
371 group->AddElement(track);
375 cout <<
"track added " << track->GetName() << endl;
395 TEveTrackList *ele=( TEveTrackList *)
fEveTrList->At(
i);
399 for (
size_t j = 0; j <
fArrows.size(); j++){
412 std::ostringstream myStream;
414 std::string pidString(myStream.str());
417 TEveTrackList *TrListIn=( TEveTrackList *)
fEveTrList->At(
i);
418 std::string
name(TrListIn->GetName());
419 if (
name == pidString ) {
425 fTrPr=
new TEveTrackPropagator();
426 fTrList=
new TEveTrackList(pidString.c_str(),
fTrPr );
430 fTrList->SetRnrLine(kTRUE);
TEveElementList * fListOfTracks
virtual InitStatus Init()
void propagate(TLorentzVector &l, TVector3 &p, float charge, TH2F *hpro=0)
virtual void SetTimeWindowPlus(Double_t val)
virtual void SetTimeWindowMinus(Double_t val)
FairEventManager * fEventManager
Double_t val[nBoxes][nFEBox]
Double_t fTimeWindowMinus
TEveTrackPropagator * fTrPr
FairTrackPar PropagateByAngle(Double_t step)
void PropagateTrackHelix(FairTrackParP &trackPar, Int_t pidHypo, Int_t color=-1, TEveElement *group=0)
std::vector< TEveArrow * > fArrows
PndTrackCand GetTrackCand()
TClonesArray * fPndTrackList
BinaryFunctor * fStopFunctor
virtual void SetParContainers()
FairTrackParP GetParamLast()
TEveTrackList * GetTrGroup(Int_t pid)
void PropagateTrack(FairTrackParP &trackPar, Int_t pidHypo, Int_t color=-1, TEveElement *group=0)
BinaryFunctor * fStartFunctor
FairTrackPar PropagateToXYPos(TVector2 xyPos)
virtual void AddBoxesPndTrackCand(FairBoxSet *set, TObject *obj, Int_t i=0)
virtual void Exec(Option_t *option)
virtual InitStatus Init()
PndTrackDraw(Bool_t propagation=kFALSE)
FairTrackParP GetParamFirst()
PndTrackCandDraw * fTrackCandDraw