Garfield++ 3.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
Heed::ExAtomPhotoAbsCS Class Reference

Atomic photo-absorption with excitation. More...

#include <PhotoAbsCS.h>

+ Inheritance diagram for Heed::ExAtomPhotoAbsCS:

Public Member Functions

virtual double get_threshold (int nshell) const
 Get the ionization threshold for a given shell.
 
virtual double get_ACS (double energy) const
 
virtual double get_integral_ACS (double energy1, double energy2) const
 Integrated photo-absorption cross-section overa given interval.
 
virtual double get_ACS (int nshell, double energy) const
 Sub-shell photo-absorption cross-section [Mbarn] at a given energy [MeV].
 
virtual double get_integral_ACS (int nshell, double energy1, double energy2) const
 Integrated sub-shell photo-absorption cross-section.
 
virtual double get_ICS (double energy) const
 
virtual double get_integral_ICS (double energy1, double energy2) const
 Integrated photo-ionization cross-section over a given interval.
 
virtual double get_ICS (int nshell, double energy) const
 Sub-shell photo-ionization cross-section at a given energy.
 
virtual double get_integral_ICS (int nshell, double energy1, double energy2) const
 Integrated sub-shell photo-ionization cross-section.
 
virtual int get_main_shell_number (int nshell) const
 
void replace_shells_by_average (double fwidth, double fstep, long fmax_q_step)
 
virtual void print (std::ostream &file, int l) const
 
virtual ExAtomPhotoAbsCScopy () const
 
 ExAtomPhotoAbsCS ()
 Default constructor.
 
 ExAtomPhotoAbsCS (int fZ, const std::string &fthreshold_file_name, const std::string &fsimple_table_file_name, const std::string &fname="none", double fminimal_threshold=0.0)
 
 ExAtomPhotoAbsCS (int fZ, const std::string &fname, const std::string &fBT_file_name, int id, double fminimal_threshold=0.0)
 
 ExAtomPhotoAbsCS (int fZ, const std::string &fname, const std::string &fFitBT_file_name, int id, int s_no_scale, double fminimal_threshold=0.0)
 
 ExAtomPhotoAbsCS (int fZ, const std::string &fname, const std::string &fFitBT_file_name, const std::string &fsimple_table_file_name, double emax_repl, int id, double fminimal_threshold=0.0)
 
virtual ~ExAtomPhotoAbsCS ()
 Destructor.
 
- Public Member Functions inherited from Heed::AtomPhotoAbsCS
 AtomPhotoAbsCS ()
 Default constructor.
 
int get_Z () const
 Get the atomic number.
 
unsigned int get_qshell () const
 Get the number of shells.
 
virtual double get_threshold (int nshell) const =0
 Get the ionization threshold for a given shell.
 
virtual double get_I_min () const
 Get the lowest ionization threshold among all shells.
 
virtual double get_ACS (double energy) const =0
 
virtual double get_integral_ACS (double energy1, double energy2) const =0
 Integrated photo-absorption cross-section overa given interval.
 
virtual double get_ACS (int nshell, double energy) const =0
 Sub-shell photo-absorption cross-section [Mbarn] at a given energy [MeV].
 
virtual double get_integral_ACS (int nshell, double energy1, double energy2) const =0
 Integrated sub-shell photo-absorption cross-section.
 
virtual double get_ICS (double energy) const =0
 
virtual double get_TICS (double energy, double factual_minimal_threshold) const
 
virtual double get_integral_ICS (double energy1, double energy2) const =0
 Integrated photo-ionization cross-section over a given interval.
 
virtual double get_integral_TICS (double energy1, double energy2, double factual_minimal_threshold) const
 Integral photo-ionization cross-section with redefined threshold.
 
virtual double get_ICS (int nshell, double energy) const =0
 Sub-shell photo-ionization cross-section at a given energy.
 
virtual double get_TICS (int nshell, double energy, double factual_minimal_threshold) const
 Sub-shell photo-ionization cross-section with redefined threshold.
 
virtual double get_integral_ICS (int nshell, double energy1, double energy2) const =0
 Integrated sub-shell photo-ionization cross-section.
 
virtual double get_integral_TICS (int nshell, double energy1, double energy2, double factual_minimal_threshold) const
 Integrated sub-shell photo-ionization cross-section (redefined threshold).
 
virtual void get_escape_particles (const int nshell, double energy, std::vector< double > &el_energy, std::vector< double > &ph_energy) const
 
virtual int get_main_shell_number (int nshell) const =0
 
virtual void remove_shell (int nshell)
 Deactivate a sub-shell. Set s_ignore_shell flag to true.
 
virtual void restore_shell (int nshell)
 Activate a sub-shell. Set s_ignore_shell flag to false.
 
virtual void print (std::ostream &file, int l) const
 
virtual AtomPhotoAbsCScopy () const =0
 
AtomicSecondaryProductsget_asp (int nshell)
 

Protected Attributes

std::string threshold_file_name
 
std::string simple_table_file_name
 
std::string BT_file_name
 
std::vector< std::shared_ptr< PhotoAbsCS > > m_acs
 
double integ_abs_before_corr
 
double integ_abs_after_corr
 
double integ_ioniz_after_corr
 
double height_of_excitation
 Excitation cross-section (assumed in the lowest shell).
 
double exener [2]
 Boundaries of excitation.
 
double minimal_threshold
 
- Protected Attributes inherited from Heed::AtomPhotoAbsCS
std::string name
 Name of the atom.
 
int Z
 Atomic number.
 
int qshell
 Number of shells.
 
std::vector< bool > s_ignore_shell
 
std::vector< AtomicSecondaryProductsasp
 Sampling of relaxation products for each shell.
 

Static Protected Attributes

static const int s_add_excitations_to_normalize = 1
 
static const int s_scale_to_normalize_if_more = 1
 

Detailed Description

Atomic photo-absorption with excitation.

Definition at line 430 of file PhotoAbsCS.h.

Constructor & Destructor Documentation

◆ ExAtomPhotoAbsCS() [1/5]

Heed::ExAtomPhotoAbsCS::ExAtomPhotoAbsCS ( )
inline

Default constructor.

Definition at line 455 of file PhotoAbsCS.h.

455: AtomPhotoAbsCS() {}
AtomPhotoAbsCS()
Default constructor.
Definition: PhotoAbsCS.cpp:580

Referenced by copy(), and ExAtomPhotoAbsCS().

◆ ExAtomPhotoAbsCS() [2/5]

Heed::ExAtomPhotoAbsCS::ExAtomPhotoAbsCS ( int  fZ,
const std::string &  fthreshold_file_name,
const std::string &  fsimple_table_file_name,
const std::string &  fname = "none",
double  fminimal_threshold = 0.0 
)

Constructor,

