Garfield++ 3.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
ElElasticScat.h
Go to the documentation of this file.
1#ifndef EL_ELASTIC_SCAT_H
2#define EL_ELASTIC_SCAT_H
3
4#include <vector>
5
6namespace Heed {
7
8/// Fit parameters for a particular element and energy.
9/// The fit gives dependence of cross section on angle.
11 public:
12 double A[4]; ///< If -1.0 then the combination is not valid.
13 double C[7];
14 double B;
15 double CS(const double theta) const; ///< Return -1 if not valid
16};
17
18/// Array of ElElasticScatDataStruct objects for a set of energies.
20 public:
21 long Z = 0;
22 /// Fit parameters at different energies.
23 std::vector<ElElasticScatDataStruct> data;
24 /// Default constructor
25 ElElasticScatData() = default;
26 /// Constructor with atomic number and number of energies.
27 ElElasticScatData(long fZ, long qe) : Z(fZ), data(qe) {}
28};
29
30/// Definition of elastic scattering for low-energy delta-electron.
31/// The class contains the data for all atoms presents them by request.
32/// 2003, I. Smirnov
33
35 public:
36 /** Get the cross-section (in angstrom^2/srad).
37 * \param Z atomic number
38 * \param energy kinetic energy in MeV
39 * \param angle angle
40 * \param s_interp flag for debugging and various checks
41 *
42 * fill_hist call this function with s_interp=1 for histograms "int...".
43 */
44 double get_CS(long Z, double energy, double angle, int s_interp = 0);
45
46 /** Get the cross-section (in angstrom^2).
47 * \param Z atomic number
48 * \param energy kinetic energy in MeV
49 * \param angle angle in internal units (radian)
50 */
51 double get_CS_Rutherford(long Z, double energy, double angle);
52
53 long get_qe(void) const { return qe; }
54 double get_energy_mesh(long ne) const { return energy_mesh[ne]; }
55
56 /// Default constructor
57 ElElasticScat() = default;
58 /// Constructor with file name.
59 ElElasticScat(const std::string& file_name);
60 void print(std::ostream& file, int l) const;
61
62 private:
63 /// Number of energies (local mesh)
64 long qe = 0;
65 /// Energies [keV]
66 std::vector<double> energy_mesh;
67 /// gamma * beta2 for electron of this energy
68 std::vector<double> gamma_beta2;
69 /// Data for different atoms.
70 std::vector<ElElasticScatData> atom;
71
72 // kinetic energy in MeV
73 double get_CS_for_presented_atom(long na, double energy, double angle);
74};
75
77 public:
78 double get_mean_coef(const long Z, const long ne) const {
79 return mean_coef[Z - 1][ne];
80 }
81 double get_coef(const long Z, const long ne) const { return coef[Z - 1][ne]; }
82 long get_qscat(void) const { return qscat; }
83 ElElasticScat* get_ees() const { return ees; }
84
85 /// Default constructor
87 ElElasticScatLowSigma(ElElasticScat* fees, const std::string& file_name);
88
89 private:
90 ElElasticScat* ees = nullptr;
91 /// Number of atoms registered in this class (Z is sequential)
92 long qat = 0;
93 /// Maximal number of scatterings
94 long qscat = 0;
95 /// mean((1 - cos(theta))) as function of Z and energy
96 std::vector<std::vector<double> > mean_coef;
97 /// sqrt(mean((1-cos(theta))^2))
98 std::vector<std::vector<double> > coef;
99};
100}
101
102#endif
double CS(const double theta) const
Return -1 if not valid.
double A[4]
If -1.0 then the combination is not valid.
Definition: ElElasticScat.h:12
Array of ElElasticScatDataStruct objects for a set of energies.
Definition: ElElasticScat.h:19
ElElasticScatData()=default
Default constructor.
std::vector< ElElasticScatDataStruct > data
Fit parameters at different energies.
Definition: ElElasticScat.h:23
ElElasticScatData(long fZ, long qe)
Constructor with atomic number and number of energies.
Definition: ElElasticScat.h:27
long get_qscat(void) const
Definition: ElElasticScat.h:82
ElElasticScat * get_ees() const
Definition: ElElasticScat.h:83
double get_coef(const long Z, const long ne) const
Definition: ElElasticScat.h:81
ElElasticScatLowSigma()=default
Default constructor.
double get_mean_coef(const long Z, const long ne) const
Definition: ElElasticScat.h:78
double get_CS(long Z, double energy, double angle, int s_interp=0)
double get_energy_mesh(long ne) const
Definition: ElElasticScat.h:54
ElElasticScat()=default
Default constructor.
void print(std::ostream &file, int l) const
double get_CS_Rutherford(long Z, double energy, double angle)
long get_qe(void) const
Definition: ElElasticScat.h:53
Definition: BGMesh.cpp:6