Garfield++ v1r0
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#include <fstream>
4#include <cmath>
5#include <cfloat>
6#include <climits>
10#include "wcpplib/math/minmax.h"
12/*
13The literature data on photoabsorption cross section are fragmentar and
14not always consistent. This class hierarchy is designed to
15gather them in a consistent library.
16The principle is ordinary: definition of an abstract class
17which defines the interface available for the rest of program,
18and definition of derived classes with this or that realization.
19To the contrary with wcpplib/matter, there is no any global "database"
20and no formal ban to duplicate these definitions (also there would not be sense
21in duplication). So these are simple classes determining photoabsorption
22cross sections for atomic shells, for atoms, and for moleculas.
23Aso the atomic relaxation cascades are defined.
24The system requires some memory for keeping data, and some disk files
25with input information. It takes some time for initializations, so
26it is not intended to be used in a loops, but only for initial or interactive
27initializations.
28Interesting that in the fortran version of HEED, the equivalent data structure
29kept in a common block was depending on energy mesh.
30But in this C++ version it was found possible to avoid this dependence.
31The data are kept and handled as is, without unnecessary conversions.
32This improves precision of handling energies near ionization threshoulds.
33In total this system is not trivial, and it needs to spend a lot of time
34for more detailed descriptions.
35
362004, I. Smirnov
37
38*/
39
40namespace Heed {
41
43 2.0 * M_PI * M_PI / (FSCON * ELMAS); // [1/MeV]
44 // constant per one electron.
46 2.0 * M_PI * M_PI / (FSCON * ELMAS) * 1.0E-6 / C1_MEV2_BN; // [Mb*MeV]
47
48// Usually photo-absorption cross section descreases as inverse power function
49// of power like -2.75. Its linear interpolation inside large energy
50// intervals is remarkably not precise. This function (below) is designed
51// to determine the cases common for the total program when the inverse power
52// function is applied in such intervals.
53// Conditions are emphirical.
54// 1 - nonlinear, 0 - linear.
55// Energies and threshold are given in MeV. This is important!
56// e1 should be < e2.
57int sign_nonlinear_interpolation(double e1, double cs1, double e2, double cs2,
58 double threshold);
59
61 double e1, double e2, double threshold);
62// fit table by a straight line or by inverse power function
63// (see comment above)
64// and integrate the area below it.
65// The function is assumed to be non-negative, and the result of integration
66// as well.
67// The tail is not added right here, but added after the call of this function.
68// The theshold is used to restrict this function from the left.
69// If threshold is less than e[0], the function is extrapolated
70// by the straight line till threshold.
71// If this line crosses zero, it is extrapolated only till this point.
72
73double my_integr_fun(double xp1, double yp1, double xp2, double yp2,
74 double xmin, double xmax, double x1, double x2);
75double my_val_fun(double xp1, double yp1, double xp2, double yp2, double xmin,
76 double xmax, double x);
77
78//double old_glin_integ_ar(DynLinArr< double > e, DynLinArr< double > cs,
79// long q, double e1, double e2,
80// double threshold );
81
82//double glin_val_ar(DynLinArr< double > e, DynLinArr< double > cs,
83// long q, double x
84// double threshold );
85
86class PhotoAbsCS virt_common_base_col {
87 public:
88 inline const String& get_name() const { return name; }
89 // charge or number of electrons at this shell or in this atom
90 // (in principle the integral of CS should
91 // satisfy the Thomas-Reiche-Kuhn sum rule)
92 inline int get_Z() const { return Z; }
93 inline double get_threshold() const { return threshold; }
94 virtual double get_CS(
95 double energy) const = 0; // energy in MeV, CS in Mbarns
96 virtual double get_integral_CS(double energy1, double energy2) const = 0;
97 // energy in MeV, CS in Mbarns * MeV
98 // multiply by some factor
99 // it is sometimes useful for debug and other purposes.
100 virtual void scale(double fact) = 0;
101
102 virtual void print(std::ostream& file, int l) const;
105 PhotoAbsCS(const String& fname, int fZ, double fthreshold);
106 virtual ~PhotoAbsCS() {}
107
108 protected:
110 int Z;
111 double threshold; // in MeV
112};
113
114class OveragePhotoAbsCS : public PhotoAbsCS {
115 ActivePtr<PhotoAbsCS> real_pacs;
116 double width;
117 // parameters for get_integral_CS
118 // (it can be done only approximate by numerical integration)
119 long max_q_step; // if real q is more, the
120 // function calls "precise" get_integral_CS from PhotoAbsCS,
121 // so it will be without smoothing.
122 double step; // the step of integration, for example, 1/20 from width
123 public:
124 // constructors
126 OveragePhotoAbsCS(PhotoAbsCS* apacs, double fwidth, // MeV
127 double fstep, long fmax_q_step);
128 // destructor
130 virtual double get_CS(double energy) const; // energy in MeV, CS in Mbarns
131 virtual double get_integral_CS(double energy1, double energy2) const;
132 // energy in MeV, CS in Mbarns * MeV
133
134 // scale (multiply the height, y-axis, by some factor)
135 // it is sometimes useful for debug and other purposes.
136 virtual void scale(double fact);
137
138 virtual void print(std::ostream& file, int l) const;
140};
141
142// Hydrogen: empirical fit of Kosarev & Podoliak
143// Original formula for molecular hydrogen
144// Since this class for separated shell, we divide molecular CS by 2
145class HydrogenPhotoAbsCS : public PhotoAbsCS {
146 public:
149 virtual double get_CS(double energy) const;
150 virtual double get_integral_CS(double energy1, double energy2) const;
151 virtual void scale(double fact);
153 virtual void print(std::ostream& file, int l) const;
154
155 private:
156 double prefactor;
157};
158
159// Typically this is for reading Experimental CS, for example of argon,
160// as if there is one shell.
161// File is two-column table, the first row is energy in eV,
162// the second one is CS in Mbarn.
163// The points are understood as local points.
164// The interpolation between them are either straight or by power
165// function.
166// the choice is determined by function sign_nonlinear_interpolation
167// (see above).
168// If the first point is not zero cross section,
169// and the threshold is to the left,
170// the straight extrapolation is performed from the two edge points.
171// The extrapolation to the right is performed to the end of
172// the energy mesh by power function with power -2.75.
173// The minimal number of points is 2, as in PointCoorMesh from tline.h
174// The zero number of points is allowed as well.
175// Then the cross section is assumed to be zero.
176
177class SimpleTablePhotoAbsCS : public PhotoAbsCS {
178 public:
180 SimpleTablePhotoAbsCS(const String& fname, int fZ, double fthreshold,
181 const String& ffile_name);
182 SimpleTablePhotoAbsCS(const String& fname, int fZ, double fthreshold,
183 const DynLinArr<double>& fener,
184 const DynLinArr<double>& fcs);
185 // Fit from one of the papers of Band-Trzaskovskaya et al, CS for any shell
186 // It is difficult to integrate that formulas analytically.
187 // So I create numerical array and treat it as input data.
188 SimpleTablePhotoAbsCS(const String& fname, int fZ, double fthreshold, int l,
189 double E0, double yw, double ya, double P,
190 double sigma);
191 // Replace part:
193 const SimpleTablePhotoAbsCS& part, double emax_repl);
195 void remove_leading_zeros(void); // very useful operation
196 // for preparation of some tables
197 void remove_leading_tiny(double level); // very useful operation
198 // for preparation of some tables,
199 // removes points with cross section below determined level.
200 // It is designed for Henke tables, which somewhy are prepared for database
201 // with leading values like 1.0e-15 .
202 // Both functions allow to use the straight interpolation to threshold
203
204 //void remove_leading_zeros(double minimal_theshold); //very useful operation
205 // removes all points which are less or equal to minimal_theshold
206 // the case of equal needs for argon
207
208 virtual double get_CS(double energy) const; // energy in MeV
209 virtual double get_integral_CS(double energy1, double energy2) const;
210 inline const DynLinArr<double>& get_arr_ener() const { return ener; }
211 inline const DynLinArr<double>& get_arr_CS() const { return cs; }
212 virtual void scale(double fact); // just miltiply the table
213 virtual void print(std::ostream& file, int l) const;
215
216 private:
217 String file_name; // saved for printing
218 // The following arrays are interpreted as
219 // the value of cross section at this value of energy.
220 DynLinArr<double> ener; // MeV
222};
223
224// Simple phenomenological CS for any shell
225class PhenoPhotoAbsCS : public PhotoAbsCS {
226 public:
227 PhenoPhotoAbsCS(void);
228 PhenoPhotoAbsCS(const String& fname, int fZ, double fthreshold,
229 double fpower = 2.75);
230 virtual ~PhenoPhotoAbsCS() {}
231 // power is here positive, but it is meay that there is division,
232 // the the actual power is negative.
233 virtual double get_CS(double energy) const;
234 virtual double get_integral_CS(double energy1, double energy2) const;
235 virtual void scale(double fact);
236 virtual void print(std::ostream& file, int l) const;
238
239 private:
240 double power; // positive power 1/E^power
241 double factor;
242};
243
244/*
245// See above
246// Fit from one of the papers of Band-Trzaskovskaya et al, CS for any shell
247class FitBTPhotoAbsCS: public PhotoAbsCS
248{
249public:
250 FitBTPhotoAbsCS(void);
251 FitBTPhotoAbsCS(const String& fname, int fZ, double fthreshold,
252 int lPas, double E0, double yw, double ya,
253 double P, double sigma);
254
255 // power is here positive, but it is meay that there is division,
256 // the the actual power is negative.
257 virtual double get_CS(double energy) const ;
258 virtual double get_integral_CS(double energy1, double energy2) const ;
259 virtual void scale(double fact);
260 virtual void print(std::ostream& file, int l) const ;
261 macro_copy_total(FitBTPhotoAbsCS);
262 //AnyType_copy(PhenoPhotoAbsCS, PhotoAbsCS)
263private:
264 int l;
265 double E0;
266 double yw;
267 double ya;
268 double P;
269 double sigma;
270 static EnergyMesh mesh_for_FitBT;
271 DynLinArr< double > cs;
272};
273*/
274//------------------------------------------------------------------------
275
276/* The following class keeps only secondary particles and not include
277photo-electron kicked off from the orbit.
278The photo-electron is completely independent on the secondary channel
279and it always bears an energy equal to transferred energy minus shell energy.
280This class proposes particles which can be emitted at filling this shell.
281This class can be interpreted as an additional channels for
282the default one.
283The sum of channel_prob_dens may be less than unity.
284The concrete channel for the particular event is sampled by get_channel().
285If the random sampling does not point to one of the channels registering
286in this class, get_channel returns 0, which must be interpreted as
287the use of standard channel.
288*/
289
290class AtomicSecondaryProducts : public RegPassivePtr {
291 public:
292 int get_channel(DynLinArr<double>& felectron_energy, // MeV
293 DynLinArr<double>& fphoton_energy) const; // MeV
294 // return value - sign that channel is generated (1) or not (0).
295
298 ;
299 }
301 void add_channel(double fchannel_prob_dens,
302 const DynLinArr<double>& felectron_energy, // MeV
303 const DynLinArr<double>& fphoton_energy, // MeV
304 int s_all_rest = 0); // if 1 , the probability of this
305 // channel is assigned to that what is left to 1.
306 // fchannel_prob_dens is then ignored, it can be just 0.
307 // This function adds new decay channel. Should be used at initialization.
308
309 //AtomicSecondaryProducts(DynLinArr< double > fchannel_prob_dens;
310 // DynLinArr< DynLinArr< double > > felectron_energy;
311 // DynLinArr< DynLinArr< double > > fphoton_energy;
312 virtual void print(std::ostream& file, int l) const;
313
314 protected:
315 //long q_channel;
316 DynLinArr<double> channel_prob_dens; // probability of specific channel.
317 // Arrays of decay products for each channel:
320};
321
322class AtomPhotoAbsCS : public RegPassivePtr {
323 public:
324 inline int get_Z() const { return Z; }
325 inline int get_qshell() const { return qshell; }
326 virtual double get_threshold(int nshell) const = 0;
327 virtual double get_I_min(void) const;
328 virtual double get_ACS(double energy) const = 0;
329 virtual double get_integral_ACS(double energy1, double energy2) const = 0;
330 virtual double get_ACS(int nshell, double energy) const = 0;
331 virtual double get_integral_ACS(int nshell, double energy1,
332 double energy2) const = 0;
333 // photo-absorption cross section, energy in MeV, CS in Mbarns.
334 // It can include excitation.
335
336 virtual double get_ICS(double energy) const = 0;
337 virtual double get_TICS(double energy,
338 double factual_minimal_threshold) const;
339 virtual double get_integral_ICS(double energy1, double energy2) const = 0;
340 virtual double get_integral_TICS(double energy1, double energy2,
341 double factual_minimal_threshold) const;
342 virtual double get_ICS(int nshell, double energy) const = 0;
343 virtual double get_TICS(int nshell, double energy,
344 double factual_minimal_threshold) const;
345 virtual double get_integral_ICS(int nshell, double energy1,
346 double energy2) const = 0;
347 virtual double get_integral_TICS(int nshell, double energy1, double energy2,
348 double factual_minimal_threshold) const;
349 // The last function is convenient to redefine ionization threshold in
350 // atomic mixtures, where one atom can pass excitation to another,
351 // which is easier to ionize.
352
353 // photo-ionization cross section, energy in MeV, CS in Mbarns.
354 // It does not include excitation.
355
356 // always assuming ionization
357 // Energy could be a little bit less than threshold.
358 // This is considered as numerical inprecision
359 // The photo-electron has to be the first in array el_energy.
360 // Later (in class HeedPhoton) the photo-electron is emitted ahead.
361 // The other ones fly in any direction.
362 virtual void get_escape_particles(int nshell, // input
363 double energy, // input
364 DynLinArr<double>& el_energy,
365 DynLinArr<double>& ph_energy) const;
366
367 virtual int get_main_shell_number(int nshell) const = 0;
368 // returns the shell number (1,2,...)
369 // The current versions read it from shell name,
370 // so they interprete the shell name as the number.
371 // If the shell number cannot be recovered, the function
372 // returns -1.
373
374 virtual void remove_shell(int nshell);
375 virtual void restore_shell(int nshell);
376 virtual void print(std::ostream& file, int l) const;
378 //virtual AtomPhotoAbsCS* copy(void) const = 0;
379 AtomPhotoAbsCS(void);
380 AtomicSecondaryProducts* get_asp(int nshell); // needs in order
381 // to allow modification (such as addition of new channels)
382 // after the main constructor is executed (but, of course, before the
383 // regular event generation).
384 protected:
386 int Z;
388 DynLinArr<int> s_ignore_shell; // 0 - sign to use shell
389 // 1 - sign to ignore it
390 // It does not affect threshold and escape sequences and assumed to
391 // manipulate with larger shells, to investigate their
392 // influence at the final characteristics.
393 // By default all is 0
395};
396std::ostream& operator<<(std::ostream& file, const AtomPhotoAbsCS& f);
397
398/*Simple means that there is no difference between absorption and ionization.
399So there is one single internal array for both.
400 */
402 public:
403 virtual double get_threshold(int nshell) const;
404 virtual double get_ACS(double energy) const;
405 virtual double get_integral_ACS(double energy1, double energy2) const;
406 virtual double get_ACS(int nshell, double energy) const;
407 virtual double get_integral_ACS(int nshell, double energy1,
408 double energy2y) const;
409 // photo-absorption cross section, energy in MeV, CS in Mbarns.
410 virtual double get_ICS(double energy) const;
411 virtual double get_integral_ICS(double energy1, double energy2) const;
412 virtual double get_ICS(int nshell, double energy) const;
413 virtual double get_integral_ICS(int nshell, double energy1,
414 double energy2) const;
415 // photo-ionization cross section, energy in MeV, CS in Mbarns.
416 virtual int get_main_shell_number(int nshell) const;
417 virtual void print(std::ostream& file, int l) const;
420 SimpleAtomPhotoAbsCS(int fZ, const String& ffile_name);
421 // Takes the name and shell energies from file,
422 // genetares the CS by PhenoPhotoAbsCS
423 SimpleAtomPhotoAbsCS(int fZ, const PhotoAbsCS& fasc);
424 // The simplest thing: one prepared preliminary shell with Z electrons
425 // Convenient for Hydrogen
427
428 protected:
429 String file_name; // saved for printing
431};
432
434// if 0 - in the following class the excitations will not be added.
435// It is useful for debug and for checking the effect produced by
436// adding excitations.
437// But, if it is 0 - the Rezerford gets less. This is not correct.
438// So for real work this variable should always be equal to 1.
439
441
442const double low_boundary_of_excitations = 0.7; // from ionization threshold
443
444// With exitation:
446 public:
447 // photo-absorption cross section, energy in MeV, CS in Mbarns.
448 virtual double get_threshold(int nshell) const;
449 virtual double get_ACS(double energy) const;
450 virtual double get_integral_ACS(double energy1, double energy2) const;
451 virtual double get_ACS(int nshell, double energy) const;
452 virtual double get_integral_ACS(int nshell, double energy1,
453 double energy2) const;
454
455 // photo-ionization cross section, energy in MeV, CS in Mbarns.
456 virtual double get_ICS(double energy) const;
457 virtual double get_integral_ICS(double energy1, double energy2) const;
458 virtual double get_ICS(int nshell, double energy) const;
459 virtual double get_integral_ICS(int nshell, double energy1,
460 double energy2) const;
461 virtual int get_main_shell_number(int nshell) const;
462 void replace_shells_by_overage(double fwidth, // MeV
463 double fstep, long fmax_q_step);
464 virtual void print(std::ostream& file, int l) const;
467 ExAtomPhotoAbsCS(int fZ, const String& fthreshold_file_name,
468 const String& fsimple_table_file_name,
469 const String& fname = "none", // The name of atom
470 // ^ if "none", it is taken from fthreshold_file_name
471 // Normally it is used only with other threshold
472 double fminimal_threshold = 0.0);
473 // Takes the name (see remark above)
474 // and shell energies from file fthreshold_file_name ,
475 // takes cross section from file fsimple_table_file_name
476 ExAtomPhotoAbsCS(int fZ, const String& fname, // just name of this atom
477 const String& fBT_file_name,
478 int id, // to distinguish it from constructor above
479 // No, now it will be this way
480 // 1 - old files without fluorescence rate
481 // 2 - new files with fluorescence rate
482 // other values - error
483 double fminimal_threshold = 0.0);
484 // Takes the shell names and shell energies from file generated by
485 // Band and Thragzkovskaya.
486 // Old comm: Currently no fluorescence.
487 // Today (22.04.2005) flyorescence is included in this constructor.
488 ExAtomPhotoAbsCS(int fZ, const String& fname, // just name of this atom
489 const String& fFitBT_file_name,
490 int id, // to distinguish it from constructor above
491 // 1 - old files without fluorescence rate
492 // 2 - new files with fluorescence rate
493 // other values - error
494 int s_no_scale, // scaling is not done, needs for next
495 double fminimal_threshold = 0.0);
496 // Takes the shell energies and fit parameters made by
497 // Band and Thragzkovskaya
498 // from a file.
499 ExAtomPhotoAbsCS(int fZ, const String& fname, // just name of this atom
500 const String& fFitBT_file_name,
501 //const String& fthreshold_file_name, this can be avoided
502 const String& fsimple_table_file_name, double emax_repl,
503 int id, // to distinguish it from constructor above
504 // and fluorescense (2) or not(1)
505 double fminimal_threshold = 0.0);
506 // The combination of BT- fit and simple-table(Henke) tables,
507 // made by the same way as in the old fortran HEED.
508 // It initializes BT- fit and replaces the part of the first shell
509 // from threshold taken from BT- fit to emax_repl
510 // by values from the simple table.
511 virtual ~ExAtomPhotoAbsCS() {}
512
513 protected:
514 String threshold_file_name; // saved for printing
517 DynLinArr<ActivePtr<PhotoAbsCS> > acs; // the name acs is misleading:
518 // actually here there is ionization cross section.
519 // Excitations are added separately as height_of_excitation.
520 // So it should be more logical to call this ics.
521 // Initially ics was meant to be separate array.
522 // But during development it was found that it is not necessary.
523
524 // 3 variables for printing listings
528 double height_of_excitation; // assumed in the lowest shell
529 double exener[2]; // boundaries of excitation
530 //DynLinArr< ActivePtr< PhotoAbsCS > > ics;
531 double minimal_threshold; // make shifts if necessary
532 // The shells are corrected on the minimal_threshold "on the fly".
533 // It the threshold of the atomic shell is less then minimal_threshold,
534 // the difference is subtracted from the energy for which
535 // the cross section is requested.
536 // exener[2] is corrected at initialization in first main constructor.
537 // In the second one there is no implementation of minimal_threshold so far.
538};
539
540//---------------------------------------------------------
541
542const double standard_factor_Fano = 0.19;
543
544#define CALC_W_USING_CHARGES
545// the opposite is just averaging potentials
546// This way is averaging potentials with taking into account charges.
547// So the atom or molecula with larger charge will affect more -
548// this looks much more reasonable.
549// The opposite case is preserved for debug and research purposes.
550// F is calculated by the same way as W
551
552const double coef_I_to_W = 2.0;
553
554/*
555Moleculas refer to atoms by passive pointers.
556If atom is changed, its image for molecula is also changed.
557*/
558
559class MolecPhotoAbsCS : public RegPassivePtr {
560 public:
561 inline int get_qatom(void) {
562 return qatom;
563 } // total quantity of atoms
564 // of all sorts in molecula
565 inline int get_gatom_ps(int n) {
566 return qatom_ps[n];
567 } // quantity of atom
568 // of particular sort in molecula
570 return atom[n];
571 }
572 virtual double get_ACS(double energy) const;
573 virtual double get_integral_ACS(double energy1, double energy2) const;
574 // photo-absorption cross section, energy in MeV, CS in Mbarns.
575 virtual double get_ICS(double energy) const;
576 virtual double get_integral_ICS(double energy1, double energy2) const;
577 // photo-ionization cross section, energy in MeV, CS in Mbarns.
578
579 int get_total_Z() const;
580 double get_W(void) const {
581 return W;
582 } // MeV
583 double get_F(void) const { return F; }
584
585 MolecPhotoAbsCS(void) : qatom(0) { ; }
586
587 // In the following, if fW == 0.0, the program assigns it as 2 * mean(I_min),
588 // This is in general correct
589 // one sort of atoms
590 MolecPhotoAbsCS(const AtomPhotoAbsCS& fatom, int fqatom, double fW = 0.0,
591 double fF = standard_factor_Fano);
592 // two sorts of atoms
593 MolecPhotoAbsCS(const AtomPhotoAbsCS& fatom1, int fqatom_ps1,
594 const AtomPhotoAbsCS& fatom2, int fqatom_ps2, double fW = 0.0,
595 double fF = standard_factor_Fano);
596 // 3 sorts of atoms
597 MolecPhotoAbsCS(const AtomPhotoAbsCS& fatom1, int fqatom_ps1,
598 const AtomPhotoAbsCS& fatom2, int fqatom_ps2,
599 const AtomPhotoAbsCS& fatom3, int fqatom_ps3, double fW = 0.0,
600 double fF = standard_factor_Fano);
601 virtual ~MolecPhotoAbsCS() {}
602 virtual void print(std::ostream& file, int l) const;
603
604 private:
605 int qatom; // total quantity of atoms, NOT number of sorts, NOT qel in atom
606 DynLinArr<int> qatom_ps;
608 double W; // The mean work per pair production, MeV.
609 double F; // Fano parameter.
610};
611std::ostream& operator<<(std::ostream& file, const MolecPhotoAbsCS& f);
612
613/*
614
615class PhotoAbsorptionCS
616{public:
617 int z; // charge (in principle the integral of CS should
618 // satisfy the Thomas-Reiche-Kuhn sum rule).
619 PassivePtr< EnergyMesh > energy_mesh;
620 DinLinArr< double > total_cs;
621 int qsh; // number of shells
622 DinArr< double > shell_cs; // first dimension - shell number
623 // second dimension - energy
624 DinLinArr< double > shell_energy; // dimension - shell number
625 DinLinArr< int > z_shell; // number_of_electrons in shell
626 DinLinArr< double > fluorescence_yield;
627
628 PhotoAbsorptionCS(void);
629
630 PhotoAbsorptionCS(const String& ffile_name,
631 PassivePtr< EnergyMesh > fenergy_mesh);
632 // mesh will be created
633
634 PhotoAbsorptionCS(const PhotoAbsorptionCS& pacs ,
635 PassivePtr< EnergyMesh > fenergy_mesh);
636 // convert to another existing mesh
637};
638*/
639
640}
641
642#endif
std::string String
Definition: String.h:75
virtual void remove_shell(int nshell)
virtual double get_ACS(double energy) const =0
virtual double get_integral_ICS(double energy1, double energy2) const =0
virtual int get_main_shell_number(int nshell) const =0
macro_copy_total_zero(AtomPhotoAbsCS)
virtual double get_ICS(int nshell, double energy) const =0
int get_qshell() const
Definition: PhotoAbsCS.h:325
virtual void print(std::ostream &file, int l) const
virtual double get_TICS(double energy, double factual_minimal_threshold) const
Definition: PhotoAbsCS.cpp:992
int get_Z() const
Definition: PhotoAbsCS.h:324
virtual double get_threshold(int nshell) const =0
virtual double get_ICS(double energy) const =0
virtual double get_ACS(int nshell, double energy) const =0
DynLinArr< int > s_ignore_shell
Definition: PhotoAbsCS.h:388
virtual double get_integral_TICS(double energy1, double energy2, double factual_minimal_threshold) const
virtual void get_escape_particles(int nshell, double energy, DynLinArr< double > &el_energy, DynLinArr< double > &ph_energy) const
DynLinArr< AtomicSecondaryProducts > asp
Definition: PhotoAbsCS.h:394
virtual void restore_shell(int nshell)
virtual double get_integral_ACS(int nshell, double energy1, double energy2) const =0
virtual double get_I_min(void) const
virtual double get_integral_ICS(int nshell, double energy1, double energy2) const =0
AtomicSecondaryProducts * get_asp(int nshell)
virtual double get_integral_ACS(double energy1, double energy2) const =0
int get_channel(DynLinArr< double > &felectron_energy, DynLinArr< double > &fphoton_energy) const
Definition: PhotoAbsCS.cpp:914
DynLinArr< DynLinArr< double > > photon_energy
Definition: PhotoAbsCS.h:319
DynLinArr< double > channel_prob_dens
Definition: PhotoAbsCS.h:316
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:958
DynLinArr< DynLinArr< double > > electron_energy
Definition: PhotoAbsCS.h:318
void add_channel(double fchannel_prob_dens, const DynLinArr< double > &felectron_energy, const DynLinArr< double > &fphoton_energy, int s_all_rest=0)
Definition: PhotoAbsCS.cpp:875
virtual double get_threshold(int nshell) const
void replace_shells_by_overage(double fwidth, double fstep, long fmax_q_step)
virtual double get_integral_ACS(double energy1, double energy2) const
virtual double get_ACS(double energy) const
virtual int get_main_shell_number(int nshell) const
virtual ~ExAtomPhotoAbsCS()
Definition: PhotoAbsCS.h:511
DynLinArr< ActivePtr< PhotoAbsCS > > acs
Definition: PhotoAbsCS.h:517
virtual void print(std::ostream &file, int l) const
virtual double get_ICS(double energy) const
macro_copy_total(ExAtomPhotoAbsCS)
virtual double get_integral_ICS(double energy1, double energy2) const
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:406
macro_copy_total(HydrogenPhotoAbsCS)
virtual double get_CS(double energy) const
Definition: PhotoAbsCS.cpp:371
virtual double get_integral_CS(double energy1, double energy2) const
Definition: PhotoAbsCS.cpp:384
virtual ~HydrogenPhotoAbsCS()
Definition: PhotoAbsCS.h:148
virtual void scale(double fact)
Definition: PhotoAbsCS.cpp:404
virtual double get_ACS(double energy) const
double get_F(void) const
Definition: PhotoAbsCS.h:583
virtual double get_ICS(double energy) const
double get_W(void) const
Definition: PhotoAbsCS.h:580
virtual double get_integral_ICS(double energy1, double energy2) const
virtual ~MolecPhotoAbsCS()
Definition: PhotoAbsCS.h:601
virtual double get_integral_ACS(double energy1, double energy2) const
virtual void print(std::ostream &file, int l) const
int get_gatom_ps(int n)
Definition: PhotoAbsCS.h:565
const PassivePtr< const AtomPhotoAbsCS > get_atom(int n)
Definition: PhotoAbsCS.h:569
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:359
virtual double get_integral_CS(double energy1, double energy2) const
Definition: PhotoAbsCS.cpp:326
virtual void scale(double fact)
Definition: PhotoAbsCS.cpp:354
virtual double get_CS(double energy) const
Definition: PhotoAbsCS.cpp:308
macro_copy_total(OveragePhotoAbsCS)
virtual ~OveragePhotoAbsCS()
Definition: PhotoAbsCS.h:129
virtual double get_integral_CS(double energy1, double energy2) const
Definition: PhotoAbsCS.cpp:757
virtual ~PhenoPhotoAbsCS()
Definition: PhotoAbsCS.h:230
virtual double get_CS(double energy) const
Definition: PhotoAbsCS.cpp:752
macro_copy_total(PhenoPhotoAbsCS)
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:776
virtual void scale(double fact)
Definition: PhotoAbsCS.cpp:771
virtual double get_ACS(double energy) const
virtual void print(std::ostream &file, int l) const
virtual int get_main_shell_number(int nshell) const
virtual double get_integral_ACS(double energy1, double energy2) const
virtual double get_integral_ICS(double energy1, double energy2) const
DynLinArr< ActivePtr< PhotoAbsCS > > acs
Definition: PhotoAbsCS.h:430
macro_copy_total(SimpleAtomPhotoAbsCS)
virtual double get_threshold(int nshell) const
virtual double get_ICS(double energy) const
virtual double get_integral_CS(double energy1, double energy2) const
Definition: PhotoAbsCS.cpp:672
void remove_leading_tiny(double level)
Definition: PhotoAbsCS.cpp:565
virtual double get_CS(double energy) const
Definition: PhotoAbsCS.cpp:585
virtual void print(std::ostream &file, int l) const
Definition: PhotoAbsCS.cpp:723
const DynLinArr< double > & get_arr_CS() const
Definition: PhotoAbsCS.h:211
const DynLinArr< double > & get_arr_ener() const
Definition: PhotoAbsCS.h:210
macro_copy_total(SimpleTablePhotoAbsCS)
virtual void scale(double fact)
Definition: PhotoAbsCS.cpp:715
const String & get_name() const
Definition: PhotoAbsCS.h:88
macro_copy_total_zero(PhotoAbsCS)
virtual void scale(double fact)=0
PhotoAbsCS(const String &fname, int fZ, double fthreshold)
virtual double get_CS(double energy) const =0
virtual void print(std::ostream &file, int l) const
double get_threshold() const
Definition: PhotoAbsCS.h:93
virtual double get_integral_CS(double energy1, double energy2) const =0
Definition: BGMesh.cpp:3
double my_integr_fun(double xp1, double yp1, double xp2, double yp2, double xmin, double, double x1, double x2)
Definition: PhotoAbsCS.cpp:49
const int s_scale_to_normalize_if_more
Definition: PhotoAbsCS.h:440
const double low_boundary_of_excitations
Definition: PhotoAbsCS.h:442
std::ostream & operator<<(std::ostream &file, const BGMesh &bgm)
Definition: BGMesh.cpp:22
const double ELMAS
const double coef_I_to_W
Definition: PhotoAbsCS.h:552
const double standard_factor_Fano
Definition: PhotoAbsCS.h:542
const double Thomas_sum_rule_const_Mb
Definition: PhotoAbsCS.h:45
double glin_integ_ar(DynLinArr< double > x, DynLinArr< double > y, long q, double x1, double x2, double threshold)
Definition: PhotoAbsCS.cpp:74
const int s_add_excitations_to_normalize
Definition: PhotoAbsCS.h:433
int sign_nonlinear_interpolation(double e1, double cs1, double e2, double cs2, double threshold)
Definition: PhotoAbsCS.cpp:22
const double FSCON
double my_val_fun(double xp1, double yp1, double xp2, double yp2, double xmin, double, double x)
Definition: PhotoAbsCS.cpp:60
const double C1_MEV2_BN
const double Thomas_sum_rule_const
Definition: PhotoAbsCS.h:42