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