Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-18 08:13:11

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/Utilities/Logger.hpp"
0010 #include "ActsExamples/Digitization/DigitizationAlgorithm.hpp"
0011 #include "ActsExamples/Digitization/DigitizationConfig.hpp"
0012 #include "ActsExamples/Digitization/DigitizationConfigurator.hpp"
0013 #include "ActsExamples/Digitization/DigitizationCoordinatesConverter.hpp"
0014 #include "ActsExamples/Digitization/MuonSpacePointDigitizer.hpp"
0015 #include "ActsExamples/Io/Json/JsonDigitizationConfig.hpp"
0016 #include "ActsPython/Utilities/Helpers.hpp"
0017 #include "ActsPython/Utilities/Macros.hpp"
0018 
0019 #include <array>
0020 #include <memory>
0021 #include <tuple>
0022 #include <utility>
0023 
0024 #include <pybind11/pybind11.h>
0025 #include <pybind11/stl.h>
0026 
0027 namespace py = pybind11;
0028 
0029 using namespace ActsExamples;
0030 using namespace Acts;
0031 
0032 namespace ActsPython {
0033 
0034 void addDigitization(Context& ctx) {
0035   auto [m, mex] = ctx.get("main", "examples");
0036 
0037   mex.def("readDigiConfigFromJson", readDigiConfigFromJson);
0038   mex.def("writeDigiConfigToJson", writeDigiConfigToJson);
0039 
0040   {
0041     using Config = DigitizationAlgorithm::Config;
0042 
0043     auto a =
0044         py::class_<DigitizationAlgorithm, IAlgorithm,
0045                    std::shared_ptr<DigitizationAlgorithm>>(
0046             mex, "DigitizationAlgorithm")
0047             .def(py::init<Config&, Logging::Level>(), py::arg("config"),
0048                  py::arg("level"))
0049             .def_property_readonly("config", &DigitizationAlgorithm::config);
0050 
0051     auto c = py::class_<Config>(a, "Config").def(py::init<>());
0052 
0053     ACTS_PYTHON_STRUCT(
0054         c, inputSimHits, outputMeasurements, outputClusters,
0055         outputMeasurementParticlesMap, outputMeasurementSimHitsMap,
0056         outputParticleMeasurementsMap, outputSimHitMeasurementsMap,
0057         surfaceByIdentifier, randomNumbers, doOutputCells, doClusterization,
0058         doMerge, minEnergyDeposit, digitizationConfigs, minMaxRetries);
0059 
0060     c.def_readonly("mergeNsigma", &Config::mergeNsigma);
0061     c.def_readonly("mergeCommonCorner", &Config::mergeCommonCorner);
0062 
0063     patchKwargsConstructor(c);
0064 
0065     auto cc = py::class_<DigiComponentsConfig>(mex, "DigiComponentsConfig")
0066                   .def(py::init<>());
0067 
0068     ACTS_PYTHON_STRUCT(cc, geometricDigiConfig, smearingDigiConfig);
0069 
0070     py::class_<DigiConfigContainer>(mex, "DigiConfigContainer")
0071         .def(py::init<std::vector<
0072                  std::pair<GeometryIdentifier, DigiComponentsConfig>>>());
0073   }
0074 
0075   ACTS_PYTHON_DECLARE_ALGORITHM(
0076       MuonSpacePointDigitizer, mex, "MuonSpacePointDigitizer", inputSimHits,
0077       inputParticles, outputSpacePoints, randomNumbers,
0078       /// @todo: Expose <calibrator> to python bindings
0079       trackingGeometry, digitizeTime, dumpVisualization, strawDeadTime
0080 
0081   );
0082 
0083   {
0084     using DC = DigitizationConfigurator;
0085     auto dc = py::class_<DC>(mex, "DigitizationConfigurator").def(py::init<>());
0086 
0087     dc.def("__call__", &DC::operator());
0088 
0089     ACTS_PYTHON_STRUCT(dc, inputDigiComponents, compactify,
0090                        volumeLayerComponents, outputDigiComponents);
0091   }
0092 
0093   {
0094     py::class_<DigitizationCoordinatesConverter,
0095                std::shared_ptr<DigitizationCoordinatesConverter>>(
0096         mex, "DigitizationCoordinatesConverter")
0097         .def(py::init<DigitizationAlgorithm::Config&>(), py::arg("config"))
0098         .def_property_readonly("config",
0099                                &DigitizationCoordinatesConverter::config)
0100         .def("globalToLocal", &DigitizationCoordinatesConverter::globalToLocal)
0101         .def("localToGlobal", &DigitizationCoordinatesConverter::localToGlobal);
0102   }
0103 }
0104 
0105 }  // namespace ActsPython