42 GGcout(
"GGEMSMaterialsDatabaseManager",
"GGEMSMaterialsDatabaseManager", 3) <<
"GGEMSMaterialsDatabaseManager creating..." <<
GGendl;
47 GGcout(
"GGEMSMaterialsDatabaseManager",
"GGEMSMaterialsDatabaseManager", 3) <<
"GGEMSMaterialsDatabaseManager created!!!" <<
GGendl;
56 GGcout(
"GGEMSMaterialsDatabaseManager",
"~GGEMSMaterialsDatabaseManager", 3) <<
"GGEMSMaterialsDatabaseManager erasing..." <<
GGendl;
58 GGcout(
"GGEMSMaterialsDatabaseManager",
"~GGEMSMaterialsDatabaseManager", 3) <<
"GGEMSMaterialsDatabaseManager erased!!!" <<
GGendl;
67 GGcout(
"GGEMSMaterialsDatabaseManager",
"Clean", 3) <<
"GGEMSMaterialsDatabaseManager cleaning..." <<
GGendl;
69 GGcout(
"GGEMSMaterialsDatabaseManager",
"Clean", 3) <<
"GGEMSMaterialsDatabaseManager cleaned!!!" <<
GGendl;
79 std::string filename_str(filename);
83 GGwarn(
"GGEMSMaterialsDatabaseManager",
"SetMaterialsDatabase", 0) <<
"Material database if already loaded!!!" <<
GGendl;
97 GGcout(
"GGEMSMaterialsDatabaseManager",
"LoadMaterialsDatabase", 1) <<
"Loading materials database in GGEMS..." <<
GGendl;
100 std::ifstream database_stream(filename, std::ios::in);
104 std::string line(
"");
105 while (std::getline(database_stream, line)) {
116 std::string material_name = GGEMSMaterialReader::ReadMaterialName(line);
117 material.
density_ = GGEMSMaterialReader::ReadMaterialDensity(line);
118 material.
nb_elements_ = GGEMSMaterialReader::ReadMaterialNumberOfElements(line);
123 std::getline(database_stream, line);
129 material.
mixture_f_.push_back(GGEMSMaterialReader::ReadMaterialElementFraction(line));
133 GGcout(
"GGEMSMaterialsDatabaseManager",
"LoadMaterialsDatabase", 3) <<
"Adding material: " << material_name <<
"..." <<
GGendl;
134 materials_.insert(std::make_pair(material_name, material));
138 database_stream.close();
147 GGcout(
"GGEMSMaterialsDatabaseManager",
"LoadChemicalElements", 1) <<
"Loading chemical elements in GGEMS..." <<
GGendl;
258 GGcout(
"GGEMSMaterialsDatabaseManager",
"AddChemicalElements", 3) <<
"Adding element: " << element_name <<
"..." <<
GGendl;
278 GGfloat inverse_radiation = 0.0f;
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};
304 coulomb = ( k1*az4 + k2 + 1.0f/ (1.0f+az2) ) * az2 - ( k3*az4 + k4 ) * az4;
308 GGfloat logZ3 = std::log(zeff) / 3.0f;
312 GGint iz =
static_cast<GGint>(( zeff + 0.5f ) - 1);
314 l_rad = l_rad_light[iz];
315 lp_rad = lp_rad_light[iz];
318 l_rad = std::log(184.15f) - logZ3;
319 lp_rad = std::log(1194.0f) - 2.0f*logZ3;
322 tsai_radiation = 4.0f *
ALPHA_RCL2 * zeff * ( zeff * ( l_rad - coulomb ) + lp_rad );
326 return (inverse_radiation <= 0.0f ? std::numeric_limits<GGfloat>::max() : 1.0f / inverse_radiation);
335 GGcout(
"GGEMSMaterialsDatabaseManager",
"PrintAvailableChemicalElements", 3) <<
"Printing available chemical elements..." <<
GGendl;
337 GGcout(
"GGEMSMaterialsDatabaseManager",
"PrintAvailableChemicalElements", 0) <<
"Number of chemical elements in GGEMS: " <<
chemical_elements_.size() <<
GGendl;
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;
354 GGcout(
"GGEMSMaterialsDatabaseManager",
"PrintAvailableMaterials", 3) <<
"Printing available materials..." <<
GGendl;
357 GGcout(
"GGEMSMaterialsDatabaseManager",
"PrintAvailableMaterials", 0) <<
"For moment the GGEMS material database is empty, provide your material file to GGEMS." <<
GGendl;
361 GGcout(
"GGEMSMaterialsDatabaseManager",
"PrintAvailableMaterials", 0) <<
"Number of materials in GGEMS: " <<
materials_.size() <<
GGendl;
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;