Parameters
fZatomic number
fthreshold_file_namefile from which to read name and shell energies
fsimple_table_file_namefile from which to read the cross-sections
fnamename of the atom, if "none" it is taken from fthreshold_file_name
fminimal_thresholdthreshold

Definition at line 1029 of file PhotoAbsCS.cpp.

1034 : threshold_file_name(fthreshold_file_name),
1035 simple_table_file_name(fsimple_table_file_name),
1036 BT_file_name("none"),
1037 minimal_threshold(fminimal_threshold) {
1038 mfunnamep("ExAtomPhotoAbsCS::ExAtomPhotoAbsCS(...) const");
1039 check_econd11(fZ, < 1, mcerr);
1040 std::ifstream threshold_file(threshold_file_name.c_str());
1041 if (!threshold_file) {
1042 funnw.ehdr(mcerr);
1043 mcerr << "cannot open file " << threshold_file_name << std::endl;
1044 spexit(mcerr);
1045 }
1046 std::vector<double> thr;
1047 std::vector<int> Zshell;
1048 std::vector<double> fl;
1049 std::vector<std::string> shell_name;
1050 bool foundZ = false;
1051 while (findmark(threshold_file, "#") == 1) {
1052 threshold_file >> Z;
1053 if (Z != fZ) continue;
1054 threshold_file >> qshell;
1055 check_econd21(qshell, < 1 ||, > 10000, mcerr);
1056 s_ignore_shell.resize(qshell, false);
1057 // Iprintn(mcout, qshell);
1058 thr.resize(qshell, 0.0);
1059 Zshell.resize(qshell, 0);
1060 fl.resize(qshell, 0.0);
1061 shell_name.resize(qshell);
1062 m_acs.resize(qshell);
1063 asp.resize(qshell);
1064 std::string temp_name;
1065 threshold_file >> temp_name;
1066 name = fname == "none" ? temp_name : fname;
1067 int sZshell = 0;
1068 for (int nshell = 0; nshell < qshell; nshell++) {
1069 threshold_file >> thr[nshell];
1070 check_econd11(thr[nshell], <= 0.0, mcerr);
1071 thr[nshell] *= 1.0e-6;
1072 threshold_file >> Zshell[nshell];
1073 check_econd11(Zshell[nshell], <= 0, mcerr);
1074 sZshell += Zshell[nshell];
1075 threshold_file >> fl[nshell];
1076 findmark(threshold_file, "!");
1077 threshold_file >> shell_name[nshell];
1078 }
1079 check_econd12(sZshell, !=, Z, mcerr);
1080 // currently the minimal shell is the last,
1081 // but to avoid this assumption, we check all.
1082 int n_min = 0;
1083 double st = DBL_MAX;
1084 for (int nshell = 0; nshell < qshell; nshell++) {
1085 if (thr[nshell] < st) {
1086 n_min = nshell;
1087 st = thr[nshell];
1088 }
1089 }
1090 for (int nshell = 0; nshell < qshell; nshell++) {
1091 if (fl[nshell] <= 0) continue;
1092 check_econd12(nshell, ==, n_min, mcerr);
1093 std::vector<double> felectron_energy;
1094 std::vector<double> fphoton_energy;
1095 fphoton_energy.push_back(thr[nshell] - thr[n_min]);
1096 asp[nshell].add_channel(fl[nshell], felectron_energy, fphoton_energy);
1097 }
1098 foundZ = true;
1099 break;
1100 }
1101 if (!foundZ) {
1102 funnw.ehdr(mcerr);
1103 mcerr << "there is no element Z=" << fZ << " in file "
1104 << threshold_file_name << std::endl;
1105 spexit(mcerr);
1106 }
1107 // Here it reads the PACS as an one shell curve:
1108 SimpleTablePhotoAbsCS stpacs(name, Z, 0.0, fsimple_table_file_name);
1109 const std::vector<double>& ener = stpacs.get_arr_ener();
1110 const std::vector<double>& CS = stpacs.get_arr_CS();
1111 std::vector<double> left_CS = CS; // used in sequencial algorithm
1112 const long qe = ener.size();
1113 // here cs is saved
1114 std::vector<std::vector<double> > SCS(qshell, std::vector<double>(qe, 0.));
1115 int nct = qshell - 1; // "current" threshold index
1116 unsigned long nce = 0; // "current" energy index
1117 // We ignore values below the lowest threshold.
1118 // It is not clear whether it is right, perhaps this is one of possible ways
1119 if (ener[0] < thr[qshell - 1]) {
1120 for (long ne = 0; ne < qe && (ener[ne] < thr[qshell - 1] ||
1121 (ener[ne] >= thr[qshell - 1] && ne > 1 &&
1122 CS[ne - 1] <= CS[ne - 2]));
1123 ne++) {
1124 if (ne > 0) left_CS[ne - 1] = 0.0;
1125 nce = ne;
1126 }
1127 }
1128 int s_more;
1129 int nt2 = 0; // < nt1
1130 int s_spes = 0;
1131 // Actually this is a loop by the group of thresholds
1132 do {
1133 // Find all thresholds which are less then the current energy
1134 int nt;
1135 // sign that there are thresholds more than the current energy
1136 s_more = 0;
1137 for (nt = nct; nt >= 0; nt--) {
1138 if (s_spes == 0) {
1139 if (thr[nt] > ener[nce]) {
1140 s_more = 1;
1141 break;
1142 }
1143 } else {
1144 if (thr[nt] > ener[nce + 1]) {
1145 s_more = 1;
1146 break;
1147 }
1148 }
1149 }
1150 // nt is now index of the next threshold or -1, if the thresholds are
1151 // made up.
1152 int nt1 = nct;
1153 int nce_next = ener.size();
1154 nt2 = nt + 1;
1155 // mcout<<"nt="<<nt<<" nt1="<<nt1<<" nt2="<<nt2<<" s_more="<<s_more<<'\n';
1156 if (s_more == 1) {
1157 // if(nt >= 0) // so if there are other larger thresholds,
1158 //{ // we should check how far we can pass at this step
1159 unsigned long ne;
1160 // finding energy larger than the next threshold
1161 for (ne = nce; ne < ener.size(); ne++) {
1162 if (thr[nt] <= ener[ne]) {
1163 nce_next = ne;
1164 s_spes = 0;
1165 break;
1166 }
1167 // At the following condition energy could be less than threshold,
1168 // but this point will anyway be associated with the next shell
1169 // corresponding to this threshold.
1170 // This is related to not precise measurement of cross section
1171 // and not precise knowledge of shell energies.
1172 // Occurence of this condition is marked by s_spes = 1.
1173 // At the next passing of this loop the thresholds are compared with
1174 // the next energy.
1175 if (ne > 1 && ne < ener.size() - 1 && ne > nce + 2 &&
1176 thr[nt] <= ener[ne + 1] &&
1177 (thr[nt] - ener[ne]) / (ener[ne + 1] - ener[ne]) < 0.1 &&
1178 CS[ne] > CS[ne - 1]) {
1179 // mcout<<"special condition is satisf.\n";
1180 nce_next = ne;
1181 s_spes = 1;
1182 break;
1183 }
1184 }
1185 if (ne == ener.size()) // threshold is larger then energy mesh
1186 s_more = 0; // to finish the loop
1187 }
1188 // Iprintn(mcout, nce_next);
1189 // Iprintn(mcout, ener[nce_next-1]);
1190 int qt = nt1 - nt2 + 1; // quantity of the new thresholds
1191 // Iprintn(mcout, qt);
1192
1193 // Calculate sum of Z.
1194 int s = 0;
1195 for (nt = 0; nt < qt; nt++) {
1196 const int nshell = nct - nt;
1197 s += Zshell[nshell];
1198 }
1199 // Weights according to charges
1200 std::vector<double> w(qt);
1201 for (nt = 0; nt < qt; nt++) {
1202 const int nshell = nct - nt;
1203 w[nt] = double(Zshell[nshell]) / s;
1204 }
1205 double save_left_CS = left_CS[nce_next - 1];
1206 for (long ne = 0; ne < nce_next; ne++) {
1207 for (nt = 0; nt < qt; nt++) {
1208 int nshell = nct - nt;
1209 SCS[nshell][ne] = left_CS[ne] * w[nt];
1210 }
1211 left_CS[ne] = 0.0;
1212 }
1213 for (unsigned long ne = nce_next; ne < ener.size(); ne++) {
1214 double extrap_CS =
1215 save_left_CS * pow(ener[nce_next - 1], 2.75) / pow(ener[ne], 2.75);
1216 if (extrap_CS > left_CS[ne]) extrap_CS = left_CS[ne];
1217 for (nt = 0; nt < qt; nt++) {
1218 int nshell = nct - nt;
1219 SCS[nshell][ne] = extrap_CS * w[nt];
1220 }
1221 left_CS[ne] -= extrap_CS;
1222 }
1223 nce = nce_next;
1224 nct = nt2 - 1;
1225 } while (s_more != 0);
1226 // now nt2 will be index of last filled shell
1227 // Now to fill the shells which are absent in the input table.
1228 // They will be initialized phenomenologically, based on the sum rule.
1229 for (int ns = 0; ns < nt2; ns++) {
1230 m_acs[ns].reset(new PhenoPhotoAbsCS(shell_name[ns], Zshell[ns], thr[ns]));
1231 }
1232 // Initialization of input shells.
1233 for (int ns = nt2; ns < qshell; ns++) {
1234 auto adr = new SimpleTablePhotoAbsCS(shell_name[ns], Zshell[ns], thr[ns], ener, SCS[ns]);
1235 adr->remove_leading_zeros();
1236 m_acs[ns].reset(adr);
1237 }
1239 exener[0] = exener[1] = 0.0;
1240 double integ = get_integral_ACS(0.0, DBL_MAX);
1241 // Iprintn(mcout, integ);
1242 integ_abs_before_corr = integ;
1243 double pred_integ = Thomas_sum_rule_const_Mb * Z;
1244 // Iprintn(mcout, pred_integ);
1245 if (pred_integ > integ) {
1247 const double threshold = m_acs[qshell - 1]->get_threshold();
1248 // add excitation
1249 exener[0] = low_boundary_of_excitations * threshold;
1250 exener[1] = threshold;
1251 height_of_excitation = (pred_integ - integ) / (exener[1] - exener[0]);
1252 if (minimal_threshold > 0.0) {
1253 if (minimal_threshold > threshold) {
1254 // currently the minimal shell is the last one
1255 exener[0] += minimal_threshold - threshold;
1256 exener[1] += minimal_threshold - threshold;
1257 }
1258 }
1259 }
1260 } else if (pred_integ < integ) {
1262 const double fact = pred_integ / integ;
1263 for (int nshell = 0; nshell < qshell; ++nshell) {
1264 m_acs[nshell]->scale(fact);
1265 }
1266 }
1267 }
1268 integ_abs_after_corr = get_integral_ACS(0.0, DBL_MAX);
1270}
#define check_econd21(a, sign1_b1_sign0, sign2_b2, stream)
Definition: FunNameStack.h:191
#define check_econd11(a, signb, stream)
Definition: FunNameStack.h:155
#define mfunnamep(string)
Definition: FunNameStack.h:49
#define spexit(stream)
Definition: FunNameStack.h:256
#define check_econd12(a, sign, b, stream)
Definition: FunNameStack.h:163
std::vector< bool > s_ignore_shell
Definition: PhotoAbsCS.h:379
int Z
Atomic number.
Definition: PhotoAbsCS.h:371
std::string name
Name of the atom.
Definition: PhotoAbsCS.h:369
int qshell
Number of shells.
Definition: PhotoAbsCS.h:373
std::vector< AtomicSecondaryProducts > asp
Sampling of relaxation products for each shell.
Definition: PhotoAbsCS.h:381
std::string BT_file_name
Definition: PhotoAbsCS.h:543
double height_of_excitation
Excitation cross-section (assumed in the lowest shell).
Definition: PhotoAbsCS.h:553
static const int s_add_excitations_to_normalize
Definition: PhotoAbsCS.h:569
double exener[2]
Boundaries of excitation.
Definition: PhotoAbsCS.h:555
std::vector< std::shared_ptr< PhotoAbsCS > > m_acs
Definition: PhotoAbsCS.h:546
virtual double get_integral_ACS(double energy1, double energy2) const
Integrated photo-absorption cross-section overa given interval.
static const int s_scale_to_normalize_if_more
Definition: PhotoAbsCS.h:570
std::string threshold_file_name
Definition: PhotoAbsCS.h:541
std::string simple_table_file_name
Definition: PhotoAbsCS.h:542
virtual double get_integral_ICS(double energy1, double energy2) const
Integrated photo-ionization cross-section over a given interval.
constexpr double Thomas_sum_rule_const_Mb
TRK sum rule [Mb * MeV].
Definition: PhotoAbsCS.h:19
DoubleAc pow(const DoubleAc &f, double p)
Definition: DoubleAc.cpp:337
int findmark(std::istream &file, const char *s)
Definition: findmark.cpp:19
constexpr double low_boundary_of_excitations
Definition: PhotoAbsCS.h:427
#define mcerr
Definition: prstream.h:128

