9 #include <boost/test/unit_test.hpp>
40 struct EndOfWorldReached;
43 using namespace Acts::UnitLiterals;
60 std::vector<Jacobian> jacobians = {};
61 std::vector<double> paths = {};
65 bool finalized =
false;
80 template <
typename propagator_state_t,
typename stepper_t,
82 void operator()(propagator_state_t&
state,
const stepper_t&
stepper,
86 auto surface = navigator.currentSurface(state.navigation);
94 if ((navigator.navigationBreak(state.navigation) or
95 navigator.targetReached(state.navigation)) and
98 result.
paths.push_back(state.stepping.pathAccumulated);
100 result.
fullPath = state.stepping.pathAccumulated;
117 cfg.resolvePassive =
false;
118 cfg.resolveMaterial =
true;
119 cfg.resolveSensitive =
true;
123 auto bField = std::make_shared<ConstantBField>(
Vector3(0., 0., 0.));
131 cov << 10_mm, 0, 0.123, 0, 0.5, 0, 0, 10_mm, 0, 0.162, 0, 0, 0.123, 0, 0.1, 0,
132 0, 0, 0, 0.162, 0, 0.1, 0, 0, 0.5, 0, 0, 0, 1. / (10_GeV), 0, 0, 0, 0, 0,
136 90_degree, 1_e / 1_GeV, cov,
141 using StepWiseActors = ActionList<StepWiseActor>;
142 using Aborters = AbortList<EndOfWorldReached>;
148 using PlainActors = ActionList<>;
153 const auto& pResult = propagator.
propagate(start, pOptions).value();
155 const auto& pJacobian = *(pResult.transportJacobian);
158 const auto& swResult = propagator.
propagate(start, swOptions).value();
159 auto swJacobianTest = swResult.template get<StepWiseResult>();
163 auto swPaths = swJacobianTest.paths;
165 for (
auto cpath = swPaths.rbegin(); cpath != swPaths.rend(); ++cpath) {
166 if (cpath != swPaths.rend() - 1) {
167 accPath += (*cpath) - (*(cpath + 1));
170 accPath += (*cpath) - 0.;
175 Jacobian accJacobian = Jacobian::Identity();
177 auto swJacobians = swJacobianTest.jacobians;
179 const auto& swlJacobian = *(swResult.transportJacobian);
182 for (
auto&
j : swJacobians) {
183 accJacobian =
j * accJacobian;
185 accJacobian = swlJacobian * accJacobian;