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