BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
L1CAMergeClones.cxx
Go to the documentation of this file.
1/*
2 *=====================================================
3 *
4 * CBM Level 1 Reconstruction
5 *
6 * Authors: M.Zyzak
7 *
8 * e-mail :
9 *
10 *=====================================================
11 *
12 * Merge Clones
13 *
14 */
15
16#include "L1Algo.h"
17#include "L1Extrapolation.h"
18
19#include <iostream>
20
21// using namespace std;
22using std::cout;
23using std::endl;
24using std::vector;
25
27{
28 fvec d[5], uud, u[5][5];
29 for (int i = 0; i < 5; i++) {
30 d[i] = 0.f;
31 for (int j = 0; j < 5; j++)
32 u[i][j] = 0.f;
33 }
34
35 for (int i = 0; i < 5; i++) {
36 uud = 0.f;
37 for (int j = 0; j < i; j++)
38 uud += u[j][i] * u[j][i] * d[j];
39 uud = a[i * (i + 3) / 2] - uud;
40
41 fvec smallval = 1.e-12;
42 fvec initialised = fvec(uud < smallval);
43 uud = ((!initialised) & uud) + (smallval & initialised);
44
45 d[i] = uud / fabs(uud);
46 u[i][i] = sqrt(fabs(uud));
47
48 for (int j = i + 1; j < 5; j++) {
49 uud = 0.f;
50 for (int k = 0; k < i; k++)
51 uud += u[k][i] * u[k][j] * d[k];
52 uud = a[j * (j + 1) / 2 + i] /*a[i][j]*/ - uud;
53 u[i][j] = d[i] / u[i][i] * uud;
54 }
55 }
56
57 fvec u1[5];
58
59 for (int i = 0; i < 5; i++) {
60 u1[i] = u[i][i];
61 u[i][i] = 1.f / u[i][i];
62 }
63 for (int i = 0; i < 4; i++) {
64 u[i][i + 1] = -u[i][i + 1] * u[i][i] * u[i + 1][i + 1];
65 }
66 for (int i = 0; i < 3; i++) {
67 u[i][i + 2] = u[i][i + 1] * u1[i + 1] * u[i + 1][i + 2] - u[i][i + 2] * u[i][i] * u[i + 2][i + 2];
68 }
69 for (int i = 0; i < 2; i++) {
70 u[i][i + 3] = u[i][i + 2] * u1[i + 2] * u[i + 2][i + 3] - u[i][i + 3] * u[i][i] * u[i + 3][i + 3];
71 u[i][i + 3] -= u[i][i + 1] * u1[i + 1] * (u[i + 1][i + 2] * u1[i + 2] * u[i + 2][i + 3] - u[i + 1][i + 3]);
72 }
73 u[0][4] = u[0][2] * u1[2] * u[2][4] - u[0][4] * u[0][0] * u[4][4];
74 u[0][4] += u[0][1] * u1[1] * (u[1][4] - u[1][3] * u1[3] * u[3][4] - u[1][2] * u1[2] * u[2][4]);
75 u[0][4] += u[3][4] * u1[3] * (u[0][3] - u1[2] * u[2][3] * (u[0][2] - u[0][1] * u1[1] * u[1][2]));
76
77 for (int i = 0; i < 5; i++)
78 a[i + 10] = u[i][4] * d[4] * u[4][4];
79 for (int i = 0; i < 4; i++)
80 a[i + 6] = u[i][3] * u[3][3] * d[3] + u[i][4] * u[3][4] * d[4];
81 for (int i = 0; i < 3; i++)
82 a[i + 3] = u[i][2] * u[2][2] * d[2] + u[i][3] * u[2][3] * d[3] + u[i][4] * u[2][4] * d[4];
83 for (int i = 0; i < 2; i++)
84 a[i + 1] =
85 u[i][1] * u[1][1] * d[1] + u[i][2] * u[1][2] * d[2] + u[i][3] * u[1][3] * d[3] + u[i][4] * u[1][4] * d[4];
86 a[0] = u[0][0] * u[0][0] * d[0] + u[0][1] * u[0][1] * d[1] + u[0][2] * u[0][2] * d[2] + u[0][3] * u[0][3] * d[3]
87 + u[0][4] * u[0][4] * d[4];
88}
89
90void L1Algo::MultiplySS(fvec const C[15], fvec const V[15], fvec K[5][5])
91{
92 K[0][0] = C[0] * V[0] + C[1] * V[1] + C[3] * V[3] + C[6] * V[6] + C[10] * V[10];
93 K[0][1] = C[0] * V[1] + C[1] * V[2] + C[3] * V[4] + C[6] * V[7] + C[10] * V[11];
94 K[0][2] = C[0] * V[3] + C[1] * V[4] + C[3] * V[5] + C[6] * V[8] + C[10] * V[12];
95 K[0][3] = C[0] * V[6] + C[1] * V[7] + C[3] * V[8] + C[6] * V[9] + C[10] * V[13];
96 K[0][4] = C[0] * V[10] + C[1] * V[11] + C[3] * V[12] + C[6] * V[13] + C[10] * V[14];
97
98 K[1][0] = C[1] * V[0] + C[2] * V[1] + C[4] * V[3] + C[7] * V[6] + C[11] * V[10];
99 K[1][1] = C[1] * V[1] + C[2] * V[2] + C[4] * V[4] + C[7] * V[7] + C[11] * V[11];
100 K[1][2] = C[1] * V[3] + C[2] * V[4] + C[4] * V[5] + C[7] * V[8] + C[11] * V[12];
101 K[1][3] = C[1] * V[6] + C[2] * V[7] + C[4] * V[8] + C[7] * V[9] + C[11] * V[13];
102 K[1][4] = C[1] * V[10] + C[2] * V[11] + C[4] * V[12] + C[7] * V[13] + C[11] * V[14];
103
104 K[2][0] = C[3] * V[0] + C[4] * V[1] + C[5] * V[3] + C[8] * V[6] + C[12] * V[10];
105 K[2][1] = C[3] * V[1] + C[4] * V[2] + C[5] * V[4] + C[8] * V[7] + C[12] * V[11];
106 K[2][2] = C[3] * V[3] + C[4] * V[4] + C[5] * V[5] + C[8] * V[8] + C[12] * V[12];
107 K[2][3] = C[3] * V[6] + C[4] * V[7] + C[5] * V[8] + C[8] * V[9] + C[12] * V[13];
108 K[2][4] = C[3] * V[10] + C[4] * V[11] + C[5] * V[12] + C[8] * V[13] + C[12] * V[14];
109
110 K[3][0] = C[6] * V[0] + C[7] * V[1] + C[8] * V[3] + C[9] * V[6] + C[13] * V[10];
111 K[3][1] = C[6] * V[1] + C[7] * V[2] + C[8] * V[4] + C[9] * V[7] + C[13] * V[11];
112 K[3][2] = C[6] * V[3] + C[7] * V[4] + C[8] * V[5] + C[9] * V[8] + C[13] * V[12];
113 K[3][3] = C[6] * V[6] + C[7] * V[7] + C[8] * V[8] + C[9] * V[9] + C[13] * V[13];
114 K[3][4] = C[6] * V[10] + C[7] * V[11] + C[8] * V[12] + C[9] * V[13] + C[13] * V[14];
115
116 K[4][0] = C[10] * V[0] + C[11] * V[1] + C[12] * V[3] + C[13] * V[6] + C[14] * V[10];
117 K[4][1] = C[10] * V[1] + C[11] * V[2] + C[12] * V[4] + C[13] * V[7] + C[14] * V[11];
118 K[4][2] = C[10] * V[3] + C[11] * V[4] + C[12] * V[5] + C[13] * V[8] + C[14] * V[12];
119 K[4][3] = C[10] * V[6] + C[11] * V[7] + C[12] * V[8] + C[13] * V[9] + C[14] * V[13];
120 K[4][4] = C[10] * V[10] + C[11] * V[11] + C[12] * V[12] + C[13] * V[13] + C[14] * V[14];
121}
122
123void L1Algo::MultiplyMS(fvec const C[5][5], fvec const V[15], fvec K[15])
124{
125 K[0] = C[0][0] * V[0] + C[0][1] * V[1] + C[0][2] * V[3] + C[0][3] * V[6] + C[0][4] * V[10];
126
127 K[1] = C[1][0] * V[0] + C[1][1] * V[1] + C[1][2] * V[3] + C[1][3] * V[6] + C[1][4] * V[10];
128 K[2] = C[1][0] * V[1] + C[1][1] * V[2] + C[1][2] * V[4] + C[1][3] * V[7] + C[1][4] * V[11];
129
130 K[3] = C[2][0] * V[0] + C[2][1] * V[1] + C[2][2] * V[3] + C[2][3] * V[6] + C[2][4] * V[10];
131 K[4] = C[2][0] * V[1] + C[2][1] * V[2] + C[2][2] * V[4] + C[2][3] * V[7] + C[2][4] * V[11];
132 K[5] = C[2][0] * V[3] + C[2][1] * V[4] + C[2][2] * V[5] + C[2][3] * V[8] + C[2][4] * V[12];
133
134 K[6] = C[3][0] * V[0] + C[3][1] * V[1] + C[3][2] * V[3] + C[3][3] * V[6] + C[3][4] * V[10];
135 K[7] = C[3][0] * V[1] + C[3][1] * V[2] + C[3][2] * V[4] + C[3][3] * V[7] + C[3][4] * V[11];
136 K[8] = C[3][0] * V[3] + C[3][1] * V[4] + C[3][2] * V[5] + C[3][3] * V[8] + C[3][4] * V[12];
137 K[9] = C[3][0] * V[6] + C[3][1] * V[7] + C[3][2] * V[8] + C[3][3] * V[9] + C[3][4] * V[13];
138
139 K[10] = C[4][0] * V[0] + C[4][1] * V[1] + C[4][2] * V[3] + C[4][3] * V[6] + C[4][4] * V[10];
140 K[11] = C[4][0] * V[1] + C[4][1] * V[2] + C[4][2] * V[4] + C[4][3] * V[7] + C[4][4] * V[11];
141 K[12] = C[4][0] * V[3] + C[4][1] * V[4] + C[4][2] * V[5] + C[4][3] * V[8] + C[4][4] * V[12];
142 K[13] = C[4][0] * V[6] + C[4][1] * V[7] + C[4][2] * V[8] + C[4][3] * V[9] + C[4][4] * V[13];
143 K[14] = C[4][0] * V[10] + C[4][1] * V[11] + C[4][2] * V[12] + C[4][3] * V[13] + C[4][4] * V[14];
144}
145
146void L1Algo::MultiplySR(fvec const C[15], fvec const r_in[5], fvec r_out[5])
147{
148 r_out[0] = r_in[0] * C[0] + r_in[1] * C[1] + r_in[2] * C[3] + r_in[3] * C[6] + r_in[4] * C[10];
149 r_out[1] = r_in[0] * C[1] + r_in[1] * C[2] + r_in[2] * C[4] + r_in[3] * C[7] + r_in[4] * C[11];
150 r_out[2] = r_in[0] * C[3] + r_in[1] * C[4] + r_in[2] * C[5] + r_in[3] * C[8] + r_in[4] * C[12];
151 r_out[3] = r_in[0] * C[6] + r_in[1] * C[7] + r_in[2] * C[8] + r_in[3] * C[9] + r_in[4] * C[13];
152 r_out[4] = r_in[0] * C[10] + r_in[1] * C[11] + r_in[2] * C[12] + r_in[3] * C[13] + r_in[4] * C[14];
153}
154
156 fvec const C[15],
157 fvec const m[5],
158 fvec const V[15],
159 fvec R[5],
160 fvec W[15],
161 fvec* chi2)
162{
163 fvec S[15];
164 for (int i = 0; i < 15; i++) {
165 if (W)
166 W[i] = C[i];
167 S[i] = C[i] + V[i];
168 }
169
171
172 fvec dzeta[5];
173
174 for (int i = 0; i < 5; i++)
175 dzeta[i] = m[i] - r[i];
176
177 if (W && R) {
178 for (int i = 0; i < 5; i++)
179 R[i] = r[i];
180
181 fvec K[5][5];
182 MultiplySS(C, S, K);
183
184 fvec KC[15];
185 MultiplyMS(K, C, KC);
186 for (int i = 0; i < 15; i++)
187 W[i] -= KC[i];
188
189 fvec kd;
190 for (int i = 0; i < 5; i++) {
191 kd = 0.f;
192 for (int j = 0; j < 5; j++)
193 kd += K[i][j] * dzeta[j];
194 R[i] += kd;
195 }
196 }
197 if (chi2) {
198 fvec S_dzeta[5];
199 MultiplySR(S, dzeta, S_dzeta);
200 *chi2 = dzeta[0] * S_dzeta[0] + dzeta[1] * S_dzeta[1] + dzeta[2] * S_dzeta[2] + dzeta[3] * S_dzeta[3]
201 + dzeta[4] * S_dzeta[4];
202 }
203}
204
206{
207 vector<unsigned short> FirstHit;
208 vector<unsigned short> LastHit;
209 vector<THitI> FirstHitIndex;
210 vector<THitI> LastHitIndex;
211 vector<unsigned short> Neighbour;
212 vector<float> TrackChi2;
213 vector<bool> IsNext;
214 vector<bool> IsUsed;
215
216 vector<L1Track> vTracksNew;
217 vTracksNew.reserve(vTracks.size());
218 vector<THitI> vRecoHitsNew;
219 vRecoHitsNew.reserve(vRecoHits.size());
220
221 FirstHit.resize(vTracks.size());
222 LastHit.resize(vTracks.size());
223 FirstHitIndex.resize(vTracks.size());
224 LastHitIndex.resize(vTracks.size());
225 IsUsed.resize(vTracks.size());
226 TrackChi2.resize(vTracks.size());
227 Neighbour.resize(vTracks.size());
228 IsNext.resize(vTracks.size());
229
230 THitI start_hit = 0;
231 unsigned short ista = 0;
232
233 for (unsigned short iTr = 0; iTr < vTracks.size(); iTr++) {
234 FirstHitIndex[iTr] = start_hit;
235 ista = vSFlag[vStsHits[vRecoHits[start_hit]].f] / 4;
236 FirstHit[iTr] = ista;
237 start_hit += vTracks[iTr].NHits - 1;
238 LastHitIndex[iTr] = start_hit;
239 ista = vSFlag[vStsHits[vRecoHits[start_hit]].f] / 4;
240 LastHit[iTr] = ista;
241 start_hit++;
242
243 IsUsed[iTr] = 0;
244 Neighbour[iTr] = 50000;
245 TrackChi2[iTr] = 100000;
246 IsNext[iTr] = 0;
247 }
248
250 // KFTrackFitter_simple();
251
252 L1TrackPar Tb;
253 L1TrackPar Tf;
254 L1FieldValue fBm, fBb, fBf _fvecalignment;
256
257 for (int iTr = 0; iTr < static_cast<unsigned short>(vTracks.size()); iTr++) {
258 if (static_cast<int>(vTracks[iTr].NHits) > 6)
259 continue;
260 for (int jTr = 0; jTr < static_cast<unsigned short>(vTracks.size()); jTr++) {
261 if (iTr == jTr)
262 continue;
263 if (static_cast<int>(vTracks[iTr].NHits) > 6)
264 continue;
265
266 unsigned short dist = 0;
267 unsigned short stab = 0, staf = 0;
268 bool IsNextTemp = 0;
269 // if((vTracks[iTr].TFirst[4] - vTracks[jTr].TFirst[4])*(vTracks[iTr].TFirst[4] - vTracks[jTr].TFirst[4])
270 // > 9*(vTracks[iTr].CFirst[14]+vTracks[jTr].CFirst[14]) ) continue;
271 if (FirstHit[iTr] > LastHit[jTr]) {
272 dist = FirstHit[iTr] - LastHit[jTr];
273
274 stab = FirstHit[iTr];
275 staf = LastHit[jTr];
276 IsNextTemp = 1;
277
278 Tb.x = vTracks[iTr].TFirst[0];
279 Tb.y = vTracks[iTr].TFirst[1];
280 Tb.tx = vTracks[iTr].TFirst[2];
281 Tb.ty = vTracks[iTr].TFirst[3];
282 Tb.qp = vTracks[iTr].TFirst[4];
283 Tb.z = vTracks[iTr].TFirst[5];
284 Tb.C00 = vTracks[iTr].CFirst[0];
285 Tb.C10 = vTracks[iTr].CFirst[1];
286 Tb.C11 = vTracks[iTr].CFirst[2];
287 Tb.C20 = vTracks[iTr].CFirst[3];
288 Tb.C21 = vTracks[iTr].CFirst[4];
289 Tb.C22 = vTracks[iTr].CFirst[5];
290 Tb.C30 = vTracks[iTr].CFirst[6];
291 Tb.C31 = vTracks[iTr].CFirst[7];
292 Tb.C32 = vTracks[iTr].CFirst[8];
293 Tb.C33 = vTracks[iTr].CFirst[9];
294 Tb.C40 = vTracks[iTr].CFirst[10];
295 Tb.C41 = vTracks[iTr].CFirst[11];
296 Tb.C42 = vTracks[iTr].CFirst[12];
297 Tb.C43 = vTracks[iTr].CFirst[13];
298 Tb.C44 = vTracks[iTr].CFirst[14];
299
300 Tf.x = vTracks[jTr].TLast[0];
301 Tf.y = vTracks[jTr].TLast[1];
302 Tf.tx = vTracks[jTr].TLast[2];
303 Tf.ty = vTracks[jTr].TLast[3];
304 Tf.qp = vTracks[jTr].TLast[4];
305 Tf.z = vTracks[jTr].TLast[5];
306 Tf.C00 = vTracks[jTr].CLast[0];
307 Tf.C10 = vTracks[jTr].CLast[1];
308 Tf.C11 = vTracks[jTr].CLast[2];
309 Tf.C20 = vTracks[jTr].CLast[3];
310 Tf.C21 = vTracks[jTr].CLast[4];
311 Tf.C22 = vTracks[jTr].CLast[5];
312 Tf.C30 = vTracks[jTr].CLast[6];
313 Tf.C31 = vTracks[jTr].CLast[7];
314 Tf.C32 = vTracks[jTr].CLast[8];
315 Tf.C33 = vTracks[jTr].CLast[9];
316 Tf.C40 = vTracks[jTr].CLast[10];
317 Tf.C41 = vTracks[jTr].CLast[11];
318 Tf.C42 = vTracks[jTr].CLast[12];
319 Tf.C43 = vTracks[jTr].CLast[13];
320 Tf.C44 = vTracks[jTr].CLast[14];
321 // std::cout << "!!!!!!! Chi2 !!!!!! "<<vTracks[iTr].TFirst[0]<<"
322 // "<<vTracks[jTr].TLast[0]<<std::endl;
323 }
324 if (FirstHit[jTr] > LastHit[iTr]) {
325 dist = FirstHit[jTr] - LastHit[iTr];
326
327 stab = FirstHit[jTr];
328 staf = LastHit[iTr];
329
330 Tb.x = vTracks[jTr].TFirst[0];
331 Tb.y = vTracks[jTr].TFirst[1];
332 Tb.tx = vTracks[jTr].TFirst[2];
333 Tb.ty = vTracks[jTr].TFirst[3];
334 Tb.qp = vTracks[jTr].TFirst[4];
335 Tb.z = vTracks[jTr].TFirst[5];
336 Tb.C00 = vTracks[jTr].CFirst[0];
337 Tb.C10 = vTracks[jTr].CFirst[1];
338 Tb.C11 = vTracks[jTr].CFirst[2];
339 Tb.C20 = vTracks[jTr].CFirst[3];
340 Tb.C21 = vTracks[jTr].CFirst[4];
341 Tb.C22 = vTracks[jTr].CFirst[5];
342 Tb.C30 = vTracks[jTr].CFirst[6];
343 Tb.C31 = vTracks[jTr].CFirst[7];
344 Tb.C32 = vTracks[jTr].CFirst[8];
345 Tb.C33 = vTracks[jTr].CFirst[9];
346 Tb.C40 = vTracks[jTr].CFirst[10];
347 Tb.C41 = vTracks[jTr].CFirst[11];
348 Tb.C42 = vTracks[jTr].CFirst[12];
349 Tb.C43 = vTracks[jTr].CFirst[13];
350 Tb.C44 = vTracks[jTr].CFirst[14];
351
352 Tf.x = vTracks[iTr].TLast[0];
353 Tf.y = vTracks[iTr].TLast[1];
354 Tf.tx = vTracks[iTr].TLast[2];
355 Tf.ty = vTracks[iTr].TLast[3];
356 Tf.qp = vTracks[iTr].TLast[4];
357 Tf.z = vTracks[iTr].TLast[5];
358 Tf.C00 = vTracks[iTr].CLast[0];
359 Tf.C10 = vTracks[iTr].CLast[1];
360 Tf.C11 = vTracks[iTr].CLast[2];
361 Tf.C20 = vTracks[iTr].CLast[3];
362 Tf.C21 = vTracks[iTr].CLast[4];
363 Tf.C22 = vTracks[iTr].CLast[5];
364 Tf.C30 = vTracks[iTr].CLast[6];
365 Tf.C31 = vTracks[iTr].CLast[7];
366 Tf.C32 = vTracks[iTr].CLast[8];
367 Tf.C33 = vTracks[iTr].CLast[9];
368 Tf.C40 = vTracks[iTr].CLast[10];
369 Tf.C41 = vTracks[iTr].CLast[11];
370 Tf.C42 = vTracks[iTr].CLast[12];
371 Tf.C43 = vTracks[iTr].CLast[13];
372 Tf.C44 = vTracks[iTr].CLast[14];
373 }
374
375 if (dist == 0)
376 continue;
377 // if(((Tf.qp - Tb.qp)*(Tf.qp - Tb.qp)/(Tb.C44+Tf.C44))[0] > 25*10*7) continue;
378
379 unsigned short stam;
380
381 vStations[staf].fieldSlice.GetFieldValue(Tf.x, Tf.y, fBf);
382 vStations[stab].fieldSlice.GetFieldValue(Tb.x, Tb.y, fBb);
383 if (dist > 1)
384 stam = staf + 1;
385 else
386 stam = staf - 1;
387 fvec zm = vStations[stam].z;
388 fvec xm = 0.5 * (Tf.x + Tf.tx * (zm - Tf.z) + Tb.x + Tb.tx * (zm - Tb.z));
389 fvec ym = 0.5 * (Tb.y + Tb.ty * (zm - Tb.z) + Tb.y + Tb.ty * (zm - Tb.z));
390 vStations[stam].fieldSlice.GetFieldValue(xm, ym, fBm);
391 fld.Set(fBb, Tb.z, fBm, zm, fBf, Tf.z);
392
393 fvec zMiddle = 0.5 * (Tb.z + Tf.z);
394
395 L1Extrapolate(Tf, zMiddle, Tf.qp, fld);
396 L1Extrapolate(Tb, zMiddle, Tb.qp, fld);
397
398 fvec Chi2Tracks = 0.f;
399 FilterTracks(&(Tf.x), &(Tf.C00), &(Tb.x), &(Tb.C00), 0, 0, &Chi2Tracks);
400 if (Chi2Tracks[0] > 50)
401 continue;
402 if (Chi2Tracks[0] < TrackChi2[iTr] || Chi2Tracks[0] < TrackChi2[jTr]) {
403 // std::cout << "!!!!!!! Chi2 !!!!!! "<<Chi2Tracks<<" " <<iTr<<" " <<jTr<< std::endl;
404 if (Neighbour[iTr] < static_cast<unsigned short>(50000)) {
405 Neighbour[Neighbour[iTr]] = 50000;
406 TrackChi2[Neighbour[iTr]] = 100000;
407 IsNext[Neighbour[iTr]] = 0;
408 }
409 if (Neighbour[jTr] < static_cast<unsigned short>(50000)) {
410 Neighbour[Neighbour[jTr]] = 50000;
411 TrackChi2[Neighbour[jTr]] = 100000;
412 IsNext[Neighbour[jTr]] = 0;
413 }
414 Neighbour[iTr] = jTr;
415 Neighbour[jTr] = iTr;
416 TrackChi2[iTr] = Chi2Tracks[0];
417 TrackChi2[jTr] = Chi2Tracks[0];
418 IsNext[iTr] = IsNextTemp;
419 IsNext[jTr] = (!IsNextTemp);
420 }
421 }
422 }
423 for (int iTr = 0; iTr < static_cast<unsigned short>(vTracks.size()); iTr++) {
424 if (IsUsed[iTr])
425 continue;
426
427 vTracksNew.push_back(vTracks[iTr]);
428 if (!IsNext[iTr])
429 for (THitI HI = FirstHitIndex[iTr]; HI <= LastHitIndex[iTr]; HI++)
430 vRecoHitsNew.push_back(vRecoHits[HI]);
431
432 if (Neighbour[iTr] < 50000) {
433 IsUsed[Neighbour[iTr]] = 1;
434 vTracksNew.back().NHits += vTracks[Neighbour[iTr]].NHits;
435 for (THitI HI = FirstHitIndex[Neighbour[iTr]]; HI <= LastHitIndex[Neighbour[iTr]]; HI++)
436 vRecoHitsNew.push_back(vRecoHits[HI]);
437 }
438
439 if (IsNext[iTr])
440 for (THitI HI = FirstHitIndex[iTr]; HI <= LastHitIndex[iTr]; HI++)
441 vRecoHitsNew.push_back(vRecoHits[HI]);
442 }
443 vTracks.resize(vTracksNew.size());
444 for (unsigned short iTr = 0; iTr < vTracksNew.size(); iTr++)
445 vTracks[iTr] = vTracksNew[iTr];
446 vRecoHits.resize(vRecoHitsNew.size());
447 for (THitI iHi = 0; iHi < vRecoHitsNew.size(); iHi++)
448 vRecoHits[iHi] = vRecoHitsNew[iHi];
449
450 // std::cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!! new "<<vTracksNew.size()<<" old "<< vTracks.size()<<std::endl;
451}
vector< Double_t > dist(vector< Double_t > qp, Double_t mu)
Definition BmnMath.cxx:869
vector< Double_t > W(vector< Double_t > dist, Double_t sig)
Definition BmnMath.cxx:878
void L1Extrapolate(L1TrackPar &T, fvec z_out, fvec qp0, L1FieldRegion &F, fvec *w=0)
unsigned int THitI
Definition L1StsHit.h:6
friend F32vec4 fabs(const F32vec4 &a)
Definition P4_F32vec4.h:52
int i
Definition P4_F32vec4.h:22
__m128 m
Definition P4_F32vec4.h:27
F32vec4 fvec
Definition P4_F32vec4.h:231
vector< L1StsHit > vStsHits
Definition L1Algo.h:162
vector< L1Track > vTracks
--— Output data --—
Definition L1Algo.h:182
void CAMergeClones()
void FilterTracks(fvec const r[5], fvec const C[15], fvec const m[5], fvec const V[15], fvec R[5], fvec W[15], fvec *chi2)
L1Station vStations[MaxNStations] _fvecalignment
Definition L1Algo.h:155
void MultiplyMS(fvec const C[5][5], fvec const V[15], fvec K[15])
void MultiplySS(fvec const C[15], fvec const V[15], fvec K[5][5])
void MultiplySR(fvec const C[15], fvec const r_in[5], fvec r_out[5])
vector< unsigned char > vSFlag
Definition L1Algo.h:164
vector< THitI > vRecoHits
Definition L1Algo.h:183
void L1KFTrackFitter(bool extrapolateToTheEndOfSTS=false)
void InvertCholetsky(fvec a[15])
--— Subroutines used by L1Algo::CAMergeClones() ---—
RVec< PromoteType< T > > sqrt(const RVec< T > &v)