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