19#include "detray/definitions/detail/macros.hpp"
20#include "detray/definitions/detail/qualifiers.hpp"
21#include "detray/geometry/shapes/line.hpp"
22#include "detray/material/material_rod.hpp"
23#include "detray/navigation/direct_navigator.hpp"
24#include "detray/navigation/external_surface.hpp"
25#include "detray/propagator/actor_chain.hpp"
26#include "detray/propagator/concepts.hpp"
27#include "detray/propagator/propagation_config.hpp"
28#include "detray/propagator/propagator.hpp"
29#include "detray/tracks/tracks.hpp"
30#include "detray/utils/curvilinear_frame.hpp"
31#include "detray/utils/logging.hpp"
32#include "detray/utils/ranges.hpp"
33#include "detray/utils/ranges/single.hpp"
42template <
typename detector_t,
typename stepper_t,
45 using nav_link_t =
typename detector_t::surface_type::navigation_link;
70 typename stepper_t::free_track_parameters_type;
73 typename stepper_t::bound_track_parameters_type;
89 : m_propagator{cfg} {}
97 template <
typename track_t>
99 const detector_t &det)
const {
103 m_propagator.m_cfg.context};
112 return m_propagator.finished(propagation);
124 typename actor_chain_type::state_ref_tuple actor_state_refs =
125 typename actor_chain_type::state_ref_tuple{})
const {
126 propagation.navigation().set_direction(navigation::direction::e_backward);
127 m_propagator.
propagate(propagation, actor_state_refs);
130 assert(!propagation.stepping()().is_invalid());
132 return detail::free_to_bound_vector<line2D<algebra_type>>(
133 m_perigee_surface.
transform(), propagation.stepping()());
141 propagation.navigation().set_direction(navigation::direction::e_backward);
142 m_propagator.propagate(propagation);
145 assert(!propagation.stepping()().is_invalid());
147 return detail::free_to_bound_vector<line2D<algebra_type>>(
148 m_perigee_surface.transform(), propagation.stepping()());
157 0
u, std::numeric_limits<scalar_type>::max(),
158 std::numeric_limits<scalar_type>::max()};
161 perigee_material, 0
u,
162 surface_id::e_passive};
Empty actor chain (placeholder).
Definition actor_chain.hpp:135
Navigator that visits an externally supplied sequence of surfaces in order.
Definition direct_navigator.hpp:38
intersection2D< surface_type, algebra_t, !intersection::contains_pos > intersection_type
Definition direct_navigator.hpp:63
Surface descriptor used for geometry supplied outside the detector store.
Definition external_surface.hpp:32
constexpr auto transform() const -> const transform3_type &
Definition external_surface.hpp:143
detray::mask< line_circular, algebra_type, nav_link_t > mask_type
Definition external_surface.hpp:37
material_rod< scalar_type > material_type
Definition external_surface.hpp:39
Struct that implements a view on a single element.
Definition single.hpp:29
Concept for the actor chain that is being run in the propagator.
Definition concepts.hpp:38
constexpr double u
atomic mass unit u
Definition Units.hpp:155
Detray include(s).
Definition array_operators.hpp:18
get_scalar_t< A, T > dscalar
Scalar type for algebra A and value type T.
Definition algebra.hpp:64
get_transform3D_t< A, T > dtransform3D
Three-dimensional transform type for algebra A and value type T.
Definition algebra.hpp:84
Configuration of the propagation.
Definition propagation_config.hpp:23
Templated propagator class, using a stepper and a navigator object in succession.
Definition propagator.hpp:35
state_base< false > state
Definition propagator.hpp:284
bool propagate(state_base< is_owning > &propagation, actor_states_t actor_state_refs=dtuple<>{}) const
Propagate method: Coordinates the calls of the stepper, navigator and all registered actors.
Definition propagator.hpp:324
Elements Declaration.
Definition predefined_materials.hpp:34