File indexing completed on 2025-11-06 09:17:03
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Direction.hpp"
0012 #include "Acts/Definitions/Tolerance.hpp"
0013 #include "Acts/Geometry/GeometryContext.hpp"
0014 #include "Acts/MagneticField/MagneticFieldContext.hpp"
0015 #include "Acts/Propagator/ActorList.hpp"
0016 #include "Acts/Propagator/NavigatorOptions.hpp"
0017 #include "Acts/Propagator/StepperOptions.hpp"
0018
0019 #include <limits>
0020
0021 namespace Acts {
0022
0023 namespace detail {
0024
0025
0026 struct PurePropagatorPlainOptions {
0027
0028 Direction direction = Direction::Forward();
0029
0030
0031
0032
0033
0034 unsigned int maxSteps = 1000;
0035
0036
0037
0038
0039
0040 unsigned int maxTargetSkipping = 100;
0041
0042
0043 double pathLimit = std::numeric_limits<double>::max();
0044
0045
0046 bool loopProtection = true;
0047
0048 double loopFraction = 0.5;
0049
0050
0051 double surfaceTolerance = s_onSurfaceTolerance;
0052
0053
0054
0055
0056 std::vector<std::uint32_t> constrainToVolumeIds;
0057
0058
0059
0060 std::vector<std::uint32_t> endOfWorldVolumeIds;
0061 };
0062
0063 }
0064
0065
0066 struct PropagatorPlainOptions : public detail::PurePropagatorPlainOptions {
0067
0068
0069
0070 PropagatorPlainOptions(const GeometryContext& gctx,
0071 const MagneticFieldContext& mctx)
0072 : geoContext(gctx),
0073 magFieldContext(mctx),
0074 stepping(gctx, mctx),
0075 navigation(gctx) {}
0076
0077
0078 std::reference_wrapper<const GeometryContext> geoContext;
0079
0080
0081 std::reference_wrapper<const MagneticFieldContext> magFieldContext;
0082
0083
0084 StepperPlainOptions stepping;
0085
0086
0087 NavigatorPlainOptions navigation;
0088 };
0089
0090
0091
0092
0093
0094
0095 template <typename stepper_options_t, typename navigator_options_t,
0096 typename actor_list_t = ActorList<>>
0097 struct PropagatorOptions : public detail::PurePropagatorPlainOptions {
0098
0099 using stepper_options_type = stepper_options_t;
0100
0101 using navigator_options_type = navigator_options_t;
0102
0103 using actor_list_type = actor_list_t;
0104
0105
0106
0107
0108 PropagatorOptions(const GeometryContext& gctx,
0109 const MagneticFieldContext& mctx)
0110 : geoContext(gctx),
0111 magFieldContext(mctx),
0112 stepping(gctx, mctx),
0113 navigation(gctx) {}
0114
0115
0116
0117 explicit PropagatorOptions(const PropagatorPlainOptions& pOptions)
0118 : geoContext(pOptions.geoContext),
0119 magFieldContext(pOptions.magFieldContext),
0120 stepping(pOptions.geoContext, pOptions.magFieldContext),
0121 navigation(pOptions.geoContext) {
0122 setPlainOptions(pOptions);
0123 }
0124
0125
0126 explicit operator PropagatorPlainOptions() const {
0127 PropagatorPlainOptions pOptions(geoContext, magFieldContext);
0128 static_cast<PurePropagatorPlainOptions&>(pOptions) =
0129 static_cast<const PurePropagatorPlainOptions&>(*this);
0130 pOptions.stepping = static_cast<const StepperPlainOptions&>(stepping);
0131 pOptions.navigation = static_cast<const NavigatorPlainOptions&>(navigation);
0132 return pOptions;
0133 }
0134
0135
0136
0137
0138
0139
0140
0141 template <typename extended_actor_list_t>
0142 PropagatorOptions<stepper_options_t, navigator_options_t,
0143 extended_actor_list_t>
0144 extend(extended_actor_list_t extendedActorList) const {
0145 PropagatorOptions<stepper_options_t, navigator_options_t,
0146 extended_actor_list_t>
0147 eoptions(geoContext, magFieldContext);
0148
0149
0150 static_cast<PurePropagatorPlainOptions&>(eoptions) =
0151 static_cast<const PurePropagatorPlainOptions&>(*this);
0152
0153
0154 eoptions.stepping = stepping;
0155 eoptions.navigation = navigation;
0156
0157
0158 eoptions.actorList = extendedActorList;
0159
0160
0161 return eoptions;
0162 }
0163
0164
0165
0166
0167 void setPlainOptions(const PropagatorPlainOptions& pOptions) {
0168 static_cast<PurePropagatorPlainOptions&>(*this) =
0169 static_cast<const PurePropagatorPlainOptions&>(pOptions);
0170
0171 stepping.setPlainOptions(pOptions.stepping);
0172 navigation.setPlainOptions(pOptions.navigation);
0173 }
0174
0175
0176 std::reference_wrapper<const GeometryContext> geoContext;
0177
0178
0179 std::reference_wrapper<const MagneticFieldContext> magFieldContext;
0180
0181
0182 stepper_options_t stepping;
0183
0184
0185 navigator_options_t navigation;
0186
0187
0188 actor_list_t actorList;
0189 };
0190
0191 }