]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/Reve/Track.cxx
Added parameter 'Width_t fWidth' to TrackRnrStyle and a method to change width of...
[u/mrichter/AliRoot.git] / EVE / Reve / Track.cxx
index 22d2edeb7bfe07a3e75ce10fa99f61e5ce9de56c..d43d1964c1cd027dc37304351bc53f6acfcd7986 100644 (file)
@@ -21,48 +21,98 @@ using namespace Reve;
 
 ClassImp(Reve::Track)
 
-Track::Track()
+Track::Track() :
+  RenderElement(),
+  TPolyLine3D(),
+
+  fV(),
+  fP(),
+  fBeta(0),
+  fCharge(0),
+  fLabel(0),
+  fPathMarks(),
+
+  fRnrStyle(0),
+
+  fName(),
+  fTitle()
+{}
+
+Track::Track(TParticle* t, Int_t label, TrackRnrStyle* rs):
+  RenderElement(),
+  TPolyLine3D(),
+
+  fV(t->Vx(), t->Vy(), t->Vz()),
+  fP(t->Px(), t->Py(), t->Pz()),
+  fBeta(t->P()/t->Energy()),
+  fCharge(0),
+  fLabel(label),
+  fPathMarks(),
+
+  fRnrStyle(rs),
+
+  fName(t->GetName()),
+  fTitle()
 {
-  fRnrStyle = 0;
+  fLineColor = fRnrStyle->GetColor();
+  fMainColorPtr = &fLineColor;
+
+  TParticlePDG* pdgp = t->GetPDG();
+  if (pdgp)
+    fCharge = (Int_t) TMath::Nint(pdgp->Charge()/3);
 }
 
