43 GMaterial(
const std::string& system, std::vector<std::string> pars,
const std::shared_ptr<GLogger>& logger);
50 [[nodiscard]]
virtual std::unique_ptr<GMaterial>
clone()
const {
51 return std::make_unique<GMaterial>(*
this);
60 std::string description;
76 std::vector<std::string> components;
77 std::vector<double> amounts;
88 std::vector<double> photonEnergy;
89 std::vector<double> indexOfRefraction;
90 std::vector<double> absorptionLength;
91 std::vector<double> reflectivity;
92 std::vector<double> efficiency;
103 std::vector<double> fastcomponent;
104 std::vector<double> slowcomponent;
106 double scintillationyield{};
107 double resolutionscale{};
108 double fasttimeconstant{};
109 double slowtimeconstant{};
111 double birksConstant{};
119 std::vector<double> rayleigh;
134 void setComponentsFromString(
const std::string& composition);
148 void getMaterialPropertyFromString(
const std::string& parameter,
const std::string& propertyName);
164 bool assign_if_set(
const std::vector<std::string>& pars,
size_t& i,
double& out);
169 [[nodiscard]] std::string
getName()
const {
return name; }
172 [[nodiscard]] std::vector<std::string>
getComponents()
const {
return components; }
173 [[nodiscard]] std::vector<double>
getAmounts()
const {
return amounts; }
182 [[nodiscard]] std::vector<double>
getEfficiency()
const {
return efficiency; }
199 [[nodiscard]] std::vector<double>
getRayleigh()
const {
return rayleigh; }
211 return std::accumulate(amounts.begin(), amounts.end(), 0.0) > 1;
GMaterial(const std::string &system, std::vector< std::string > pars, const std::shared_ptr< GLogger > &logger)
Construct a material from a serialized parameter list.