]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/alice-macros/esd_tracks.C
Another histos for lumi
[u/mrichter/AliRoot.git] / EVE / alice-macros / esd_tracks.C
index ff9e06e38ad4863a459e620563695689c17fcd9a..9e242ac9f43aee2e4fa45fd07efe9191efb094b6 100644 (file)
@@ -1,4 +1,4 @@
-// $Id$
+// $Id: esd_tracks.C 57748 2012-07-09 09:27:23Z quark $
 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
 
 /**************************************************************************
@@ -8,29 +8,26 @@
  **************************************************************************/
 
 #if !defined(__CINT__) || defined(__MAKECINT__)
-
 #include <TString.h>
 #include <TSystem.h>
 #include <TROOT.h>
 #include <TMath.h>
 #include <TGListTree.h>
-
 #include <TEveVSDStructs.h>
 #include <TEveManager.h>
 #include <TEveTrackPropagator.h>
 
-#include <EveBase/AliEveTrack.h>
-#include <EveBase/AliEveTrackCounter.h>
-#include <EveBase/AliEveMagField.h>
-#include <EveBase/AliEveEventManager.h>
-
-#include <AliESDEvent.h>
 #include <AliESDtrackCuts.h>
+#include <AliPWG0Helper.h>
+#include <AliESDEvent.h>
+#include <AliESDfriend.h>
 #include <AliESDtrack.h>
+#include <AliESDfriendTrack.h>
 #include <AliExternalTrackParam.h>
-
-#include <PWG0/AliPWG0Helper.h>
-
+#include <AliEveTrack.h>
+#include <AliEveTrackCounter.h>
+#include <AliEveMagField.h>
+#include <AliEveEventManager.h>
 #endif
 
 
@@ -137,6 +134,69 @@ void esd_track_add_param(AliEveTrack* track, const AliExternalTrackParam* tp)
 
 //==============================================================================
 