◆ ExAtomPhotoAbsCS() [3/5]

Heed::ExAtomPhotoAbsCS::ExAtomPhotoAbsCS ( int  fZ,
const std::string &  fname,
const std::string &  fBT_file_name,
int  id,
double  fminimal_threshold = 0.0 
)

Constructor, shells from Band and Thragzkovskaya.

Parameters
fZatomic number
fnamename of the atom
fBT_file_namefile with shell names and energies
id1 - old files without fluorescence rate 2 - new files with fluorescence rate other values - error
fminimal_thresholdthreshold

Definition at line 1272 of file PhotoAbsCS.cpp.

1275 : threshold_file_name("none"),
1276 simple_table_file_name("none"),
1277 BT_file_name(fBT_file_name),
1278 minimal_threshold(fminimal_threshold) {
1279 mfunnamep(
1280 "ExAtomPhotoAbsCS::ExAtomPhotoAbsCS(int fZ, const std::string& fname, "
1281 "const std::string& fBT_file_name, int id, double fminimal_threshold)");
1282 check_econd11(fZ, < 1, mcerr);
1283 check_econd21(id, < 1 ||, > 2, mcerr);
1284
1285 name = fname;
1286 std::ifstream BT_file(BT_file_name.c_str());
1287 if (!BT_file) {
1288 funnw.ehdr(mcerr);
1289 mcerr << "cannot open file " << BT_file_name << std::endl;
1290 spexit(mcerr);
1291 }
1292 std::vector<double> thresh;
1293 std::vector<double> fl;
1294 Z = fZ;
1295 int i = findmark(BT_file, "NUCLEAR CHARGE =");
1296 check_econd11a(i, != 1, "wrong file format", mcerr);
1297 int Z_from_file;
1298 BT_file >> Z_from_file;
1299 check_econd12(Z_from_file, !=, Z, mcerr);
1300 qshell = 0;
1301 while ((i = findmark(BT_file, "Z =")) == 1) {
1302 BT_file >> i;
1303 check_econd11(i, != Z, mcerr);
1304 std::string shellname;
1305 BT_file >> shellname;
1306 // Iprintn(mcout, shellname);
1307 i = findmark(BT_file, "$");
1308 check_econd11(i, != 1, mcerr);
1309 long qen;
1310 BT_file >> qen;
1311 check_econd11(qen, <= 0, mcerr);
1312 std::vector<double> fener(qen, 0.0);
1313 std::vector<double> fcs(qen, 0.0);
1314 double thr = 0.0;
1315 BT_file >> thr;
1316 check_econd11(thr, <= 0, mcerr);
1317 thr *= 1.0e-3; // pass from keV to MeV
1318 if (id == 2) {
1319 thresh.push_back(thr);
1320 fl.resize(fl.size() + 1);
1321 BT_file >> fl[qshell];
1322 check_econd21(fl[qshell], < 0.0 ||, > 1.0, mcerr);
1323 // Iprintn(mcout, fl[qshell]);
1324 }
1325 long nen;
1326 for (nen = 0; nen < qen; nen++) {
1327 BT_file >> fener[nen] >> fcs[nen];
1328 check_econd11(fener[nen], <= 0.0, mcerr);
1329 check_econd11(fcs[nen], < 0.0, mcerr);
1330 fener[nen] *= 1.0e-3; // pass from keV to MeV
1331 }
1332 qshell++;
1333 m_acs.resize(qshell);
1334 m_acs.back().reset(new SimpleTablePhotoAbsCS(shellname, 0, thr, fener, fcs));
1335 }
1336 if (id == 2) {
1337 // a copy of similar thing from subroutine above
1338 int n_min = 0;
1339 double st = DBL_MAX;
1340 for (int nshell = 0; nshell < qshell; ++nshell) {
1341 // currently the minimal shell is the last,
1342 // but to avoid this assumption we check all
1343 if (thresh[nshell] < st) {
1344 n_min = nshell;
1345 st = thresh[nshell];
1346 }
1347 }
1348 asp.resize(qshell);
1349 for (int nshell = 0; nshell < qshell; ++nshell) {
1350 if (fl[nshell] > 0) {
1351 check_econd12(nshell, ==, n_min, mcerr);
1352 std::vector<double> felectron_energy;
1353 std::vector<double> fphoton_energy;
1354 fphoton_energy.push_back(thresh[nshell] - thresh[n_min]);
1355 asp[nshell].add_channel(fl[nshell], felectron_energy, fphoton_energy);
1356 }
1357 }
1358 }
1359
1360 check_econd11(qshell, <= 0, mcerr);
1361 s_ignore_shell.resize(qshell, false);
1363 exener[0] = exener[1] = 0.0;
1364 double integ = get_integral_ACS(0.0, DBL_MAX);
1365 // Iprintn(mcout, integ);
1366 integ_abs_before_corr = integ;
1367 double pred_integ = Thomas_sum_rule_const_Mb * Z;
1368 // Iprintn(mcout, pred_integ);
1369 if (pred_integ > integ) {
1371 const double thr = m_acs[qshell - 1]->get_threshold();
1372 // add excitation
1374 exener[1] = thr;
1375 height_of_excitation = (pred_integ - integ) / (exener[1] - exener[0]);
1376 if (minimal_threshold > 0.0) {
1377 if (minimal_threshold > thr) {
1378 // currently the minimal shell is the last one
1379 exener[0] += minimal_threshold - thr;
1380 exener[1] += minimal_threshold - thr;
1381 }
1382 }
1383 }
1384 } else {
1386 const double fact = pred_integ / integ;
1387 for (int nshell = 0; nshell < qshell; ++nshell) {
1388 m_acs[nshell]->scale(fact);
1389 }
1390 }
1391 }
1392 integ_abs_after_corr = get_integral_ACS(0.0, DBL_MAX);
1394}
#define check_econd11a(a, signb, add, stream)
Definition: FunNameStack.h:172

