File indexing completed on 2025-08-06 08:10:13
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Direction.hpp"
0012 #include "Acts/EventData/Measurement.hpp"
0013 #include "Acts/EventData/MeasurementHelpers.hpp"
0014 #include "Acts/EventData/MultiTrajectory.hpp"
0015 #include "Acts/Geometry/GeometryContext.hpp"
0016 #include "Acts/TrackFitting/KalmanFitterError.hpp"
0017 #include "Acts/Utilities/Logger.hpp"
0018 #include "Acts/Utilities/Result.hpp"
0019
0020 #include <cassert>
0021 #include <system_error>
0022 #include <tuple>
0023
0024 namespace Acts {
0025
0026
0027 class GainMatrixUpdater {
0028 struct InternalTrackState {
0029 TrackStateTraits<MultiTrajectoryTraits::MeasurementSizeMax,
0030 false>::Parameters predicted;
0031 TrackStateTraits<MultiTrajectoryTraits::MeasurementSizeMax,
0032 false>::Covariance predictedCovariance;
0033 TrackStateTraits<MultiTrajectoryTraits::MeasurementSizeMax,
0034 false>::Parameters filtered;
0035 TrackStateTraits<MultiTrajectoryTraits::MeasurementSizeMax,
0036 false>::Covariance filteredCovariance;
0037
0038 double* calibrated;
0039 double* calibratedCovariance;
0040 TrackStateTraits<MultiTrajectoryTraits::MeasurementSizeMax,
0041 false>::Projector projector;
0042 unsigned int calibratedSize;
0043 };
0044
0045 public:
0046
0047
0048
0049
0050
0051
0052 template <typename traj_t>
0053 Result<void> operator()(const GeometryContext& ,
0054 typename traj_t::TrackStateProxy trackState,
0055 Direction direction = Direction::Forward,
0056 const Logger& logger = getDummyLogger()) const {
0057 ACTS_VERBOSE("Invoked GainMatrixUpdater");
0058
0059
0060 assert(trackState.hasCalibrated());
0061
0062 assert(trackState.hasPredicted());
0063
0064 assert(trackState.hasFiltered());
0065
0066
0067
0068
0069
0070 ACTS_VERBOSE(
0071 "Predicted parameters: " << trackState.predicted().transpose());
0072 ACTS_VERBOSE("Predicted covariance:\n" << trackState.predictedCovariance());
0073
0074
0075
0076
0077
0078
0079 auto [chi2, error] = visitMeasurement(
0080 InternalTrackState{
0081 trackState.predicted(),
0082 trackState.predictedCovariance(),
0083 trackState.filtered(),
0084 trackState.filteredCovariance(),
0085
0086
0087
0088 trackState
0089 .template calibrated<
0090 MultiTrajectoryTraits::MeasurementSizeMax>()
0091 .data(),
0092 trackState
0093 .template calibratedCovariance<
0094 MultiTrajectoryTraits::MeasurementSizeMax>()
0095 .data(),
0096 trackState.projector(),
0097 trackState.calibratedSize(),
0098 },
0099 direction, logger);
0100
0101 trackState.chi2() = chi2;
0102
0103 return error ? Result<void>::failure(error) : Result<void>::success();
0104 }
0105
0106 private:
0107 std::tuple<double, std::error_code> visitMeasurement(
0108 InternalTrackState trackState, Direction direction,
0109 const Logger& logger) const;
0110 };
0111
0112 }