File indexing completed on 2025-12-11 09:40:22
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Geometry/GeometryContext.hpp"
0012 #include "Acts/Geometry/GeometryIdentifier.hpp"
0013 #include "Acts/Geometry/TrackingGeometry.hpp"
0014 #include "Acts/Geometry/TrackingVolume.hpp"
0015 #include "Acts/Material/ISurfaceMaterial.hpp"
0016 #include "Acts/Material/IVolumeMaterial.hpp"
0017 #include "Acts/Material/TrackingGeometryMaterial.hpp"
0018 #include "Acts/Surfaces/Surface.hpp"
0019 #include "Acts/Utilities/Logger.hpp"
0020 #include "ActsPlugins/Json/ActsJson.hpp"
0021 #include "ActsPlugins/Json/GeometryHierarchyMapJsonConverter.hpp"
0022 #include "ActsPlugins/Json/ITrackingGeometryJsonDecorator.hpp"
0023 #include "ActsPlugins/Json/IVolumeMaterialJsonDecorator.hpp"
0024
0025 #include <map>
0026 #include <memory>
0027 #include <string>
0028 #include <tuple>
0029 #include <utility>
0030 #include <vector>
0031
0032 #include <nlohmann/json.hpp>
0033
0034 namespace Acts {
0035 class ISurfaceMaterial;
0036 class ITrackingGeometryJsonDecorator;
0037 class IVolumeMaterial;
0038 class IVolumeMaterialJsonDecorator;
0039 class Surface;
0040 class TrackingGeometry;
0041 class TrackingVolume;
0042
0043
0044
0045 using SurfaceAndMaterialWithContext =
0046 std::tuple<std::shared_ptr<const Acts::Surface>,
0047 std::shared_ptr<const Acts::ISurfaceMaterial>,
0048 Acts::GeometryContext>;
0049
0050
0051 using TrackingVolumeAndMaterial =
0052 std::pair<const Acts::TrackingVolume*,
0053 std::shared_ptr<const Acts::IVolumeMaterial>>;
0054
0055
0056
0057
0058 class MaterialMapJsonConverter {
0059 public:
0060 using SurfaceMaterialMap
0061 [[deprecated("Use Acts::SurfaceMaterialMaps directly")]] =
0062 SurfaceMaterialMaps;
0063 using VolumeMaterialMap
0064 [[deprecated("Use Acts::VolumeMaterialMaps directly")]] =
0065 VolumeMaterialMaps;
0066 using DetectorMaterialMaps
0067 [[deprecated("Use Acts::TrackingGeometryMaterial directly")]] =
0068 TrackingGeometryMaterial;
0069
0070
0071
0072 class Config {
0073 public:
0074
0075 GeometryContext context = GeometryContext();
0076
0077
0078 bool processSensitives = true;
0079
0080 bool processApproaches = true;
0081
0082 bool processRepresenting = true;
0083
0084 bool processBoundaries = true;
0085
0086 bool processVolumes = true;
0087
0088 bool processDenseVolumes = false;
0089
0090 bool processNonMaterial = false;
0091 };
0092
0093
0094
0095
0096
0097 MaterialMapJsonConverter(const Config& config, Acts::Logging::Level level);
0098
0099
0100 ~MaterialMapJsonConverter() = default;
0101
0102
0103
0104
0105
0106 TrackingGeometryMaterial jsonToMaterialMaps(
0107 const nlohmann::json& materialmaps);
0108
0109
0110
0111
0112
0113
0114 nlohmann::json materialMapsToJson(
0115 const TrackingGeometryMaterial& maps,
0116 const IVolumeMaterialJsonDecorator* decorator = nullptr);
0117
0118
0119
0120
0121
0122
0123
0124 nlohmann::json trackingGeometryToJson(
0125 const TrackingGeometry& tGeometry,
0126 const ITrackingGeometryJsonDecorator* decorator = nullptr);
0127
0128
0129
0130
0131
0132
0133
0134
0135 void convertToHierarchy(
0136 std::vector<std::pair<GeometryIdentifier,
0137 Acts::TrackingVolumeAndMaterial>>& volumeHierarchy,
0138 std::vector<
0139 std::pair<GeometryIdentifier, Acts::SurfaceAndMaterialWithContext>>&
0140 surfaceHierarchy,
0141 const Acts::TrackingVolume* tVolume);
0142
0143 private:
0144
0145 Config m_cfg;
0146
0147
0148 std::unique_ptr<const Logger> m_logger{nullptr};
0149
0150
0151 std::string m_volumeName = "Material Volume Map";
0152
0153 Acts::GeometryHierarchyMapJsonConverter<const IVolumeMaterial*,
0154 Acts::IVolumeMaterialJsonDecorator>
0155 m_volumeMaterialConverter;
0156
0157 Acts::GeometryHierarchyMapJsonConverter<Acts::TrackingVolumeAndMaterial,
0158 Acts::ITrackingGeometryJsonDecorator>
0159 m_volumeConverter;
0160
0161
0162 std::string m_surfaceName = "Material Surface Map";
0163
0164 Acts::GeometryHierarchyMapJsonConverter<const ISurfaceMaterial*,
0165 Acts::IVolumeMaterialJsonDecorator>
0166 m_surfaceMaterialConverter;
0167
0168 Acts::GeometryHierarchyMapJsonConverter<Acts::SurfaceAndMaterialWithContext,
0169 Acts::ITrackingGeometryJsonDecorator>
0170 m_surfaceConverter;
0171
0172
0173 const Logger& logger() const { return *m_logger; }
0174 };
0175
0176 }