+AliEveTrack* esd_make_track_TPC(AliESDtrack *at, AliESDfriendTrack* aft, TEveTrackList* cont)
+{
+  // Make a TPC track representation and put it into given container.
+
+  AliEveTrack* track = new AliEveTrack(at, cont->GetPropagator());
+  track->SetAttLineAttMarker(cont);
+  track->SetName(Form("AliEveTrack %d", at->GetID()));
+  track->SetElementTitle(esd_track_title(at));
+  track->SetSourceObject(at);
+
+  // Add inner/outer track parameters as start point and pathmark.
+  if (at->GetInnerParam()) track->SetStartParams(at->GetInnerParam());
+  else return NULL;
+  if (aft->GetTPCOut()) esd_track_add_param(track, aft->GetTPCOut());
+  else return NULL;
+
+  return track;
+}
+
+AliEveTrack* esd_make_track_ITS_standalone(AliESDtrack *at, AliESDfriendTrack* aft, TEveTrackList* cont)
+{
+  // Make a ITS standalone track representation and put it into given container.
+
+  if ( !(!at->IsOn(AliESDtrack::kTPCin) &&
+          at->IsOn(AliESDtrack::kITSout)) ) return NULL; //only ITS standalone
+  AliEveTrack* track = new AliEveTrack(at, cont->GetPropagator());
+  track->SetAttLineAttMarker(cont);
+  track->SetName(Form("AliEveTrack %d", at->GetID()));
+  track->SetElementTitle(esd_track_title(at));
+  track->SetSourceObject(at);
+
+  // Add inner/outer track parameters as path-marks.
+  if (aft->GetITSOut())
+  {
+    esd_track_add_param(track, aft->GetITSOut());
+  }
+  else return NULL;
+
+  return track;
+}
+
+AliEveTrack* esd_make_track_ITS(AliESDtrack *at, AliESDfriendTrack* aft, TEveTrackList* cont)
+{
+  // Make a ITS track representation and put it into given container.
+
+  if ( (!at->IsOn(AliESDtrack::kTPCin) &&
+         at->IsOn(AliESDtrack::kITSout)) ) return NULL; //ignore ITS standalone
+  AliEveTrack* track = new AliEveTrack(at, cont->GetPropagator());
+  track->SetAttLineAttMarker(cont);
+  track->SetName(Form("AliEveTrack %d", at->GetID()));
+  track->SetElementTitle(esd_track_title(at));
+  track->SetSourceObject(at);
+
+  // Add inner/outer track parameters as path-marks.
+  if (aft->GetITSOut())
+  {
+    esd_track_add_param(track, aft->GetITSOut());
+  }
+  else return NULL;
+
+  return track;
+}
+
 AliEveTrack* esd_make_track(AliESDtrack *at, TEveTrackList* cont)
 {
   // Make a standard track representation and put it into given container.
@@ -178,6 +238,106 @@ AliEveTrack* esd_make_track(AliESDtrack *at, TEveTrackList* cont)
 // esd_tracks()
 //==============================================================================
 
+TEveTrackList* esd_tracks_TPC()
+{
+  AliESDEvent* esd = AliEveEventManager::AssertESD();
+  AliESDfriend* esd_friend = AliEveEventManager::AssertESDfriend();
+
+  TEveTrackList* cont = new TEveTrackList("TPC Tracks");
+  cont->SetMainColor(kMagenta);
+
+  esd_track_propagator_setup(cont->GetPropagator(),
+                            0.1*esd->GetMagneticField(), 520);
+
+  gEve->AddElement(cont);
+
+  Int_t count = 0;
+  for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
+  {
+    ++count;
+    if (!esd->GetTrack(n)) continue;
+    if (!esd_friend->GetTrack(n)) continue;
+    AliEveTrack* track = esd_make_track_TPC(esd->GetTrack(n), esd_friend->GetTrack(n), cont);
+    if (!track) continue;
+
+    cont->AddElement(track);
+  }
+  cont->SetTitle(Form("N=%d", count));
+  cont->MakeTracks();
+
+  gEve->Redraw3D();
+
+  return cont;
+}
+
+TEveTrackList* esd_tracks_ITS()
+{
+  AliESDEvent* esd = AliEveEventManager::AssertESD();
+  AliESDfriend* esd_friend = AliEveEventManager::AssertESDfriend();
+
+  TEveTrackList* cont = new TEveTrackList("ITS Tracks");
+  cont->SetMainColor(kMagenta+3);
+
+  esd_track_propagator_setup(cont->GetPropagator(),
+                            0.1*esd->GetMagneticField(), 520);
+  cont->GetPropagator()->SetMaxR(85.0);
+  cont->SetLineWidth(1);
+
+  gEve->AddElement(cont);
+
+  Int_t count = 0;
+  for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
+  {
+    ++count;
+    if (!esd->GetTrack(n)) continue;
+    if (!esd_friend->GetTrack(n)) continue;
+    AliEveTrack* track = esd_make_track_ITS(esd->GetTrack(n), esd_friend->GetTrack(n), cont);
+    if (!track) continue;
+
+    cont->AddElement(track);
+  }
+  cont->SetTitle(Form("N=%d", count));
+  cont->MakeTracks();
+
+  gEve->Redraw3D();
+
+  return cont;
+}
+
+TEveTrackList* esd_tracks_ITS_standalone()
+{
+  AliESDEvent* esd = AliEveEventManager::AssertESD();
+  AliESDfriend* esd_friend = AliEveEventManager::AssertESDfriend();
+
+  TEveTrackList* cont = new TEveTrackList("ITS Standalone Tracks");
+  cont->SetMainColor(kBlue);
+
+  esd_track_propagator_setup(cont->GetPropagator(),
+                            0.1*esd->GetMagneticField(), 520);
+  cont->GetPropagator()->SetMaxR(85.0);
+  cont->SetLineWidth(1);
+
+  gEve->AddElement(cont);
+
+  Int_t count = 0;
+  for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
+  {
+    ++count;
+    if (!esd->GetTrack(n)) continue;
+    if (!esd_friend->GetTrack(n)) continue;
+    AliEveTrack* track = esd_make_track_ITS_standalone(esd->GetTrack(n), esd_friend->GetTrack(n), cont);
+    if (!track) continue;
+
+    cont->AddElement(track);
+  }
+  cont->SetTitle(Form("N=%d", count));
+  cont->MakeTracks();
+
+  gEve->Redraw3D();
+
+  return cont;
+}
+
 TEveTrackList* esd_tracks()
 {
   AliESDEvent* esd = AliEveEventManager::AssertESD();
@@ -206,11 +366,12 @@ TEveTrackList* esd_tracks()
   return cont;
 }
 
-TEveElementList* esd_tracks_MI()
+TEveTrackList* esd_tracks_MI()
 {
   AliESDEvent* esd = AliEveEventManager::AssertESD();
 
-  TEveElementList* cont = new TEveElementList("ESD Tracks MI");
+  TEveTrackList* cont = new TEveTrackList("ESD Tracks MI");
+  cont->SetLineColor(5);
   gEve->AddElement(cont);
 
   Int_t count = 0;
@@ -218,13 +379,15 @@ TEveElementList* esd_tracks_MI()
   {
     ++count;
     AliESDtrack* at = esd->GetTrack(n);
-    TEveLine* l = new TEveLine; 
-    l->SetLineColor(5);
-    at->FillPolymarker(l, esd->GetMagneticField(), 0, 250, 5);
+    AliEveTrack* l = new AliEveTrack(at, cont->GetPropagator());
     l->SetName(Form("ESDTrackMI %d", at->GetID()));
     l->SetElementTitle(esd_track_title(at));
+    l->SetAttLineAttMarker(cont);
     l->SetSourceObject(at);
 
+    at->FillPolymarker(l, esd->GetMagneticField(), 0, 250, 5);
+
+    l->SetLockPoints(kTRUE);
     cont->AddElement(l);
   }
   cont->SetTitle(Form("N=%d", count));
@@ -340,122 +503,157 @@ Float_t get_sigma_to_vertex(AliESDtrack* esdTrack)
 
 TEveElementList* esd_tracks_by_category()
 {
-  // Import ESD tracks, separate them into several containers
-  // according to primary-vertex cut and ITS&TPC refit status.
-
-  AliESDEvent* esd = AliEveEventManager::AssertESD();
-
-  TEveElementList* cont = new TEveElementList("ESD Tracks by category");
-  gEve->AddElement(cont);
-
-  const Int_t   nCont = 7;
-  const Float_t maxR  = 520;
-  const Float_t magF  = 0.1*esd->GetMagneticField();
-
-  TEveTrackList *tl[nCont];
-  Int_t          tc[nCont];
-  Int_t          count = 0;
-
-  tl[0] = new TEveTrackList("Sigma < 3");
-  tc[0] = 0;
-  esd_track_propagator_setup(tl[0]->GetPropagator(), magF, maxR);
-  tl[0]->SetMainColor(3);
-  cont->AddElement(tl[0]);
-
-  tl[1] = new TEveTrackList("3 < Sigma < 5");
-  tc[1] = 0;
-  esd_track_propagator_setup(tl[1]->GetPropagator(), magF, maxR);
-  tl[1]->SetMainColor(7);
-  cont->AddElement(tl[1]);
-
-  tl[2] = new TEveTrackList("5 < Sigma");
-  tc[2] = 0;
-  esd_track_propagator_setup(tl[2]->GetPropagator(), magF, maxR);
-  tl[2]->SetMainColor(46);
-  cont->AddElement(tl[2]);
-
-  tl[3] = new TEveTrackList("no ITS refit; Sigma < 5");
-  tc[3] = 0;
-  esd_track_propagator_setup(tl[3]->GetPropagator(), magF, maxR);
-  tl[3]->SetMainColor(41);
-  cont->AddElement(tl[3]);
-
-  tl[4] = new TEveTrackList("no ITS refit; Sigma > 5");
-  tc[4] = 0;
-  esd_track_propagator_setup(tl[4]->GetPropagator(), magF, maxR);
-  tl[4]->SetMainColor(48);
-  cont->AddElement(tl[4]);
-
-  tl[5] = new TEveTrackList("no TPC refit");
-  tc[5] = 0;
-  esd_track_propagator_setup(tl[5]->GetPropagator(), magF, maxR);
-  tl[5]->SetMainColor(kRed);
-  cont->AddElement(tl[5]);
-
-  tl[6] = new TEveTrackList("ITS stand-alone");
-  tc[6] = 0;
-  esd_track_propagator_setup(tl[6]->GetPropagator(), magF, maxR);
-  tl[6]->SetMainColor(kMagenta - 9);
-  cont->AddElement(tl[6]);
-
-  for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
-  {
-    AliESDtrack* at = esd->GetTrack(n);
-
-    Float_t s  = get_sigma_to_vertex(at);
-    Int_t   ti;
-    if      (s <  3) ti = 0;
-    else if (s <= 5) ti = 1;
-    else             ti = 2;
-
-    if (at->IsOn(AliESDtrack::kITSin) && ! at->IsOn(AliESDtrack::kTPCin))
-    {
-      ti = 6;
-    }
-    else if (at->IsOn(AliESDtrack::kTPCin) && ! at->IsOn(AliESDtrack::kTPCrefit))
-    {
-      ti = 5;
-    }
-    else if ( ! at->IsOn(AliESDtrack::kITSrefit))
-    {
-      ti = (ti == 2) ? 4 : 3;
-    }
-
-    TEveTrackList* tlist = tl[ti];
-    ++tc[ti];
-    ++count;
-
-    AliEveTrack* track = esd_make_track(at, tlist);
-    track->SetName(Form("ESD Track idx=%d, sigma=%5.3f", at->GetID(), s));
-    tlist->AddElement(track);
-  }
-
-  for (Int_t ti = 0; ti < nCont; ++ti)
-  {
-    TEveTrackList* tlist = tl[ti];
-    tlist->SetName(Form("%s [%d]", tlist->GetName(), tlist->NumChildren()));
-    tlist->SetTitle(Form("N tracks=%d", tc[ti]));
-
-    tlist->MakeTracks();
-
-    Bool_t good_cont = ti <= 1;
-    if (AliEveTrackCounter::IsActive())
-    {
-      AliEveTrackCounter::fgInstance->RegisterTracks(tlist, good_cont);
-    }
-    else
-    {
-      if ( ! good_cont)
-        tlist->SetLineStyle(6);
-    }
-  }
-  cont->SetTitle(Form("N all tracks = %d", count));
-  // ??? The following does not always work:
-  cont->FindListTreeItem(gEve->GetListTree())->SetOpen(kTRUE);
-
-  gEve->Redraw3D();
-
-  return cont;
+   // Import ESD tracks, separate them into several containers
+   // according to primary-vertex cut and ITS&TPC refit status.
+
+   AliESDEvent* esd = AliEveEventManager::AssertESD();
+
+   TEveElementList* cont = new TEveElementList("ESD Tracks by category");
+   gEve->AddElement(cont);
+
+   const Int_t   nCont = 9;
+   const Float_t maxR  = 520;
+   const Float_t magF  = 0.1*esd->GetMagneticField();
+
+   TEveTrackList *tl[nCont];
+   Int_t          tc[nCont];
+   Int_t          count = 0;
+
+   tl[0] = new TEveTrackList("Sigma < 3");
+   tc[0] = 0;
+   esd_track_propagator_setup(tl[0]->GetPropagator(), magF, maxR);
+   tl[0]->SetMainColor(3);
+   cont->AddElement(tl[0]);
+
+   tl[1] = new TEveTrackList("3 < Sigma < 5");
+   tc[1] = 0;
+   esd_track_propagator_setup(tl[1]->GetPropagator(), magF, maxR);
+   tl[1]->SetMainColor(7);
+   cont->AddElement(tl[1]);
+
+   tl[2] = new TEveTrackList("5 < Sigma");
+   tc[2] = 0;
+   esd_track_propagator_setup(tl[2]->GetPropagator(), magF, maxR);
+   tl[2]->SetMainColor(46);
+   cont->AddElement(tl[2]);
+
+   tl[3] = new TEveTrackList("no ITS refit; Sigma < 5");
+   tc[3] = 0;
+   esd_track_propagator_setup(tl[3]->GetPropagator(), magF, maxR);
+   tl[3]->SetMainColor(41);
+   cont->AddElement(tl[3]);
+
+   tl[4] = new TEveTrackList("no ITS refit; Sigma > 5");
+   tc[4] = 0;
+   esd_track_propagator_setup(tl[4]->GetPropagator(), magF, maxR);
+   tl[4]->SetMainColor(48);
+   cont->AddElement(tl[4]);
+
+   tl[5] = new TEveTrackList("no TPC refit");
+   tc[5] = 0;
+   esd_track_propagator_setup(tl[5]->GetPropagator(), magF, maxR);
+   tl[5]->SetMainColor(kRed);
+   cont->AddElement(tl[5]);
+
+   tl[6] = new TEveTrackList("ITS ncl>=3 & SPD Inner");
+   tc[6] = 0;
+   esd_track_propagator_setup(tl[6]->GetPropagator(), magF, maxR);
+   tl[6]->SetMainColor(kGreen);
+   cont->AddElement(tl[6]);
+
+   tl[7] = new TEveTrackList("ITS ncl>=3 & b<3 cm");
+   tc[7] = 0;
+   esd_track_propagator_setup(tl[7]->GetPropagator(), magF, maxR);
+   tl[7]->SetMainColor(kMagenta - 9);
+   cont->AddElement(tl[7]);
+
+   tl[8] = new TEveTrackList("ITS others");
+   tc[8] = 0;
+   esd_track_propagator_setup(tl[8]->GetPropagator(), magF, maxR);
+   tl[8]->SetMainColor(kRed + 2);
+   cont->AddElement(tl[8]);
+
+   for (Int_t n = 0; n < esd->GetNumberOfTracks(); ++n)
+   {
+      AliESDtrack* at = esd->GetTrack(n);
+
+      Float_t s  = get_sigma_to_vertex(at);
+      Int_t   ti;
+      if      (s <  3) ti = 0;
+      else if (s <= 5) ti = 1;
+      else             ti = 2;
+
+      Int_t    nclits;
+      Double_t dtobeam;
+
+      if (at->IsOn(AliESDtrack::kITSin) && ! at->IsOn(AliESDtrack::kTPCin))
+      {
+         UChar_t itsclmap = at->GetITSClusterMap();
+         Bool_t  spdinner = (itsclmap & 3) != 0;
+
+         nclits = 0;
+         for (Int_t iter = 0; iter < 6; ++iter)
+            if (itsclmap & (1 << iter)) nclits ++;
+
+         Double_t xyz[3];
+         at->GetXYZ(xyz);
+         dtobeam = TMath::Hypot(xyz[0], xyz[1]);
+
+         if ((nclits >= 3) && (spdinner))
+            ti = 6;
+         else if ((nclits >= 3) && (dtobeam < 3.0))
+            ti = 7;
+         else
+            ti = 8;
+      }
+      else if (at->IsOn(AliESDtrack::kTPCin) && ! at->IsOn(AliESDtrack::kTPCrefit))
+      {
+         ti = 5;
+      }
+      else if ( ! at->IsOn(AliESDtrack::kITSrefit))
+      {
+         ti = (ti == 2) ? 4 : 3;
+      }
+
+      TEveTrackList* tlist = tl[ti];
+      ++tc[ti];
+      ++count;
+
+      AliEveTrack* track = esd_make_track(at, tlist);
+      if (ti<6)
+         track->SetName(Form("ESD Track idx=%d, sigma=%5.3f", at->GetID(), s));
+      else
+         track->SetName(Form("ESD Track idx=%d, dxy=%5.3f cl=%i", at->GetID(), dtobeam, nclits));
+      tlist->AddElement(track);
+   }
+
+   for (Int_t ti = 0; ti < nCont; ++ti)
+   {
+      TEveTrackList* tlist = tl[ti];
+      tlist->SetName(Form("%s [%d]", tlist->GetName(), tlist->NumChildren()));
+      tlist->SetTitle(Form("N tracks=%d", tc[ti]));
+
+      tlist->MakeTracks();
+
+      //    Bool_t good_cont = ti <= 1;
+      Bool_t good_cont = ((ti == 6) || (ti == 7));
+      if (AliEveTrackCounter::IsActive())
+      {
+         AliEveTrackCounter::fgInstance->RegisterTracks(tlist, good_cont);
+      }
+      else
+      {
+         if ( ! good_cont)
+            tlist->SetLineStyle(6);
+      }
+   }
+   cont->SetTitle(Form("N all tracks = %d", count));
+   // ??? The following does not always work:
+   cont->FindListTreeItem(gEve->GetListTree())->SetOpen(kTRUE);
+
+   gEve->Redraw3D();
+
+   return cont;
 }
 
 
@@ -471,9 +669,9 @@ TEveElementList* esd_tracks_by_anal_cuts()
 
   if (g_esd_tracks_anal_cuts == 0)
   {
-    gSystem->Load("libPWG0base");
-    gROOT->ProcessLine(".L $ALICE_ROOT/PWG0/CreateStandardCuts.C");
-    Int_t mode = AliPWG0Helper::kTPCITS;
+    gSystem->Load("libPWGUDbase");
+    gROOT->ProcessLine(".L $ALICE_ROOT/PWGUD/CreateStandardCuts.C");
+    Int_t mode = AliPWG0Helper::kTPC;
     if (TMath::Abs(esd->GetMagneticField()) > 0.01)
       mode |= AliPWG0Helper::kFieldOn;
     gROOT->ProcessLine(Form("g_esd_tracks_anal_cuts = CreateTrackCuts(%d, kFALSE)", mode));