28 virtual bool IsGas()
const {
return false; }
50 virtual void GetComponent(
const unsigned int i, std::string& label,
93 void PlotVelocity(
const std::string& carriers, TPad* pad);
97 void PlotTownsend(
const std::string& carriers, TPad* pad);
101 void PlotAlphaEta(
const std::string& carriers, TPad* pad);
106 const double ez,
const double bx,
107 const double by,
const double bz,
double& vx,
108 double& vy,
double& vz);
111 const double ez,
const double bx,
112 const double by,
const double bz,
double& dl,
118 const double ez,
const double bx,
119 const double by,
const double bz,
123 const double ez,
const double bx,
124 const double by,
const double bz,
128 const double ez,
const double bx,
129 const double by,
const double bz,
133 const double ez,
const double bx,
134 const double by,
const double bz,
142 const double pz,
double& vx,
double& vy,
143 double& vz,
const int band = 0);
147 double& pz,
int& band);
155 const double e,
int& type,
int& level,
double& e1,
156 double& dx,
double& dy,
double& dz,
157 std::vector<std::pair<Particle, double> >& secondaries,
int& ndxc,
161 double& s,
int& type,
162 double& energy)
const;
166 virtual bool HoleVelocity(
const double ex,
const double ey,
const double ez,
167 const double bx,
const double by,
const double bz,
168 double& vx,
double& vy,
double& vz);
170 virtual bool HoleDiffusion(
const double ex,
const double ey,
const double ez,
171 const double bx,
const double by,
const double bz,
172 double& dl,
double& dt);
174 virtual bool HoleDiffusion(
const double ex,
const double ey,
const double ez,
175 const double bx,
const double by,
const double bz,
178 virtual bool HoleTownsend(
const double ex,
const double ey,
const double ez,
179 const double bx,
const double by,
const double bz,
182 virtual bool HoleAttachment(
const double ex,
const double ey,
const double ez,
183 const double bx,
const double by,
const double bz,
190 virtual bool IonVelocity(
const double ex,
const double ey,
const double ez,
191 const double bx,
const double by,
const double bz,
192 double& vx,
double& vy,
double& vz);
194 virtual bool IonDiffusion(
const double ex,
const double ey,
const double ez,
195 const double bx,
const double by,
const double bz,
196 double& dl,
double& dt);
199 const double ez,
const double bx,
200 const double by,
const double bz,
double& diss);
206 const double ex,
const double ey,
const double ez,
207 const double bx,
const double by,
const double bz,
208 double& vx,
double& vy,
double& vz);
213 void SetFieldGrid(
double emin,
double emax,
const size_t ne,
bool logE,
214 double bmin = 0.,
double bmax = 0.,
const size_t nb = 1,
215 double amin = HalfPi,
double amax = HalfPi,
216 const size_t na = 1);
219 const std::vector<double>& bfields,
220 const std::vector<double>& angles);
222 void GetFieldGrid(std::vector<double>& efields, std::vector<double>& bfields,
223 std::vector<double>& angles);
227 const size_t ia,
const double v) {
232 const size_t ia,
double& v) {
237 const size_t ia,
const double v) {
242 const size_t ia,
double& v) {
247 const size_t ia,
const double v) {
252 const size_t ia,
double& v) {
257 const size_t ia,
const double dl) {
258 return SetEntry(ie, ib, ia,
"ElectronLongitudinalDiffusion",
m_eDifL, dl);
262 const size_t ia,
double& dl) {
263 return GetEntry(ie, ib, ia,
"ElectronLongitudinalDiffusion",
m_eDifL, dl);
267 const size_t ia,
const double dt) {
268 return SetEntry(ie, ib, ia,
"ElectronTransverseDiffusion",
m_eDifT, dt);
272 const size_t ia,
double& dt) {
273 return GetEntry(ie, ib, ia,
"ElectronTransverseDiffusion",
m_eDifT, dt);
277 const size_t ia,
const double alpha) {
282 const size_t ia,
double& alpha) {
287 const size_t ia,
const double eta) {
292 const size_t ia,
double& eta) {
298 const size_t ia,
const double lor) {
303 const size_t ia,
double& lor) {
309 const size_t ia,
const double v) {
314 const size_t ia,
double& v) {
319 const size_t ia,
const double v) {
324 const size_t ia,
double& v) {
329 const size_t ia,
const double v) {
334 const size_t ia,
double& v) {
340 const size_t ia,
const double dl) {
345 const size_t ia,
double& dl) {
350 const size_t ia,
const double dt) {
355 const size_t ia,
double& dt) {
360 const size_t ia,
const double alpha) {
365 const size_t ia,
double& alpha) {
370 const size_t ia,
const double eta) {
375 const size_t ia,
double& eta) {
384 const std::vector<double>& mobilities,
385 const bool negativeIons =
false);
388 const size_t ia,
const double mu);
391 const size_t ia,
double& mu) {
397 const size_t ia,
const double dl) {
402 const size_t ia,
double& dl) {
407 const size_t ia,
const double dt) {
412 const size_t ia,
double& dt) {
417 const size_t ia,
const double diss) {
422 const size_t ia,
double& diss) {
428 const size_t ia,
const double mu) {
433 const size_t ia,
double& mu) {
478 const std::string& extrHigh);
480 const std::string& extrHigh);
482 const std::string& extrHigh);
484 const std::string& extrHigh);
486 const std::string& extrHigh);
488 const std::string& extrHigh);
512 const unsigned int i = 0);
515 const unsigned int i = 0);
518 const unsigned int i = 0);
521 double& e1,
double& ctheta,
int& nsec,
577 std::vector<std::vector<std::vector<double> > >
m_eVelE;
578 std::vector<std::vector<std::vector<double> > >
m_eVelX;
579 std::vector<std::vector<std::vector<double> > >
m_eVelB;
580 std::vector<std::vector<std::vector<double> > >
m_eDifL;
581 std::vector<std::vector<std::vector<double> > >
m_eDifT;
582 std::vector<std::vector<std::vector<double> > >
m_eAlp;
583 std::vector<std::vector<std::vector<double> > >
m_eAtt;
584 std::vector<std::vector<std::vector<double> > >
m_eLor;
586 std::vector<std::vector<std::vector<std::vector<double> > > >
m_eDifM;
589 std::vector<std::vector<std::vector<double> > >
m_hVelE;
590 std::vector<std::vector<std::vector<double> > >
m_hVelX;
591 std::vector<std::vector<std::vector<double> > >
m_hVelB;
592 std::vector<std::vector<std::vector<double> > >
m_hDifL;
593 std::vector<std::vector<std::vector<double> > >
m_hDifT;
594 std::vector<std::vector<std::vector<double> > >
m_hAlp;
595 std::vector<std::vector<std::vector<double> > >
m_hAtt;
597 std::vector<std::vector<std::vector<std::vector<double> > > >
m_hDifM;
600 std::vector<std::vector<std::vector<double> > >
m_iMob;
601 std::vector<std::vector<std::vector<double> > >
m_iDifL;
602 std::vector<std::vector<std::vector<double> > >
m_iDifT;
603 std::vector<std::vector<std::vector<double> > >
m_iDis;
605 std::vector<std::vector<std::vector<double> > >
m_nMob;
615 std::pair<unsigned int, unsigned int>
m_extrVel = {0, 1};
616 std::pair<unsigned int, unsigned int>
m_extrDif = {0, 1};
617 std::pair<unsigned int, unsigned int>
m_extrAlp = {0, 1};
618 std::pair<unsigned int, unsigned int>
m_extrAtt = {0, 1};
619 std::pair<unsigned int, unsigned int>
m_extrLor = {0, 1};
620 std::pair<unsigned int, unsigned int>
m_extrMob = {0, 1};
621 std::pair<unsigned int, unsigned int>
m_extrDis = {0, 1};
632 bool Velocity(
const double ex,
const double ey,
const double ez,
633 const double bx,
const double by,
const double bz,
634 const std::vector<std::vector<std::vector<double> > >& velE,
635 const std::vector<std::vector<std::vector<double> > >& velB,
636 const std::vector<std::vector<std::vector<double> > >& velX,
637 const double q,
double& vx,
double& vy,
double& vz)
const;
638 static void Langevin(
const double ex,
const double ey,
const double ez,
639 double bx,
double by,
double bz,
const double mu,
640 double& vx,
double& vy,
double& vz);
641 static void Langevin(
const double ex,
const double ey,
const double ez,
642 double bx,
double by,
double bz,
643 const double mu,
const double muH,
644 double& vx,
double& vy,
double& vz);
645 bool Diffusion(
const double ex,
const double ey,
const double ez,
646 const double bx,
const double by,
const double bz,
647 const std::vector<std::vector<std::vector<double> > >& difL,
648 const std::vector<std::vector<std::vector<double> > >& difT,
649 double& dl,
double& dt)
const;
650 bool Diffusion(
const double ex,
const double ey,
const double ez,
651 const double bx,
const double by,
const double bz,
652 const std::vector<std::vector<std::vector<std::vector<double> > > >& diff,
653 double cov[3][3])
const;
654 bool Alpha(
const double ex,
const double ey,
const double ez,
655 const double bx,
const double by,
const double bz,
656 const std::vector<std::vector<std::vector<double> > >& tab,
657 unsigned int intp,
const unsigned int thr,
658 const std::pair<unsigned int, unsigned int>& extr,
659 double& alpha)
const;
660 double GetAngle(
const double ex,
const double ey,
const double ez,
661 const double bx,
const double by,
const double bz,
662 const double e,
const double b)
const;
663 bool Interpolate(
const double e,
const double b,
const double a,
664 const std::vector<std::vector<std::vector<double> > >& table,
665 double& y,
const unsigned int intp,
666 const std::pair<unsigned int, unsigned int>& extr)
const;
668 double Interpolate1D(
const double e,
const std::vector<double>& table,
669 const std::vector<double>& fields,
670 const unsigned int intpMeth,
671 const std::pair<unsigned int, unsigned int>& extr)
const;
673 bool SetEntry(
const size_t i,
const size_t j,
const size_t k,
674 const std::string& fcn,
675 std::vector<std::vector<std::vector<double> > >& tab,
677 bool GetEntry(
const size_t i,
const size_t j,
const size_t k,
678 const std::string& fcn,
679 const std::vector<std::vector<std::vector<double> > >& tab,
683 std::pair<unsigned int, unsigned int>& extr,
684 const std::string& fcn);
687 const std::vector<std::vector<std::vector<double> > >& tab)
const;
689 void Clone(std::vector<std::vector<std::vector<double> > >& tab,
690 const std::vector<double>& efields,
691 const std::vector<double>& bfields,
692 const std::vector<double>& angles,
const unsigned int intp,
693 const std::pair<unsigned int, unsigned int>& extr,
694 const double init,
const std::string& label);
696 std::vector<std::vector<std::vector<std::vector<double> > > >& tab,
697 const size_t n,
const std::vector<double>& efields,
698 const std::vector<double>& bfields,
const std::vector<double>& angles,
699 const unsigned int intp,
700 const std::pair<unsigned int, unsigned int>& extr,
const double init,
701 const std::string& label);
703 void Init(
const size_t nE,
const size_t nB,
const size_t nA,
704 std::vector<std::vector<std::vector<double> > >& tab,
707 const size_t nE,
const size_t nB,
const size_t nA,
const size_t nT,
708 std::vector<std::vector<std::vector<std::vector<double> > > >& tab,
virtual double IonMobility()
Low-field ion mobility [cm2 V-1 ns-1].
void ResetHoleAttachment()
virtual void GetComponent(const unsigned int i, std::string &label, double &f)
Get the name and fraction of a given component.
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.
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
virtual bool GetPhotonCollision(const double e, int &type, int &level, double &e1, double &ctheta, int &nsec, double &esec)
double GetW() const
Get the W value.
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 double GetMassDensity() const
Get the mass density [g/cm3].
std::vector< double > m_bFields
virtual void GetElectronMomentum(const double e, double &px, double &py, double &pz, int &band)
bool IsMicroscopic() const
Does the medium have electron scattering rates?
void SetTemperature(const double t)
Set the temperature [K].
void ResetElectronLorentzAngle()
void SetFanoFactor(const double f)
Set the Fano factor.
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].
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 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 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
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 ElectronMobility()
Low-field mobility [cm2 V-1 ns-1].
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.
virtual unsigned int GetNumberOfDeexcitationProducts() 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].
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
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.
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.
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.
std::vector< std::vector< std::vector< double > > > m_hAlp
void ResetIonDissociation()
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 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.
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.
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 void SetNumberDensity(const double n)
Set the number density [cm-3].
double GetPressure() const
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 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].
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 void SetAtomicNumber(const double z)
Set the effective atomic number.
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.
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.
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.
std::pair< unsigned int, unsigned int > m_extrVel
virtual double ScaleElectricField(const double e) 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 GetElectronNullCollisionRate(const int band=0)
Null-collision rate [ns-1].
virtual double GetAtomicNumber() const
Get the effective atomic number.
size_t SetThreshold(const std::vector< std::vector< std::vector< double > > > &tab) const
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 bool ElectronCollision(const double e, int &type, int &level, double &e1, double &dx, double &dy, double &dz, std::vector< std::pair< Particle, double > > &secondaries, int &ndxc, int &band)
Sample the collision type. Update energy and direction vector.
virtual double ScaleTownsend(const double alpha) const
virtual double GetPhotonCollisionRate(const double e)
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.
virtual bool GetDeexcitationProduct(const unsigned int i, double &t, double &s, int &type, double &energy) const
virtual double GetElectronCollisionRate(const double e, const int band=0)
Collision rate [ns-1] for given electron energy.
bool GetExtrapolationIndex(std::string str, unsigned int &nb) const
void SetInterpolationMethodVelocity(const unsigned int intrp)
Set the degree of polynomial interpolation (usually 2).
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].
void SetInterpolationMethodDiffusion(const unsigned int intrp)
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.
std::vector< std::vector< std::vector< double > > > m_hDifT
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].
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.
virtual bool GetOpticalDataRange(double &emin, double &emax, const unsigned int i=0)
Get the energy range [eV] of the available optical data.
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
virtual void SetMassDensity(const double rho)
Set the mass density [g/cm3].
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 bool IsGas() const
Is this medium a gas?
std::vector< std::vector< std::vector< double > > > m_eLor
std::vector< std::vector< std::vector< double > > > m_eDifT
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)
void SetInterpolationMethodIonMobility(const unsigned int intrp)
void SetExtrapolationMethodVelocity(const std::string &extrLow, const std::string &extrHigh)
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 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].
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.
virtual double HoleMobility()
Low-field mobility [cm2 V-1 ns-1].
virtual double NegativeIonMobility()
Low-field negative ion mobility [cm2 V-1 ns-1].
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 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 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::pair< unsigned int, unsigned int > m_extrAlp
void EnableDebugging()
Switch on/off debugging messages.
std::vector< std::vector< std::vector< double > > > m_eVelB
bool IsIonisable() const
Is charge deposition by charged particles/photon enabled in this medium?
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.
virtual void SetAtomicWeight(const double a)
Set the effective atomic weight.
bool SetIonMobility(const std::vector< double > &fields, const std::vector< double > &mobilities, const bool negativeIons=false)
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.
void ResetNegativeIonMobility()
std::pair< unsigned int, unsigned int > m_extrLor
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 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].
double GetTemperature() const
Get the temperature [K].
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 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.
virtual void ResetTables()
Reset all tables of transport parameters.
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
virtual ~Medium()
Destructor.
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
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.
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].
bool IsDriftable() const
Is charge carrier transport enabled in this medium?
void ResetElectronVelocity()
void SetInterpolationMethodTownsend(const unsigned int intrp)
virtual bool GetPhotoAbsorptionCrossSection(const double e, double &sigma, const unsigned int i=0)
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 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].
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.
std::vector< std::vector< std::vector< double > > > m_iDis
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_nMob