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 **************************************************************************/
11 //==============================================================================
13 //==============================================================================
15 TEveCompound* assert_vertex_parent(const TString& name, Color_t col)
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.
20 TEveCompound* parent = dynamic_cast<TEveCompound*>
21 (AliEveEventManager::GetCurrent()->FindChild(name));
24 parent = new TEveCompound(name);
25 parent->OpenCompound();
26 parent->SetMainColor(col);
27 AliEveEventManager::GetMaster()->AddElement(parent);
33 //==============================================================================
34 // Functions to make a cross / ellipse / box
35 //==============================================================================
38 make_vertex_cross(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
41 v->GetXYZ(x); v->GetSigmaXYZ(e);
43 TEveStraightLineSet* ls = new TEveStraightLineSet("Cross");
47 e[0] *= fx; e[1] *= fy; e[2] *= fz;
48 title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz);
52 e[0] = fx; e[1] = fy; e[2] = fz;
53 title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
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]);
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]);
63 ls->RefMainTrans().SetPos(x);
68 make_vertex_ellipse(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
71 v->GetXYZ(x); v->GetSigmaXYZ(e);
73 TEveStraightLineSet* ls = new TEveStraightLineSet("Ellipse");
77 e[0] *= fx; e[1] *= fy; e[2] *= fz;
78 title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f sigma_z", fx, fy, fz);
82 e[0] = fx; e[1] = fy; e[2] = fz;
83 title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
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]);
90 const Float_t S = 2*TMath::Pi()/N;
92 Float_t a = e[0], b = e[1];
93 for (Int_t i = 0; i<N; i++)
94 ls->AddLine(a*TMath::Cos(i*S) , b*TMath::Sin(i*S) , 0,
95 a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S), 0);
98 for (Int_t i = 0; i<N; i++)
99 ls->AddLine(a*TMath::Cos(i*S) , 0, b*TMath::Sin(i*S),
100 a*TMath::Cos(i*S+S), 0, b*TMath::Sin(i*S+S));
103 for (Int_t i = 0; i<N; i++)
104 ls->AddLine(0, a*TMath::Cos(i*S) , b*TMath::Sin(i*S),
105 0, a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S));
107 ls->RefMainTrans().SetPos(x);
112 make_vertex_box(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
115 v->GetXYZ(x); v->GetSigmaXYZ(e);
117 TEveStraightLineSet* ls = new TEveStraightLineSet("Box");
121 e[0] *= fx; e[1] *= fy; e[2] *= fz;
122 title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz);
126 e[0] = fx; e[1] = fy; e[2] = fz;
127 title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz);
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]);
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]);
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]);
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]);
149 ls->RefMainTrans().SetPos(x);
154 //==============================================================================
155 // Element making functions
156 //==============================================================================
159 primary_vertex(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
161 AliESDEvent *esd = AliEveEventManager::AssertESD();
162 AliESDVertex *pv = esd->GetPrimaryVertex();
163 if ( ! pv->GetStatus()) {
164 Info("primary_vertex", "Primary vertex not available.");
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);
176 primary_vertex_spd(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
178 AliESDEvent *esd = AliEveEventManager::AssertESD();
179 AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
180 if ( ! spdv->GetStatus()) {
181 Info("primary_vertex_spd", "Primary vertex SPD not available.");
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);
193 primary_vertex_tpc(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
195 AliESDEvent *esd = AliEveEventManager::AssertESD();
196 AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
197 if ( ! tpcv->GetStatus()) {
198 Info("primary_vertex_tpc", "Primary vertex TPC not available.");
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);
209 //------------------------------------------------------------------------------
211 //------------------------------------------------------------------------------
214 primary_vertex_ellipse(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
216 AliESDEvent *esd = AliEveEventManager::AssertESD();
217 AliESDVertex *pv = esd->GetPrimaryVertex();
218 if ( ! pv->GetStatus()) {
219 Info("primary_vertex_ellipse", "Primary vertex not available.");
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);
231 primary_vertex_ellipse_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
233 AliESDEvent *esd = AliEveEventManager::AssertESD();
234 AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
235 if ( ! spdv->GetStatus()) {
236 Info("primary_vertex_ellipse_spd", "Primary vertex SPD not available.");
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);
248 primary_vertex_ellipse_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
250 AliESDEvent *esd = AliEveEventManager::AssertESD();
251 AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
252 if ( ! tpcv->GetStatus()) {
253 Info("primary_vertex_ellipse_tpc", "Primary vertex TPC not available.");
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);
264 //------------------------------------------------------------------------------
266 //------------------------------------------------------------------------------
269 primary_vertex_box(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
271 AliESDEvent *esd = AliEveEventManager::AssertESD();
272 AliESDVertex *pv = esd->GetPrimaryVertex();
273 if ( ! pv->GetStatus()) {
274 Info("primary_vertex_box", "Primary vertex not available.");
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);
286 primary_vertex_box_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
288 AliESDEvent *esd = AliEveEventManager::AssertESD();
289 AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
290 if ( ! spdv->GetStatus()) {
291 Info("primary_vertex_box_spd", "Primary vertex SPD not available.");
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);
303 primary_vertex_box_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
305 AliESDEvent *esd = AliEveEventManager::AssertESD();
306 AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
307 if ( ! tpcv->GetStatus()) {
308 Info("primary_vertex_box_tpc", "Primary vertex TPC not available.");
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);