File indexing completed on 2025-01-18 09:10:58
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Geometry/GeometryContext.hpp"
0013 #include "Acts/Propagator/PropagatorStatistics.hpp"
0014 #include "Acts/Utilities/detail/Extendable.hpp"
0015
0016 #include <functional>
0017
0018 namespace Acts {
0019
0020
0021 enum class PropagatorStage {
0022 invalid,
0023 prePropagation,
0024 postPropagation,
0025 preStep,
0026 postStep,
0027 };
0028
0029
0030
0031
0032
0033
0034
0035 template <typename propagator_options_t, typename stepper_state_t,
0036 typename navigator_state_t, typename... extension_state_t>
0037 struct PropagatorState : private detail::Extendable<extension_state_t...> {
0038 using options_type = propagator_options_t;
0039
0040
0041
0042
0043
0044
0045
0046
0047 PropagatorState(const propagator_options_t& topts, stepper_state_t steppingIn,
0048 navigator_state_t navigationIn)
0049 : geoContext(topts.geoContext),
0050 options(topts),
0051 stepping{std::move(steppingIn)},
0052 navigation{std::move(navigationIn)} {}
0053
0054 using detail::Extendable<extension_state_t...>::get;
0055 using detail::Extendable<extension_state_t...>::tuple;
0056
0057
0058 std::reference_wrapper<const GeometryContext> geoContext;
0059
0060
0061 propagator_options_t options;
0062
0063
0064 PropagatorStage stage = PropagatorStage::invalid;
0065
0066
0067 Vector3 position = Vector3::Zero();
0068
0069
0070 Vector3 direction = Vector3::Zero();
0071
0072
0073 stepper_state_t stepping;
0074
0075
0076 navigator_state_t navigation;
0077
0078
0079 std::size_t steps = 0;
0080
0081
0082 double pathLength = 0.;
0083
0084
0085 PropagatorStatistics statistics;
0086 };
0087
0088 }