]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/primary_vertex.C
99fe06a6f4dcb910ccef6d192d840a7f110edce2
[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
150   TEveStraightLineSet* ls = make_vertex_cross(pv, use_sigma, fx, fy, fz);
151   ls->ApplyVizTag("PVTX");
152   assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
153   gEve->Redraw3D();
154   return ls;
155 }
156
157 TEveStraightLineSet*
158 primary_vertex_spd(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
159 {
160   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
161   AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
162
163   TEveStraightLineSet* ls = make_vertex_cross(spdv, use_sigma, fx, fy, fz);
164   ls->ApplyVizTag("PVTX SPD");
165   assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
166   gEve->Redraw3D();
167   return ls;
168 }
169
170 TEveStraightLineSet*
171 primary_vertex_tpc(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
172 {
173   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
174   AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
175
176   TEveStraightLineSet* ls = make_vertex_cross(tpcv, use_sigma, fx, fy, fz);
177   ls->ApplyVizTag("PVTX TPC");
178   assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
179   gEve->Redraw3D();
180   return ls;
181 }
182
183 //------------------------------------------------------------------------------
184 // Ellipse
185 //------------------------------------------------------------------------------
186
187 TEveStraightLineSet*
188 primary_vertex_ellipse(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
189 {
190   AliESDEvent  *esd = AliEveEventManager::AssertESD();
191   AliESDVertex *pv  = esd->GetPrimaryVertex();
192
193   TEveStraightLineSet* ls = make_vertex_ellipse(pv, use_sigma, fx, fy, fz);
194   ls->ApplyVizTag("PVTX Ellipse");
195   assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
196   gEve->Redraw3D();
197   return ls;
198 }
199
200 TEveStraightLineSet*
201 primary_vertex_ellipse_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
202 {
203   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
204   AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
205
206   TEveStraightLineSet* ls = make_vertex_ellipse(spdv, use_sigma, fx, fy, fz);
207   ls->ApplyVizTag("PVTX Ellipse SPD");
208   assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
209   gEve->Redraw3D();
210   return ls;
211 }
212
213 TEveStraightLineSet*
214 primary_vertex_ellipse_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
215 {
216   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
217   AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
218
219   TEveStraightLineSet* ls = make_vertex_ellipse(tpcv, use_sigma, fx, fy, fz);
220   ls->ApplyVizTag("PVTX Ellipse TPC");
221   assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
222   gEve->Redraw3D();
223   return ls;
224 }
225
226 //------------------------------------------------------------------------------
227 // Box
228 //------------------------------------------------------------------------------
229
230 TEveStraightLineSet*
231 primary_vertex_box(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
232 {
233   AliESDEvent  *esd = AliEveEventManager::AssertESD();
234   AliESDVertex *pv  = esd->GetPrimaryVertex();
235
236   TEveStraightLineSet* ls = make_vertex_box(pv, use_sigma, fx, fy, fz);
237   ls->ApplyVizTag("PVTX Box");
238   assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
239   gEve->Redraw3D();
240   return ls;
241 }
242
243 TEveStraightLineSet*
244 primary_vertex_box_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
245 {
246   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
247   AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
248
249   TEveStraightLineSet* ls = make_vertex_box(spdv, use_sigma, fx, fy, fz);
250   ls->ApplyVizTag("PVTX Box SPD");
251   assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
252   gEve->Redraw3D();
253   return ls;
254 }
255
256 TEveStraightLineSet*
257 primary_vertex_box_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
258 {
259   AliESDEvent  *esd  = AliEveEventManager::AssertESD();
260   AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
261
262   TEveStraightLineSet* ls = make_vertex_box(tpcv, use_sigma, fx, fy, fz);
263   ls->ApplyVizTag("PVTX Box TPC");
264   assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
265   gEve->Redraw3D();
266   return ls;
267 }