51 [[nodiscard]] Acts::Result<Acts::Vector3>
getField(Acts::Vector3
const& position,
52 Cache& )
const override {
53 using Result = Acts::Result<Acts::Vector3>;
54 namespace si = mp_units::si;
55 if (!position.allFinite()) {
56 return fail(
"non-finite position queried");
59 std::array<IFieldEvaluator::field_q, 3> B{};
61 B = eval_->at((position[0] / Acts::UnitConstants::mm) * si::milli<si::metre>,
62 (position[1] / Acts::UnitConstants::mm) * si::milli<si::metre>,
63 (position[2] / Acts::UnitConstants::mm) * si::milli<si::metre>);
64 }
catch (std::exception
const& e) {
65 return fail(e.what());
67 return fail(
"unknown exception from evaluator");
70 Acts::Vector3
const field{B[0].numerical_value_in(si::tesla) * Acts::UnitConstants::T,
71 B[1].numerical_value_in(si::tesla) * Acts::UnitConstants::T,
72 B[2].numerical_value_in(si::tesla) * Acts::UnitConstants::T};
73 if (!field.allFinite()) {
74 return fail(
"non-finite field value from evaluator");
76 return Result::success(field);