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