d88f97cc |
1 | #include "AliVertex.h" |
2 | |
3 | ClassImp(AliVertex) // Class implementation to enable ROOT I/O |
4 | |
5 | AliVertex::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 | /////////////////////////////////////////////////////////////////////////// |
18 | AliVertex::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 | /////////////////////////////////////////////////////////////////////////// |
40 | AliVertex::~AliVertex() |
41 | { |
42 | // Default destructor |
43 | if (fVertices) delete fVertices; |
44 | fVertices=0; |
45 | } |
46 | /////////////////////////////////////////////////////////////////////////// |
47 | void 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 | /////////////////////////////////////////////////////////////////////////// |
62 | void 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 | /////////////////////////////////////////////////////////////////////////// |
74 | void 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 | /////////////////////////////////////////////////////////////////////////// |
85 | void 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 | /////////////////////////////////////////////////////////////////////////// |
107 | void 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 | /////////////////////////////////////////////////////////////////////////// |
119 | void 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 | /////////////////////////////////////////////////////////////////////////// |
160 | void 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 | ////////////////////////////////////////////////////////////////////////// |
187 | void 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 | ////////////////////////////////////////////////////////////////////////// |
227 | Int_t AliVertex::GetNvertices() |
228 | { |
229 | // Return the current number of (secondary) vertices |
230 | return fNvtx; |
231 | } |
232 | /////////////////////////////////////////////////////////////////////////// |
233 | AliVertex* 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 | /////////////////////////////////////////////////////////////////////////// |