30 virtual bool IsGas()
const {
return false; }
52 virtual void GetComponent(
const unsigned int i, std::string& label,
109 const double ez,
const double bx,
110 const double by,
const double bz,
double& vx,
111 double& vy,
double& vz);
115 const double ez,
const double bx,
116 const double by,
const double bz,
117 double& wv,
double& wr);
120 const double ez,
const double bx,
121 const double by,
const double bz,
double& dl,
127 const double ez,
const double bx,
128 const double by,
const double bz,
132 const double ez,
const double bx,
133 const double by,
const double bz,
137 const double ez,
const double bx,
138 const double by,
const double bz,
142 const double ez,
const double bx,
143 const double by,
const double bz,
147 const double ez,
const double bx,
148 const double by,
const double bz,
152 const double ez,
const double bx,
153 const double by,
const double bz,
161 const double pz,
double& vx,
double& vy,
162 double& vz,
const int band = 0);
166 double& pz,
int& band);
181 double& e1,
double& dx,
double& dy,
double& dz,
182 std::vector<Secondary>& secondaries,
187 virtual bool HoleVelocity(
const double ex,
const double ey,
const double ez,
188 const double bx,
const double by,
const double bz,
189 double& vx,
double& vy,
double& vz);
191 virtual bool HoleDiffusion(
const double ex,
const double ey,
const double ez,
192 const double bx,
const double by,
const double bz,
193 double& dl,
double& dt);
195 virtual bool HoleDiffusion(
const double ex,
const double ey,
const double ez,
196 const double bx,
const double by,
const double bz,
199 virtual bool HoleTownsend(
const double ex,
const double ey,
const double ez,
200 const double bx,
const double by,
const double bz,
204 const double bx,
const double by,
const double bz,
211 virtual bool IonVelocity(
const double ex,
const double ey,
const double ez,
212 const double bx,
const double by,
const double bz,
213 double& vx,
double& vy,
double& vz);
216 virtual bool IonDiffusion(
const double ex,
const double ey,
const double ez,
217 const double bx,
const double by,
const double bz,
218 double& dl,
double& dt);
221 const double ez,
const double bx,
222 const double by,
const double bz,
double& diss);
228 const double ez,
const double bx,
229 const double by,
const double bz,
double& vx,
230 double& vy,
double& vz);
235 void SetFieldGrid(
double emin,
double emax,
const size_t ne,
bool logE,
236 double bmin = 0.,
double bmax = 0.,
const size_t nb = 1,
237 double amin = HalfPi,
double amax = HalfPi,
238 const size_t na = 1);
241 const std::vector<double>& bfields,
242 const std::vector<double>& angles);
244 void GetFieldGrid(std::vector<double>& efields, std::vector<double>& bfields,
245 std::vector<double>& angles);
279 const size_t ia,
const double v) {
284 const size_t ia,
double& v) {
289 const size_t ia,
const double v) {
294 const size_t ia,
double& v) {
299 const size_t ia,
const double dl) {
300 return SetEntry(ie, ib, ia,
"ElectronLongitudinalDiffusion",
m_eDifL, dl);
304 const size_t ia,
double& dl) {
305 return GetEntry(ie, ib, ia,
"ElectronLongitudinalDiffusion",
m_eDifL, dl);
309 const size_t ia,
const double dt) {
310 return SetEntry(ie, ib, ia,
"ElectronTransverseDiffusion",
m_eDifT, dt);
314 const size_t ia,
double& dt) {
315 return GetEntry(ie, ib, ia,
"ElectronTransverseDiffusion",
m_eDifT, dt);
319 const double alpha) {
339 const size_t ia,
const double v) {
344 const size_t ia,
double& v) {
349 const size_t ia,
const double v) {
354 const size_t ia,
double& v) {
360 const size_t ia,
const double lor) {
365 const size_t ia,
double& lor) {
402 const size_t ia,
const double dl) {
407 const size_t ia,
double& dl) {
412 const size_t ia,
const double dt) {
417 const size_t ia,
double& dt) {
422 const double alpha) {
446 const std::vector<double>& mobilities,
447 const bool negativeIons =
false);
459 const size_t ia,
const double dl) {
464 const size_t ia,
double& dl) {
469 const size_t ia,
const double dt) {
474 const size_t ia,
double& dt) {
548 const std::vector<std::vector<std::vector<double> > >& mob,
549 std::vector<std::vector<std::vector<double> > >& vel);
554 const std::string& extrHigh);
556 const std::string& extrHigh);
558 const std::string& extrHigh);
560 const std::string& extrHigh);
562 const std::string& extrHigh);
564 const std::string& extrHigh);
588 const unsigned int i = 0);
591 const unsigned int i = 0);
594 const unsigned int i = 0);
597 double& e1,
double& ctheta,
598 std::vector<Secondary>& secondaries);
657 std::vector<std::vector<std::vector<double> > >
m_eVelE;
658 std::vector<std::vector<std::vector<double> > >
m_eVelX;
659 std::vector<std::vector<std::vector<double> > >
m_eVelB;
660 std::vector<std::vector<std::vector<double> > >
m_eDifL;
661 std::vector<std::vector<std::vector<double> > >
m_eDifT;
662 std::vector<std::vector<std::vector<double> > >
m_eAlp;
663 std::vector<std::vector<std::vector<double> > >
m_eAtt;
664 std::vector<std::vector<std::vector<double> > >
m_eLor;
665 std::vector<std::vector<std::vector<double> > >
m_eVelWv;
666 std::vector<std::vector<std::vector<double> > >
m_eVelWr;
667 std::vector<std::vector<std::vector<double> > >
m_eRIon;
668 std::vector<std::vector<std::vector<double> > >
m_eRAtt;
670 std::vector<std::vector<std::vector<std::vector<double> > > >
m_eDifM;
673 std::vector<std::vector<std::vector<double> > >
m_hVelE;
674 std::vector<std::vector<std::vector<double> > >
m_hVelX;
675 std::vector<std::vector<std::vector<double> > >
m_hVelB;
676 std::vector<std::vector<std::vector<double> > >
m_hDifL;
677 std::vector<std::vector<std::vector<double> > >
m_hDifT;
678 std::vector<std::vector<std::vector<double> > >
m_hAlp;
679 std::vector<std::vector<std::vector<double> > >
m_hAtt;
681 std::vector<std::vector<std::vector<std::vector<double> > > >
m_hDifM;
684 std::vector<std::vector<std::vector<double> > >
m_iMob;
685 std::vector<std::vector<std::vector<double> > >
m_iVel;
686 std::vector<std::vector<std::vector<double> > >
m_iDifL;
687 std::vector<std::vector<std::vector<double> > >
m_iDifT;
688 std::vector<std::vector<std::vector<double> > >
m_iDis;
690 std::vector<std::vector<std::vector<double> > >
m_nMob;
691 std::vector<std::vector<std::vector<double> > >
m_nVel;
701 std::pair<unsigned int, unsigned int>
m_extrVel = {0, 1};
702 std::pair<unsigned int, unsigned int>
m_extrDif = {0, 1};
703 std::pair<unsigned int, unsigned int>
m_extrAlp = {0, 1};
704 std::pair<unsigned int, unsigned int>
m_extrAtt = {0, 1};
705 std::pair<unsigned int, unsigned int>
m_extrLor = {0, 1};
706 std::pair<unsigned int, unsigned int>
m_extrMob = {0, 1};
707 std::pair<unsigned int, unsigned int>
m_extrDis = {0, 1};
718 bool Velocity(
const double ex,
const double ey,
const double ez,
719 const double bx,
const double by,
const double bz,
720 const std::vector<std::vector<std::vector<double> > >& velE,
721 const std::vector<std::vector<std::vector<double> > >& velB,
722 const std::vector<std::vector<std::vector<double> > >& velX,
723 const double q,
double& vx,
double& vy,
double& vz)
const;
725 const double ex,
const double ey,
const double ez,
const double bx,
726 const double by,
const double bz,
727 const std::vector<std::vector<std::vector<double> > >& velWv,
728 const std::vector<std::vector<std::vector<double> > >& velWr,
double& wv,
730 static void Langevin(
const double ex,
const double ey,
const double ez,
731 double bx,
double by,
double bz,
const double mu,
732 double& vx,
double& vy,
double& vz);
733 static void Langevin(
const double ex,
const double ey,
const double ez,
734 double bx,
double by,
double bz,
const double mu,
735 const double muH,
double& vx,
double& vy,
double& vz);
736 bool Diffusion(
const double ex,
const double ey,
const double ez,
737 const double bx,
const double by,
const double bz,
738 const std::vector<std::vector<std::vector<double> > >& difL,
739 const std::vector<std::vector<std::vector<double> > >& difT,
740 double& dl,
double& dt)
const;
742 const double ex,
const double ey,
const double ez,
const double bx,
743 const double by,
const double bz,
744 const std::vector<std::vector<std::vector<std::vector<double> > > >& diff,
745 double cov[3][3])
const;
746 bool Alpha(
const double ex,
const double ey,
const double ez,
const double bx,
747 const double by,
const double bz,
748 const std::vector<std::vector<std::vector<double> > >& tab,
749 unsigned int intp,
const unsigned int thr,
750 const std::pair<unsigned int, unsigned int>& extr,
751 double& alpha)
const;
752 double GetAngle(
const double ex,
const double ey,
const double ez,
753 const double bx,
const double by,
const double bz,
754 const double e,
const double b)
const;
756 const std::vector<std::vector<std::vector<double> > >& table,
757 double& y,
const unsigned int intp,
758 const std::pair<unsigned int, unsigned int>& extr,
759 const bool logval =
false)
const;
762 const std::vector<double>& fields,
763 const unsigned int intpMeth,
764 const std::pair<unsigned int, unsigned int>& extr,
765 const bool logval =
false)
const;
767 bool SetEntry(
const size_t i,
const size_t j,
const size_t k,
768 const std::string& fcn,
769 std::vector<std::vector<std::vector<double> > >& tab,
771 bool GetEntry(
const size_t i,
const size_t j,
const size_t k,
772 const std::string& fcn,
773 const std::vector<std::vector<std::vector<double> > >& tab,
777 std::pair<unsigned int, unsigned int>& extr,
778 const std::string& fcn);
781 const std::vector<std::vector<std::vector<double> > >& tab)
const;
783 void Clone(std::vector<std::vector<std::vector<double> > >& tab,
784 const std::vector<double>& efields,
785 const std::vector<double>& bfields,
786 const std::vector<double>& angles,
const unsigned int intp,
787 const std::pair<unsigned int, unsigned int>& extr,
788 const double init,
const std::string& label);
789 void Clone(std::vector<std::vector<std::vector<std::vector<double> > > >& tab,
790 const size_t n,
const std::vector<double>& efields,
791 const std::vector<double>& bfields,
792 const std::vector<double>& angles,
const unsigned int intp,
793 const std::pair<unsigned int, unsigned int>& extr,
794 const double init,
const std::string& label);
796 void Init(
const size_t nE,
const size_t nB,
const size_t nA,
797 std::vector<std::vector<std::vector<double> > >& tab,
799 void Init(
const size_t nE,
const size_t nB,
const size_t nA,
const size_t nT,
800 std::vector<std::vector<std::vector<std::vector<double> > > >& tab,
bool GetElectronTOFAttachment(const size_t ie, const size_t ib, const size_t ia, double &v)
Get an entry in the table of attachment rate of TOF.
void ResetHoleAttachment()
bool SetNegativeIonMobility(const size_t ie, const size_t ib, const size_t ia, const double mu)
Set an entry in the table of negative ion mobilities.
double GetW() const
Get the W value.
std::vector< std::vector< std::vector< double > > > m_eRIon
bool HasIonVelocity() const
virtual void SetNumberDensity(const double n)
Set the number density [cm-3].
virtual double UnScaleElectricField(const double e) const
bool GetHoleLongitudinalDiffusion(const size_t ie, const size_t ib, const size_t ia, double &dl)
Get an entry in the table of longitudinal diffusion coefficients.
virtual double ScaleVelocity(const double v) const
bool GetHoleTownsend(const size_t ie, const size_t ib, const size_t ia, double &alpha)
Get an entry in the table of Townsend coefficients.
void ResetElectronAttachment()
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].
std::vector< double > m_bFields
bool IsMicroscopic() const
Does the medium have electron scattering rates?
virtual void GetElectronMomentum(const double e, double &px, double &py, double &pz, int &band)
Sample the momentum vector for a given energy (only meaningful in semiconductors).
void SetTemperature(const double t)
Set the temperature [K].
virtual bool PhotonCollision(const double e, int &type, int &level, double &e1, double &ctheta, std::vector< Secondary > &secondaries)
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)
Ion drift velocity [cm / ns].
void ResetElectronLorentzAngle()
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].
void SetFanoFactor(const double f)
Set the Fano factor.
virtual double GetElectronNullCollisionRate(const int band=0)
Null-collision rate [ns-1].
bool GetElectronLorentzAngle(const size_t ie, const size_t ib, const size_t ia, double &lor)
Get an entry in the table of Lorentz angles.
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 double ScaleAttachment(const double eta) const
bool GetEntry(const size_t i, const size_t j, const size_t k, const std::string &fcn, const std::vector< std::vector< std::vector< double > > > &tab, double &val) const
void SetExtrapolationMethodIonDissociation(const std::string &extrLow, const std::string &extrHigh)
void SetInterpolationMethodIonDissociation(const unsigned int intrp)
bool SetElectronLongitudinalDiffusion(const size_t ie, const size_t ib, const size_t ia, const double dl)
Set an entry in the table of longitudinal diffusion coefficients.
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
virtual double ScaleDiffusion(const double d) const
virtual double GetNumberDensity() const
Get the number density [cm-3].
bool GetHoleAttachment(const size_t ie, const size_t ib, const size_t ia, double &eta)
Get an entry in the table of attachment coefficients.
bool SetIonMobility(const size_t ie, const size_t ib, const size_t ia, const double mu)
Set an entry in the table of ion mobilities.
bool SetElectronVelocityB(const size_t ie, const size_t ib, const size_t ia, const double v)
Set an entry in the table of drift speeds along Btrans.
virtual double ScaleLorentzAngle(const double lor) const
bool GetIonTransverseDiffusion(const size_t ie, const size_t ib, const size_t ia, double &dt)
Get an entry in the table of transverse diffusion coefficients.
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].
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
std::vector< std::vector< std::vector< double > > > m_eAlp
bool GetElectronTransverseDiffusion(const size_t ie, const size_t ib, const size_t ia, double &dt)
Get an entry in the table of transverse diffusion coefficients.
virtual void ResetTables()
Reset all tables of transport parameters.
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.
std::vector< std::vector< std::vector< double > > > m_hAlp
void ResetIonDissociation()
virtual void SetAtomicNumber(const double z)
Set the effective atomic number.
bool SetElectronAttachment(const size_t ie, const size_t ib, const size_t ia, const double eta)
Set an entry in the table of attachment coefficients.
virtual void EnableDrift(const bool on=true)
Switch electron/ion/hole transport on/off.
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].
bool SetHoleVelocityE(const size_t ie, const size_t ib, const size_t ia, const double v)
Set an entry in the table of drift speeds along E.
virtual bool ElectronTOFAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &ratttof)
TOF Attachment Rate [ns-1].
bool GetElectronBulkVelocity(const size_t ie, const size_t ib, const size_t ia, double &v)
Get an entry in the table of bulk drift speeds.
double GetDielectricConstant() const
Get the relative static dielectric constant.
bool SetHoleLongitudinalDiffusion(const size_t ie, const size_t ib, const size_t ia, const double dl)
Set an entry in the table of longitudinal diffusion coefficients.
virtual double HoleMobility()
Low-field mobility [cm2 V-1 ns-1].
static void Langevin(const double ex, const double ey, const double ez, double bx, double by, double bz, const double mu, double &vx, double &vy, double &vz)
std::vector< std::vector< std::vector< double > > > m_eVelWv
std::vector< std::vector< std::vector< double > > > m_eRAtt
double GetPressure() const
virtual void EnablePrimaryIonisation(const bool on=true)
Make the medium ionisable or non-ionisable.
std::pair< unsigned int, unsigned int > m_extrAtt
int GetId() const
Return the id number of the class instance.
void SetExtrapolationMethodTownsend(const std::string &extrLow, const std::string &extrHigh)
virtual double GetElectronCollisionRate(const double e, const int band=0)
Collision rate [ns-1] for given electron energy.
bool SetHoleAttachment(const size_t ie, const size_t ib, const size_t ia, const double eta)
Set an entry in the table of attachment coefficients.
virtual double GetPhotonCollisionRate(const double e)
bool SetElectronTownsend(const size_t ie, const size_t ib, const size_t ia, const double alpha)
Set an entry in the table of Townsend coefficients.
virtual double GetAtomicWeight() const
Get the effective atomic weight.
bool GetHoleTransverseDiffusion(const size_t ie, const size_t ib, const size_t ia, double &dt)
Get an entry in the table of transverse diffusion coefficients.
virtual ~Medium()
Destructor.
virtual void SetAtomicWeight(const double a)
Set the effective atomic weight.
std::vector< std::vector< std::vector< double > > > m_iDifT
void SetExtrapolationMethodIonMobility(const std::string &extrLow, const std::string &extrHigh)
void PlotVelocity(const std::string &carriers, TPad *pad)
Plot the drift velocity as function of the electric field.
virtual bool GetPhotoAbsorptionCrossSection(const double e, double &sigma, const unsigned int i=0)
std::pair< unsigned int, unsigned int > m_extrVel
virtual double ScaleElectricField(const double e) 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 logval=false) const
virtual double ScaleDiffusionTensor(const double d) const
unsigned int GetNumberOfComponents() const
Get number of components of the medium.
std::vector< std::vector< std::vector< double > > > m_hDifL
virtual double GetAtomicNumber() const
Get the effective atomic number.
virtual bool ElectronVelocityFluxBulk(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &wv, double &wr)
Flux (mean velocity; shorthand: wv) and bulk (center of mass velocity; shorthand: wr) drift velocity ...
size_t SetThreshold(const std::vector< std::vector< std::vector< double > > > &tab) const
virtual bool NegativeIonVelocity(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &vx, double &vy, double &vz)
Negative ion drift velocity [cm / ns].
std::vector< std::vector< std::vector< double > > > m_nVel
virtual bool ElectronCollision(const double e, int &type, int &level, double &e1, double &dx, double &dy, double &dz, std::vector< Secondary > &secondaries, int &band)
Sample the collision type. Update energy and direction vector.
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_eDifL
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)
bool GetHoleVelocityExB(const size_t ie, const size_t ib, const size_t ia, double &v)
Get an entry in the table of drift speeds along ExB.
virtual double ScaleTownsend(const double alpha) const
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.
void SetDielectricConstant(const double eps)
Set the relative static dielectric constant.
bool GetElectronAttachment(const size_t ie, const size_t ib, const size_t ia, double &eta)
Get an entry in the table of attachment coefficients.
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
virtual double GetMassDensity() const
Get the mass density [g/cm3].
bool GetExtrapolationIndex(std::string str, unsigned int &nb) const
void SetInterpolationMethodVelocity(const unsigned int intrp)
Set the degree of polynomial interpolation (usually 2).
void VelocityFromMobility(const std::vector< std::vector< std::vector< double > > > &mob, std::vector< std::vector< std::vector< double > > > &vel)
void SetInterpolationMethodDiffusion(const unsigned int intrp)
void ResetElectronTOFRates()
virtual bool GetDielectricFunction(const double e, double &eps1, double &eps2, const unsigned int i=0)
Get the complex dielectric function at a given energy.
bool SetHoleVelocityB(const size_t ie, const size_t ib, const size_t ia, const double v)
Set an entry in the table of drift speeds along Btrans.
void SetExtrapolationMethodDiffusion(const std::string &extrLow, const std::string &extrHigh)
std::vector< double > m_eFields
bool GetElectronVelocityE(const size_t ie, const size_t ib, const size_t ia, double &v)
Get an entry in the table of drift speeds along E.
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 SetElectronTOFAttachment(const size_t ie, const size_t ib, const size_t ia, const double v)
Set an entry in the table of attachment rate of TOF.
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])
Diffusion tensor: diagonal elements are the diffusion coefficients [cm] along e, btrans,...
std::vector< std::vector< std::vector< double > > > m_hDifT
std::vector< std::vector< std::vector< double > > > m_eVelWr
void ResetElectronDiffusion()
virtual bool IsSemiconductor() const
Is this medium a semiconductor?
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.
bool SetElectronLorentzAngle(const size_t ie, const size_t ib, const size_t ia, const double lor)
Set an entry in the table of Lorentz angles.
std::vector< std::vector< std::vector< double > > > m_eAtt
bool GetHoleVelocityB(const size_t ie, const size_t ib, const size_t ia, double &v)
Get an entry in the table of drift speeds along Btrans.
void PlotAlphaEta(const std::string &carriers, TPad *pad)
Plot Townsend and attachment coefficients.
bool GetElectronTownsend(const size_t ie, const size_t ib, const size_t ia, double &alpha)
Get an entry in the table of Townsend coefficients.
bool SetElectronVelocityExB(const size_t ie, const size_t ib, const size_t ia, const double v)
Set an entry in the table of drift speeds along ExB.
bool SetIonLongitudinalDiffusion(const size_t ie, const size_t ib, const size_t ia, const double dl)
Set an entry in the table of longitudinal diffusion coefficients.
virtual double ScaleDissociation(const double diss) 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
const std::string & GetName() const
Get the medium name/identifier.
std::vector< double > m_bAngles
std::vector< std::vector< std::vector< double > > > m_iDifL
std::vector< std::vector< std::vector< double > > > m_hVelE
virtual double IonMobility()
Low-field ion mobility [cm2 V-1 ns-1].
virtual bool IsGas() const
Is this medium a gas?
std::vector< std::vector< std::vector< double > > > m_eLor
void Clone(std::vector< std::vector< std::vector< std::vector< double > > > > &tab, const size_t 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)
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].
std::vector< std::vector< std::vector< double > > > m_eDifT
void SetInterpolationMethodIonMobility(const unsigned int intrp)
void SetExtrapolationMethodVelocity(const std::string &extrLow, const std::string &extrHigh)
Select the extrapolation method for fields below/above the table range.
bool GetIonMobility(const size_t ie, const size_t ib, const size_t ia, double &mu)
Get an entry in the table of ion mobilities.
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.
bool SetElectronBulkVelocity(const size_t ie, const size_t ib, const size_t ia, const double v)
Set an entry in the table of bulk drift speeds.
bool GetElectronVelocityExB(const size_t ie, const size_t ib, const size_t ia, double &v)
Get an entry in the table of drift speeds along ExB.
bool SetElectronTransverseDiffusion(const size_t ie, const size_t ib, const size_t ia, const double dt)
Set an entry in the table of transverse diffusion coefficients.
std::pair< unsigned int, unsigned int > m_extrDis
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 PlotDiffusion(const std::string &carriers, TPad *pad)
Plot the diffusion coefficients as function of the electric field.
std::vector< std::vector< std::vector< double > > > m_hAtt
void SetPressure(const double p)
void SetExtrapolationMethod(const std::string &low, const std::string &high, std::pair< unsigned int, unsigned int > &extr, const std::string &fcn)
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].
std::vector< std::vector< std::vector< double > > > m_iVel
std::pair< unsigned int, unsigned int > m_extrAlp
void EnableDebugging()
Switch on/off debugging messages.
std::vector< std::vector< std::vector< double > > > m_eVelB
bool VelocityFluxBulk(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 > > > &velWv, const std::vector< std::vector< std::vector< double > > > &velWr, double &wv, double &wr) const
bool IsIonisable() const
Is charge deposition by charged particles/photon enabled in this medium?
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].
bool GetIonDissociation(const size_t ie, const size_t ib, const size_t ia, double &diss)
Get an entry in the table of dissociation coefficients.
void PlotAttachment(const std::string &carriers, TPad *pad)
Plot the attachment coefficient(s) as function of the electric field.
bool SetIonMobility(const std::vector< double > &fields, const std::vector< double > &mobilities, const bool negativeIons=false)
Initialise the table of ion mobilities from a list of electric fields and corresponding mobilities.
void SetExtrapolationMethodAttachment(const std::string &extrLow, const std::string &extrHigh)
bool GetElectronVelocityB(const size_t ie, const size_t ib, const size_t ia, double &v)
Get an entry in the table of drift speeds along Btrans.
virtual void GetComponent(const unsigned int i, std::string &label, double &f)
Get the name and fraction of a given component.
void ResetNegativeIonMobility()
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)
std::pair< unsigned int, unsigned int > m_extrLor
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 bool GetOpticalDataRange(double &emin, double &emax, const unsigned int i=0)
Get the energy range [eV] of the available optical data.
bool GetIonLongitudinalDiffusion(const size_t ie, const size_t ib, const size_t ia, double &dl)
Get an entry in the table of longitudinal diffusion coefficients.
unsigned int m_nComponents
virtual bool IsConductor() const
Is this medium a conductor?
bool SetHoleVelocityExB(const size_t ie, const size_t ib, const size_t ia, const double v)
Set an entry in the table of drift speeds along ExB.
std::pair< unsigned int, unsigned int > m_extrDif
void SetInterpolationMethodAttachment(const unsigned int intrp)
virtual void SetMassDensity(const double rho)
Set the mass density [g/cm3].
virtual double ElectronMobility()
Low-field mobility [cm2 V-1 ns-1].
double GetTemperature() const
Get the temperature [K].
bool SetElectronFluxVelocity(const size_t ie, const size_t ib, const size_t ia, const double v)
Set an entry in the table of flux drift speeds.
bool GetNegativeIonMobility(const size_t ie, const size_t ib, const size_t ia, double &mu)
Get an entry in the table of negative ion mobilities.
static void Langevin(const double ex, const double ey, const double ez, double bx, double by, double bz, const double mu, const double muH, double &vx, double &vy, double &vz)
bool GetElectronLongitudinalDiffusion(const size_t ie, const size_t ib, const size_t ia, double &dl)
Get an entry in the table of longitudinal diffusion coefficients.
std::vector< std::vector< std::vector< double > > > m_hVelX
std::pair< unsigned int, unsigned int > m_extrMob
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 ResetHoleDiffusion()
std::vector< std::vector< std::vector< std::vector< double > > > > m_eDifM
std::vector< std::vector< std::vector< double > > > m_hVelB
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 SetHoleTownsend(const size_t ie, const size_t ib, const size_t ia, const double alpha)
Set an entry in the table of Townsend coefficients.
std::vector< std::vector< std::vector< std::vector< double > > > > m_hDifM
virtual double NegativeIonMobility()
Low-field negative ion mobility [cm2 V-1 ns-1].
void SetW(const double w)
Set the W value (average energy to produce an electron/ion or e/h pair).
std::vector< std::vector< std::vector< double > > > m_iMob
bool SetEntry(const size_t i, const size_t j, const size_t k, const std::string &fcn, std::vector< std::vector< std::vector< double > > > &tab, const double val)
bool SetIonDissociation(const size_t ie, const size_t ib, const size_t ia, const double diss)
Set an entry in the table of dissociation coefficients.
bool SetHoleTransverseDiffusion(const size_t ie, const size_t ib, const size_t ia, const double dt)
Set an entry in the table of transverse diffusion coefficients.
void ResetElectronTownsend()
double GetFanoFactor() const
Get the Fano factor.
void PlotTownsend(const std::string &carriers, TPad *pad)
Plot the Townsend coefficient(s) as function of the electric field.
bool GetHoleVelocityE(const size_t ie, const size_t ib, const size_t ia, double &v)
Get an entry in the table of drift speeds along E.
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 bool logval=false) const
bool GetElectronFluxVelocity(const size_t ie, const size_t ib, const size_t ia, double &v)
Get an entry in the table of flux drift speeds.
bool IsDriftable() const
Is charge carrier transport enabled in this medium?
void ResetElectronVelocity()
void SetInterpolationMethodTownsend(const unsigned int intrp)
virtual double CreateGPUTransferObject(MediumGPU *&med_gpu)
Create and initialise GPU Transfer class.
bool SetElectronVelocityE(const size_t ie, const size_t ib, const size_t ia, const double v)
Set an entry in the table of drift speeds along E.
virtual bool ElectronTOFIonisation(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &riontof)
TOF Ionisation rate [ns-1].
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)
bool SetIonTransverseDiffusion(const size_t ie, const size_t ib, const size_t ia, const double dt)
Set an entry in the table of transverse diffusion coefficients.
bool SetElectronTOFIonisation(const size_t ie, const size_t ib, const size_t ia, const double v)
Set an entry in the table of ionization rate of TOF.
std::vector< std::vector< std::vector< double > > > m_iDis
bool GetElectronTOFIonisation(const size_t ie, const size_t ib, const size_t ia, double &v)
Get an entry in the table of ionization rate of TOF.
std::vector< std::vector< std::vector< double > > > m_nMob