File indexing completed on 2025-07-09 07:50:32
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/Plugins/Covfie/FieldConversion.hpp"
0010 #include "Acts/Plugins/Python/Utilities.hpp"
0011
0012 #include <string>
0013
0014 #include <pybind11/pybind11.h>
0015 #include <pybind11/stl.h>
0016
0017 namespace py = pybind11;
0018 using namespace pybind11::literals;
0019
0020 namespace Acts::Python {
0021
0022 namespace {
0023 template <typename field_t, typename scalar_type>
0024 void declareCovfieField(py::module& m, const std::string& fieldName) {
0025 using view_t = typename field_t::view_t;
0026 m.def("toView",
0027 [](const field_t& field) { return typename field_t::view_t(field); });
0028 py::class_<field_t, std::shared_ptr<field_t>>(m, fieldName.c_str());
0029 py::class_<view_t, std::shared_ptr<view_t>>(
0030 m, (fieldName + std::string("View")).c_str())
0031 .def("at", &view_t::template at<scalar_type, scalar_type, scalar_type>);
0032 }
0033 }
0034
0035 void addCovfie(Context& ctx) {
0036 auto main = ctx.get("main");
0037 auto m = main.def_submodule("covfie", "Submodule for covfie conversion");
0038
0039 py::class_<covfie::array::array<float, 3ul>,
0040 std::shared_ptr<covfie::array::array<float, 3ul>>>(m,
0041 "ArrayFloat3")
0042 .def("at", [](const covfie::array::array<float, 3ul>& self,
0043 std::size_t i) { return self[i]; });
0044
0045 declareCovfieField<Acts::CovfiePlugin::ConstantField, float>(
0046 m, "CovfieConstantField");
0047 declareCovfieField<Acts::CovfiePlugin::InterpolatedField, float>(
0048 m, "CovfieAffineLinearStridedField");
0049
0050 m.def("makeCovfieField",
0051 py::overload_cast<const Acts::InterpolatedMagneticField&>(
0052 &Acts::CovfiePlugin::covfieField));
0053 m.def("makeCovfieField", py::overload_cast<const Acts::ConstantBField&>(
0054 &Acts::CovfiePlugin::covfieField));
0055 m.def("makeCovfieField",
0056 py::overload_cast<const Acts::MagneticFieldProvider&,
0057 Acts::MagneticFieldProvider::Cache&,
0058 const std::array<std::size_t, 3>&,
0059 const Acts::Vector3&, const Acts::Vector3&>(
0060 &Acts::CovfiePlugin::covfieField));
0061 }
0062
0063 }