gsystem
Loading...
Searching...
No Matches
gvolume.h
Go to the documentation of this file.
1#pragma once
2
3// namespace needed for the inline functions below
4#include <gemc/guts/gutilities.h>
5#include <gemc/gbase/gbase.h>
7
8// c++
9#include <optional>
10#include <string>
11#include <utility>
12
35class GVolume : public GBase<GVolume>
36{
37public:
60 GVolume(const std::shared_ptr<GLogger>& log,
61 const std::string& system,
62 std::vector<std::string> pars,
63 std::optional<std::string> importPath = std::nullopt);
64
75 explicit GVolume(const std::string& rootVolumeDefinition, const std::shared_ptr<GLogger>& log);
76
85 [[nodiscard]] virtual std::unique_ptr<GVolume> clone() const {
86 return std::make_unique<GVolume>(*this);
87 }
88
90 virtual ~GVolume() = default;
91
92private:
93 std::string system;
94 std::string name;
95 std::string motherName;
96 std::string description;
97 std::optional<std::string> importFilename;
98
99 // solid parameters
100 std::string type;
101 std::optional<std::string> parameters;
102
103 // solid visualization style
104 bool visible{};
105 int style{};
106 std::string color;
107 double opacity{};
108
109 // logical attributes
110 std::string material;
111 std::optional<std::string> emfield;
112
113 // physical attributes
114 std::string pos;
115 std::string rot;
116 std::string g4placementType;
117 std::optional<std::string> shift;
118 std::optional<std::string> tilt;
119 bool exist{};
120
121 std::optional<std::string> digitization;
122 std::optional<std::string> gidentity;
123
124 // special cases
125 std::optional<std::string> copyOf;
126 std::optional<std::string> solidsOpr;
127
128 int pCopyNo{};
129
130 // mirrors
131 std::optional<std::string> mirror;
132
133 // the map key names used in geant4 contain the system name
134 // these are assigned by gworld after all volumes are loaded
135 std::optional<std::string> g4name;
136 std::optional<std::string> g4motherName;
137
138 // variation and run number for this gvolume
139 std::string variation;
140 int runno{};
141
143 friend std::ostream& operator<<(std::ostream& stream, const GVolume&);
144
145public:
148 [[nodiscard]] std::string getSystem() const { return system; }
149 [[nodiscard]] std::string getName() const { return name; }
150 [[nodiscard]] std::string getMotherName() const { return motherName; }
151 [[nodiscard]] const std::string& getG4Name() const;
152 [[nodiscard]] const std::string& getG4MotherName() const;
154
175 [[nodiscard]] std::vector<double> getDetectorDimensions() const {
176 if (!parameters || type == gsystem::GSYSTEMCADTFACTORYLABEL) return {};
177 return gutilities::getG4NumbersFromString(*parameters);
178 }
179
182 [[nodiscard]] std::string getType() const { return type; }
183 [[nodiscard]] const std::optional<std::string>& getParameters() const { return parameters; }
185
188 [[nodiscard]] std::string getMaterial() const { return material; }
189 [[nodiscard]] const std::optional<std::string>& getEMField() const { return emfield; }
191
194 [[nodiscard]] int getPCopyNo() const { return pCopyNo; }
195 [[nodiscard]] std::string_view getColor() const { return color; }
196 [[nodiscard]] double getOpacity() const { return opacity; }
197 [[nodiscard]] bool isVisible() const { return visible; }
198 [[nodiscard]] int getStyle() const { return style; }
200
203 [[nodiscard]] bool getExistence() const { return exist; }
204 [[nodiscard]] std::string getPos() const { return pos; }
205 [[nodiscard]] std::string getRot() const { return rot; }
206 [[nodiscard]] std::string getG4PlacementType() const { return g4placementType; }
207 [[nodiscard]] const std::optional<std::string>& getShift() const { return shift; }
208 [[nodiscard]] const std::optional<std::string>& getTilt() const { return tilt; }
210
213 [[nodiscard]] const std::optional<std::string>& getDigitization() const { return digitization; }
214 [[nodiscard]] const std::optional<std::string>& getGIdentity() const { return gidentity; }
216
219 [[nodiscard]] const std::optional<std::string>& getCopyOf() const { return copyOf; }
220 [[nodiscard]] const std::optional<std::string>& getSolidsOpr() const { return solidsOpr; }
221 [[nodiscard]] const std::optional<std::string>& getMirror() const { return mirror; }
222 [[nodiscard]] std::string getDescription() const { return description; }
224
227
235 void applyShift(std::optional<std::string> s) { shift = std::move(s); }
236
245 void applyTilt(std::optional<std::string> t) { tilt = std::move(t); }
246
255 void modifyExistence(bool e) { exist = e; }
256
258 void resetMotherName(std::string m) { motherName = std::move(m); }
259
261 void setColor(std::string c) { color = std::move(c); }
262
264 void setMaterial(std::string m) { material = std::move(m); }
265
267 void setDigitization(std::optional<std::string> d);
268
270 void setGIdentity(std::optional<std::string> g);
272
280 [[nodiscard]] const std::optional<std::string>& getImportedFile() const { return importFilename; }
281
291 inline void assignG4Names(const std::string& g4n, const std::string& g4m) {
292 g4name = g4n;
293 g4motherName = g4m;
294 }
295};
GBase(const std::shared_ptr< GOptions > &gopt, std::string logger_name="")
std::shared_ptr< GLogger > log
const std::optional< std::string > & getTilt() const
Definition gvolume.h:208
std::string getDescription() const
Definition gvolume.h:222
void resetMotherName(std::string m)
Override the mother name (placement parent) after loading.
Definition gvolume.h:258
friend std::ostream & operator<<(std::ostream &stream, const GVolume &)
Stream operator used for logging volume summaries.
Definition gvolume.cc:120
void setGIdentity(std::optional< std::string > g)
Override the identity string after loading.
Definition gvolume.cc:188
std::string getRot() const
Definition gvolume.h:205
void setColor(std::string c)
Override the color after loading.
Definition gvolume.h:261
void setDigitization(std::optional< std::string > d)
Override the digitization label after loading.
Definition gvolume.cc:184
const std::string & getG4Name() const
Definition gvolume.cc:38
void assignG4Names(const std::string &g4n, const std::string &g4m)
Assign Geant4 names after all volumes are loaded.
Definition gvolume.h:291
void applyTilt(std::optional< std::string > t)
Apply an additional rotation to this volume.
Definition gvolume.h:245
const std::optional< std::string > & getSolidsOpr() const
Definition gvolume.h:220
void applyShift(std::optional< std::string > s)
Apply an additional translation to this volume.
Definition gvolume.h:235
const std::optional< std::string > & getParameters() const
Definition gvolume.h:183
const std::optional< std::string > & getCopyOf() const
Definition gvolume.h:219
virtual ~GVolume()=default
Virtual destructor (safe deletion through base pointers).
virtual std::unique_ptr< GVolume > clone() const
Polymorphic deep-copy.
Definition gvolume.h:85
bool getExistence() const
Definition gvolume.h:203
std::string getPos() const
Definition gvolume.h:204
int getPCopyNo() const
Definition gvolume.h:194
std::string getG4PlacementType() const
Definition gvolume.h:206
const std::optional< std::string > & getGIdentity() const
Definition gvolume.h:214
const std::optional< std::string > & getShift() const
Definition gvolume.h:207
std::string getName() const
Definition gvolume.h:149
GVolume(const std::shared_ptr< GLogger > &log, const std::string &system, std::vector< std::string > pars, std::optional< std::string > importPath=std::nullopt)
Construct a volume from a serialized parameter vector.
Definition gvolume.cc:55
void modifyExistence(bool e)
Enable or disable this volume in the final assembled world.
Definition gvolume.h:255
const std::optional< std::string > & getImportedFile() const
Return the import filename (path) for imported volumes.
Definition gvolume.h:280
const std::optional< std::string > & getEMField() const
Definition gvolume.h:189
std::string getMaterial() const
Definition gvolume.h:188
std::string getSystem() const
Definition gvolume.h:148
void setMaterial(std::string m)
Override the material name after loading.
Definition gvolume.h:264
int getStyle() const
Definition gvolume.h:198
std::vector< double > getDetectorDimensions() const
Returns the native-solid dimensions parsed from the parameters string.
Definition gvolume.h:175
const std::string & getG4MotherName() const
Definition gvolume.cc:45
bool isVisible() const
Definition gvolume.h:197
std::string getType() const
Definition gvolume.h:182
std::string_view getColor() const
Definition gvolume.h:195
const std::optional< std::string > & getMirror() const
Definition gvolume.h:221
double getOpacity() const
Definition gvolume.h:196
const std::optional< std::string > & getDigitization() const
Definition gvolume.h:213
std::string getMotherName() const
Definition gvolume.h:150
Conventions and shared constants for the detector-system module.
constexpr char GSYSTEMCADTFACTORYLABEL[]
vector< double > getG4NumbersFromString(const string &vstring, bool warnIfNotUnit=false)