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>
29{
30public:
43 GMaterial(const std::string& system, std::vector<std::string> pars, const std::shared_ptr<GLogger>& logger);
44
50 [[nodiscard]] virtual std::unique_ptr<GMaterial> clone() const {
51 return std::make_unique<GMaterial>(*this);
52 }
53
55 virtual ~GMaterial() = default;
56
57private:
58 std::string system;
59 std::string name;
60 std::string description;
61
75 double density{};
76 std::vector<std::string> components;
77 std::vector<double> amounts;
79
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;
94
103 std::vector<double> fastcomponent;
104 std::vector<double> slowcomponent;
105
106 double scintillationyield{};
107 double resolutionscale{};
108 double fasttimeconstant{};
109 double slowtimeconstant{};
110 double yieldratio{};
111 double birksConstant{};
113
119 std::vector<double> rayleigh;
121
134 void setComponentsFromString(const std::string& composition);
135
148 void getMaterialPropertyFromString(const std::string& parameter, const std::string& propertyName);
149
151 friend std::ostream& operator<<(std::ostream& stream, const GMaterial&);
152
164 bool assign_if_set(const std::vector<std::string>& pars, size_t& i, double& out);
165
166public:
169 [[nodiscard]] std::string getName() const { return name; }
170 [[nodiscard]] std::string getDescription() const { return description; }
171 [[nodiscard]] double getDensity() const { return density; }
172 [[nodiscard]] std::vector<std::string> getComponents() const { return components; }
173 [[nodiscard]] std::vector<double> getAmounts() const { return amounts; }
175
178 [[nodiscard]] std::vector<double> getPhotonEnergy() const { return photonEnergy; }
179 [[nodiscard]] std::vector<double> getIndexOfRefraction() const { return indexOfRefraction; }
180 [[nodiscard]] std::vector<double> getAbsorptionLength() const { return absorptionLength; }
181 [[nodiscard]] std::vector<double> getReflectivity() const { return reflectivity; }
182 [[nodiscard]] std::vector<double> getEfficiency() const { return efficiency; }
184
187 [[nodiscard]] std::vector<double> getFastcomponent() const { return fastcomponent; }
188 [[nodiscard]] std::vector<double> getSlowcomponent() const { return slowcomponent; }
189 [[nodiscard]] double getScintillationyield() const { return scintillationyield; }
190 [[nodiscard]] double getResolutionscale() const { return resolutionscale; }
191 [[nodiscard]] double getFasttimeconstant() const { return fasttimeconstant; }
192 [[nodiscard]] double getSlowtimeconstant() const { return slowtimeconstant; }
193 [[nodiscard]] double getYieldratio() const { return yieldratio; }
194 [[nodiscard]] double getBirksConstant() const { return birksConstant; }
196
199 [[nodiscard]] std::vector<double> getRayleigh() const { return rayleigh; }
201
210 [[nodiscard]] bool isChemicalFormula() const {
211 return std::accumulate(amounts.begin(), amounts.end(), 0.0) > 1;
212 }
213};
Material definition belonging to a detector system.
Definition gmaterial.h:29
double getBirksConstant() const
Definition gmaterial.h:194
double getSlowtimeconstant() const
Definition gmaterial.h:192
std::string getDescription() const
Definition gmaterial.h:170
std::string getName() const
Definition gmaterial.h:169
double getYieldratio() const
Definition gmaterial.h:193
bool isChemicalFormula() const
Heuristic: return true if the composition looks like a chemical formula.
Definition gmaterial.h:210
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
double getFasttimeconstant() const
Definition gmaterial.h:191
virtual std::unique_ptr< GMaterial > clone() const
Clone the material (polymorphic deep-copy).
Definition gmaterial.h:50
friend std::ostream & operator<<(std::ostream &stream, const GMaterial &)
Stream operator used for logging material summaries.
Definition gmaterial.cc:66
virtual ~GMaterial()=default
Virtual destructor (safe deletion through base pointers).
std::vector< double > getSlowcomponent() const
Definition gmaterial.h:188
std::vector< double > getPhotonEnergy() const
Definition gmaterial.h:178
std::vector< double > getIndexOfRefraction() const
Definition gmaterial.h:179
std::vector< double > getReflectivity() const
Definition gmaterial.h:181
std::vector< double > getAbsorptionLength() const
Definition gmaterial.h:180
std::vector< double > getRayleigh() const
Definition gmaterial.h:199
double getResolutionscale() const
Definition gmaterial.h:190
double getDensity() const
Definition gmaterial.h:171
std::vector< std::string > getComponents() const
Definition gmaterial.h:172
std::vector< double > getAmounts() const
Definition gmaterial.h:173
std::vector< double > getFastcomponent() const
Definition gmaterial.h:187
std::vector< double > getEfficiency() const
Definition gmaterial.h:182
double getScintillationyield() const
Definition gmaterial.h:189