57 bool operator()(
typename Acts::MultiTrajectory<trajectory_t>::ConstTrackStateProxy state)
const {
59 if (not state.hasCalibrated() or not state.hasPredicted()) {
62 return Acts::visit_measurement(
63 state.calibratedSize(),
64 [&] (
auto N) ->
bool {
65 constexpr size_t kMeasurementSize = decltype(N)::value;
67 auto subspaceHelper = state.template projectorSubspaceHelper<kMeasurementSize>();
69 typename Acts::TrackStateTraits<kMeasurementSize, true>::Calibrated calibrated{
70 state.template calibrated<Acts::kMeasurementSizeMax>().data()};
72 typename Acts::TrackStateTraits<kMeasurementSize, true>::CalibratedCovariance
73 calibratedCovariance{state.template calibratedCovariance<Acts::kMeasurementSizeMax>().data()};
77 const auto H = subspaceHelper.projector();
79 const auto residual = calibrated -
H * state.predicted();
80 double chi2 = (residual.transpose() * (calibratedCovariance +
H * state.predictedCovariance() *
H.transpose()).inverse() * residual).value();