]>
Commit | Line | Data |
---|---|---|
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); | |
ea175c8c | 104 | (*(Ali4Vector*)this)+=v; |
d88f97cc | 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 | /////////////////////////////////////////////////////////////////////////// |