GGEMS  1.1
GPU GEant4-based Monte Carlo Simulations
GGEMSMaterialsDatabaseManager.cc
Go to the documentation of this file.
1 // ************************************************************************
2 // * This file is part of GGEMS. *
3 // * *
4 // * GGEMS is free software: you can redistribute it and/or modify *
5 // * it under the terms of the GNU General Public License as published by *
6 // * the Free Software Foundation, either version 3 of the License, or *
7 // * (at your option) any later version. *
8 // * *
9 // * GGEMS is distributed in the hope that it will be useful, *
10 // * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 // * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 // * GNU General Public License for more details. *
13 // * *
14 // * You should have received a copy of the GNU General Public License *
15 // * along with GGEMS. If not, see <https://www.gnu.org/licenses/>. *
16 // * *
17 // ************************************************************************
18 
32 
35 
39 
41 {
42  GGcout("GGEMSMaterialsDatabaseManager", "GGEMSMaterialsDatabaseManager", 3) << "GGEMSMaterialsDatabaseManager creating..." << GGendl;
43 
44  // Loading GGEMS chemical elements
46 
47  GGcout("GGEMSMaterialsDatabaseManager", "GGEMSMaterialsDatabaseManager", 3) << "GGEMSMaterialsDatabaseManager created!!!" << GGendl;
48 }
49 
53 
55 {
56  GGcout("GGEMSMaterialsDatabaseManager", "~GGEMSMaterialsDatabaseManager", 3) << "GGEMSMaterialsDatabaseManager erasing..." << GGendl;
57 
58  GGcout("GGEMSMaterialsDatabaseManager", "~GGEMSMaterialsDatabaseManager", 3) << "GGEMSMaterialsDatabaseManager erased!!!" << GGendl;
59 }
60 
64 
66 {
67  GGcout("GGEMSMaterialsDatabaseManager", "Clean", 3) << "GGEMSMaterialsDatabaseManager cleaning..." << GGendl;
68 
69  GGcout("GGEMSMaterialsDatabaseManager", "Clean", 3) << "GGEMSMaterialsDatabaseManager cleaned!!!" << GGendl;
70 }
71 
75 
76 void GGEMSMaterialsDatabaseManager::SetMaterialsDatabase(std::string const& filename)
77 {
78  // Converting char* to string
79  std::string filename_str(filename);
80 
81  // Loading materials and elements in database
82  if (!materials_.empty()) {
83  GGwarn("GGEMSMaterialsDatabaseManager", "SetMaterialsDatabase", 0) << "Material database if already loaded!!!" << GGendl;
84  }
85  else {
86  // Materials
87  LoadMaterialsDatabase(filename_str);
88  }
89 }
90 
94 
96 {
97  GGcout("GGEMSMaterialsDatabaseManager", "LoadMaterialsDatabase", 1) << "Loading materials database in GGEMS..." << GGendl;
98 
99  // Opening the input file containing materials
100  std::ifstream database_stream(filename, std::ios::in);
101  GGEMSFileStream::CheckInputStream(database_stream, filename);
102 
103  // Reading database file
104  std::string line("");
105  while (std::getline(database_stream, line)) {
106  // Skip comment
107  GGEMSTextReader::SkipComment(database_stream, line);
108  // Check if blank line
109  if (GGEMSTextReader::IsBlankLine(line)) continue;
110 
111  // Remove space/tab from line
113 
114  // Creating a material and filling infos
115  GGEMSSingleMaterial material;
116  std::string material_name = GGEMSMaterialReader::ReadMaterialName(line);
117  material.density_ = GGEMSMaterialReader::ReadMaterialDensity(line);
118  material.nb_elements_ = GGEMSMaterialReader::ReadMaterialNumberOfElements(line);
119 
120  // Loop over number of elements
121  for (GGushort i = 0; i < material.nb_elements_; ++i) {
122  // Get next line element by element
123  std::getline(database_stream, line);
124  // Remove space/tab from line
126 
127  // Get infos and store them
128  material.chemical_element_name_.push_back(GGEMSMaterialReader::ReadMaterialElementName(line));
129  material.mixture_f_.push_back(GGEMSMaterialReader::ReadMaterialElementFraction(line));
130  }
131 
132  // Storing the material
133  GGcout("GGEMSMaterialsDatabaseManager", "LoadMaterialsDatabase", 3) << "Adding material: " << material_name << "..." << GGendl;
134  materials_.insert(std::make_pair(material_name, material));
135  }
136 
137  // Closing file stream
138  database_stream.close();
139 }
140 
144 
146 {
147  GGcout("GGEMSMaterialsDatabaseManager", "LoadChemicalElements", 1) << "Loading chemical elements in GGEMS..." << GGendl;
148 
149  // Name, Z (atomic number), M (molar mass g/mol), I (mean excitation energy eV), state, index for density correction
150  AddChemicalElements("Hydrogen", 1, 1.00794258759021f, 19.2f, GAS, 1);
151  AddChemicalElements("Helium", 2, 4.00256163944925f, 41.8f, GAS, 2);
152  AddChemicalElements("Lithium", 3, 6.94107031304227f, 40.0f, SOLID, 3);
153  AddChemicalElements("Beryllium", 4, 9.01225666906993f, 63.7f, SOLID, 4);
154  AddChemicalElements("Boron", 5, 10.81197967347820f, 76.0f, SOLID, 5);
155  AddChemicalElements("Carbon", 6, 12.01105016615290f, 81.0f, SOLID, 6);
156  AddChemicalElements("Nitrogen", 7, 14.00672322714900f, 82.0f, GAS, 7);
157  AddChemicalElements("Oxygen", 8, 15.99936002559900f, 95.0f, GAS, 8);
158  AddChemicalElements("Fluorine", 9, 18.99856455290040f, 115.0f, GAS, 9);
159  AddChemicalElements("Neon", 10, 20.17959842599130f, 137.0f, GAS, 10);
160  AddChemicalElements("Sodium", 11, 22.98994712312160f, 149.0f, SOLID, 11);
161  AddChemicalElements("Magnesium", 12, 24.30478196585180f, 156.0f, SOLID, 12);
162  AddChemicalElements("Aluminium", 13, 26.98159025341940f, 166.0f, SOLID, 13);
163  AddChemicalElements("Silicon", 14, 28.08537955384370f, 173.0f, SOLID, 14);
164  AddChemicalElements("Phosphor", 15, 30.97381680019820f, 173.0f, SOLID, 15);
165  AddChemicalElements("Sulfur", 16, 32.06605607551560f, 180.0f, SOLID, 16);
166  AddChemicalElements("Chlorine", 17, 35.45285812600360f, 174.0f, GAS, 17);
167  AddChemicalElements("Argon", 18, 39.94762422601480f, 188.0f, GAS, 18);
168  AddChemicalElements("Potassium", 19, 39.09867270295300f, 190.0f, SOLID, 19);
169  AddChemicalElements("Calcium", 20, 40.07775083662300f, 191.0f, SOLID, 20);
170  AddChemicalElements("Scandium", 21, 44.95632813837990f, 216.0f, SOLID, 21);
171  AddChemicalElements("Titanium", 22, 47.88021241403330f, 233.0f, SOLID, 22);
172  AddChemicalElements("Vandium", 23, 50.94130675526020f, 245.0f, SOLID, 23);
173  AddChemicalElements("Chromium", 24, 51.99644690946120f, 257.0f, SOLID, 24);
174  AddChemicalElements("Manganese", 25, 54.93781039862880f, 272.0f, SOLID, 25);
175  AddChemicalElements("Iron", 26, 55.84672222699540f, 286.0f, SOLID, 26);
176  AddChemicalElements("Cobalt", 27, 58.93266397468080f, 297.0f, SOLID, 27);
177  AddChemicalElements("Nickel", 28, 58.69036639557310f, 311.0f, SOLID, 28);
178  AddChemicalElements("Copper", 29, 63.54632307827150f, 322.0f, SOLID, 29);
179  AddChemicalElements("Zinc", 30, 65.38939384031910f, 330.0f, SOLID, 30);
180  AddChemicalElements("Gallium", 31, 69.72245962844680f, 334.0f, SOLID, 31);
181  AddChemicalElements("Germanium", 32, 72.61010641918720f, 350.0f, SOLID, 32);
182  AddChemicalElements("Arsenic", 33, 74.92167279662170f, 347.0f, SOLID, 33);
183  AddChemicalElements("Selenium", 34, 78.95959126799810f, 348.0f, SOLID, 34);
184  AddChemicalElements("Bromine", 35, 79.90320297696500f, 343.0f, GAS, 35);
185  AddChemicalElements("Krypton", 36, 83.80083335273170f, 352.0f, GAS, 36);
186  AddChemicalElements("Rubidium", 37, 85.46811115474350f, 363.0f, SOLID, 37);
187  AddChemicalElements("Strontium", 38, 87.62018953630470f, 366.0f, SOLID, 38);
188  AddChemicalElements("Yttrium", 39, 88.90509950532290f, 379.0f, SOLID, 39);
189  AddChemicalElements("Zirconium", 40, 91.22422915526360f, 393.0f, SOLID, 40);
190  AddChemicalElements("Niobium", 41, 92.90731928393380f, 417.0f, SOLID, 41);
191  AddChemicalElements("Molybdenum", 42, 95.94079082623290f, 424.0f, SOLID, 42);
192  AddChemicalElements("Technetium", 43, 97.90751155536330f, 428.0f, SOLID, 43);
193  AddChemicalElements("Ruthenium", 44, 101.07042771167400f, 441.0f, SOLID, 44);
194  AddChemicalElements("Rhodium", 45, 102.90653799538100f, 449.0f, SOLID, 45);
195  AddChemicalElements("Palladium", 46, 106.41989589358000f, 470.0f, SOLID, 46);
196  AddChemicalElements("Silver", 47, 107.86743780409400f, 470.0f, SOLID, 47);
197  AddChemicalElements("Cadmium", 48, 112.41217798594800f, 469.0f, SOLID, 48);
198  AddChemicalElements("Indium", 49, 114.81863342393900f, 488.0f, SOLID, 49);
199  AddChemicalElements("Tin", 50, 118.70845204178500f, 488.0f, SOLID, 50);
200  AddChemicalElements("Antimony", 51, 121.75034018477400f, 487.0f, SOLID, 51);
201  AddChemicalElements("Tellurium", 52, 127.60109933254800f, 485.0f, SOLID, 52);
202  AddChemicalElements("Iodine", 53, 126.90355329949200f, 491.0f, SOLID, 53);
203  AddChemicalElements("Xenon", 54, 131.29102844638900f, 482.0f, GAS, 54);
204  AddChemicalElements("Caesium", 55, 132.90481598724100f, 488.0f, SOLID, 55);
205  AddChemicalElements("Barium", 56, 137.32558424679400f, 491.0f, SOLID, 56);
206  AddChemicalElements("Lanthanum", 57, 138.90581211161200f, 501.0f, SOLID, 57);
207  AddChemicalElements("Cerium", 58, 140.11354028264300f, 523.0f, SOLID, 58);
208  AddChemicalElements("Praseodymium", 59, 140.90898235055300f, 535.0f, SOLID, 59);
209  AddChemicalElements("Neodymium", 60, 144.24117123831000f, 546.0f, SOLID, 60);
210  AddChemicalElements("Promethium", 61, 144.91376443198600f, 560.0f, SOLID, 61);
211  AddChemicalElements("Samarium", 62, 150.36135228209700f, 574.0f, SOLID, 62);
212  AddChemicalElements("Europium", 63, 151.96468630146900f, 580.0f, SOLID, 63);
213  AddChemicalElements("Gadolinium", 64, 157.25202093417500f, 591.0f, SOLID, 64);
214  AddChemicalElements("Terbium", 65, 158.92420537897300f, 614.0f, SOLID, 65);
215  AddChemicalElements("Dysprosium", 66, 162.50153884033000f, 628.0f, SOLID, 66);
216  AddChemicalElements("Holmium", 67, 164.93119661275600f, 650.0f, SOLID, 67);
217  AddChemicalElements("Erbium", 68, 167.26109949575700f, 658.0f, SOLID, 68);
218  AddChemicalElements("Thulium", 69, 168.93546175692900f, 674.0f, SOLID, 69);
219  AddChemicalElements("Ytterbium", 70, 173.04031839418600f, 684.0f, SOLID, 70);
220  AddChemicalElements("Lutetium", 71, 174.96734764286900f, 694.0f, SOLID, 71);
221  AddChemicalElements("Hafnium", 72, 178.49174475680500f, 705.0f, SOLID, 72);
222  AddChemicalElements("Tantalum", 73, 180.94836774657300f, 718.0f, SOLID, 73);
223  AddChemicalElements("Tungsten", 74, 183.85093167701900f, 727.0f, SOLID, 74);
224  AddChemicalElements("Rhenium", 75, 186.20586920899700f, 736.0f, SOLID, 75);
225  AddChemicalElements("Osmium", 76, 190.19970969518000f, 746.0f, SOLID, 76);
226  AddChemicalElements("Iridium", 77, 192.22127914523900f, 757.0f, SOLID, 77);
227  AddChemicalElements("Platinum", 78, 195.07803121248500f, 790.0f, SOLID, 78);
228  AddChemicalElements("Gold", 79, 196.96818589807500f, 790.0f, SOLID, 79);
229  AddChemicalElements("Mercury", 80, 200.59174564966600f, 800.0f, SOLID, 80);
230  AddChemicalElements("Thallium", 81, 204.38545583003200f, 810.0f, SOLID, 81);
231  AddChemicalElements("Lead", 82, 207.20151610865400f, 823.0f, SOLID, 82);
232  AddChemicalElements("Bismuth", 83, 208.97852305058300f, 823.0f, SOLID, 83);
233  AddChemicalElements("Polonium", 84, 208.98121656922500f, 830.0f, SOLID, 84);
234  AddChemicalElements("Astatine", 85, 209.98542454112000f, 825.0f, SOLID, -1);
235  AddChemicalElements("Radon", 86, 222.01569599339100f, 794.0f, GAS, 85);
236  AddChemicalElements("Francium", 87, 223.01973852858200f, 827.0f, SOLID, -1);
237  AddChemicalElements("Radium", 88, 226.02352699440100f, 826.0f, SOLID, 86);
238  AddChemicalElements("Actinium", 89, 227.02923320238800f, 841.0f, SOLID, 87);
239  AddChemicalElements("Thorium", 90, 232.03650707711300f, 847.0f, SOLID, 88);
240  AddChemicalElements("Protactinium", 91, 231.03483294404400f, 878.0f, SOLID, 89);
241  AddChemicalElements("Uranium", 92, 238.02747665002200f, 890.0f, SOLID, 90);
242  AddChemicalElements("Neptunium", 93, 237.00000000000000f, 902.0f, SOLID, 91);
243  AddChemicalElements("Plutonium", 94, 244.00000000000000f, 921.0f, SOLID, 92);
244  AddChemicalElements("Americium", 95, 243.00000000000000f, 934.0f, SOLID, 93);
245  AddChemicalElements("Curium", 96, 247.00000000000000f, 939.0f, SOLID, 94);
246  AddChemicalElements("Berkelium", 97, 247.00000000000000f, 952.0f, SOLID, 95);
247  AddChemicalElements("Californium", 98, 251.00000000000000f, 966.0f, SOLID, -1);
248  AddChemicalElements("Einsteinium", 99, 252.00000000000000f, 980.0f, SOLID, -1);
249  AddChemicalElements("Fermium", 100, 257.00000000000000f, 994.0f, SOLID, -1);
250 }
251 
255 
256 void GGEMSMaterialsDatabaseManager::AddChemicalElements(std::string const& element_name, GGuchar const& element_Z, GGfloat const& element_M, GGfloat const& element_I, GGchar const& state, GGint const& index_density_correction)
257 {
258  GGcout("GGEMSMaterialsDatabaseManager", "AddChemicalElements", 3) << "Adding element: " << element_name << "..." << GGendl;
259 
260  // Creating chemical element and store it
261  GGEMSChemicalElement element;
262  element.atomic_number_Z_ = element_Z;
263  element.molar_mass_M_ = element_M * (g / mol);
264  element.mean_excitation_energy_I_ = element_I * eV;
265  element.state_ = state;
266  element.index_density_correction_ = index_density_correction;
267 
268  // No need to check if element already insert
269  chemical_elements_.insert(std::make_pair(element_name, element));
270 }
271 
275 
276 GGfloat GGEMSMaterialsDatabaseManager::GetRadiationLength(std::string const& material) const
277 {
278  GGfloat inverse_radiation = 0.0f;
279  GGfloat tsai_radiation = 0.0f;
280  GGfloat zeff = 0.0f;
281  GGfloat coulomb = 0.0f;
282 
283  GGfloat l_rad_light[] = {5.310f , 4.790f , 4.740f, 4.710f};
284  GGfloat lp_rad_light[] = {6.144f , 5.621f , 5.805f, 5.924f};
285  GGfloat k1 = 0.00830f;
286  GGfloat k2 = 0.20206f;
287  GGfloat k3 = 0.00200f;
288  GGfloat k4 = 0.03690f;
289 
290  // Getting the material infos from database
291  GGEMSSingleMaterial const& single_material = GetMaterial(material);
292 
293  // Loop over the chemical elements by material
294  for (GGuchar i = 0; i < single_material.nb_elements_; ++i) {
295  // Getting the chemical element
296  GGEMSChemicalElement const& kChemicalElement = GetChemicalElement(single_material.chemical_element_name_[i]);
297 
298  // Z effective
299  zeff = static_cast<GGfloat>(kChemicalElement.atomic_number_Z_);
300 
301  // Compute Coulomb correction factor (Phys Rev. D50 3-1 (1994) page 1254)
303  GGfloat az4 = az2 * az2;
304  coulomb = ( k1*az4 + k2 + 1.0f/ (1.0f+az2) ) * az2 - ( k3*az4 + k4 ) * az4;
305 
306  // Compute Tsai's Expression for the Radiation Length
307  // (Phys Rev. D50 3-1 (1994) page 1254)
308  GGfloat logZ3 = std::log(zeff) / 3.0f;
309 
310  GGfloat l_rad = 0.0f;
311  GGfloat lp_rad = 0.0f;
312  GGint iz = static_cast<GGint>(( zeff + 0.5f ) - 1);
313  if (iz <= 3){
314  l_rad = l_rad_light[iz];
315  lp_rad = lp_rad_light[iz];
316  }
317  else {
318  l_rad = std::log(184.15f) - logZ3;
319  lp_rad = std::log(1194.0f) - 2.0f*logZ3;
320  }
321 
322  tsai_radiation = 4.0f * ALPHA_RCL2 * zeff * ( zeff * ( l_rad - coulomb ) + lp_rad );
323  inverse_radiation += GetAtomicNumberDensity(material, i) * tsai_radiation;
324  }
325 
326  return (inverse_radiation <= 0.0f ? std::numeric_limits<GGfloat>::max() : 1.0f / inverse_radiation);
327 }
328 
332 
334 {
335  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableChemicalElements", 3) << "Printing available chemical elements..." << GGendl;
336 
337  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableChemicalElements", 0) << "Number of chemical elements in GGEMS: " << chemical_elements_.size() << GGendl;
338 
339  // Loop over the elements
340  for (auto&& i : chemical_elements_) {
341  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableChemicalElements", 0) << " * Chemical element: \"" << i.first << "\"" << GGendl;
342  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableChemicalElements", 0) << " - Atomic number (Z): " << i.second.atomic_number_Z_ << GGendl;
343  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableChemicalElements", 0) << " - Molar mass (M): " << i.second.molar_mass_M_ / (g / mol) << " g/mol" << GGendl;
344  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableChemicalElements", 0) << " - Mean excitation energy (I): " << i.second.mean_excitation_energy_I_/eV << " eV" << GGendl;
345  }
346 }
347 
351 
353 {
354  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableMaterials", 3) << "Printing available materials..." << GGendl;
355 
356  if (materials_.empty()) {
357  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableMaterials", 0) << "For moment the GGEMS material database is empty, provide your material file to GGEMS." << GGendl;
358  return;
359  }
360 
361  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableMaterials", 0) << "Number of materials in GGEMS: " << materials_.size() << GGendl;
362 
363  // Loop over the materials
364  for (auto&& i : materials_) {
365  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableMaterials", 0) << " * Material: \"" << i.first << "\"" << GGendl;
366  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableMaterials", 0) << " - Density: " << i.second.density_ / (g/cm3) << " g/cm3" << GGendl;
367  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableMaterials", 0) << " - Number of elements: " << static_cast<GGushort>(i.second.nb_elements_) << GGendl;
368  for (GGushort j = 0; j < i.second.nb_elements_; ++j) {
369  GGcout("GGEMSMaterialsDatabaseManager", "PrintAvailableMaterials", 0) << " * Element: " << i.second.chemical_element_name_.at(j) << ", fraction: " << i.second.mixture_f_.at(j) << GGendl;
370  }
371  }
372 }
373 
377 
379 {
381 }
382 
386 
387 void set_materials_ggems_materials_manager(GGEMSMaterialsDatabaseManager* ggems_materials_manager, char const* filename)
388 {
389  ggems_materials_manager->SetMaterialsDatabase(filename);
390 }
391 
395 
397 {
398  ggems_materials_manager->PrintAvailableChemicalElements();
399 }
400 
404 
406 {
407  ggems_materials_manager->PrintAvailableMaterials();
408 }
GGEMSChemicalElement::mean_excitation_energy_I_
GGfloat mean_excitation_energy_I_
Definition: GGEMSMaterialsDatabaseManager.hh:54
GGEMSTextReader::SkipComment
void SkipComment(std::ifstream &stream, std::string &line, char const comment='#')
skip a special line beginning by a comment caracter
Definition: GGEMSTextReader.cc:131
print_available_chemical_elements_ggems_materials_manager
void print_available_chemical_elements_ggems_materials_manager(GGEMSMaterialsDatabaseManager *ggems_materials_manager)
print all available chemical elements
Definition: GGEMSMaterialsDatabaseManager.cc:396
GGEMSSingleMaterial
GGEMS structure managing a specific material.
Definition: GGEMSMaterialsDatabaseManager.hh:64
GGEMSMaterialsDatabaseManager::~GGEMSMaterialsDatabaseManager
~GGEMSMaterialsDatabaseManager(void)
Unable the destructor for the user.
Definition: GGEMSMaterialsDatabaseManager.cc:54
GGwarn
GGEMSStream GGwarn
Definition: GGEMSPrint.cc:36
GGEMSMaterialsDatabaseManager::LoadChemicalElements
void LoadChemicalElements(void)
load all the chemical elements
Definition: GGEMSMaterialsDatabaseManager.cc:145
GGushort
#define GGushort
Definition: GGEMSTypes.hh:217
GGchar
#define GGchar
Definition: GGEMSTypes.hh:196
eV
__constant GGfloat eV
Definition: GGEMSSystemOfUnits.hh:101
GGEMSChemicalElement::state_
GGchar state_
Definition: GGEMSMaterialsDatabaseManager.hh:55
GGEMSSingleMaterial::chemical_element_name_
std::vector< std::string > chemical_element_name_
Definition: GGEMSMaterialsDatabaseManager.hh:65
GGEMSMaterialsDatabaseManager::AddChemicalElements
void AddChemicalElements(std::string const &element_name, GGuchar const &element_Z, GGfloat const &element_M, GGfloat const &element_I, GGchar const &state, GGint const &index_density_correction)
Adding a chemical element in GGEMS.
Definition: GGEMSMaterialsDatabaseManager.cc:256
GGEMSChemicalElement::molar_mass_M_
GGfloat molar_mass_M_
Definition: GGEMSMaterialsDatabaseManager.hh:53
SOLID
__constant GGchar SOLID
Definition: GGEMSMaterialsDatabaseManager.hh:43
ALPHA_RCL2
__constant GGfloat ALPHA_RCL2
Definition: GGEMSConstants.hh:78
GGEMSMaterialsDatabaseManager::PrintAvailableChemicalElements
void PrintAvailableChemicalElements(void) const
Printing all the available elements.
Definition: GGEMSMaterialsDatabaseManager.cc:333
print_available_materials_ggems_materials_manager
void print_available_materials_ggems_materials_manager(GGEMSMaterialsDatabaseManager *ggems_materials_manager)
print all available materials
Definition: GGEMSMaterialsDatabaseManager.cc:405
GGint
#define GGint
Definition: GGEMSTypes.hh:224
set_materials_ggems_materials_manager
void set_materials_ggems_materials_manager(GGEMSMaterialsDatabaseManager *ggems_materials_manager, char const *filename)
enter the material database to GGEMS
Definition: GGEMSMaterialsDatabaseManager.cc:387
cm3
__constant GGfloat cm3
Definition: GGEMSSystemOfUnits.hh:59
GGEMSMaterialsDatabaseManager::LoadMaterialsDatabase
void LoadMaterialsDatabase(std::string const &filename)
Load materials for GGEMS.
Definition: GGEMSMaterialsDatabaseManager.cc:95
GAS
__constant GGchar GAS
Definition: GGEMSMaterialsDatabaseManager.hh:44
GGEMSMaterialsDatabaseManager::GetInstance
static GGEMSMaterialsDatabaseManager & GetInstance(void)
Create at first time the Singleton.
Definition: GGEMSMaterialsDatabaseManager.hh:97
GGEMSTextReader.hh
Namespaces for different useful fonctions reading input text file. Namespaces for material database f...
GGEMSSingleMaterial::density_
GGfloat density_
Definition: GGEMSMaterialsDatabaseManager.hh:67
GGEMSSingleMaterial::mixture_f_
std::vector< GGfloat > mixture_f_
Definition: GGEMSMaterialsDatabaseManager.hh:66
GGEMSMaterialsDatabaseManager::materials_
MaterialUMap materials_
Definition: GGEMSMaterialsDatabaseManager.hh:262
GGEMSTextReader::RemoveSpace
void RemoveSpace(std::string &line)
remove all spaces and tab from a string
Definition: GGEMSTextReader.cc:156
GGEMSMaterialsDatabaseManager::GetAtomicNumberDensity
GGfloat GetAtomicNumberDensity(std::string const &material, GGsize const &index) const
Compute the atomic number density of an element in a material.
Definition: GGEMSMaterialsDatabaseManager.hh:216
GGcout
GGEMSStream GGcout
Definition: GGEMSPrint.cc:34
get_instance_materials_manager
GGEMSMaterialsDatabaseManager * get_instance_materials_manager(void)
Get the GGEMSMaterialsDatabaseManager pointer for python user.
Definition: GGEMSMaterialsDatabaseManager.cc:378
GGEMSTextReader::IsBlankLine
bool IsBlankLine(std::string const &line)
check if the line is blank or not
Definition: GGEMSTextReader.cc:146
GGEMSMaterialsDatabaseManager::GGEMSMaterialsDatabaseManager
GGEMSMaterialsDatabaseManager(void)
Unable the constructor for the user.
Definition: GGEMSMaterialsDatabaseManager.cc:40
GGEMSChemicalElement
GGEMS structure managing a specific chemical element.
Definition: GGEMSMaterialsDatabaseManager.hh:51
GGEMSMaterialsDatabaseManager::Clean
void Clean(void)
clean OpenCL data
Definition: GGEMSMaterialsDatabaseManager.cc:65
GGEMSChemicalElement::index_density_correction_
GGint index_density_correction_
Definition: GGEMSMaterialsDatabaseManager.hh:52
GGEMSMaterialsDatabaseManager::SetMaterialsDatabase
void SetMaterialsDatabase(std::string const &filename)
set the material filename
Definition: GGEMSMaterialsDatabaseManager.cc:76
g
__constant GGfloat g
Definition: GGEMSSystemOfUnits.hh:111
GGEMSMaterialsDatabaseManager::GetChemicalElement
GGEMSChemicalElement GetChemicalElement(std::string const &chemical_element_name) const
get the chemical element
Definition: GGEMSMaterialsDatabaseManager.hh:187
GGendl
#define GGendl
overload C++ std::endl
Definition: GGEMSPrint.hh:60
mol
__constant GGfloat mol
Definition: GGEMSSystemOfUnits.hh:161
GGEMSPrint.hh
Print a custom std::cout end std::cerr handling verbosity.
GGEMSFileStream::CheckInputStream
void CheckInputStream(std::ifstream const &input_stream, std::string const &filename)
check the input stream during the opening
Definition: GGEMSTools.cc:42
GGuchar
#define GGuchar
Definition: GGEMSTypes.hh:203
GGEMSChemicalElement::atomic_number_Z_
GGuchar atomic_number_Z_
Definition: GGEMSMaterialsDatabaseManager.hh:56
FINE_STRUCTURE_CONST
__constant GGfloat FINE_STRUCTURE_CONST
Definition: GGEMSConstants.hh:74
GGEMSMaterialsDatabaseManager::GetRadiationLength
GGfloat GetRadiationLength(std::string const &material) const
get the radiation length of a material
Definition: GGEMSMaterialsDatabaseManager.hh:199
GGEMSMaterialsDatabaseManager.hh
GGEMS singleton class managing the material database.
GGEMSSingleMaterial::nb_elements_
GGsize nb_elements_
Definition: GGEMSMaterialsDatabaseManager.hh:68
GGEMSMaterialsDatabaseManager
GGEMS class managing the material database.
Definition: GGEMSMaterialsDatabaseManager.hh:79
GGEMSMaterialsDatabaseManager::GetMaterial
GGEMSSingleMaterial GetMaterial(std::string const &material_name) const
get the material
Definition: GGEMSMaterialsDatabaseManager.hh:167
GGEMSMaterialsDatabaseManager::chemical_elements_
ChemicalElementUMap chemical_elements_
Definition: GGEMSMaterialsDatabaseManager.hh:263
GGfloat
#define GGfloat
Definition: GGEMSTypes.hh:273
GGEMSMaterialsDatabaseManager::PrintAvailableMaterials
void PrintAvailableMaterials(void) const
Printing all the available materials.
Definition: GGEMSMaterialsDatabaseManager.cc:352