]>
Commit | Line | Data |
---|---|---|
84aff7a4 | 1 | // $Id$ |
d810d0de | 2 | // Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007 |
3 | ||
4 | /************************************************************************** | |
5 | * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. * | |
6 | * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for * | |
51346b82 | 7 | * full copyright notice. * |
d810d0de | 8 | **************************************************************************/ |
3c1a4392 | 9 | |
c37f91e9 | 10 | |
ad5abc55 | 11 | //============================================================================== |
12 | // Utilities | |
13 | //============================================================================== | |
c37f91e9 | 14 | |
ad5abc55 | 15 | TEveCompound* assert_vertex_parent(const TString& name, Color_t col) |
3c1a4392 | 16 | { |
ad5abc55 | 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. | |
3c1a4392 | 19 | |
4d62585e | 20 | TEveCompound* parent = dynamic_cast<TEveCompound*> |
21 | (AliEveEventManager::GetCurrent()->FindChild(name)); | |
ad5abc55 | 22 | if (parent == 0) |
23 | { | |
24 | parent = new TEveCompound(name); | |
25 | parent->OpenCompound(); | |
26 | parent->SetMainColor(col); | |
4d62585e | 27 | AliEveEventManager::GetMaster()->AddElement(parent); |
3c1a4392 | 28 | } |
ad5abc55 | 29 | return parent; |
3c1a4392 | 30 | } |
32e219c2 | 31 | |
32e219c2 | 32 | |
ad5abc55 | 33 | //============================================================================== |
34 | // Functions to make a cross / ellipse / box | |
35 | //============================================================================== | |
36 | ||
37 | TEveStraightLineSet* | |
38 | make_vertex_cross(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz) | |
51346b82 | 39 | { |
32e219c2 | 40 | Double_t x[3], e[3]; |
41 | v->GetXYZ(x); v->GetSigmaXYZ(e); | |
32e219c2 | 42 | |
ad5abc55 | 43 | TEveStraightLineSet* ls = new TEveStraightLineSet("Cross"); |
b1916ff9 | 44 | TString title; |
ad5abc55 | 45 | if (use_sigma) |
46 | { | |
47 | e[0] *= fx; e[1] *= fy; e[2] *= fz; | |
b1916ff9 | 48 | title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz); |
ad5abc55 | 49 | } |
50 | else | |
51 | { | |
52 | e[0] = fx; e[1] = fy; e[2] = fz; | |
b1916ff9 | 53 | title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz); |
ad5abc55 | 54 | } |
b1916ff9 | 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]); | |
8661a211 | 57 | ls->SetTitle(title); |
b1916ff9 | 58 | |
2be943d0 | 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]); | |
32e219c2 | 62 | |
a15e6d7d | 63 | ls->RefMainTrans().SetPos(x); |
51346b82 | 64 | return ls; |
32e219c2 | 65 | } |
66 | ||
ad5abc55 | 67 | TEveStraightLineSet* |
68 | make_vertex_ellipse(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz) | |
32e219c2 | 69 | { |
32e219c2 | 70 | Double_t x[3], e[3]; |
71 | v->GetXYZ(x); v->GetSigmaXYZ(e); | |
72 | ||
ad5abc55 | 73 | TEveStraightLineSet* ls = new TEveStraightLineSet("Ellipse"); |
b1916ff9 | 74 | TString title; |
ad5abc55 | 75 | if (use_sigma) |
32e219c2 | 76 | { |
ad5abc55 | 77 | e[0] *= fx; e[1] *= fy; e[2] *= fz; |
b1916ff9 | 78 | title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f sigma_z", fx, fy, fz); |
32e219c2 | 79 | } |
80 | else | |
81 | { | |
ad5abc55 | 82 | e[0] = fx; e[1] = fy; e[2] = fz; |
b1916ff9 | 83 | title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz); |
32e219c2 | 84 | } |
b1916ff9 | 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]); | |
8661a211 | 87 | ls->SetTitle(title); |
2be943d0 | 88 | |
ad5abc55 | 89 | const Int_t N = 32; |
90 | const Float_t S = 2*TMath::Pi()/N; | |
32e219c2 | 91 | |
ad5abc55 | 92 | Float_t a = e[0], b = e[1]; |
84aff7a4 | 93 | for (Int_t i = 0; i<N; i++) |
51346b82 | 94 | ls->AddLine(a*TMath::Cos(i*S) , b*TMath::Sin(i*S) , 0, |
32e219c2 | 95 | a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S), 0); |
96 | ||
97 | a = e[0]; b = e[2]; | |
84aff7a4 | 98 | for (Int_t i = 0; i<N; i++) |
51346b82 | 99 | ls->AddLine(a*TMath::Cos(i*S) , 0, b*TMath::Sin(i*S), |
32e219c2 | 100 | a*TMath::Cos(i*S+S), 0, b*TMath::Sin(i*S+S)); |
101 | ||
102 | a = e[1]; b = e[2]; | |
84aff7a4 | 103 | for (Int_t i = 0; i<N; i++) |
51346b82 | 104 | ls->AddLine(0, a*TMath::Cos(i*S) , b*TMath::Sin(i*S), |
32e219c2 | 105 | 0, a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S)); |
ad5abc55 | 106 | |
107 | ls->RefMainTrans().SetPos(x); | |
108 | return ls; | |
32e219c2 | 109 | } |
110 | ||
ad5abc55 | 111 | TEveStraightLineSet* |
112 | make_vertex_box(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz) | |
51346b82 | 113 | { |
ad5abc55 | 114 | Double_t x[3], e[3]; |
115 | v->GetXYZ(x); v->GetSigmaXYZ(e); | |
32e219c2 | 116 | |
ad5abc55 | 117 | TEveStraightLineSet* ls = new TEveStraightLineSet("Box"); |
b1916ff9 | 118 | TString title; |
ad5abc55 | 119 | if (use_sigma) |
120 | { | |
121 | e[0] *= fx; e[1] *= fy; e[2] *= fz; | |
b1916ff9 | 122 | title += Form("+- %.1f*sigma_x, %.1f*sigma_y, %.1f*sigma_z", fx, fy, fz); |
ad5abc55 | 123 | } |
124 | else | |
32e219c2 | 125 | { |
ad5abc55 | 126 | e[0] = fx; e[1] = fy; e[2] = fz; |
b1916ff9 | 127 | title += Form("+- %.1f cm x %.1f cm x %.1f cm", fx, fy, fz); |
32e219c2 | 128 | } |
b1916ff9 | 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]); | |
8661a211 | 131 | ls->SetTitle(title); |
b1916ff9 | 132 | |
ad5abc55 | 133 | // pos z |
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]); | |
138 | // lines along z | |
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]); | |
143 | // neg z | |
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]); | |
148 | ||
149 | ls->RefMainTrans().SetPos(x); | |
150 | return ls; | |
151 | } | |
152 | ||
153 | ||
154 | //============================================================================== | |
155 | // Element making functions | |
156 | //============================================================================== | |
157 | ||
158 | TEveStraightLineSet* | |
159 | primary_vertex(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1) | |
160 | { | |
161 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
162 | AliESDVertex *pv = esd->GetPrimaryVertex(); | |
b3b7b8d3 | 163 | if ( ! pv->GetStatus()) { |
164 | Info("primary_vertex", "Primary vertex not available."); | |
165 | return 0; | |
166 | } | |
ad5abc55 | 167 | |
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); | |
171 | gEve->Redraw3D(); | |
172 | return ls; | |
173 | } | |
174 | ||
175 | TEveStraightLineSet* | |
176 | primary_vertex_spd(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1) | |
177 | { | |
178 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
179 | AliESDVertex *spdv = esd->GetPrimaryVertexSPD(); | |
b3b7b8d3 | 180 | if ( ! spdv->GetStatus()) { |
181 | Info("primary_vertex_spd", "Primary vertex SPD not available."); | |
182 | return 0; | |
183 | } | |
ad5abc55 | 184 | |
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); | |
188 | gEve->Redraw3D(); | |
189 | return ls; | |
190 | } | |
191 | ||
192 | TEveStraightLineSet* | |
193 | primary_vertex_tpc(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1) | |
194 | { | |
195 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
196 | AliESDVertex *tpcv = esd->GetPrimaryVertexTPC(); | |
b1916ff9 | 197 | if ( ! tpcv->GetStatus()) { |
b3b7b8d3 | 198 | Info("primary_vertex_tpc", "Primary vertex TPC not available."); |
199 | return 0; | |
200 | } | |
ad5abc55 | 201 | |
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); | |
205 | gEve->Redraw3D(); | |
206 | return ls; | |
207 | } | |
208 | ||
209 | //------------------------------------------------------------------------------ | |
210 | // Ellipse | |
211 | //------------------------------------------------------------------------------ | |
212 | ||
213 | TEveStraightLineSet* | |
214 | primary_vertex_ellipse(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
215 | { | |
216 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
217 | AliESDVertex *pv = esd->GetPrimaryVertex(); | |
b3b7b8d3 | 218 | if ( ! pv->GetStatus()) { |
219 | Info("primary_vertex_ellipse", "Primary vertex not available."); | |
220 | return 0; | |
221 | } | |
ad5abc55 | 222 | |
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); | |
226 | gEve->Redraw3D(); | |
227 | return ls; | |
228 | } | |
229 | ||
230 | TEveStraightLineSet* | |
231 | primary_vertex_ellipse_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
232 | { | |
233 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
234 | AliESDVertex *spdv = esd->GetPrimaryVertexSPD(); | |
b3b7b8d3 | 235 | if ( ! spdv->GetStatus()) { |
236 | Info("primary_vertex_ellipse_spd", "Primary vertex SPD not available."); | |
237 | return 0; | |
238 | } | |
ad5abc55 | 239 | |
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); | |
243 | gEve->Redraw3D(); | |
244 | return ls; | |
245 | } | |
246 | ||
247 | TEveStraightLineSet* | |
248 | primary_vertex_ellipse_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
249 | { | |
250 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
251 | AliESDVertex *tpcv = esd->GetPrimaryVertexTPC(); | |
b1916ff9 | 252 | if ( ! tpcv->GetStatus()) { |
b3b7b8d3 | 253 | Info("primary_vertex_ellipse_tpc", "Primary vertex TPC not available."); |
254 | return 0; | |
255 | } | |
ad5abc55 | 256 | |
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); | |
260 | gEve->Redraw3D(); | |
261 | return ls; | |
262 | } | |
263 | ||
264 | //------------------------------------------------------------------------------ | |
265 | // Box | |
266 | //------------------------------------------------------------------------------ | |
267 | ||
268 | TEveStraightLineSet* | |
269 | primary_vertex_box(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
270 | { | |
271 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
272 | AliESDVertex *pv = esd->GetPrimaryVertex(); | |
b3b7b8d3 | 273 | if ( ! pv->GetStatus()) { |
274 | Info("primary_vertex_box", "Primary vertex not available."); | |
275 | return 0; | |
276 | } | |
ad5abc55 | 277 | |
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); | |
281 | gEve->Redraw3D(); | |
282 | return ls; | |
283 | } | |
284 | ||
285 | TEveStraightLineSet* | |
286 | primary_vertex_box_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
287 | { | |
288 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
289 | AliESDVertex *spdv = esd->GetPrimaryVertexSPD(); | |
b3b7b8d3 | 290 | if ( ! spdv->GetStatus()) { |
291 | Info("primary_vertex_box_spd", "Primary vertex SPD not available."); | |
292 | return 0; | |
293 | } | |
ad5abc55 | 294 | |
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); | |
298 | gEve->Redraw3D(); | |
299 | return ls; | |
300 | } | |
301 | ||
302 | TEveStraightLineSet* | |
303 | primary_vertex_box_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
304 | { | |
305 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
306 | AliESDVertex *tpcv = esd->GetPrimaryVertexTPC(); | |
b1916ff9 | 307 | if ( ! tpcv->GetStatus()) { |
b3b7b8d3 | 308 | Info("primary_vertex_box_tpc", "Primary vertex TPC not available."); |
309 | return 0; | |
310 | } | |
ad5abc55 | 311 | |
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); | |
315 | gEve->Redraw3D(); | |
316 | return ls; | |
32e219c2 | 317 | } |