44 cout <<
" !!! L1Algo::KFTrackFitter_simple !!! " << endl; exit(9);
47 for(
unsigned int itrack = 0; itrack <
vTracks.size(); itrack++)
52 std::vector<unsigned short int> hits;
55 for(
int i = 0;
i < nHits;
i++ ){
63 for(
int iter=0; iter<3; iter++ )
83 StripsToCoor(u0, v0, x0, y0, sta0);
89 StripsToCoor(u1, v1, x1, y1, sta1);
95 StripsToCoor(u2, v2, x2, y2, sta2);
135 fld.Set( fB2, fz2, fB1, fz1, fB0, fz0 );
139 for(
int i = nHits-2;
i >= 0;
i--){
161 StripsToCoor(u,
v, x, y, sta);
165 fld.Set( fB2, fz2, fB1, fz1, fB0, fz0 );
193 t.
NDF =
static_cast<int>( T.
NDF[0] );
205 int ista0 = GetFStation(
vSFlag[hit0.
f] );
206 int ista1 = GetFStation(
vSFlag[hit1.
f] );
207 int ista2 = GetFStation(
vSFlag[hit2.
f] );
216 StripsToCoor(u0, v0, x0, y0, sta0);
222 StripsToCoor(u1, v1, x1, y1, sta1);
228 StripsToCoor(u2, v2, x2, y2, sta2);
266 fld.Set( fB2, fz2, fB1, fz1, fB0, fz0 );
269 for(
int i=1;
i<nHits;
i++){
289 StripsToCoor(u,
v, x, y, sta);
292 fld.Set( fB2, fz2, fB1, fz1, fB0, fz0 );
320 t.
NDF +=
static_cast<int>( T.
NDF[0] );
349 fvec x_first, y_first, x_last, y_last;
352 fvec fz0, fz1, fz2, dz, z_start, z_end;
356 for(
int iHit = 0; iHit<nHits; iHit++)
358 ZSta[iHit] = sta[iHit].
z;
361 unsigned short N_vTracks =
vTracks.size();
363 for(
unsigned short itrack = 0; itrack < N_vTracks; itrack+=
fvecLen)
365 if(N_vTracks - itrack <
static_cast<unsigned short>(
fvecLen))
366 nTracks_SIMD = N_vTracks - itrack;
368 for(
i=0;
i<nTracks_SIMD;
i++)
372 for(
i=0;
i<nHits;
i++)
378 for(iVec=0; iVec<nTracks_SIMD; iVec++)
380 int nHitsTrack = t[iVec]->
NHits;
383 for(
i = 0;
i < nHitsTrack;
i++ )
386 const int ista =
vSFlag[hit.
f]/4;
396 u[ista][iVec] = hp.
U();
397 v[ista][iVec] = hp.
V();
398 du[ista][iVec] = hp.
DU() * hp.
DU();
399 dv[ista][iVec] = hp.
DV() * hp.
DV();
405 StripsToCoor(u[ista],
v[ista], x_temp, y_temp, sta[ista]);
407 x[ista][iVec] = x_temp[iVec];
408 y[ista][iVec] = y_temp[iVec];
411 fB[ista].
x[iVec] = fB_temp.x[iVec];
412 fB[ista].
y[iVec] = fB_temp.y[iVec];
413 fB[ista].
z[iVec] = fB_temp.z[iVec];
415 z_start[iVec] = z[ista][iVec];
416 x_first[iVec] = x[ista][iVec];
417 y_first[iVec] = y[ista][iVec];
419 else if(
i == nHitsTrack-1) {
420 z_end[iVec] = z[ista][iVec];
421 x_last[iVec] = x[ista][iVec];
422 y_last[iVec] = y[ista][iVec];
428 for(
i = nHits - 1;
i >= 0;
i-- ){
433 fscal prevZ = z_end[iVec];
434 fscal cursy = 0., curSy = 0.;
435 for(
i = nHitsTrack - 1;
i >= 0;
i-- ){
436 const int ista = iSta[
i];
438 const fscal curZ = z[ista][iVec];
439 fscal dZ = curZ - prevZ;
441 curSy += dZ*cursy + dZ*dZ*By/2.;
443 Sy[ista][iVec] = curSy;
451 GuessVec( T, x, y, z, Sy, w, nHits, &z_end);
453 for(
int iter = 0; iter < 2; iter++ ) {
459 FilterFirst( T, x_last, y_last, sta[
i] );
470 fB2.Combine( fB[
i-2], w[
i-2] );
471 fld.Set( fB2, fz2, fB1, fz1, fB0, fz0 );
472 for( --
i;
i>=0;
i-- )
478 fld.Set( fB0, fz0, fB1, fz1, fB2, fz2 );
483 fvec w1 = (w[
i] & (initialised));
484 fvec wIn = (
ONE & (initialised));
504 for(iVec=0; iVec<nTracks_SIMD; iVec++)
506 t[iVec]->
TFirst[0] = T.
x[iVec];
507 t[iVec]->
TFirst[1] = T.
y[iVec];
511 t[iVec]->
TFirst[5] = T.
z[iVec];
530 t[iVec]->
NDF = (int)T.
NDF[iVec];
533 if ( iter == 1 )
continue;
537 FilterFirst( T, x_first, y_first, sta[
i] );
548 fB2.Combine( fB[
i+2], w[
i+2] );
549 fld.Set( fB2, fz2, fB1, fz1, fB0, fz0 );
551 for( ++
i;
i<nHits;
i++ )
557 fld.Set( fB0, fz0, fB1, fz1, fB2, fz2 );
561 fvec w1 = (w[
i] & (initialised));
562 fvec wIn = (
ONE & (initialised));
585 if ( extrapolateToTheEndOfSTS ) {
595 fB2.Combine( fB[
i+2], w[
i+2] );
596 fld.Set( fB2, fz2, fB1, fz1, fB0, fz0 );
604 fld.Set( fB0, fz0, fB1, fz1, fB2, fz2 );
608 fvec wIn = (
ONE & (initialised));
625 const fvec zFinal = 100.f;
627 fvec initialised =
fvec(zFinal > Tout.
z);
632 for(iVec=0; iVec<nTracks_SIMD; iVec++)
634 t[iVec]->
TLast[0] = Tout.
x[iVec];
635 t[iVec]->
TLast[1] = Tout.
y[iVec];
636 t[iVec]->
TLast[2] = Tout.
tx[iVec];
637 t[iVec]->
TLast[3] = Tout.
ty[iVec];
638 t[iVec]->
TLast[4] = Tout.
qp[iVec];
639 t[iVec]->
TLast[5] = Tout.
z[iVec];
651 t[iVec]->
CLast[10] = Tout.
C40[iVec];
652 t[iVec]->
CLast[11] = Tout.
C41[iVec];
653 t[iVec]->
CLast[12] = Tout.
C42[iVec];
654 t[iVec]->
CLast[13] = Tout.
C43[iVec];
655 t[iVec]->
CLast[14] = Tout.
C44[iVec];
658 t[iVec]->
NDF = (int)Tout.
NDF[iVec];