Garfield++ v2r0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
PhotoAbsCS.h
Go to the documentation of this file.
1#ifndef PHOTOABSCS_H
2#define PHOTOABSCS_H
3
4#include <vector>
5#include <fstream>
6#include <cmath>
7#include <cfloat>
8#include <climits>
12
13namespace Heed {
14
15/// TRK sum rule [1/MeV], constant per one electron.
17 2 * CLHEP::pi2 * CLHEP::fine_structure_const / CLHEP::electron_mass_c2;
18/// TRK sum rule [Mb * MeV].
21
22/// Photoabsorption cross-section base class.
23///
24/// The literature data on photoabsorption cross section are fragmentar and
25/// not always consistent. This class hierarchy is designed to
26/// gather them in a consistent library.
27/// The principle is ordinary: definition of an abstract class
28/// which defines the interface available for the rest of program,
29/// and definition of derived classes with this or that realization.
30/// To the contrary with wcpplib/matter, there is no any global "database"
31/// and no formal ban to duplicate these definitions.
32/// So these are simple classes determining photoabsorption
33/// cross sections for atomic shells, for atoms, and for molecules.
34/// Also the atomic relaxation cascades are defined.
35/// The system requires some memory for keeping data, and some disk files
36/// with input information. It takes some time for initializations, so
37/// it is not intended to be used in a loop.
38/// In the fortran version of HEED, the equivalent data structure
39/// kept in a common block was depending on energy mesh.
40/// But in this C++ version it was found possible to avoid this dependence.
41/// The data are kept and handled as is, without unnecessary conversions.
42/// This improves precision of handling energies near ionization thresholds.
43///
44/// 2004, I. Smirnov
45
47 public:
48 /// Default constructor.
49 PhotoAbsCS();
50 /// Constructor
51 PhotoAbsCS(const std::string& fname, int fZ, double fthreshold);
52 /// Destructor
53 virtual ~PhotoAbsCS() {}
54
55 /// Name of this shell or atom.
56 const std::string& get_name() const { return name; }
57 /// Number of this shell.
58 int get_number() const { return number; }
59 /// Charge or number of electrons at this shell or in this atom
60 /// (in principle the integral of CS should
61 /// satisfy the Thomas-Reiche-Kuhn sum rule).
62 int get_Z() const { return Z; }
63 /// Return the threshold energy.
64 double get_threshold() const { return threshold; }
65 /// Retrieve cross-section [Mb] at a given energy [MeV].
66 virtual double get_CS(double energy) const = 0;
67 /// Retrieve integral cross-section [Mb * MeV] in a given interval [MeV].
68 virtual double get_integral_CS(double energy1, double energy2) const = 0;
69 /// Multiply by some factor. Can be useful for debugging and other purposes.
70 virtual void scale(double fact) = 0;
71
72 virtual void print(std::ostream& file, int l) const;
73 virtual PhotoAbsCS* copy() const = 0;
74
75 protected:
76 std::string name;
77 int number;
78 int Z;
79 double threshold; // in MeV
80};
81
82/// Smoothed/smeared photoabsorption cross-section
84 ActivePtr<PhotoAbsCS> real_pacs;
85 double width;
86 /// Max. number of integration steps (in get_integral_CS).
87 /// If real q is more, the function calls PhotoAbsCs::get_integral_CS.
88 long max_q_step;
89 /// Integration step, for example, 1/20 from width.
90 double step;
91
92 public:
93 /// Default constructor.
95 /** Constructor.
96 * \param apacs
97 photoabsorption cross-section
98 * \param fwidth
99 width [MeV] for smoothing
100 * \param fstep
101 step size [MeV] for numerical integration
102 * \param fmax_q_step
103 max number of integration steps
104 */
105 AveragePhotoAbsCS(PhotoAbsCS* apacs, double fwidth, double fstep,
106 long fmax_q_step);
107 /// Destructor
109 virtual double get_CS(double energy) const;
110 virtual double get_integral_CS(double energy1, double energy2) const;
111
112 virtual void scale(double fact);
113
114 virtual void print(std::ostream& file, int l) const;
115 virtual AveragePhotoAbsCS* copy() const {
116 return new AveragePhotoAbsCS(*this);
117 }
118};
119
120/// Hydrogen: empirical fit of Kosarev & Podoliak.
121/// Original formula for molecular hydrogen.
122/// Since this class for separated shell, we divide the molecular CS by two.
124 public:
125 /// Constructor
127 /// Destructor
129 virtual double get_CS(double energy) const;
130 virtual double get_integral_CS(double energy1, double energy2) const;
131 virtual void scale(double fact);
132
133 virtual void print(std::ostream& file, int l) const;
134 virtual HydrogenPhotoAbsCS* copy() const {
135 return new HydrogenPhotoAbsCS(*this);
136 }
137
138 private:
139 double prefactor;
140};
141
142/// Typically this is for reading Experimental CS, for example of argon,
143/// as if there is one shell.
144/// File is two-column table, the first row is energy in eV,
145/// the second one is CS in Mbarn.
146/// The points are understood as local points.
147/// The interpolation between them are either straight or by power
148/// function.
149/// the choice is determined by function sign_nonlinear_interpolation
150/// (see above).
151/// If the first point is not zero cross section,
152/// and the threshold is to the left,
153/// the straight extrapolation is performed from the two edge points.
154/// The extrapolation to the right is performed to the end of
155/// the energy mesh by power function with power -2.75.
156/// The minimal number of points is 2, as in PointCoorMesh from tline.h
157/// The zero number of points is allowed as well.
158/// Then the cross section is assumed to be zero.
159
161 public:
162 /// Default constructor.
164 /// Constructor for reading table from file.
165 SimpleTablePhotoAbsCS(const std::string& fname, int fZ, double fthreshold,
166 const std::string& ffile_name);
167 /// Constructor from given energy and cross-section tables.
168 SimpleTablePhotoAbsCS(const std::string& fname, int fZ, double fthreshold,
169 const std::vector<double>& fener,
170 const std::vector<double>& fcs);
171 /// Constructor from fit parameters.
172 /// Fit formula from Band-Band-Trzaskovskaya et al.
173 /// It is difficult to integrate those formulas analytically,
174 /// so I create numerical array and treat it as input data.
175 SimpleTablePhotoAbsCS(const std::string& fname, int fZ, double fthreshold,
176 int l, double E0, double yw, double ya, double P,
177 double sigma);
178 /// Replace part of the cross-section table.
180 const SimpleTablePhotoAbsCS& part, double emax_repl);
181 /// Destructor
183 /// Remove points with zero cross-section from the table.
185 /// Remove points with cross section below a given level from the table.
186 /// The function is designed for Henke tables, which are prepared for database
187 /// with leading values like 1.0e-15 .
188 /// Both functions allow to use the straight interpolation to threshold
189 void remove_leading_tiny(double level);
190
191 virtual double get_CS(double energy) const;
192 virtual double get_integral_CS(double energy1, double energy2) const;
193 const std::vector<double>& get_arr_ener() const { return ener; }
194 const std::vector<double>& get_arr_CS() const { return cs; }
195 virtual void scale(double fact);
196 virtual void print(std::ostream& file, int l) const;
197 virtual SimpleTablePhotoAbsCS* copy() const {
198 return new SimpleTablePhotoAbsCS(*this);
199 }
200
201 private:
202 /// Filename (saved for printing).
203 std::string file_name;
204 /// Table of energies [MeV].
205 std::vector<double> ener;
206 /// Cross-section values at these energies.
207 std::vector<double> cs;
208};
209
210/// Simple phenomenological CS for any shell (analytic formula).
212 public:
213 /// Default constructor.
215 /** Constructor
216 * \param fname name of the shell or atom
217 * \param fZ number of electrons
218 * \param fthreshold threshold level
219 * \param fpower positive number \f$x\f$ in \f$1/E^{-x}\f$
220 */
221 PhenoPhotoAbsCS(const std::string& fname, int fZ, double fthreshold,
222 double fpower = 2.75);
223 /// Destructor.
224 virtual ~PhenoPhotoAbsCS() {}
225 virtual double get_CS(double energy) const;
226 virtual double get_integral_CS(double energy1, double energy2) const;
227 virtual void scale(double fact);
228 virtual void print(std::ostream& file, int l) const;
229 virtual PhenoPhotoAbsCS* copy() const { return new PhenoPhotoAbsCS(*this); }
230
231 private:
232 double power;
233 double factor;
234};
235
236/// Sampling of secondary particles.
237/// The initial photo-electron is not included.
238/// The photo-electron is completely independent on the secondary channel
239/// and it always has an energy equal to transferred energy minus shell energy.
240/// This class proposes particles which can be emitted at filling this shell.
241/// This class can be interpreted as an additional channels for
242/// the default one.
243/// The sum of channel_prob_dens may be less than unity.
244/// The concrete channel for the particular event is sampled by get_channel().
245/// If the random sampling does not point to one of the channels registering
246/// in this class, get_channel returns 0, which must be interpreted as
247/// the use of standard channel.
248
250 public:
251 /// Constructor
254 /// Destructor
256 /// Sample a channel (photon and electron energies in MeV).
257 /// Return 1 if the channel is generated and 0 if not.
258 int get_channel(std::vector<double>& felectron_energy,
259 std::vector<double>& fphoton_energy) const;
260
261 /** Add new decay channel. Should be used at initialization.
262 * \param fchannel_prob_dens probability for this channel.
263 * \param felectron_energy electron energies [MeV]
264 * \param fphoton_energy photon energies [MeV]
265 * \param s_all_rest if 1, the probability of this channel is assigned
266 to that what is left to 1.
267 fchannel_prob_dens is then ignored, it can be just 0.
268 */
269 void add_channel(double fchannel_prob_dens,
270 const std::vector<double>& felectron_energy,
271 const std::vector<double>& fphoton_energy,
272 int s_all_rest = 0);
273
274 virtual void print(std::ostream& file, int l) const;
275
276 protected:
277 // Probability of specific channel.
278 std::vector<double> channel_prob_dens;
279 // Arrays of decay products for each channel.
280 std::vector<std::vector<double> > electron_energy;
281 std::vector<std::vector<double> > photon_energy;
282};
283
284/// Atomic photoabsorption cross-section abstract base class.
286 public:
287 /// Default constructor.
289
290 /// Get the atomic number.
291 int get_Z() const { return Z; }
292 /// Get the number of shells.
293 inline unsigned int get_qshell() const { return qshell; }
294 /// Get the ionization threshold for a given shell.
295 virtual double get_threshold(int nshell) const = 0;
296 /// Get the lowest ionization threshold among all shells.
297 virtual double get_I_min() const;
298 /// Photo-absorption cross-section [Mbarn] at a given energy [MeV].
299 /// The photo-absorption cross-section can include excitation.
300 virtual double get_ACS(double energy) const = 0;
301 /// Integrated photo-absorption cross-section overa given interval.
302 virtual double get_integral_ACS(double energy1, double energy2) const = 0;
303 /// Sub-shell photo-absorption cross-section [Mbarn] at a given energy [MeV].
304 virtual double get_ACS(int nshell, double energy) const = 0;
305 /// Integrated sub-shell photo-absorption cross-section.
306 virtual double get_integral_ACS(int nshell, double energy1,
307 double energy2) const = 0;
308
309 /// Photo-ionization cross-section [Mbarn] at a given energy [MeV].
310 /// The photo-ionization cross-section does not include excitation.
311 virtual double get_ICS(double energy) const = 0;
312 /// Photo-ionization cross-section assuming a redefined ionization threshold.
313 /// This function can be useful for redefining the ionization threshold in
314 /// atomic mixtures, where on atom can transfer excitations to another one
315 /// with lower ionization threshold (Penning/Jesse effect).
316 virtual double get_TICS(double energy,
317 double factual_minimal_threshold) const;
318 /// Integrated photo-ionization cross-section over a given interval.
319 virtual double get_integral_ICS(double energy1, double energy2) const = 0;
320 /// Integral photo-ionization cross-section with redefined threshold.
321 virtual double get_integral_TICS(double energy1, double energy2,
322 double factual_minimal_threshold) const;
323 /// Sub-shell photo-ionization cross-section at a given energy.
324 virtual double get_ICS(int nshell, double energy) const = 0;
325 /// Sub-shell photo-ionization cross-section with redefined threshold.
326 virtual double get_TICS(int nshell, double energy,
327 double factual_minimal_threshold) const;
328 /// Integrated sub-shell photo-ionization cross-section.
329 virtual double get_integral_ICS(int nshell, double energy1,
330 double energy2) const = 0;
331 /// Integrated sub-shell photo-ionization cross-section (redefined threshold).
332 virtual double get_integral_TICS(int nshell, double energy1, double energy2,
333 double factual_minimal_threshold) const;
334
335 /** Sample the electrons and photons emitted following
336 * ionisation of a given shell.
337 * \param nshell
338 shell index
339 * \param energy
340 can be a little bit below threshold
341 * \param el_energy
342 electron energies. The photo-electron is the first one.
343 Later (in HeedPhoton) the photo-electron is emitted in the
344 forward direction. The other are sampled isotropically.
345 * \param ph_energy
346 photon energies
347 */
348 virtual void get_escape_particles(const int nshell, double energy,
349 std::vector<double>& el_energy,
350 std::vector<double>& ph_energy) const;
351
352 /// Return the shell number (1, 2, ...) for a given index.
353 /// The number is taken from the shell name.
354 /// If the shell number cannot be determined, the function returns -1.
355 virtual int get_main_shell_number(int nshell) const = 0;
356
357 /// Deactivate a sub-shell. Set s_ignore_shell flag to true.
358 virtual void remove_shell(int nshell);
359 /// Activate a sub-shell. Set s_ignore_shell flag to false.
360 virtual void restore_shell(int nshell);
361 virtual void print(std::ostream& file, int l) const;
362 virtual AtomPhotoAbsCS* copy() const = 0;
363
364 AtomicSecondaryProducts* get_asp(int nshell);
365
366 protected:
367 /// Name of the atom.
368 std::string name;
369 /// Atomic number.
370 int Z;
371 /// Number of shells.
373 /// Array of flags whether to use a shell (false) or ignore it (true).
374 /// It does not affect threshold and escape sequences.
375 /// By default all elements are set to false.
376 // Assumed manipulate with larger shells, to investigate their
377 // influence at the final characteristics.
378 std::vector<bool> s_ignore_shell;
379 /// Sampling of relaxation products for each shell.
380 std::vector<AtomicSecondaryProducts> asp;
381};
382std::ostream& operator<<(std::ostream& file, const AtomPhotoAbsCS& f);
383
384/// Simple atomic photoabsorption cross-section
385/// (no difference between absorption and ionization).
386
388 public:
389 /// Default constructor.
391 /// Constructor for reading name and shell energies from file.
392 /// Generates the CS by PhenoPhotoAbsCS.
393 SimpleAtomPhotoAbsCS(int fZ, const std::string& ffile_name);
394 /// Constructor with one prepared preliminary shell with Z electrons.
395 /// Convenient for hydrogen.
396 SimpleAtomPhotoAbsCS(int fZ, const PhotoAbsCS& fasc);
397 /// Destructor
399
400 virtual double get_threshold(int nshell) const;
401 virtual double get_ACS(double energy) const;
402 virtual double get_integral_ACS(double energy1, double energy2) const;
403 virtual double get_ACS(int nshell, double energy) const;
404 virtual double get_integral_ACS(int nshell, double energy1,
405 double energy2y) const;
406 virtual double get_ICS(double energy) const;
407 virtual double get_integral_ICS(double energy1, double energy2) const;
408 virtual double get_ICS(int nshell, double energy) const;
409 virtual double get_integral_ICS(int nshell, double energy1,
410 double energy2) const;
411
412 virtual int get_main_shell_number(int nshell) const {
413 return acs[nshell]->get_number();
414 }
415 virtual void print(std::ostream& file, int l) const;
416 virtual SimpleAtomPhotoAbsCS* copy() const {
417 return new SimpleAtomPhotoAbsCS(*this);
418 }
419
420 protected:
421 /// Filename (saved for printing).
422 std::string file_name;
423 std::vector<ActivePtr<PhotoAbsCS> > acs;
424};
425
426const double low_boundary_of_excitations = 0.7; // from ionization threshold
427
428/// Atomic photo-absorption with excitation.
430 public:
431 virtual double get_threshold(int nshell) const;
432 virtual double get_ACS(double energy) const;
433 virtual double get_integral_ACS(double energy1, double energy2) const;
434 virtual double get_ACS(int nshell, double energy) const;
435 virtual double get_integral_ACS(int nshell, double energy1,
436 double energy2) const;
437
438 virtual double get_ICS(double energy) const;
439 virtual double get_integral_ICS(double energy1, double energy2) const;
440 virtual double get_ICS(int nshell, double energy) const;
441 virtual double get_integral_ICS(int nshell, double energy1,
442 double energy2) const;
443
444 virtual int get_main_shell_number(int nshell) const {
445 return acs[nshell]->get_number();
446 }
447
448 // Width [MeV]
449 void replace_shells_by_average(double fwidth, double fstep, long fmax_q_step);
450 virtual void print(std::ostream& file, int l) const;
451 virtual ExAtomPhotoAbsCS* copy() const { return new ExAtomPhotoAbsCS(*this); }
452
453 /// Default constructor.
455
456 /** Constructor,
457 * \param fZ
458 atomic number
459 * \param fthreshold_file_name
460 file from which to read name and shell energies
461 * \param fsimple_table_file_name
462 file from which to read the cross-sections
463 * \param fname
464 name of the atom, if "none" it is taken from fthreshold_file_name
465 * \param fminimal_threshold
466 threshold
467 */
468 ExAtomPhotoAbsCS(int fZ, const std::string& fthreshold_file_name,
469 const std::string& fsimple_table_file_name,
470 const std::string& fname = "none",
471 double fminimal_threshold = 0.0);
472
473 /** Constructor, shells from Band and Thragzkovskaya.
474 * \param fZ
475 atomic number
476 * \param fname
477 name of the atom
478 * \param fBT_file_name
479 file with shell names and energies
480 * \param id
481 1 - old files without fluorescence rate
482 2 - new files with fluorescence rate
483 other values - error
484 * \param fminimal_threshold
485 threshold
486 */
487 ExAtomPhotoAbsCS(int fZ, const std::string& fname,
488 const std::string& fBT_file_name, int id,
489 double fminimal_threshold = 0.0);
490
491 /** Constructor, shells and fit parameters from Band and Thragzkovskaya.
492 * \param fZ
493 atomic number
494 * \param fname
495 name of the atom
496 * \param fFitBT_file_name
497 file with shell names, energies, and fit parameters
498 * \param id
499 1 - old files without fluorescence rate
500 2 - new files with fluorescence rate
501 other values - error
502 * \param s_no_scale
503 scaling is not done, needs for next (?)
504 * \param fminimal_threshold
505 threshold
506 **/
507 ExAtomPhotoAbsCS(int fZ, const std::string& fname,
508 const std::string& fFitBT_file_name,
509 int id, int s_no_scale,
510 double fminimal_threshold = 0.0);
511
512 /** Constructor, combination of Band and Thragzkovskaya fit and Henke tables.
513 * Initialize BT fit and replaces the part of the first shell
514 * from threshold taken from BT- fit to emax_repl by values from the table.
515 * \param fZ
516 atomic number
517 * \param fname
518 name of the atom
519 * \param fFitBT_file_name
520 file with shell names, energies, and fit parameters
521 * \param fsimple_table_file_name
522 file with cross-section table
523 * \param emax_repl
524 energy up to which to use the cross-section table
525 * \param id
526 1 - old files without fluorescence rate
527 2 - new files with fluorescence rate
528 other values - error
529 * \param fminimal_threshold
530 threshold
531 **/
532 ExAtomPhotoAbsCS(int fZ, const std::string& fname,
533 const std::string& fFitBT_file_name,
534 const std::string& fsimple_table_file_name, double emax_repl,
535 int id, double fminimal_threshold = 0.0);
536 /// Destructor.
537 virtual ~ExAtomPhotoAbsCS() {}
538
539 protected:
542 std::string BT_file_name;
543 /// Ionization cross-section (the name acs is misleading).
544 /// Excitations are added separately as height_of_excitation.
545 std::vector<ActivePtr<PhotoAbsCS> > acs;
546
547 // 3 variables for printing listings
551 /// Excitation cross-section (assumed in the lowest shell).
553 /// Boundaries of excitation.
554 double exener[2];
555
556 double minimal_threshold; // make shifts if necessary
557 // The shells are corrected on the minimal_threshold "on the fly".
558 // It the threshold of the atomic shell is less then minimal_threshold,
559 // the difference is subtracted from the energy for which
560 // the cross section is requested.
561 // exener[2] is corrected at initialization in first main constructor.
562 // In the second one there is no implementation of minimal_threshold so far.
563
564 /// Flag whether to add excitations.
565 /// If 0 excitations will not be added (useful for debugging and for checking
566 /// the effect produced by adding excitations). For real work, this variable
567 /// should always be set to 1.
568 static const int s_add_excitations_to_normalize = 1;
569 static const int s_scale_to_normalize_if_more = 1;
570};
571
572//---------------------------------------------------------
573
574const double standard_factor_Fano = 0.19;
575
576#define CALC_W_USING_CHARGES
577// the opposite is just averaging potentials
578// This way is averaging potentials with taking into account charges.
579// So the atom or molecule with larger charge will affect more -
580// this looks much more reasonable.
581// The opposite case is preserved for debug and research purposes.
582// F is calculated by the same way as W
583
584const double coef_I_to_W = 2.0;
585
586/// Molecular photoabsorption cross-section.
587/// Molecules refer to atoms by passive pointers.
588/// If atom is changed, its image for molecule is also changed.
589
591 public:
592 /// Total number of atoms of all sorts in the molecule.
593 int get_qatom() const { return qatom; }
594 /// Number of atoms of a particular sort in the molecule.
595 int get_qatom_ps(const int n) const { return qatom_ps[n]; }
597 return atom[n];
598 }
599
600 /// Photo-absorption cross-section [Mbarn] at a given energy [MeV].
601 virtual double get_ACS(double energy) const;
602 /// Integral photo-absorption cross-section.
603 virtual double get_integral_ACS(double energy1, double energy2) const;
604 /// Photo-ionization cross-section [Mbarn] at a given energy [MeV].
605 virtual double get_ICS(double energy) const;
606 /// Integral photo-ionization cross-section.
607 virtual double get_integral_ICS(double energy1, double energy2) const;
608
609 /// Sum up the atomic numbers of all atoms in the molecule.
610 int get_total_Z() const;
611 /// Retrieve W value [MeV].
612 double get_W() const { return W; }
613 /// Retrieve Fano factor.
614 double get_F() const { return F; }
615
616 /// Default constructor.
617 MolecPhotoAbsCS() : qatom(0) {}
618 /// Constructor for one sort of atoms.
619 /// If fW == 0.0, the program assigns it as 2 * mean(I_min).
620 MolecPhotoAbsCS(const AtomPhotoAbsCS& fatom, int fqatom, double fW = 0.0,
621 double fF = standard_factor_Fano);
622 /// Constructor for two sorts of atoms.
623 /// If fW == 0.0, the program assigns it as 2 * mean(I_min).
624 MolecPhotoAbsCS(const AtomPhotoAbsCS& fatom1, int fqatom_ps1,
625 const AtomPhotoAbsCS& fatom2, int fqatom_ps2, double fW = 0.0,
626 double fF = standard_factor_Fano);
627 /// Constructor for three sorts of atoms.
628 /// If fW == 0.0, the program assigns it as 2 * mean(I_min).
629 MolecPhotoAbsCS(const AtomPhotoAbsCS& fatom1, int fqatom_ps1,
630 const AtomPhotoAbsCS& fatom2, int fqatom_ps2,
631 const AtomPhotoAbsCS& fatom3, int fqatom_ps3, double fW = 0.0,
632 double fF = standard_factor_Fano);
633 /// Destructor
634 virtual ~MolecPhotoAbsCS() {}
635 virtual void print(std::ostream& file, int l) const;
636
637 private:
638 /// Total number of atoms, NOT number of sorts, NOT qel in atom.
639 int qatom;
640 std::vector<int> qatom_ps;
641 std::vector<PassivePtr<const AtomPhotoAbsCS> > atom;
642 /// Mean work per pair production [MeV].
643 double W;
644 /// Fano factor.
645 double F;
646};
647std::ostream& operator<<(std::ostream& file, const MolecPhotoAbsCS& f);
648}
649
650#endif
Active pointer or automatic container or controlling pointer.
Definition: AbsPtr.h:199
Atomic photoabsorption cross-section abstract base class.
Definition: PhotoAbsCS.h:285
AtomPhotoAbsCS()
Default constructor.
Definition: PhotoAbsCS.cpp:580
std::vector< bool > s_ignore_shell
Definition: PhotoAbsCS.h:378
int Z
Atomic number.
Definition: PhotoAbsCS.h:370
virtual void remove_shell(int nshell)
Deactivate a sub-shell. Set s_ignore_shell flag to true.
Definition: PhotoAbsCS.cpp:623
std::string name
Name of the atom.
Definition: PhotoAbsCS.h:368
virtual double get_I_min() const
Get the lowest ionization threshold among all shells.
Definition: PhotoAbsCS.cpp:667
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
Definition: PhotoAbsCS.cpp:635
virtual double get_TICS(double energy, double factual_minimal_threshold) const
Definition: PhotoAbsCS.cpp:582
int get_Z() const
Get the atomic number.
Definition: PhotoAbsCS.h:291
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.
Definition: PhotoAbsCS.cpp:593
virtual void restore_shell(int nshell)
Activate a sub-shell. Set s_ignore_shell flag to false.
Definition: PhotoAbsCS.cpp:629
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.
Definition: PhotoAbsCS.h:372
unsigned int get_qshell() const
Get the number of shells.
Definition: PhotoAbsCS.h:293
virtual void get_escape_particles(const int nshell, double energy, std::vector< double > &el_energy, std::vector< double > &ph_energy) const
Definition: PhotoAbsCS.cpp:675
std::vector< AtomicSecondaryProducts > asp
Sampling of relaxation products for each shell.
Definition: PhotoAbsCS.h:380
AtomicSecondaryProducts * get_asp(int nshell)
Definition: PhotoAbsCS.cpp:853
virtual double get_integral_ACS(double energy1, double energy2) const =0
Integrated photo-absorption cross-section overa given interval.
int get_channel(std::vector< double > &felectron_energy, std::vector< double > &fphoton_energy) const
Definition: PhotoAbsCS.cpp:506
AtomicSecondaryProducts()
Constructor.
Definition: PhotoAbsCS.h:252
virtual ~AtomicSecondaryProducts()
Destructor.
Definition: PhotoAbsCS.h:255
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:549
std::vector< std::vector< double > > electron_energy
Definition: PhotoAbsCS.h:280
std::vector< std::vector< double > > photon_energy
Definition: PhotoAbsCS.h:281
void add_channel(double fchannel_prob_dens, const std::vector< double > &felectron_energy, const std::vector< double > &fphoton_energy, int s_all_rest=0)
Definition: PhotoAbsCS.cpp:469
std::vector< double > channel_prob_dens
Definition: PhotoAbsCS.h:278
Smoothed/smeared photoabsorption cross-section.
Definition: PhotoAbsCS.h:83
virtual AveragePhotoAbsCS * copy() const
Definition: PhotoAbsCS.h:115
virtual double get_CS(double energy) const
Retrieve cross-section [Mb] at a given energy [MeV].
Definition: PhotoAbsCS.cpp:116
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:149
virtual double get_integral_CS(double energy1, double energy2) const
Retrieve integral cross-section [Mb * MeV] in a given interval [MeV].
Definition: PhotoAbsCS.cpp:125
AveragePhotoAbsCS()
Default constructor.
Definition: PhotoAbsCS.h:94
virtual void scale(double fact)
Multiply by some factor. Can be useful for debugging and other purposes.
Definition: PhotoAbsCS.cpp:144
virtual ~AveragePhotoAbsCS()
Destructor.
Definition: PhotoAbsCS.h:108
Atomic photo-absorption with excitation.
Definition: PhotoAbsCS.h:429
void replace_shells_by_average(double fwidth, double fstep, long fmax_q_step)
virtual int get_main_shell_number(int nshell) const
Definition: PhotoAbsCS.h:444
std::vector< ActivePtr< PhotoAbsCS > > acs
Definition: PhotoAbsCS.h:545
std::string BT_file_name
Definition: PhotoAbsCS.h:542
double height_of_excitation
Excitation cross-section (assumed in the lowest shell).
Definition: PhotoAbsCS.h:552
virtual double get_threshold(int nshell) const
Get the ionization threshold for a given shell.
static const int s_add_excitations_to_normalize
Definition: PhotoAbsCS.h:568
virtual ExAtomPhotoAbsCS * copy() const
Definition: PhotoAbsCS.h:451
double exener[2]
Boundaries of excitation.
Definition: PhotoAbsCS.h:554
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
Definition: PhotoAbsCS.h:569
std::string threshold_file_name
Definition: PhotoAbsCS.h:540
virtual ~ExAtomPhotoAbsCS()
Destructor.
Definition: PhotoAbsCS.h:537
ExAtomPhotoAbsCS()
Default constructor.
Definition: PhotoAbsCS.h:454
std::string simple_table_file_name
Definition: PhotoAbsCS.h:541
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.
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:186
virtual double get_CS(double energy) const
Retrieve cross-section [Mb] at a given energy [MeV].
Definition: PhotoAbsCS.cpp:165
virtual double get_integral_CS(double energy1, double energy2) const
Retrieve integral cross-section [Mb * MeV] in a given interval [MeV].
Definition: PhotoAbsCS.cpp:171
HydrogenPhotoAbsCS()
Constructor.
Definition: PhotoAbsCS.cpp:160
virtual ~HydrogenPhotoAbsCS()
Destructor.
Definition: PhotoAbsCS.h:128
virtual void scale(double fact)
Multiply by some factor. Can be useful for debugging and other purposes.
Definition: PhotoAbsCS.cpp:184
virtual HydrogenPhotoAbsCS * copy() const
Definition: PhotoAbsCS.h:134
const PassivePtr< const AtomPhotoAbsCS > get_atom(const int n)
Definition: PhotoAbsCS.h:596
virtual double get_ACS(double energy) const
Photo-absorption cross-section [Mbarn] at a given energy [MeV].
double get_W() const
Retrieve W value [MeV].
Definition: PhotoAbsCS.h:612
int get_qatom_ps(const int n) const
Number of atoms of a particular sort in the molecule.
Definition: PhotoAbsCS.h:595
int get_total_Z() const
Sum up the atomic numbers of all atoms in the molecule.
virtual double get_ICS(double energy) const
Photo-ionization cross-section [Mbarn] at a given energy [MeV].
virtual double get_integral_ICS(double energy1, double energy2) const
Integral photo-ionization cross-section.
virtual ~MolecPhotoAbsCS()
Destructor.
Definition: PhotoAbsCS.h:634
double get_F() const
Retrieve Fano factor.
Definition: PhotoAbsCS.h:614
MolecPhotoAbsCS()
Default constructor.
Definition: PhotoAbsCS.h:617
virtual double get_integral_ACS(double energy1, double energy2) const
Integral photo-absorption cross-section.
virtual void print(std::ostream &file, int l) const
int get_qatom() const
Total number of atoms of all sorts in the molecule.
Definition: PhotoAbsCS.h:593
Simple phenomenological CS for any shell (analytic formula).
Definition: PhotoAbsCS.h:211
virtual double get_integral_CS(double energy1, double energy2) const
Retrieve integral cross-section [Mb * MeV] in a given interval [MeV].
Definition: PhotoAbsCS.cpp:442
virtual ~PhenoPhotoAbsCS()
Destructor.
Definition: PhotoAbsCS.h:224
virtual PhenoPhotoAbsCS * copy() const
Definition: PhotoAbsCS.h:229
virtual double get_CS(double energy) const
Retrieve cross-section [Mb] at a given energy [MeV].
Definition: PhotoAbsCS.cpp:437
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:460
PhenoPhotoAbsCS()
Default constructor.
Definition: PhotoAbsCS.cpp:425
virtual void scale(double fact)
Multiply by some factor. Can be useful for debugging and other purposes.
Definition: PhotoAbsCS.cpp:455
PhotoAbsCS()
Default constructor.
Definition: PhotoAbsCS.cpp:79
double threshold
Definition: PhotoAbsCS.h:79
double get_threshold() const
Return the threshold energy.
Definition: PhotoAbsCS.h:64
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:91
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.
Definition: PhotoAbsCS.h:53
std::string name
Definition: PhotoAbsCS.h:76
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.
Definition: PhotoAbsCS.h:56
int get_number() const
Number of this shell.
Definition: PhotoAbsCS.h:58
int get_Z() const
Definition: PhotoAbsCS.h:62
virtual SimpleAtomPhotoAbsCS * copy() const
Definition: PhotoAbsCS.h:416
SimpleAtomPhotoAbsCS()
Default constructor.
Definition: PhotoAbsCS.cpp:859
virtual double get_ACS(double energy) const
Definition: PhotoAbsCS.cpp:939
virtual int get_main_shell_number(int nshell) const
Definition: PhotoAbsCS.h:412
virtual void print(std::ostream &file, int l) const
std::string file_name
Filename (saved for printing).
Definition: PhotoAbsCS.h:422
virtual double get_integral_ACS(double energy1, double energy2) const
Integrated photo-absorption cross-section overa given interval.
Definition: PhotoAbsCS.cpp:947
virtual double get_integral_ICS(double energy1, double energy2) const
Integrated photo-ionization cross-section over a given interval.
Definition: PhotoAbsCS.cpp:988
virtual double get_threshold(int nshell) const
Get the ionization threshold for a given shell.
Definition: PhotoAbsCS.cpp:933
virtual double get_ICS(double energy) const
Definition: PhotoAbsCS.cpp:979
virtual ~SimpleAtomPhotoAbsCS()
Destructor.
Definition: PhotoAbsCS.h:398
std::vector< ActivePtr< PhotoAbsCS > > acs
Definition: PhotoAbsCS.h:423
SimpleTablePhotoAbsCS()
Default constructor.
virtual double get_integral_CS(double energy1, double energy2) const
Retrieve integral cross-section [Mb * MeV] in a given interval [MeV].
Definition: PhotoAbsCS.cpp:357
void remove_leading_tiny(double level)
Definition: PhotoAbsCS.cpp:319
virtual double get_CS(double energy) const
Retrieve cross-section [Mb] at a given energy [MeV].
Definition: PhotoAbsCS.cpp:337
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:409
virtual ~SimpleTablePhotoAbsCS()
Destructor.
Definition: PhotoAbsCS.h:182
virtual void scale(double fact)
Multiply by some factor. Can be useful for debugging and other purposes.
Definition: PhotoAbsCS.cpp:403
const std::vector< double > & get_arr_CS() const
Definition: PhotoAbsCS.h:194
const std::vector< double > & get_arr_ener() const
Definition: PhotoAbsCS.h:193
virtual SimpleTablePhotoAbsCS * copy() const
Definition: PhotoAbsCS.h:197
void remove_leading_zeros()
Remove points with zero cross-section from the table.
Definition: PhotoAbsCS.cpp:302
Definition: BGMesh.cpp:5
const double low_boundary_of_excitations
Definition: PhotoAbsCS.h:426
std::ostream & operator<<(std::ostream &file, const BGMesh &bgm)
Definition: BGMesh.cpp:36
const double coef_I_to_W
Definition: PhotoAbsCS.h:584
const double standard_factor_Fano
Definition: PhotoAbsCS.h:574
const double Thomas_sum_rule_const_Mb
TRK sum rule [Mb * MeV].
Definition: PhotoAbsCS.h:19
const double C1_MEV2_BN
const double Thomas_sum_rule_const
TRK sum rule [1/MeV], constant per one electron.
Definition: PhotoAbsCS.h:16