File indexing completed on 2025-07-05 08:12:06
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/Plugins/Python/Utilities.hpp"
0010 #include "Acts/Utilities/Logger.hpp"
0011 #include "ActsExamples/Digitization/DigitizationAlgorithm.hpp"
0012 #include "ActsExamples/Digitization/DigitizationConfig.hpp"
0013 #include "ActsExamples/Digitization/DigitizationConfigurator.hpp"
0014 #include "ActsExamples/Digitization/DigitizationCoordinatesConverter.hpp"
0015 #include "ActsExamples/Io/Json/JsonDigitizationConfig.hpp"
0016
0017 #include <array>
0018 #include <memory>
0019 #include <tuple>
0020 #include <utility>
0021
0022 #include <pybind11/pybind11.h>
0023 #include <pybind11/stl.h>
0024
0025 namespace py = pybind11;
0026
0027 using namespace ActsExamples;
0028 using namespace Acts;
0029
0030 namespace Acts::Python {
0031
0032 void addDigitization(Context& ctx) {
0033 auto [m, mex] = ctx.get("main", "examples");
0034
0035 mex.def("readDigiConfigFromJson", ActsExamples::readDigiConfigFromJson);
0036 mex.def("writeDigiConfigToJson", ActsExamples::writeDigiConfigToJson);
0037
0038 {
0039 using Config = ActsExamples::DigitizationAlgorithm::Config;
0040
0041 auto a = py::class_<ActsExamples::DigitizationAlgorithm,
0042 ActsExamples::IAlgorithm,
0043 std::shared_ptr<ActsExamples::DigitizationAlgorithm>>(
0044 mex, "DigitizationAlgorithm")
0045 .def(py::init<Config&, Acts::Logging::Level>(),
0046 py::arg("config"), py::arg("level"))
0047 .def_property_readonly(
0048 "config", &ActsExamples::DigitizationAlgorithm::config);
0049
0050 auto c = py::class_<Config>(a, "Config").def(py::init<>());
0051
0052 ACTS_PYTHON_STRUCT(
0053 c, inputSimHits, outputMeasurements, outputClusters,
0054 outputMeasurementParticlesMap, outputMeasurementSimHitsMap,
0055 outputParticleMeasurementsMap, outputSimHitMeasurementsMap,
0056 surfaceByIdentifier, randomNumbers, doOutputCells, doClusterization,
0057 doMerge, minEnergyDeposit, digitizationConfigs, minMaxRetries);
0058
0059 c.def_readonly("mergeNsigma", &Config::mergeNsigma);
0060 c.def_readonly("mergeCommonCorner", &Config::mergeCommonCorner);
0061
0062 patchKwargsConstructor(c);
0063
0064 auto cc = py::class_<DigiComponentsConfig>(mex, "DigiComponentsConfig")
0065 .def(py::init<>());
0066
0067 ACTS_PYTHON_STRUCT(cc, geometricDigiConfig, smearingDigiConfig);
0068
0069 py::class_<DigiConfigContainer>(mex, "DigiConfigContainer")
0070 .def(py::init<std::vector<
0071 std::pair<GeometryIdentifier, DigiComponentsConfig>>>());
0072 }
0073
0074 {
0075 using DC = DigitizationConfigurator;
0076 auto dc = py::class_<DC>(mex, "DigitizationConfigurator").def(py::init<>());
0077
0078 dc.def("__call__", &DC::operator());
0079
0080 ACTS_PYTHON_STRUCT(dc, inputDigiComponents, compactify,
0081 volumeLayerComponents, outputDigiComponents);
0082 }
0083
0084 {
0085 py::class_<ActsExamples::DigitizationCoordinatesConverter,
0086 std::shared_ptr<ActsExamples::DigitizationCoordinatesConverter>>(
0087 mex, "DigitizationCoordinatesConverter")
0088 .def(py::init<ActsExamples::DigitizationAlgorithm::Config&>(),
0089 py::arg("config"))
0090 .def_property_readonly(
0091 "config", &ActsExamples::DigitizationCoordinatesConverter::config)
0092 .def("globalToLocal",
0093 &ActsExamples::DigitizationCoordinatesConverter::globalToLocal)
0094 .def("localToGlobal",
0095 &ActsExamples::DigitizationCoordinatesConverter::localToGlobal);
0096 }
0097 }
0098
0099 }