File indexing completed on 2025-12-17 09:21:37
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/Propagator/AtlasStepper.hpp"
0010 #include "Acts/Propagator/EigenStepper.hpp"
0011 #include "Acts/Propagator/Navigator.hpp"
0012 #include "Acts/Propagator/Propagator.hpp"
0013 #include "Acts/Propagator/StraightLineStepper.hpp"
0014 #include "Acts/Propagator/SympyStepper.hpp"
0015 #include "Acts/Utilities/Logger.hpp"
0016 #include "ActsPython/Utilities/Helpers.hpp"
0017 #include "ActsPython/Utilities/Macros.hpp"
0018
0019 #include <memory>
0020
0021 #include <pybind11/pybind11.h>
0022 #include <pybind11/stl.h>
0023
0024 namespace py = pybind11;
0025 using namespace pybind11::literals;
0026
0027 using namespace Acts;
0028
0029 namespace ActsPython {
0030
0031 template <typename stepper_t, typename navigator_t>
0032 void addPropagator(py::module_& m, const std::string& prefix) {
0033 using propagator_t = Propagator<stepper_t, navigator_t>;
0034 py::class_<propagator_t>(m, (prefix + "Propagator").c_str())
0035 .def(py::init<>([=](stepper_t stepper, navigator_t navigator,
0036 Logging::Level level = Logging::Level::INFO) {
0037 return propagator_t{
0038 std::move(stepper), std::move(navigator),
0039 getDefaultLogger(prefix + "Propagator", level)};
0040 }),
0041 py::arg("stepper"), py::arg("navigator"),
0042 py::arg("level") = Logging::INFO);
0043 }
0044
0045
0046
0047 void addPropagation(py::module_& m) {
0048 {
0049 using Config = Navigator::Config;
0050 auto nav =
0051 py::class_<Navigator, std::shared_ptr<Navigator>>(m, "Navigator")
0052 .def(py::init<>([](Config cfg,
0053 Logging::Level level = Logging::INFO) {
0054 return Navigator{cfg, getDefaultLogger("Navigator", level)};
0055 }),
0056 py::arg("cfg"), py::arg("level") = Logging::INFO);
0057
0058 auto c = py::class_<Config>(nav, "Config").def(py::init<>());
0059
0060 ACTS_PYTHON_STRUCT(c, resolveMaterial, resolvePassive, resolveSensitive,
0061 trackingGeometry);
0062 }
0063
0064 {
0065 auto stepper = py::class_<AtlasStepper>(m, "AtlasStepper");
0066 stepper.def(py::init<std::shared_ptr<const MagneticFieldProvider>>());
0067 addPropagator<AtlasStepper, Navigator>(m, "Atlas");
0068 }
0069 {
0070 auto stepper = py::class_<EigenStepper<>>(m, "EigenStepper");
0071 stepper.def(py::init<std::shared_ptr<const MagneticFieldProvider>>());
0072 addPropagator<EigenStepper<>, Navigator>(m, "Eigen");
0073 }
0074 {
0075 auto stepper = py::class_<StraightLineStepper>(m, "StraightLineStepper");
0076 stepper.def(py::init<>());
0077 addPropagator<StraightLineStepper, Navigator>(m, "StraightLine");
0078 }
0079 {
0080 auto stepper = py::class_<SympyStepper>(m, "SympyStepper");
0081 stepper.def(py::init<std::shared_ptr<const MagneticFieldProvider>>());
0082 addPropagator<SympyStepper, Navigator>(m, "Sympy");
0083 }
0084 }
0085
0086 }