Garfield++ 4.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 = 0.
 
double integ_abs_after_corr = 0.
 
double integ_ioniz_after_corr = 0.
 
double height_of_excitation = 0.
 Excitation cross-section (assumed in the lowest shell).
 
double exener [2] = {0., 0.}
 Boundaries of excitation.
 
double minimal_threshold = 0.
 
- 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 1027 of file PhotoAbsCS.cpp.

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

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

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

◆ 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 1567 of file PhotoAbsCS.cpp.

1571 {
1572 mfunname("ExAtomPhotoAbsCS::ExAtomPhotoAbsCS(...)");
1573 Z = fZ;
1574 name = fname;
1575 int s_no_scale = 1;
1576 *this = ExAtomPhotoAbsCS(fZ, fname, fFitBT_file_name, id, s_no_scale,
1577 fminimal_threshold);
1578
1580 exener[0] = exener[1] = 0.0;
1581
1582 double thrmin = DBL_MAX;
1583 long nsmin = -1;
1584 // Look for minimal shell (usually the last).
1585 for (long ns = 0; ns < qshell; ++ns) {
1586 if (thrmin > m_acs[ns]->get_threshold()) {
1587 nsmin = ns;
1588 thrmin = m_acs[ns]->get_threshold();
1589 }
1590 }
1591 check_econd11(nsmin, < 0, mcerr);
1592 check_econd11(nsmin, != qshell - 1, mcerr);
1593
1594 PhotoAbsCS* apacs = m_acs[nsmin].get();
1595 auto first_shell = dynamic_cast<SimpleTablePhotoAbsCS*>(apacs);
1596 check_econd11(first_shell, == nullptr, mcerr);
1597
1598 SimpleTablePhotoAbsCS stpacs(name, Z, 0.0, fsimple_table_file_name);
1599 stpacs.remove_leading_tiny(1.0e-10);
1600
1601 // Merging shells:
1602 SimpleTablePhotoAbsCS* merged = new SimpleTablePhotoAbsCS(*first_shell, stpacs, emax_repl);
1603 m_acs[nsmin].reset(merged);
1604
1605 s_ignore_shell.resize(qshell, false);
1607 exener[0] = exener[1] = 0.0;
1608 double integ = get_integral_ACS(0.0, DBL_MAX);
1609 integ_abs_before_corr = integ;
1610 double pred_integ = Thomas_sum_rule_const_Mb * Z;
1611 if (pred_integ > integ) {
1613 const double thr = m_acs[qshell - 1]->get_threshold();
1614 // add excitation
1616 exener[1] = thr;
1617 height_of_excitation = (pred_integ - integ) / (exener[1] - exener[0]);
1618 if (minimal_threshold > 0.0) {
1619 if (minimal_threshold > thr) {
1620 // currently the minimal shell is the last one
1621 exener[0] += minimal_threshold - thr;
1622 exener[1] += minimal_threshold - thr;
1623 }
1624 }
1625 }
1626 } else {
1628 const double fact = pred_integ / integ;
1629 for (int nshell = 0; nshell < qshell; ++nshell) {
1630 m_acs[nshell]->scale(fact);
1631 }
1632 }
1633 }
1634 integ_abs_after_corr = get_integral_ACS(0.0, DBL_MAX);
1636}
#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 1704 of file PhotoAbsCS.cpp.

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

◆ 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 1738 of file PhotoAbsCS.cpp.

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

◆ 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 1648 of file PhotoAbsCS.cpp.

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

◆ 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 1679 of file PhotoAbsCS.cpp.

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

◆ 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 1720 of file PhotoAbsCS.cpp.

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

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 1754 of file PhotoAbsCS.cpp.

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

◆ 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 1663 of file PhotoAbsCS.cpp.

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

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 1691 of file PhotoAbsCS.cpp.

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

◆ 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 1638 of file PhotoAbsCS.cpp.

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

Referenced by ExAtomPhotoAbsCS().

◆ print()

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

Reimplemented from Heed::AtomPhotoAbsCS.

Definition at line 1772 of file PhotoAbsCS.cpp.

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

◆ replace_shells_by_average()

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

Definition at line 1809 of file PhotoAbsCS.cpp.

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

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] = {0., 0.}
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 = 0.
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 = 0.
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 = 0.
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 = 0.
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 = 0.
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: