]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/alice-macros/esd_tracks.C
From Christian Holm Christensen.
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_tracks.C
index bc7027263652bc3b5bc74d27f28ffa4524a808ff..61462d2643e03f4e107a7198e21b55fbd4bc09c3 100644 (file)
@@ -1,62 +1,91 @@
 // $Id$
-
-Reve::Track* esd_make_track(Reve::TrackRnrStyle*   rnrStyle,
-                           Int_t                  index,
-                           AliESDtrack*           at,
-                           AliExternalTrackParam* tp=0)
+// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
+
+/**************************************************************************
+ * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
+ * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
+ * full copyright notice.                                                 *
+ **************************************************************************/
+
+TEveTrack* esd_make_track(TEveTrackPropagator*   rnrStyle,
+                         Int_t                  index,
+                         AliESDtrack*           at,
+                         AliExternalTrackParam* tp=0)
 {
   // Helper function
-  Double_t        pbuf[3], vbuf[3];
-  Reve::RecTrack  rt;
+  Double_t      pbuf[3], vbuf[3];
+  TEveRecTrack  rt;
 
   if(tp == 0) tp = at;
 
-  rt.label  = at->GetLabel();
-  rt.index  = index;
-  rt.status = (Int_t) at->GetStatus();
-  rt.sign   = tp->GetSign();
+  rt.fLabel  = at->GetLabel();
+  rt.fIndex  = index;
+  rt.fStatus = (Int_t) at->GetStatus();
+  rt.fSign   = tp->GetSign();
   tp->GetXYZ(vbuf);
-  rt.V.Set(vbuf);
+  rt.fV.Set(vbuf);
   tp->GetPxPyPz(pbuf);
-  rt.P.Set(pbuf);
+  rt.fP.Set(pbuf);
   Double_t ep = at->GetP(), mc = at->GetMass();
-  rt.beta = ep/TMath::Sqrt(ep*ep + mc*mc);
-  Reve::Track* track = new Reve::Track(&rt, rnrStyle);
+  rt.fBeta = ep/TMath::Sqrt(ep*ep + mc*mc);
+
+  TEveTrack* track = new TEveTrack(&rt, rnrStyle);
   //PH The line below is replaced waiting for a fix in Root
   //PH which permits to use variable siza arguments in CINT
   //PH on some platforms (alphalinuxgcc, solariscc5, etc.)
-  //PH  track->SetName(Form("ESDTrack %d", rt.label));
+  //PH  track->SetName(Form("ESDTrack %d", rt.fLabel));
   //PH  track->SetTitle(Form("pT=%.3f, pZ=%.3f; V=(%.3f, %.3f, %.3f)",
-  //PH                rt.sign*TMath::Hypot(rt.P.x, rt.P.y), rt.P.z,
-  //PH                rt.V.x, rt.V.y, rt.V.z));
+  //PH                rt.fSign*TMath::Hypot(rt.fP.fX, rt.fP.fY), rt.fP.fZ,
+  //PH                rt.fV.fX, rt.fV.fY, rt.fV.fZ));
   char form[1000];
-  sprintf(form,"ESDTrack %d", rt.label);
+  sprintf(form,"TEveTrack %d", rt.fIndex);
   track->SetName(form);
-  sprintf(form,"Index=%d, Label=%d\npT=%.3f, pZ=%.3f\nV=(%.3f, %.3f, %.3f)",
-         index, rt.label,
-         rt.sign*TMath::Hypot(rt.P.x, rt.P.y), rt.P.z,
-         rt.V.x, rt.V.y, rt.V.z);
-  track->SetTitle(form);
+  track->SetStdTitle();
   return track;
 }
 
-Bool_t gkFixFailedITSExtr = kFALSE;
+void esd_track_add_param(TEveTrack* track, AliExternalTrackParam* tp)
+{
+  if (tp == 0)
+    return;
+
+  Double_t      pbuf[3], vbuf[3];
+  tp->GetXYZ(vbuf);
+  tp->GetPxPyPz(pbuf);
+
+  TEvePathMark pm(TEvePathMark::kReference);
+  pm.fV.Set(vbuf);
+  pm.fP.Set(pbuf);
+  track->AddPathMark(pm);
+}
+
+// Use inner-tpc track params when its refit failed.
+Bool_t gkFixFailedITSExtr    = kFALSE;
 
