File indexing completed on 2025-10-29 08:51:37
0001
0002
0003
0004
0005
0006
0007 #pragma once
0008
0009 #include <string>
0010 #include <vector>
0011
0012 #include "corecel/Types.hh"
0013 #include "corecel/cont/LabelIdMultiMap.hh"
0014 #include "corecel/data/CollectionMirror.hh"
0015 #include "corecel/data/ParamsDataInterface.hh"
0016 #include "corecel/io/Label.hh"
0017 #include "geocel/BoundingBox.hh"
0018 #include "geocel/GeoParamsInterface.hh"
0019
0020 #include "OrangeData.hh"
0021 #include "OrangeTypes.hh"
0022
0023 class G4VPhysicalVolume;
0024
0025 namespace celeritas
0026 {
0027 struct OrangeInput;
0028
0029
0030
0031
0032
0033
0034
0035
0036 class OrangeParams final : public GeoParamsSurfaceInterface,
0037 public ParamsDataInterface<OrangeParamsData>
0038 {
0039 public:
0040
0041
0042 using SurfaceMap = LabelIdMultiMap<SurfaceId>;
0043 using UniverseMap = LabelIdMultiMap<UniverseId>;
0044
0045
0046 public:
0047
0048 explicit OrangeParams(std::string const& filename);
0049
0050
0051 explicit OrangeParams(G4VPhysicalVolume const*);
0052
0053
0054 explicit OrangeParams(OrangeInput&& input);
0055
0056
0057 ~OrangeParams() final;
0058
0059
0060 CELER_DELETE_COPY_MOVE(OrangeParams);
0061
0062
0063 bool supports_safety() const final { return supports_safety_; }
0064
0065
0066 BBox const& bbox() const final { return bbox_; }
0067
0068
0069 inline size_type max_depth() const final;
0070
0071
0072
0073
0074 inline SurfaceMap const& surfaces() const final;
0075
0076
0077 inline UniverseMap const& universes() const;
0078
0079
0080 inline VolumeMap const& volumes() const final;
0081
0082
0083 inline VolInstanceMap const& volume_instances() const final;
0084
0085
0086 inline VolumeId find_volume(G4LogicalVolume const* volume) const final;
0087
0088
0089 inline GeantPhysicalInstance
0090 id_to_geant(VolumeInstanceId vol_id) const final;
0091
0092
0093
0094
0095 HostRef const& host_ref() const final { return data_.host_ref(); }
0096
0097
0098 DeviceRef const& device_ref() const final { return data_.device_ref(); }
0099
0100 private:
0101
0102 SurfaceMap surf_labels_;
0103 UniverseMap univ_labels_;
0104 VolumeMap vol_labels_;
0105 VolInstanceMap vol_instances_;
0106 BBox bbox_;
0107 bool supports_safety_{};
0108
0109
0110 CollectionMirror<OrangeParamsData> data_;
0111 };
0112
0113
0114
0115 extern template class CollectionMirror<OrangeParamsData>;
0116 extern template class ParamsDataInterface<OrangeParamsData>;
0117
0118
0119
0120
0121
0122
0123
0124 size_type OrangeParams::max_depth() const
0125 {
0126 return this->host_ref().scalars.max_depth;
0127 }
0128
0129
0130
0131
0132
0133 auto OrangeParams::surfaces() const -> SurfaceMap const&
0134 {
0135 return surf_labels_;
0136 }
0137
0138
0139
0140
0141
0142 auto OrangeParams::universes() const -> UniverseMap const&
0143 {
0144 return univ_labels_;
0145 }
0146
0147
0148
0149
0150
0151 auto OrangeParams::volumes() const -> VolumeMap const&
0152 {
0153 return vol_labels_;
0154 }
0155
0156
0157
0158
0159
0160 auto OrangeParams::volume_instances() const -> VolInstanceMap const&
0161 {
0162 return vol_instances_;
0163 }
0164
0165
0166
0167
0168
0169
0170
0171 VolumeId OrangeParams::find_volume(G4LogicalVolume const*) const
0172 {
0173 return VolumeId{};
0174 }
0175
0176
0177
0178
0179
0180
0181
0182 GeantPhysicalInstance OrangeParams::id_to_geant(VolumeInstanceId) const
0183 {
0184 return {};
0185 }
0186
0187
0188 }