This commit was generated by cvs2svn to compensate for changes in r165,
[u/mrichter/AliRoot.git] / RALICE / AliVertex.cxx
CommitLineData
d88f97cc 1#include "AliVertex.h"
2
3ClassImp(AliVertex) // Class implementation to enable ROOT I/O
4
5AliVertex::AliVertex()
6{
7// Default constructor
8// All variables initialised to 0
9// Initial maximum number of tracks is set to the default value
10// Initial maximum number of sec. vertices is set to the default value
11 fNvmax=0;
12 fVertices=0;
13 Reset();
14 SetNtinit();
15 SetNvmax();
16}
17///////////////////////////////////////////////////////////////////////////
18AliVertex::AliVertex(Int_t n)
19{
20// Create a vertex to hold initially a maximum of n tracks
21// All variables initialised to 0
22 fNvmax=0;
23 fVertices=0;
24 Reset();
25 if (n > 0)
26 {
27 SetNtinit(n);
28 }
29 else
30 {
31 cout << endl;
32 cout << " *AliVertex* Initial max. number of tracks entered : " << n << endl;
33 cout << " This is invalid. Default initial maximum will be used." << endl;
34 cout << endl;
35 SetNtinit();
36 }
37 SetNvmax();
38}
39///////////////////////////////////////////////////////////////////////////
40AliVertex::~AliVertex()
41{
42// Default destructor
43 if (fVertices) delete fVertices;
44 fVertices=0;
45}
46///////////////////////////////////////////////////////////////////////////
47void AliVertex::SetNvmax(Int_t n)
48{
49// Set the initial maximum number of (secondary) vertices
50 if (n > 0)
51 {
52 fNvmax=n;
53 }
54 else
55 {
56 fNvmax=1;
57 }
58 if (fVertices) delete fVertices;
59 fVertices=new TObjArray(fNvmax);
60}
61///////////////////////////////////////////////////////////////////////////
62void AliVertex::Reset()
63{
64// Reset all variables to 0
65// The max. number of tracks is set to the initial value again
66// The max. number of vertices is set to the default value again
67
68 AliJet::Reset();
69
70 fNvtx=0;
71 if (fNvmax>0) SetNvmax(fNvmax);
72}
73///////////////////////////////////////////////////////////////////////////
74void AliVertex::Add(AliJet& j)
75{
76// Add the tracks of a jet to the vertex
77 AliTrack* tj;
78 for (Int_t i=1; i<=j.GetNtracks(); i++)
79 {
80 tj=j.GetTrack(i);
81 AliJet::Add(tj);
82 }
83}
84///////////////////////////////////////////////////////////////////////////
85void AliVertex::Add(AliVertex& v)
86{
87// Add a (secondary) vertex to the current vertex.
88// In case the maximum number of (secondary) vertices has been reached,
89// the array space will be extended automatically
90//
91// Note : The 4-momentum of the current (primary) vertex
92// is updated automatically, but the track connecting
93// both vertices has to be entered separately by the user.
94//
95 if (fNvtx == fNvmax) // Check if maximum vertex number is reached
96 {
97 fNvmax++;
98 fVertices->Expand(fNvmax);
99 }
100
101 // Update 4-momentum for current vertex
102 fNvtx++;
103 fVertices->Add(&v);
104 (Ali4Vector)(*this)+=v;
105}
106///////////////////////////////////////////////////////////////////////////
107void AliVertex::Info(TString f)
108{
109// Provide vertex information within the coordinate frame f
110 cout << " *AliVertex::Info* Invmass : " << GetInvmass()
111 << " Charge : " << GetCharge() << " Momentum : " << GetMomentum()
112 << " Ntracks : " << GetNtracks() << " Nvertices : " << fNvtx << endl;
113 cout << " ";
114 Ali4Vector::Info(f);
115 cout << " Position";
116 AliPosition::Info(f);
117}
118///////////////////////////////////////////////////////////////////////////
119void AliVertex::List(TString f)
120{
121// Provide primary track and sec. vertex information within the coordinate frame f
122
123 Info(f); // Information of the current vertex
124
125 // The tracks of this vertex
126 AliTrack* t;
127 for (Int_t it=1; it<=GetNtracks(); it++)
128 {
129 t=GetTrack(it);
130 if (t)
131 {
132 cout << " ---Track no. " << it << endl;
133 cout << " ";
134 t->Info(f);
135 }
136 else
137 {
138 cout << " *AliVertex::List* Error : No track present." << endl;
139 }
140 }
141
142 // The secondary vertices of this vertex
143 AliVertex* v;
144 for (Int_t iv=1; iv<=GetNvertices(); iv++)
145 {
146 v=GetVertex(iv);
147 if (v)
148 {
149 cout << " ---Level 1 sec. vertex no. " << iv << endl;
150 cout << " ";
151 v->Info(f);
152 }
153 else
154 {
155 cout << " *AliVertex::List* Error : No sec. vertex present." << endl;
156 }
157 }
158}
159///////////////////////////////////////////////////////////////////////////
160void AliVertex::ListAll(TString f)
161{
162// Provide complete (sec) vertex and (decay) track info within the coordinate frame f
163
164 Info(f); // Information of the current vertex
165
166 // The tracks of this vertex
167 AliTrack* t;
168 for (Int_t it=1; it<=GetNtracks(); it++)
169 {
170 t=GetTrack(it);
171 if (t)
172 {
173 cout << " ---Track no. " << it << endl;
174 cout << " ";
175 t->ListAll(f);
176 }
177 else
178 {
179 cout << " *AliVertex::ListAll* Error : No track present." << endl;
180 }
181 }
182
183 AliVertex* v=this;
184 Dump(v,1,f); // Information of all sec. vertices
185}
186//////////////////////////////////////////////////////////////////////////
187void AliVertex::Dump(AliVertex* v,Int_t n,TString f)
188{
189// Recursively provide the info of all secondary vertices of this vertex
190 AliVertex* vs;
191 for (Int_t iv=1; iv<=v->GetNvertices(); iv++)
192 {
193 vs=v->GetVertex(iv);
194 if (vs)
195 {
196 cout << " ---Level " << n << " sec. vertex no. " << iv << endl;
197 cout << " ";
198 vs->Info(f);
199
200 // The tracks of this vertex
201 AliTrack* t;
202 for (Int_t it=1; it<=vs->GetNtracks(); it++)
203 {
204 t=vs->GetTrack(it);
205 if (t)
206 {
207 cout << " ---Track no. " << it << endl;
208 cout << " ";
209 t->ListAll(f);
210 }
211 else
212 {
213 cout << " *AliVertex::Dump* Error : No track present." << endl;
214 }
215 }
216
217 // Go for next sec. vertex level of this sec. vertex recursively
218 Dump(vs,n+1,f);
219 }
220 else
221 {
222 cout << " *AliVertex::Dump* Error : No sec. vertex present." << endl;
223 }
224 }
225}
226//////////////////////////////////////////////////////////////////////////
227Int_t AliVertex::GetNvertices()
228{
229// Return the current number of (secondary) vertices
230 return fNvtx;
231}
232///////////////////////////////////////////////////////////////////////////
233AliVertex* AliVertex::GetVertex(Int_t i)
234{
235// Return the i-th (secondary) vertex of the current vertex
236 return (AliVertex*)fVertices->At(i-1);
237}
238///////////////////////////////////////////////////////////////////////////