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