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");
46 e[0] *= fx; e[1] *= fy; e[2] *= fz;
47 ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz));
51 e[0] = fx; e[1] = fy; e[2] = fz;
52 ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
54 ls->AddLine(e[0], 0, 0, -e[0], 0, 0);
55 ls->AddLine(0, e[1], 0, 0, -e[1], 0);
56 ls->AddLine(0, 0, e[2], 0, 0, -e[2]);
58 ls->RefMainTrans().SetPos(x);
63 make_vertex_ellipse(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
66 v->GetXYZ(x); v->GetSigmaXYZ(e);
68 TEveStraightLineSet* ls = new TEveStraightLineSet("Ellipse");
71 e[0] *= fx; e[1] *= fy; e[2] *= fz;
72 ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f sigma_z", fx, fy, fz));
76 e[0] = fx; e[1] = fy; e[2] = fz;
77 ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
81 const Float_t S = 2*TMath::Pi()/N;
83 Float_t a = e[0], b = e[1];
84 for (Int_t i = 0; i<N; i++)
85 ls->AddLine(a*TMath::Cos(i*S) , b*TMath::Sin(i*S) , 0,
86 a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S), 0);
89 for (Int_t i = 0; i<N; i++)
90 ls->AddLine(a*TMath::Cos(i*S) , 0, b*TMath::Sin(i*S),
91 a*TMath::Cos(i*S+S), 0, b*TMath::Sin(i*S+S));
94 for (Int_t i = 0; i<N; i++)
95 ls->AddLine(0, a*TMath::Cos(i*S) , b*TMath::Sin(i*S),
96 0, a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S));
98 ls->RefMainTrans().SetPos(x);
103 make_vertex_box(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz)
106 v->GetXYZ(x); v->GetSigmaXYZ(e);
108 TEveStraightLineSet* ls = new TEveStraightLineSet("Box");
111 e[0] *= fx; e[1] *= fy; e[2] *= fz;
112 ls->SetTitle(Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz));
116 e[0] = fx; e[1] = fy; e[2] = fz;
117 ls->SetTitle(Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz));
120 ls->AddLine( e[0], e[1], e[2], e[0], -e[1], e[2]);
121 ls->AddLine( e[0], -e[1], e[2], -e[0], -e[1], e[2]);
122 ls->AddLine(-e[0], -e[1], e[2], -e[0], e[1], e[2]);
123 ls->AddLine(-e[0], e[1], e[2], e[0], e[1], e[2]);
125 ls->AddLine( e[0], e[1], e[2], e[0], e[1], -e[2]);
126 ls->AddLine( e[0], -e[1], e[2], e[0], -e[1], -e[2]);
127 ls->AddLine(-e[0], -e[1], e[2], -e[0], -e[1], -e[2]);
128 ls->AddLine(-e[0], e[1], e[2], -e[0], e[1], -e[2]);
130 ls->AddLine( e[0], e[1], -e[2], e[0], -e[1], -e[2]);
131 ls->AddLine( e[0], -e[1], -e[2], -e[0], -e[1], -e[2]);
132 ls->AddLine(-e[0], -e[1], -e[2], -e[0], e[1], -e[2]);
133 ls->AddLine(-e[0], e[1], -e[2], e[0], e[1], -e[2]);
135 ls->RefMainTrans().SetPos(x);
140 //==============================================================================
141 // Element making functions
142 //==============================================================================
145 primary_vertex(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
147 AliESDEvent *esd = AliEveEventManager::AssertESD();
148 AliESDVertex *pv = esd->GetPrimaryVertex();
149 if ( ! pv->GetStatus()) {
150 Info("primary_vertex", "Primary vertex not available.");
154 TEveStraightLineSet* ls = make_vertex_cross(pv, use_sigma, fx, fy, fz);
155 ls->ApplyVizTag("PVTX");
156 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
162 primary_vertex_spd(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
164 AliESDEvent *esd = AliEveEventManager::AssertESD();
165 AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
166 if ( ! spdv->GetStatus()) {
167 Info("primary_vertex_spd", "Primary vertex SPD not available.");
171 TEveStraightLineSet* ls = make_vertex_cross(spdv, use_sigma, fx, fy, fz);
172 ls->ApplyVizTag("PVTX SPD");
173 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
179 primary_vertex_tpc(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
181 AliESDEvent *esd = AliEveEventManager::AssertESD();
182 AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
183 if ( ! pv->GetStatus()) {
184 Info("primary_vertex_tpc", "Primary vertex TPC not available.");
188 TEveStraightLineSet* ls = make_vertex_cross(tpcv, use_sigma, fx, fy, fz);
189 ls->ApplyVizTag("PVTX TPC");
190 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
195 //------------------------------------------------------------------------------
197 //------------------------------------------------------------------------------
200 primary_vertex_ellipse(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
202 AliESDEvent *esd = AliEveEventManager::AssertESD();
203 AliESDVertex *pv = esd->GetPrimaryVertex();
204 if ( ! pv->GetStatus()) {
205 Info("primary_vertex_ellipse", "Primary vertex not available.");
209 TEveStraightLineSet* ls = make_vertex_ellipse(pv, use_sigma, fx, fy, fz);
210 ls->ApplyVizTag("PVTX Ellipse");
211 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
217 primary_vertex_ellipse_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
219 AliESDEvent *esd = AliEveEventManager::AssertESD();
220 AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
221 if ( ! spdv->GetStatus()) {
222 Info("primary_vertex_ellipse_spd", "Primary vertex SPD not available.");
226 TEveStraightLineSet* ls = make_vertex_ellipse(spdv, use_sigma, fx, fy, fz);
227 ls->ApplyVizTag("PVTX Ellipse SPD");
228 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
234 primary_vertex_ellipse_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
236 AliESDEvent *esd = AliEveEventManager::AssertESD();
237 AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
238 if ( ! pv->GetStatus()) {
239 Info("primary_vertex_ellipse_tpc", "Primary vertex TPC not available.");
243 TEveStraightLineSet* ls = make_vertex_ellipse(tpcv, use_sigma, fx, fy, fz);
244 ls->ApplyVizTag("PVTX Ellipse TPC");
245 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
250 //------------------------------------------------------------------------------
252 //------------------------------------------------------------------------------
255 primary_vertex_box(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
257 AliESDEvent *esd = AliEveEventManager::AssertESD();
258 AliESDVertex *pv = esd->GetPrimaryVertex();
259 if ( ! pv->GetStatus()) {
260 Info("primary_vertex_box", "Primary vertex not available.");
264 TEveStraightLineSet* ls = make_vertex_box(pv, use_sigma, fx, fy, fz);
265 ls->ApplyVizTag("PVTX Box");
266 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
272 primary_vertex_box_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
274 AliESDEvent *esd = AliEveEventManager::AssertESD();
275 AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
276 if ( ! spdv->GetStatus()) {
277 Info("primary_vertex_box_spd", "Primary vertex SPD not available.");
281 TEveStraightLineSet* ls = make_vertex_box(spdv, use_sigma, fx, fy, fz);
282 ls->ApplyVizTag("PVTX Box SPD");
283 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
289 primary_vertex_box_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
291 AliESDEvent *esd = AliEveEventManager::AssertESD();
292 AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
293 if ( ! pv->GetStatus()) {
294 Info("primary_vertex_box_tpc", "Primary vertex TPC not available.");
298 TEveStraightLineSet* ls = make_vertex_box(tpcv, use_sigma, fx, fy, fz);
299 ls->ApplyVizTag("PVTX Box TPC");
300 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);