Dispersions
The dispersions are the central part of pyElli and the transfer-matrix method. They describe the change of dielectric function or refractive index with the wavelength. In pyElli the default wavelength unit is nm. Each dispersion has two distinct sets of parameters:
Parameters which can be given only once (single parameters).
Parameters which can be given in multiple sets (repeated parameters), e.g. a set of oscillator parameters.
The syntax for each of the parameter sets is different. For the single parameters they are given in the class constructor:
Cauchy(n0=1.458, n1=3.54e-3, n2=0, k0=0, k1=0, k2=0)
Repeated parameters are added via the add() function:
Sellmeier().add(A=1, B=1).add(A=1, B=2)
For dispersions having both, single and repeated parameters can be used together:
TaucLorentz(Eg=2).add(A=10, E=2.5, C=0.1)
If parameters are not fully provided, they are set to their respective default values. The available parameters and their respective default values are given in the respective class documentation.
All classes inherit from the abstract base class Dispersion. It provides basic functionality, such as returning dataframes or arrays containing the wavelength dependent dielectric function of the dispersion relation at current parameter set.
Dispersions can be added with the + operator, or if you want to chain more than two dispersions together you may have a look at the DispersionSum class.
PyElli also provides tabulated dispersions from the Refractiveindex.info database.
They can be accessed with the RII class.
Constant Refractive Index
Epsilon Infinity
Cauchy
- class elli.dispersions.Cauchy(*args, **kwargs)[source]
Cauchy dispersion.
- Single parameters:
- n0:
Defaults to 1.5.
- n1:
Defaults to 0. Unit in nm2.
- n2:
Defaults to 0. Unit in nm4.
- k0:
Defaults to 0.
- k1:
Defaults to 0. Unit in nm2.
- k2:
Defaults to 0. Unit in nm4.
- Repeated parameters:
–
- Output:
- \[\varepsilon^{1/2}(\lambda) = \boldsymbol{n_0} + 100 \boldsymbol{n_1}/\lambda^2 + 10^7 \boldsymbol{n_2}/\lambda^4 + i (\boldsymbol{k_0} + 100 \boldsymbol{k_1}/\lambda^2 + 10^7 \boldsymbol{k_2}/\lambda^4)\]
- class elli.dispersions.CauchyUrbach(*args, **kwargs)[source]
Cauchy dispersion, with an Urbach Tail absorption.
- Single parameters:
- n0:
Defaults to 1.5.
- B:
Defaults to 0. Unit in 1/eV2.
- C:
Defaults to 0. Unit in 1/eV4.
- D:
Defaults to 0.
- Eg:
Defaults to 0. Unit in eV.
- Eu:
Defaults to 1. Unit in eV.
- Repeated parameters:
–
- Output:
- \[n(E) = \boldsymbol{n_0} + \boldsymbol{B} E^2 + \boldsymbol{C} E^4 + i \boldsymbol{D} \exp (\frac{E - \boldsymbol{E_g}}{\boldsymbol{E_u}})\]
References
Fujiwara: Spectroscopic Ellipsometry: Principles and Applications, John Wiley & Sons Ltd, 2007, p. 258
- class elli.dispersions.CauchyCustomExponent(*args, **kwargs)[source]
Cauchy dispersion with custom exponents.
- Single parameters:
- n0:
Defaults to 1.5.
- Repeated parameters:
- f:
Defaults to 0.
- e:
Defaults to 1.
- Output:
- \[\varepsilon^{1/2}(\lambda) = \boldsymbol{n_0} + \sum_j \boldsymbol{f}_j \cdot \lambda^{\boldsymbol{e}_j}\]
Sellmeier
- class elli.dispersions.Sellmeier(*args, **kwargs)[source]
Sellmeier dispersion.
- Single parameters:
–
- Repeated parameters:
- A:
Coefficient for n2 contribution. Defaults to 0.
- B:
Resonance wavelength. Defaults to 0. Unit in µm2.
- Output:
- \[\varepsilon(\lambda) = 1 + \sum_j \boldsymbol{A}_j \cdot \lambda^2 /(\lambda^2 - \boldsymbol{B}_j)\]
With \(j\) as the index of the respective oscillator.
- class elli.dispersions.SellmeierCustomExponent(*args, **kwargs)[source]
Sellmeier dispersion with custom exponents.
- Single parameters:
–
- Repeated parameters:
- A:
Coefficient for n2 contribution. Defaults to 0.
- e_A:
Exponent for the wavelength in the numerator. Defaults to 1.
- B:
Resonance wavelength. Defaults to 0. Unit in µm-2.
- e_B:
Exponent for B. Defaults to 1.
- Output:
- \[\varepsilon(\lambda) = \sum_j \boldsymbol{A}_j \cdot \lambda^{\boldsymbol{e_A}j} /(\lambda^2 - \boldsymbol{B}_j^{\boldsymbol{e_B}j})\]
With \(j\) as the index of the respective oscillator.
Drude
Energy parameters
- class elli.dispersions.DrudeEnergy(*args, **kwargs)[source]
Drude dispersion model with parameters in units of energy. Drude models in the literature typically contain an additional epsilon infinity value. Use EpsilonInf to add this parameter or simply add a number, e.g. DrudeEnergy() + 2, where 2 is the value of epsilon infinity.
- Single parameters:
- A:
Amplitude of Drude oscillator. Defaults to 0. Unit in eV2
- gamma:
Broadening of Drude oscillator. Defaults to 0. Unit in eV.
- Repeated parameters:
–
- Output:
- \[\varepsilon(E) = \boldsymbol{A} / (E^2 - i \cdot \boldsymbol{gamma} \cdot E)\]
Resistivity parameters
- class elli.dispersions.DrudeResistivity(*args, **kwargs)[source]
Drude dispersion model with resistivity based parameters. Drude models in the literature typically contain an additional epsilon infinity value. Use EpsilonInf to add this parameter or simply do DrudeEnergy() + eps_inf.
- Single parameters:
- rho_opt:
Optical resistivity. Defaults to 1. Unit in Ω-cm.
- tau:
Mean scattering time. Defaults to 1. Unit in s.
- Repeated parameters:
–
Output:
\[\varepsilon(E) = \hbar / (\varepsilon_0 \cdot \boldsymbol{rho\_opt} \cdot \boldsymbol{tau} \cdot E^2 - i \cdot \hbar \cdot E)\]where \(\hbar\) is the planck constant divided by \(2\pi\) and \(\varepsilon_0\) is the vacuum dielectric permittivity.
Lorentz
Wavelength parameters
- class elli.dispersions.LorentzLambda(*args, **kwargs)[source]
Lorentz dispersion law with parameters in units of wavelengths.
- Single parameters:
–
- Repeated parameters:
- A:
Amplitude of the oscillator. Defaults to 1.
- lambda_r:
Resonance wavelength. Defaults to 0. Unit in nm.
- gamma:
Broadening of the oscillator. Defaults to 0. Unit in nm.
Output:
\[\varepsilon(\lambda) = 1 + \sum_j \boldsymbol{A}_j \cdot \lambda^2 / (\lambda^2 - \boldsymbol{lambda\_r}_j^2 + i \cdot \boldsymbol{gamma}_j \cdot \lambda)\]The summation index \(j\) refers to the respective oscillator.
Energy parameters
- class elli.dispersions.LorentzEnergy(*args, **kwargs)[source]
Lorentz dispersion law with parameters in units of energy.
- Single parameters:
–
- Repeated parameters:
- A:
Amplitude of the oscillator. Defaults to 1.
- E:
Resonance energy. Defaults 0. Unit in eV.
- gamma:
Broadening of the oscillator. Defaults to 0. Unit in eV.
- Output:
- \[\varepsilon(E) = 1 + \sum_j \boldsymbol{A}_j / \left(E^2-\boldsymbol{E}_j^2 + i \cdot \boldsymbol{gamma}_j \cdot E\right)\]
With \(j\) as the index for the respective oscillator.
Tauc-Lorentz
- class elli.dispersions.TaucLorentz(*args, **kwargs)[source]
Tauc-Lorentz dispersion law. Model by Jellison and Modine.
- Single parameters:
- Eg:
Bandgap energy (eV). Defaults to 1.
- Repeated parameters:
- A:
Strength of the absorption. Typically 10 < A < 200. Defaults to 20.
- E:
Lorentz resonance energy (eV). Always keep E > Eg!!. Defaults to 1.5.
- C:
Lorentz broadening (eV). Typically 0 < Ci < 10. Defaults to 1.
- Output:
The Tauc lorentz dispersion. Please refer to the references for a full formula.
References
G.E. Jellision and F.A. Modine, Appl. Phys. Lett. 69 (3), 371-374 (1996)
Erratum, G.E. Jellison and F.A. Modine, Appl. Phys. Lett 69 (14), 2137 (1996)
Chen, W.Z. Shen, Eur. Phys. J. B. 43, 503-507 (2005)
Cody-Lorentz
- class elli.dispersions.CodyLorentz(*args, **kwargs)[source]
Cody-Lorentz dispersion law. Model by Ferlauto et al.
- Single parameters:
- Eg:
Bandgap energy (eV). Defaults to 1.6.
- A:
Amplitude (eV). Defaults to 100.
- Et:
Energy at which the Urbach tail starts (eV). Defaults to 1.8.
- gamma:
Broadening (eV). Defaults to 2.4.
- Ep:
Distance from bandgap for transition from Cody type absorption to Lorentz type absorption (eV). Defaults to 0.8.
- E0:
Lorentz resonance energy (eV). Defaults to 3.6.
- Eu:
Exponential decay of the Urbach tail (eV). Defaults to 0.05.
- Repeated parameters:
–
- Output:
The Cody-Lorentz dispersion. Please refer to the references for a full formula.
References
Ferlauto et al., J. Appl. Phys. 92, 2424 (2002)
Gaussian
- class elli.dispersions.Gaussian(*args, **kwargs)[source]
Dispersion law with gaussian oscillators.
- Single parameters:
–
- Repeated parameters:
- A:
Amplitude of the oscillator. Defaults to 1.
- E:
Central energy. Defaults to 1. Unit in eV.
- sigma:
Broadening of the Gaussian. Defaults to 1. Unit in eV.
Output:
\[\begin{split}\varepsilon(E) = \sum_j & \; 2 \cdot \boldsymbol{A}_j / \sqrt{π} \cdot (D\left(2 \cdot \sqrt{2 \cdot \ln(2)} \cdot (E + \boldsymbol{E}_j) / \boldsymbol{sigma}_j\right) \\ &- D\left(2 \cdot \sqrt{2 \cdot \ln(2)} \cdot (E - \boldsymbol{E}_j) / \boldsymbol{sigma}_j\right) \\ &+ i \cdot \Bigl(\boldsymbol{A}_j \cdot \exp\left(-(4 \cdot \ln(2) \cdot (E - \boldsymbol{E}_j)/ \boldsymbol{sigma}_j\right)^2 \\ &- \boldsymbol{A}_j \cdot \exp\left(-(4 \cdot ln(2) \cdot (E + \boldsymbol{E}_j)/ \boldsymbol{sigma}_j\right)^2\Bigr)\end{split}\]D is the Dawson function. The summation index \(j\) is the index of the respective oscillator.
References
De Sousa Meneses, Malki, Echegut, J. Non-Cryst. Solids 351, 769-776 (2006)
Peiponen, Vartiainen, Phys. Rev. B. 44, 8301 (1991)
Fujiwara, Collins, Spectroscopic Ellipsometry for Photovoltaics Volume 1, Springer International Publishing AG, 2018, p. 137
Tanguy
- class elli.dispersions.Tanguy(*args, **kwargs)[source]
Fractional dimensional Tanguy model. This model is an analytical expression of Wannier excitons, including bound and unbound states.
- Single parameters:
- A:
Amplitude (eV). Defaults to 1.
- d:
Dimensionality 1 < d <= 3. Defaults to 3.
- gamma:
Excitonic broadening (eV). Defaults to 0.1.
- R:
Excitonic binding energy (eV). Defaults to 0.1.
- Eg:
Optical band gap energy (eV). Defaults to 1.
- a:
Sellmeier coefficient for background dielectric constant (eV²). Defaults to 0.
- b:
Sellmeier coefficient for background dielectric constant (eV²). Defaults to 0.
- Repeated parameters.
–
- Output:
The Tanguy dispersion. Since the formula is rather long it is not written here. Please refer to the references for a full formula.
References
Tanguy, Phys. Rev. Lett. 75, 4090 (1995). Errata, Phys. Rev. Lett. 76, 716 (1996).
Tanguy, Phys. Rev. B. 60. 10660 (1990).
Poles
- class elli.dispersions.Poles(*args, **kwargs)[source]
Dispersion law for an UV and IR pole, i.e. Lorentz oscillators outside the fitting spectral range and zero broadening.
- Single parameters:
- A_ir:
IR Pole amplitude. Defaults to 1. Unit in eV2.
- A_uv:
UV Pole amplitude. Defaults to 1. Unit in eV2.
- E_uv:
UV Pole energy. Defaults to 6. Unit in eV.
- Repeated parameters:
–
- Output:
- \[\varepsilon(E) = \boldsymbol{A\_ir} / E^2 + \boldsymbol{A\_uv} / (\boldsymbol{E\_uv}^2 - E^2)\]
Polynomial
- class elli.dispersions.Polynomial(*args, **kwargs)[source]
Polynomial expression for the dielectric function.
- Single parameters:
- e0:
Defaults to 1.
- Repeated parameters:
- f:
Defaults to 0.
- e:
Defaults to 0.
- Output:
- \[\varepsilon(\lambda) = \boldsymbol{\varepsilon_0} + \sum_j \boldsymbol{f}_j \cdot \lambda^{\boldsymbol{e}_j}\]
Tabulated values
Refractive index values
- class elli.dispersions.Table(*args, **kwargs)[source]
Dispersion specified by a table of wavelengths (nm) and refractive index values. Please not that this model will produce errors for wavelengths outside the provided wavelength range.
- Single parameters:
- lbda (list):
Wavelengths in nm. This value must be provided.
- n:
Complex refractive index values in the convention n + ik. This value must be provided.
- kind:
Type of interpolation (see scipy.interpolate.interp1d for more information). Defaults to ‘linear’.
- Repeated parameters:
–
- Output:
The interpolation in the given wavelength range.
Epsilon values
- class elli.dispersions.TableEpsilon(*args, **kwargs)[source]
Dispersion specified by a table of wavelengths (nm) and dielectric function values. Please not that this model will produce errors for wavelengths outside the provided wavelength range.
- Single parameters:
- lbda (list):
Wavelengths in nm. This value must be provided.
- epsilon:
Complex dielectric function values in the convention ε1 + iε2. This value must be provided.
- kind:
Type of interpolation (see scipy.interpolate.interp1d for more information). Defaults to ‘linear’.
- Repeated parameters:
–
- Output:
The interpolation in the given wavelength range.
Pseudo dielectric function
- class elli.dispersions.PseudoDielectricFunction(*args, **kwargs)[source]
A pseudo dielectric function generated from experimental psi/delta values. Please note that the pseudo dielectric function can lead to unphysical behaviour, such as negative refractive indices or other spurious artifacts. Additionally, this formula is only valid for a bulk absorbing material and yields wrong results for layered materials. Therefore, it is preferable to use the pseudo dielectric function only as a helper for constructing other dispersion models.
- Single parameters:
- angle:
The measurement angle in degree under which the psi/delta values where obtained.
- lbda:
The wavelength region of the measurement data. Units in nm.
- psi:
The psi values of the measurement. Units in degree.
- delta:
The delta values of the measurement. Units in degree.
- Repeated parameters:
–
- Output:
- \[\varepsilon(\lambda) = \sin^2 \left( \Theta \right) \cdot \left( 1 + \tan^2 (\Theta) \left( \frac{1 - \rho}{1 + \rho} \right) \right)\]
With
\[\rho = \tan(\Psi) \cdot \exp (-i \Delta)\]\(\Theta\) is the angle of incidence.
Spectraray tables
- class elli.dispersions.TableSpectraRay(path)[source]
Helper class to load spectraray’s tabulated dielectric functions.
- Parameters:
path (str) – Defines the folder where the Spectraray files are saved.
- load_dispersion_table(fname)[source]
Load a dispersion table from a ascii file in the spectraray materials ascii format. This only accounts for tabulated dielectric function data. Spectraray also stores dispersion data in other formats, but this function is not able to read these other formats.
- Parameters:
fname (str) – The filename of the spectraray ascii file.
- Returns:
A dispersion object containing the tabulated data.
- Return type:
Abstract classes
These classes serve as basic interfaces for dispersions and convenient + generalized handling.
Dispersion
This is the abstract base class which is the parent class of all dispersions. It supplies basic functionalities, such as extracting wavelength dependent epsilon or refractive index values.
DispersionFactory
This factory class returns a fully initialized class identified by a string. This is useful if you determine the appropriate dispersion relation during runtime of your program.
- class elli.dispersions.base_dispersion.DispersionFactory[source]
A factory class for dispersion objects
- static get_dispersion(identifier, *args, **kwargs)[source]
Creates a Dispersion object identified by its string name and initializes it with the given parameters.
- Parameters:
identifier (str) – Identifier of the Dispersion object, e.g. Cauchy.
- Returns:
The Dispersion object initialized with the given parameters.
- Return type:
DispersionLaw
DispersionSum
This object can be used to add an arbitrary number of dispersions. The overloaded + operator of the dispersion base class creates an instance of this object with two classes as parameters. If you want to chain a lot of dispersions, it may be more performant to use this class directly.
InvalidParameters
This exception is thrown whenever a dispersion got invalid parameters.