40 for (i = 0; i < 5; i++)
m_Rk[i] = Rk[i];
62 for (
int i = 0; i < 5; i++) {
65 for (
int i = 0; i < 5; i++)
66 for (
int j = 0; j < 5; j++)
m_Gk[i][j] = pTS->
m_Gk[i][j];
74 FILE* pFile = fopen(fileName,
"a");
76 std::cerr <<
"Cannot open file " << fileName <<
" for write.\n";
79 fprintf(pFile,
"%f %f %f %f %f\n",
81 for (
int i = 0; i < 5; i++) {
82 for (
int j = 0; j < 5; j++) {
83 if (j < i) fprintf(pFile,
" ");
92 printf(
"STATE x0=%f y0=%f phi=%f theta=%f qOverP=%f pT=%f\n",
94 printf(
"COVARIANCE \n");
95 for (
auto & i :
m_Gk) {
113 for (
int i = 0; i < 5; i++)
m_Rk[i] += pUpd[i];
123 for (
int i = 0; i < 5; i++) {
124 for (
int j = i; j < 5; j++) {
125 m_Gk[i][j] += pUpd[idx];
141 for (
int i = 0; i < 5; i++)
m_Re[i] =
m_Rk[i] = R[i];
145 for (
int i = 0; i < 5; i++)
146 for (
int j = 0; j < 5; j++)
155 for (
int i = 0; i < 5; i++)
156 for (
int j = 0; j < 5; j++)
161 double lenCorr, sigmaMS, s2, a2, radLength, lV[3], gV[3],
a;
164 if (pS ==
nullptr)
return;
166 gV[0] = sin(
m_Re[3]) * cos(
m_Re[2]);
167 gV[1] = sin(
m_Re[3]) * sin(
m_Re[2]);
168 gV[2] = cos(
m_Re[3]);
170 lenCorr = 1.0 / fabs(lV[2]);
171 radLength =
m_pSurface->getRadLength() * lenCorr;
172 sigmaMS = 13.6 * fabs(
m_Re[4]) * sqrt(radLength) * (1.0 + 0.038 * log(radLength));
173 s2 = sigmaMS * sigmaMS;
174 a = 1.0 / sin(
m_Rk[3]);
176 m_Ge[2][2] += s2 * a2;
178 m_Ge[2][3] += s2 *
a;
187 double lenCorr, effLength, lV[3], gV[3];
190 if (pS ==
nullptr)
return;
192 gV[0] = sin(
m_Re[3]) * cos(
m_Re[2]);
193 gV[1] = sin(
m_Re[3]) * sin(
m_Re[2]);
194 gV[2] = cos(
m_Re[3]);
196 lenCorr = 1.0 / fabs(lV[2]);
197 effLength =
m_pSurface->getRadLength() * lenCorr;
200 m_Re[4] += dir * (
m_Re[4] * effLength * (1.0 - 0.5 * effLength));
201 m_Ge[4][4] +=
m_Re[4] *
m_Re[4] * effLength * (0.415 - 0.744 * effLength);
204 }
else if (abs(dir) == 2) {
221 double dR[5], dG[5][5], B[5][5];
226 for (i = 0; i < 5; i++) {
228 for (j = 0; j < 5; j++) dG[i][j] =
m_Gk[i][j] -
m_Ge[i][j];
231 if (dR[2] >
M_PI) dR[2] -= 2 *
M_PI;
232 if (dR[2] < -
M_PI) dR[2] += 2 *
M_PI;
233 for (i = 0; i < 5; i++) {
241 for (i = 0; i < 5; i++)
242 for (j = 0; j < 5; j++) {
244 for (m = 0; m < 5; m++) B[i][j] +=
m_A[i][m] * dG[m][j];
246 for (i = 0; i < 5; i++)
247 for (j = 0; j < 5; j++) {
248 for (m = 0; m < 5; m++)
void rotateVectorToLocal(const double *, double *)
void applyMultipleScattering()
void updateTrackState(const double *)
void applyMaterialEffects()
void setPreviousState(TrkTrackState *)
void attachToSurface(TrkPlanarSurface *)
int getScatteringMode() const
void setTrackCovariance(double A[5][5])
void setTrackState(const double A[5])
double getTrackCovariance(int i, int j)
void applyEnergyLoss(int)
TrkPlanarSurface * getSurface()
void setSmootherGain(double A[5][5])
void updateTrackCovariance(const double *)
void setScatteringMode(int)
TrkPlanarSurface * m_pSurface
void serialize(char fileName[])
TrkTrackState * m_pPrevState
Ensure that the ATLAS eigen extensions are properly loaded.
hold the test vectors and ease the comparison