◆ ExAtomPhotoAbsCS() [4/5]

Heed::ExAtomPhotoAbsCS::ExAtomPhotoAbsCS ( int  fZ,
const std::string &  fname,
const std::string &  fFitBT_file_name,
int  id,
int  s_no_scale,
double  fminimal_threshold = 0.0 
)

Constructor, shells and fit parameters from Band and Thragzkovskaya.

Parameters
fZatomic number
fnamename of the atom
fFitBT_file_namefile with shell names, energies, and fit parameters
id1 - old files without fluorescence rate 2 - new files with fluorescence rate other values - error
s_no_scalescaling is not done, needs for next (?)
fminimal_thresholdthreshold

Definition at line 1398 of file PhotoAbsCS.cpp.

1402 : threshold_file_name("none"),
1403 simple_table_file_name("none"),
1404 BT_file_name(fFitBT_file_name),
1405 minimal_threshold(fminimal_threshold) {
1406 mfunnamep(
1407 "ExAtomPhotoAbsCS::ExAtomPhotoAbsCS(int fZ, const std::string& fname, "
1408 "const "
1409 "std::string& fFitBT_file_name, int id, int id1, double "
1410 "fminimal_threshold)");
1411 check_econd11(fZ, < 1, mcerr);
1412 check_econd21(id, < 1 ||, > 2, mcerr);
1413 Z = fZ;
1414 name = fname;
1415 std::ifstream BT_file(fFitBT_file_name.c_str());
1416 if (!BT_file) {
1417 funnw.ehdr(mcerr);
1418 mcerr << "cannot open file " << BT_file_name << std::endl;
1419 spexit(mcerr);
1420 }
1421 std::vector<double> thresh;
1422 std::vector<double> fl;
1423 int i = 0;
1424 while ((i = findmark(BT_file, "$")) == 1) {
1425 long iZ;
1426 BT_file >> iZ;
1427 if (iZ != Z) continue;
1428 BT_file >> qshell;
1429 // Iprintn(mcout, qshell);
1430 check_econd11(qshell, <= 0, mcerr);
1431 check_econd11(qshell, > 1000, mcerr);
1432 m_acs.resize(qshell);
1433 if (id == 2) {
1434 thresh.resize(qshell);
1435 fl.resize(qshell);
1436 }
1437 for (int nshell = 0; nshell < qshell; ++nshell) {
1438#ifdef READ_FILE_WITH_PRINCIPAL_NUMBERS
1439 int n_princ = 0;
1440#endif
1441 int l;
1442 double threshold;
1443 double E0;
1444 double yw;
1445 double ya;
1446 double P;
1447 double sigma;
1448 if (BT_file.eof()) {
1449 mcerr << "unexpected end of file " << BT_file_name << '\n';
1450 spexit(mcerr);
1451 }
1452 if (!BT_file.good()) {
1453 mcerr << "bad format of file " << BT_file_name << '\n';
1454 spexit(mcerr);
1455 }
1456#ifdef READ_FILE_WITH_PRINCIPAL_NUMBERS
1457 BT_file >> n_princ;
1458 if (!BT_file.good()) {
1459 mcerr << "bad format of file " << BT_file_name << '\n';
1460 spexit(mcerr);
1461 }
1462 check_econd21(n_princ, < 0 ||, > 10, mcerr);
1463#endif
1464 BT_file >> l >> threshold >> E0 >> sigma >> ya >> P >> yw;
1465 check_econd11(l, < 0, mcerr);
1466 check_econd11(l, > 20, mcerr);
1467 threshold *= 1.0e-6;
1468 E0 *= 1.0e-6;
1469
1470 check_econd11a(threshold, <= 2.0e-6,
1471 "n_princ=" << n_princ << " l=" << l << '\n', mcerr);
1472 check_econd11(E0, <= 0, mcerr);
1473 double flu = 0.0;
1474 if (id == 2) {
1475 if (BT_file.eof()) {
1476 mcerr << "unexpected end of file " << BT_file_name << '\n';
1477 spexit(mcerr);
1478 }
1479 if (!BT_file.good()) {
1480 mcerr << "bad format of file " << BT_file_name << '\n';
1481 spexit(mcerr);
1482 }
1483 BT_file >> flu;
1484 check_econd11(flu, < 0.0, mcerr);
1485 check_econd11(flu, > 1.0, mcerr);
1486 thresh[nshell] = threshold;
1487 fl[nshell] = flu;
1488 }
1489#ifdef READ_FILE_WITH_PRINCIPAL_NUMBERS
1490 // necessary for generation escape products
1491 std::string shellname(std::to_string(n_princ) + " shell number " +
1492 std::to_string(nshell));
1493#else
1494 std::string shellname("shell number " + std::to_string(nshell));
1495#endif
1496 m_acs[nshell].reset(new SimpleTablePhotoAbsCS(shellname, 0, threshold,
1497 l, E0, yw, ya, P, sigma));
1498 // Iprintn(mcout, nshell);
1499 // Iprint3n(mcout, l, threshold, E0);
1500 // Iprint4n(mcout, yw, ya, P, sigma);
1501 // acs[nshell]->print(mcout, 5);
1502 }
1503 goto mark1;
1504 }
1505 funnw.ehdr(mcerr);
1506 mcerr << "there is no element Z=" << fZ << " in file " << fFitBT_file_name
1507 << std::endl;
1508 spexit(mcerr);
1509mark1:
1510 if (id == 2) {
1511 // a copy of similar thing from subroutine above
1512 int n_min = 0;
1513 double st = DBL_MAX;
1514 for (int nshell = 0; nshell < qshell; ++nshell) {
1515 // currently the minimal shell is the last,
1516 // but to avoid this assumption we check all
1517 if (thresh[nshell] < st) {
1518 n_min = nshell;
1519 st = thresh[nshell];
1520 }
1521 }
1522 asp.resize(qshell);
1523 for (int nshell = 0; nshell < qshell; ++nshell) {
1524 if (fl[nshell] > 0) {
1525 check_econd12(nshell, ==, n_min, mcerr);
1526 std::vector<double> felectron_energy;
1527 std::vector<double> fphoton_energy;
1528 fphoton_energy.push_back(thresh[nshell] - thresh[n_min]);
1529 asp[nshell].add_channel(fl[nshell], felectron_energy, fphoton_energy);
1530 }
1531 }
1532 }
1533
1534 check_econd11(qshell, <= 0, mcerr);
1535 s_ignore_shell.resize(qshell, false);
1537 exener[0] = exener[1] = 0.0;
1538 double integ = get_integral_ACS(0.0, DBL_MAX);
1539 // Iprintn(mcout, integ);
1540 integ_abs_before_corr = integ;
1541 double pred_integ = Thomas_sum_rule_const_Mb * Z;
1542 // Iprintn(mcout, pred_integ);
1543 if (pred_integ > integ) {
1545 const double thr = m_acs[qshell - 1]->get_threshold();
1546 // add excitation
1548 exener[1] = thr;
1549 height_of_excitation = (pred_integ - integ) / (exener[1] - exener[0]);
1550 if (minimal_threshold > 0.0) {
1551 if (minimal_threshold > thr) {
1552 // currently the minimal shell is the last one
1553 exener[0] += minimal_threshold - thr;
1554 exener[1] += minimal_threshold - thr;
1555 }
1556 }
1557 }
1558 } else {
1559 if (s_scale_to_normalize_if_more == 1 && s_no_scale == 0) {
1560 const double fact = pred_integ / integ;
1561 for (int nshell = 0; nshell < qshell; ++nshell) {
1562 m_acs[nshell]->scale(fact);
1563 }
1564 }
1565 }
1566 integ_abs_after_corr = get_integral_ACS(0.0, DBL_MAX);
1568}

