Garfield++ v1r0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
bethe_bloch.cpp
Go to the documentation of this file.
1#include <stdlib.h>
2#include <limits.h>
3#include <cmath>
8/*
92002, I. Smirnov
10*/
11
12namespace Heed {
13
14double Bethe_Bloch_energy_loss(const double ratio_Z_to_A, const double I_eff,
15 const double beta, const double z) {
16
17 const double beta2 = beta * beta;
18 const double gamma2 = pow(lorgamma_1(beta) + 1.0, 2);
19 const double coef1 =
20 4 * M_PI * pow(classic_electr_radius, 2) * electron_mass_c2 * Avogadro;
21 const double coef2 = z * z * ratio_Z_to_A / beta2;
22 const double sum =
23 log(2. * electron_mass_c2 * beta2 * gamma2 / I_eff) - beta2;
24 return coef1 * coef2 * sum;
25}
26
27double Bethe_Bloch_energy_loss_gamma_1(const double ratio_Z_to_A,
28 const double I_eff, const double gamma_1,
29 const double z) {
30
31 const double beta = lorbeta(gamma_1);
32 const double beta2 = beta * beta;
33 const double gamma = gamma_1 + 1.0;
34 const double gamma2 = gamma * gamma;
35 const double coef1 =
36 4 * M_PI * pow(classic_electr_radius, 2) * electron_mass_c2 *
37 Avogadro; // should be 0.3071 according to PDG
38 const double coef2 = z * z * ratio_Z_to_A / beta2;
39 const double sum =
40 log(2. * electron_mass_c2 * beta2 * gamma2 / I_eff) - beta2;
41 return coef1 * coef2 * sum;
42}
43
45 const double ratio_Z_to_A, const double I_eff, const double m,
46 const double gamma_1, const double ecut, const double z) {
47
48 const double beta = lorbeta(gamma_1);
49 const double beta2 = beta * beta;
50 const double gamma = gamma_1 + 1.0;
51 const double gamma2 = gamma * gamma;
52 const double coef1 =
53 2 * M_PI * pow(classic_electr_radius, 2) * electron_mass_c2 *
54 Avogadro; // should be 0.3071 according to PDG
55 const double coef2 = z * z * ratio_Z_to_A / beta2;
56 const double mrat = electron_mass_c2 / (m * c_squared);
57 const double emax = 2.0 * electron_mass_c2 * beta2 * gamma2 /
58 (1.0 + 2.0 * gamma * mrat + mrat * mrat);
59 double sum = 0.;
60 if (ecut >= emax) {
61 sum = log(2.0 * electron_mass_c2 * beta2 * gamma2 * emax / pow(I_eff, 2)) -
62 2.0 * beta2;
63 } else {
64 sum = log(2.0 * electron_mass_c2 * beta2 * gamma2 * ecut / pow(I_eff, 2)) -
65 beta2 * (1.0 + ecut / emax);
66 }
67 return coef1 * coef2 * sum;
68}
69
70}
DoubleAc pow(const DoubleAc &f, double p)
Definition: DoubleAc.cpp:336
Definition: BGMesh.cpp:3
double Bethe_Bloch_energy_loss_gamma_1(const double ratio_Z_to_A, const double I_eff, const double gamma_1, const double z)
Definition: bethe_bloch.cpp:27
double lorbeta(const double gamma_1)
Definition: lorgamma.cpp:22
double Bethe_Bloch_energy_loss(const double ratio_Z_to_A, const double I_eff, const double beta, const double z)
Definition: bethe_bloch.cpp:14
double lorgamma_1(double beta)
Definition: lorgamma.cpp:9
double Bethe_Bloch_restricted_energy_loss_gamma_1(const double ratio_Z_to_A, const double I_eff, const double m, const double gamma_1, const double ecut, const double z)
Definition: bethe_bloch.cpp:44