]> git.uio.no Git - u/mrichter/AliRoot.git/blame - EVE/alice-macros/primary_vertex.C
From Andrea - new macro for visualization of heavy-flavour decays.
[u/mrichter/AliRoot.git] / EVE / alice-macros / primary_vertex.C
CommitLineData
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 15TEveCompound* 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
37TEveStraightLineSet*
38make_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 62TEveStraightLineSet*
63make_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 102TEveStraightLineSet*
103make_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
144TEveStraightLineSet*
145primary_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
161TEveStraightLineSet*
162primary_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
178TEveStraightLineSet*
179primary_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
199TEveStraightLineSet*
200primary_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
216TEveStraightLineSet*
217primary_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
233TEveStraightLineSet*
234primary_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
254TEveStraightLineSet*
255primary_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
271TEveStraightLineSet*
272primary_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
288TEveStraightLineSet*
289primary_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}