◆ ExAtomPhotoAbsCS() [5/5]

Heed::ExAtomPhotoAbsCS::ExAtomPhotoAbsCS ( int  fZ,
const std::string &  fname,
const std::string &  fFitBT_file_name,
const std::string &  fsimple_table_file_name,
double  emax_repl,
int  id,
double  fminimal_threshold = 0.0 
)

Constructor, combination of Band and Thragzkovskaya fit and Henke tables. Initialize BT fit and replaces the part of the first shell from threshold taken from BT- fit to emax_repl by values from the table.

Parameters
fZatomic number
fnamename of the atom
fFitBT_file_namefile with shell names, energies, and fit parameters
fsimple_table_file_namefile with cross-section table
emax_replenergy up to which to use the cross-section table
id1 - old files without fluorescence rate 2 - new files with fluorescence rate other values - error
fminimal_thresholdthreshold

Definition at line 1570 of file PhotoAbsCS.cpp.

1574 {
1575 mfunname("ExAtomPhotoAbsCS::ExAtomPhotoAbsCS(...)");
1576 Z = fZ;
1577 name = fname;
1578 int s_no_scale = 1;
1579 *this = ExAtomPhotoAbsCS(fZ, fname, fFitBT_file_name, id, s_no_scale,
1580 fminimal_threshold);
1581
1583 exener[0] = exener[1] = 0.0;
1584
1585 double thrmin = DBL_MAX;
1586 long nsmin = -1;
1587 // Look for minimal shell (usually the last).
1588 for (long ns = 0; ns < qshell; ++ns) {
1589 if (thrmin > m_acs[ns]->get_threshold()) {
1590 nsmin = ns;
1591 thrmin = m_acs[ns]->get_threshold();
1592 }
1593 }
1594 check_econd11(nsmin, < 0, mcerr);
1595 check_econd11(nsmin, != qshell - 1, mcerr);
1596
1597 PhotoAbsCS* apacs = m_acs[nsmin].get();
1598 auto first_shell = dynamic_cast<SimpleTablePhotoAbsCS*>(apacs);
1599 check_econd11(first_shell, == nullptr, mcerr);
1600
1601 SimpleTablePhotoAbsCS stpacs(name, Z, 0.0, fsimple_table_file_name);
1602 stpacs.remove_leading_tiny(1.0e-10);
1603
1604 // Merging shells:
1605 SimpleTablePhotoAbsCS* merged = new SimpleTablePhotoAbsCS(*first_shell, stpacs, emax_repl);
1606 m_acs[nsmin].reset(merged);
1607
1608 s_ignore_shell.resize(qshell, false);
1610 exener[0] = exener[1] = 0.0;
1611 double integ = get_integral_ACS(0.0, DBL_MAX);
1612 integ_abs_before_corr = integ;
1613 double pred_integ = Thomas_sum_rule_const_Mb * Z;
1614 if (pred_integ > integ) {
1616 const double thr = m_acs[qshell - 1]->get_threshold();
1617 // add excitation
1619 exener[1] = thr;
1620 height_of_excitation = (pred_integ - integ) / (exener[1] - exener[0]);
1621 if (minimal_threshold > 0.0) {
1622 if (minimal_threshold > thr) {
1623 // currently the minimal shell is the last one
1624 exener[0] += minimal_threshold - thr;
1625 exener[1] += minimal_threshold - thr;
1626 }
1627 }
1628 }
1629 } else {
1631 const double fact = pred_integ / integ;
1632 for (int nshell = 0; nshell < qshell; ++nshell) {
1633 m_acs[nshell]->scale(fact);
1634 }
1635 }
1636 }
1637 integ_abs_after_corr = get_integral_ACS(0.0, DBL_MAX);
1639}
#define mfunname(string)
Definition: FunNameStack.h:45
virtual double get_threshold(int nshell) const
Get the ionization threshold for a given shell.
ExAtomPhotoAbsCS()
Default constructor.
Definition: PhotoAbsCS.h:455

