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;
126
139 void setComponentsFromString(const std::string &composition);
140
153 void getMaterialPropertyFromString(const std::string &parameter, const std::string &propertyName);
154
156 friend std::ostream &operator<<(std::ostream &stream, const GMaterial &);
157
169 bool assign_if_set(const std::vector<std::string> &pars, size_t &i, double &out);
170
171public:
174 [[nodiscard]] std::string getName() const { return name; }
175 [[nodiscard]] std::string getDescription() const { return description; }
176 [[nodiscard]] double getDensity() const { return density; }
177 [[nodiscard]] std::vector<std::string> getComponents() const { return components; }
178 [[nodiscard]] std::vector<double> getAmounts() const { return amounts; }
180
183 [[nodiscard]] std::vector<double> getPhotonEnergy() const { return photonEnergy; }
184 [[nodiscard]] std::vector<double> getIndexOfRefraction() const { return indexOfRefraction; }
185 [[nodiscard]] std::vector<double> getAbsorptionLength() const { return absorptionLength; }
186 [[nodiscard]] std::vector<double> getReflectivity() const { return reflectivity; }
187 [[nodiscard]] std::vector<double> getEfficiency() const { return efficiency; }
189
192 [[nodiscard]] std::vector<double> getFastComponent() const { return fastcomponent; }
193 [[nodiscard]] std::vector<double> getSlowComponent() const { return slowcomponent; }
194 [[nodiscard]] double getScintillationYield() const { return scintillationyield; }
195 [[nodiscard]] double getResolutionScale() const { return resolutionscale; }
196 [[nodiscard]] double getFasttimeConstant() const { return fasttimeconstant; }
197 [[nodiscard]] double getSlowtimeConstant() const { return slowtimeconstant; }
198 [[nodiscard]] double getYieldratio() const { return yieldratio; }
199 [[nodiscard]] double getBirksConstant() const { return birksConstant; }
200 [[nodiscard]] bool hasScintillationYield() const { return scintillationyieldSet; }
201 [[nodiscard]] bool hasResolutionScale() const { return resolutionscaleSet; }
202 [[nodiscard]] bool hasFasttimeConstant() const { return fasttimeconstantSet; }
203 [[nodiscard]] bool hasSlowtimeConstant() const { return slowtimeconstantSet; }
204 [[nodiscard]] bool hasYieldratio() const { return yieldratioSet; }
205 [[nodiscard]] bool hasBirksConstant() const { return birksConstantSet; }
207
210 [[nodiscard]] std::vector<double> getRayleigh() const { return rayleigh; }
212
221 [[nodiscard]] bool isChemicalFormula() const {
222 return std::accumulate(amounts.begin(), amounts.end(), 0.0) > 1;
223 }
224};
GBase(const std::shared_ptr< GOptions > &gopt, std::string logger_name="")
double getBirksConstant() const
Definition gmaterial.h:199
std::string getDescription() const
Definition gmaterial.h:175
bool hasYieldratio() const
Definition gmaterial.h:204
bool hasSlowtimeConstant() const
Definition gmaterial.h:203
std::string getName() const
Definition gmaterial.h:174
double getYieldratio() const
Definition gmaterial.h:198
bool isChemicalFormula() const
Heuristic: return true if the composition looks like a chemical formula.
Definition gmaterial.h:221
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:192
double getFasttimeConstant() const
Definition gmaterial.h:196
virtual std::unique_ptr< GMaterial > clone() const
Clone the material (polymorphic deep-copy).
Definition gmaterial.h:48
bool hasBirksConstant() const
Definition gmaterial.h:205
virtual ~GMaterial()=default
Virtual destructor (safe deletion through base pointers).
std::vector< double > getPhotonEnergy() const
Definition gmaterial.h:183
std::vector< double > getIndexOfRefraction() const
Definition gmaterial.h:184
std::vector< double > getSlowComponent() const
Definition gmaterial.h:193
double getResolutionScale() const
Definition gmaterial.h:195
std::vector< double > getReflectivity() const
Definition gmaterial.h:186
std::vector< double > getAbsorptionLength() const
Definition gmaterial.h:185
double getSlowtimeConstant() const
Definition gmaterial.h:197
friend std::ostream & operator<<(std::ostream &stream, const GMaterial &)
Stream operator used for logging material summaries.
Definition gmaterial.cc:66
std::vector< double > getRayleigh() const
Definition gmaterial.h:210
double getScintillationYield() const
Definition gmaterial.h:194
double getDensity() const
Definition gmaterial.h:176
std::vector< std::string > getComponents() const
Definition gmaterial.h:177
std::vector< double > getAmounts() const
Definition gmaterial.h:178
bool hasResolutionScale() const
Definition gmaterial.h:201
bool hasScintillationYield() const
Definition gmaterial.h:200
std::vector< double > getEfficiency() const
Definition gmaterial.h:187
bool hasFasttimeConstant() const
Definition gmaterial.h:202