12 #include <tracking/ckf/general/utilities/EigenHelper.h>
14 #include <genfit/MeasuredStateOnPlane.h>
15 #include <genfit/MeasurementOnPlane.h>
17 #include <Eigen/Dense>
35 template <
unsigned int Dimension>
42 using HMatrix = Eigen::Matrix<double, Dimension, 5>;
54 TrackState x_k = convertToEigen<5>(measuredStateOnPlane.getState());
55 TrackCovariance C_k = convertToEigen<5, 5>(measuredStateOnPlane.getCov());
58 const MeasurementState& m_k = convertToEigen<Dimension>(measurementOnPlane.getState());
59 const HMatrix& H_k = convertToEigen<Dimension, 5>(measurementOnPlane.getHMatrix()->
getMatrix());
62 const double chi2 =
kalmanStep(x_k, C_k, m_k, V_k, H_k);
65 measuredStateOnPlane.setState(TVectorD(5, x_k.data()));
66 measuredStateOnPlane.setCov(TMatrixDSym(5, C_k.data()));
76 const TrackState& x_k = convertToEigen<5>(measuredStateOnPlane.getState());
79 const MeasurementState& m_k = convertToEigen<Dimension>(measurementOnPlane.getState());
80 const HMatrix& H_k = convertToEigen<Dimension, 5>(measurementOnPlane.getHMatrix()->
getMatrix());
83 return residual.norm();
93 const Eigen::Matrix<double, 5, Dimension>& K_k = C_k * H_k.transpose() * (V_k + H_k * C_k * H_k.transpose()).inverse();
94 C_k -= K_k * H_k * C_k;
95 x_k += K_k * (m_k - H_k * x_k);
98 const double chi2 = (residual.transpose() * (V_k - H_k * C_k * H_k.transpose()).inverse() * residual).value();