◆ ~ExAtomPhotoAbsCS()

virtual Heed::ExAtomPhotoAbsCS::~ExAtomPhotoAbsCS ( )
inlinevirtual

Destructor.

Definition at line 538 of file PhotoAbsCS.h.

538{}

Member Function Documentation

◆ copy()

virtual ExAtomPhotoAbsCS * Heed::ExAtomPhotoAbsCS::copy ( ) const
inlinevirtual

Implements Heed::AtomPhotoAbsCS.

Definition at line 452 of file PhotoAbsCS.h.

452{ return new ExAtomPhotoAbsCS(*this); }

◆ get_ACS() [1/2]

double Heed::ExAtomPhotoAbsCS::get_ACS ( double  energy) const
virtual

Photo-absorption cross-section [Mbarn] at a given energy [MeV]. The photo-absorption cross-section can include excitation.

Implements Heed::AtomPhotoAbsCS.

Definition at line 1707 of file PhotoAbsCS.cpp.

1707 {
1708 mfunname("double ExAtomPhotoAbsCS::get_ACS(double energy) const");
1709 double s = 0.0;
1710 for (int n = 0; n < qshell; ++n) {
1711 if (s_ignore_shell[n]) continue;
1712 double shift = 0.0;
1713 const double t = m_acs[n]->get_threshold();
1714 if (minimal_threshold > 0.0) {
1715 if (t < minimal_threshold) shift = minimal_threshold - t;
1716 }
1717 s += m_acs[n]->get_CS(energy - shift);
1718 }
1719 if (energy >= exener[0] && energy <= exener[1]) s += height_of_excitation;
1720 return s;
1721}

◆ get_ACS() [2/2]

double Heed::ExAtomPhotoAbsCS::get_ACS ( int  nshell,
double  energy 
) const
virtual

Sub-shell photo-absorption cross-section [Mbarn] at a given energy [MeV].

Implements Heed::AtomPhotoAbsCS.

Definition at line 1741 of file PhotoAbsCS.cpp.

1741 {
1742 mfunname("double ExAtomPhotoAbsCS::get_ACS(int nshell, double energy)");
1743 check_econd21(nshell, < 0 ||, > qshell, mcerr);
1744 if (s_ignore_shell[nshell]) return 0.;
1745 double shift = 0.0;
1746 const double t = m_acs[nshell]->get_threshold();
1747 if (minimal_threshold > 0.0) {
1748 if (t < minimal_threshold) shift = minimal_threshold - t;
1749 }
1750 double s = m_acs[nshell]->get_CS(energy - shift);
1751 if (nshell == qshell - 1 && energy >= exener[0] && energy <= exener[1]) {
1753 }
1754 return s;
1755}

◆ get_ICS() [1/2]

double Heed::ExAtomPhotoAbsCS::get_ICS ( double  energy) const
virtual