-Reve::TrackList* esd_tracks(Double_t min_pt=0.1, Double_t max_pt=100)
+// Also show lines as generated by AliESDtrack.
+Bool_t gkMakeTrackParamLines = kFALSE;
+
+TEveTrackList* esd_tracks(Double_t min_pt=0.1, Double_t max_pt=100)
 {
-  AliESDEvent* esd = Alieve::Event::AssertESD();
+  AliESDEvent* esd = AliEveEventManager::AssertESD();
 
   Double_t minptsq = min_pt*min_pt;
   Double_t maxptsq = max_pt*max_pt;
   Double_t ptsq;
 
-  Reve::TrackList* cont = new Reve::TrackList("ESD Tracks"); 
+  TEveTrackList* cont = new TEveTrackList("ESD Tracks");
   cont->SetMainColor(Color_t(6));
-  Reve::TrackRnrStyle* rnrStyle = cont->GetRnrStyle();
-  rnrStyle->SetMagField( esd->GetMagneticField() );
+  TEveTrackPropagator* rnrStyle = cont->GetPropagator();
+  rnrStyle->SetMagField( 0.1*esd->GetMagneticField() );
 
-  gReve->AddRenderElement(cont);
+  gEve->AddElement(cont);
+
+  TEveElementList* contLines = 0;
+  if (gkMakeTrackParamLines)
+  {
+    contLines = new TEveElementList("MyTracks");  
+    gEve->AddElement(contLines);
+  }
 
   Int_t    count = 0;
   Double_t pbuf[3];
@@ -74,14 +103,30 @@ Reve::TrackList* esd_tracks(Double_t min_pt=0.1, Double_t max_pt=100)
 
     // If gkFixFailedITSExtr is TRUE (FALSE by default) and
     // if ITS refit failed, take track parameters at inner TPC radius.
+    Bool_t innerTaken = kFALSE;
     AliExternalTrackParam* tp = at;
     if (gkFixFailedITSExtr && !at->IsOn(AliESDtrack::kITSrefit)) {
-       tp = at->GetInnerParam();
+      tp = at->GetInnerParam();
+      innerTaken = kTRUE;
     }
 
-    Reve::Track* track = esd_make_track(rnrStyle, n, at, tp);
+    TEveTrack* track = esd_make_track(rnrStyle, n, at, tp);
     track->SetAttLineAttMarker(cont);
-    gReve->AddRenderElement(track, cont);
+
+    if (!innerTaken) {
+      esd_track_add_param(track, at->GetInnerParam());
+    }
+    // esd_track_add_param(track, at->GetOuterParam());
+
+    gEve->AddElement(track, cont);
+
+    if (gkMakeTrackParamLines) {
+      TEveLine* l = new TEveLine; 
+      l->SetName(Form("Track%d", count));
+      l->SetLineColor((Color_t)5);
+      at->FillPolymarker(l, esd->GetMagneticField(), 0, 250, 5);
+      contLines->AddElement(l);
+    }
   }
 
   //PH The line below is replaced waiting for a fix in Root
@@ -95,35 +140,35 @@ Reve::TrackList* esd_tracks(Double_t min_pt=0.1, Double_t max_pt=100)
 
   cont->MakeTracks();
 
-  gReve->Redraw3D();
+  gEve->Redraw3D();
 
   return cont;
 }
 
-/**************************************************************************/
+/******************************************************************************/
 // esd_tracks_from_array()
-/**************************************************************************/
+/******************************************************************************/
 
