]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/alice-macros/primary_vertex.C
Merge changes from branches/dev/EVE. This branch was following development in ROOT...
[u/mrichter/AliRoot.git] / EVE / alice-macros / primary_vertex.C
1 // $Id$
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          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 TPolyMarker3D* make_vertex_marker(AliESDVertex* v, const Text_t* name )
11 {
12   Double_t x[3], e[3];
13   v->GetXYZ(x);
14   v->GetSigmaXYZ(e);
15
16   printf("%16s: %f %f %f   -   %f %f %f\n", name,
17          x[0], x[1], x[2], e[0], e[1], e[2]);
18
19   TPolyMarker3D* m = new TPolyMarker3D(1);
20   m->SetName(name);
21   m->SetPoint(0, x[0], x[1], x[2]);
22
23   return m;
24 }
25
26 TEveBoxSet* make_vertex_boxes(AliESDVertex* v)
27 {
28   Double_t x[3], e[3];
29   v->GetXYZ(x);
30   v->GetSigmaXYZ(e);
31
32   TEveBoxSet* bs;
33
34   bs = new TEveBoxSet("+- 10 x 10 x 20mm");
35   bs->SetRenderMode(TEveBoxSet::RM_TEveLine);
36   bs->AddBox(Box(-1, x[0], x[1], x[2], 1, 1, 2));
37   bs->SetMainColor((Color_t) 2);
38   gEve->AddElement(bs);
39
40   bs = new TEveBoxSet("+- 30 sigma_r x 10 sigma_z");
41   bs->SetRenderMode(TEveBoxSet::RM_TEveLine);
42   bs->AddBox(Box(-1, x[0], x[1], x[2], 30*e[0], 30*e[1], 10*e[2]));
43   bs->SetMainColor((Color_t) 3);
44   gEve->AddElement(bs);
45
46   gEve->Redraw3D();
47 }
48
49 void register_vertex_marker(TPolyMarker3D* m)
50 {
51   Color_t* colp = TEveUtil::FindColorVar(m, "fMarkerColor");
52   TEveElementObjectPtr* rnrEl = new TEveElementObjectPtr(m, *colp);
53   gEve->AddElement(rnrEl);
54   gEve->Redraw3D();
55 }
56
57 void primary_vertex_primitive(Bool_t showSPD=kTRUE, Bool_t showBoxes=kFALSE)
58 {
59   AliESDEvent* esd = AliEveEventManager::AssertESD();
60
61   AliESDVertex*  pv  = esd->GetPrimaryVertex();
62   TPolyMarker3D* pvm = make_vertex_marker(pv, "Primary Vertex");
63   pvm->SetMarkerStyle(5);
64   pvm->SetMarkerColor(5);
65   pvm->SetMarkerSize(1.4);
66   register_vertex_marker(pvm);
67
68   if (showSPD) {
69     AliESDVertex*  spdv  = esd->GetVertex();
70     TPolyMarker3D* spdvm = make_vertex_marker(spdv, "SPD Vertex");
71     spdvm->SetMarkerStyle(2);
72     spdvm->SetMarkerColor(6);
73     register_vertex_marker(spdvm);
74   }
75
76   if (showBoxes)
77     make_vertex_boxes(pv);
78 }
79
80 /******************************************************************************/
81
82 TEveStraightLineSet* ESDvertex_lineset(AliESDVertex* v, const Text_t* name)
83 {
84   Double_t x[3], e[3];
85   v->GetXYZ(x); v->GetSigmaXYZ(e);
86   printf("%16s: %f %f %f   -   %f %f %f\n", name,
87          x[0], x[1], x[2], e[0], e[1], e[2]);
88
89   // dimensions
90   TEveStraightLineSet* ls = new TEveStraightLineSet();
91   ls->SetName(name);
92   ls->AddLine(e[0], 0, 0, -e[0], 0, 0);
93   ls->AddLine(0, e[1], 0, 0, -e[1], 0);
94   ls->AddLine(0, 0, e[2], 0, 0, -e[2]);
95   for(Int_t i =0; i < 3; i++)
96   {
97     ls->AddMarker(i, 0);
98     ls->AddMarker(i, 1);
99   }
100
101   // centre marker
102   ls->AddMarker(0, 0.5);
103   ls->RefMainTrans().SetPos(x);
104   return ls;
105 }
106
107 void make_vertex_ellipses(TEveStraightLineSet* ls, AliESDVertex* v, Bool_t ellipseUseSigma)
108 {
109   Double_t x[3], e[3];
110   v->GetXYZ(x); v->GetSigmaXYZ(e);
111
112   if (ellipseUseSigma)
113   {
114     e[0] *= 30; e[1] *= 30; e[2] *= 10;
115     ls->SetMarkerStyle(5);
116     ls->SetMarkerColor(5);
117     ls->SetMarkerSize(1.4);
118     ls->SetLineColor(7);
119     ls->SetTitle("+- 30 sigma_r x 10 sigma_z");
120   }
121   else
122   {
123     e[0] = 1; e[1] = 1; e[2] = 2;
124     ls->SetMarkerStyle(2);
125     ls->SetMarkerColor(6);
126     ls->SetLineColor(6);
127     ls->SetTitle("+- 10 x 10 x 20mm");
128   }
129   Int_t N = 32;
130   Float_t S = 2*TMath::Pi()/N;
131   Float_t b, a, phi;
132
133   a = e[0]; b = e[1];
134   for (Int_t i = 0; i<N; i++)
135     ls->AddLine(a*TMath::Cos(i*S)  , b*TMath::Sin(i*S)  , 0,
136                 a*TMath::Cos(i*S+S), b*TMath::Sin(i*S+S), 0);
137
138   a = e[0]; b = e[2];
139   for (Int_t i = 0; i<N; i++)
140     ls->AddLine(a*TMath::Cos(i*S)  , 0, b*TMath::Sin(i*S),
141                 a*TMath::Cos(i*S+S), 0, b*TMath::Sin(i*S+S));
142
143   a = e[1]; b = e[2];
144   for (Int_t i = 0; i<N; i++)
145     ls->AddLine(0, a*TMath::Cos(i*S)  ,  b*TMath::Sin(i*S),
146                 0, a*TMath::Cos(i*S+S),  b*TMath::Sin(i*S+S));
147 }
148
149 void primary_vertex(Bool_t showSPD=kTRUE, Bool_t rnrEllipse=kTRUE)
150 {
151   AliESDEvent* esd = AliEveEventManager::AssertESD();
152   TEveStraightLineSet* ls;
153
154   AliESDVertex* PV  =  esd->GetPrimaryVertex();
155   ls = ESDvertex_lineset(PV, "Primary Vertex");
156   if (rnrEllipse) make_vertex_ellipses(ls, PV, kTRUE);
157   gEve->AddElement(ls);
158
159   if (showSPD)
160   {
161     AliESDVertex*  SPDV  = esd->GetVertex();
162     ls = ESDvertex_lineset(SPDV, "SPD Vertex");
163     if (rnrEllipse) make_vertex_ellipses(ls, SPDV, kFALSE);
164     gEve->AddElement(ls);
165   }
166 }