File indexing completed on 2025-08-05 08:10:04
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/Definitions/Algebra.hpp"
0010 #include "Acts/Digitization/PlanarModuleStepper.hpp"
0011 #include "Acts/Geometry/GeometryHierarchyMap.hpp"
0012 #include "Acts/Plugins/Python/Utilities.hpp"
0013 #include "Acts/Utilities/Logger.hpp"
0014 #include "ActsExamples/Digitization/DigitizationAlgorithm.hpp"
0015 #include "ActsExamples/Digitization/DigitizationConfig.hpp"
0016 #include "ActsExamples/Digitization/DigitizationConfigurator.hpp"
0017 #include "ActsExamples/Digitization/PlanarSteppingAlgorithm.hpp"
0018 #include "ActsExamples/Framework/AlgorithmContext.hpp"
0019 #include "ActsExamples/Io/Json/JsonDigitizationConfig.hpp"
0020
0021 #include <array>
0022 #include <memory>
0023 #include <tuple>
0024 #include <utility>
0025 #include <vector>
0026
0027 #include <pybind11/pybind11.h>
0028 #include <pybind11/stl.h>
0029
0030 namespace Acts {
0031 class GeometryIdentifier;
0032 }
0033 namespace ActsExamples {
0034 class IAlgorithm;
0035 }
0036
0037 namespace py = pybind11;
0038
0039 using namespace ActsExamples;
0040 using namespace Acts;
0041
0042 namespace Acts::Python {
0043
0044 void addDigitization(Context& ctx) {
0045 auto [m, mex] = ctx.get("main", "examples");
0046
0047 mex.def("readDigiConfigFromJson", ActsExamples::readDigiConfigFromJson);
0048 mex.def("writeDigiConfigToJson", ActsExamples::writeDigiConfigToJson);
0049
0050 {
0051 using Config = ActsExamples::DigitizationConfig;
0052
0053 py::class_<ActsExamples::DigitizationAlgorithm, ActsExamples::IAlgorithm,
0054 std::shared_ptr<ActsExamples::DigitizationAlgorithm>>(
0055 mex, "DigitizationAlgorithm")
0056 .def(py::init<Config&, Acts::Logging::Level>(), py::arg("config"),
0057 py::arg("level"))
0058 .def_property_readonly("config",
0059 &ActsExamples::DigitizationAlgorithm::config);
0060
0061 auto c = py::class_<Config>(mex, "DigitizationConfig")
0062 .def(py::init<Acts::GeometryHierarchyMap<
0063 ActsExamples::DigiComponentsConfig>>());
0064
0065 ACTS_PYTHON_STRUCT_BEGIN(c, Config);
0066 ACTS_PYTHON_MEMBER(inputSimHits);
0067 ACTS_PYTHON_MEMBER(outputSourceLinks);
0068 ACTS_PYTHON_MEMBER(outputMeasurements);
0069 ACTS_PYTHON_MEMBER(outputClusters);
0070 ACTS_PYTHON_MEMBER(outputMeasurementParticlesMap);
0071 ACTS_PYTHON_MEMBER(outputMeasurementSimHitsMap);
0072 ACTS_PYTHON_MEMBER(trackingGeometry);
0073 ACTS_PYTHON_MEMBER(randomNumbers);
0074 ACTS_PYTHON_MEMBER(doMerge);
0075 ACTS_PYTHON_MEMBER(minEnergyDeposit);
0076 ACTS_PYTHON_MEMBER(digitizationConfigs);
0077 ACTS_PYTHON_STRUCT_END();
0078
0079 c.def_readonly("mergeNsigma", &Config::mergeNsigma);
0080 c.def_readonly("mergeCommonCorner", &Config::mergeCommonCorner);
0081
0082 patchKwargsConstructor(c);
0083
0084 py::class_<DigiComponentsConfig>(mex, "DigiComponentsConfig");
0085
0086 py::class_<Acts::GeometryHierarchyMap<ActsExamples::DigiComponentsConfig>>(
0087 mex, "GeometryHierarchyMap_DigiComponentsConfig")
0088 .def(py::init<std::vector<
0089 std::pair<GeometryIdentifier, DigiComponentsConfig>>>());
0090 }
0091
0092 {
0093 using Alg = ActsExamples::PlanarSteppingAlgorithm;
0094
0095 auto alg = py::class_<Alg, ActsExamples::IAlgorithm, std::shared_ptr<Alg>>(
0096 mex, "PlanarSteppingAlgorithm")
0097 .def(py::init<const Alg::Config&, Acts::Logging::Level>(),
0098 py::arg("config"), py::arg("level"))
0099 .def_property_readonly("config", &Alg::config);
0100
0101 auto c = py::class_<Alg::Config>(alg, "Config").def(py::init<>());
0102
0103 ACTS_PYTHON_STRUCT_BEGIN(c, Alg::Config);
0104 ACTS_PYTHON_MEMBER(inputSimHits);
0105 ACTS_PYTHON_MEMBER(outputClusters);
0106 ACTS_PYTHON_MEMBER(outputSourceLinks);
0107 ACTS_PYTHON_MEMBER(outputDigiSourceLinks);
0108 ACTS_PYTHON_MEMBER(outputMeasurements);
0109 ACTS_PYTHON_MEMBER(outputMeasurementParticlesMap);
0110 ACTS_PYTHON_MEMBER(outputMeasurementSimHitsMap);
0111 ACTS_PYTHON_MEMBER(trackingGeometry);
0112 ACTS_PYTHON_MEMBER(planarModuleStepper);
0113 ACTS_PYTHON_MEMBER(randomNumbers);
0114 ACTS_PYTHON_STRUCT_END();
0115 }
0116
0117 {
0118 py::class_<PlanarModuleStepper, std::shared_ptr<PlanarModuleStepper>>(
0119 m, "PlanarModuleStepper")
0120 .def(py::init<>())
0121 .def(py::init([](Logging::Level level) {
0122 return std::make_shared<PlanarModuleStepper>(
0123 getDefaultLogger("PlanarModuleStepper", level));
0124 }));
0125 }
0126
0127 {
0128 using DC = DigitizationConfigurator;
0129 auto dc = py::class_<DC>(mex, "DigitizationConfigurator").def(py::init<>());
0130
0131 dc.def("__call__", &DC::operator());
0132
0133 ACTS_PYTHON_STRUCT_BEGIN(dc, DC);
0134 ACTS_PYTHON_MEMBER(inputDigiComponents);
0135 ACTS_PYTHON_MEMBER(compactify);
0136 ACTS_PYTHON_MEMBER(volumeLayerComponents);
0137 ACTS_PYTHON_MEMBER(outputDigiComponents);
0138 ACTS_PYTHON_STRUCT_END();
0139 }
0140 }
0141
0142 }