-Reve::TrackList* esd_tracks_from_array(TCollection* col, AliESDEvent* esd=0)
+TEveTrackList* esd_tracks_from_array(TCollection* col, AliESDEvent* esd=0)
 {
   // Retrieves AliESDTrack's from collection.
   // See example usage with AliAnalysisTrackCuts in the next function.
 
-  if(esd == 0) esd = Alieve::Event::AssertESD();
+  if (esd == 0) esd = AliEveEventManager::AssertESD();
 
-  Reve::TrackList* cont = new Reve::TrackList("ESD Tracks"); 
+  TEveTrackList* cont = new TEveTrackList("ESD Tracks");
   cont->SetMainColor(Color_t(6));
-  Reve::TrackRnrStyle* rnrStyle = cont->GetRnrStyle();
-  rnrStyle->SetMagField( esd->GetMagneticField() );
+  TEveTrackPropagator* rnrStyle = cont->GetPropagator();
+  rnrStyle->SetMagField( 0.1*esd->GetMagneticField() );
 
-  gReve->AddRenderElement(cont);
+  gEve->AddElement(cont);
 
   Int_t    count = 0;
   TIter    next(col);
   TObject *obj;
-  while((obj = next()) != 0)
+  while ((obj = next()) != 0)
   {
-    if(obj->IsA()->InheritsFrom("AliESDtrack") == kFALSE) {
+    if (obj->IsA()->InheritsFrom("AliESDtrack") == kFALSE) {
       Warning("Object '%s', '%s' is not an AliESDtrack.",
              obj->GetName(), obj->GetTitle());
       continue;
@@ -132,9 +177,9 @@ Reve::TrackList* esd_tracks_from_array(TCollection* col, AliESDEvent* esd=0)
     ++count;
     AliESDtrack* at = (AliESDtrack*) obj;
 
-    Reve::Track* track = esd_make_track(rnrStyle, count, at);
+    TEveTrack* track = esd_make_track(rnrStyle, count, at);
     track->SetAttLineAttMarker(cont);
-    gReve->AddRenderElement(track, cont);
+    gEve->AddElement(track, cont);
   }
 
   //PH The line below is replaced waiting for a fix in Root
@@ -148,14 +193,14 @@ Reve::TrackList* esd_tracks_from_array(TCollection* col, AliESDEvent* esd=0)
 
   cont->MakeTracks();
 
-  gReve->Redraw3D();
+  gEve->Redraw3D();
 
   return cont;
 }
 
 void esd_tracks_alianalcuts_demo()
 {
-  AliESDEvent* esd = Alieve::Event::AssertESD();
+  AliESDEvent* esd = AliEveEventManager::AssertESD();
   gSystem->Load("libANALYSIS");
 
   AliAnalysisTrackCuts atc;
@@ -165,9 +210,9 @@ void esd_tracks_alianalcuts_demo()
   esd_tracks_from_array(atc.GetAcceptedParticles(esd), esd);
 }
 
-/**************************************************************************/
+/******************************************************************************/
 // esd_tracks_vertex_cut
-/**************************************************************************/
+/******************************************************************************/
 
 Float_t get_sigma_to_vertex(AliESDtrack* esdTrack)
 {
@@ -210,48 +255,48 @@ Float_t get_sigma_to_vertex(AliESDtrack* esdTrack)
   return d;
 }
 
-Reve::RenderElementList* esd_tracks_vertex_cut()
+TEveElementList* esd_tracks_vertex_cut()
 {
   // Import ESD tracks, separate them into five containers according to
   // primary-vertex cut and ITS refit status.
 
-  AliESDEvent* esd = Alieve::Event::AssertESD();
+  AliESDEvent* esd = AliEveEventManager::AssertESD();
 
-  Reve::RenderElementList* cont = new Reve::RenderElementList("ESD Tracks", 0, kTRUE);
-  gReve->AddRenderElement(cont);
-  Reve::TrackList *tl[5];
+  TEveElementList* cont = new TEveElementList("ESD Tracks", 0, kTRUE);
+  gEve->AddElement(cont);
+  TEveTrackList *tl[5];
   Int_t            tc[5];
   Int_t            count = 0;
 
-  tl[0] = new Reve::TrackList("Sigma < 3");
+  tl[0] = new TEveTrackList("Sigma < 3");
   tc[0] = 0;
-  tl[0]->GetRnrStyle()->SetMagField( esd->GetMagneticField() );
+  tl[0]->GetPropagator()->SetMagField( 0.1*esd->GetMagneticField() );
   tl[0]->SetMainColor(Color_t(3));
-  gReve->AddRenderElement(tl[0], cont);
+  gEve->AddElement(tl[0], cont);
 
-  tl[1] = new Reve::TrackList("3 < Sigma < 5");
+  tl[1] = new TEveTrackList("3 < Sigma < 5");
   tc[1] = 0;
-  tl[1]->GetRnrStyle()->SetMagField( esd->GetMagneticField() );
+  tl[1]->GetPropagator()->SetMagField( 0.1*esd->GetMagneticField() );
   tl[1]->SetMainColor(Color_t(7));
-  gReve->AddRenderElement(tl[1], cont);
+  gEve->AddElement(tl[1], cont);
 
-  tl[2] = new Reve::TrackList("5 < Sigma");
+  tl[2] = new TEveTrackList("5 < Sigma");
   tc[2] = 0;
-  tl[2]->GetRnrStyle()->SetMagField( esd->GetMagneticField() );
+  tl[2]->GetPropagator()->SetMagField( 0.1*esd->GetMagneticField() );
   tl[2]->SetMainColor(Color_t(46));
-  gReve->AddRenderElement(tl[2], cont);
+  gEve->AddElement(tl[2], cont);
 
-  tl[3] = new Reve::TrackList("no ITS refit; Sigma < 5");
+  tl[3] = new TEveTrackList("no ITS refit; Sigma < 5");
   tc[3] = 0;
-  tl[3]->GetRnrStyle()->SetMagField( esd->GetMagneticField() );
+  tl[3]->GetPropagator()->SetMagField( 0.1*esd->GetMagneticField() );
   tl[3]->SetMainColor(Color_t(41));
-  gReve->AddRenderElement(tl[3], cont);
+  gEve->AddElement(tl[3], cont);
 
-  tl[4] = new Reve::TrackList("no ITS refit; Sigma > 5");
+  tl[4] = new TEveTrackList("no ITS refit; Sigma > 5");
   tc[4] = 0;
-  tl[4]->GetRnrStyle()->SetMagField( esd->GetMagneticField() );
+  tl[4]->GetPropagator()->SetMagField( 0.1*esd->GetMagneticField() );
   tl[4]->SetMainColor(Color_t(48));
-  gReve->AddRenderElement(tl[4], cont);
+  gEve->AddElement(tl[4], cont);
 
   for (Int_t n=0; n<esd->GetNumberOfTracks(); n++)
   {
@@ -273,25 +318,25 @@ Reve::RenderElementList* esd_tracks_vertex_cut()
       ti = (ti == 2) ? 4 : 3;
     }
 
-    Reve::TrackList* tlist = tl[ti];
+    TEveTrackList* tlist = tl[ti];
     ++tc[ti];
     ++count;
 
-    Reve::Track* track = esd_make_track(tlist->GetRnrStyle(), n, at, tp);
-    track->SetAttLineAttMarker(tlist);    
+    TEveTrack* track = esd_make_track(tlist->GetPropagator(), n, at, tp);
+    track->SetAttLineAttMarker(tlist);
 
     //PH The line below is replaced waiting for a fix in Root
     //PH which permits to use variable siza arguments in CINT
     //PH on some platforms (alphalinuxgcc, solariscc5, etc.)
     //PH    track->SetName(Form("track %d, sigma=%5.3f", at->GetLabel(), s));
     char form[1000];
-    sprintf(form,"Track lbl=%d, sigma=%5.3f", at->GetLabel(), s);
+    sprintf(form,"TEveTrack idx=%d, sigma=%5.3f", at->GetID(), s);
     track->SetName(form);
-    gReve->AddRenderElement(track, tlist);
+    gEve->AddElement(track, tlist);
   }
 
   for (Int_t ti=0; ti<5; ++ti) {
-    Reve::TrackList* tlist = tl[ti];
+    TEveTrackList* tlist = tl[ti];
     //PH The line below is replaced waiting for a fix in Root
     //PH which permits to use variable siza arguments in CINT
     //PH on some platforms (alphalinuxgcc, solariscc5, etc.)
@@ -314,7 +359,7 @@ Reve::RenderElementList* esd_tracks_vertex_cut()
   sprintf(form,"N all tracks = %d", count);
   cont->SetTitle(form);
   cont->UpdateItems();
-  gReve->Redraw3D();
+  gEve->Redraw3D();
 
   return cont;
 }