gsystem
Loading...
Searching...
No Matches
gsystem.h
Go to the documentation of this file.
1#pragma once
2
3// gsystem
4#include "gvolume.h"
5#include "gmaterial.h"
6#include "gmirror.h"
7
8// c++
9#include <map>
10#include <optional>
11#include <string>
12
33class GSystem : public GBase<GSystem>
34{
35public:
49 GSystem(const std::shared_ptr<GOptions>& gopts,
50 const std::string& dbhost,
51 const std::string& sname,
52 const std::string& factory,
53 const std::string& experiment,
54 int runno,
55 const std::string& variation,
56 std::optional<std::string> annotations = std::nullopt
57 );
58
67 GSystem(const GSystem& other);
68
69 // move operations: defaulted
70 GSystem(GSystem&&) noexcept = default;
71 GSystem& operator=(GSystem&&) noexcept = default;
72
73 // **disable copying**
74 GSystem& operator=(const GSystem&) = delete;
75
81 [[nodiscard]] std::unique_ptr<GSystem> clone() const {
82 return std::make_unique<GSystem>(*this);
83 }
84
95 [[nodiscard]] std::shared_ptr<GSystem> descriptorClone(const std::shared_ptr<GOptions>& gopts) const;
96
97private:
98 std::string dbhost;
99 std::string name;
100 std::string path;
101 std::string factoryName;
102 std::string experiment;
103 int runno{};
104 std::string variation;
105 std::optional<std::string> annotations;
106
115 std::map<std::string, std::shared_ptr<GVolume>> gvolumesMap;
116 std::map<std::string, std::shared_ptr<GMaterial>> gmaterialsMap;
117 std::map<std::string, std::shared_ptr<GMirror>> gmirrorsMap;
119
120public:
123 [[nodiscard]] inline std::string getName() const { return name; }
124 [[nodiscard]] inline std::string getFactoryName() const { return factoryName; }
125 [[nodiscard]] inline std::string getVariation() const { return variation; }
126 [[nodiscard]] inline std::string getExperiment() const { return experiment; }
127 [[nodiscard]] inline const std::optional<std::string>& getAnnotations() const { return annotations; }
128 [[nodiscard]] inline int getRunno() const { return runno; }
129 [[nodiscard]] inline std::string get_dbhost() const { return dbhost; }
131
140 std::string getFilePath() const;
141
149 inline void set_dbhost(const std::string& dbh) { this->dbhost = dbh; }
150
159 void addROOTVolume(const std::string& rootVolumeDefinition);
160
173 void addGVolume(std::vector<std::string> pars);
174
190 void addVolumeFromFile(const std::string& importType, const std::string& filename);
191
201 [[nodiscard]] GVolume* getGVolume(const std::string& volumeName) const;
202
208 [[nodiscard]] inline const std::map<std::string, std::shared_ptr<GVolume>>& getGVolumesMap() const {
209 return gvolumesMap;
210 }
211
217 [[nodiscard]] inline const std::map<std::string, std::shared_ptr<GMaterial>>& getGMaterialMap() const {
218 return gmaterialsMap;
219 }
220
230 void addGMaterial(std::vector<std::string> pars);
231
241 void addGMirror(std::vector<std::string> pars);
242
249 [[nodiscard]] const GMirror* getGMirror(const std::string& mirrorName) const;
250
256 [[nodiscard]] inline const std::map<std::string, std::shared_ptr<GMirror>>& getGMirrorsMap() const {
257 return gmirrorsMap;
258 }
259
273 [[nodiscard]] const GMaterial* getMaterialForGVolume(const std::string& volumeName) const;
274};
275
276// using shared pointers as GSystem could be created from the main
277// thread (in dbselect) then dispatched to g4 threads
278using SystemPtr = std::shared_ptr<GSystem>;
279using SystemMap = std::map<std::string, SystemPtr>;
280using SystemList = std::vector<SystemPtr>;
GBase(const std::shared_ptr< GOptions > &gopt, std::string logger_name="")
Material definition belonging to a detector system.
Definition gmaterial.h:28
Optical boundary (surface) definition belonging to a detector system.
Definition gmirror.h:28
std::string getFilePath() const
Gets the full file path of the system.
Definition gsystem.cc:236
const GMaterial * getMaterialForGVolume(const std::string &volumeName) const
Retrieve the material associated with a given volume.
Definition gsystem.cc:219
int getRunno() const
Definition gsystem.h:128
const std::map< std::string, std::shared_ptr< GVolume > > & getGVolumesMap() const
Access all volumes in this system.
Definition gsystem.h:208
const std::map< std::string, std::shared_ptr< GMaterial > > & getGMaterialMap() const
Access all materials in this system.
Definition gsystem.h:217
std::string getExperiment() const
Definition gsystem.h:126
void addROOTVolume(const std::string &rootVolumeDefinition)
Adds the special ROOT/world volume to the system.
Definition gsystem.cc:112
void set_dbhost(const std::string &dbh)
Sets the database host.
Definition gsystem.h:149
std::string getVariation() const
Definition gsystem.h:125
void addGMaterial(std::vector< std::string > pars)
Build and add a material from a serialized parameter list.
Definition gsystem.cc:176
std::string getFactoryName() const
Definition gsystem.h:124
GVolume * getGVolume(const std::string &volumeName) const
Retrieve a volume by name.
Definition gsystem.cc:165
std::unique_ptr< GSystem > clone() const
Clone helper.
Definition gsystem.h:81
std::shared_ptr< GSystem > descriptorClone(const std::shared_ptr< GOptions > &gopts) const
Clone only the system selection metadata.
Definition gsystem.cc:81
const GMirror * getGMirror(const std::string &mirrorName) const
Retrieve a mirror by name.
Definition gsystem.cc:210
void addGVolume(std::vector< std::string > pars)
Build and add a volume from a serialized parameter list.
Definition gsystem.cc:90
const std::map< std::string, std::shared_ptr< GMirror > > & getGMirrorsMap() const
Access all mirrors in this system.
Definition gsystem.h:256
const std::optional< std::string > & getAnnotations() const
Definition gsystem.h:127
std::string getName() const
Definition gsystem.h:123
void addGMirror(std::vector< std::string > pars)
Build and add a mirror (optical surface) from a serialized parameter list.
Definition gsystem.cc:194
GSystem(GSystem &&) noexcept=default
void addVolumeFromFile(const std::string &importType, const std::string &filename)
Add a volume imported from a file (CAD, GDML, etc.).
Definition gsystem.cc:126
std::string get_dbhost() const
Definition gsystem.h:129
GSystem(const std::shared_ptr< GOptions > &gopts, const std::string &dbhost, const std::string &sname, const std::string &factory, const std::string &experiment, int runno, const std::string &variation, std::optional< std::string > annotations=std::nullopt)
Construct a detector system descriptor.
Definition gsystem.cc:51
Geometry volume record loaded into a GSystem.
Definition gvolume.h:36
std::shared_ptr< GSystem > SystemPtr
Definition gsystem.h:278
std::vector< SystemPtr > SystemList
Definition gsystem.h:280
std::map< std::string, SystemPtr > SystemMap
Definition gsystem.h:279