Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-07-12 07:52:34

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
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   ACTS_PYTHON_DECLARE_ALGORITHM(
0047       ActsExamples::EDM4hepSimInputConverter, m, "EDM4hepSimInputConverter",
0048       inputFrame, inputParticles, inputSimHits, outputParticlesGenerator,
0049       outputParticlesSimulation, outputSimHits, outputSimVertices,
0050       graphvizOutput, dd4hepDetector, trackingGeometry, sortSimHitsInTime);
0051 
0052   ACTS_PYTHON_DECLARE_ALGORITHM(ActsExamples::EDM4hepTrackInputConverter, m,
0053                                 "EDM4hepTrackInputConverter", inputFrame,
0054                                 inputTracks, outputTracks, Bz);
0055 
0056   py::class_<EDM4hepOutputConverter, IAlgorithm,
0057              std::shared_ptr<EDM4hepOutputConverter>>(m,
0058                                                       "EDM4hepOutputConverter")
0059       .def_property_readonly("collections",
0060                              &EDM4hepOutputConverter::collections);
0061 
0062   {
0063     auto [alg, config] =
0064         declareAlgorithm<EDM4hepSimHitOutputConverter, EDM4hepOutputConverter>(
0065             m, "EDM4hepSimHitOutputConverter");
0066     ACTS_PYTHON_STRUCT(config, inputSimHits, inputParticles, outputParticles,
0067                        outputSimTrackerHits);
0068   }
0069 
0070   ACTS_PYTHON_DECLARE_ALGORITHM(ActsExamples::EDM4hepMeasurementInputConverter,
0071                                 m, "EDM4hepMeasurementInputConverter",
0072                                 inputFrame, outputMeasurements,
0073                                 outputMeasurementSimHitsMap, outputClusters);
0074 
0075   {
0076     auto [alg, config] = declareAlgorithm<EDM4hepMeasurementOutputConverter,
0077                                           EDM4hepOutputConverter>(
0078         m, "EDM4hepMeasurementOutputConverter");
0079     ACTS_PYTHON_STRUCT(config, inputMeasurements, inputClusters,
0080                        outputTrackerHitsPlane, outputTrackerHitsRaw);
0081   }
0082 
0083   {
0084     auto [alg, config] = declareAlgorithm<EDM4hepParticleOutputConverter,
0085                                           EDM4hepOutputConverter>(
0086         m, "EDM4hepParticleOutputConverter");
0087     ACTS_PYTHON_STRUCT(config, inputParticles, outputParticles);
0088   }
0089 
0090   {
0091     auto [alg, config] = declareAlgorithm<EDM4hepMultiTrajectoryOutputConverter,
0092                                           EDM4hepOutputConverter>(
0093         m, "EDM4hepMultiTrajectoryOutputConverter");
0094     ACTS_PYTHON_STRUCT(config, inputTrajectories, inputMeasurementParticlesMap,
0095                        outputTracks, Bz);
0096   }
0097 
0098   {
0099     auto [alg, config] =
0100         declareAlgorithm<EDM4hepTrackOutputConverter, EDM4hepOutputConverter>(
0101             m, "EDM4hepTrackOutputConverter");
0102     ACTS_PYTHON_STRUCT(config, inputTracks, outputTracks, Bz);
0103   }
0104 }