Garfield 0.3
Toolkit for the detailed simulation of particle detectors based on ionization 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#include <vector>
6
8#include "Garfield/Track.hh"
9
10namespace Garfield {
11
17
18class TrackBichsel : public Track {
19 public:
20 struct Cluster {
21 double x, y, z, t;
22 double energy;
23 };
24
26 TrackBichsel() : TrackBichsel(nullptr) {}
28 TrackBichsel(Sensor* sensor);
30 virtual ~TrackBichsel() {}
31
32 bool NewTrack(const double x0, const double y0, const double z0,
33 const double t0, const double dx0, const double dy0,
34 const double dz0) override;
35 const std::vector<Cluster>& GetClusters() const { return m_clusters; }
36
37 double GetClusterDensity() override;
38 double GetStoppingPower() override;
39
40 bool Initialise();
42
43 private:
44 constexpr static size_t NEnergyBins = 1250;
45 std::array<double, NEnergyBins + 1> m_E;
46
48 std::array<double, NEnergyBins> m_dfdE;
50 std::array<double, NEnergyBins> m_eps1;
52 std::array<double, NEnergyBins> m_eps2;
54 std::array<double, NEnergyBins> m_int;
56 std::array<double, NEnergyBins> m_k1;
57
58 constexpr static size_t NCdfBins = 10000;
59 std::array<double, NCdfBins> m_tab;
60
62 double m_density;
64 double m_conv = 0.0092456;
65
66 bool m_initialised = false;
67
69 double m_imfp = 0.;
71 double m_dEdx = 0.;
72
74 double m_speed = SpeedOfLight;
75
76 std::vector<Cluster> m_clusters;
77};
78} // namespace Garfield
79
80#endif
double m_conv
Conversion from optical loss function to oscillator strength density.
std::array< double, NEnergyBins > m_int
Integral over the generalised oscillator strength density.
std::array< double, NCdfBins > m_tab
std::array< double, NEnergyBins > m_eps2
Imaginary part of the dielectric function.
double m_density
Density of silicon.
std::array< double, NEnergyBins > m_k1
Lower limit of the integral over the GOS.
std::vector< Cluster > m_clusters
const std::vector< Cluster > & GetClusters() const
std::array< double, NEnergyBins > m_dfdE
Optical oscillator strength density.
double GetClusterDensity() override
Get the cluster density (number of ionizing collisions per cm or inverse mean free path for ionizatio...
static constexpr size_t NEnergyBins
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
Calculate a new track starting from (x0, y0, z0) at time t0 in direction (dx0, dy0,...
double m_dEdx
Stopping power [eV/cm].
double m_imfp
Inverse mean free path [cm-1].
static constexpr size_t NCdfBins
std::array< double, NEnergyBins > m_eps1
Real part of the dielectric function.
std::array< double, NEnergyBins+1 > m_E
double m_speed
Particle speed.
virtual ~TrackBichsel()
Destructor.
TrackBichsel()
Default constructor.
TrackBichsel(Sensor *sensor)
Constructor.
Track()=delete
Default constructor.