]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/alice-macros/kine_tracks.C
doxy: code cleanup: comments and clarifications
[u/mrichter/AliRoot.git] / EVE / alice-macros / kine_tracks.C
index 3f381538210ac7b20bcfeb11025af93c6e06e548..ced9e58fb75acd44b60548f3a0b7dfa198288f1f 100644 (file)
@@ -7,21 +7,92 @@
  * full copyright notice.                                                 *
  **************************************************************************/
 
-// Import tracks from kinematics-tree / particle-stack.
-// Preliminary/minimal solution.
-
-#include "TParticlePDG.h"
+/// \ingroup evemacros
+/// \file kine_tracks.C
+/// \brief Import tracks from kinematics-tree / particle-stack.
+///
+/// Preliminary/minimal solution.
+///
+/// \author Matevz Tadel & Alja Mrak-Tadel: 2006, 2007 
+
+#if !defined(__CINT__) || defined(__MAKECINT__)
+#include <TParticle.h>
+#include <TParticlePDG.h>
+#include <TEveManager.h>
+#include <TEveTrackPropagator.h>
+
+#include <AliMagF.h>
+#include <AliStack.h>
+#include <AliRunLoader.h>
+#include <AliEveEventManager.h>
+#include <AliEveMagField.h>
+#include <AliEveTrack.h>
+#include <AliEveKineTools.h>
+#endif
+
+// Use magnetic-field as retrieved from GRP.
+Bool_t g_kine_tracks_true_field = kTRUE;
+
+// Use Runge-Kutta track stepper.
+Bool_t g_kine_tracks_rk_stepper = kFALSE;
+
+//==============================================================================
+
+void kine_track_propagator_setup(TEveTrackPropagator* trkProp);
 
 TEveTrackList*
 kine_tracks(Double_t min_pt  = 0,     Double_t min_p   = 0,
            Bool_t   pdg_col = kTRUE, Bool_t   recurse = kTRUE,
-           Bool_t   use_track_refs = kTRUE)
+           Bool_t   use_track_refs = kTRUE);
+
+void kine_daughters(AliEveTrack* parent,  AliStack* stack,
+                   Double_t     min_pt,  Double_t  min_p,
+                   Bool_t       pdg_col, Bool_t    recurse);
+
+void    set_track_color(AliEveTrack* t, Bool_t pdg_col);
+Color_t get_pdg_color(Int_t pdg);
+
+TEveElement*
+kine_track(Int_t  label,
+          Bool_t import_mother = kTRUE, Bool_t import_daughters = kTRUE,
+          Bool_t pdg_col       = kTRUE, Bool_t recurse          = kTRUE,
+           TEveElement* cont = 0);
+
+void kine_hide_neutrals(TEveElement* el=0, Int_t level=0);
+
+//==============================================================================
+
+void kine_track_propagator_setup(TEveTrackPropagator* trkProp)
+{
+  AliMagF* fld = AliEveEventManager::AssertMagField();
+
+  if (g_kine_tracks_true_field)
+  {
+    trkProp->SetMagFieldObj(new AliEveMagField(fld));
+  }
+  else
+  {
+    trkProp->SetMagField(-0.1*fld->SolenoidField());
+  }
+  if (g_kine_tracks_rk_stepper)
+  {
+    trkProp->SetStepper(TEveTrackPropagator::kRungeKutta);
+  }
+}
+
+//==============================================================================
+
+TEveTrackList*
+kine_tracks(Double_t min_pt,  Double_t min_p,
+           Bool_t   pdg_col, Bool_t   recurse,
+           Bool_t   use_track_refs)
 {
   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
   rl->LoadKinematics();
   AliStack* stack = rl->Stack();
-  if (!stack) {
-    Error("kine_tracks.C", "can not get kinematics.");
+  if (!stack)
+  {
+    Error("kine_tracks", "can not get kinematics.");
     return 0;
   }
 
@@ -29,13 +100,12 @@ kine_tracks(Double_t min_pt  = 0,     Double_t min_p   = 0,
 
   TEveTrackList* cont = new TEveTrackList("Kine Tracks");
   cont->SetMainColor(3);
-  TEveTrackPropagator* rnrStyle = cont->GetPropagator();
-  AliMagF* fld = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
-  rnrStyle->SetMagField(fld ? -0.1*fld->SolenoidField() : 0);
+  TEveTrackPropagator* trkProp = cont->GetPropagator();
+
+  kine_track_propagator_setup(trkProp);
 
   gEve->AddElement(cont);
   Int_t count = 0;
-  Int_t N = stack->GetNtrack();
   Int_t Np = stack->GetNprimary();
   for (Int_t i = 0; i < Np; ++i)
   {
@@ -45,7 +115,7 @@ kine_tracks(Double_t min_pt  = 0,     Double_t min_p   = 0,
       if (p->Pt() < min_pt && p->P() < min_p) continue;
 
       ++count;
-      TEveTrack* track = new TEveTrack(p, i, rnrStyle);
+      AliEveTrack* track = new AliEveTrack(p, i, trkProp);
 
       //PH The line below is replaced waiting for a fix in Root
       //PH which permits to use variable siza arguments in CINT
@@ -77,7 +147,7 @@ kine_tracks(Double_t min_pt  = 0,     Double_t min_p   = 0,
   if (use_track_refs && rl->LoadTrackRefs() == 0)
   {
     kt.SetTrackReferences(cont, rl->TreeTR(), recurse);
-    rnrStyle->SetEditPathMarks(kTRUE);
+    trkProp->SetEditPathMarks(kTRUE);
   }
   kt.SortPathMarks(cont, recurse);
 
@@ -93,7 +163,7 @@ kine_tracks(Double_t min_pt  = 0,     Double_t min_p   = 0,
   return cont;
 }
 
-void kine_daughters(TEveTrack* parent,  AliStack* stack,
+void kine_daughters(AliEveTrack* parent,  AliStack* stack,
                    Double_t     min_pt,  Double_t  min_p,
                    Bool_t       pdg_col, Bool_t    recurse)
 {
@@ -106,7 +176,7 @@ void kine_daughters(TEveTrack* parent,  AliStack* stack,
       TParticle* dp = stack->Particle(d);
       if (dp->Pt() < min_pt && dp->P() < min_p) continue;
 
-      TEveTrack* dtrack = new TEveTrack(dp, d, rs);
+      AliEveTrack* dtrack = new AliEveTrack(dp, d, rs);
       char form[1000];
       sprintf(form,"%s [%d]", dp->GetName(), d);
       dtrack->SetName(form);
@@ -121,7 +191,9 @@ void kine_daughters(TEveTrack* parent,  AliStack* stack,
   }
 }
 
-Color_t set_track_color(TEveTrack* t, Bool_t pdg_col)
+//==============================================================================
+
+void set_track_color(AliEveTrack* t, Bool_t pdg_col)
 {
   if (pdg_col)
     t->SetMainColor(get_pdg_color(t->GetPdg()));
@@ -157,7 +229,8 @@ Color_t get_pdg_color(Int_t pdg)
   // mesons and barions
   else if (pdga < 100000) {
     Int_t i  = pdga;
-    Int_t i0 = i%10; i /= 10;
+    // Int_t i0 = i%10;  // Not used at the moment.
+    i /= 10;
     Int_t i1 = i%10; i /= 10;
     Int_t i2 = i%10; i /= 10;
     Int_t i3 = i%10; i /= 10;
@@ -177,14 +250,13 @@ Color_t get_pdg_color(Int_t pdg)
   return col;
 }
 
-/******************************************************************************/
+//==============================================================================
 
 TEveElement*
 kine_track(Int_t  label,
-          Bool_t import_mother    = kTRUE, Bool_t import_daughters = kTRUE,
-          Bool_t pdg_col          = kTRUE, Bool_t recurse          = kTRUE,
-           TEveElement* cont = 0)
-
+          Bool_t import_mother, Bool_t import_daughters,
+          Bool_t pdg_col,       Bool_t recurse,
+           TEveElement* cont)
 {
   // Create mother and daughters tracks with given label.
   // mother     -> particle with label
@@ -198,6 +270,11 @@ kine_track(Int_t  label,
   AliRunLoader* rl =  AliEveEventManager::AssertRunLoader();
   rl->LoadKinematics();
   AliStack* stack = rl->Stack();
+  if (!stack)
+  {
+     Warning("kine_track", "can not get kinematics.");
+    return 0;
+  }
   if (label >= stack->GetNtrack())
   {
     Warning("kine_track", "label out of range.");
@@ -208,33 +285,31 @@ kine_track(Int_t  label,
 
   if (import_mother || (import_daughters && p->GetNDaughters()))
   {
-    TEveTrack* toptrack = 0;
-    TEveTrackList* tracklist = 0;
     TEveTrackPropagator* rs = 0;
 
     if (cont == 0)
     {
       TEveTrackList* tlist = new TEveTrackList
-       (Form("Kinematics of %d", label, p->GetNDaughters()));
+       (Form("Kinematics of %d %d", label, p->GetNDaughters()));
       cont = tlist;
 
-      TEveTrackPropagator* rnrStyle = tlist->GetPropagator();
-      // !!! Watch the '-', apparently different sign convention then for ESD.
-      AliMagF* fld = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
-      rnrStyle->SetMagField( fld ? -0.1*fld->SolenoidField() : 0 );
+      TEveTrackPropagator* trkProp = tlist->GetPropagator();
+
+      kine_track_propagator_setup(trkProp);
+
       char tooltip[1000];
       sprintf(tooltip,"Ndaughters=%d", p->GetNDaughters());
       tlist->SetTitle(tooltip);
-      rnrStyle->fMaxOrbs = 2;
-      rnrStyle->SetEditPathMarks(kTRUE);
+      trkProp->SetMaxOrbs(2);
+      trkProp->SetEditPathMarks(kTRUE);
 
       gEve->AddElement(cont);
       rs = tlist->GetPropagator();
     }
     else
     {
-      // check if container is TEveTrackList or TEveTrack (has rnr-style)
-      TEveTrack* t = dynamic_cast<TEveTrack*>(cont);
+      // check if container is TEveTrackList or AliEveTrack (has rnr-style)
+      AliEveTrack* t = dynamic_cast<AliEveTrack*>(cont);
       if (t) {
        rs = t->GetPropagator();
       } else {
@@ -248,7 +323,7 @@ kine_track(Int_t  label,
 
     if (import_mother)
     {
-      TEveTrack* track = new TEveTrack(p, label, rs);
+      AliEveTrack* track = new AliEveTrack(p, label, rs);
       char form[1000];
       sprintf(form,"%s [%d]", p->GetName(), label);
       track->SetName(form);
@@ -265,7 +340,7 @@ kine_track(Int_t  label,
       for (int d=p->GetFirstDaughter(); d>0 && d<=p->GetLastDaughter(); ++d)
       {
        TParticle* dp = stack->Particle(d);
-       TEveTrack* track = new TEveTrack(dp, d, rs);
+       AliEveTrack* track = new AliEveTrack(dp, d, rs);
        char form[1000];
        sprintf(form,"%s [%d]", dp->GetName(), d);
        track->SetName(form);
@@ -285,3 +360,26 @@ kine_track(Int_t  label,
   return cont;
 }
 
+//==============================================================================
+
+void kine_hide_neutrals(TEveElement* el, Int_t level)
+{
+  if (el == 0)
+  {
+    el = gEve->GetCurrentEvent()->FindChild("Kine Tracks");
+    if (!el)
+      return;
+  }
+
+  TEveTrack* t = dynamic_cast<TEveTrack*>(el);
+  if (t && t->GetCharge() == 0)
+    t->SetRnrSelf(kFALSE);
+
+  for (TEveElement::List_i i = el->BeginChildren(); i != el->EndChildren(); ++i)
+  {
+    kine_hide_neutrals(*i, level + 1);
+  }
+
+  if (level == 0)
+    gEve->Redraw3D();
+}