19 namespace ActsFatras {
33 template <
typename generator_t,
typename physics_list_t,
34 typename hit_surface_selector_t>
43 template <
typename propagator_state_t,
typename stepper_t>
44 constexpr
bool operator()(propagator_state_t &,
const stepper_t &,
67 template <
typename propagator_state_t,
typename stepper_t>
70 assert(
generator and
"The generator pointer must be valid");
73 if (state.navigation.targetReached) {
77 if (not state.navigation.currentSurface) {
90 .setPosition4(stepper.position(state.stepping),
91 stepper.time(state.stepping))
92 .setDirection(stepper.direction(state.stepping))
93 .setAbsMomentum(stepper.momentum(state.stepping));
103 auto lpResult = surface.
globalToLocal(state.geoContext, before.position(),
104 before.unitDirection());
114 auto normal = surface.
normal(state.geoContext, local);
117 auto cosIncidenceInv =
118 normal.norm() / normal.dot(before.unitDirection());
134 after.setMaterialPassed(before.pathInX0() + slab.
thicknessInX0(),
143 result.
hits.emplace_back(
146 Hit::Scalar(0.5) * (before.position4() + after.position4()),
147 before.momentum4(), after.momentum4(), result.
hits.size());
151 stepper.update(state.stepping, after.position(), after.unitDirection(),
152 after.absMomentum(), after.time());
156 template <
typename propagator_state_t,
typename stepper_t>