-Track::Track(Reve::MCTrack* t, TrackRnrStyle* rs)
-{
-  fRnrStyle = rs;
+Track::Track(Reve::MCTrack* t, TrackRnrStyle* rs):
+  RenderElement(),
+  TPolyLine3D(),
+
+  fV(t->Vx(), t->Vy(), t->Vz()),
+  fP(t->Px(), t->Py(), t->Pz()),
+  fBeta(t->P()/t->Energy()),
+  fCharge(0),
+  fLabel(t->label),
+  fPathMarks(),
+
+  fRnrStyle(rs),
 
-  fName = t->GetName();
+  fName(t->GetName()),
+  fTitle()
+{
   fLineColor = fRnrStyle->GetColor();
   fMainColorPtr = &fLineColor;
 
-  fV.Set(t->Vx(), t->Vy(), t->Vz());
-  fP.Set(t->Px(), t->Py(), t->Pz());
-  fBeta   = t->P()/t->Energy();
-
   TParticlePDG* pdgp = t->GetPDG();
   if(pdgp == 0) {
     t->ResetPdgCode(); pdgp = t->GetPDG();
   }
-
-  fCharge = (Int_t) pdgp->Charge();
-  fLabel  = t->label;
+  fCharge = (Int_t) TMath::Nint(pdgp->Charge()/3);
 }
 
-Track::Track(Reve::RecTrack* t, TrackRnrStyle* rs)
+Track::Track(Reve::RecTrack* t, TrackRnrStyle* rs) :
+  RenderElement(),
+  TPolyLine3D(),
+
+  fV(t->V),
+  fP(t->P),
+  fBeta(t->beta),
+  fCharge(t->sign),
+  fLabel(t->label),
+  fPathMarks(),
+
+  fRnrStyle(rs),
+
+  fName(t->GetName()),
+  fTitle()
 {
-  fRnrStyle = rs;
-  fName = t->GetName();
   fLineColor = fRnrStyle->GetColor();
   fMainColorPtr = &fLineColor;
-
-  fV = t->V;
-  fP = t->P;
-  fBeta   = t->beta;
-  fCharge = t->sign;
-  fLabel  = t->label; 
 }
 
 Track::~Track()
-{}
+{
+  for (vpPathMark_i i=fPathMarks.begin(); i!=fPathMarks.end(); ++i)
+    delete *i;
+}
 
 void Track::Reset(Int_t n_points)
 {
@@ -89,14 +139,16 @@ void Track::MakeTrack()
   mc_v0.t = 0;
 
   std::vector<MCVertex> track_points;
-  Bool_t decay = false;
+  Bool_t decay = kFALSE;
 
   if ((TMath::Abs(fV.z) > RS.fMaxZ) || (fV.x*fV.x + fV.y*fV.y > RS.fMaxR*RS.fMaxR)) 
     goto make_polyline;
   
-  if (fCharge) { // Charged particle
+  if (fCharge != 0 && TMath::Abs(RS.fMagField) > 1e-5) {
+
+    // Charged particle in magnetic field
 
-    Float_t a = 0.2998*RS.fMagField*fCharge/300; // m->cm
+    Float_t a = RS.fgkB2C * RS.fMagField * fCharge;
    
     MCHelix helix(fRnrStyle, &mc_v0, TMath::C()*fBeta, &track_points, a); //m->cm
     helix.Init(TMath::Sqrt(px*px+py*py), pz);
@@ -129,12 +181,14 @@ void Track::MakeTrack()
     }
   helix_bounds:
     //go to bounds
-    if(!decay || RS.fFitDecay == false){
+    if(!decay || RS.fFitDecay == kFALSE){
       helix.LoopToBounds(px,py,pz);
       // printf("%s loop to bounds  \n",fName.Data() );
     }
 
-  } else { // Neutral particle
+  } else {
+
+    // Neutral particle or no field
 
     MCLine line(fRnrStyle, &mc_v0, TMath::C()*fBeta, &track_points);
    
@@ -164,7 +218,7 @@ void Track::MakeTrack()
     }
 
   line_bounds:
-    if(!decay || RS.fFitDecay == false)
+    if(!decay || RS.fFitDecay == kFALSE)
       line.GotoBounds(px,py,pz);
 
   }
@@ -176,30 +230,49 @@ make_polyline:
 
 /**************************************************************************/
 
+void Track::ImportHits()
+{
+  Reve::LoadMacro("hits_from_label.C");
+  gROOT->ProcessLine(Form("hits_from_label(%d);", fLabel));
+}
+
+void Track::ImportClusters()
+{
+  Reve::LoadMacro("clusters_from_label.C");
+  gROOT->ProcessLine(Form("clusters_from_label(%d);", fLabel));
+}
+
+
+/**************************************************************************/
+/**************************************************************************/
+
 //______________________________________________________________________
 // TrackRnrStyle
 //
 
 ClassImp(Reve::TrackRnrStyle)
 
-Float_t       TrackRnrStyle::fgDefMagField = 0.5;
+Float_t       TrackRnrStyle::fgDefMagField = 5;
+const Float_t TrackRnrStyle::fgkB2C        = 0.299792458e-3;
 TrackRnrStyle TrackRnrStyle::fgDefStyle;
 
-void TrackRnrStyle::Init()
-{
-  fMagField = fgDefMagField;
+TrackRnrStyle::TrackRnrStyle() :
+  TObject(),
 
-  fMaxR  = 450;
-  fMaxZ  = 550;
+  fColor(1),
+  fWidth(1),
+  fMagField(fgDefMagField),
 
-  fMaxOrbs = 2;
-  fMinAng  = 45;
+  fMaxR  (350),
+  fMaxZ  (450),
 
-  fFitDaughters = true;
-  fFitDecay     = true;
+  fMaxOrbs (0.5),
+  fMinAng  (45),
+  fDelta   (0.1),
 
-  fDelta  = 0.1; //calculate step size depending on helix radius
-}
+  fFitDaughters(kTRUE),
+  fFitDecay    (kTRUE)
+{}
 
 /**************************************************************************/
 /**************************************************************************/
@@ -216,23 +289,32 @@ void TrackList::Init()
   fMarkerColor = 5;
   // fMarker->SetMarkerSize(0.05);
 
-  fRnrMarkers = true;
-  fRnrTracks  = true;
-
-  mRnrStyle = new TrackRnrStyle;
-  SetMainColorPtr(&mRnrStyle->fColor);
+  if (fRnrStyle== 0) fRnrStyle = new TrackRnrStyle;
+  SetMainColorPtr(&fRnrStyle->fColor);
 }
 
-TrackList::TrackList(Int_t n_tracks) :
+TrackList::TrackList(Int_t n_tracks, TrackRnrStyle* rs) :
+  RenderElementListBase(),
   TPolyMarker3D(n_tracks),
-  RenderElementListBase()
+
+  fTitle(),
+
+  fRnrStyle   (rs),
+  fRnrMarkers (kTRUE),
+  fRnrTracks  (kTRUE)
 {
   Init();
 }
 
-TrackList::TrackList(const Text_t* name, Int_t n_tracks) :
+TrackList::TrackList(const Text_t* name, Int_t n_tracks, TrackRnrStyle* rs) :
+  RenderElementListBase(),
   TPolyMarker3D(n_tracks),
-  RenderElementListBase()
+  
+  fTitle(),
+
+  fRnrStyle   (rs),
+  fRnrMarkers (kTRUE),
+  fRnrTracks  (kTRUE)
 {
   Init();
   SetName(name);
@@ -256,7 +338,7 @@ void TrackList::Paint(Option_t* option)
       TPolyMarker3D::Paint(option);
     }
     if(fRnrTracks) {
-      for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
+      for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
        if((*i)->GetRnrElement())
          (*i)->GetObject()->Paint(option);
       }
@@ -293,7 +375,7 @@ void TrackList::SetRnrTracks(Bool_t rnr)
 
 void TrackList::MakeTracks()
 {
-  for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
+  for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
     ((Track*)(*i))->MakeTrack();
   }
   gReve->Redraw3D();
@@ -302,8 +384,8 @@ void TrackList::MakeTracks()
 
 void TrackList::MakeMarkers()
 {
-  Reset(fList.size());
-  for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
+  Reset(fChildren.size());
+  for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
     Track& t = *((Track*)(*i));
     if(t.GetN() > 0)
       SetNextPoint(t.fV.x, t.fV.y, t.fV.z);
@@ -314,47 +396,58 @@ void TrackList::MakeMarkers()
 /**************************************************************************/
 /*************************************************************************/
 
+void TrackList::SetWidth(Width_t w)
+{
+  Width_t oldw = fRnrStyle->fWidth;
+  fRnrStyle->fWidth = w;
+  for (lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
+    Track& t = *((Track*)(*i));
+    if (t.GetLineWidth() == oldw)
+      t.SetLineWidth(w);
+  }
+}
+
 void TrackList::SetMaxR(Float_t x)
 {
-  mRnrStyle->fMaxR = x;
+  fRnrStyle->fMaxR = x;
   MakeTracks();
   MakeMarkers();
 }
 
 void TrackList::SetMaxZ(Float_t x)
 {
-  mRnrStyle->fMaxZ = x;
+  fRnrStyle->fMaxZ = x;
   MakeTracks();
   MakeMarkers();
 }
 
 void TrackList::SetMaxOrbs(Float_t x)
 {
-  mRnrStyle->fMaxOrbs = x;
+  fRnrStyle->fMaxOrbs = x;
   MakeTracks();
 }
 
 void TrackList::SetMinAng(Float_t x)
 {
-  mRnrStyle->fMinAng = x;
+  fRnrStyle->fMinAng = x;
   MakeTracks();
 }
 
 void TrackList::SetDelta(Float_t x)
 {
-  mRnrStyle->fDelta = x;
+  fRnrStyle->fDelta = x;
   MakeTracks();
 }
 
 void TrackList::SetFitDaughters(Bool_t x)
 {
-  mRnrStyle->fFitDaughters = x;
+  fRnrStyle->fFitDaughters = x;
   MakeTracks();
 }
 
 void TrackList::SetFitDecay(Bool_t x)
 {
-  mRnrStyle->fFitDecay = x;
+  fRnrStyle->fFitDecay = x;
   MakeTracks();
 }
 
@@ -367,7 +460,7 @@ void TrackList::SelectByPt(Float_t min_pt, Float_t max_pt)
   Float_t maxptsq = max_pt*max_pt;
   Float_t ptsq;
 
-  for(lpRE_i i=fList.begin(); i!=fList.end(); ++i) {
+  for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
     ptsq = ((Track*)(*i))->fP.Perp2();
     (*i)->SetRnrElement(ptsq >= minptsq && ptsq <= maxptsq);
   }
@@ -375,34 +468,16 @@ void TrackList::SelectByPt(Float_t min_pt, Float_t max_pt)
 
 /**************************************************************************/
 
-#include <TGFrame.h>
-#include <TGDoubleSlider.h>
-#include <TGXYLayout.h>
-
-void TrackList::MakePtScrollbar()
+void TrackList::ImportHits()
 {
-  TGMainFrame* mf = new TGMainFrame(gClient->GetRoot(), 320, 60);
-
-  TGDoubleHSlider* hs = new TGDoubleHSlider(mf);
-  hs->SetRange(0.2, 10);
-  hs->SetPosition(0.2, 10);
-  hs->Resize(300, 25);
-  mf->AddFrame(hs, new TGLayoutHints(kLHintsCenterX, 10, 10, 10, 10));
-
-  hs->Connect("PositionChanged()", "Reve::TrackList",
-             this, "HandlePtScrollEvent()");
-
-  mf->SetWindowName("Pt Selector");
-  mf->MapSubwindows();
-  mf->Resize(mf->GetDefaultSize()); // this is used here to init layout algorithm
-  mf->MapWindow();
+  for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
+    ((Track*)(*i))->ImportHits();
+  }
 }
 
-void TrackList::HandlePtScrollEvent()
+void TrackList::ImportClusters()
 {
-  TGDoubleHSlider* hs = (TGDoubleHSlider*)gTQSender;
-
-  Float_t min = hs->GetMinPosition(), max = hs->GetMaxPosition();
-  printf("hslidor min=%f max=%f\n", min, max);
-  SelectByPt(min, max);
+  for(lpRE_i i=fChildren.begin(); i!=fChildren.end(); ++i) {
+    ((Track*)(*i))->ImportClusters();
+  }
 }