17 2 * CLHEP::pi2 * CLHEP::fine_structure_const / CLHEP::electron_mass_c2;
51 PhotoAbsCS(
const std::string& fname,
int fZ,
double fthreshold);
66 virtual double get_CS(
double energy)
const = 0;
70 virtual void scale(
double fact) = 0;
72 virtual void print(std::ostream& file,
int l)
const;
84 std::shared_ptr<PhotoAbsCS> real_pacs;
109 double get_CS(
double energy)
const override;
112 void scale(
double fact)
override;
114 void print(std::ostream& file,
int l)
const override;
129 double get_CS(
double energy)
const override;
131 void scale(
double fact)
override;
133 void print(std::ostream& file,
int l)
const override;
139 double prefactor = 1.;
166 const std::string& ffile_name);
169 const std::vector<double>& fener,
170 const std::vector<double>& fcs);
176 int l,
double E0,
double yw,
double ya,
double P,
191 double get_CS(
double energy)
const override;
195 void scale(
double fact)
override;
196 void print(std::ostream& file,
int l)
const override;
203 std::string file_name;
205 std::vector<double> ener;
207 std::vector<double> cs;
222 double fpower = 2.75);
226 double get_CS(
double energy)
const override;
228 void scale(
double fact)
override;
229 void print(std::ostream& file,
int l)
const override;
259 int get_channel(std::vector<double>& felectron_energy,
260 std::vector<double>& fphoton_energy)
const;
271 const std::vector<double>& felectron_energy,
272 const std::vector<double>& fphoton_energy,
275 void print(std::ostream& file,
int l)
const;
301 virtual double get_ACS(
double energy)
const = 0;
305 virtual double get_ACS(
int nshell,
double energy)
const = 0;
308 double energy2)
const = 0;
312 virtual double get_ICS(
double energy)
const = 0;
317 virtual double get_TICS(
double energy,
318 double factual_minimal_threshold)
const;
323 double factual_minimal_threshold)
const;
325 virtual double get_ICS(
int nshell,
double energy)
const = 0;
327 virtual double get_TICS(
int nshell,
double energy,
328 double factual_minimal_threshold)
const;
331 double energy2)
const = 0;
334 double factual_minimal_threshold)
const;
350 std::vector<double>& el_energy,
351 std::vector<double>& ph_energy)
const;
362 virtual void print(std::ostream& file,
int l)
const;
381 std::vector<AtomicSecondaryProducts>
asp;
402 virtual double get_ACS(
double energy)
const;
404 virtual double get_ACS(
int nshell,
double energy)
const;
406 double energy2y)
const;
407 virtual double get_ICS(
double energy)
const;
409 virtual double get_ICS(
int nshell,
double energy)
const;
411 double energy2)
const;
414 return m_acs[nshell]->get_number();
416 virtual void print(std::ostream& file,
int l)
const;
424 std::vector<std::shared_ptr<PhotoAbsCS> >
m_acs;
433 virtual double get_ACS(
double energy)
const;
435 virtual double get_ACS(
int nshell,
double energy)
const;
437 double energy2)
const;
439 virtual double get_ICS(
double energy)
const;
441 virtual double get_ICS(
int nshell,
double energy)
const;
443 double energy2)
const;
446 return m_acs[nshell]->get_number();
451 virtual void print(std::ostream& file,
int l)
const;
470 const std::string& fsimple_table_file_name,
471 const std::string& fname =
"none",
472 double fminimal_threshold = 0.0);
489 const std::string& fBT_file_name,
int id,
490 double fminimal_threshold = 0.0);
509 const std::string& fFitBT_file_name,
510 int id,
int s_no_scale,
511 double fminimal_threshold = 0.0);
534 const std::string& fFitBT_file_name,
535 const std::string& fsimple_table_file_name,
double emax_repl,
536 int id,
double fminimal_threshold = 0.0);
546 std::vector<std::shared_ptr<PhotoAbsCS> >
m_acs;
577#define CALC_W_USING_CHARGES
602 double get_ACS(
double energy)
const;
606 double get_ICS(
double energy)
const;
636 void print(std::ostream& file,
int l)
const;
641 std::vector<int> qatom_ps;
642 std::vector<const AtomPhotoAbsCS*> atom;
648std::ostream&
operator<<(std::ostream& file,
const MolecPhotoAbsCS& f);
Atomic photoabsorption cross-section abstract base class.
AtomPhotoAbsCS()
Default constructor.
std::vector< bool > s_ignore_shell
virtual void remove_shell(int nshell)
Deactivate a sub-shell. Set s_ignore_shell flag to true.
std::string name
Name of the atom.
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_ICS(double energy1, double energy2) const =0
Integrated photo-ionization cross-section over a given interval.
virtual int get_main_shell_number(int nshell) const =0
virtual double get_ICS(int nshell, double energy) const =0
Sub-shell photo-ionization cross-section at a given energy.
virtual void print(std::ostream &file, int l) const
virtual double get_TICS(double energy, double factual_minimal_threshold) const
int get_Z() const
Get the atomic number.
virtual double get_threshold(int nshell) const =0
Get the ionization threshold for a given shell.
virtual double get_ICS(double energy) const =0
virtual AtomPhotoAbsCS * copy() const =0
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_TICS(double energy1, double energy2, double factual_minimal_threshold) const
Integral photo-ionization cross-section with redefined threshold.
virtual void restore_shell(int nshell)
Activate a sub-shell. Set s_ignore_shell flag to false.
virtual double get_integral_ACS(int nshell, double energy1, double energy2) const =0
Integrated sub-shell photo-absorption cross-section.
virtual double get_integral_ICS(int nshell, double energy1, double energy2) const =0
Integrated sub-shell photo-ionization cross-section.
int qshell
Number of shells.
unsigned int get_qshell() const
Get the number of shells.
virtual void get_escape_particles(const int nshell, double energy, std::vector< double > &el_energy, std::vector< double > &ph_energy) const
std::vector< AtomicSecondaryProducts > asp
Sampling of relaxation products for each shell.
AtomicSecondaryProducts * get_asp(int nshell)
virtual double get_integral_ACS(double energy1, double energy2) const =0
Integrated photo-absorption cross-section overa given interval.
~AtomicSecondaryProducts()
Destructor.
int get_channel(std::vector< double > &felectron_energy, std::vector< double > &fphoton_energy) const
AtomicSecondaryProducts()
Constructor.
void print(std::ostream &file, int l) const
std::vector< std::vector< double > > electron_energy
std::vector< std::vector< double > > photon_energy
void add_channel(double fchannel_prob_dens, const std::vector< double > &felectron_energy, const std::vector< double > &fphoton_energy, int s_all_rest=0)
std::vector< double > channel_prob_dens
Smoothed/smeared photoabsorption cross-section.
void scale(double fact) override
Multiply by some factor. Can be useful for debugging and other purposes.
AveragePhotoAbsCS * copy() const override
double get_CS(double energy) const override
Retrieve cross-section [Mb] at a given energy [MeV].
AveragePhotoAbsCS()
Default constructor.
void print(std::ostream &file, int l) const override
double get_integral_CS(double energy1, double energy2) const override
Retrieve integral cross-section [Mb * MeV] in a given interval [MeV].
virtual ~AveragePhotoAbsCS()
Destructor.
Atomic photo-absorption with excitation.
double integ_abs_before_corr
void replace_shells_by_average(double fwidth, double fstep, long fmax_q_step)
virtual int get_main_shell_number(int nshell) const
double height_of_excitation
Excitation cross-section (assumed in the lowest shell).
virtual double get_threshold(int nshell) const
Get the ionization threshold for a given shell.
static const int s_add_excitations_to_normalize
virtual ExAtomPhotoAbsCS * copy() const
double exener[2]
Boundaries of excitation.
std::vector< std::shared_ptr< PhotoAbsCS > > m_acs
double integ_ioniz_after_corr
virtual double get_integral_ACS(double energy1, double energy2) const
Integrated photo-absorption cross-section overa given interval.
virtual double get_ACS(double energy) const
static const int s_scale_to_normalize_if_more
std::string threshold_file_name
virtual ~ExAtomPhotoAbsCS()
Destructor.
ExAtomPhotoAbsCS()
Default constructor.
std::string simple_table_file_name
virtual void print(std::ostream &file, int l) const
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.
double integ_abs_after_corr
void scale(double fact) override
Multiply by some factor. Can be useful for debugging and other purposes.
HydrogenPhotoAbsCS()
Constructor.
virtual ~HydrogenPhotoAbsCS()
Destructor.
double get_integral_CS(double energy1, double energy2) const override
Retrieve integral cross-section [Mb * MeV] in a given interval [MeV].
double get_CS(double energy) const override
Retrieve cross-section [Mb] at a given energy [MeV].
void print(std::ostream &file, int l) const override
HydrogenPhotoAbsCS * copy() const override
size_t get_total_Z() const
Sum up the atomic numbers of all atoms in the molecule.
double get_ACS(double energy) const
Photo-absorption cross-section [Mbarn] at a given energy [MeV].
double get_W() const
Retrieve W value [MeV].
int get_qatom_ps(const int n) const
Number of atoms of a particular sort in the molecule.
double get_ICS(double energy) const
Photo-ionization cross-section [Mbarn] at a given energy [MeV].
const AtomPhotoAbsCS * get_atom(const int n)
double get_integral_ICS(double energy1, double energy2) const
Integral photo-ionization cross-section.
MolecPhotoAbsCS()=default
Default constructor.
double get_F() const
Retrieve Fano factor.
double get_integral_ACS(double energy1, double energy2) const
Integral photo-absorption cross-section.
void print(std::ostream &file, int l) const
int get_qatom() const
Total number of atoms of all sorts in the molecule.
~MolecPhotoAbsCS()
Destructor.
Simple phenomenological CS for any shell (analytic formula).
virtual ~PhenoPhotoAbsCS()
Destructor.
void print(std::ostream &file, int l) const override
void scale(double fact) override
Multiply by some factor. Can be useful for debugging and other purposes.
double get_integral_CS(double energy1, double energy2) const override
Retrieve integral cross-section [Mb * MeV] in a given interval [MeV].
double get_CS(double energy) const override
Retrieve cross-section [Mb] at a given energy [MeV].
PhenoPhotoAbsCS()
Default constructor.
PhenoPhotoAbsCS * copy() const override
PhotoAbsCS()
Default constructor.
double get_threshold() const
Return the threshold energy.
virtual void print(std::ostream &file, int l) const
virtual double get_integral_CS(double energy1, double energy2) const =0
Retrieve integral cross-section [Mb * MeV] in a given interval [MeV].
virtual ~PhotoAbsCS()
Destructor.
virtual double get_CS(double energy) const =0
Retrieve cross-section [Mb] at a given energy [MeV].
virtual PhotoAbsCS * copy() const =0
virtual void scale(double fact)=0
Multiply by some factor. Can be useful for debugging and other purposes.
const std::string & get_name() const
Name of this shell or atom.
int get_number() const
Number of this shell.
virtual SimpleAtomPhotoAbsCS * copy() const
SimpleAtomPhotoAbsCS()
Default constructor.
std::vector< std::shared_ptr< PhotoAbsCS > > m_acs
virtual double get_ACS(double energy) const
virtual int get_main_shell_number(int nshell) const
virtual void print(std::ostream &file, int l) const
std::string file_name
Filename (saved for printing).
virtual double get_integral_ACS(double energy1, double energy2) const
Integrated photo-absorption cross-section overa given interval.
virtual double get_integral_ICS(double energy1, double energy2) const
Integrated photo-ionization cross-section over a given interval.
virtual double get_threshold(int nshell) const
Get the ionization threshold for a given shell.
virtual double get_ICS(double energy) const
virtual ~SimpleAtomPhotoAbsCS()
Destructor.
void remove_leading_tiny(double level)
void print(std::ostream &file, int l) const override
double get_integral_CS(double energy1, double energy2) const override
Retrieve integral cross-section [Mb * MeV] in a given interval [MeV].
virtual ~SimpleTablePhotoAbsCS()
Destructor.
SimpleTablePhotoAbsCS()=default
Default constructor.
void scale(double fact) override
Multiply by some factor. Can be useful for debugging and other purposes.
SimpleTablePhotoAbsCS * copy() const override
double get_CS(double energy) const override
Retrieve cross-section [Mb] at a given energy [MeV].
const std::vector< double > & get_arr_CS() const
const std::vector< double > & get_arr_ener() const
void remove_leading_zeros()
Remove points with zero cross-section from the table.
constexpr double Thomas_sum_rule_const_Mb
TRK sum rule [Mb * MeV].
std::ostream & operator<<(std::ostream &file, const BGMesh &bgm)
constexpr double coef_I_to_W
constexpr double Thomas_sum_rule_const
TRK sum rule [1/MeV], constant per one electron.
constexpr double low_boundary_of_excitations
constexpr double C1_MEV2_BN
constexpr double standard_factor_Fano