Garfield++ 3.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
Garfield::MediumGaAs Class Reference

Gallium-Arsenide. More...

#include <MediumGaAs.hh>

+ Inheritance diagram for Garfield::MediumGaAs:

Public Member Functions

 MediumGaAs ()
 Constructor.
 
virtual ~MediumGaAs ()
 Destructor.
 
bool IsSemiconductor () const override
 Is this medium a semiconductor?
 
void GetComponent (const unsigned int i, std::string &label, double &f) override
 Get the name and fraction of a given component.
 
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].
 
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].
 
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].
 
double ElectronMobility () override
 Low-field mobility [cm2 V-1 ns-1].
 
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 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 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].
 
double HoleMobility () override
 Low-field mobility [cm2 V-1 ns-1].
 
void SetLowFieldMobility (const double mue, const double muh)
 
void UnsetLowFieldMobility ()
 
- Public Member Functions inherited from Garfield::Medium
 Medium ()
 Constructor.
 
virtual ~Medium ()
 Destructor.
 
int GetId () const
 Return the id number of the class instance.
 
const std::string & GetName () const
 Get the medium name/identifier.
 
virtual bool IsGas () const
 Is this medium a gas?
 
virtual bool IsSemiconductor () const
 Is this medium a semiconductor?
 
virtual bool IsConductor () const
 Is this medium a conductor?
 
void SetTemperature (const double t)
 Set the temperature [K].
 
double GetTemperature () const
 Get the temperature [K].
 
void SetPressure (const double p)
 
double GetPressure () const
 
void SetDielectricConstant (const double eps)
 Set the relative static dielectric constant.
 
double GetDielectricConstant () const
 Get the relative static dielectric constant.
 
unsigned int GetNumberOfComponents () const
 Get number of components of the medium.
 
virtual void GetComponent (const unsigned int i, std::string &label, double &f)
 Get the name and fraction of a given component.
 
virtual void SetAtomicNumber (const double z)
 Set the effective atomic number.
 
virtual double GetAtomicNumber () const
 Get the effective atomic number.
 
virtual void SetAtomicWeight (const double a)
 Set the effective atomic weight.
 
virtual double GetAtomicWeight () const
 Get the effective atomic weight.
 
virtual void SetNumberDensity (const double n)
 Set the number density [cm-3].
 
virtual double GetNumberDensity () const
 Get the number density [cm-3].
 
virtual void SetMassDensity (const double rho)
 Set the mass density [g/cm3].
 
virtual double GetMassDensity () const
 Get the mass density [g/cm3].
 
virtual void EnableDrift (const bool on=true)
 Switch electron/ion/hole on/off.
 
virtual void EnablePrimaryIonisation (const bool on=true)
 Make the medium ionisable or non-ionisable.
 
bool IsDriftable () const
 Is charge carrier transport enabled in this medium?
 
bool IsMicroscopic () const
 Does the medium have electron scattering rates?
 
bool IsIonisable () const
 Is charge deposition by charged particles/photon enabled in this medium?
 
void SetW (const double w)
 Set the W value (average energy to produce an electron/ion or e/h pair).
 
double GetW ()
 Get the W value.
 
void SetFanoFactor (const double f)
 Set the Fano factor.
 
double GetFanoFactor ()
 Get the Fano factor.
 
virtual 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)
 Drift velocity [cm / ns].
 
virtual bool ElectronDiffusion (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &dl, double &dt)
 Longitudinal and transverse diffusion coefficients [cm1/2].
 
virtual bool ElectronDiffusion (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double cov[3][3])
 
