Garfield 0.3
Toolkit for the detailed simulation of particle detectors based on ionization measurement in gases and semiconductors
Loading...
Searching...
No Matches
TrackElectron.hh
Go to the documentation of this file.
1#ifndef G_TRACK_ELECTRON
2#define G_TRACK_ELECTRON
3
4#include <string>
5#include <vector>
6
7#include "Garfield/Track.hh"
8
9namespace Garfield {
10class Medium;
11
13
14class TrackElectron : public Track {
15 public:
16 struct Cluster {
17 double x, y, z, t;
18 double esec;
19 };
20
24 virtual ~TrackElectron() {}
25
26 void SetParticle(const std::string& particle) override;
27
28 bool NewTrack(const double x0, const double y0, const double z0,
29 const double t0, const double dx0, const double dy0,
30 const double dz0) override;
31
32 const std::vector<Cluster>& GetClusters() const { return m_clusters; }
33
34 double GetClusterDensity() override;
35 double GetStoppingPower() override;
36
37 private:
38 struct Parameters {
39 // Dipole moment
40 double m2;
41 // Constant in ionisation cross-section
42 double cIon;
43 // Density correction term
44 double x0;
45 double x1;
46 double cDens;
47 double aDens;
48 double mDens;
49 // Opal-Beaty-Peterson splitting factor
50 double wSplit;
51 // Ionisation threshold
52 double ethr;
53 };
54
55 std::vector<Cluster> m_clusters;
56
57 // Mean free path
58 double m_mfp = 0.;
59 // Stopping power
60 double m_dedx = 0.;
61
62 static bool Setup(Medium* gas, std::vector<Parameters>& par,
63 std::vector<double>& frac);
64 static bool Update(const double density, const double beta2,
65 const std::vector<Parameters>& par,
66 const std::vector<double>& frac, std::vector<double>& prob,
67 double& mfp, double& dedx);
68 static double Delta(const double x, const Parameters& par);
69 static double Esec(const double e0, const Parameters& par);
70};
71} // namespace Garfield
72
73#endif
static bool Setup(Medium *gas, std::vector< Parameters > &par, std::vector< double > &frac)
void SetParticle(const std::string &particle) override
Set the type of charged particle.
static double Esec(const double e0, const Parameters &par)
const std::vector< Cluster > & GetClusters() const
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 GetClusterDensity() override
Get the cluster density (number of ionizing collisions per cm or inverse mean free path for ionizatio...
static double Delta(const double x, const Parameters &par)
double GetStoppingPower() override
Get the stopping power (mean energy loss [eV] per cm).
static bool Update(const double density, const double beta2, const std::vector< Parameters > &par, const std::vector< double > &frac, std::vector< double > &prob, double &mfp, double &dedx)
virtual ~TrackElectron()
Destructor.
TrackElectron()
Constructor.
std::vector< Cluster > m_clusters
Track()=delete
Default constructor.