Garfield++ 4.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
MediumDiamond.hh
Go to the documentation of this file.
1#ifndef G_MEDIUM_DIAMOND_H
2#define G_MEDIUM_DIAMOND_H
3
4#include <mutex>
5
6#include "Medium.hh"
7
8namespace Garfield {
9
10/// Diamond.
11
12class MediumDiamond : public Medium {
13 public:
14 /// Constructor
16 /// Destructor
17 virtual ~MediumDiamond() {}
18
19 bool IsSemiconductor() const override { return true; }
20
21 void GetComponent(const unsigned int i, std::string& label,
22 double& f) override;
23
24 // Electron transport parameters
25 bool ElectronVelocity(const double ex, const double ey, const double ez,
26 const double bx, const double by, const double bz,
27 double& vx, double& vy, double& vz) override;
28 bool ElectronTownsend(const double ex, const double ey, const double ez,
29 const double bx, const double by, const double bz,
30 double& alpha) override;
31 bool ElectronAttachment(const double ex, const double ey, const double ez,
32 const double bx, const double by, const double bz,
33 double& eta) override;
34 double ElectronMobility() override { return m_eMobility; }
35 // Hole transport parameters
36 bool HoleVelocity(const double ex, const double ey, const double ez,
37 const double bx, const double by, const double bz,
38 double& vx, double& vy, double& vz) override;
39 bool HoleTownsend(const double ex, const double ey, const double ez,
40 const double bx, const double by, const double bz,
41 double& alpha) override;
42 bool HoleAttachment(const double ex, const double ey, const double ez,
43 const double bx, const double by, const double bz,
44 double& eta) override;
45 double HoleMobility() override { return m_hMobility; }
46
47 void SetLowFieldMobility(const double mue, const double muh);
49
50 void SetSaturationVelocity(const double vsate, const double vsath);
52 private:
53 std::mutex m_mutex;
54
55 // Low-field mobility
56 double m_eMobility = 4.551e-6;
57 double m_hMobility = 2.750e-6;
58 // Hall factor
59 double m_eHallFactor = 1.;
60 double m_hHallFactor = 1.;
61 // Saturation velocity
62 double m_eSatVel = 2.6e-2;
63 double m_hSatVel = 1.6e-2;
64
65 bool m_userMobility = false;
66
67 void UpdateTransportParameters();
68};
69}
70
71#endif
bool HoleVelocity(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &vx, double &vy, double &vz) override
Drift velocity [cm / ns].
bool IsSemiconductor() const override
Is this medium a semiconductor?
bool ElectronTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha) override
Ionisation coefficient [cm-1].
double ElectronMobility() override
Low-field mobility [cm2 V-1 ns-1].
virtual ~MediumDiamond()
Destructor.
bool HoleTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha) override
Ionisation coefficient [cm-1].
bool ElectronAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta) override
Attachment coefficient [cm-1].
bool HoleAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta) override
Attachment coefficient [cm-1].
void SetSaturationVelocity(const double vsate, const double vsath)
bool ElectronVelocity(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &vx, double &vy, double &vz) override
Drift velocity [cm / ns].
void GetComponent(const unsigned int i, std::string &label, double &f) override
Get the name and fraction of a given component.
MediumDiamond()
Constructor.
Definition: MediumDiamond.cc:9
double HoleMobility() override
Low-field mobility [cm2 V-1 ns-1].
void SetLowFieldMobility(const double mue, const double muh)
Abstract base class for media.
Definition: Medium.hh:13