File indexing completed on 2025-10-27 07:56:22
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "ActsExamples/DD4hepDetector/DD4hepDetector.hpp"
0010 #include "ActsExamples/Io/EDM4hep/EDM4hepMeasurementInputConverter.hpp"
0011 #include "ActsExamples/Io/EDM4hep/EDM4hepMeasurementOutputConverter.hpp"
0012 #include "ActsExamples/Io/EDM4hep/EDM4hepMultiTrajectoryOutputConverter.hpp"
0013 #include "ActsExamples/Io/EDM4hep/EDM4hepOutputConverter.hpp"
0014 #include "ActsExamples/Io/EDM4hep/EDM4hepParticleOutputConverter.hpp"
0015 #include "ActsExamples/Io/EDM4hep/EDM4hepSimHitOutputConverter.hpp"
0016 #include "ActsExamples/Io/EDM4hep/EDM4hepSimInputConverter.hpp"
0017 #include "ActsExamples/Io/EDM4hep/EDM4hepTrackInputConverter.hpp"
0018 #include "ActsExamples/Io/EDM4hep/EDM4hepTrackOutputConverter.hpp"
0019 #include "ActsPython/Utilities/Helpers.hpp"
0020 #include "ActsPython/Utilities/Macros.hpp"
0021
0022 #include <podio/CollectionBase.h>
0023 #include <podio/Frame.h>
0024 #include <pybind11/pybind11.h>
0025 #include <pybind11/stl.h>
0026 #include <pybind11/stl/filesystem.h>
0027
0028 namespace py = pybind11;
0029 using namespace pybind11::literals;
0030
0031 using namespace Acts;
0032 using namespace ActsPython;
0033 using namespace ActsExamples;
0034
0035 template <typename A, typename B = IAlgorithm>
0036 auto declareAlgorithm(py::module_& m, const char* name) {
0037 using Config = typename A::Config;
0038 auto alg = py::class_<A, B, std::shared_ptr<A>>(m, name)
0039 .def(py::init<const Config&, Acts::Logging::Level>(),
0040 py::arg("config"), py::arg("level"))
0041 .def_property_readonly("config", &A::config);
0042 auto c = py::class_<Config>(alg, "Config").def(py::init<>());
0043 return std::tuple{alg, c};
0044 }
0045
0046 PYBIND11_MODULE(ActsPythonBindingsEDM4hep, m) {
0047 {
0048 auto [alg, config] = declareAlgorithm<EDM4hepSimInputConverter>(
0049 m, "EDM4hepSimInputConverter");
0050 ACTS_PYTHON_STRUCT(config, inputFrame, inputParticles, inputSimHits,
0051 outputParticlesGenerator, outputParticlesSimulation,
0052 outputSimHits, outputSimVertices, dd4hepDetector,
0053 trackingGeometry, sortSimHitsInTime, particleRMin,
0054 particleRMax, particleZMin, particleZMax, particlePtMin,
0055 particlePtMax);
0056
0057 using Config = EDM4hepSimInputConverter::Config;
0058 pythonRangeProperty(config, "particleR", &Config::particleRMin,
0059 &Config::particleRMax);
0060
0061 pythonRangeProperty(config, "particleZ", &Config::particleZMin,
0062 &Config::particleZMax);
0063
0064 pythonRangeProperty(config, "pt", &Config::particlePtMin,
0065 &Config::particlePtMax);
0066 }
0067
0068 ACTS_PYTHON_DECLARE_ALGORITHM(EDM4hepTrackInputConverter, m,
0069 "EDM4hepTrackInputConverter", inputFrame,
0070 inputTracks, outputTracks, Bz);
0071
0072 py::class_<EDM4hepOutputConverter, IAlgorithm,
0073 std::shared_ptr<EDM4hepOutputConverter>>(m,
0074 "EDM4hepOutputConverter")
0075 .def_property_readonly("collections",
0076 &EDM4hepOutputConverter::collections);
0077
0078 {
0079 auto [alg, config] =
0080 declareAlgorithm<EDM4hepSimHitOutputConverter, EDM4hepOutputConverter>(
0081 m, "EDM4hepSimHitOutputConverter");
0082 ACTS_PYTHON_STRUCT(config, inputSimHits, inputParticles, outputParticles,
0083 outputSimTrackerHits);
0084 }
0085
0086 ACTS_PYTHON_DECLARE_ALGORITHM(EDM4hepMeasurementInputConverter, m,
0087 "EDM4hepMeasurementInputConverter", inputFrame,
0088 outputMeasurements, outputMeasurementSimHitsMap,
0089 outputClusters);
0090
0091 {
0092 auto [alg, config] = declareAlgorithm<EDM4hepMeasurementOutputConverter,
0093 EDM4hepOutputConverter>(
0094 m, "EDM4hepMeasurementOutputConverter");
0095 ACTS_PYTHON_STRUCT(config, inputMeasurements, inputClusters,
0096 outputTrackerHitsPlane, outputTrackerHitsRaw);
0097 }
0098
0099 {
0100 auto [alg, config] = declareAlgorithm<EDM4hepParticleOutputConverter,
0101 EDM4hepOutputConverter>(
0102 m, "EDM4hepParticleOutputConverter");
0103 ACTS_PYTHON_STRUCT(config, inputParticles, outputParticles);
0104 }
0105
0106 {
0107 auto [alg, config] = declareAlgorithm<EDM4hepMultiTrajectoryOutputConverter,
0108 EDM4hepOutputConverter>(
0109 m, "EDM4hepMultiTrajectoryOutputConverter");
0110 ACTS_PYTHON_STRUCT(config, inputTrajectories, inputMeasurementParticlesMap,
0111 outputTracks, Bz);
0112 }
0113
0114 {
0115 auto [alg, config] =
0116 declareAlgorithm<EDM4hepTrackOutputConverter, EDM4hepOutputConverter>(
0117 m, "EDM4hepTrackOutputConverter");
0118 ACTS_PYTHON_STRUCT(config, inputTracks, outputTracks, Bz);
0119 }
0120 }