File indexing completed on 2025-08-05 08:10:18
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "Acts/Plugins/Json/DetectorVolumeFinderJsonConverter.hpp"
0010
0011 #include "Acts/Navigation/DetectorVolumeFinders.hpp"
0012 #include "Acts/Navigation/DetectorVolumeUpdaters.hpp"
0013 #include "Acts/Plugins/Json/GridJsonConverter.hpp"
0014 #include "Acts/Plugins/Json/UtilitiesJsonConverter.hpp"
0015 #include "Acts/Utilities/GridAxisGenerators.hpp"
0016
0017 #include <array>
0018 #include <memory>
0019 #include <tuple>
0020 #include <vector>
0021
0022 namespace {
0023
0024 struct IndexedVolumesGenerator {
0025 using value_type = std::size_t;
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 template <typename grid_type>
0037 Acts::Experimental::DetectorVolumeUpdater createUpdater(
0038 grid_type&& grid,
0039 const std::array<Acts::BinningValue, grid_type::DIM>& bv,
0040 const Acts::Transform3& transform) {
0041 using IndexedDetectorVolumesImpl = Acts::Experimental::IndexedUpdaterImpl<
0042 grid_type, Acts::Experimental::IndexedDetectorVolumeExtractor,
0043 Acts::Experimental::DetectorVolumeFiller>;
0044
0045 auto indexedDetectorVolumeImpl =
0046 std::make_unique<const IndexedDetectorVolumesImpl>(std::move(grid), bv,
0047 transform);
0048
0049
0050 Acts::Experimental::DetectorVolumeUpdater vFinder;
0051 vFinder.connect<&IndexedDetectorVolumesImpl::update>(
0052 std::move(indexedDetectorVolumeImpl));
0053 return vFinder;
0054 }
0055 };
0056
0057 }
0058
0059 Acts::Experimental::SurfaceCandidatesUpdater
0060 Acts::DetectorVolumeFinderJsonConverter::fromJson(
0061 const nlohmann::json& jVolumeFinder) {
0062
0063 auto vFinder = IndexedGridJsonHelper::generateFromJson<
0064 Experimental::DetectorVolumeUpdater, IndexedVolumesGenerator>(
0065 jVolumeFinder, "IndexedVolumes");
0066 if (vFinder.connected()) {
0067 return vFinder;
0068 }
0069
0070 return Experimental::tryRootVolumes();
0071 }