virtual bool ElectronTownsend (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
 Ionisation coefficient [cm-1].
 
virtual bool ElectronAttachment (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
 Attachment coefficient [cm-1].
 
virtual bool ElectronLorentzAngle (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &lor)
 Lorentz angle.
 
virtual double ElectronMobility ()
 Low-field mobility [cm2 V-1 ns-1].
 
virtual double GetElectronEnergy (const double px, const double py, const double pz, double &vx, double &vy, double &vz, const int band=0)
 Dispersion relation (energy vs. wave vector)
 
virtual void GetElectronMomentum (const double e, double &px, double &py, double &pz, int &band)
 
virtual double GetElectronNullCollisionRate (const int band=0)
 Null-collision rate [ns-1].
 
virtual double GetElectronCollisionRate (const double e, const int band=0)
 Collision rate [ns-1] for given electron energy.
 
virtual bool GetElectronCollision (const double e, int &type, int &level, double &e1, double &dx, double &dy, double &dz, std::vector< std::pair< int, double > > &secondaries, int &ndxc, int &band)
 Sample the collision type. Update energy and direction vector.
 
virtual unsigned int GetNumberOfDeexcitationProducts () const
 
virtual bool GetDeexcitationProduct (const unsigned int i, double &t, double &s, int &type, double &energy) const
 
virtual 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)
 Drift velocity [cm / ns].
 
virtual bool HoleDiffusion (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &dl, double &dt)
 Longitudinal and transverse diffusion coefficients [cm1/2].
 
virtual bool HoleDiffusion (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double cov[3][3])
 Diffusion tensor.
 
virtual bool HoleTownsend (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
 Ionisation coefficient [cm-1].
 
virtual bool HoleAttachment (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
 Attachment coefficient [cm-1].
 
virtual double HoleMobility ()
 Low-field mobility [cm2 V-1 ns-1].
 
virtual bool IonVelocity (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &vx, double &vy, double &vz)
 Drift velocity [cm / ns].
 
virtual bool IonDiffusion (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &dl, double &dt)
 Longitudinal and transverse diffusion coefficients [cm1/2].
 
virtual bool IonDissociation (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &diss)
 Dissociation coefficient.
 
virtual double IonMobility ()
 Low-field mobility [cm2 V-1 ns-1].
 
void SetFieldGrid (double emin, double emax, const size_t ne, bool logE, double bmin=0., double bmax=0., const size_t nb=1, double amin=HalfPi, double amax=HalfPi, const size_t na=1)
 Set the range of fields to be covered by the transport tables.
 
void SetFieldGrid (const std::vector< double > &efields, const std::vector< double > &bfields, const std::vector< double > &angles)
 Set the fields and E-B angles to be used in the transport tables.
 
void GetFieldGrid (std::vector< double > &efields, std::vector< double > &bfields, std::vector< double > &angles)
 Get the fields and E-B angles used in the transport tables.
 
bool SetElectronVelocityE (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
 Set an entry in the table of drift speeds along E.
 
bool GetElectronVelocityE (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
 Get an entry in the table of drift speeds along E.
 
bool SetElectronVelocityExB (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
 Set an entry in the table of drift speeds along ExB.
 
bool GetElectronVelocityExB (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
 Get an entry in the table of drift speeds along ExB.
 
bool SetElectronVelocityB (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
 Set an entry in the table of drift speeds along Btrans.
 
bool GetElectronVelocityB (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
 Get an entry in the table of drift speeds along Btrans.
 
bool SetElectronLongitudinalDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dl)
 Set an entry in the table of longitudinal diffusion coefficients.
 
bool GetElectronLongitudinalDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dl)
 Get an entry in the table of longitudinal diffusion coefficients.
 
bool SetElectronTransverseDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dt)
 Set an entry in the table of transverse diffusion coefficients.
 
bool GetElectronTransverseDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dt)
 Get an entry in the table of transverse diffusion coefficients.
 
bool SetElectronTownsend (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double alpha)
 Set an entry in the table of Townsend coefficients.
 
bool GetElectronTownsend (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &alpha)
 Get an entry in the table of Townsend coefficients.
 
bool SetElectronAttachment (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double eta)
 Set an entry in the table of attachment coefficients.
 
bool GetElectronAttachment (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &eta)
 Get an entry in the table of attachment coefficients.
 
bool SetElectronLorentzAngle (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double lor)
 Set an entry in the table of Lorentz angles.
 
bool GetElectronLorentzAngle (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &lor)
 Get an entry in the table of Lorentz angles.
 
bool SetHoleVelocityE (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
 Set an entry in the table of drift speeds along E.
 
bool GetHoleVelocityE (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
 Get an entry in the table of drift speeds along E.
 
bool SetHoleVelocityExB (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
 Set an entry in the table of drift speeds along ExB.
 
bool GetHoleVelocityExB (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
 Get an entry in the table of drift speeds along ExB.
 
bool SetHoleVelocityB (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
 Set an entry in the table of drift speeds along Btrans.
 
bool GetHoleVelocityB (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
 Get an entry in the table of drift speeds along Btrans.
 
bool SetHoleLongitudinalDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dl)
 Set an entry in the table of longitudinal diffusion coefficients.
 
bool GetHoleLongitudinalDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dl)
 Get an entry in the table of longitudinal diffusion coefficients.
 
bool SetHoleTransverseDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dt)
 Set an entry in the table of transverse diffusion coefficients.
 
bool GetHoleTransverseDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dt)
 Get an entry in the table of transverse diffusion coefficients.
 
bool SetHoleTownsend (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double alpha)
 Set an entry in the table of Townsend coefficients.
 
bool GetHoleTownsend (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &alpha)
 Get an entry in the table of Townsend coefficients.
 
bool SetHoleAttachment (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double eta)
 Set an entry in the table of attachment coefficients.
 
bool GetHoleAttachment (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &eta)
 Get an entry in the table of attachment coefficients.
 
bool SetIonMobility (const std::vector< double > &fields, const std::vector< double > &mobilities)
 
bool SetIonMobility (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double mu)
 Set an entry in the table of ion mobilities.
 
bool GetIonMobility (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &mu)
 Get an entry in the table of ion mobilities.
 
bool SetIonLongitudinalDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dl)
 Set an entry in the table of longitudinal diffusion coefficients.
 
bool GetIonLongitudinalDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dl)
 Get an entry in the table of longitudinal diffusion coefficients.
 
bool SetIonTransverseDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dt)
 Set an entry in the table of transverse diffusion coefficients.
 
bool GetIonTransverseDiffusion (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dt)
 Get an entry in the table of transverse diffusion coefficients.
 
bool SetIonDissociation (const unsigned int ie, const unsigned int ib, const unsigned int ia, const double diss)
 Set an entry in the table of dissociation coefficients.
 
bool GetIonDissociation (const unsigned int ie, const unsigned int ib, const unsigned int ia, double &diss)
 Get an entry in the table of dissociation coefficients.
 
virtual void ResetTables ()
 Reset all tables of transport parameters.
 
void ResetElectronVelocity ()
 
void ResetElectronDiffusion ()
 
void ResetElectronTownsend ()
 
void ResetElectronAttachment ()
 
void ResetElectronLorentzAngle ()
 
void ResetHoleVelocity ()
 
void ResetHoleDiffusion ()
 
void ResetHoleTownsend ()
 
void ResetHoleAttachment ()
 
void ResetIonMobility ()
 
void ResetIonDiffusion ()
 
void ResetIonDissociation ()
 
void SetExtrapolationMethodVelocity (const std::string &extrLow, const std::string &extrHigh)
 
void SetExtrapolationMethodDiffusion (const std::string &extrLow, const std::string &extrHigh)
 
void SetExtrapolationMethodTownsend (const std::string &extrLow, const std::string &extrHigh)
 
void SetExtrapolationMethodAttachment (const std::string &extrLow, const std::string &extrHigh)
 
void SetExtrapolationMethodIonMobility (const std::string &extrLow, const std::string &extrHigh)
 
void SetExtrapolationMethodIonDissociation (const std::string &extrLow, const std::string &extrHigh)
 
void SetInterpolationMethodVelocity (const unsigned int intrp)
 Set the degree of polynomial interpolation (usually 2).
 
void SetInterpolationMethodDiffusion (const unsigned int intrp)
 
void SetInterpolationMethodTownsend (const unsigned int intrp)
 
void SetInterpolationMethodAttachment (const unsigned int intrp)
 
void SetInterpolationMethodIonMobility (const unsigned int intrp)
 
void SetInterpolationMethodIonDissociation (const unsigned int intrp)
 
virtual double ScaleElectricField (const double e) const
 
virtual double UnScaleElectricField (const double e) const
 
virtual double ScaleVelocity (const double v) const
 
virtual double ScaleDiffusion (const double d) const
 
virtual double ScaleDiffusionTensor (const double d) const
 
virtual double ScaleTownsend (const double alpha) const
 
virtual double ScaleAttachment (const double eta) const
 
virtual double ScaleLorentzAngle (const double lor) const
 
virtual double ScaleDissociation (const double diss) const
 
virtual bool GetOpticalDataRange (double &emin, double &emax, const unsigned int i=0)
 Get the energy range [eV] of the available optical data.
 
virtual bool GetDielectricFunction (const double e, double &eps1, double &eps2, const unsigned int i=0)
 Get the complex dielectric function at a given energy.
 
virtual bool GetPhotoAbsorptionCrossSection (const double e, double &sigma, const unsigned int i=0)
 
virtual double GetPhotonCollisionRate (const double e)
 
virtual bool GetPhotonCollision (const double e, int &type, int &level, double &e1, double &ctheta, int &nsec, double &esec)
 
void EnableDebugging ()
 Switch on/off debugging messages.
 
void DisableDebugging ()
 

Additional Inherited Members

- Protected Member Functions inherited from Garfield::Medium
bool Velocity (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, const std::vector< std::vector< std::vector< double > > > &velE, const std::vector< std::vector< std::vector< double > > > &velB, const std::vector< std::vector< std::vector< double > > > &velX, const double q, double &vx, double &vy, double &vz) const
 
bool Diffusion (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, const std::vector< std::vector< std::vector< double > > > &difL, const std::vector< std::vector< std::vector< double > > > &difT, double &dl, double &dt) const
 
bool Diffusion (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, const std::vector< std::vector< std::vector< std::vector< double > > > > &diff, double cov[3][3]) const
 
bool Alpha (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, const std::vector< std::vector< std::vector< double > > > &tab, unsigned int intp, const unsigned int thr, const std::pair< unsigned int, unsigned int > &extr, double &alpha) const
 
double GetAngle (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, const double e, const double b) const
 
bool Interpolate (const double e, const double b, const double a, const std::vector< std::vector< std::vector< double > > > &table, double &y, const unsigned int intp, const std::pair< unsigned int, unsigned int > &extr) const
 
double Interpolate1D (const double e, const std::vector< double > &table, const std::vector< double > &fields, const unsigned int intpMeth, const std::pair< unsigned int, unsigned int > &extr) const
 
bool SetEntry (const unsigned int i, const unsigned int j, const unsigned int k, const std::string &fcn, std::vector< std::vector< std::vector< double > > > &tab, const double val)
 
bool GetEntry (const unsigned int i, const unsigned int j, const unsigned int k, const std::string &fcn, const std::vector< std::vector< std::vector< double > > > &tab, double &val) const
 
void SetExtrapolationMethod (const std::string &low, const std::string &high, std::pair< unsigned int, unsigned int > &extr, const std::string &fcn)
 
bool GetExtrapolationIndex (std::string str, unsigned int &nb) const
 
unsigned int SetThreshold (const std::vector< std::vector< std::vector< double > > > &tab) const
 
void Clone (std::vector< std::vector< std::vector< double > > > &tab, const std::vector< double > &efields, const std::vector< double > &bfields, const std::vector< double > &angles, const unsigned int intp, const std::pair< unsigned int, unsigned int > &extr, const double init, const std::string &label)
 
void Clone (std::vector< std::vector< std::vector< std::vector< double > > > > &tab, const unsigned int n, const std::vector< double > &efields, const std::vector< double > &bfields, const std::vector< double > &angles, const unsigned int intp, const std::pair< unsigned int, unsigned int > &extr, const double init, const std::string &label)
 
void Init (const size_t nE, const size_t nB, const size_t nA, std::vector< std::vector< std::vector< double > > > &tab, const double val)
 
void Init (const size_t nE, const size_t nB, const size_t nA, const size_t nT, std::vector< std::vector< std::vector< std::vector< double > > > > &tab, const double val)
 
- Protected Attributes inherited from Garfield::Medium
std::string m_className = "Medium"
 
int m_id
 
std::string m_name = ""
 
double m_temperature = 293.15
 
double m_pressure = 760.
 
double m_epsilon = 1.
 
unsigned int m_nComponents = 1
 
double m_z = 1.
 
double m_a = 0.
 
double m_density = 0.
 
bool m_driftable = false
 
bool m_microscopic = false
 
bool m_ionisable = false
 
double m_w = 0.
 
double m_fano = 0.
 
bool m_isChanged = true
 
bool m_debug = false
 
std::vector< double > m_eFields
 
std::vector< double > m_bFields
 
std::vector< double > m_bAngles
 
bool m_tab2d = false
 
std::vector< std::vector< std::vector< double > > > m_eVelE
 
std::vector< std::vector< std::vector< double > > > m_eVelX
 
std::vector< std::vector< std::vector< double > > > m_eVelB
 
std::vector< std::vector< std::vector< double > > > m_eDifL
 
std::vector< std::vector< std::vector< double > > > m_eDifT
 
std::vector< std::vector< std::vector< double > > > m_eAlp
 
std::vector< std::vector< std::vector< double > > > m_eAtt
 
std::vector< std::vector< std::vector< double > > > m_eLor
 
std::vector< std::vector< std::vector< std::vector< double > > > > m_eDifM
 
std::vector< std::vector< std::vector< double > > > m_hVelE
 
std::vector< std::vector< std::vector< double > > > m_hVelX
 
std::vector< std::vector< std::vector< double > > > m_hVelB
 
std::vector< std::vector< std::vector< double > > > m_hDifL
 
std::vector< std::vector< std::vector< double > > > m_hDifT
 
std::vector< std::vector< std::vector< double > > > m_hAlp
 
std::vector< std::vector< std::vector< double > > > m_hAtt
 
std::vector< std::vector< std::vector< std::vector< double > > > > m_hDifM
 
std::vector< std::vector< std::vector< double > > > m_iMob
 
std::vector< std::vector< std::vector< double > > > m_iDifL
 
std::vector< std::vector< std::vector< double > > > m_iDifT
 
std::vector< std::vector< std::vector< double > > > m_iDis
 
unsigned int m_eThrAlp = 0
 
unsigned int m_eThrAtt = 0
 
unsigned int m_hThrAlp = 0
 
unsigned int m_hThrAtt = 0
 
unsigned int m_iThrDis = 0
 
std::pair< unsigned int, unsigned int > m_extrVel = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrDif = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrAlp = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrAtt = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrLor = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrMob = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrDis = {0, 1}
 
unsigned int m_intpVel = 2
 
unsigned int m_intpDif = 2
 
unsigned int m_intpAlp = 2
 
unsigned int m_intpAtt = 2
 
unsigned int m_intpLor = 2
 
unsigned int m_intpMob = 2
 
unsigned int m_intpDis = 2
 
- Static Protected Attributes inherited from Garfield::Medium
static int m_idCounter = -1
 

Detailed Description

Gallium-Arsenide.

Definition at line 10 of file MediumGaAs.hh.

Constructor & Destructor Documentation

◆ MediumGaAs()

Garfield::MediumGaAs::MediumGaAs ( )

Constructor.

Definition at line 14 of file MediumGaAs.cc.

14 : Medium() {
15 m_className = "MediumGaAs";
16 m_name = "GaAs";
17
18 SetTemperature(300.);
21 SetAtomicWeight(72.32);
22 SetMassDensity(5.317);
23
26 m_microscopic = false;
27
28 m_w = 4.35;
29 m_fano = 0.1;
30}
void SetTemperature(const double t)
Set the temperature [K].
Definition: Medium.cc:71
bool m_microscopic
Definition: Medium.hh:531
double m_fano
Definition: Medium.hh:537
virtual void EnableDrift(const bool on=true)
Switch electron/ion/hole on/off.
Definition: Medium.hh:67
std::string m_name
Definition: Medium.hh:513
virtual void EnablePrimaryIonisation(const bool on=true)
Make the medium ionisable or non-ionisable.
Definition: Medium.hh:69
virtual void SetAtomicNumber(const double z)
Set the effective atomic number.
Definition: Medium.cc:114
void SetDielectricConstant(const double eps)
Set the relative static dielectric constant.
Definition: Medium.cc:91
virtual void SetMassDensity(const double rho)
Set the mass density [g/cm3].
Definition: Medium.cc:144
Medium()
Constructor.
Definition: Medium.cc:60
virtual void SetAtomicWeight(const double a)
Set the effective atomic weight.
Definition: Medium.cc:124
std::string m_className
Definition: Medium.hh:506

◆ ~MediumGaAs()

virtual Garfield::MediumGaAs::~MediumGaAs ( )
inlinevirtual

Destructor.

Definition at line 15 of file MediumGaAs.hh.

15{}

Member Function Documentation

◆ ElectronAttachment()

bool Garfield::MediumGaAs::ElectronAttachment ( const double  ex,
const double  ey,
const double  ez,
const double  bx,
const double  by,
const double  bz,
double &  eta 
)
overridevirtual

Attachment coefficient [cm-1].

Reimplemented from Garfield::Medium.

Definition at line 104 of file MediumGaAs.cc.

107 {
108 eta = 0.;
109 if (!m_eAtt.empty()) {
110 // Interpolation in user table.
111 return Medium::ElectronAttachment(ex, ey, ez, bx, by, bz, eta);
112 }
113 return true;
114}
std::vector< std::vector< std::vector< double > > > m_eAtt
Definition: Medium.hh:559
virtual bool ElectronAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
Attachment coefficient [cm-1].
Definition: Medium.cc:416

◆ ElectronMobility()

double Garfield::MediumGaAs::ElectronMobility ( )
inlineoverridevirtual

Low-field mobility [cm2 V-1 ns-1].

Reimplemented from Garfield::Medium.

Definition at line 32 of file MediumGaAs.hh.

32{ return m_eMobility; }

◆ ElectronTownsend()

bool Garfield::MediumGaAs::ElectronTownsend ( const double  ex,
const double  ey,
const double  ez,
const double  bx,
const double  by,
const double  bz,
double &  alpha 
)
overridevirtual

Ionisation coefficient [cm-1].

Reimplemented from Garfield::Medium.

Definition at line 84 of file MediumGaAs.cc.

87 {
88 alpha = 0.;
89 if (m_isChanged) {
90 UpdateTransportParameters();
91 m_isChanged = false;
92 }
93 if (!m_eAlp.empty()) {
94 // Interpolation in user table.
95 return Medium::ElectronTownsend(ex, ey, ez, bx, by, bz, alpha);
96 }
97 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
98 if (emag > Small) {
99 alpha = m_eImpactA * exp(-pow(m_eImpactB / emag, 1.82));
100 }
101 return true;
102}
std::vector< std::vector< std::vector< double > > > m_eAlp
Definition: Medium.hh:558
virtual bool ElectronTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
Ionisation coefficient [cm-1].
Definition: Medium.cc:403
bool m_isChanged
Definition: Medium.hh:540
DoubleAc pow(const DoubleAc &f, double p)
Definition: DoubleAc.cpp:337
DoubleAc exp(const DoubleAc &f)
Definition: DoubleAc.cpp:377
DoubleAc sqrt(const DoubleAc &f)
Definition: DoubleAc.cpp:314

◆ ElectronVelocity()

bool Garfield::MediumGaAs::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 
)
overridevirtual

Drift velocity [cm / ns].

Reimplemented from Garfield::Medium.

Definition at line 43 of file MediumGaAs.cc.

46 {
47 vx = vy = vz = 0.;
48 if (m_isChanged) {
49 UpdateTransportParameters();
50 m_isChanged = false;
51 }
52 if (!m_eVelE.empty()) {
53 // Interpolation in user table.
54 return Medium::ElectronVelocity(ex, ey, ez, bx, by, bz, vx, vy, vz);
55 }
56 // Calculate the mobility.
57 // - J. J. Barnes, R. J. Lomax, G. I. Haddad,
58 // IEEE Trans. Electron Devices ED-23 (1976), 1042.
59 const double e2 = ex * ex + ey * ey + ez * ez;
60 // Inverse of the critical field.
61 constexpr double r = 1. / 4000.;
62 constexpr double r4 = r * r * r * r;
63 const double er4 = e2 * e2 * r4;
64 const double mu = -(m_eMobility + er4 * m_eSatVel / sqrt(e2)) / (1. + er4);
65 const double bmag = sqrt(bx * bx + by * by + bz * bz);
66 if (bmag < Small) {
67 vx = mu * ex;
68 vy = mu * ey;
69 vz = mu * ez;
70 } else {
71 // Hall mobility
72 const double muH = m_eHallFactor * mu;
73 const double mu2 = muH * muH;
74 const double eb = bx * ex + by * ey + bz * ez;
75 const double f = muH / (1. + mu2 * bmag * bmag);
76 // Compute the drift velocity using the Langevin equation.
77 vx = f * (ex + muH * (ey * bz - ez * by) + mu2 * bx * eb);
78 vy = f * (ey + muH * (ez * bx - ex * bz) + mu2 * by * eb);
79 vz = f * (ez + muH * (ex * by - ey * bx) + mu2 * bz * eb);
80 }
81 return true;
82}
virtual 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)
Drift velocity [cm / ns].
Definition: Medium.cc:379
std::vector< std::vector< std::vector< double > > > m_eVelE
Definition: Medium.hh:553

◆ GetComponent()

void Garfield::MediumGaAs::GetComponent ( const unsigned int  i,
std::string &  label,
double &  f 
)
overridevirtual

Get the name and fraction of a given component.

Reimplemented from Garfield::Medium.

Definition at line 32 of file MediumGaAs.cc.

33 {
34 if (i == 0) {
35 label = "Ga";
36 f = 0.5;
37 } else if (i == 1) {
38 label = "As";
39 f = 0.5;
40 }
41}

◆ HoleAttachment()

bool Garfield::MediumGaAs::HoleAttachment ( const double  ex,
const double  ey,
const double  ez,
const double  bx,
const double  by,
const double  bz,
double &  eta 
)
overridevirtual

Attachment coefficient [cm-1].

Reimplemented from Garfield::Medium.

Definition at line 174 of file MediumGaAs.cc.

176 {
177 eta = 0.;
178 if (!m_hAtt.empty()) {
179 // Interpolation in user table.
180 return Medium::HoleAttachment(ex, ey, ez, bx, by, bz, eta);
181 }
182 return true;
183}
std::vector< std::vector< std::vector< double > > > m_hAtt
Definition: Medium.hh:571
virtual bool HoleAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
Attachment coefficient [cm-1].
Definition: Medium.cc:547

◆ HoleMobility()

double Garfield::MediumGaAs::HoleMobility ( )
inlineoverridevirtual

Low-field mobility [cm2 V-1 ns-1].

Reimplemented from Garfield::Medium.

Definition at line 43 of file MediumGaAs.hh.

43{ return m_hMobility; }

◆ HoleTownsend()

bool Garfield::MediumGaAs::HoleTownsend ( const double  ex,
const double  ey,
const double  ez,
const double  bx,
const double  by,
const double  bz,
double &  alpha 
)
overridevirtual

Ionisation coefficient [cm-1].

Reimplemented from Garfield::Medium.

Definition at line 154 of file MediumGaAs.cc.

156 {
157 alpha = 0.;
158 if (m_isChanged) {
159 UpdateTransportParameters();
160 m_isChanged = false;
161 }
162 if (!m_hAlp.empty()) {
163 // Interpolation in user table.
164 return Medium::HoleTownsend(ex, ey, ez, bx, by, bz, alpha);
165 }
166 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
167 if (emag > Small) {
168 // alpha = m_hImpactA * exp(-m_hImpactB / emag);
169 alpha = m_hImpactA * exp(-pow(m_hImpactB / emag, 1.75));
170 }
171 return true;
172}
virtual bool HoleTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
Ionisation coefficient [cm-1].
Definition: Medium.cc:534
std::vector< std::vector< std::vector< double > > > m_hAlp
Definition: Medium.hh:570

◆ HoleVelocity()

bool Garfield::MediumGaAs::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 
)
overridevirtual

Drift velocity [cm / ns].

Reimplemented from Garfield::Medium.

Definition at line 116 of file MediumGaAs.cc.

118 {
119 vx = vy = vz = 0.;
120 if (m_isChanged) {
121 UpdateTransportParameters();
122 m_isChanged = false;
123 }
124 if (!m_hVelE.empty()) {
125 // Interpolation in user table.
126 return Medium::HoleVelocity(ex, ey, ez, bx, by, bz, vx, vy, vz);
127 }
128 // Calculate the mobility.
129 // - J. J. Barnes, R. J. Lomax, G. I. Haddad,
130 // IEEE Trans. Electron Devices ED-23 (1976), 1042–1048.
131 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
132 // Inverse of the critical field.
133 constexpr double r = 1. / 4000.;
134 const double mu = (m_hMobility + m_hSatVel * r) / (1. + emag * r);
135 const double bmag = sqrt(bx * bx + by * by + bz * bz);
136 if (bmag < Small) {
137 vx = mu * ex;
138 vy = mu * ey;
139 vz = mu * ez;
140 } else {
141 // Hall mobility
142 const double muH = m_hHallFactor * mu;
143 const double mu2 = muH * muH;
144 const double eb = bx * ex + by * ey + bz * ez;
145 const double f = mu / (1. + mu2 * bmag * bmag);
146 // Compute the drift velocity using the Langevin equation.
147 vx = f * (ex + muH * (ey * bz - ez * by) + mu2 * bx * eb);
148 vy = f * (ey + muH * (ez * bx - ex * bz) + mu2 * by * eb);
149 vz = f * (ez + muH * (ex * by - ey * bx) + mu2 * bz * eb);
150 }
151 return true;
152}
virtual 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)
Drift velocity [cm / ns].
Definition: Medium.cc:513
std::vector< std::vector< std::vector< double > > > m_hVelE
Definition: Medium.hh:565

◆ IsSemiconductor()

bool Garfield::MediumGaAs::IsSemiconductor ( ) const
inlineoverridevirtual

Is this medium a semiconductor?

Reimplemented from Garfield::Medium.

Definition at line 17 of file MediumGaAs.hh.

17{ return true; }

◆ SetLowFieldMobility()

void Garfield::MediumGaAs::SetLowFieldMobility ( const double  mue,
const double  muh 
)

Definition at line 185 of file MediumGaAs.cc.

185 {
186
187 if (mue <= 0. || muh <= 0.) {
188 std::cerr << m_className << "::SetLowFieldMobility:\n"
189 << " Mobility must be greater than zero.\n";
190 return;
191 }
192 m_eMobility = mue;
193 m_hMobility = muh;
194 m_userMobility = true;
195 m_isChanged = true;
196}

◆ UnsetLowFieldMobility()

void Garfield::MediumGaAs::UnsetLowFieldMobility ( )

Definition at line 198 of file MediumGaAs.cc.

198 {
199 m_userMobility = false;
200 m_isChanged = true;
201}

The documentation for this class was generated from the following files: