Garfield++ v2r0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
Medium.hh
Go to the documentation of this file.
1#ifndef G_MEDIUM_H
2#define G_MEDIUM_H
3
4#include <string>
5#include <vector>
6
7namespace Garfield {
8
9/// Abstract base class for media.
10
11class Medium {
12
13 public:
14 // Constructor
15 Medium();
16 // Destructor
17 virtual ~Medium();
18
19 // Return the id number of the class instance
20 int GetId() const { return m_id; }
21 // Medium name/identifier
22 const std::string& GetName() const { return m_name; }
23 virtual bool IsGas() const { return false; }
24 virtual bool IsSemiconductor() const { return false; }
25
26 // Temperature [K]
27 void SetTemperature(const double t);
28 double GetTemperature() const { return m_temperature; }
29 // Pressure [Torr]
30 void SetPressure(const double p);
31 double GetPressure() const { return m_pressure; }
32 // Relative static dielectric constant
33 void SetDielectricConstant(const double eps);
34 double GetDielectricConstant() const { return m_epsilon; }
35
36 // Get number of components
37 unsigned int GetNumberOfComponents() const { return m_nComponents; }
38 virtual void GetComponent(const unsigned int i,
39 std::string& label, double& f);
40 // Effective atomic number and weight
41 virtual void SetAtomicNumber(const double z);
42 virtual double GetAtomicNumber() const { return m_z; }
43 virtual void SetAtomicWeight(const double a);
44 virtual double GetAtomicWeight() const { return m_a; }
45 // Number density [cm-3] and mass density [g/cm3]
46 virtual void SetNumberDensity(const double n);
47 virtual double GetNumberDensity() const { return m_density; }
48 virtual void SetMassDensity(const double rho);
49 virtual double GetMassDensity() const;
50
51 // Transport properties
52 virtual void EnableDrift() { m_driftable = true; }
53 void DisableDrift() { m_driftable = false; }
54 virtual void EnablePrimaryIonisation() { m_ionisable = true; }
56
57 bool IsDriftable() const { return m_driftable; }
58 bool IsMicroscopic() const { return m_microscopic; }
59 bool IsIonisable() const { return m_ionisable; }
60
61 // W value and Fano factor
62 void SetW(const double w) { m_w = w; }
63 double GetW() { return m_w; }
64 void SetFanoFactor(const double f) { m_fano = f; }
65 double GetFanoFactor() { return m_fano; }
66
67 // Transport parameters for electrons
68 // Drift velocity [cm / ns]
69 virtual bool ElectronVelocity(const double ex, const double ey,
70 const double ez, const double bx,
71 const double by, const double bz, double& vx,
72 double& vy, double& vz);
73 // Longitudinal and transverse diffusion coefficients [cm1/2]
74 virtual bool ElectronDiffusion(const double ex, const double ey,
75 const double ez, const double bx,
76 const double by, const double bz, double& dl,
77 double& dt);
78 // Diffusion tensor: diagonal elements are the diffusion
79 // coefficients [cm] along e, btrans, e x b,
80 // off-diagonal elements are the covariances
81 virtual bool ElectronDiffusion(const double ex, const double ey,
82 const double ez, const double bx,
83 const double by, const double bz,
84 double cov[3][3]);
85 // Ionisation coefficient [cm-1]
86 virtual bool ElectronTownsend(const double ex, const double ey,
87 const double ez, const double bx,
88 const double by, const double bz,
89 double& alpha);
90 // Attachment coefficient [cm-1]
91 virtual bool ElectronAttachment(const double ex, const double ey,
92 const double ez, const double bx,
93 const double by, const double bz,
94 double& eta);
95 // Lorentz angle
96 virtual bool ElectronLorentzAngle(const double ex, const double ey,
97 const double ez, const double bx,
98 const double by, const double bz,
99 double& lor);
100
101 // Microscopic electron transport properties
102
103 // Dispersion relation (Energy vs. wave vector)
104 virtual double GetElectronEnergy(const double px, const double py,
105 const double pz, double& vx, double& vy,
106 double& vz, const int band = 0);
107 virtual void GetElectronMomentum(const double e, double& px, double& py,
108 double& pz, int& band);
109
110 // Null-collision rate [ns-1]
111 virtual double GetElectronNullCollisionRate(const int band = 0);
112 // Collision rate [ns-1] for given electron energy
113 virtual double GetElectronCollisionRate(const double e, const int band = 0);
114 virtual bool GetElectronCollision(const double e, int& type, int& level,
115 double& e1, double& dx, double& dy,
116 double& dz, int& nion, int& ndxc,
117 int& band);
118
119 virtual unsigned int GetNumberOfIonisationProducts() const { return 0; }
120 virtual bool GetIonisationProduct(const unsigned int i,
121 int& type, double& energy) const;
122
123 virtual unsigned int GetNumberOfDeexcitationProducts() const { return 0; }
124 virtual bool GetDeexcitationProduct(const unsigned int i, double& t,
125 double& s,
126 int& type, double& energy) const;
127
128 // Transport parameters for holes
129 virtual bool HoleVelocity(const double ex, const double ey, const double ez,
130 const double bx, const double by, const double bz,
131 double& vx, double& vy, double& vz);
132 virtual bool HoleDiffusion(const double ex, const double ey, const double ez,
133 const double bx, const double by, const double bz,
134 double& dl, double& dt);
135 virtual bool HoleDiffusion(const double ex, const double ey, const double ez,
136 const double bx, const double by, const double bz,
137 double cov[3][3]);
138 virtual bool HoleTownsend(const double ex, const double ey, const double ez,
139 const double bx, const double by, const double bz,
140 double& alpha);
141 virtual bool HoleAttachment(const double ex, const double ey, const double ez,
142 const double bx, const double by, const double bz,
143 double& eta);
144
145 // Transport parameters for ions
146 virtual bool IonVelocity(const double ex, const double ey, const double ez,
147 const double bx, const double by, const double bz,
148 double& vx, double& vy, double& vz);
149 virtual bool IonDiffusion(const double ex, const double ey, const double ez,
150 const double bx, const double by, const double bz,
151 double& dl, double& dt);
152 // Dissociation coefficient
153 virtual bool IonDissociation(const double ex, const double ey,
154 const double ez, const double bx,
155 const double by, const double bz, double& diss);
156
157 // Set the range of fields to be covered by the transport tables.
158 void SetFieldGrid(double emin, double emax, int ne, bool logE,
159 double bmin = 0., double bmax = 0., int nb = 1,
160 double amin = 0., double amax = 0., int na = 1);
161 void SetFieldGrid(const std::vector<double>& efields,
162 const std::vector<double>& bfields,
163 const std::vector<double>& angles);
164 void GetFieldGrid(std::vector<double>& efields, std::vector<double>& bfields,
165 std::vector<double>& angles);
166
167 bool GetElectronVelocityE(const unsigned int ie,
168 const unsigned int ib,
169 const unsigned int ia, double& v);
170 bool GetElectronVelocityExB(const unsigned int ie,
171 const unsigned int ib,
172 const unsigned int ia, double& v);
173 bool GetElectronVelocityB(const unsigned int ie,
174 const unsigned int ib,
175 const unsigned int ia, double& v);
176
177 bool GetElectronLongitudinalDiffusion(const unsigned int ie,
178 const unsigned int ib,
179 const unsigned int ia, double& dl);
180 bool GetElectronTransverseDiffusion(const unsigned int ie,
181 const unsigned int ib,
182 const unsigned int ia, double& dt);
183 bool GetElectronTownsend(const unsigned int ie,
184 const unsigned int ib,
185 const unsigned int ia, double& alpha);
186 bool GetElectronAttachment(const unsigned int ie,
187 const unsigned int ib,
188 const unsigned int ia, double& eta);
189 bool GetElectronLorentzAngle(const unsigned int ie,
190 const unsigned int ib,
191 const unsigned int ia, double& lor);
192
193 bool GetHoleVelocityE(const unsigned int ie, const unsigned int ib,
194 const unsigned int ia, double& v);
195 bool GetHoleVelocityExB(const unsigned int ie, const unsigned int ib,
196 const unsigned int ia, double& v);
197 bool GetHoleVelocityB(const unsigned int ie, const unsigned int ib,
198 const unsigned int ia, double& v);
199 bool GetHoleLongitudinalDiffusion(const unsigned int ie,
200 const unsigned int ib,
201 const unsigned int ia, double& dl);
202 bool GetHoleTransverseDiffusion(const unsigned int ie,
203 const unsigned int ib,
204 const unsigned int ia, double& dt);
205 bool GetHoleTownsend(const unsigned int ie, const unsigned int ib,
206 const unsigned int ia, double& alpha);
207 bool GetHoleAttachment(const unsigned int ie, const unsigned int ib,
208 const unsigned int ia, double& eta);
209
210 bool GetIonMobility(const unsigned int ie, const unsigned int ib,
211 const unsigned int ia, double& mu);
212 bool GetIonLongitudinalDiffusion(const unsigned int ie,
213 const unsigned int ib,
214 const unsigned int ia, double& dl);
215 bool GetIonTransverseDiffusion(const unsigned int ie,
216 const unsigned int ib,
217 const unsigned int ia, double& dt);
218 bool GetIonDissociation(const unsigned int ie,
219 const unsigned int ib,
220 const unsigned int ia, double& diss);
221
227 void ResetHoleVelocity();
228 void ResetHoleDiffusion();
229 void ResetHoleTownsend();
230 void ResetHoleAttachment();
231 void ResetIonMobility();
232 void ResetIonDiffusion();
234
235 bool SetIonMobility(const unsigned int ie, const unsigned int ib,
236 const unsigned int ia, const double mu);
237 bool SetIonMobility(const std::vector<double>& fields,
238 const std::vector<double>& mobilities);
239
240 // Select extrapolation method for fields below/above the table range.
241 // Options are "constant"/"linear"/"exponential".
242 void SetExtrapolationMethodVelocity(const std::string& extrLow,
243 const std::string& extrHigh);
244 void SetExtrapolationMethodDiffusion(const std::string& extrLow,
245 const std::string& extrHigh);
246 void SetExtrapolationMethodTownsend(const std::string& extrLow,
247 const std::string& extrHigh);
248 void SetExtrapolationMethodAttachment(const std::string& extrLow,
249 const std::string& extrHigh);
250 void SetExtrapolationMethodIonMobility(const std::string& extrLow,
251 const std::string& extrHigh);
252 void SetExtrapolationMethodIonDissociation(const std::string& extrLow,
253 const std::string& extrHigh);
254
255 // Set the degree of polynomial interpolation (usually 2).
256 void SetInterpolationMethodVelocity(const unsigned int intrp);
257 void SetInterpolationMethodDiffusion(const unsigned int intrp);
258 void SetInterpolationMethodTownsend(const unsigned int intrp);
259 void SetInterpolationMethodAttachment(const unsigned int intrp);
260 void SetInterpolationMethodIonMobility(const unsigned int intrp);
261 void SetInterpolationMethodIonDissociation(const unsigned int intrp);
262
263 // Scaling of fields and transport parameters.
264 virtual double ScaleElectricField(const double e) const { return e; }
265 virtual double UnScaleElectricField(const double e) const { return e; }
266 virtual double ScaleVelocity(const double v) const { return v; }
267 virtual double ScaleDiffusion(const double d) const { return d; }
268 virtual double ScaleDiffusionTensor(const double d) const { return d; }
269 virtual double ScaleTownsend(const double alpha) const { return alpha; }
270 virtual double ScaleAttachment(const double eta) const { return eta; }
271 virtual double ScaleLorentzAngle(const double lor) const { return lor; }
272 virtual double ScaleDissociation(const double diss) const { return diss; }
273
274 // Optical properties
275 // Energy range [eV] of available optical data
276 virtual bool GetOpticalDataRange(double& emin, double& emax,
277 const unsigned int i = 0);
278 // Complex dielectric function
279 virtual bool GetDielectricFunction(const double e, double& eps1, double& eps2,
280 const unsigned int i = 0);
281 // Photoabsorption cross-section [cm2]
282 virtual bool GetPhotoAbsorptionCrossSection(const double e, double& sigma,
283 const unsigned int i = 0);
284 virtual double GetPhotonCollisionRate(const double e);
285 virtual bool GetPhotonCollision(const double e, int& type, int& level,
286 double& e1, double& ctheta, int& nsec,
287 double& esec);
288
289 // Switch on/off debugging messages
290 void EnableDebugging() { m_debug = true; }
291 void DisableDebugging() { m_debug = false; }
292
293 protected:
294 std::string m_className;
295
296 static int m_idCounter;
297
298 // Id number
299 int m_id;
300 // Name
301 std::string m_name;
302 // Temperature [K]
304 // Pressure [Torr]
306 // Static dielectric constant
307 double m_epsilon;
308 // Number of components
309 unsigned int m_nComponents;
310 // (Effective) atomic number Z
311 double m_z;
312 // Atomic weight A
313 double m_a;
314 // Number density [cm-3]
315 double m_density;
316
317 // Transport flags
321
322 // W value and Fano factor
323 double m_w, m_fano;
324
325 // Update flag
327
328 // Switch on/off debugging messages
330
331 // Field grids
332 std::vector<double> m_eFields;
333 std::vector<double> m_bFields;
334 std::vector<double> m_bAngles;
335
336 // Tables of transport parameters
338 // Electrons
343 std::vector<std::vector<std::vector<double> > > tabElectronVelocityE;
344 std::vector<std::vector<std::vector<double> > > tabElectronVelocityExB;
345 std::vector<std::vector<std::vector<double> > > tabElectronVelocityB;
346 std::vector<std::vector<std::vector<double> > > tabElectronDiffLong;
347 std::vector<std::vector<std::vector<double> > > tabElectronDiffTrans;
348 std::vector<std::vector<std::vector<double> > > tabElectronTownsend;
349 std::vector<std::vector<std::vector<double> > > tabElectronAttachment;
350 std::vector<std::vector<std::vector<double> > > tabElectronLorentzAngle;
351
352 std::vector<std::vector<std::vector<std::vector<double> > > >
354
355 // Holes
359 std::vector<std::vector<std::vector<double> > > tabHoleVelocityE;
360 std::vector<std::vector<std::vector<double> > > tabHoleVelocityExB;
361 std::vector<std::vector<std::vector<double> > > tabHoleVelocityB;
362 std::vector<std::vector<std::vector<double> > > tabHoleDiffLong;
363 std::vector<std::vector<std::vector<double> > > tabHoleDiffTrans;
364 std::vector<std::vector<std::vector<double> > > tabHoleTownsend;
365 std::vector<std::vector<std::vector<double> > > tabHoleAttachment;
366
367 std::vector<std::vector<std::vector<std::vector<double> > > > tabHoleDiffTens;
368
369 // Ions
373 std::vector<std::vector<std::vector<double> > > tabIonMobility;
374 std::vector<std::vector<std::vector<double> > > tabIonDiffLong;
375 std::vector<std::vector<std::vector<double> > > tabIonDiffTrans;
376 std::vector<std::vector<std::vector<double> > > tabIonDissociation;
377
378 // Thresholds for Townsend, attachment and dissociation coefficients.
381
385
386 // Extrapolation methods
394
395 // Interpolation methods
396 unsigned int m_intpVelocity;
397 unsigned int m_intpDiffusion;
398 unsigned int m_intpTownsend;
399 unsigned int m_intpAttachment;
400 unsigned int m_intpLorentzAngle;
401 unsigned int m_intpMobility;
402 unsigned int m_intpDissociation;
403
404 double GetAngle(const double ex, const double ey, const double ez,
405 const double bx, const double by, const double bz,
406 const double e, const double b) const;
407 double Interpolate1D(const double e, const std::vector<double>& table,
408 const std::vector<double>& fields,
409 const unsigned int intpMeth,
410 const int jExtr, const int iExtr);
411 bool GetExtrapolationIndex(std::string extrStr, unsigned int& extrNb);
412 void CloneTable(std::vector<std::vector<std::vector<double> > >& tab,
413 const std::vector<double>& efields,
414 const std::vector<double>& bfields,
415 const std::vector<double>& angles,
416 const unsigned int intp,
417 const unsigned int extrLow, const unsigned int extrHigh,
418 const double init,
419 const std::string& label);
420 void CloneTensor(
421 std::vector<std::vector<std::vector<std::vector<double> > > >& tab,
422 const unsigned int n,
423 const std::vector<double>& efields,
424 const std::vector<double>& bfields,
425 const std::vector<double>& angles,
426 const unsigned int intp,
427 const unsigned int extrLow, const unsigned int extrHigh,
428 const double init,
429 const std::string& label);
430
431 void InitParamArrays(const unsigned int eRes, const unsigned int bRes,
432 const unsigned int aRes,
433 std::vector<std::vector<std::vector<double> > >& tab,
434 const double val);
435 void InitParamTensor(
436 const unsigned int eRes, const unsigned int bRes,
437 const unsigned int aRes, const unsigned int tRes,
438 std::vector<std::vector<std::vector<std::vector<double> > > >& tab,
439 const double val);
440};
441}
442
443#endif
Abstract base class for media.
Definition: Medium.hh:11
void ResetHoleAttachment()
Definition: Medium.cc:1369
virtual void GetComponent(const unsigned int i, std::string &label, double &f)
Definition: Medium.cc:142
double m_density
Definition: Medium.hh:315
bool m_hasElectronDiffTens
Definition: Medium.hh:340
void ResetIonMobility()
Definition: Medium.cc:1375
virtual bool GetPhotonCollision(const double e, int &type, int &level, double &e1, double &ctheta, int &nsec, double &esec)
Definition: Medium.cc:1294
bool SetIonMobility(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double mu)
Definition: Medium.cc:2269
virtual double UnScaleElectricField(const double e) const
Definition: Medium.hh:265
virtual double ScaleVelocity(const double v) const
Definition: Medium.hh:266
void ResetElectronAttachment()
Definition: Medium.cc:1331
virtual double GetMassDensity() const
Definition: Medium.cc:137
double GetFanoFactor()
Definition: Medium.hh:65
unsigned int m_extrLowMobility
Definition: Medium.hh:392
std::vector< double > m_bFields
Definition: Medium.hh:333
void ResetIonDiffusion()
Definition: Medium.cc:1381
bool GetIonDissociation(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &diss)
Definition: Medium.cc:2113
virtual void GetElectronMomentum(const double e, double &px, double &py, double &pz, int &band)
Definition: Medium.cc:651
bool IsMicroscopic() const
Definition: Medium.hh:58
void SetTemperature(const double t)
Definition: Medium.cc:104
bool m_microscopic
Definition: Medium.hh:319
unsigned int m_intpDiffusion
Definition: Medium.hh:397
bool GetElectronVelocityB(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Definition: Medium.cc:1728
std::vector< std::vector< std::vector< double > > > tabHoleVelocityE
Definition: Medium.hh:359
unsigned int m_extrLowDiffusion
Definition: Medium.hh:388
bool GetElectronVelocityE(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Definition: Medium.cc:1680
void ResetElectronLorentzAngle()
Definition: Medium.cc:1337
double m_pressure
Definition: Medium.hh:305
void CloneTensor(std::vector< std::vector< std::vector< std::vector< double > > > > &tab, const unsigned int n, const std::vector< double > &efields, const std::vector< double > &bfields, const std::vector< double > &angles, const unsigned int intp, const unsigned int extrLow, const unsigned int extrHigh, const double init, const std::string &label)
Definition: Medium.cc:2203
void SetFanoFactor(const double f)
Definition: Medium.hh:64
virtual bool HoleTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
Definition: Medium.cc:971
bool m_hasElectronDiffTrans
Definition: Medium.hh:340
double m_fano
Definition: Medium.hh:323
double GetW()
Definition: Medium.hh:63
virtual double ScaleAttachment(const double eta) const
Definition: Medium.hh:270
unsigned int m_extrLowLorentzAngle
Definition: Medium.hh:391
virtual bool GetElectronCollision(const double e, int &type, int &level, double &e1, double &dx, double &dy, double &dz, int &nion, int &ndxc, int &band)
Definition: Medium.cc:672
void SetExtrapolationMethodIonDissociation(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2434
void SetInterpolationMethodIonDissociation(const unsigned int intrp)
Definition: Medium.cc:2498
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
Definition: Medium.cc:2503
std::vector< std::vector< std::vector< double > > > tabElectronVelocityB
Definition: Medium.hh:345
unsigned int m_extrHighAttachment
Definition: Medium.hh:390
virtual double ScaleDiffusion(const double d) const
Definition: Medium.hh:267
virtual double GetNumberDensity() const
Definition: Medium.hh:47
virtual unsigned int GetNumberOfDeexcitationProducts() const
Definition: Medium.hh:123
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)
Definition: Medium.cc:704
unsigned int m_intpMobility
Definition: Medium.hh:401
virtual double ScaleLorentzAngle(const double lor) const
Definition: Medium.hh:271
unsigned int m_intpAttachment
Definition: Medium.hh:399
virtual bool ElectronLorentzAngle(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &lor)
Definition: Medium.cc:599
bool GetIonLongitudinalDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dl)
Definition: Medium.cc:2065
bool m_hasElectronVelocityB
Definition: Medium.hh:339
bool GetHoleAttachment(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &eta)
Definition: Medium.cc:2018
bool GetHoleVelocityExB(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Definition: Medium.cc:1898
void ResetHoleVelocity()
Definition: Medium.cc:1343
void DisableDrift()
Definition: Medium.hh:53
bool GetExtrapolationIndex(std::string extrStr, unsigned int &extrNb)
Definition: Medium.cc:2453
void ResetIonDissociation()
Definition: Medium.cc:1389
bool GetElectronAttachment(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &eta)
Definition: Medium.cc:1826
unsigned int m_extrHighDiffusion
Definition: Medium.hh:388
virtual bool GetDielectricFunction(const double e, double &eps1, double &eps2, const unsigned int i=0)
Definition: Medium.cc:1243
std::vector< std::vector< std::vector< double > > > tabIonDissociation
Definition: Medium.hh:376
unsigned int m_extrHighMobility
Definition: Medium.hh:392
double GetDielectricConstant() const
Definition: Medium.hh:34
std::vector< std::vector< std::vector< double > > > tabElectronVelocityE
Definition: Medium.hh:343
void SetFieldGrid(double emin, double emax, int ne, bool logE, double bmin=0., double bmax=0., int nb=1, double amin=0., double amax=0., int na=1)
Definition: Medium.cc:1395
virtual void SetNumberDensity(const double n)
Definition: Medium.cc:176
std::string m_name
Definition: Medium.hh:301
unsigned int m_intpTownsend
Definition: Medium.hh:398
unsigned int m_extrLowAttachment
Definition: Medium.hh:390
unsigned int m_extrHighDissociation
Definition: Medium.hh:393
void InitParamArrays(const unsigned int eRes, const unsigned int bRes, const unsigned int aRes, std::vector< std::vector< std::vector< double > > > &tab, const double val)
Definition: Medium.cc:2640
double GetPressure() const
Definition: Medium.hh:31
bool m_driftable
Definition: Medium.hh:318
double Interpolate1D(const double e, const std::vector< double > &table, const std::vector< double > &fields, const unsigned int intpMeth, const int jExtr, const int iExtr)
Definition: Medium.cc:2565
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)
Definition: Medium.cc:204
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)
Definition: Medium.cc:1077
int GetId() const
Definition: Medium.hh:20
bool GetIonMobility(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &mu)
Definition: Medium.cc:2042
unsigned int m_intpVelocity
Definition: Medium.hh:396
void SetExtrapolationMethodTownsend(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2378
bool m_hasHoleTownsend
Definition: Medium.hh:358
std::vector< std::vector< std::vector< double > > > tabElectronDiffLong
Definition: Medium.hh:346
virtual void SetAtomicNumber(const double z)
Definition: Medium.cc:154
virtual double GetAtomicWeight() const
Definition: Medium.hh:44
std::vector< std::vector< std::vector< double > > > tabElectronLorentzAngle
Definition: Medium.hh:350
unsigned int m_extrHighLorentzAngle
Definition: Medium.hh:391
void SetExtrapolationMethodIonMobility(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2416
virtual double ScaleElectricField(const double e) const
Definition: Medium.hh:264
std::vector< std::vector< std::vector< double > > > tabElectronAttachment
Definition: Medium.hh:349
int thrIonDissociation
Definition: Medium.hh:384
virtual double ScaleDiffusionTensor(const double d) const
Definition: Medium.hh:268
unsigned int GetNumberOfComponents() const
Definition: Medium.hh:37
virtual double GetElectronNullCollisionRate(const int band=0)
Definition: Medium.cc:659
virtual double GetAtomicNumber() const
Definition: Medium.hh:42
bool GetElectronTownsend(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &alpha)
Definition: Medium.cc:1802
bool GetElectronLorentzAngle(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &lor)
Definition: Medium.cc:1850
virtual bool GetIonisationProduct(const unsigned int i, int &type, double &energy) const
Definition: Medium.cc:685
unsigned int m_extrLowVelocity
Definition: Medium.hh:387
virtual double ScaleTownsend(const double alpha) const
Definition: Medium.hh:269
void DisablePrimaryIonisation()
Definition: Medium.hh:55
virtual double GetPhotonCollisionRate(const double e)
Definition: Medium.cc:1286
void SetDielectricConstant(const double eps)
Definition: Medium.cc:126
unsigned int m_extrHighTownsend
Definition: Medium.hh:389
virtual void EnableDrift()
Definition: Medium.hh:52
virtual bool GetDeexcitationProduct(const unsigned int i, double &t, double &s, int &type, double &energy) const
Definition: Medium.cc:694
virtual double GetElectronCollisionRate(const double e, const int band=0)
Definition: Medium.cc:665
bool GetHoleTownsend(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &alpha)
Definition: Medium.cc:1994
void SetInterpolationMethodVelocity(const unsigned int intrp)
Definition: Medium.cc:2473
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)
Definition: Medium.cc:362
unsigned int m_extrHighVelocity
Definition: Medium.hh:387
void SetInterpolationMethodDiffusion(const unsigned int intrp)
Definition: Medium.cc:2478
std::vector< std::vector< std::vector< double > > > tabHoleTownsend
Definition: Medium.hh:364
double m_epsilon
Definition: Medium.hh:307
unsigned int m_extrLowTownsend
Definition: Medium.hh:389
void SetExtrapolationMethodDiffusion(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2359
std::vector< double > m_eFields
Definition: Medium.hh:332
void GetFieldGrid(std::vector< double > &efields, std::vector< double > &bfields, std::vector< double > &angles)
Definition: Medium.cc:1671
static int m_idCounter
Definition: Medium.hh:296
std::vector< std::vector< std::vector< std::vector< double > > > > tabHoleDiffTens
Definition: Medium.hh:367
void DisableDebugging()
Definition: Medium.hh:291
virtual bool ElectronTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
Definition: Medium.cc:490
void ResetElectronDiffusion()
Definition: Medium.cc:1316
virtual bool IsSemiconductor() const
Definition: Medium.hh:24
std::vector< std::vector< std::vector< double > > > tabIonDiffTrans
Definition: Medium.hh:375
virtual bool GetOpticalDataRange(double &emin, double &emax, const unsigned int i=0)
Definition: Medium.cc:1229
virtual void SetMassDensity(const double rho)
Definition: Medium.cc:187
void CloneTable(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 unsigned int extrLow, const unsigned int extrHigh, const double init, const std::string &label)
Definition: Medium.cc:2137
virtual double ScaleDissociation(const double diss) const
Definition: Medium.hh:272
bool GetElectronVelocityExB(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Definition: Medium.cc:1704
unsigned int m_extrLowDissociation
Definition: Medium.hh:393
bool m_hasHoleVelocityB
Definition: Medium.hh:356
const std::string & GetName() const
Definition: Medium.hh:22
std::vector< std::vector< std::vector< std::vector< double > > > > tabElectronDiffTens
Definition: Medium.hh:353
std::vector< double > m_bAngles
Definition: Medium.hh:334
virtual bool IsGas() const
Definition: Medium.hh:23
void InitParamTensor(const unsigned int eRes, const unsigned int bRes, const unsigned int aRes, const unsigned int tRes, std::vector< std::vector< std::vector< std::vector< double > > > > &tab, const double val)
Definition: Medium.cc:2663
bool GetElectronTransverseDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dt)
Definition: Medium.cc:1777
virtual double GetElectronEnergy(const double px, const double py, const double pz, double &vx, double &vy, double &vz, const int band=0)
Definition: Medium.cc:635
void SetInterpolationMethodIonMobility(const unsigned int intrp)
Definition: Medium.cc:2493
std::vector< std::vector< std::vector< double > > > tabHoleVelocityExB
Definition: Medium.hh:360
void SetExtrapolationMethodVelocity(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2340
virtual bool ElectronAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
Definition: Medium.cc:544
bool m_hasElectronVelocityExB
Definition: Medium.hh:339
std::vector< std::vector< std::vector< double > > > tabIonMobility
Definition: Medium.hh:373
bool m_hasElectronLorentzAngle
Definition: Medium.hh:342
void SetPressure(const double p)
Definition: Medium.cc:115
bool m_hasHoleDiffTrans
Definition: Medium.hh:357
bool m_hasIonDiffTrans
Definition: Medium.hh:371
bool GetHoleVelocityE(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Definition: Medium.cc:1874
int thrElectronAttachment
Definition: Medium.hh:380
void EnableDebugging()
Definition: Medium.hh:290
bool m_hasIonMobility
Definition: Medium.hh:370
bool GetHoleVelocityB(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Definition: Medium.cc:1922
bool m_hasElectronDiffLong
Definition: Medium.hh:340
std::vector< std::vector< std::vector< double > > > tabHoleDiffTrans
Definition: Medium.hh:363
bool IsIonisable() const
Definition: Medium.hh:59
virtual void EnablePrimaryIonisation()
Definition: Medium.hh:54
bool m_ionisable
Definition: Medium.hh:320
virtual void SetAtomicWeight(const double a)
Definition: Medium.cc:165
void SetExtrapolationMethodAttachment(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2397
unsigned int m_intpLorentzAngle
Definition: Medium.hh:400
std::vector< std::vector< std::vector< double > > > tabHoleVelocityB
Definition: Medium.hh:361
bool m_hasHoleDiffLong
Definition: Medium.hh:357
std::vector< std::vector< std::vector< double > > > tabHoleDiffLong
Definition: Medium.hh:362
unsigned int m_nComponents
Definition: Medium.hh:309
virtual unsigned int GetNumberOfIonisationProducts() const
Definition: Medium.hh:119
int thrHoleAttachment
Definition: Medium.hh:383
std::vector< std::vector< std::vector< double > > > tabIonDiffLong
Definition: Medium.hh:374
std::string m_className
Definition: Medium.hh:294
bool GetHoleTransverseDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dt)
Definition: Medium.cc:1970
bool GetElectronLongitudinalDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dl)
Definition: Medium.cc:1752
void SetInterpolationMethodAttachment(const unsigned int intrp)
Definition: Medium.cc:2488
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)
Definition: Medium.cc:846
double GetTemperature() const
Definition: Medium.hh:28
bool GetHoleLongitudinalDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dl)
Definition: Medium.cc:1946
std::vector< std::vector< std::vector< double > > > tabHoleAttachment
Definition: Medium.hh:365
virtual bool IonDissociation(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &diss)
Definition: Medium.cc:1176
bool m_hasIonDissociation
Definition: Medium.hh:372
bool m_hasIonDiffLong
Definition: Medium.hh:371
int thrHoleTownsend
Definition: Medium.hh:382
unsigned int m_intpDissociation
Definition: Medium.hh:402
virtual ~Medium()
Definition: Medium.cc:102
bool m_hasHoleAttachment
Definition: Medium.hh:358
void ResetHoleDiffusion()
Definition: Medium.cc:1353
bool m_hasHoleVelocityExB
Definition: Medium.hh:356
bool m_isChanged
Definition: Medium.hh:326
bool m_hasElectronVelocityE
Definition: Medium.hh:339
void SetW(const double w)
Definition: Medium.hh:62
std::vector< std::vector< std::vector< double > > > tabElectronTownsend
Definition: Medium.hh:348
bool m_hasHoleVelocityE
Definition: Medium.hh:356
int thrElectronTownsend
Definition: Medium.hh:379
bool m_hasElectronAttachment
Definition: Medium.hh:341
void ResetElectronTownsend()
Definition: Medium.cc:1326
bool m_hasHoleDiffTens
Definition: Medium.hh:357
virtual bool HoleAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
Definition: Medium.cc:1023
bool IsDriftable() const
Definition: Medium.hh:57
void ResetHoleTownsend()
Definition: Medium.cc:1363
void ResetElectronVelocity()
Definition: Medium.cc:1306
void SetInterpolationMethodTownsend(const unsigned int intrp)
Definition: Medium.cc:2483
virtual bool GetPhotoAbsorptionCrossSection(const double e, double &sigma, const unsigned int i=0)
Definition: Medium.cc:1264
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)
Definition: Medium.cc:1122
double m_temperature
Definition: Medium.hh:303
std::vector< std::vector< std::vector< double > > > tabElectronDiffTrans
Definition: Medium.hh:347
std::vector< std::vector< std::vector< double > > > tabElectronVelocityExB
Definition: Medium.hh:344
bool GetIonTransverseDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dt)
Definition: Medium.cc:2089