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