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