gsystem
Loading...
Searching...
No Matches
gmaterial.h
Go to the documentation of this file.
1#pragma once
2
3// gemc
4#include "gbase.h"
5
6// c++
7#include <string>
8#include <vector>
9#include <numeric>
10
28class GMaterial : public GBase<GMaterial> {
29public:
42 GMaterial(const std::string &system, std::vector<std::string> pars, const std::shared_ptr<GLogger> &logger);
43
49 [[nodiscard]] virtual std::unique_ptr<GMaterial> clone() const {
50 return std::make_unique<GMaterial>(*this);
51 }
52
54 virtual ~GMaterial() = default;
55
56private:
57 std::string system;
58 std::string name;
59 std::string description;
60
74 double density{};
75 std::vector<std::string> components;
76 std::vector<double> amounts;
78
87 std::vector<double> photonEnergy;
88 std::vector<double> indexOfRefraction;
89 std::vector<double> absorptionLength;
90 std::vector<double> reflectivity;
91 std::vector<double> efficiency;
93
102 std::vector<double> fastcomponent;
103 std::vector<double> slowcomponent;
104
105 double scintillationyield{};
106 double resolutionscale{};
107 double fasttimeconstant{};
108 double slowtimeconstant{};
109 double yieldratio{};
110 double birksConstant{};
111
112 bool scintillationyieldSet{};
113 bool resolutionscaleSet{};
114 bool fasttimeconstantSet{};
115 bool slowtimeconstantSet{};
116 bool yieldratioSet{};
117 bool birksConstantSet{};
119
125 std::vector<double> rayleigh;
127
140 void setComponentsFromString(const std::string &composition);
141
154 void getMaterialPropertyFromString(const std::string &parameter, const std::string &propertyName);
155
157 friend std::ostream &operator<<(std::ostream &stream, const GMaterial &);
158
170 bool assign_if_set(const std::vector<std::string> &pars, size_t &i, double &out);
171
172public:
175 [[nodiscard]] std::string getName() const { return name; }
176 [[nodiscard]] std::string getDescription() const { return description; }
177 [[nodiscard]] double getDensity() const { return density; }
178 [[nodiscard]] std::vector<std::string> getComponents() const { return components; }
179 [[nodiscard]] std::vector<double> getAmounts() const { return amounts; }
181
184 [[nodiscard]] std::vector<double> getPhotonEnergy() const { return photonEnergy; }
185 [[nodiscard]] std::vector<double> getIndexOfRefraction() const { return indexOfRefraction; }
186 [[nodiscard]] std::vector<double> getAbsorptionLength() const { return absorptionLength; }
187 [[nodiscard]] std::vector<double> getReflectivity() const { return reflectivity; }
188 [[nodiscard]] std::vector<double> getEfficiency() const { return efficiency; }
190
193 [[nodiscard]] std::vector<double> getFastComponent() const { return fastcomponent; }
194 [[nodiscard]] std::vector<double> getSlowComponent() const { return slowcomponent; }
195 [[nodiscard]] double getScintillationYield() const { return scintillationyield; }
196 [[nodiscard]] double getResolutionScale() const { return resolutionscale; }
197 [[nodiscard]] double getFasttimeConstant() const { return fasttimeconstant; }
198 [[nodiscard]] double getSlowtimeConstant() const { return slowtimeconstant; }
199 [[nodiscard]] double getYieldratio() const { return yieldratio; }
200 [[nodiscard]] double getBirksConstant() const { return birksConstant; }
201 [[nodiscard]] bool hasScintillationYield() const { return scintillationyieldSet; }
202 [[nodiscard]] bool hasResolutionScale() const { return resolutionscaleSet; }
203 [[nodiscard]] bool hasFasttimeConstant() const { return fasttimeconstantSet; }
204 [[nodiscard]] bool hasSlowtimeConstant() const { return slowtimeconstantSet; }
205 [[nodiscard]] bool hasYieldratio() const { return yieldratioSet; }
206 [[nodiscard]] bool hasBirksConstant() const { return birksConstantSet; }
208
211 [[nodiscard]] std::vector<double> getRayleigh() const { return rayleigh; }
213
222 [[nodiscard]] bool isChemicalFormula() const {
223 return std::accumulate(amounts.begin(), amounts.end(), 0.0) > 1;
224 }
225};
Material definition belonging to a detector system.
Definition gmaterial.h:28
double getBirksConstant() const
Definition gmaterial.h:200
std::string getDescription() const
Definition gmaterial.h:176
bool hasYieldratio() const
Definition gmaterial.h:205
bool hasSlowtimeConstant() const
Definition gmaterial.h:204
std::string getName() const
Definition gmaterial.h:175
double getYieldratio() const
Definition gmaterial.h:199
bool isChemicalFormula() const
Heuristic: return true if the composition looks like a chemical formula.
Definition gmaterial.h:222
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:193
double getFasttimeConstant() const
Definition gmaterial.h:197
virtual std::unique_ptr< GMaterial > clone() const
Clone the material (polymorphic deep-copy).
Definition gmaterial.h:49
friend std::ostream & operator<<(std::ostream &stream, const GMaterial &)
Stream operator used for logging material summaries.
Definition gmaterial.cc:66
bool hasBirksConstant() const
Definition gmaterial.h:206
virtual ~GMaterial()=default
Virtual destructor (safe deletion through base pointers).
std::vector< double > getPhotonEnergy() const
Definition gmaterial.h:184
std::vector< double > getIndexOfRefraction() const
Definition gmaterial.h:185
std::vector< double > getSlowComponent() const
Definition gmaterial.h:194
double getResolutionScale() const
Definition gmaterial.h:196
std::vector< double > getReflectivity() const
Definition gmaterial.h:187
std::vector< double > getAbsorptionLength() const
Definition gmaterial.h:186
double getSlowtimeConstant() const
Definition gmaterial.h:198
std::vector< double > getRayleigh() const
Definition gmaterial.h:211
double getScintillationYield() const
Definition gmaterial.h:195
double getDensity() const
Definition gmaterial.h:177
std::vector< std::string > getComponents() const
Definition gmaterial.h:178
std::vector< double > getAmounts() const
Definition gmaterial.h:179
bool hasResolutionScale() const
Definition gmaterial.h:202
bool hasScintillationYield() const
Definition gmaterial.h:201
std::vector< double > getEfficiency() const
Definition gmaterial.h:188
bool hasFasttimeConstant() const
Definition gmaterial.h:203