LDMX Software
ZeroOutsideBField.h
1#pragma once
2
3#include <memory>
4
5#include "Acts/MagneticField/MagneticFieldProvider.hpp"
6#include "Tracking/Sim/BFieldXYZUtils.h"
7
8namespace tracking::sim {
9
12class ZeroOutsideBField final : public Acts::MagneticFieldProvider {
13 public:
14 explicit ZeroOutsideBField(
15 std::shared_ptr<const InterpolatedMagneticField3> map)
16 : map_(std::move(map)) {}
17
18 Cache makeCache(const Acts::MagneticFieldContext& mctx) const override {
19 return map_->makeCache(mctx);
20 }
21
22 Acts::Result<Acts::Vector3> getField(const Acts::Vector3& position,
23 Cache& cache) const override {
24 if (!map_->isInside(position)) {
25 return Acts::Result<Acts::Vector3>::success(Acts::Vector3::Zero());
26 }
27 return map_->getField(position, cache);
28 }
29
30 private:
31 std::shared_ptr<const InterpolatedMagneticField3> map_;
32};
33
34} // namespace tracking::sim
Field map that returns zero outside its grid instead of an error, so a propagation leaving the map do...