]>
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"); |
44 | if (use_sigma) | |
45 | { | |
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)); | |
48 | } | |
49 | else | |
50 | { | |
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)); | |
53 | } | |
2be943d0 | 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]); | |
32e219c2 | 57 | |
a15e6d7d | 58 | ls->RefMainTrans().SetPos(x); |
51346b82 | 59 | return ls; |
32e219c2 | 60 | } |
61 | ||
ad5abc55 | 62 | TEveStraightLineSet* |
63 | make_vertex_ellipse(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz) | |
32e219c2 | 64 | { |
32e219c2 | 65 | Double_t x[3], e[3]; |
66 | v->GetXYZ(x); v->GetSigmaXYZ(e); | |
67 | ||
ad5abc55 | 68 | TEveStraightLineSet* ls = new TEveStraightLineSet("Ellipse"); |
69 | if (use_sigma) | |
32e219c2 | 70 | { |
ad5abc55 | 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)); | |
32e219c2 | 73 | } |
74 | else | |
75 | { | |
ad5abc55 | 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)); | |
32e219c2 | 78 | } |
2be943d0 | 79 | |
ad5abc55 | 80 | const Int_t N = 32; |
81 | const Float_t S = 2*TMath::Pi()/N; | |
32e219c2 | 82 | |
ad5abc55 | 83 | Float_t a = e[0], b = e[1]; |
84aff7a4 | 84 | for (Int_t i = 0; i<N; i++) |
51346b82 | 85 | ls->AddLine(a*TMath::Cos(i*S) , b*TMath::Sin(i*S) , 0, |
32e219c2 | 86 | a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S), 0); |
87 | ||
88 | a = e[0]; b = e[2]; | |
84aff7a4 | 89 | for (Int_t i = 0; i<N; i++) |
51346b82 | 90 | ls->AddLine(a*TMath::Cos(i*S) , 0, b*TMath::Sin(i*S), |
32e219c2 | 91 | a*TMath::Cos(i*S+S), 0, b*TMath::Sin(i*S+S)); |
92 | ||
93 | a = e[1]; b = e[2]; | |
84aff7a4 | 94 | for (Int_t i = 0; i<N; i++) |
51346b82 | 95 | ls->AddLine(0, a*TMath::Cos(i*S) , b*TMath::Sin(i*S), |
32e219c2 | 96 | 0, a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S)); |
ad5abc55 | 97 | |
98 | ls->RefMainTrans().SetPos(x); | |
99 | return ls; | |
32e219c2 | 100 | } |
101 | ||
ad5abc55 | 102 | TEveStraightLineSet* |
103 | make_vertex_box(AliESDVertex* v, Bool_t use_sigma, Float_t fx, Float_t fy, Float_t fz) | |
51346b82 | 104 | { |
ad5abc55 | 105 | Double_t x[3], e[3]; |
106 | v->GetXYZ(x); v->GetSigmaXYZ(e); | |
32e219c2 | 107 | |
ad5abc55 | 108 | TEveStraightLineSet* ls = new TEveStraightLineSet("Box"); |
109 | if (use_sigma) | |
110 | { | |
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)); | |
113 | } | |
114 | else | |
32e219c2 | 115 | { |
ad5abc55 | 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)); | |
32e219c2 | 118 | } |
ad5abc55 | 119 | // pos z |
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]); | |
124 | // lines along z | |
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]); | |
129 | // neg z | |
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]); | |
134 | ||
135 | ls->RefMainTrans().SetPos(x); | |
136 | return ls; | |
137 | } | |
138 | ||
139 | ||
140 | //============================================================================== | |
141 | // Element making functions | |
142 | //============================================================================== | |
143 | ||
144 | TEveStraightLineSet* | |
145 | primary_vertex(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1) | |
146 | { | |
147 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
148 | AliESDVertex *pv = esd->GetPrimaryVertex(); | |
b3b7b8d3 | 149 | if ( ! pv->GetStatus()) { |
150 | Info("primary_vertex", "Primary vertex not available."); | |
151 | return 0; | |
152 | } | |
ad5abc55 | 153 | |
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); | |
157 | gEve->Redraw3D(); | |
158 | return ls; | |
159 | } | |
160 | ||
161 | TEveStraightLineSet* | |
162 | primary_vertex_spd(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1) | |
163 | { | |
164 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
165 | AliESDVertex *spdv = esd->GetPrimaryVertexSPD(); | |
b3b7b8d3 | 166 | if ( ! spdv->GetStatus()) { |
167 | Info("primary_vertex_spd", "Primary vertex SPD not available."); | |
168 | return 0; | |
169 | } | |
ad5abc55 | 170 | |
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); | |
174 | gEve->Redraw3D(); | |
175 | return ls; | |
176 | } | |
177 | ||
178 | TEveStraightLineSet* | |
179 | primary_vertex_tpc(Bool_t use_sigma=kTRUE, Float_t fx=1, Float_t fy=1, Float_t fz=1) | |
180 | { | |
181 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
182 | AliESDVertex *tpcv = esd->GetPrimaryVertexTPC(); | |
b3b7b8d3 | 183 | if ( ! pv->GetStatus()) { |
184 | Info("primary_vertex_tpc", "Primary vertex TPC not available."); | |
185 | return 0; | |
186 | } | |
ad5abc55 | 187 | |
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); | |
191 | gEve->Redraw3D(); | |
192 | return ls; | |
193 | } | |
194 | ||
195 | //------------------------------------------------------------------------------ | |
196 | // Ellipse | |
197 | //------------------------------------------------------------------------------ | |
198 | ||
199 | TEveStraightLineSet* | |
200 | primary_vertex_ellipse(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
201 | { | |
202 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
203 | AliESDVertex *pv = esd->GetPrimaryVertex(); | |
b3b7b8d3 | 204 | if ( ! pv->GetStatus()) { |
205 | Info("primary_vertex_ellipse", "Primary vertex not available."); | |
206 | return 0; | |
207 | } | |
ad5abc55 | 208 | |
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); | |
212 | gEve->Redraw3D(); | |
213 | return ls; | |
214 | } | |
215 | ||
216 | TEveStraightLineSet* | |
217 | primary_vertex_ellipse_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
218 | { | |
219 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
220 | AliESDVertex *spdv = esd->GetPrimaryVertexSPD(); | |
b3b7b8d3 | 221 | if ( ! spdv->GetStatus()) { |
222 | Info("primary_vertex_ellipse_spd", "Primary vertex SPD not available."); | |
223 | return 0; | |
224 | } | |
ad5abc55 | 225 | |
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); | |
229 | gEve->Redraw3D(); | |
230 | return ls; | |
231 | } | |
232 | ||
233 | TEveStraightLineSet* | |
234 | primary_vertex_ellipse_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
235 | { | |
236 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
237 | AliESDVertex *tpcv = esd->GetPrimaryVertexTPC(); | |
b3b7b8d3 | 238 | if ( ! pv->GetStatus()) { |
239 | Info("primary_vertex_ellipse_tpc", "Primary vertex TPC not available."); | |
240 | return 0; | |
241 | } | |
ad5abc55 | 242 | |
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); | |
246 | gEve->Redraw3D(); | |
247 | return ls; | |
248 | } | |
249 | ||
250 | //------------------------------------------------------------------------------ | |
251 | // Box | |
252 | //------------------------------------------------------------------------------ | |
253 | ||
254 | TEveStraightLineSet* | |
255 | primary_vertex_box(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
256 | { | |
257 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
258 | AliESDVertex *pv = esd->GetPrimaryVertex(); | |
b3b7b8d3 | 259 | if ( ! pv->GetStatus()) { |
260 | Info("primary_vertex_box", "Primary vertex not available."); | |
261 | return 0; | |
262 | } | |
ad5abc55 | 263 | |
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); | |
267 | gEve->Redraw3D(); | |
268 | return ls; | |
269 | } | |
270 | ||
271 | TEveStraightLineSet* | |
272 | primary_vertex_box_spd(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
273 | { | |
274 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
275 | AliESDVertex *spdv = esd->GetPrimaryVertexSPD(); | |
b3b7b8d3 | 276 | if ( ! spdv->GetStatus()) { |
277 | Info("primary_vertex_box_spd", "Primary vertex SPD not available."); | |
278 | return 0; | |
279 | } | |
ad5abc55 | 280 | |
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); | |
284 | gEve->Redraw3D(); | |
285 | return ls; | |
286 | } | |
287 | ||
288 | TEveStraightLineSet* | |
289 | primary_vertex_box_tpc(Bool_t use_sigma=kTRUE, Float_t fx=30, Float_t fy=30, Float_t fz=10) | |
290 | { | |
291 | AliESDEvent *esd = AliEveEventManager::AssertESD(); | |
292 | AliESDVertex *tpcv = esd->GetPrimaryVertexTPC(); | |
b3b7b8d3 | 293 | if ( ! pv->GetStatus()) { |
294 | Info("primary_vertex_box_tpc", "Primary vertex TPC not available."); | |
295 | return 0; | |
296 | } | |
ad5abc55 | 297 | |
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); | |
301 | gEve->Redraw3D(); | |
302 | return ls; | |
32e219c2 | 303 | } |