]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/primary_vertex.C
AliEveEventManager
[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
11 //==============================================================================
12 // Utilities
13 //==============================================================================
14
15 TEveCompound* assert_vertex_parent(const TString& name, Color_t col)
16 {
17   // !!! TEveCompound should have viz-db support ... add in root, then fix here,
18   // that is, remove the color var and pass viz-db tag.
19
20   TEveCompound* parent = dynamic_cast<TEveCompound*>
21     (AliEveEventManager::GetCurrent()->FindChild(name));
22   if (parent == 0)
23   {
24     parent = new TEveCompound(name);
25     parent->OpenCompound();
26     parent->SetMainColor(col);
27     AliEveEventManager::GetMaster()->AddElement(parent);
28   }
29   return parent;
30 }
31
32
33 //==============================================================================
34 // Functions to make a cross / ellipse / box
35 //==============================================================================
36
37 TEveStraightLineSet*
38 make_vertex_cross(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
39 {
40   Double_t x[3], e[3];
41   v->GetXYZ(x); v->GetSigmaXYZ(e);
42
43   TEveStraightLineSet* ls = new TEveStraightLineSet("Cross");
44   if (use_sigma)
45   {
46     e[0] *= fx; e[1] *= fy; e[2] *= fz;
47     ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz));
48   }
49   else
50   {
51     e[0] = fx; e[1] = fy; e[2] = fz;
52     ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
53   }
54   ls->AddLine(e[0], 0,    0,   -e[0], 0,    0);
55   ls->AddLine(0,    e[1], 0,    0,   -e[1], 0);
56   ls->AddLine(0,    0,    e[2], 0,    0,   -e[2]);
57
58   ls->RefMainTrans().SetPos(x);
59   return ls;
60 }
61
62 TEveStraightLineSet*
63 make_vertex_ellipse(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
64 {
65   Double_t x[3], e[3];
66   v->GetXYZ(x); v->GetSigmaXYZ(e);
67
68   TEveStraightLineSet* ls = new TEveStraightLineSet("Ellipse");
69   if (use_sigma)
70   {
71     e[0] *= fx; e[1] *= fy; e[2] *= fz;
72     ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f sigma_z", fx, fy, fz));
73   }
74   else
75   {
76     e[0] = fx; e[1] = fy; e[2] = fz;
77     ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
78   }
79
80   const Int_t   N = 32;
81   const Float_t S = 2*TMath::Pi()/N;
82
83   Float_t a = e[0], b = e[1];
84   for (Int_t i = 0; i<N; i++)
85     ls->AddLine(a*TMath::Cos(i*S)  , b*TMath::Sin(i*S)  , 0,
86                 a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S), 0);
87
88   a = e[0]; b = e[2];
89   for (Int_t i = 0; i<N; i++)
90     ls->AddLine(a*TMath::Cos(i*S)  , 0, b*TMath::Sin(i*S),
91                 a*TMath::Cos(i*S+S), 0, b*TMath::Sin(i*S+S));
92
93   a = e[1]; b = e[2];
94   for (Int_t i = 0; i<N; i++)
95     ls->AddLine(0, a*TMath::Cos(i*S)  ,  b*TMath::Sin(i*S),
96                 0, a*TMath::Cos(i*S+S),  b*TMath::Sin(i*S+S));
97
98   ls->RefMainTrans().SetPos(x);
99   return ls;
100 }
101
102 TEveStraightLineSet*
103 make_vertex_box(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
104 {
105   Double_t x[3], e[3];
106   v->GetXYZ(x); v->GetSigmaXYZ(e);
107
108   TEveStraightLineSet* ls = new TEveStraightLineSet("Box");
109   if (use_sigma)
110   {
111     e[0] *= fx; e[1] *= fy; e[2] *= fz;
112     ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz));
113   }
114   else
115   {
116     e[0] = fx; e[1] = fy; e[2] = fz;
117     ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
118   }
119   // pos z
120   ls->AddLine( e[0],  e[1],  e[2],  e[0], -e[1],  e[2]);
121   ls->AddLine( e[0], -e[1],  e[2], -e[0], -e[1],  e[2]);
122   ls->AddLine(-e[0], -e[1],  e[2], -e[0],  e[1],  e[2]);
123   ls->AddLine(-e[0],  e[1],  e[2],  e[0],  e[1],  e[2]);
124   // lines along z
125   ls->AddLine( e[0],  e[1],  e[2],  e[0],  e[1], -e[2]);
126   ls->AddLine( e[0], -e[1],  e[2],  e[0], -e[1], -e[2]);
127   ls->AddLine(-e[0], -e[1],  e[2], -e[0], -e[1], -e[2]);
128   ls->AddLine(-e[0],  e[1],  e[2], -e[0],  e[1], -e[2]);
129   // neg z
130   ls->AddLine( e[0],  e[1], -e[2],  e[0], -e[1], -e[2]);
131   ls->AddLine( e[0], -e[1], -e[2], -e[0], -e[1], -e[2]);
132   ls->AddLine(-e[0], -e[1], -e[2], -e[0],  e[1], -e[2]);
133   ls->AddLine(-e[0],  e[1], -e[2],  e[0],  e[1], -e[2]);
134
135   ls->RefMainTrans().SetPos(x);
136   return ls;
137 }
138
139
140 //==============================================================================
141 // Element making functions
142 //==============================================================================
143
144 TEveStraightLineSet*
145 primary_vertex(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
146 {
147   AliESDEvent  *esd = AliEveEventManager::AssertESD();
148   AliESDVertex *pv  = esd->GetPrimaryVertex();
149   if ( ! pv->GetStatus()) {
150     Info("primary_vertex", "Primary vertex not available.");
151     return 0;
152   }
153
154   TEveStraightLineSet* ls = make_vertex_cross(pv, use_sigma, fx, fy, fz);
155   ls->ApplyVizTag("PVTX");
156   assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
157   gEve->Redraw3D();
158   return ls;
159 }
160
161 TEveStraightLineSet*
162 primary_vertex_spd(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
163 {
164   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
165   AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
166   if ( ! spdv->GetStatus()) {
167     Info("primary_vertex_spd", "Primary vertex SPD not available.");
168     return 0;
169   }
170
171   TEveStraightLineSet* ls = make_vertex_cross(spdv, use_sigma, fx, fy, fz);
172   ls->ApplyVizTag("PVTX SPD");
173   assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
174   gEve->Redraw3D();
175   return ls;
176 }
177
178 TEveStraightLineSet*
179 primary_vertex_tpc(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
180 {
181   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
182   AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
183   if ( ! pv->GetStatus()) {
184     Info("primary_vertex_tpc", "Primary vertex TPC not available.");
185     return 0;
186   }
187
188   TEveStraightLineSet* ls = make_vertex_cross(tpcv, use_sigma, fx, fy, fz);
189   ls->ApplyVizTag("PVTX TPC");
190   assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
191   gEve->Redraw3D();
192   return ls;
193 }
194
195 //------------------------------------------------------------------------------
196 // Ellipse
197 //------------------------------------------------------------------------------
198
199 TEveStraightLineSet*
200 primary_vertex_ellipse(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
201 {
202   AliESDEvent  *esd = AliEveEventManager::AssertESD();
203   AliESDVertex *pv  = esd->GetPrimaryVertex();
204   if ( ! pv->GetStatus()) {
205     Info("primary_vertex_ellipse", "Primary vertex not available.");
206     return 0;
207   }
208
209   TEveStraightLineSet* ls = make_vertex_ellipse(pv, use_sigma, fx, fy, fz);
210   ls->ApplyVizTag("PVTX Ellipse");
211   assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
212   gEve->Redraw3D();
213   return ls;
214 }
215
216 TEveStraightLineSet*
217 primary_vertex_ellipse_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
218 {
219   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
220   AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
221   if ( ! spdv->GetStatus()) {
222     Info("primary_vertex_ellipse_spd", "Primary vertex SPD not available.");
223     return 0;
224   }
225
226   TEveStraightLineSet* ls = make_vertex_ellipse(spdv, use_sigma, fx, fy, fz);
227   ls->ApplyVizTag("PVTX Ellipse SPD");
228   assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
229   gEve->Redraw3D();
230   return ls;
231 }
232
233 TEveStraightLineSet*
234 primary_vertex_ellipse_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
235 {
236   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
237   AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
238   if ( ! pv->GetStatus()) {
239     Info("primary_vertex_ellipse_tpc", "Primary vertex TPC not available.");
240     return 0;
241   }
242
243   TEveStraightLineSet* ls = make_vertex_ellipse(tpcv, use_sigma, fx, fy, fz);
244   ls->ApplyVizTag("PVTX Ellipse TPC");
245   assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
246   gEve->Redraw3D();
247   return ls;
248 }
249
250 //------------------------------------------------------------------------------
251 // Box
252 //------------------------------------------------------------------------------
253
254 TEveStraightLineSet*
255 primary_vertex_box(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
256 {
257   AliESDEvent  *esd = AliEveEventManager::AssertESD();
258   AliESDVertex *pv  = esd->GetPrimaryVertex();
259   if ( ! pv->GetStatus()) {
260     Info("primary_vertex_box", "Primary vertex not available.");
261     return 0;
262   }
263
264   TEveStraightLineSet* ls = make_vertex_box(pv, use_sigma, fx, fy, fz);
265   ls->ApplyVizTag("PVTX Box");
266   assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
267   gEve->Redraw3D();
268   return ls;
269 }
270
271 TEveStraightLineSet*
272 primary_vertex_box_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
273 {
274   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
275   AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
276   if ( ! spdv->GetStatus()) {
277     Info("primary_vertex_box_spd", "Primary vertex SPD not available.");
278     return 0;
279   }
280
281   TEveStraightLineSet* ls = make_vertex_box(spdv, use_sigma, fx, fy, fz);
282   ls->ApplyVizTag("PVTX Box SPD");
283   assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
284   gEve->Redraw3D();
285   return ls;
286 }
287
288 TEveStraightLineSet*
289 primary_vertex_box_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
290 {
291   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
292   AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
293   if ( ! pv->GetStatus()) {
294     Info("primary_vertex_box_tpc", "Primary vertex TPC not available.");
295     return 0;
296   }
297
298   TEveStraightLineSet* ls = make_vertex_box(tpcv, use_sigma, fx, fy, fz);
299   ls->ApplyVizTag("PVTX Box TPC");
300   assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
301   gEve->Redraw3D();
302   return ls;
303 }