Garfield++ 5.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
TrackBichsel.hh
Go to the documentation of this file.
1#ifndef G_TRACK_BICHSEL_H
2#define G_TRACK_BICHSEL_H
3
4#include <array>
5
7#include "Track.hh"
8
9namespace Garfield {
10
11/// Generate tracks using differential cross-sections
12/// for silicon computed by Hans Bichsel.
13/// References:
14/// - H. Bichsel, Rev. Mod. Phys. 60 (1988), 663-699
15/// - https://faculty.washington.edu/hbichsel/
16
17class TrackBichsel : public Track {
18 public:
19 struct Cluster {
20 double x, y, z, t;
21 double energy;
22 };
23
24 /// Default constructor
25 TrackBichsel() : TrackBichsel(nullptr) {}
26 /// Constructor
27 TrackBichsel(Sensor* sensor);
28 /// Destructor
29 virtual ~TrackBichsel() {}
30
31 bool NewTrack(const double x0, const double y0, const double z0,
32 const double t0, const double dx0, const double dy0,
33 const double dz0) override;
34 bool GetCluster(double& xc, double& yc, double& zc, double& tc, int& nc,
35 double& ec, double& extra) override;
36 const std::vector<Cluster>& GetClusters() const { return m_clusters; }
37
38 double GetClusterDensity() override;
39 double GetStoppingPower() override;
40
41 bool Initialise();
43
44 private:
45 constexpr static size_t NEnergyBins = 1250;
46 std::array<double, NEnergyBins + 1> m_E;
47
48 /// Optical oscillator strength density.
49 std::array<double, NEnergyBins> m_dfdE;
50 /// Real part of the dielectric function.
51 std::array<double, NEnergyBins> m_eps1;
52 /// Imaginary part of the dielectric function.
53 std::array<double, NEnergyBins> m_eps2;
54 /// Integral over the generalised oscillator strength density.
55 std::array<double, NEnergyBins> m_int;
56 /// Lower limit of the integral over the GOS.
57 std::array<double, NEnergyBins> m_k1;
58
59 constexpr static size_t NCdfBins = 10000;
60 std::array<double, NCdfBins> m_tab;
61
62 /// Density of silicon.
63 double m_density;
64 /// Conversion from optical loss function to oscillator strength density.
65 double m_conv = 0.0092456;
66
67 bool m_initialised = false;
68
69 /// Inverse mean free path [cm-1].
70 double m_imfp = 0.;
71 /// Stopping power [eV/cm].
72 double m_dEdx = 0.;
73
74 /// Particle speed
75 double m_speed = SpeedOfLight;
76
77 std::vector<Cluster> m_clusters;
78 size_t m_cluster = 0;
79};
80}
81
82#endif
const std::vector< Cluster > & GetClusters() const
double GetClusterDensity() override
double GetStoppingPower() override
Get the stopping power (mean energy loss [eV] per cm).
bool NewTrack(const double x0, const double y0, const double z0, const double t0, const double dx0, const double dy0, const double dz0) override
bool GetCluster(double &xc, double &yc, double &zc, double &tc, int &nc, double &ec, double &extra) override
virtual ~TrackBichsel()
Destructor.
TrackBichsel()
Default constructor.
Track()=delete
Default constructor.