Photo-ionization cross-section [Mbarn] at a given energy [MeV]. The photo-ionization cross-section does not include excitation.

Implements Heed::AtomPhotoAbsCS.

Definition at line 1651 of file PhotoAbsCS.cpp.

1651 {
1652 mfunname("double ExAtomPhotoAbsCS::get_ACS(double energy) const");
1653 double s = 0.0;
1654 for (int n = 0; n < qshell; ++n) {
1655 if (s_ignore_shell[n]) continue;
1656 double shift = 0.0;
1657 const double t = m_acs[n]->get_threshold();
1658 if (minimal_threshold > 0.0) {
1659 if (t < minimal_threshold) shift = minimal_threshold - t;
1660 }
1661 s += m_acs[n]->get_CS(energy - shift);
1662 }
1663 return s;
1664}

◆ get_ICS() [2/2]

double Heed::ExAtomPhotoAbsCS::get_ICS ( int  nshell,
double  energy 
) const
virtual

Sub-shell photo-ionization cross-section at a given energy.

Implements Heed::AtomPhotoAbsCS.

Definition at line 1682 of file PhotoAbsCS.cpp.

1682 {
1683 mfunname("double ExAtomPhotoAbsCS::get_ICS(int nshell, double energy) const");
1684 check_econd21(nshell, < 0 ||, > qshell, mcerr);
1685 if (s_ignore_shell[nshell]) return 0.;
1686 double shift = 0.0;
1687 const double t = m_acs[nshell]->get_threshold();
1688 if (minimal_threshold > 0.0) {
1689 if (t < minimal_threshold) shift = minimal_threshold - t;
1690 }
1691 return m_acs[nshell]->get_CS(energy - shift);
1692}

◆ get_integral_ACS() [1/2]

double Heed::ExAtomPhotoAbsCS::get_integral_ACS ( double  energy1,
double  energy2 
) const
virtual

Integrated photo-absorption cross-section overa given interval.

Implements Heed::AtomPhotoAbsCS.

Definition at line 1723 of file PhotoAbsCS.cpp.

1724 {
1725 mfunname("double ExAtomPhotoAbsCS::get_integral_ACS(...) const");
1726 double s = 0.0;
1727 for (int n = 0; n < qshell; ++n) {
1728 if (s_ignore_shell[n]) continue;
1729 double shift = 0.0;
1730 const double t = m_acs[n]->get_threshold();
1731 if (minimal_threshold > 0.0) {
1732 if (t < minimal_threshold) shift = minimal_threshold - t;
1733 }
1734 s += m_acs[n]->get_integral_CS(energy1 - shift, energy2 - shift);
1735 }
1736 double b[2] = {std::max(exener[0], energy1), std::min(exener[1], energy2)};
1737 if (b[1] >= b[0]) s += height_of_excitation * (b[1] - b[0]);
1738 return s;
1739}

Referenced by ExAtomPhotoAbsCS(), and print().

◆ get_integral_ACS() [2/2]

double Heed::ExAtomPhotoAbsCS::get_integral_ACS ( int  nshell,
double  energy1,
double  energy2 
) const
virtual

Integrated sub-shell photo-absorption cross-section.

Implements Heed::AtomPhotoAbsCS.

Definition at line 1757 of file PhotoAbsCS.cpp.

1758 {
1759 mfunname("double ExAtomPhotoAbsCS::get_integral_ACS(int nshell, ...) const");
1760 check_econd21(nshell, < 0 ||, > qshell, mcerr);
1761 if (s_ignore_shell[nshell]) return 0.;
1762 double shift = 0.0;
1763 const double t = m_acs[nshell]->get_threshold();
1764 if (minimal_threshold > 0.0) {
1765 if (t < minimal_threshold) shift = minimal_threshold - t;
1766 }
1767 double s = m_acs[nshell]->get_integral_CS(energy1 - shift, energy2 - shift);
1768 if (nshell == qshell - 1) {
1769 double b[2] = {std::max(exener[0], energy1), std::min(exener[1], energy2)};
1770 if (b[1] >= b[0]) s += height_of_excitation * (b[1] - b[0]);
1771 }
1772 return s;
1773}

◆ get_integral_ICS() [1/2]

double Heed::ExAtomPhotoAbsCS::get_integral_ICS ( double  energy1,
double  energy2 
) const
virtual

Integrated photo-ionization cross-section over a given interval.

Implements Heed::AtomPhotoAbsCS.

Definition at line 1666 of file PhotoAbsCS.cpp.

1667 {
1668 mfunname("double ExAtomPhotoAbsCS::get_integral_ICS(double energy) const");
1669 double s = 0.0;
1670 for (int n = 0; n < qshell; ++n) {
1671 if (s_ignore_shell[n]) continue;
1672 double shift = 0.0;
1673 const double t = m_acs[n]->get_threshold();
1674 if (minimal_threshold > 0.0) {
1675 if (t < minimal_threshold) shift = minimal_threshold - t;
1676 }
1677 s += m_acs[n]->get_integral_CS(energy1 - shift, energy2 - shift);
1678 }
1679 return s;
1680}

Referenced by ExAtomPhotoAbsCS(), and print().

◆ get_integral_ICS() [2/2]

double Heed::ExAtomPhotoAbsCS::get_integral_ICS ( int  nshell,
double  energy1,
double  energy2 
) const
virtual

Integrated sub-shell photo-ionization cross-section.

Implements Heed::AtomPhotoAbsCS.

Definition at line 1694 of file PhotoAbsCS.cpp.

1695 {
1696 mfunname("double ExAtomPhotoAbsCS::get_integral_ICS(int nshell, ...) const");
1697 check_econd21(nshell, < 0 ||, > qshell, mcerr);
1698 if (s_ignore_shell[nshell]) return 0.;
1699 double shift = 0.0;
1700 const double t = m_acs[nshell]->get_threshold();
1701 if (minimal_threshold > 0.0) {
1702 if (t < minimal_threshold) shift = minimal_threshold - t;
1703 }
1704 return m_acs[nshell]->get_integral_CS(energy1 - shift, energy2 - shift);
1705}

◆ get_main_shell_number()

virtual int Heed::ExAtomPhotoAbsCS::get_main_shell_number ( int  nshell) const
inlinevirtual

Return the shell number (1, 2, ...) for a given index. The number is taken from the shell name. If the shell number cannot be determined, the function returns -1.

Implements Heed::AtomPhotoAbsCS.

Definition at line 445 of file PhotoAbsCS.h.

445 {
446 return m_acs[nshell]->get_number();
447 }

◆ get_threshold()

double Heed::ExAtomPhotoAbsCS::get_threshold ( int  nshell) const
virtual

Get the ionization threshold for a given shell.

Implements Heed::AtomPhotoAbsCS.

Definition at line 1641 of file PhotoAbsCS.cpp.

