Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:10:04

0001 // This file is part of the Acts project.
0002 //
0003 // Copyright (C) 2021 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 http://mozilla.org/MPL/2.0/.
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 }  // namespace Acts
0033 namespace ActsExamples {
0034 class IAlgorithm;
0035 }  // namespace ActsExamples
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 }  // namespace Acts::Python