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 <EveBase/AliEveEventManager.h>
17 #include <AliESDEvent.h>
18 #include <AliESDVertex.h>
22 //==============================================================================
24 //==============================================================================
26 TEveCompound* assert_vertex_parent(const TString& name, Color_t col)
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.
31 TEveCompound* parent = dynamic_cast<TEveCompound*>
32 (AliEveEventManager::GetCurrent()->FindChild(name));
35 parent = new TEveCompound(name);
36 parent->OpenCompound();
37 parent->SetMainColor(col);
38 AliEveEventManager::GetMaster()->AddElement(parent);
44 //==============================================================================
45 // Functions to make a cross / ellipse / box
46 //==============================================================================
49 make_vertex_cross(const AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
52 v->GetXYZ(x); v->GetSigmaXYZ(e);
54 TEveStraightLineSet* ls = new TEveStraightLineSet("Cross");
58 e[0] *= fx; e[1] *= fy; e[2] *= fz;
59 title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz);
63 e[0] = fx; e[1] = fy; e[2] = fz;
64 title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
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]);
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]);
74 ls->RefMainTrans().SetPos(x);
79 make_vertex_ellipse(const AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
82 v->GetXYZ(x); v->GetSigmaXYZ(e);
84 TEveStraightLineSet* ls = new TEveStraightLineSet("Ellipse");
88 e[0] *= fx; e[1] *= fy; e[2] *= fz;
89 title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f sigma_z", fx, fy, fz);
93 e[0] = fx; e[1] = fy; e[2] = fz;
94 title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
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]);
101 const Float_t S = 2*TMath::Pi()/N;
103 Float_t a = e[0], b = e[1];
104 for (Int_t i = 0; i<N; i++)
105 ls->AddLine(a*TMath::Cos(i*S) , b*TMath::Sin(i*S) , 0,
106 a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S), 0);
109 for (Int_t i = 0; i<N; i++)
110 ls->AddLine(a*TMath::Cos(i*S) , 0, b*TMath::Sin(i*S),
111 a*TMath::Cos(i*S+S), 0, b*TMath::Sin(i*S+S));
114 for (Int_t i = 0; i<N; i++)
115 ls->AddLine(0, a*TMath::Cos(i*S) , b*TMath::Sin(i*S),
116 0, a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S));
118 ls->RefMainTrans().SetPos(x);
123 make_vertex_box(const AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
126 v->GetXYZ(x); v->GetSigmaXYZ(e);
128 TEveStraightLineSet* ls = new TEveStraightLineSet("Box");
132 e[0] *= fx; e[1] *= fy; e[2] *= fz;
133 title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz);
137 e[0] = fx; e[1] = fy; e[2] = fz;
138 title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
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]);
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]);
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]);
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]);
160 ls->RefMainTrans().SetPos(x);
165 //==============================================================================
166 // Element making functions
167 //==============================================================================
170 primary_vertex(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
172 AliESDEvent *esd = AliEveEventManager::AssertESD();
173 const AliESDVertex *pv = esd->GetPrimaryVertex();
174 if ( ! pv->GetStatus()) {
175 Info("primary_vertex", "Primary vertex not available.");
179 TEveStraightLineSet* ls = make_vertex_cross(pv, use_sigma, fx, fy, fz);
180 ls->ApplyVizTag("REC PVTX");
181 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
187 primary_vertex_spd(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
189 AliESDEvent *esd = AliEveEventManager::AssertESD();
190 const AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
191 if ( ! spdv->GetStatus()) {
192 Info("primary_vertex_spd", "Primary vertex SPD not available.");
196 TEveStraightLineSet* ls = make_vertex_cross(spdv, use_sigma, fx, fy, fz);
197 ls->ApplyVizTag("REC PVTX SPD");
198 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
204 primary_vertex_tpc(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
206 AliESDEvent *esd = AliEveEventManager::AssertESD();
207 const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
208 if ( ! tpcv->GetStatus()) {
209 Info("primary_vertex_tpc", "Primary vertex TPC not available.");
213 TEveStraightLineSet* ls = make_vertex_cross(tpcv, use_sigma, fx, fy, fz);
214 ls->ApplyVizTag("REC PVTX TPC");
215 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
220 //------------------------------------------------------------------------------
222 //------------------------------------------------------------------------------
225 primary_vertex_ellipse(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
227 AliESDEvent *esd = AliEveEventManager::AssertESD();
228 const AliESDVertex *pv = esd->GetPrimaryVertex();
229 if ( ! pv->GetStatus()) {
230 Info("primary_vertex_ellipse", "Primary vertex not available.");
234 TEveStraightLineSet* ls = make_vertex_ellipse(pv, use_sigma, fx, fy, fz);
235 ls->ApplyVizTag("REC PVTX Ellipse");
236 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
242 primary_vertex_ellipse_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
244 AliESDEvent *esd = AliEveEventManager::AssertESD();
245 const AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
246 if ( ! spdv->GetStatus()) {
247 Info("primary_vertex_ellipse_spd", "Primary vertex SPD not available.");
251 TEveStraightLineSet* ls = make_vertex_ellipse(spdv, use_sigma, fx, fy, fz);
252 ls->ApplyVizTag("REC PVTX Ellipse SPD");
253 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
259 primary_vertex_ellipse_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
261 AliESDEvent *esd = AliEveEventManager::AssertESD();
262 const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
263 if ( ! tpcv->GetStatus()) {
264 Info("primary_vertex_ellipse_tpc", "Primary vertex TPC not available.");
268 TEveStraightLineSet* ls = make_vertex_ellipse(tpcv, use_sigma, fx, fy, fz);
269 ls->ApplyVizTag("REC PVTX Ellipse TPC");
270 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
275 //------------------------------------------------------------------------------
277 //------------------------------------------------------------------------------
280 primary_vertex_box(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
282 AliESDEvent *esd = AliEveEventManager::AssertESD();
283 const AliESDVertex *pv = esd->GetPrimaryVertex();
284 if ( ! pv->GetStatus()) {
285 Info("primary_vertex_box", "Primary vertex not available.");
289 TEveStraightLineSet* ls = make_vertex_box(pv, use_sigma, fx, fy, fz);
290 ls->ApplyVizTag("REC PVTX Box");
291 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
297 primary_vertex_box_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
299 AliESDEvent *esd = AliEveEventManager::AssertESD();
300 const AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
301 if ( ! spdv->GetStatus()) {
302 Info("primary_vertex_box_spd", "Primary vertex SPD not available.");
306 TEveStraightLineSet* ls = make_vertex_box(spdv, use_sigma, fx, fy, fz);
307 ls->ApplyVizTag("REC PVTX Box SPD");
308 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
314 primary_vertex_box_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
316 AliESDEvent *esd = AliEveEventManager::AssertESD();
317 const AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
318 if ( ! tpcv->GetStatus()) {
319 Info("primary_vertex_box_tpc", "Primary vertex TPC not available.");
323 TEveStraightLineSet* ls = make_vertex_box(tpcv, use_sigma, fx, fy, fz);
324 ls->ApplyVizTag("REC PVTX Box TPC");
325 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);