2 // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
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 **************************************************************************/
10 #if !defined(__CINT__) || defined(__MAKECINT__)
11 #include <TEveManager.h>
12 #include <TEveCompound.h>
13 #include <TEveStraightLineSet.h>
15 #include <AliESDEvent.h>
16 #include <AliESDVertex.h>
17 #include <AliEveEventManager.h>
20 //==============================================================================
22 //==============================================================================
24 TEveCompound* assert_vertex_parent(const TString& name, Color_t col)
26 // !!! TEveCompound should have viz-db support ... add in root, then fix here,
27 // that is, remove the color var and pass viz-db tag.
29 TEveCompound* parent = dynamic_cast<TEveCompound*>
30 (AliEveEventManager::GetCurrent()->FindChild(name));
33 parent = new TEveCompound(name);
34 parent->OpenCompound();
35 parent->SetMainColor(col);
36 AliEveEventManager::GetMaster()->AddElement(parent);
42 //==============================================================================
43 // Functions to make a cross / ellipse / box
44 //==============================================================================
47 make_vertex_cross(const AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
50 v->GetXYZ(x); v->GetSigmaXYZ(e);
52 TEveStraightLineSet* ls = new TEveStraightLineSet("Cross");
56 e[0] *= fx; e[1] *= fy; e[2] *= fz;
57 title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz);
61 e[0] = fx; e[1] = fy; e[2] = fz;
62 title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
64 title += Form("\nx=%.5f, y=%.5f, z=%.5f\nsx=%.5f, sy=%.5f, sz=%.5f",
65 x[0], x[1], x[2], e[0], e[1], e[2]);
68 ls->AddLine(e[0], 0, 0, -e[0], 0, 0);
69 ls->AddLine(0, e[1], 0, 0, -e[1], 0);
70 ls->AddLine(0, 0, e[2], 0, 0, -e[2]);
72 ls->RefMainTrans().SetPos(x);
77 make_vertex_ellipse(const AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
80 v->GetXYZ(x); v->GetSigmaXYZ(e);
82 TEveStraightLineSet* ls = new TEveStraightLineSet("Ellipse");
86 e[0] *= fx; e[1] *= fy; e[2] *= fz;
87 title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f sigma_z", fx, fy, fz);
91 e[0] = fx; e[1] = fy; e[2] = fz;
92 title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
94 title += Form("\nx=%.5f, y=%.5f, z=%.5f\nsx=%.5f, sy=%.5f, sz=%.5f",
95 x[0], x[1], x[2], e[0], e[1], e[2]);
99 const Float_t S = 2*TMath::Pi()/N;
101 Float_t a = e[0], b = e[1];
102 for (Int_t i = 0; i<N; i++)
103 ls->AddLine(a*TMath::Cos(i*S) , b*TMath::Sin(i*S) , 0,
104 a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S), 0);
107 for (Int_t i = 0; i<N; i++)
108 ls->AddLine(a*TMath::Cos(i*S) , 0, b*TMath::Sin(i*S),
109 a*TMath::Cos(i*S+S), 0, b*TMath::Sin(i*S+S));
112 for (Int_t i = 0; i<N; i++)
113 ls->AddLine(0, a*TMath::Cos(i*S) , b*TMath::Sin(i*S),
114 0, a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S));
116 ls->RefMainTrans().SetPos(x);
121 make_vertex_box(const AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
124 v->GetXYZ(x); v->GetSigmaXYZ(e);
126 TEveStraightLineSet* ls = new TEveStraightLineSet("Box");
130 e[0] *= fx; e[1] *= fy; e[2] *= fz;
131 title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz);
135 e[0] = fx; e[1] = fy; e[2] = fz;
136 title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
138 title += Form("\nx=%.5f, y=%.5f, z=%.5f\nsx=%.5f, sy=%.5f, sz=%.5f",
139 x[0], x[1], x[2], e[0], e[1], e[2]);
143 ls->AddLine( e[0], e[1], e[2], e[0], -e[1], e[2]);
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]);
148 ls->AddLine( e[0], e[1], e[2], e[0], e[1], -e[2]);
149 ls->AddLine( e[0], -e[1], e[2], e[0], -e[1], -e[2]);
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]);
153 ls->AddLine( e[0], e[1], -e[2], e[0], -e[1], -e[2]);
154 ls->AddLine( e[0], -e[1], -e[2], -e[0], -e[1], -e[2]);
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]);
158 ls->RefMainTrans().SetPos(x);
163 //==============================================================================
164 // Element making functions
165 //==============================================================================
168 primary_vertex(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
170 AliESDEvent *esd = AliEveEventManager::AssertESD();
171 const AliESDVertex *pv = esd->GetPrimaryVertex();
172 if ( ! pv->GetStatus()) {
173 Info("primary_vertex", "Primary vertex not available.");
177 TEveStraightLineSet* ls = make_vertex_cross(pv, use_sigma, fx, fy, fz);
178 ls->ApplyVizTag("REC PVTX");
179 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
185 primary_vertex_spd(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
187 AliESDEvent *esd = AliEveEventManager::AssertESD();
188 const AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
189 if ( ! spdv->GetStatus()) {
190 Info("primary_vertex_spd", "Primary vertex SPD not available.");
194 TEveStraightLineSet* ls = make_vertex_cross(spdv, use_sigma, fx, fy, fz);
195 ls->ApplyVizTag("REC PVTX SPD");
196 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
202 primary_vertex_tpc(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
204 AliESDEvent *esd = AliEveEventManager::AssertESD();
205 const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
206 if ( ! tpcv->GetStatus()) {
207 Info("primary_vertex_tpc", "Primary vertex TPC not available.");
211 TEveStraightLineSet* ls = make_vertex_cross(tpcv, use_sigma, fx, fy, fz);
212 ls->ApplyVizTag("REC PVTX TPC");
213 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
218 //------------------------------------------------------------------------------
220 //------------------------------------------------------------------------------
223 primary_vertex_ellipse(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
225 AliESDEvent *esd = AliEveEventManager::AssertESD();
226 const AliESDVertex *pv = esd->GetPrimaryVertex();
227 if ( ! pv->GetStatus()) {
228 Info("primary_vertex_ellipse", "Primary vertex not available.");
232 TEveStraightLineSet* ls = make_vertex_ellipse(pv, use_sigma, fx, fy, fz);
233 ls->ApplyVizTag("REC PVTX Ellipse");
234 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
240 primary_vertex_ellipse_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
242 AliESDEvent *esd = AliEveEventManager::AssertESD();
243 const AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
244 if ( ! spdv->GetStatus()) {
245 Info("primary_vertex_ellipse_spd", "Primary vertex SPD not available.");
249 TEveStraightLineSet* ls = make_vertex_ellipse(spdv, use_sigma, fx, fy, fz);
250 ls->ApplyVizTag("REC PVTX Ellipse SPD");
251 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
257 primary_vertex_ellipse_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
259 AliESDEvent *esd = AliEveEventManager::AssertESD();
260 const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
261 if ( ! tpcv->GetStatus()) {
262 Info("primary_vertex_ellipse_tpc", "Primary vertex TPC not available.");
266 TEveStraightLineSet* ls = make_vertex_ellipse(tpcv, use_sigma, fx, fy, fz);
267 ls->ApplyVizTag("REC PVTX Ellipse TPC");
268 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
273 //------------------------------------------------------------------------------
275 //------------------------------------------------------------------------------
278 primary_vertex_box(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
280 AliESDEvent *esd = AliEveEventManager::AssertESD();
281 const AliESDVertex *pv = esd->GetPrimaryVertex();
282 if ( ! pv->GetStatus()) {
283 Info("primary_vertex_box", "Primary vertex not available.");
287 TEveStraightLineSet* ls = make_vertex_box(pv, use_sigma, fx, fy, fz);
288 ls->ApplyVizTag("REC PVTX Box");
289 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
295 primary_vertex_box_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
297 AliESDEvent *esd = AliEveEventManager::AssertESD();
298 const AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
299 if ( ! spdv->GetStatus()) {
300 Info("primary_vertex_box_spd", "Primary vertex SPD not available.");
304 TEveStraightLineSet* ls = make_vertex_box(spdv, use_sigma, fx, fy, fz);
305 ls->ApplyVizTag("REC PVTX Box SPD");
306 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
312 primary_vertex_box_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
314 AliESDEvent *esd = AliEveEventManager::AssertESD();
315 const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
316 if ( ! tpcv->GetStatus()) {
317 Info("primary_vertex_box_tpc", "Primary vertex TPC not available.");
321 TEveStraightLineSet* ls = make_vertex_box(tpcv, use_sigma, fx, fy, fz);
322 ls->ApplyVizTag("REC PVTX Box TPC");
323 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);