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();
150 TEveStraightLineSet* ls = make_vertex_cross(pv, use_sigma, fx, fy, fz);
151 ls->ApplyVizTag("PVTX");
152 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
158 primary_vertex_spd(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
160 AliESDEvent *esd = AliEveEventManager::AssertESD();
161 AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
163 TEveStraightLineSet* ls = make_vertex_cross(spdv, use_sigma, fx, fy, fz);
164 ls->ApplyVizTag("PVTX SPD");
165 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
171 primary_vertex_tpc(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1)
173 AliESDEvent *esd = AliEveEventManager::AssertESD();
174 AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
176 TEveStraightLineSet* ls = make_vertex_cross(tpcv, use_sigma, fx, fy, fz);
177 ls->ApplyVizTag("PVTX TPC");
178 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
183 //------------------------------------------------------------------------------
185 //------------------------------------------------------------------------------
188 primary_vertex_ellipse(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
190 AliESDEvent *esd = AliEveEventManager::AssertESD();
191 AliESDVertex *pv = esd->GetPrimaryVertex();
193 TEveStraightLineSet* ls = make_vertex_ellipse(pv, use_sigma, fx, fy, fz);
194 ls->ApplyVizTag("PVTX Ellipse");
195 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
201 primary_vertex_ellipse_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
203 AliESDEvent *esd = AliEveEventManager::AssertESD();
204 AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
206 TEveStraightLineSet* ls = make_vertex_ellipse(spdv, use_sigma, fx, fy, fz);
207 ls->ApplyVizTag("PVTX Ellipse SPD");
208 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
214 primary_vertex_ellipse_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
216 AliESDEvent *esd = AliEveEventManager::AssertESD();
217 AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
219 TEveStraightLineSet* ls = make_vertex_ellipse(tpcv, use_sigma, fx, fy, fz);
220 ls->ApplyVizTag("PVTX Ellipse TPC");
221 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);
226 //------------------------------------------------------------------------------
228 //------------------------------------------------------------------------------
231 primary_vertex_box(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
233 AliESDEvent *esd = AliEveEventManager::AssertESD();
234 AliESDVertex *pv = esd->GetPrimaryVertex();
236 TEveStraightLineSet* ls = make_vertex_box(pv, use_sigma, fx, fy, fz);
237 ls->ApplyVizTag("PVTX Box");
238 assert_vertex_parent("Primary Vertex", 7)->AddElement(ls);
244 primary_vertex_box_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
246 AliESDEvent *esd = AliEveEventManager::AssertESD();
247 AliESDVertex *spdv = esd->GetPrimaryVertexSPD();
249 TEveStraightLineSet* ls = make_vertex_box(spdv, use_sigma, fx, fy, fz);
250 ls->ApplyVizTag("PVTX Box SPD");
251 assert_vertex_parent("Primary Vertex SPD", 6)->AddElement(ls);
257 primary_vertex_box_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10)
259 AliESDEvent *esd = AliEveEventManager::AssertESD();
260 AliESDVertex *tpcv = esd->GetPrimaryVertexTPC();
262 TEveStraightLineSet* ls = make_vertex_box(tpcv, use_sigma, fx, fy, fz);
263 ls->ApplyVizTag("PVTX Box TPC");
264 assert_vertex_parent("Primary Vertex TPC", 5)->AddElement(ls);