LDMX Software
TrackingGeometryUser.cxx
1#include "Tracking/Reco/TrackingGeometryUser.h"
2
3#include "Acts/MagneticField/ConstantBField.hpp"
4
5namespace tracking::reco {
6
7TrackingGeometryUser::TrackingGeometryUser(const std::string& name,
9 : framework::Producer(name, p) {}
10
11const Acts::GeometryContext& TrackingGeometryUser::geometryContext() {
12 return getNamedCondition<geo::GeometryContext>().get();
13}
14const Acts::MagneticFieldContext& TrackingGeometryUser::magneticFieldContext() {
15 return getNamedCondition<geo::MagneticFieldContext>().get();
16}
17const Acts::CalibrationContext& TrackingGeometryUser::calibrationContext() {
18 return getNamedCondition<geo::CalibrationContext>().get();
19}
20const geo::TrackersTrackingGeometry& TrackingGeometryUser::geometry() {
21 return getNamedCondition<geo::TrackersTrackingGeometry>();
22}
23
24void TrackingGeometryUser::loadBField(const std::vector<double>& map_offset) {
25 loadBField(geometry().fieldMapFile(), map_offset);
26}
27
28void TrackingGeometryUser::loadBField(const std::string& path,
29 const std::vector<double>& map_offset) {
30 if (path.empty()) {
31 ldmx_log(warn) << "No B-field map path provided — using zero B-field";
32 b_field_ =
33 std::make_shared<Acts::ConstantBField>(Acts::Vector3(0., 0., 0.));
34 return;
35 }
36 auto transform_pos = [map_offset](const Acts::Vector3& pos) {
37 return Acts::Vector3(pos(1) + map_offset[0], pos(2) + map_offset[1],
38 pos(0) + DIPOLE_OFFSET + map_offset[2]);
39 };
40 auto transform_b = [](const Acts::Vector3& field, const Acts::Vector3&) {
41 return Acts::Vector3(field(2), field(0), field(1));
42 };
43 b_field_ = std::make_shared<InterpolatedMagneticField3>(
44 loadDefaultBField(path, transform_pos, transform_b));
45}
46
47} // namespace tracking::reco
Class which represents the process under execution.
Definition Process.h:37
All classes in the ldmx-sw project use this namespace.