In muon-related macros in EVE:
[u/mrichter/AliRoot.git] / EVE / alice-macros / primary_vertex.C
index 99fe06a..360459a 100644 (file)
@@ -7,6 +7,17 @@
  * full copyright notice.                                                 *
  **************************************************************************/
 
+#if !defined(__CINT__) || defined(__MAKECINT__)
+#include <TEveManager.h>
+#include <TEveCompound.h>
+#include <TEveStraightLineSet.h>
+
+#include <EveBase/AliEveEventManager.h>
+
+#include <AliESDEvent.h>
+#include <AliESDVertex.h>
+
+#endif
 
 //==============================================================================
 // Utilities
@@ -35,22 +46,27 @@ TEveCompound* assert_vertex_parent(const TString& name, Color_t col)
 //==============================================================================
 
 TEveStraightLineSet*
-make_vertex_cross(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
+make_vertex_cross(const AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
 {
   Double_t x[3], e[3];
   v->GetXYZ(x); v->GetSigmaXYZ(e);
 
   TEveStraightLineSet* ls = new TEveStraightLineSet("Cross");
+  TString title;
   if (use_sigma)
   {
     e[0] *= fx; e[1] *= fy; e[2] *= fz;
-    ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz));
+    title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz);
   }
   else
   {
     e[0] = fx; e[1] = fy; e[2] = fz;
-    ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
+    title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
   }
+  title += Form("\nx=%.5f, y=%.5f, z=%.5f\nsx=%.5f, sy=%.5f, sz=%.5f",
+               x[0], x[1], x[2], e[0], e[1], e[2]);
+  ls->SetTitle(title);
+
   ls->AddLine(e[0], 0,    0,   -e[0], 0,    0);
   ls->AddLine(0,    e[1], 0,    0,   -e[1], 0);
   ls->AddLine(0,    0,    e[2], 0,    0,   -e[2]);
@@ -60,22 +76,26 @@ make_vertex_cross(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Flo
 }
 
 TEveStraightLineSet*
