50 float_v::Memory tmpFloat;
51 int_v::Memory tmpShort;
53 for(
int iV=0; iV < nTracksV; iV++) tmpFloat[iV] =
t0[iV].
Z();
54 tmpVec.load( tmpFloat );
57 for(
int iP=0; iP<5; iP++)
59 for(
int iV=0; iV < nTracksV; iV++) tmpFloat[iV] =
t0[iV].
Par()[iP];
60 tmpVec.load( tmpFloat );
63 for(
int iC=0; iC<15; iC++)
65 for(
int iV=0; iV < nTracksV; iV++) tmpFloat[iV] =
t0[iV].
Cov()[iC];
66 tmpVec.load( tmpFloat );
69 for(
int iV=0; iV < nTracksV; iV++) tmpFloat[iV] =
t0[iV].
Chi2();
70 tmpVec.load( tmpFloat );
72 for(
int iV=0; iV < nTracksV; iV++) tmpShort[iV] =
t0[iV].
NDF();
73 tmpVecShort.load( tmpShort );
76 for(
int iV=0; iV < nTracksV; iV++) tmpFloat[iV] =
t0[iV].
Angle();
77 tmpVec.load( tmpFloat );
273 float_m PndFTSCATrackParamVector::TransportByLine(
const FTSCAHitV& hit,
const PndFTSCAParam& param,
const float_m &mask )
275 float_m active = mask & hit.
IsValid();
276 active &= TransportToX0Line(hit.
X0(), mask);
277 active &= PassMaterial( param.
Station(0).materialInfo, fQP, active );
278 const float_v mass2 = 0.13957f*0.13957f;
279 float_v direction = -1.f;
282 EnergyLossCorrection(mass2, param.
Station(0).materialInfo.RadThick, fQP, direction, active);
297 const float_m bufm1 =
static_cast<float_m
> ( (
fX != 0) && (
fZ != 0) );
309 float_m active = mask & hit.
IsValid();
322 if(!( ( (ista==32 || ista==16) && int_m(active)).isEmpty() ) && fDirection)
324 int_m maskVS = ((ista == 32) || (ista==16)) && active;
325 float_m activeVS = float_m(maskVS);
328 N(maskVS) = param.GetNVirtualStations( ista, activeVS);
334 while( !((iVS<N).isEmpty()) )
336 float_v zVirtualStation = z0 + (hit.
X0() -
z0)/float_v(N+1)*float_v(iVS+1);
339 int_v nVS = N - iVS - int_v(1);
340 UpdateFieldValues(hit, nVS, zVirtualStation, param, virtualF, maskVS);
341 activeVS &=
TransportToX0( zVirtualStation, virtualF, qp0, activeVS );
344 foreach_bit(
unsigned int iV, active )
354 if(!( ( (ista==31 || ista==15) && int_m(active)).isEmpty() ) && !fDirection)
356 int_m maskVS = ((ista == 31) || (ista==15)) && active;
357 float_m activeVS = float_m(maskVS);
359 N(maskVS) = param.GetNVirtualStations( ista+1, activeVS);
365 float_v zVirtualStation(1.
f);
366 while( !((iVS>-1).isEmpty()) )
368 zVirtualStation(maskVS) = z0 - (z0 -hit.
X0())/float_v(N+1)*float_v(N - iVS);
370 int_v nVS = N - iVS - 1;
371 UpdateFieldValues(hit, nVS, zVirtualStation, param, virtualF, maskVS);
372 activeVS &=
TransportToX0( zVirtualStation, virtualF, qp0, activeVS );
375 foreach_bit(
unsigned int iV, active )
388 UpdateFieldValues(hit, param, f, mask);
397 float_m active = mask & hit.
IsValid();
401 f.
Set( b2, z2, fB[1], fZB[1] );
403 f.
Set( b2, z2, fB[1], fZB[1], fB[0], fZB[0] );
405 fB[0].UpdateValue( fB[1], mask );
406 fB[1].UpdateValue( b2, mask );
407 fZB[0](mask) = fZB[1];
411 void PndFTSCATrackParamVector::UpdateFieldValues(
const FTSCAHitV& hit, int_v& iVrt, float_v& zVirtualStation,
const PndFTSCAParam& param,
L1FieldRegion& f,
const float_m& mask)
413 float_m active = mask & hit.
IsValid();
418 const CAFieldValue &b2 = param.GetFieldValue( iStation, iVrt,
fX, fY, active );
420 f.
Set( b2, zVirtualStation, fB[1], fZB[1], fB[0], fZB[0] );
422 fB[0].UpdateValue( fB[1], mask );
423 fB[1].UpdateValue( b2, mask );
424 fZB[0](mask) = fZB[1];
425 fZB[1](mask) = zVirtualStation;
431 float_m active = mask & hit.
IsValid();
438 const float_m chi2mask = (
fZ<311.f);
439 Chi2Cut(chi2mask) = 10.8f;
440 Chi2Cut(!chi2mask) = 13.8f;
444 Chi2Cut(accept_longDistance_hit1) *= 100.f;
446 const float_m accept_longDistance_hit2 = (hit.
IStations()>=31);
447 Chi2Cut(accept_longDistance_hit2) *= 300.f;
449 active &=
Filter( hit.XWire1(), hit.XWire2(), hit.RSigned(), stripInfo, hit.Err2R(), active, chi2Cut );
455 float_m active = mask;
460 active &=
Filter( hit.XWire1(), hit.XWire2(), hit.RSigned(), stripInfo, hit.Err2R(), active, chi2Cut );
467 float_m active = mask;
469 if ( fZB[0][0] == 10e10f ) {
470 fld.
Set( fB[1], fZB[1], target.
B(), target.
X0() );
474 fld.
Set( fB[1], fZB[1], fB[0], fZB[0], target.
B(), target.
X0() );
477 float_v eX, eY, J04, J14;
478 float_v
dz = target.
X0() -
X0();
479 active &= TransportJXY0ToX0( target.
X0(), fld, eX, eY, J04, J14, active );
481 J[0]=
dz; J[1] = 0; J[2]= J04;
482 J[3] = 0; J[4]=
dz; J[5]= J14;
484 fNDF (static_cast<int_m>(active)) += target.
NDF();
515 out <<
"PndFTSCATrackParamVector " << std::endl;
516 for (
int i = 0;
i < 6;
i++ ) out << t.
Par(
i) <<
" ";
542 #include <valgrind/memcheck.h>
562 float_v::Memory tmpFloat;
563 int_v::Memory tmpShort;
565 for(
int iV=0; iV < nTracksV; iV++) tmpFloat[iV] =
t0[iV].
X();
566 tmpVec.load( tmpFloat );
568 for(
int iV=0; iV < nTracksV; iV++) tmpFloat[iV] =
t0[iV].
SignCosPhi();
569 tmpVec.load( tmpFloat );
572 for(
int iP=0; iP<5; iP++)
574 for(
int iV=0; iV < nTracksV; iV++) tmpFloat[iV] =
t0[iV].
Par()[iP];
575 tmpVec.load( tmpFloat );
578 for(
int iC=0; iC<15; iC++)
580 for(
int iV=0; iV < nTracksV; iV++) tmpFloat[iV] =
t0[iV].
Cov()[iC];
581 tmpVec.load( tmpFloat );
584 for(
int iV=0; iV < nTracksV; iV++) tmpFloat[iV] =
t0[iV].
Chi2();
585 tmpVec.load( tmpFloat );
587 for(
int iV=0; iV < nTracksV; iV++) tmpShort[iV] =
t0[iV].
NDF();
588 tmpVecShort.load( tmpShort );
591 for(
int iV=0; iV < nTracksV; iV++) tmpFloat[iV] =
t0[iV].
Angle();
592 tmpVec.load( tmpFloat );
683 UNUSED_PARAM1(param);
706 const float_v &dz =
GetZ() - t.
GetZ();
707 return dx*dx + dy*dy + dz*
dz;
715 const float_v &dz =
GetZ() - t.
GetZ();
716 return dx*dx + dz*
dz;
727 const float_v &
x = _x -
GetX();
728 const float_v &
y = _y -
GetY();
729 float_v dS = x * ex + y * ey;
731 if ( !mask.isEmpty() ) {
732 dS( mask ) =
CAMath::ATan2( k * dS, 1 + k * ( x * ey - y * ex ) ) / k;
738 float_v *xp, float_v *yp, float_v *zp,
const float_v &Bz )
const
742 const float_v &
x0 =
GetX();
743 const float_v &
y0 =
GetY();
747 const float_v &
dx = x -
x0;
748 const float_v &
dy = y -
y0;
749 const float_v &ax = dx * k + ey;
750 const float_v &ay = dy * k - ex;
751 const float_v &
a =
sqrt( ax * ax + ay * ay );
752 *xp = x0 + ( dx - ey * ( ( dx * dx + dy *
dy ) * k - 2.f * ( -dx * ey + dy * ex ) ) / ( a + 1.f ) ) / a;
753 *yp = y0 + ( dy + ex * ( ( dx * dx + dy *
dy ) * k - 2.f * ( -dx * ey + dy * ex ) ) / ( a + 1.f ) ) / a;
754 const float_v
s =
GetS( x, y, Bz );
757 const float_m mask =
CAMath::Abs( k ) > 1.e-2f && dZ > .1f;
775 const float_v ex = t0.
CosPhi();
776 const float_v ey = t0.
SinPhi();
777 const float_v k = t0.
QPt() * Bz;
778 const float_v
dx = x -
X();
780 float_v ey1 = k * dx + ey;
787 const float_v dx2 = dx *
dx;
788 const float_v ss = ey + ey1;
789 const float_v cc = ex + ex1;
791 const float_v cci = 1.f / cc;
792 const float_v exi = 1.f / ex;
793 const float_v ex1i = 1.f / ex1;
797 const float_v tg = ss * cci;
799 const float_v
dy = dx * tg;
805 const float_v dz = dS * t0.
DzDs();
808 ( *DL )( mask ) = -dS * CAMath::Sqrt( 1.f + t0.
DzDs() * t0.
DzDs() );
819 const float_v
h2 = dx * ( 1.f + ey * ey1 + ex * ex1 ) * exi * ex1i * cci;
820 const float_v
h4 = dx2 * ( cc + ss * ey1 * ex1i ) * cci * cci * Bz;
821 const float_v dxBz = dx * Bz;
832 fX( mask ) =
X() +
dx;
833 fP[0]( mask ) =
Y() + dy + h2 * d[0] + h4 * d[2];
834 fP[1]( mask ) =
Z() + dz + dS * d[1];
835 fP[2]( mask ) = t0.
SinPhi() + d[0] + dxBz * d[2];
838 const float_v c00 =
fC[0];
839 const float_v
c10 =
fC[1];
840 const float_v
c11 =
fC[2];
841 const float_v
c20 =
fC[3];
842 const float_v
c21 =
fC[4];
843 const float_v
c22 =
fC[5];
844 const float_v c30 =
fC[6];
845 const float_v c31 =
fC[7];
846 const float_v c32 =
fC[8];
847 const float_v c33 =
fC[9];
848 const float_v c40 =
fC[10];
849 const float_v c41 =
fC[11];
850 const float_v c42 =
fC[12];
851 const float_v c43 =
fC[13];
852 const float_v c44 =
fC[14];
854 fC[0]( mask ) = ( c00 + h2 * h2 * c22 + h4 * h4 * c44
855 + 2.f * ( h2 * c20 + h4 * c40 + h2 * h4 * c42 ) );
857 fC[1]( mask ) = c10 + h2 * c21 + h4 * c41 + dS * ( c30 + h2 * c32 + h4 * c43 );
858 fC[2]( mask ) = c11 + 2.f * dS * c31 + dS * dS * c33;
860 fC[3]( mask ) = c20 + h2 * c22 + h4 * c42 + dxBz * ( c40 + h2 * c42 + h4 * c44 );
861 fC[4]( mask ) = c21 + dS * c32 + dxBz * ( c41 + dS * c43 );
862 fC[5]( mask ) = c22 + 2.f * dxBz * c42 + dxBz * dxBz * c44;
864 fC[6]( mask ) = c30 + h2 * c32 + h4 * c43;
865 fC[7]( mask ) = c31 + dS * c33;
866 fC[8]( mask ) = c32 + dxBz * c43;
869 fC[10]( mask ) = c40 + h2 * c42 + h4 * c44;
870 fC[11]( mask ) = c41 + dS * c43;
871 fC[12]( mask ) = c42 + dxBz * c44;
872 fC[13]( mask ) = c43;
873 fC[14]( mask ) = c44;
875 debugKF() << mask <<
"\n" << *
this << std::endl;
881 const float maxSinPhi,
const float_m &mask )
895 const float_v &XThimesRho,
const float_v &Bz,
const float maxSinPhi,
const float_m &mask_ )
905 float_m mask = mask_ &&
TransportToX0( x, t0, Bz, maxSinPhi, &dl, mask_ );
910 const float_v dzds2 = t0.
DzDs()*t0.
DzDs();
912 float_v koeff =
sqrt( (1 + dzds2)*( 1 + sphi2 ) );
921 const float_v &XThimesRho,
const float_v &Bz,
const float maxSinPhi )
930 const float_v &XThimesRho,
const float_v &Bz,
const float maxSinPhi )
966 const float mK = 0.307075e-3
f;
967 const float _2me = 1.022e-3
f;
968 const float_v &rho = kp0;
969 const float_v &
x0 = kp1 * 2.303f;
970 const float_v &x1 = kp2 * 2.303f;
971 const float_v &mI = kp3;
972 const float_v &mZA = kp4;
973 const float_v &maxT = _2me * bg2;
979 d2( x > x1 ) = lhwI + x - 0.5f;
980 const float_v &
r = ( x1 -
x ) / ( x1 - x0 );
981 d2( x > x0 && x <= x1 ) = lhwI + x - 0.5f + ( 0.5f - lhwI -
x0 ) * r * r * r;
983 return mK*mZA*( float_v(
Vc::One ) + bg2 ) / bg2*( 0.5f*
CAMath::Log( maxT * maxT / ( mI*mI ) ) - bg2 / ( float_v(
Vc::One ) + bg2 ) - d2 );
1007 const float_v rho = 0.9e-3
f;
1008 const float_v
x0 = 2.f;
1009 const float_v x1 = 4.f;
1010 const float_v mI = 140.e-9
f;
1011 const float_v mZA = 0.49555f;
1027 const float_v &beta2_1subBeta2 = beta2 / ( float_v(
Vc::One ) - beta2 );
1028 const float_v &_0p000153_beta2 = 0.153e-3f / beta2;
1029 const float log_3p5mul5940 = 9.942227380852058f;
1030 const float log_5940 = 8.68946441235669f;
1031 const float_v log_beta2_1subBeta2 =
CAMath::Log( beta2_1subBeta2 );
1033 float_v ret = _0p000153_beta2 * ( log_5940 + log_beta2_1subBeta2 - beta2 );
1034 ret( beta2_1subBeta2 > 3.5f*3.5f ) =
1035 _0p000153_beta2 * ( log_3p5mul5940 + 0.5f * log_beta2_1subBeta2 - beta2 );
1036 ret.setZero( beta2 >= float_v(
Vc::One ) );
1046 const float_v k2 =
fP[4] *
fP[4];
1047 const float_v mass2 = mass * mass;
1048 const float_v beta2 = p2 / ( p2 + mass2 * k2 );
1050 float_v pp2 = 10000.f; pp2( k2 > 1.e-8f ) = p2 / k2;
1056 par.
fTheta2 = 14.1f * 14.1f / ( beta2 * pp2 * 1.e6f );
1061 const float knst = 0.07f;
1065 par.
fK22 = ( float_v(
Vc::One ) + fP[3] * fP[3] );
1067 par.
fK43 = fP[3] * fP[4] * par.
fK22;
1068 par.
fK44 = fP[3] * fP[3] * fP[4] * fP[4];
1080 float_v &fC22 =
fC[5];
1081 float_v &fC33 =
fC[9];
1082 float_v &fC40 =
fC[10];
1083 float_v &fC41 =
fC[11];
1084 float_v &fC42 =
fC[12];
1085 float_v &fC43 =
fC[13];
1086 float_v &fC44 =
fC[14];
1090 const float_v &
dE = par.
fBethe * xTimesRho;
1092 float_m mask = _mask && dE <= 0.3f * par.
fE;
1094 mask &= corr >= 0.3f && corr <= 1.3f;
1096 fP[4]( mask ) *= corr;
1097 fC40 ( mask ) *=
corr;
1098 fC41 ( mask ) *=
corr;
1099 fC42 ( mask ) *=
corr;
1100 fC43 ( mask ) *=
corr;
1101 fC44 ( mask ) *= corr *
corr;
1106 assert( (xOverX0 >= float_v(
Vc::Zero) || !mask ).isFull() );
1107 const float_v &theta2 = par.
fTheta2 * xOverX0;
1108 fC22( mask ) += theta2 * par.
fK22 * ( float_v(
Vc::One ) -
fP[2] *
fP[2] );
1109 fC33( mask ) += theta2 * par.
fK33;
1110 fC43( mask ) += theta2 * par.
fK43;
1111 fC44( mask ) += theta2 * par.
fK44;
1117 const float maxSinPhi,
const float_m &mask )
1120 if ( (
CAMath::Abs(alpha) < 1e-6f || !mask).isFull() )
return mask;
1125 const float_v cosPhi = cP * cA + sP * sA;
1126 const float_v sinPhi = -cP * sA + sP * cA;
1128 float_m ReturnMask(mask);
1131 float_v tmp = alpha*0.15915494f;
1132 ReturnMask &= abs(tmp - round(tmp)) < 0.167f;
1140 const float_v j0 = cP / cosPhi;
1141 const float_v j2 = cosPhi / cP;
1142 const float_v
d =
SinPhi() - sP;
1144 SetX( x0*cA +
y0*sA, ReturnMask );
1145 SetY(-x0*sA +
y0*cA, ReturnMask );
1151 fC[0](ReturnMask) *= j0 * j0;
1152 fC[1](ReturnMask) *= j0;
1153 fC[3](ReturnMask) *= j0;
1154 fC[6](ReturnMask) *= j0;
1155 fC[10](ReturnMask) *= j0;
1157 fC[3](ReturnMask) *= j2;
1158 fC[4](ReturnMask) *= j2;
1159 fC[5](ReturnMask) *= j2 * j2;
1160 fC[8](ReturnMask) *= j2;
1161 fC[12](ReturnMask) *= j2;
1170 assert( maxSinPhi > 0.f );
1173 const float_v c00 =
fC[0];
1174 const float_v
c10 =
fC[1];
1175 const float_v
c11 =
fC[2];
1176 const float_v
c20 =
fC[3];
1177 const float_v
c21 =
fC[4];
1179 const float_v c30 =
fC[6];
1180 const float_v c31 =
fC[7];
1183 const float_v c40 =
fC[10];
1184 const float_v c41 =
fC[11];
1201 float_v
d = float_v(
Vc::One ) / ( err2Y*err2Z - errYZ*errYZ );
1205 success &= (err2Y > 1.e-8
f ) && ( err2Z > 1.e-8f );
1207 const float_v mS0 = err2Z*
d;
1208 const float_v mS1 = -errYZ*
d;
1209 const float_v mS2 = err2Y*
d;
1214 k00 = c00 * mS0 + c10*mS1, k01 = c00 * mS1 + c10*mS2,
1215 k10 = c10 * mS0 + c11*mS1, k11 = c10 * mS1 + c11*mS2,
1216 k20 = c20 * mS0 + c21*mS1, k21 = c20 * mS1 + c21*mS2,
1217 k30 = c30 * mS0 + c31*mS1, k31 = c30 * mS1 + c31*mS2,
1218 k40 = c40 * mS0 + c41*mS1, k41 = c40 * mS1 + c41*mS2;
1220 const float_v sinPhi = fP[2] + k20 * z0 + k21 * z1;
1224 fNDF( static_cast<int_m>(success) ) += hitNDF;
1225 fChi2(success) += mS0 * z0 * z0 + 2 * z0 * z1 * mS1 + mS2 * z1 * z1;
1226 success &=
fChi2 < chi2Cut;
1227 if ( success.isEmpty() )
return success;
1233 fP[ 0](
success) += k00 * z0 + k01 * z1;
1234 fP[ 1](
success) += k10 * z0 + k11 * z1;
1236 fP[ 3](
success) += k30 * z0 + k31 * z1;
1237 fP[ 4](
success) += k40 * z0 + k41 * z1;
1238 fC[ 0](
success) -= (k00 * c00 + k01 * c10);
1240 fC[ 1](
success) -= (k10 * c00 + k11 * c10);
1241 fC[ 2](
success) -= (k10 * c10 + k11 * c11);
1243 fC[ 3](
success) -= (k20 * c00 + k21 * c10);
1244 fC[ 4](
success) -= (k20 * c10 + k21 * c11);
1245 fC[ 5](
success) -= (k20 * c20 + k21 * c21);
1247 fC[ 6](
success) -= (k30 * c00 + k31 * c10);
1248 fC[ 7](
success) -= (k30 * c10 + k31 * c11);
1249 fC[ 8](
success) -= (k30 * c20 + k31 * c21);
1250 fC[ 9](
success) -= (k30 * c30 + k31 * c31);
1252 fC[10](
success) -= (k40 * c00 + k41 * c10);
1253 fC[11](
success) -= (k40 * c10 + k41 * c11);
1256 fC[12](
success) -= (k40 * c20 + k41 * c21);
1257 fC[13](
success) -= (k40 * c30 + k41 * c31);
1258 fC[14](
success) -= (k40 * c40 + k41 * c41);
1267 assert( maxSinPhi > 0.f );
1269 success &= ( err2 > 1.e-8
f );
1271 const float_v& c00 =
fC[0];
1272 const float_v&
c10 =
fC[1];
1273 const float_v&
c11 =
fC[2];
1275 const float_v& sb = info.
sin;
1276 const float_v& cb = info.
cos;
1278 const float_v u = cb*y + sb*
z;
1279 const float_v zeta = cb*
fP[0] + sb*
fP[1] - u;
1282 const float_v F0 = cb*c00 + sb*
c10;
1283 const float_v F1 = cb*c10 + sb*
c11;
1285 const float_v HCH = ( F0*cb + F1*sb );
1287 const float_v wi = 1/( err2 + HCH );
1288 const float_v zetawi = zeta *wi;
1290 fChi2(success) += zeta * zetawi;
1291 success &=
fChi2 < chi2Cut;
1292 if ( success.isEmpty() )
return success;
1294 const float_v&
c20 =
fC[3];
1295 const float_v&
c21 =
fC[4];
1296 const float_v& c30 =
fC[6];
1297 const float_v& c31 =
fC[7];
1298 const float_v& c40 =
fC[10];
1299 const float_v& c41 =
fC[11];
1301 const float_v F2 = cb*c20 + sb*
c21;
1302 const float_v F3 = cb*c30 + sb*c31;
1303 const float_v F4 = cb*c40 + sb*c41;
1306 const float_v K1 = F1*wi;
1307 const float_v K2 = F2*wi;
1308 const float_v K3 = F3*wi;
1309 const float_v K4 = F4*wi;
1312 const float_v sinPhi =
fP[2] - F2*zetawi;
1316 fNDF( static_cast<int_m>(success) ) += 1;
1354 const float_v& ety =
SinPhi();
1355 const float_v& etz = 1.f;
1356 const float_v& eox = - ety * info.
cos - etz * info.
sin;
1357 const float_v& eoy = etx * info.
cos;
1358 const float_v& eoz = etx * info.
sin;
1360 const float_v& iEo =
rsqrt( eox*eox + eoy*eoy + eoz*eoz );
1361 const float_v& h0 = eoy*iEo;
1362 const float_v&
h1 = eoz*iEo;
1364 assert( maxSinPhi > 0.f );
1366 success &= ( err2 > 1.e-8
f );
1368 const float_v& c00 =
fC[0];
1369 const float_v&
c10 =
fC[1];
1370 const float_v&
c11 =
fC[2];
1372 const float_v zeta = h0*(
fP[0] -
y0) + h1*(
fP[1] - z0) -
r;
1375 const float_v F0 = h0*c00 + h1*
c10;
1376 const float_v F1 = h0*c10 + h1*
c11;
1378 const float_v HCH = ( F0*h0 + F1*
h1 );
1380 const float_v wi = 1/( err2 + HCH );
1381 const float_v zetawi = zeta *wi;
1383 fChi2(success) += zeta * zetawi;
1384 success &=
fChi2 < chi2Cut;
1385 if ( success.isEmpty() )
return success;
1387 const float_v&
c20 =
fC[3];
1388 const float_v&
c21 =
fC[4];
1389 const float_v& c30 =
fC[6];
1390 const float_v& c31 =
fC[7];
1391 const float_v& c40 =
fC[10];
1392 const float_v& c41 =
fC[11];
1394 const float_v F2 = h0*c20 + h1*
c21;
1395 const float_v F3 = h0*c30 + h1*c31;
1396 const float_v F4 = h0*c40 + h1*c41;
1399 const float_v K1 = F1*wi;
1400 const float_v K2 = F2*wi;
1401 const float_v K3 = F3*wi;
1402 const float_v K4 = F4*wi;
1405 const float_v sinPhi =
fP[2] - F2*zetawi;
1409 fNDF( static_cast<int_m>(success) ) += 1;
1442 float_m active = mask;
1447 active &=
TransportToX0WithMaterial( param.
GetX0( ista, active ), tE, fitPar, param.
GetXOverX0(int_v(ista),active), param.
GetXTimesRho(int_v(ista),active), param.
cBz(), 0.999f, active );
1454 float_m active = mask & hit.
IsValid();
1469 return FilterWithMaterial( hit.XWire1(), hit.XWire2(), hit.RSigned(), param.
Station( iSta ).
f, hit.Err2R(), 0.999f, mask, chi2Cut );
1481 float_m active = mask;
1506 float_m active = mask;
1509 float_v dz = target.
X0() -
X0();
1513 active &=
TransportJ0ToX0( target.
X0(),
static_cast<float_v
>(target.
B()), eY, eZ, J, active );
1515 fNDF (static_cast<int_m>(active)) += target.
NDF();
1524 float_v::Memory
x,
s,
p[5],
c[15], chi2;
1526 for (
int j = 0; j < uint_v::Size; ++j ) {
1529 for (
int i = 0; i < 5; i++ ) in >> p[
i][j];
1530 for (
int i = 0; i < 15; i++ ) in >> c[
i][j];
1536 for (
int i = 0;
i < 5;
i++ ) t.
fP[
i].load( p[
i] );
1537 for (
int i = 0; i < 5; i++ ) t.
fC[i].load( c[i] );
1538 t.
fChi2.load( chi2 );
1545 if ( out == std::cerr ) {
1546 out <<
"------------------------------ Track Param ------------------------------"
1547 <<
"\n X: " << t.
X()
1549 <<
"\n Chi2: " << t.
Chi2()
1550 <<
"\n NDF: " << t.
NDF()
1551 <<
"\n Y: " << t.
Par()[0]
1552 <<
"\n Z: " << t.
Par()[1]
1553 <<
"\n SinPhi: " << t.
Par()[2]
1554 <<
"\n DzDs: " << t.
Par()[3]
1555 <<
"\n q/Pt: " << t.
Par()[4]
1556 <<
"\nCovariance Matrix\n";
1558 out << std::setprecision( 2 );
1559 for (
int step = 1; step <= 5; ++step ) {
1561 for ( ; i < end; ++
i ) {
1562 out << t.
Cov()[
i] <<
'\t';
1566 out << std::setprecision( 6 );
1567 return out << std::endl;
1569 for (
int j = 0; j < uint_v::Size; ++j ) {
1570 out << t.
X()[j] <<
" "
1572 << t.
Chi2()[j] <<
" "
1575 for (
int i = 0;
i < 5;
i++ ) out << t.
Par()[
i][j] <<
" ";
1577 for (
int i = 0;
i < 15;
i++ ) out << t.
Cov()[
i][j] <<
" ";
1583 #endif // !PANDA_FTS
static T ASin(const T &x)
static float_v BetheBlochGas(const float_v &bg)
void SetAngle(const float_v &v)
void SetZ(const float_v &v)
void SetQPt(const float_v &v)
void SetCov(int i, const float_v &v)
const FTSCAStation & Station(short i) const
void GetStripInfo(FTSCAStripInfoVector &stripInfo, const int_v iStation, const float_m &mask) const
void InitByHit(const FTSCAHitV &hit, const PndFTSCAParam ¶m, const float_v &dQMom)
void SetY(const float_v &v)
const float_v * Par() const
void SetX(const float_v &v)
float_m CorrectForMeanMaterial(const float_v &xOverX0, const float_v &xTimesRho, const PndFTSCATrackFitParam &par, const float_m &_mask)
void SetDzDs(const float_v &v)
friend F32vec4 sqrt(const F32vec4 &a)
static const UInt_t success
static T Sqrt(const T &x)
void SetSignCosPhi(const float_v &v)
void DrawGBPoint(float x, float y, float z, int Start=1, Size_t width=1)
float GetX0(short iSt) const
void SetChi2(const float_v &v)
std::ostream & operator<<(std::ostream &o, const PndEventInfo &a)
static T Round(const T &x)
static PndFTSCADisplay & Instance()
void SetSinPhi(const float_v &v)
float GetXOverX0(short iSt) const
float_v GetS(const float_v &x, const float_v &y, const float_v &Bz) const
float_v GetKappa(const float_v &Bz) const
float_m Rotate(const float_v &alpha, PndFTSCATrackLinearisationVector &t0, const float maxSinPhi=.999f, const float_m &mask=float_m(true))
static float_v ApproximateBetheBloch(const float_v &beta2)
float_m AddTarget(const FTSCATarget &target, const float_m &mask=float_m(true))
float_v GetCosPhi() const
const CAFieldValue & B(int i=0) const
void SetCosPhi(float_v v)
float_v GetSinPhi() const
float_m FilterVtx(const float_v &xV, const float_v &yV, const CAX1X2MeasurementInfo &info, float_v &extrDx, float_v &extrDy, float_v J[], const float_m &active=float_m(true))
float_v GetDistXZ2(const PndFTSCATrackParamVector &t) const
float_m Transport(const int_v &ista, const PndFTSCAParam ¶m, const float_m &mask=float_m(true))
static T Min(const T &x, const T &y)
const float_v & ZB(int i) const
const float_v * Cov() const
float_m TransportJ0ToX0(const float_v &x0, const float_v &cBz, float_v &extrDy, float_v &extrDz, float_v J[], const float_m &active=float_m(true))
friend F32vec4 rsqrt(const F32vec4 &a)
static T ATan2(const T &y, const T &x)
void CalculateFitParameters(PndFTSCATrackFitParam &par, const float_v &mass=0.13957f)
void InitCovMatrix(float_v d2QMom=0.f)
static float_v BetheBlochSolid(const float_v &bg)
float_m TransportToX0WithMaterial(const float_v &x, const float_v &XOverX0, const float_v &XThimesRho, const float_v &Bz, const float maxSinPhi=.999f)
float_v SignCosPhi() const
float_m FilterWithMaterial(const float_v &y, const float_v &z, float_v err2Y, float_v errYZ, float_v err2Z, float maxSinPhi=0.999f, const float_m &mask=float_m(true), const int_v &hitNDF=int_v(2), const float_v &chi2Cut=10e10f)
void SetSinPhi(float_v v)
float GetXTimesRho(short iSt) const
static T Max(const T &x, const T &y)
TBuffer & operator>>(TBuffer &buf, PndAnaPidSelector *&obj)
void GetDCAPoint(const float_v &x, const float_v &y, const float_v &z, float_v *px, float_v *py, float_v *pz, const float_v &Bz) const
float_m TransportToX0(const float_v &x, const float_v &Bz, const float maxSinPhi=.999f, const float_m &mask=float_m(true))
void Set(const CAFieldValue &B0, const float_v B0z, const CAFieldValue &B1, const float_v B1z, const CAFieldValue &B2, const float_v B2z)
static float_v BetheBlochGeant(const float_v &bg, const float_v &kp0=2.33f, const float_v &kp1=0.20f, const float_v &kp2=3.00f, const float_v &kp3=173e-9f, const float_v &kp4=0.49848f)
void SetPar(int i, const float_v &v)
const float_v & Cov(int i) const
const float_v & Par(int i) const
void InitByTarget(const FTSCATarget &target)
float_v GetDist2(const PndFTSCATrackParamVector &t) const
void ConvertTrackParamToVector(PndFTSCATrackParam t0[float_v::Size], int nTracksV)
PndFTSCANoDebugStream & debugKF()
float_m Filter(const FTSCAHitV &hit, const PndFTSCAParam ¶m, const float_m &mask=float_m(true), const float_v &chi2Cut=10e10f)