10std::string getDataBasePath() {
14 char* heed_database = std::getenv(
"HEED_DATABASE");
16 path = std::string(heed_database);
19 char* garfield_install = std::getenv(
"GARFIELD_INSTALL");
20 if (garfield_install) {
21 path = std::string(garfield_install) +
"/share/Heed/database/";
24 char* garfield_home = std::getenv(
"GARFIELD_HOME");
26 path = std::string(garfield_home) +
"/Heed/heed++/database/";
34 const std::string& pacs_table_dir) {
37 pacs_table_dir +
"Ar.dat");
47 std::vector<double> electron_energy;
48 std::vector<double> photon_energy;
49 electron_energy.emplace_back(0.000200);
51 asp->
add_channel(0.65, electron_energy, photon_energy);
52 electron_energy.resize(2);
53 electron_energy[0] = 0.000050;
54 electron_energy[1] = 0.000200;
55 asp->
add_channel(0.35, electron_energy, photon_energy, 1);
59 asp = Argon_PACS_mod_esc.get_asp(2);
60 electron_energy.resize(1);
61 electron_energy[0] = 0.000200;
62 asp->
add_channel(1.0, electron_energy, photon_energy, 1);
66 asp = Argon_PACS_mod_esc.get_asp(3);
67 electron_energy.resize(1);
68 electron_energy[0] = 0.000200;
69 asp->
add_channel(1.0, electron_energy, photon_energy, 1);
73 return Argon_PACS_mod_esc;
83std::map<std::string, ExAtomPhotoAbsCS> PhotoAbsCSLib::apacs;
84std::map<std::string, SimpleAtomPhotoAbsCS> PhotoAbsCSLib::hpacs;
87 if (apacs.empty()) initialise();
88 if (name ==
"H" || name.find(
"H for") == 0) {
91 if (apacs.count(name) > 0)
return &apacs[name];
95void PhotoAbsCSLib::initialise() {
96 if (!hpacs.empty() || !apacs.empty())
return;
100 hpacs.emplace(
"H for H2",
101 SimpleAtomPhotoAbsCS(1, std::make_shared<PhenoPhotoAbsCS>(
"Hydrogen_for_H2", 1, 15.43e-6, 3.228)));
102 hpacs.emplace(
"H for CH4",
103 SimpleAtomPhotoAbsCS(1, std::make_shared<PhenoPhotoAbsCS>(
"Hydrogen_for_CH4", 1, 12.65e-06, 3.228)));
104 hpacs.emplace(
"H for NH4",
105 SimpleAtomPhotoAbsCS(1, std::make_shared<PhenoPhotoAbsCS>(
"Hydrogen_for_NH4", 1, 10.0e-06, 3.228)));
110 std::string dbpath = getDataBasePath();
111 if (dbpath.empty()) {
112 std::cerr <<
"Heed::PhotoAbsCsLib::initialise:\n"
113 <<
" Could not retrieve database path.\n";
115 if (dbpath[dbpath.size() - 1] !=
'/') dbpath.append(
"/");
117 const std::string pacs_table_dir = dbpath +
"henke/";
120 apacs.emplace(
"Ar", generate_Ar_PACS(dbpath, pacs_table_dir));
123 std::string shells = dbpath +
"shelllist.dat";
124 const std::map<std::string, int> atoms = {
125 {
"He", 2}, {
"Li", 3}, {
"Be", 4}, {
"B", 5}, {
"C", 6},
126 {
"O", 8}, {
"F", 9}, {
"Ne", 10}, {
"Na", 11}, {
"Mg", 12},
127 {
"Al", 13}, {
"Si", 14}, {
"P", 15}, {
"S", 16}, {
"Cl", 17},
128 {
"Ga", 31}, {
"Ge", 32}, {
"As", 33}, {
"Br", 35}, {
"Kr", 36},
129 {
"Cd", 48}, {
"Te", 52}, {
"Xe", 54}, {
"Cs", 55}, {
"Hg", 80},
131 for (
const auto& atom : atoms) {
132 std::string pacstable = pacs_table_dir + atom.first +
".dat";
133 apacs.emplace(atom.first, ExAtomPhotoAbsCS(atom.second, shells, pacstable));
162 apacs.emplace(
"C for CH4", ExAtomPhotoAbsCS(6, shells,
163 dbpath +
"C_for_CH4.dat",
164 "C_for_CH4", 12.65e-6));
165 apacs.emplace(
"C for C2H4", ExAtomPhotoAbsCS(6, shells,
166 pacs_table_dir +
"C.dat",
167 "C_for_C2H4", 10.51e-06));
168 apacs.emplace(
"C for C2H6", ExAtomPhotoAbsCS(6, shells,
169 pacs_table_dir +
"C.dat",
170 "C_for_C2H6", 11.52e-06));
171 apacs.emplace(
"C for C4H10", ExAtomPhotoAbsCS(6, shells,
172 pacs_table_dir +
"C.dat",
173 "C_for_C4H10", 10.55e-06));
174 apacs.emplace(
"C for Methylal", ExAtomPhotoAbsCS(6, shells,
175 pacs_table_dir +
"C.dat",
176 "C_for_Methylal", 10.0e-06));
177 apacs.emplace(
"C for CF4", ExAtomPhotoAbsCS(6, shells,
178 pacs_table_dir +
"C.dat",
179 "C_for_CF4", 16.23e-06));
180 apacs.emplace(
"C for CO2", ExAtomPhotoAbsCS(6, shells,
181 pacs_table_dir +
"C.dat",
182 "C_for_CO2", 13.79e-06));
183 apacs.emplace(
"N", ExAtomPhotoAbsCS(7, shells, pacs_table_dir +
"N.dat",
184 "N_for_N2", 15.581e-6));
185 apacs.emplace(
"O for CO2", ExAtomPhotoAbsCS(8, shells,
186 pacs_table_dir +
"O.dat",
187 "O_for_CO2", 13.79e-6));
189 std::string sshells = dbpath +
"shelllist_solid.dat";
191 apacs.emplace(
"Diamond", ExAtomPhotoAbsCS(6, sshells,
192 pacs_table_dir +
"C.dat",
194 apacs.emplace(
"Si crystal", ExAtomPhotoAbsCS(14, sshells,
195 pacs_table_dir +
"Si.dat",
197 apacs.emplace(
"Ge crystal", ExAtomPhotoAbsCS(32, shells,
198 pacs_table_dir +
"Ge.dat",
199 "Ge_crystal", 0.67e-06));
200 apacs.emplace(
"Si G4", ExAtomPhotoAbsCS(14, sshells, dbpath +
"Si_G4.dat",
"Si_G4"));
201 apacs.emplace(
"Ga for GaAs", ExAtomPhotoAbsCS(31, sshells,
202 pacs_table_dir +
"Ga.dat",
204 apacs.emplace(
"As for GaAs", ExAtomPhotoAbsCS(33, sshells,
205 pacs_table_dir +
"As.dat",
207 apacs.emplace(
"Cd for CdTe", ExAtomPhotoAbsCS(48, sshells,
208 pacs_table_dir +
"Cd.dat",
210 apacs.emplace(
"Te for CdTe", ExAtomPhotoAbsCS(52, sshells,
211 pacs_table_dir +
"Te.dat",
Atomic photoabsorption cross-section abstract base class.
void add_channel(double fchannel_prob_dens, const std::vector< double > &felectron_energy, const std::vector< double > &fphoton_energy, int s_all_rest=0)
Atomic photo-absorption with excitation.
static AtomPhotoAbsCS * getAPACS(const std::string &name)