-make_vertex_ellipse(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
+make_vertex_ellipse(const AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
 {
   Double_t x[3], e[3];
   v->GetXYZ(x); v->GetSigmaXYZ(e);
 
   TEveStraightLineSet* ls = new TEveStraightLineSet("Ellipse");
+  TString title;
   if (use_sigma)
   {
     e[0] *= fx; e[1] *= fy; e[2] *= fz;
-    ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f sigma_z", fx, fy, fz));
+    title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f sigma_z", fx, fy, fz);
   }
   else
   {
     e[0] = fx; e[1] = fy; e[2] = fz;
-    ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
+    title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
   }
+  title += Form("\nx=%.5f, y=%.5f, z=%.5f\nsx=%.5f, sy=%.5f, sz=%.5f",
+               x[0], x[1], x[2], e[0], e[1], e[2]);
+  ls->SetTitle(title);
 
   const Int_t   N = 32;
   const Float_t S = 2*TMath::Pi()/N;
@@ -100,22 +120,27 @@ make_vertex_ellipse(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, F
 }
 
 TEveStraightLineSet*
-make_vertex_box(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
+make_vertex_box(const AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
 {
   Double_t x[3], e[3];
   v->GetXYZ(x); v->GetSigmaXYZ(e);
 
   TEveStraightLineSet* ls = new TEveStraightLineSet("Box");
+  TString title;
   if (use_sigma)
   {
     e[0] *= fx; e[1] *= fy; e[2] *= fz;
-    ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz));
+    title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz);
   }
   else
   {
     e[0] = fx; e[1] = fy; e[2] = fz;
-    ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
+    title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
   }
+  title += Form("\nx=%.5f, y=%.5f, z=%.5f\nsx=%.5f, sy=%.5f, sz=%.5f",
+               x[0], x[1], x[2], e[0], e[1], e[2]);
+  ls->SetTitle(title);
+
   // pos z
   ls->AddLine( e[0],  e[1],  e[2],  e[0], -e[1],  e[2]);
   ls->AddLine( e[0], -e[1],  e[2], -e[0], -e[1],  e[2]);
@@ -145,10 +170,14 @@ TEveStraightLineSet*
 primary_vertex(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
 {
   AliESDEvent  *esd = AliEveEventManager::AssertESD();
-  AliESDVertex *pv  = esd->GetPrimaryVertex();
+  const AliESDVertex *pv  = esd->GetPrimaryVertex();
+  if ( ! pv->GetStatus()) {
+    Info("primary_vertex", "Primary vertex not available.");
+    return 0;
+  }
 
   TEveStraightLineSet* ls = make_vertex_cross(pv, use_sigma, fx, fy, fz);
-  ls->ApplyVizTag("PVTX");
+  ls->ApplyVizTag("REC PVTX");
   assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
   gEve->Redraw3D();
   return ls;
@@ -158,10 +187,14 @@ TEveStraightLineSet*
 primary_vertex_spd(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
 {
   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
-  AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
+  const AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
+  if ( ! spdv->GetStatus()) {
+    Info("primary_vertex_spd", "Primary vertex SPD not available.");
+    return 0;
+  }
 
   TEveStraightLineSet* ls = make_vertex_cross(spdv, use_sigma, fx, fy, fz);
-  ls->ApplyVizTag("PVTX SPD");
+  ls->ApplyVizTag("REC PVTX SPD");
   assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
   gEve->Redraw3D();
   return ls;
@@ -171,10 +204,14 @@ TEveStraightLineSet*
 primary_vertex_tpc(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
 {
   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
-  AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
+  const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
+  if ( ! tpcv->GetStatus()) {
+    Info("primary_vertex_tpc", "Primary vertex TPC not available.");
+    return 0;
+  }
 
   TEveStraightLineSet* ls = make_vertex_cross(tpcv, use_sigma, fx, fy, fz);
-  ls->ApplyVizTag("PVTX TPC");
+  ls->ApplyVizTag("REC PVTX TPC");
   assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
   gEve->Redraw3D();
   return ls;
@@ -188,10 +225,14 @@ TEveStraightLineSet*
 primary_vertex_ellipse(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
 {
   AliESDEvent  *esd = AliEveEventManager::AssertESD();
-  AliESDVertex *pv  = esd->GetPrimaryVertex();
+  const AliESDVertex *pv  = esd->GetPrimaryVertex();
+  if ( ! pv->GetStatus()) {
+    Info("primary_vertex_ellipse", "Primary vertex not available.");
+    return 0;
+  }
 
   TEveStraightLineSet* ls = make_vertex_ellipse(pv, use_sigma, fx, fy, fz);
-  ls->ApplyVizTag("PVTX Ellipse");
+  ls->ApplyVizTag("REC PVTX Ellipse");
   assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
   gEve->Redraw3D();
   return ls;
@@ -201,10 +242,14 @@ TEveStraightLineSet*
 primary_vertex_ellipse_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
 {
   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
-  AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
+  const AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
+  if ( ! spdv->GetStatus()) {
+    Info("primary_vertex_ellipse_spd", "Primary vertex SPD not available.");
+    return 0;
+  }
 
   TEveStraightLineSet* ls = make_vertex_ellipse(spdv, use_sigma, fx, fy, fz);
-  ls->ApplyVizTag("PVTX Ellipse SPD");
+  ls->ApplyVizTag("REC PVTX Ellipse SPD");
   assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
   gEve->Redraw3D();
   return ls;
@@ -214,10 +259,14 @@ TEveStraightLineSet*
 primary_vertex_ellipse_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
 {
   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
-  AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
+  const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
+  if ( ! tpcv->GetStatus()) {
+    Info("primary_vertex_ellipse_tpc", "Primary vertex TPC not available.");
+    return 0;
+  }
 
   TEveStraightLineSet* ls = make_vertex_ellipse(tpcv, use_sigma, fx, fy, fz);
-  ls->ApplyVizTag("PVTX Ellipse TPC");
+  ls->ApplyVizTag("REC PVTX Ellipse TPC");
   assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
   gEve->Redraw3D();
   return ls;
@@ -231,10 +280,14 @@ TEveStraightLineSet*
 primary_vertex_box(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
 {
   AliESDEvent  *esd = AliEveEventManager::AssertESD();
-  AliESDVertex *pv  = esd->GetPrimaryVertex();
+  const AliESDVertex *pv  = esd->GetPrimaryVertex();
+  if ( ! pv->GetStatus()) {
+    Info("primary_vertex_box", "Primary vertex not available.");
+    return 0;
+  }
 
   TEveStraightLineSet* ls = make_vertex_box(pv, use_sigma, fx, fy, fz);
-  ls->ApplyVizTag("PVTX Box");
+  ls->ApplyVizTag("REC PVTX Box");
   assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
   gEve->Redraw3D();
   return ls;
@@ -244,10 +297,14 @@ TEveStraightLineSet*
 primary_vertex_box_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
 {
   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
-  AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
+  const AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
+  if ( ! spdv->GetStatus()) {
+    Info("primary_vertex_box_spd", "Primary vertex SPD not available.");
+    return 0;
+  }
 
   TEveStraightLineSet* ls = make_vertex_box(spdv, use_sigma, fx, fy, fz);
-  ls->ApplyVizTag("PVTX Box SPD");
+  ls->ApplyVizTag("REC PVTX Box SPD");
   assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
   gEve->Redraw3D();
   return ls;
@@ -257,10 +314,14 @@ TEveStraightLineSet*
 primary_vertex_box_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
 {
   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
-  AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
+  const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
+  if ( ! tpcv->GetStatus()) {
+    Info("primary_vertex_box_tpc", "Primary vertex TPC not available.");
+    return 0;
+  }
 
   TEveStraightLineSet* ls = make_vertex_box(tpcv, use_sigma, fx, fy, fz);
-  ls->ApplyVizTag("PVTX Box TPC");
+  ls->ApplyVizTag("REC PVTX Box TPC");
   assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
   gEve->Redraw3D();
   return ls;