NLT_trackcount_init.C - add track-fitter as a top-level object.
[u/mrichter/AliRoot.git] / EVE / alice-macros / primary_vertex.C
1 // $Id$
2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
3
4 /**************************************************************************
5  * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 TPolyMarker3D* make_vertex_marker(AliESDVertex* v, const Text_t* name )
11 {
12   Double_t x[3], e[3];
13   v->GetXYZ(x);
14   v->GetSigmaXYZ(e);
15
16   printf("%16s: %f %f %f   -   %f %f %f\n", name,
17          x[0], x[1], x[2], e[0], e[1], e[2]);
18
19   TPolyMarker3D* m = new TPolyMarker3D(1);
20   m->SetName(name);
21   m->SetPoint(0, x[0], x[1], x[2]);
22
23   return m;
24 }
25
26 TEveBoxSet* make_vertex_boxes(AliESDVertex* v)
27 {
28   Double_t x[3], e[3];
29   v->GetXYZ(x);
30   v->GetSigmaXYZ(e);
31
32   TEveBoxSet* bs;
33
34   bs = new TEveBoxSet("+- 10 x 10 x 20mm");
35   bs->SetRenderMode(TEveBoxSet::RM_TEveLine);
36   bs->AddBox(Box(-1, x[0], x[1], x[2], 1, 1, 2));
37   bs->SetMainColor((Color_t) 2);
38   gEve->AddElement(bs);
39
40   bs = new TEveBoxSet("+- 30 sigma_r x 10 sigma_z");
41   bs->SetRenderMode(TEveBoxSet::RM_TEveLine);
42   bs->AddBox(Box(-1, x[0], x[1], x[2], 30*e[0], 30*e[1], 10*e[2]));
43   bs->SetMainColor((Color_t) 3);
44   gEve->AddElement(bs);
45
46   gEve->Redraw3D();
47 }
48
49 void register_vertex_marker(TPolyMarker3D* m)
50 {
51   Color_t* colp = TEveUtil::FindColorVar(m, "fMarkerColor");
52   TEveElementObjectPtr* rnrEl = new TEveElementObjectPtr(m, *colp);
53   gEve->AddElement(rnrEl);
54   gEve->Redraw3D();
55 }
56
57 void primary_vertex_primitive(Bool_t showSPD=kTRUE, Bool_t showBoxes=kFALSE)
58 {
59   AliESDEvent* esd = AliEveEventManager::AssertESD();
60
61   AliESDVertex*  pv  = esd->GetPrimaryVertex();
62   TPolyMarker3D* pvm = make_vertex_marker(pv, "Primary Vertex");
63   pvm->SetMarkerStyle(5);
64   pvm->SetMarkerColor(5);
65   pvm->SetMarkerSize(1.4);
66   register_vertex_marker(pvm);
67
68   if (showSPD) {
69     AliESDVertex*  spdv  = esd->GetVertex();
70     TPolyMarker3D* spdvm = make_vertex_marker(spdv, "SPD Vertex");
71     spdvm->SetMarkerStyle(2);
72     spdvm->SetMarkerColor(6);
73     register_vertex_marker(spdvm);
74   }
75
76   if (showBoxes)
77     make_vertex_boxes(pv);
78 }
79
80 /******************************************************************************/
81
82 TEveStraightLineSet* ESDvertex_lineset(AliESDVertex* v, const Text_t* name)
83 {
84   Double_t x[3], e[3];
85   v->GetXYZ(x); v->GetSigmaXYZ(e);
86   printf("%16s: %f %f %f   -   %f %f %f\n", name,
87          x[0], x[1], x[2], e[0], e[1], e[2]);
88
89   // dimensions
90   TEveStraightLineSet* ls = new TEveStraightLineSet();
91   ls->SetName(name);
92   ls->AddLine(e[0], 0,    0,   -e[0], 0,    0);
93   ls->AddLine(0,    e[1], 0,    0,   -e[1], 0);
94   ls->AddLine(0,    0,    e[2], 0,    0,   -e[2]);
95
96   // centre marker
97   ls->AddMarker(0, 0.5);
98   ls->RefMainTrans().SetPos(x);
99   return ls;
100 }
101
102 void make_vertex_ellipses(TEveStraightLineSet* ls, AliESDVertex* v, Bool_t ellipseUseSigma)
103 {
104   Double_t x[3], e[3];
105   v->GetXYZ(x); v->GetSigmaXYZ(e);
106
107   if (ellipseUseSigma)
108   {
109     e[0] *= 30; e[1] *= 30; e[2] *= 10;
110     ls->SetMarkerStyle(5);
111     ls->SetMarkerColor(5);
112     ls->SetMarkerSize(1.4);
113     ls->SetLineColor(7);
114     ls->SetTitle("+- 30 sigma_r x 10 sigma_z");
115   }
116   else
117   {
118     e[0] = 1; e[1] = 1; e[2] = 2;
119     ls->SetMarkerStyle(2);
120     ls->SetMarkerColor(6);
121     ls->SetLineColor(6);
122     ls->SetTitle("+- 10 x 10 x 20mm");
123   }
124
125   Int_t N = 32;
126   Float_t S = 2*TMath::Pi()/N;
127   Float_t b, a, phi;
128
129   a = e[0]; b = e[1];
130   for (Int_t i = 0; i<N; i++)
131     ls->AddLine(a*TMath::Cos(i*S)  , b*TMath::Sin(i*S)  , 0,
132                 a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S), 0);
133
134   a = e[0]; b = e[2];
135   for (Int_t i = 0; i<N; i++)
136     ls->AddLine(a*TMath::Cos(i*S)  , 0, b*TMath::Sin(i*S),
137                 a*TMath::Cos(i*S+S), 0, b*TMath::Sin(i*S+S));
138
139   a = e[1]; b = e[2];
140   for (Int_t i = 0; i<N; i++)
141     ls->AddLine(0, a*TMath::Cos(i*S)  ,  b*TMath::Sin(i*S),
142                 0, a*TMath::Cos(i*S+S),  b*TMath::Sin(i*S+S));
143 }
144
145 void primary_vertex(Bool_t showSPD=kTRUE, Bool_t rnrEllipse=kTRUE)
146 {
147   AliESDEvent* esd = AliEveEventManager::AssertESD();
148   TEveStraightLineSet* ls;
149
150   AliESDVertex* PV  =  esd->GetPrimaryVertex();
151   ls = ESDvertex_lineset(PV, "Primary Vertex");
152   if (rnrEllipse) make_vertex_ellipses(ls, PV, kTRUE);
153   gEve->AddElement(ls);
154
155   if (showSPD)
156   {
157     AliESDVertex*  SPDV  = esd->GetVertex();
158     ls = ESDvertex_lineset(SPDV, "SPD Vertex");
159     if (rnrEllipse) make_vertex_ellipses(ls, SPDV, kFALSE);
160     gEve->AddElement(ls);
161   }
162 }