1641 {
1642 mfunname("double ExAtomPhotoAbsCS::get_threshold(int nshell) const");
1643 check_econd21(nshell, < 0 ||, > qshell, mcerr);
1644 double r = m_acs[nshell]->get_threshold();
1645 if (minimal_threshold > 0.0) {
1647 }
1648 return r;
1649}

Referenced by ExAtomPhotoAbsCS().

◆ print()

void Heed::ExAtomPhotoAbsCS::print ( std::ostream &  file,
int  l 
) const
virtual

Reimplemented from Heed::AtomPhotoAbsCS.

Definition at line 1775 of file PhotoAbsCS.cpp.

1775 {
1776 if (l <= 0) return;
1777 Ifile << "ExAtomPhotoAbsCS(l=" << l << "): name=" << name << " Z = " << Z
1778 << " qshell = " << qshell << std::endl;
1779 indn.n += 2;
1780 Ifile << "threshold_file_name=" << threshold_file_name << '\n';
1781 Ifile << "simple_table_file_name=" << simple_table_file_name << '\n';
1782 Ifile << "BT_file_name=" << BT_file_name << std::endl;
1783 Ifile << "Thomas_sum_rule_const_Mb * Z = " << Thomas_sum_rule_const_Mb* Z
1784 << '\n';
1785 Ifile << "integ_abs_before_corr = " << integ_abs_before_corr << '\n';
1786 Ifile << "integ_abs_after_corr = " << integ_abs_after_corr << '\n';
1787 Ifile << "integ_ioniz_after_corr = " << integ_ioniz_after_corr << '\n';
1788 Ifile << "height_of_excitation=" << height_of_excitation
1789 << " exener=" << exener[0] << ' ' << exener[1] << '\n';
1791 Ifile << "integrals by shells:\n";
1792 Ifile << "nshell, int(acs), int(ics)\n";
1793 for (long n = 0; n < qshell; n++) {
1794 double ainteg = get_integral_ACS(n, 0.0, DBL_MAX);
1795 double iinteg = get_integral_ICS(n, 0.0, DBL_MAX);
1796 Ifile << n << " " << ainteg << " " << iinteg << '\n';
1797 }
1798
1799 if (l > 1) {
1800 l--;
1801 indn.n += 2;
1802 for (long n = 0; n < qshell; ++n) {
1803 Ifile << "nshell=" << n << std::endl;
1804 m_acs[n]->print(file, l);
1805 }
1806 AtomPhotoAbsCS::print(file, l);
1807 indn.n -= 2;
1808 }
1809 indn.n -= 2;
1810}
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:635
indentation indn
Definition: prstream.cpp:15
#define Ifile
Definition: prstream.h:196
#define Iprintn(file, name)
Definition: prstream.h:205

◆ replace_shells_by_average()

void Heed::ExAtomPhotoAbsCS::replace_shells_by_average ( double  fwidth,
double  fstep,
long  fmax_q_step 
)

Definition at line 1812 of file PhotoAbsCS.cpp.

1813 {
1814 mfunname("void ExAtomPhotoAbsCS::replace_shells_by_average(...)");
1815 for (long n = 0; n < qshell; n++) {
1816 if (!m_acs[n]) continue;
1817 PhotoAbsCS* a =
1818 new AveragePhotoAbsCS(m_acs[n].get(), fwidth, fstep, fmax_q_step);
1819 m_acs[n].reset(a);
1820 }
1821}

Member Data Documentation

◆ BT_file_name

std::string Heed::ExAtomPhotoAbsCS::BT_file_name
protected

Definition at line 543 of file PhotoAbsCS.h.

Referenced by ExAtomPhotoAbsCS(), and print().

◆ exener

double Heed::ExAtomPhotoAbsCS::exener[2]
protected

Boundaries of excitation.

Definition at line 555 of file PhotoAbsCS.h.

Referenced by ExAtomPhotoAbsCS(), get_ACS(), get_integral_ACS(), and print().

◆ height_of_excitation

double Heed::ExAtomPhotoAbsCS::height_of_excitation
protected

Excitation cross-section (assumed in the lowest shell).

Definition at line 553 of file PhotoAbsCS.h.

Referenced by ExAtomPhotoAbsCS(), get_ACS(), get_integral_ACS(), and print().

◆ integ_abs_after_corr

double Heed::ExAtomPhotoAbsCS::integ_abs_after_corr
protected

Definition at line 550 of file PhotoAbsCS.h.

Referenced by ExAtomPhotoAbsCS(), and print().

◆ integ_abs_before_corr

double Heed::ExAtomPhotoAbsCS::integ_abs_before_corr
protected

Definition at line 549 of file PhotoAbsCS.h.

Referenced by ExAtomPhotoAbsCS(), and print().

◆ integ_ioniz_after_corr

double Heed::ExAtomPhotoAbsCS::integ_ioniz_after_corr
protected

Definition at line 551 of file PhotoAbsCS.h.

Referenced by ExAtomPhotoAbsCS(), and print().

◆ m_acs

std::vector<std::shared_ptr<PhotoAbsCS> > Heed::ExAtomPhotoAbsCS::m_acs
protected

Ionization cross-section (the name acs is misleading). Excitations are added separately as height_of_excitation.

Definition at line 546 of file PhotoAbsCS.h.

Referenced by ExAtomPhotoAbsCS(), get_ACS(), get_ICS(), get_integral_ACS(), get_integral_ICS(), get_main_shell_number(), get_threshold(), print(), and replace_shells_by_average().

◆ minimal_threshold

double Heed::ExAtomPhotoAbsCS::minimal_threshold
protected

◆ s_add_excitations_to_normalize

const int Heed::ExAtomPhotoAbsCS::s_add_excitations_to_normalize = 1
staticprotected

Flag whether to add excitations. If 0 excitations will not be added (useful for debugging and for checking the effect produced by adding excitations). For real work, this variable should always be set to 1.

Definition at line 569 of file PhotoAbsCS.h.

Referenced by ExAtomPhotoAbsCS().

◆ s_scale_to_normalize_if_more

const int Heed::ExAtomPhotoAbsCS::s_scale_to_normalize_if_more = 1
staticprotected

Definition at line 570 of file PhotoAbsCS.h.

Referenced by ExAtomPhotoAbsCS().

◆ simple_table_file_name

std::string Heed::ExAtomPhotoAbsCS::simple_table_file_name
protected

Definition at line 542 of file PhotoAbsCS.h.

Referenced by print().

◆ threshold_file_name

std::string Heed::ExAtomPhotoAbsCS::threshold_file_name
protected

Definition at line 541 of file PhotoAbsCS.h.

Referenced by ExAtomPhotoAbsCS(), and print().


The documentation for this class was generated from the following files: