File indexing completed on 2025-12-11 09:40:23
0001
0002
0003
0004
0005
0006
0007
0008
0009 #pragma once
0010
0011 #include "Acts/Definitions/Algebra.hpp"
0012 #include "Acts/Geometry/GeometryIdentifier.hpp"
0013 #include "Acts/Geometry/TrackingVolume.hpp"
0014 #include "Acts/Material/IMaterialDecorator.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/Root/RootMaterialMapIo.hpp"
0021
0022 #include <map>
0023 #include <memory>
0024 #include <mutex>
0025 #include <string>
0026 #include <utility>
0027
0028 class TFile;
0029
0030 namespace ActsPlugins {
0031
0032
0033
0034
0035 class RootMaterialDecorator : public Acts::IMaterialDecorator {
0036 public:
0037
0038
0039 class Config {
0040 public:
0041
0042 RootMaterialMapIo::Config accessorConfig;
0043
0044 RootMaterialMapIo::Options accessorOptions;
0045
0046 std::string fileName = "material-maps.root";
0047 };
0048
0049
0050
0051
0052
0053 RootMaterialDecorator(const Config& config, Acts::Logging::Level level);
0054
0055
0056 ~RootMaterialDecorator() override;
0057
0058
0059
0060
0061 void decorate(Acts::Surface& surface) const final {
0062
0063 if (m_clearSurfaceMaterial) {
0064 surface.assignSurfaceMaterial(nullptr);
0065 }
0066
0067 auto sMaterial = m_surfaceMaterialMap.find(surface.geometryId());
0068 if (sMaterial != m_surfaceMaterialMap.end()) {
0069 surface.assignSurfaceMaterial(sMaterial->second);
0070 }
0071 }
0072
0073
0074
0075
0076 void decorate(Acts::TrackingVolume& volume) const final {
0077
0078 if (m_clearSurfaceMaterial) {
0079 volume.assignVolumeMaterial(nullptr);
0080 }
0081
0082 auto vMaterial = m_volumeMaterialMap.find(volume.geometryId());
0083 if (vMaterial != m_volumeMaterialMap.end()) {
0084 volume.assignVolumeMaterial(vMaterial->second);
0085 }
0086 }
0087
0088
0089 Acts::TrackingGeometryMaterial materialMaps() const {
0090 return {m_surfaceMaterialMap, m_volumeMaterialMap};
0091 }
0092
0093
0094 const Config& config() const { return m_cfg; }
0095
0096 private:
0097
0098 Config m_cfg;
0099
0100 std::unique_ptr<const Acts::Logger> m_logger{nullptr};
0101
0102
0103 TFile* m_inputFile{nullptr};
0104
0105
0106 Acts::SurfaceMaterialMaps m_surfaceMaterialMap;
0107
0108
0109 Acts::VolumeMaterialMaps m_volumeMaterialMap;
0110
0111 bool m_clearSurfaceMaterial{true};
0112
0113
0114 const Acts::Logger& logger() const { return *m_logger; }
0115 };
0116
0117 }