BmnRoot
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
26void L1Algo::InvertCholetsky(fvec a[15])
27{
28 fvec d[5], uud, u[5][5];
29 for(int i=0; i<5; i++)
30 {
31 d[i]=0.f;
32 for(int j=0; j<5; j++)
33 u[i][j]=0.f;
34 }
35
36 for(int i=0; i<5; i++)
37 {
38 uud=0.f;
39 for(int j=0; j<i; j++)
40 uud += u[j][i]*u[j][i]*d[j];
41 uud = a[i*(i+3)/2] - uud;
42
43 fvec smallval = 1.e-12;
44 fvec initialised = fvec( uud<smallval );
45 uud = ((!initialised) & uud) + (smallval & initialised);
46
47 d[i] = uud/fabs(uud);
48 u[i][i] = sqrt(fabs(uud));
49
50 for(int j=i+1; j<5; j++)
51 {
52 uud = 0.f;
53 for(int k=0; k<i; k++)
54 uud += u[k][i]*u[k][j]*d[k];
55 uud = a[j*(j+1)/2+i]/*a[i][j]*/ - uud;
56 u[i][j] = d[i]/u[i][i]*uud;
57 }
58 }
59
60 fvec u1[5];
61
62 for(int i=0; i<5; i++)
63 {
64 u1[i] = u[i][i];
65 u[i][i] = 1.f/u[i][i];
66 }
67 for(int i=0; i<4; i++)
68 {
69 u[i][i+1] = - u[i][i+1]*u[i][i]*u[i+1][i+1];
70 }
71 for(int i=0; i<3; i++)
72 {
73 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];
74 }
75 for(int i=0; i<2; i++)
76 {
77 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];
78 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]);
79 }
80 u[0][4] = u[0][2]*u1[2]*u[2][4] - u[0][4]*u[0][0]*u[4][4];
81 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]);
82 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]));
83
84 for(int i=0; i<5; i++)
85 a[i+10] = u[i][4]*d[4]*u[4][4];
86 for(int i=0; i<4; i++)
87 a[i+6] = u[i][3]*u[3][3]*d[3] + u[i][4]*u[3][4]*d[4];
88 for(int i=0; i<3; i++)
89 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];
90 for(int i=0; i<2; i++)
91 a[i+1] = 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];
92 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] + u[0][4]*u[0][4]*d[4];
93}
94
95void L1Algo::MultiplySS(fvec const C[15], fvec const V[15], fvec K[5][5])
96{
97 K[0][0] = C[0]*V[ 0] + C[1]*V[ 1] + C[3]*V[ 3] + C[6]*V[ 6] + C[10]*V[10];
98 K[0][1] = C[0]*V[ 1] + C[1]*V[ 2] + C[3]*V[ 4] + C[6]*V[ 7] + C[10]*V[11];
99 K[0][2] = C[0]*V[ 3] + C[1]*V[ 4] + C[3]*V[ 5] + C[6]*V[ 8] + C[10]*V[12];
100 K[0][3] = C[0]*V[ 6] + C[1]*V[ 7] + C[3]*V[ 8] + C[6]*V[ 9] + C[10]*V[13];
101 K[0][4] = C[0]*V[10] + C[1]*V[11] + C[3]*V[12] + C[6]*V[13] + C[10]*V[14];
102
103 K[1][0] = C[1]*V[ 0] + C[2]*V[ 1] + C[4]*V[ 3] + C[7]*V[ 6] + C[11]*V[10];
104 K[1][1] = C[1]*V[ 1] + C[2]*V[ 2] + C[4]*V[ 4] + C[7]*V[ 7] + C[11]*V[11];
105 K[1][2] = C[1]*V[ 3] + C[2]*V[ 4] + C[4]*V[ 5] + C[7]*V[ 8] + C[11]*V[12];
106 K[1][3] = C[1]*V[ 6] + C[2]*V[ 7] + C[4]*V[ 8] + C[7]*V[ 9] + C[11]*V[13];
107 K[1][4] = C[1]*V[10] + C[2]*V[11] + C[4]*V[12] + C[7]*V[13] + C[11]*V[14];
108
109 K[2][0] = C[3]*V[ 0] + C[4]*V[ 1] + C[5]*V[ 3] + C[8]*V[ 6] + C[12]*V[10];
110 K[2][1] = C[3]*V[ 1] + C[4]*V[ 2] + C[5]*V[ 4] + C[8]*V[ 7] + C[12]*V[11];
111 K[2][2] = C[3]*V[ 3] + C[4]*V[ 4] + C[5]*V[ 5] + C[8]*V[ 8] + C[12]*V[12];
112 K[2][3] = C[3]*V[ 6] + C[4]*V[ 7] + C[5]*V[ 8] + C[8]*V[ 9] + C[12]*V[13];
113 K[2][4] = C[3]*V[10] + C[4]*V[11] + C[5]*V[12] + C[8]*V[13] + C[12]*V[14];
114
115 K[3][0] = C[6]*V[ 0] + C[7]*V[ 1] + C[8]*V[ 3] + C[9]*V[ 6] + C[13]*V[10];
116 K[3][1] = C[6]*V[ 1] + C[7]*V[ 2] + C[8]*V[ 4] + C[9]*V[ 7] + C[13]*V[11];
117 K[3][2] = C[6]*V[ 3] + C[7]*V[ 4] + C[8]*V[ 5] + C[9]*V[ 8] + C[13]*V[12];
118 K[3][3] = C[6]*V[ 6] + C[7]*V[ 7] + C[8]*V[ 8] + C[9]*V[ 9] + C[13]*V[13];
119 K[3][4] = C[6]*V[10] + C[7]*V[11] + C[8]*V[12] + C[9]*V[13] + C[13]*V[14];
120
121 K[4][0] = C[10]*V[ 0] + C[11]*V[ 1] + C[12]*V[ 3] + C[13]*V[ 6] + C[14]*V[10];
122 K[4][1] = C[10]*V[ 1] + C[11]*V[ 2] + C[12]*V[ 4] + C[13]*V[ 7] + C[14]*V[11];
123 K[4][2] = C[10]*V[ 3] + C[11]*V[ 4] + C[12]*V[ 5] + C[13]*V[ 8] + C[14]*V[12];
124 K[4][3] = C[10]*V[ 6] + C[11]*V[ 7] + C[12]*V[ 8] + C[13]*V[ 9] + C[14]*V[13];
125 K[4][4] = C[10]*V[10] + C[11]*V[11] + C[12]*V[12] + C[13]*V[13] + C[14]*V[14];
126}
127
128void L1Algo::MultiplyMS(fvec const C[5][5], fvec const V[15], fvec K[15])
129{
130 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];
131
132 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];
133 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];
134
135 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];
136 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];
137 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];
138
139 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];
140 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];
141 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];
142 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];
143
144 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];
145 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];
146 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];
147 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];
148 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];
149}
150
151void L1Algo::MultiplySR(fvec const C[15], fvec const r_in[5], fvec r_out[5])
152{
153 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];
154 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];
155 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];
156 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];
157 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];
158}
159
160void L1Algo::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)
161{
162 fvec S[15];
163 for(int i=0; i<15; i++)
164 {
165 if(W) W[i] = C[i];
166 S[i] = C[i] + V[i];
167 }
168
169 InvertCholetsky(S);
170
171 fvec dzeta[5];
172
173 for(int i=0; i<5; i++) dzeta[i] = m[i] - r[i];
174
175 if(W && R)
176 {
177 for(int i=0; i<5; i++)
178 R[i] = r[i];
179
180 fvec K[5][5];
181 MultiplySS(C,S,K);
182
183 fvec KC[15];
184 MultiplyMS(K,C,KC);
185 for(int i=0; i< 15; i++)
186 W[i] -= KC[i];
187
188 fvec kd;
189 for(int i=0; i<5; i++)
190 {
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 {
199 fvec S_dzeta[5];
200 MultiplySR(S, dzeta, S_dzeta);
201 *chi2 = dzeta[0]*S_dzeta[0] + dzeta[1]*S_dzeta[1] + dzeta[2]*S_dzeta[2] + dzeta[3]*S_dzeta[3] + dzeta[4]*S_dzeta[4];
202 }
203}
204
205void L1Algo::CAMergeClones()
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 {
235 FirstHitIndex[iTr] = start_hit;
236 ista = vSFlag[vStsHits[vRecoHits[start_hit]].f]/4;
237 FirstHit[iTr]=ista;
238 start_hit += vTracks[iTr].NHits-1;
239 LastHitIndex[iTr] = start_hit;
240 ista = vSFlag[vStsHits[vRecoHits[start_hit]].f]/4;
241 LastHit[iTr]=ista;
242 start_hit++;
243
244 IsUsed[iTr] = 0;
245 Neighbour[iTr] = 50000;
246 TrackChi2[iTr] = 100000;
247 IsNext[iTr] = 0;
248 }
249
251 //KFTrackFitter_simple();
252
253 L1TrackPar Tb;
254 L1TrackPar Tf;
255 L1FieldValue fBm, fBb, fBf _fvecalignment;
257
258 for(int iTr = 0; iTr < static_cast<unsigned short>(vTracks.size()); iTr++)
259 {
260 if(static_cast<int>(vTracks[iTr].NHits) > 6) continue;
261 for(int jTr = 0; jTr < static_cast<unsigned short>(vTracks.size()); jTr++)
262 {
263 if(iTr == jTr) continue;
264 if(static_cast<int>(vTracks[iTr].NHits) > 6) 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 {
273 dist = FirstHit[iTr] - LastHit[jTr];
274
275 stab = FirstHit[iTr];
276 staf = LastHit[jTr];
277 IsNextTemp = 1;
278
279 Tb.x = vTracks[iTr].TFirst[0];
280 Tb.y = vTracks[iTr].TFirst[1];
281 Tb.tx = vTracks[iTr].TFirst[2];
282 Tb.ty = vTracks[iTr].TFirst[3];
283 Tb.qp = vTracks[iTr].TFirst[4];
284 Tb.z = vTracks[iTr].TFirst[5];
285 Tb.C00 = vTracks[iTr].CFirst[0];
286 Tb.C10 = vTracks[iTr].CFirst[1];
287 Tb.C11 = vTracks[iTr].CFirst[2];
288 Tb.C20 = vTracks[iTr].CFirst[3];
289 Tb.C21 = vTracks[iTr].CFirst[4];
290 Tb.C22 = vTracks[iTr].CFirst[5];
291 Tb.C30 = vTracks[iTr].CFirst[6];
292 Tb.C31 = vTracks[iTr].CFirst[7];
293 Tb.C32 = vTracks[iTr].CFirst[8];
294 Tb.C33 = vTracks[iTr].CFirst[9];
295 Tb.C40 = vTracks[iTr].CFirst[10];
296 Tb.C41 = vTracks[iTr].CFirst[11];
297 Tb.C42 = vTracks[iTr].CFirst[12];
298 Tb.C43 = vTracks[iTr].CFirst[13];
299 Tb.C44 = vTracks[iTr].CFirst[14];
300
301 Tf.x = vTracks[jTr].TLast[0];
302 Tf.y = vTracks[jTr].TLast[1];
303 Tf.tx = vTracks[jTr].TLast[2];
304 Tf.ty = vTracks[jTr].TLast[3];
305 Tf.qp = vTracks[jTr].TLast[4];
306 Tf.z = vTracks[jTr].TLast[5];
307 Tf.C00 = vTracks[jTr].CLast[0];
308 Tf.C10 = vTracks[jTr].CLast[1];
309 Tf.C11 = vTracks[jTr].CLast[2];
310 Tf.C20 = vTracks[jTr].CLast[3];
311 Tf.C21 = vTracks[jTr].CLast[4];
312 Tf.C22 = vTracks[jTr].CLast[5];
313 Tf.C30 = vTracks[jTr].CLast[6];
314 Tf.C31 = vTracks[jTr].CLast[7];
315 Tf.C32 = vTracks[jTr].CLast[8];
316 Tf.C33 = vTracks[jTr].CLast[9];
317 Tf.C40 = vTracks[jTr].CLast[10];
318 Tf.C41 = vTracks[jTr].CLast[11];
319 Tf.C42 = vTracks[jTr].CLast[12];
320 Tf.C43 = vTracks[jTr].CLast[13];
321 Tf.C44 = vTracks[jTr].CLast[14];
322//std::cout << "!!!!!!! Chi2 !!!!!! "<<vTracks[iTr].TFirst[0]<<" "<<vTracks[jTr].TLast[0]<<std::endl;
323 }
324 if(FirstHit[jTr] > LastHit[iTr])
325 {
326 dist = FirstHit[jTr] - LastHit[iTr];
327
328 stab = FirstHit[jTr];
329 staf = LastHit[iTr];
330
331 Tb.x = vTracks[jTr].TFirst[0];
332 Tb.y = vTracks[jTr].TFirst[1];
333 Tb.tx = vTracks[jTr].TFirst[2];
334 Tb.ty = vTracks[jTr].TFirst[3];
335 Tb.qp = vTracks[jTr].TFirst[4];
336 Tb.z = vTracks[jTr].TFirst[5];
337 Tb.C00 = vTracks[jTr].CFirst[0];
338 Tb.C10 = vTracks[jTr].CFirst[1];
339 Tb.C11 = vTracks[jTr].CFirst[2];
340 Tb.C20 = vTracks[jTr].CFirst[3];
341 Tb.C21 = vTracks[jTr].CFirst[4];
342 Tb.C22 = vTracks[jTr].CFirst[5];
343 Tb.C30 = vTracks[jTr].CFirst[6];
344 Tb.C31 = vTracks[jTr].CFirst[7];
345 Tb.C32 = vTracks[jTr].CFirst[8];
346 Tb.C33 = vTracks[jTr].CFirst[9];
347 Tb.C40 = vTracks[jTr].CFirst[10];
348 Tb.C41 = vTracks[jTr].CFirst[11];
349 Tb.C42 = vTracks[jTr].CFirst[12];
350 Tb.C43 = vTracks[jTr].CFirst[13];
351 Tb.C44 = vTracks[jTr].CFirst[14];
352
353 Tf.x = vTracks[iTr].TLast[0];
354 Tf.y = vTracks[iTr].TLast[1];
355 Tf.tx = vTracks[iTr].TLast[2];
356 Tf.ty = vTracks[iTr].TLast[3];
357 Tf.qp = vTracks[iTr].TLast[4];
358 Tf.z = vTracks[iTr].TLast[5];
359 Tf.C00 = vTracks[iTr].CLast[0];
360 Tf.C10 = vTracks[iTr].CLast[1];
361 Tf.C11 = vTracks[iTr].CLast[2];
362 Tf.C20 = vTracks[iTr].CLast[3];
363 Tf.C21 = vTracks[iTr].CLast[4];
364 Tf.C22 = vTracks[iTr].CLast[5];
365 Tf.C30 = vTracks[iTr].CLast[6];
366 Tf.C31 = vTracks[iTr].CLast[7];
367 Tf.C32 = vTracks[iTr].CLast[8];
368 Tf.C33 = vTracks[iTr].CLast[9];
369 Tf.C40 = vTracks[iTr].CLast[10];
370 Tf.C41 = vTracks[iTr].CLast[11];
371 Tf.C42 = vTracks[iTr].CLast[12];
372 Tf.C43 = vTracks[iTr].CLast[13];
373 Tf.C44 = vTracks[iTr].CLast[14];
374 }
375
376 if(dist == 0) 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) stam = staf + 1;
384 else stam = staf - 1;
385 fvec zm = vStations[stam].z;
386 fvec xm = 0.5*(Tf.x + Tf.tx*(zm - Tf.z) + Tb.x + Tb.tx*(zm - Tb.z));
387 fvec ym = 0.5*(Tb.y + Tb.ty*(zm - Tb.z) + Tb.y + Tb.ty*(zm - Tb.z));
388 vStations[stam].fieldSlice.GetFieldValue( xm, ym, fBm );
389 fld.Set( fBb, Tb.z, fBm, zm, fBf, Tf.z );
390
391 fvec zMiddle = 0.5*(Tb.z + Tf.z);
392
393 L1Extrapolate( Tf, zMiddle, Tf.qp, fld );
394 L1Extrapolate( Tb, zMiddle, Tb.qp, fld );
395
396 fvec Chi2Tracks = 0.f;
397 FilterTracks(&(Tf.x),&(Tf.C00),&(Tb.x),&(Tb.C00),0,0,&Chi2Tracks);
398 if(Chi2Tracks[0] > 50 ) continue;
399 if(Chi2Tracks[0] < TrackChi2[iTr] || Chi2Tracks[0] < TrackChi2[jTr])
400 {
401//std::cout << "!!!!!!! Chi2 !!!!!! "<<Chi2Tracks<<" " <<iTr<<" " <<jTr<< std::endl;
402 if(Neighbour[iTr] < static_cast<unsigned short>(50000))
403 {
404 Neighbour[Neighbour[iTr]] = 50000;
405 TrackChi2[Neighbour[iTr]] = 100000;
406 IsNext[Neighbour[iTr]] = 0;
407 }
408 if(Neighbour[jTr] < static_cast<unsigned short>(50000))
409 {
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 {
425 if(IsUsed[iTr]) 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 {
434 IsUsed[Neighbour[iTr]] = 1;
435 vTracksNew.back().NHits += vTracks[Neighbour[iTr]].NHits;
436 for(THitI HI = FirstHitIndex[Neighbour[iTr]]; HI <= LastHitIndex[Neighbour[iTr]]; HI++)
437 vRecoHitsNew.push_back(vRecoHits[HI]);
438 }
439
440 if(IsNext[iTr])
441 for(THitI HI = FirstHitIndex[iTr]; HI <= LastHitIndex[iTr]; HI++)
442 vRecoHitsNew.push_back(vRecoHits[HI]);
443 }
444 vTracks.resize(vTracksNew.size());
445 for(unsigned short iTr=0; iTr < vTracksNew.size(); iTr++)
446 vTracks[iTr] = vTracksNew[iTr];
447 vRecoHits.resize(vRecoHitsNew.size());
448 for(THitI iHi=0; iHi < vRecoHitsNew.size(); iHi++)
449 vRecoHits[iHi] = vRecoHitsNew[iHi];
450
451//std::cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!! new "<<vTracksNew.size()<<" old "<< vTracks.size()<<std::endl;
452}
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
const Float_t d
Z-ccordinate of the first GEM-station.
Definition BmnMwpcHit.cxx:7
void L1Extrapolate(L1TrackPar &T, fvec z_out, fvec qp0, L1FieldRegion &F, fvec *w=0)
unsigned int THitI
Definition L1StsHit.h:6
friend F32vec4 sqrt(const F32vec4 &a)
Definition P4_F32vec4.h:34
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< unsigned char > vSFlag
Definition L1Algo.h:134
L1Station vStations[MaxNStations] _fvecalignment
Definition L1Algo.h:125
vector< L1Track > vTracks
--— Output data --—
Definition L1Algo.h:151
vector< THitI > vRecoHits
Definition L1Algo.h:152
vector< L1StsHit > vStsHits
Definition L1Algo.h:132
void L1KFTrackFitter(bool extrapolateToTheEndOfSTS=false)