gsystem
Loading...
Searching...
No Matches
gmaterial.h
Go to the documentation of this file.
1#pragma once
2
3// gemc
4#include <gemc/gbase/gbase.h>
5
6// c++
7#include <string>
8#include <vector>
9#include <numeric>
10
28class GMaterial : public GBase<GMaterial> {
29public:
41 GMaterial(const std::string &system, std::vector<std::string> pars, const std::shared_ptr<GLogger> &logger);
42
48 [[nodiscard]] virtual std::unique_ptr<GMaterial> clone() const {
49 return std::make_unique<GMaterial>(*this);
50 }
51
53 virtual ~GMaterial() = default;
54
55private:
56 std::string system;
57 std::string name;
58 std::string description;
59
73 double density{};
74 std::vector<std::string> components;
75 std::vector<double> amounts;
77
86 std::vector<double> photonEnergy;
87 std::vector<double> indexOfRefraction;
88 std::vector<double> absorptionLength;
89 std::vector<double> reflectivity;
90 std::vector<double> efficiency;
92
101 std::vector<double> fastcomponent;
102 std::vector<double> slowcomponent;
103
104 double scintillationyield{};
105 double resolutionscale{};
106 double fasttimeconstant{};
107 double slowtimeconstant{};
108 double yieldratio{};
109 double birksConstant{};
110
111 bool scintillationyieldSet{};
112 bool resolutionscaleSet{};
113 bool fasttimeconstantSet{};
114 bool slowtimeconstantSet{};
115 bool yieldratioSet{};
116 bool birksConstantSet{};
118
124 std::vector<double> rayleigh;
125 std::vector<double> mie;
126 double mieforward{}, miebackward{}, mieratio{};
127 bool mieforwardSet{}, miebackwardSet{}, mieratioSet{};
129
142 void setComponentsFromString(const std::string &composition);
143
156 void getMaterialPropertyFromString(const std::string &parameter, const std::string &propertyName);
157
159 friend std::ostream &operator<<(std::ostream &stream, const GMaterial &);
160
172 bool assign_if_set(const std::vector<std::string> &pars, size_t &i, double &out);
173
174public:
177 [[nodiscard]] std::string getName() const { return name; }
178 [[nodiscard]] std::string getDescription() const { return description; }
179 [[nodiscard]] double getDensity() const { return density; }
180 [[nodiscard]] std::vector<std::string> getComponents() const { return components; }
181 [[nodiscard]] std::vector<double> getAmounts() const { return amounts; }
183
186 [[nodiscard]] std::vector<double> getPhotonEnergy() const { return photonEnergy; }
187 [[nodiscard]] std::vector<double> getIndexOfRefraction() const { return indexOfRefraction; }
188 [[nodiscard]] std::vector<double> getAbsorptionLength() const { return absorptionLength; }
189 [[nodiscard]] std::vector<double> getReflectivity() const { return reflectivity; }
190 [[nodiscard]] std::vector<double> getEfficiency() const { return efficiency; }
192
195 [[nodiscard]] std::vector<double> getFastComponent() const { return fastcomponent; }
196 [[nodiscard]] std::vector<double> getSlowComponent() const { return slowcomponent; }
197 [[nodiscard]] double getScintillationYield() const { return scintillationyield; }
198 [[nodiscard]] double getResolutionScale() const { return resolutionscale; }
199 [[nodiscard]] double getFasttimeConstant() const { return fasttimeconstant; }
200 [[nodiscard]] double getSlowtimeConstant() const { return slowtimeconstant; }
201 [[nodiscard]] double getYieldratio() const { return yieldratio; }
202 [[nodiscard]] double getBirksConstant() const { return birksConstant; }
203 [[nodiscard]] bool hasScintillationYield() const { return scintillationyieldSet; }
204 [[nodiscard]] bool hasResolutionScale() const { return resolutionscaleSet; }
205 [[nodiscard]] bool hasFasttimeConstant() const { return fasttimeconstantSet; }
206 [[nodiscard]] bool hasSlowtimeConstant() const { return slowtimeconstantSet; }
207 [[nodiscard]] bool hasYieldratio() const { return yieldratioSet; }
208 [[nodiscard]] bool hasBirksConstant() const { return birksConstantSet; }
210
213 [[nodiscard]] std::vector<double> getRayleigh() const { return rayleigh; }
214 [[nodiscard]] std::vector<double> getMie() const { return mie; }
215 [[nodiscard]] double getMieForward() const { return mieforward; }
216 [[nodiscard]] double getMieBackward() const { return miebackward; }
217 [[nodiscard]] double getMieRatio() const { return mieratio; }
218 [[nodiscard]] bool hasMieForward() const { return mieforwardSet; }
219 [[nodiscard]] bool hasMieBackward() const { return miebackwardSet; }
220 [[nodiscard]] bool hasMieRatio() const { return mieratioSet; }
222
231 [[nodiscard]] bool isChemicalFormula() const {
232 return std::accumulate(amounts.begin(), amounts.end(), 0.0) > 1;
233 }
234};
GBase(const std::shared_ptr< GOptions > &gopt, std::string logger_name="")
double getBirksConstant() const
Definition gmaterial.h:202
std::string getDescription() const
Definition gmaterial.h:178
bool hasMieRatio() const
Definition gmaterial.h:220
bool hasYieldratio() const
Definition gmaterial.h:207
bool hasSlowtimeConstant() const
Definition gmaterial.h:206
std::string getName() const
Definition gmaterial.h:177
double getYieldratio() const
Definition gmaterial.h:201
double getMieForward() const
Definition gmaterial.h:215
bool isChemicalFormula() const
Heuristic: return true if the composition looks like a chemical formula.
Definition gmaterial.h:231
std::vector< double > getMie() const
Definition gmaterial.h:214
GMaterial(const std::string &system, std::vector< std::string > pars, const std::shared_ptr< GLogger > &logger)
Construct a material from a serialized parameter list.
Definition gmaterial.cc:21
std::vector< double > getFastComponent() const
Definition gmaterial.h:195
double getFasttimeConstant() const
Definition gmaterial.h:199
virtual std::unique_ptr< GMaterial > clone() const
Clone the material (polymorphic deep-copy).
Definition gmaterial.h:48
bool hasMieBackward() const
Definition gmaterial.h:219
bool hasBirksConstant() const
Definition gmaterial.h:208
virtual ~GMaterial()=default
Virtual destructor (safe deletion through base pointers).
double getMieBackward() const
Definition gmaterial.h:216
std::vector< double > getPhotonEnergy() const
Definition gmaterial.h:186
bool hasMieForward() const
Definition gmaterial.h:218
std::vector< double > getIndexOfRefraction() const
Definition gmaterial.h:187
std::vector< double > getSlowComponent() const
Definition gmaterial.h:196
double getResolutionScale() const
Definition gmaterial.h:198
std::vector< double > getReflectivity() const
Definition gmaterial.h:189
std::vector< double > getAbsorptionLength() const
Definition gmaterial.h:188
double getSlowtimeConstant() const
Definition gmaterial.h:200
friend std::ostream & operator<<(std::ostream &stream, const GMaterial &)
Stream operator used for logging material summaries.
Definition gmaterial.cc:74
std::vector< double > getRayleigh() const
Definition gmaterial.h:213
double getScintillationYield() const
Definition gmaterial.h:197
double getDensity() const
Definition gmaterial.h:179
std::vector< std::string > getComponents() const
Definition gmaterial.h:180
std::vector< double > getAmounts() const
Definition gmaterial.h:181
double getMieRatio() const
Definition gmaterial.h:217
bool hasResolutionScale() const
Definition gmaterial.h:204
bool hasScintillationYield() const
Definition gmaterial.h:203
std::vector< double > getEfficiency() const
Definition gmaterial.h:190
bool hasFasttimeConstant() const
Definition gmaterial.h:205