207 fvec mass2 = mass*mass;
232 fvec fz0, fz1, fz2, dz, z_start, z_end;
236 unsigned short N_vTracks = Tracks.size();
238 for(
unsigned short itrack = 0; itrack < N_vTracks; itrack++)
240 Tracks[itrack].mass = mass[0];
243 for(
unsigned short itrack = 0; itrack < N_vTracks; itrack+=
fvecLen)
245 if(N_vTracks - itrack <
static_cast<unsigned short>(
fvecLen))
246 nTracks_SIMD = N_vTracks - itrack;
248 for(
i=0;
i<nTracks_SIMD;
i++)
250 t[
i] = & Tracks[itrack+
i];
275 for(
i=0;
i<nHits;
i++)
281 for(iVec=0; iVec<nTracks_SIMD; iVec++)
284 for(
i = 0;
i < nHitsTrack;
i++ )
286 float posx = 0.f, posy = 0.f, posz = 0.f;
293 ista = posz < 7.f ? 0 : 1;
304 x[ista][iVec] = posx;
305 y[ista][iVec] = posy;
308 z[ista][iVec] = posz;
310 fB[ista].
x[iVec] = fB_temp.x[iVec];
311 fB[ista].
y[iVec] = fB_temp.y[iVec];
312 fB[ista].
z[iVec] = fB_temp.z[iVec];
313 if(
i == 0) z_start[iVec] = posz;
314 if(
i == nHitsTrack-1) z_end[iVec] = posz;
334 fB2.Combine( fB[
i-2], w[
i-2] );
335 fld.Set( fB2, fz2, fB1, fz1, fB0, fz0 );
336 for( --
i;
i>=0;
i-- )
342 fld.Set( fB0, fz0, fB1, fz1, fB2, fz2 );
347 fvec w1 = (zero & initialised) + (w[
i] & (!initialised));
352 Filter( T, sta[
i].frontInfo, u[
i], w[
i] );
360 for(iVec=0; iVec<nTracks_SIMD; iVec++)
362 t[iVec]->
T[0] = T.
x[iVec];
363 t[iVec]->
T[1] = T.
y[iVec];
364 t[iVec]->
T[2] = T.
tx[iVec];
365 t[iVec]->
T[3] = T.
ty[iVec];
366 t[iVec]->
T[4] = T.
qp[iVec];
368 t[iVec]->
T[5] = T.
z[iVec];
370 t[iVec]->
C[0] = T.
C00[iVec];
371 t[iVec]->
C[1] = T.
C10[iVec];
372 t[iVec]->
C[2] = T.
C11[iVec];
373 t[iVec]->
C[3] = T.
C20[iVec];
374 t[iVec]->
C[4] = T.
C21[iVec];
375 t[iVec]->
C[5] = T.
C22[iVec];
376 t[iVec]->
C[6] = T.
C30[iVec];
377 t[iVec]->
C[7] = T.
C31[iVec];
378 t[iVec]->
C[8] = T.
C32[iVec];
379 t[iVec]->
C[9] = T.
C33[iVec];
380 t[iVec]->
C[10] = T.
C40[iVec];
381 t[iVec]->
C[11] = T.
C41[iVec];
382 t[iVec]->
C[12] = T.
C42[iVec];
383 t[iVec]->
C[13] = T.
C43[iVec];
384 t[iVec]->
C[14] = T.
C44[iVec];
387 t[iVec]->
NDF =
static_cast<int>(T.
NDF[iVec]);
404 fB2.Combine( fB[
i+2], w[
i+2] );
405 fld.Set( fB2, fz2, fB1, fz1, fB0, fz0 );
407 for( ++
i;
i<nHits;
i++ )
413 fld.Set( fB0, fz0, fB1, fz1, fB2, fz2 );
418 fvec w1 = (zero & initialised) + (w[
i] & (!initialised));
423 Filter( T, sta[
i].frontInfo, u[
i], w[
i] );
432 for(iVec=0; iVec<nTracks_SIMD; iVec++)
434 t[iVec]->
TLast[0] = T.
x[iVec];
435 t[iVec]->
TLast[1] = T.
y[iVec];
436 t[iVec]->
TLast[2] = T.
tx[iVec];
437 t[iVec]->
TLast[3] = T.
ty[iVec];
438 t[iVec]->
TLast[4] = T.
qp[iVec];
440 t[iVec]->
TLast[5] = T.
z[iVec];
459 t[iVec]->
NDF =
static_cast<int>(T.
NDF[iVec]);
474 vector<L1FieldRegion> B;
486 for(
int iSta=0; iSta<nStations; iSta++)
487 zSta[iSta] = sta[iSta].z;
489 unsigned short N_vTracks = Tracks.size();
491 for(
unsigned short itrack = 0; itrack < N_vTracks; itrack+=
fvecLen)
493 if(N_vTracks - itrack <
static_cast<unsigned short>(
fvecLen))
494 nTracks_SIMD = N_vTracks - itrack;
497 for(
int iVec=0; iVec<nTracks_SIMD; iVec++)
499 t[iVec] = & Tracks[itrack+iVec];
500 T.
x[iVec] = t[iVec]->
T[0];
501 T.
y[iVec] = t[iVec]->
T[1];
502 T.
tx[iVec] = t[iVec]->
T[2];
503 T.
ty[iVec] = t[iVec]->
T[3];
504 T.
qp[iVec] = t[iVec]->
T[4];
505 T.
z[iVec] = t[iVec]->
T[5];
506 T.
C00[iVec] = t[iVec]->
C[0];
507 T.
C10[iVec] = t[iVec]->
C[1];
508 T.
C11[iVec] = t[iVec]->
C[2];
509 T.
C20[iVec] = t[iVec]->
C[3];
510 T.
C21[iVec] = t[iVec]->
C[4];
511 T.
C22[iVec] = t[iVec]->
C[5];
512 T.
C30[iVec] = t[iVec]->
C[6];
513 T.
C31[iVec] = t[iVec]->
C[7];
514 T.
C32[iVec] = t[iVec]->
C[8];
515 T.
C33[iVec] = t[iVec]->
C[9];
516 T.
C40[iVec] = t[iVec]->
C[10];
517 T.
C41[iVec] = t[iVec]->
C[11];
518 T.
C42[iVec] = t[iVec]->
C[12];
519 T.
C43[iVec] = t[iVec]->
C[13];
520 T.
C44[iVec] = t[iVec]->
C[14];
521 mass2[iVec] = t[iVec]->
mass*t[iVec]->
mass;
525 for(
int iSt= nStations-4; iSt>=0; iSt--)
529 fvec initialized =
fvec(T.
z > (zSta[iSt]+2.5));
530 w =
fvec(w & initialized);
545 c[0]+= Cv[0]; c[1]+= Cv[1]; c[2]+= Cv[2];
546 fvec d = c[0]*c[2] - c[1]*c[1] ;
547 fvec chi =
sqrt(
fabs( 0.5*(dx*dx*c[0]-2*dx*dy*c[1]+dy*dy*c[2])/
d ) );
551 for(
int iVec=0; iVec<nTracks_SIMD; iVec++)
552 chiToVtx.push_back(chi[iVec]);
575 unsigned short N_vTracks = Tracks.size();
577 for(
unsigned short itrack = 0; itrack < N_vTracks; itrack+=
fvecLen)
579 if(N_vTracks - itrack <
static_cast<unsigned short>(
fvecLen))
580 nTracks_SIMD = N_vTracks - itrack;
582 for(
int i=0;
i<nTracks_SIMD;
i++)
583 t[
i] = & Tracks[itrack+
i];
585 for(
int iVec=0; iVec<nTracks_SIMD; iVec++)
587 for(
int iH = 0; iH < 2; iH++ )
589 float posx = 0.f, posy = 0.f, posz = 0.f;
596 ista = posz < 7.f ? 0 : 1;
605 fB[iH+1].
x[iVec] = fB_temp.x[iVec];
606 fB[iH+1].
y[iVec] = fB_temp.y[iVec];
607 fB[iH+1].
z[iVec] = fB_temp.z[iVec];
608 zField[iH+1][iVec] = posz;
614 fld.Set( fB[2], zField[2], fB[1], zField[1], fB[0], zField[0] );
615 field.push_back(fld);
624 fvec mass = TDatabasePDG::Instance()->GetParticle(pidHypo)->Mass();
626 fvec mass2 = mass*mass;
631 FairRootManager *fManger = FairRootManager::Instance();
632 TClonesArray *listStsHits = (TClonesArray *) fManger->GetObject(
"StsHit");
634 TClonesArray *listMvdHits=0;
636 listMvdHits = (TClonesArray *) fManger->GetObject(
"MvdHit");
654 fvec fz0, fz1, fz2, dz, z_start, z_end;
658 unsigned short N_vTracks = Tracks.size();
660 for(
unsigned short itrack = 0; itrack < N_vTracks; itrack++)
662 Tracks[itrack].SetPidHypo(pidHypo);
665 for(
unsigned short itrack = 0; itrack < N_vTracks; itrack+=
fvecLen)
667 if(N_vTracks - itrack <
static_cast<unsigned short>(
fvecLen))
668 nTracks_SIMD = N_vTracks - itrack;
670 for(
i=0;
i<nTracks_SIMD;
i++)
672 t[
i] = & Tracks[itrack+
i];
697 for(
i=0;
i<nHits;
i++)
703 for(iVec=0; iVec<nTracks_SIMD; iVec++)
707 int nHitsTrack = nHitsTrackMvd + nHitsTrackSts;
708 for(
i = 0;
i < nHitsTrack;
i++ )
710 float posx = 0.f, posy = 0.f, posz = 0.f;
714 if(!listMvdHits)
continue;
716 CbmMvdHit *hit = L1_DYNAMIC_CAST<CbmMvdHit*>(listMvdHits->At(hitIndex));
721 ista = posz < 7.f ? 0 : 1;
725 if(!listStsHits)
continue;
727 CbmStsHit *hit = L1_DYNAMIC_CAST<CbmStsHit*>(listStsHits->At(hitIndex));
737 x[ista][iVec] = posx;
738 y[ista][iVec] = posy;
741 z[ista][iVec] = posz;
743 fB[ista].
x[iVec] = fB_temp.x[iVec];
744 fB[ista].
y[iVec] = fB_temp.y[iVec];
745 fB[ista].
z[iVec] = fB_temp.z[iVec];
746 if(
i == 0) z_start[iVec] = posz;
747 if(
i == nHitsTrack-1) z_end[iVec] = posz;
767 fB2.Combine( fB[
i-2], w[
i-2] );
768 fld.Set( fB2, fz2, fB1, fz1, fB0, fz0 );
769 for( --
i;
i>=0;
i-- )
775 fld.Set( fB0, fz0, fB1, fz1, fB2, fz2 );
780 fvec w1 = (zero & initialised) + (w[
i] & (!initialised));
785 Filter( T, sta[
i].frontInfo, u[
i], w[
i] );
793 for(iVec=0; iVec<nTracks_SIMD; iVec++)
820 t[iVec]->
SetNDF(
static_cast<int>(T.
NDF[iVec]));
837 fB2.Combine( fB[
i+2], w[
i+2] );
838 fld.Set( fB2, fz2, fB1, fz1, fB0, fz0 );
840 for( ++
i;
i<nHits;
i++ )
846 fld.Set( fB0, fz0, fB1, fz1, fB2, fz2 );
851 fvec w1 = (zero & initialised) + (w[
i] & (!initialised));
856 Filter( T, sta[
i].frontInfo, u[
i], w[
i] );
865 for(iVec=0; iVec<nTracks_SIMD; iVec++)
904 chiToVtx.reserve(Tracks.size());
915 for(
int iSta=0; iSta<nStations; iSta++)
916 zSta[iSta] = sta[iSta].z;
918 field.reserve(Tracks.size());
924 FairRootManager *fManger = FairRootManager::Instance();
925 TClonesArray *listStsHits = (TClonesArray *) fManger->GetObject(
"StsHit");
926 TClonesArray *listMvdHits=0;
928 listMvdHits = (TClonesArray *) fManger->GetObject(
"MvdHit");
930 unsigned short N_vTracks = Tracks.size();
932 for(
unsigned short itrack = 0; itrack < N_vTracks; itrack+=
fvecLen)
934 if(N_vTracks - itrack <
static_cast<unsigned short>(
fvecLen))
935 nTracks_SIMD = N_vTracks - itrack;
938 for(
int iVec=0; iVec<nTracks_SIMD; iVec++)
940 t[iVec] = & Tracks[itrack+iVec];
964 mass2[iVec] = mass*mass;
967 for(
int iH = 0; iH < 2; iH++ )
969 float posx = 0.f, posy = 0.f, posz = 0.f;
973 if(!listMvdHits)
continue;
975 CbmMvdHit *hit = L1_DYNAMIC_CAST<CbmMvdHit*>(listMvdHits->At(hitIndex));
980 ista = posz < 7.f ? 0 : 1;
984 if(!listStsHits)
continue;
986 CbmStsHit *hit = L1_DYNAMIC_CAST<CbmStsHit*>(listStsHits->At(hitIndex));
995 fB[iH+1].
x[iVec] = fB_temp.x[iVec];
996 fB[iH+1].
y[iVec] = fB_temp.y[iVec];
997 fB[iH+1].
z[iVec] = fB_temp.z[iVec];
998 zField[iH+1][iVec] = posz;
1004 fld.Set( fB[2], zField[2], fB[1], zField[1], fB[0], zField[0] );
1005 field.push_back(fld);
1007 for(
int iSt= nStations-4; iSt>=0; iSt--)
1011 fvec initialized =
fvec(T.
z > (zSta[iSt]+2.5));
1012 w =
fvec(w & initialized);
1027 c[0]+= Cv[0]; c[1]+= Cv[1]; c[2]+= Cv[2];
1028 fvec d = c[0]*c[2] - c[1]*c[1] ;
1029 fvec chi =
sqrt(
fabs( 0.5*(dx*dx*c[0]-2*dx*dy*c[1]+dy*dy*c[2])/
d ) );
1033 for(
int iVec=0; iVec<nTracks_SIMD; iVec++)
1034 chiToVtx.push_back(chi[iVec]);
1038 for(
int iVec=0; iVec<nTracks_SIMD; iVec++)
1040 if( chi[iVec] < chiPrim )
1073 field.reserve(Tracks.size());
1077 FairRootManager *fManger = FairRootManager::Instance();
1078 TClonesArray *listStsHits = (TClonesArray *) fManger->GetObject(
"StsHit");
1079 TClonesArray *listMvdHits=0;
1082 listMvdHits = (TClonesArray *) fManger->GetObject(
"MvdHit");
1094 unsigned short N_vTracks = Tracks.size();
1096 for(
unsigned short itrack = 0; itrack < N_vTracks; itrack+=
fvecLen)
1098 if(N_vTracks - itrack <
static_cast<unsigned short>(
fvecLen))
1099 nTracks_SIMD = N_vTracks - itrack;
1101 for(
int i=0;
i<nTracks_SIMD;
i++)
1102 t[
i] = & Tracks[itrack+
i];
1104 for(
int iVec=0; iVec<nTracks_SIMD; iVec++)
1107 for(
int iH = 0; iH < 2; iH++ )
1109 float posx = 0.f, posy = 0.f, posz = 0.f;
1111 if(iH<nHitsTrackMvd)
1113 if(!listMvdHits)
continue;
1115 CbmMvdHit *hit = L1_DYNAMIC_CAST<CbmMvdHit*>(listMvdHits->At(hitIndex));
1120 ista = posz < 7.f ? 0 : 1;
1124 if(!listStsHits)
continue;
1126 CbmStsHit *hit = L1_DYNAMIC_CAST<CbmStsHit*>(listStsHits->At(hitIndex));
1135 fB[iH+1].
x[iVec] = fB_temp.x[iVec];
1136 fB[iH+1].
y[iVec] = fB_temp.y[iVec];
1137 fB[iH+1].
z[iVec] = fB_temp.z[iVec];
1138 zField[iH+1][iVec] = posz;
1144 fld.Set( fB[2], zField[2], fB[1], zField[1], fB[0], zField[0] );
1145 field.push_back(fld);
static CbmKFParticleDatabase * Instance()