ROOT logo
// @(#)root/eve:$Id: text_test.C 26717 2008-12-07 22:07:55Z matevz $
// Author: Alja Mrak-Tadel

// Makes some tracks with three different magnetic field types.

#include "TEveTrackPropagator.h"
#include "TEveTrack.h"
#include "TEveManager.h"
#include "TEveViewer.h"
#include "TSystem.h"
#include "TGLViewer.h"
#include "TMath.h"

#include "TEveViewer.h"
#include "TEvePointSet.h"

class GappedField : public TEveMagField
{
public:
   GappedField():TEveMagField(){}
   ~GappedField(){};
   using   TEveMagField::GetField;

   virtual TEveVector GetField(Float_t /*x*/, Float_t /*y*/, Float_t z) const
   {
      if (TMath::Abs(z) < 300) return TEveVector(0, 0, -4);
      if (TMath::Abs(z) < 600) return TEveVector(0, 0, 0);
      return TEveVector(0, 0, 4);
   }
};

//______________________________________________________________________________
TEveTrack* make_track(TEveTrackPropagator* prop, Int_t sign)
{
  // Make track with given propagator.
  // Add to math-marks to test fit.

  TEveRecTrack *rc = new TEveRecTrack();
  rc->fV.Set(0.028558, -0.000918, 3.691919);
  rc->fP.Set(0.767095, -2.400006, -0.313103);
  rc->fSign = sign;


  TEveTrack* track = new TEveTrack(rc, prop);
  track->SetName(Form("Charge %d", sign));
  // daughter 0
  TEvePathMark* pm1 = new TEvePathMark(TEvePathMark::kDaughter);
  pm1->fV.Set(1.479084, -4.370661, 3.119761);
  track->AddPathMark(*pm1);
  // daughter 1
  TEvePathMark* pm2 = new TEvePathMark(TEvePathMark::kDaughter);
  pm2->fV.Set(57.72345, -89.77011, -9.783746);
  track->AddPathMark(*pm2);

  return track;
}


void track(Int_t bCase = 3, Bool_t isRungeKutta = kTRUE)
{
#if defined (__CINT__)
   Error("track.C", "Must be run in compiled mode!");
   return;
#endif

   gSystem->IgnoreSignal(kSigSegmentationViolation, true);
   TEveManager::Create();

   TEveTrackList *list = new TEveTrackList();
   TEveTrackPropagator* prop = list->GetPropagator();
   prop->SetFitDaughters(kFALSE);
   prop->SetMaxZ(1000);

   if (isRungeKutta)
   {
      prop->SetStepper(TEveTrackPropagator::kRungeKutta);
      list->SetName("RK Propagator");
   }
   else
   {
      list->SetName("Heix Propagator");
   }

   TEveTrack *track = 0;
   switch (bCase)
   {
      case 0:
      {
         // B = 0 no difference btween signed and charge particles
         prop->SetMagField(0.);
         list->SetElementName(Form("%s, zeroB", list->GetElementName()));
         track = make_track(prop, 1);
         break;
      }

      case 1:
      {
         // constant B field, const angle
         prop->SetMagFieldObj(new TEveMagFieldConst(0., 0., -3.8));
         list->SetElementName(Form("%s, constB", list->GetElementName()));
         track = make_track(prop, 1);
         break;
      }
      case 2:
      {
         // variable B field, sign change at  R = 200 cm
         prop->SetMagFieldObj(new TEveMagFieldDuo(200, -4.4, 2));
         list->SetElementName(Form("%s, duoB", list->GetElementName()));
         track = make_track(prop, 1);
         break;
      }
      case 3:
      {
         // gapped field
         prop->SetMagFieldObj(new GappedField());
         list->SetElementName(Form("%s, gappedB", list->GetElementName()));

      
         TEveRecTrack *rc = new TEveRecTrack();
         rc->fV.Set(0.028558, -0.000918, 3.691919);
         rc->fP.Set(0.767095, -0.400006, 2.313103);
         rc->fSign = 1;
         track = new TEveTrack(rc, prop);

         TEvePointSet* marker = new TEvePointSet(2);  
         marker->SetElementName("B field break points");
         marker->SetPoint(0, 0., 0., 300.f);
         marker->SetPoint(1, 0., 0., 600.f);
         marker->SetMarkerColor(3);
         gEve->AddElement(marker);
      }
   };
       
   if (isRungeKutta)
      list->SetLineColor(kMagenta);
   else 
      list->SetLineColor(kCyan);

   track->SetLineColor(list->GetLineColor());
 
   gEve->AddElement(track, list);
   gEve->AddElement(list);
   track->MakeTrack();

   TEveViewer* v = gEve->GetDefaultViewer();
   v->GetGLViewer()->SetGuideState(TGLUtil::kAxesOrigin, kTRUE, kFALSE, 0);
   gEve->Redraw3D(1);
}
 track.C:1
 track.C:2
 track.C:3
 track.C:4
 track.C:5
 track.C:6
 track.C:7
 track.C:8
 track.C:9
 track.C:10
 track.C:11
 track.C:12
 track.C:13
 track.C:14
 track.C:15
 track.C:16
 track.C:17
 track.C:18
 track.C:19
 track.C:20
 track.C:21
 track.C:22
 track.C:23
 track.C:24
 track.C:25
 track.C:26
 track.C:27
 track.C:28
 track.C:29
 track.C:30
 track.C:31
 track.C:32
 track.C:33
 track.C:34
 track.C:35
 track.C:36
 track.C:37
 track.C:38
 track.C:39
 track.C:40
 track.C:41
 track.C:42
 track.C:43
 track.C:44
 track.C:45
 track.C:46
 track.C:47
 track.C:48
 track.C:49
 track.C:50
 track.C:51
 track.C:52
 track.C:53
 track.C:54
 track.C:55
 track.C:56
 track.C:57
 track.C:58
 track.C:59
 track.C:60
 track.C:61
 track.C:62
 track.C:63
 track.C:64
 track.C:65
 track.C:66
 track.C:67
 track.C:68
 track.C:69
 track.C:70
 track.C:71
 track.C:72
 track.C:73
 track.C:74
 track.C:75
 track.C:76
 track.C:77
 track.C:78
 track.C:79
 track.C:80
 track.C:81
 track.C:82
 track.C:83
 track.C:84
 track.C:85
 track.C:86
 track.C:87
 track.C:88
 track.C:89
 track.C:90
 track.C:91
 track.C:92
 track.C:93
 track.C:94
 track.C:95
 track.C:96
 track.C:97
 track.C:98
 track.C:99
 track.C:100
 track.C:101
 track.C:102
 track.C:103
 track.C:104
 track.C:105
 track.C:106
 track.C:107
 track.C:108
 track.C:109
 track.C:110
 track.C:111
 track.C:112
 track.C:113
 track.C:114
 track.C:115
 track.C:116
 track.C:117
 track.C:118
 track.C:119
 track.C:120
 track.C:121
 track.C:122
 track.C:123
 track.C:124
 track.C:125
 track.C:126
 track.C:127
 track.C:128
 track.C:129
 track.C:130
 track.C:131
 track.C:132
 track.C:133
 track.C:134
 track.C:135
 track.C:136
 track.C:137
 track.C:138
 track.C:139
 track.C:140
 track.C:141
 track.C:142
 track.C:143
 track.C:144
 track.C:145
 track.C:146
 track.C:147
 track.C:148
 track.C:149