58 bool operator()(
typename Acts::MultiTrajectory<trajectory_t>::ConstTrackStateProxy state)
const {
60 if (not state.hasCalibrated() or not state.hasPredicted()) {
63 return Acts::visit_measurement(
64 state.calibratedSize(),
65 [&] (
auto N) ->
bool {
66 constexpr size_t kMeasurementSize = decltype(N)::value;
68 auto subspaceHelper = state.template projectorSubspaceHelper<kMeasurementSize>();
70 typename Acts::TrackStateTraits<kMeasurementSize, true>::Calibrated calibrated{
71 state.template calibrated<Acts::MultiTrajectoryTraits::MeasurementSizeMax>().data()};
73 typename Acts::TrackStateTraits<kMeasurementSize, true>::CalibratedCovariance
74 calibratedCovariance{state.template calibratedCovariance<Acts::MultiTrajectoryTraits::MeasurementSizeMax>().data()};
78 const auto H = subspaceHelper.projector();
80 const auto residual = calibrated -
H * state.predicted();
81 double chi2 = (residual.transpose() * (calibratedCovariance +
H * state.predictedCovariance() *
H.transpose()).inverse() * residual).value();