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

class elli.dispersions.ConstantRefractiveIndex(*args, **kwargs)[source]

Constant refractive index.

Single parameters:
n:

The constant value of the refractive index. Defaults to 1.

Repeated parameters:

Output:
\[\varepsilon(\lambda) = \boldsymbol{n}^2\]

Epsilon Infinity

class elli.dispersions.EpsilonInf(*args, **kwargs)[source]

Constant epsilon infinity.

Single parameters:
eps:

Constant value for the constant epsilon. Defaults to 1.

Repeated parameters:

Output:
\[\varepsilon(\lambda) = \textbf{eps}\]

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)

    1. Chen, W.Z. Shen, Eur. Phys. J. B. 43, 503-507 (2005)

Cody-Lorentz

class elli.dispersions.CodyLorentz(*args, **kwargs)[source]

Tauc-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

    1. Tanguy, Phys. Rev. Lett. 75, 4090 (1995). Errata, Phys. Rev. Lett. 76, 716 (1996).

    1. 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.

dielectric_function(lbda)[source]

Calculates the dielectric function in a given wavelength window.

Parameters:

lbda (npt.ArrayLike) – The wavelength window with unit nm.

Returns:

The dielectric function for each wavelength point.

Return type:

npt.NDArray

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.

dielectric_function(lbda)[source]

Calculates the dielectric function in a given wavelength window.

Parameters:

lbda (npt.ArrayLike) – The wavelength window with unit nm.

Returns:

The dielectric function for each wavelength point.

Return type:

npt.NDArray

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:

TableEpsilon

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.

class elli.dispersions.base_dispersion.Dispersion(*args, **kwargs)[source]

A dispersion based on a dielectric function formulation.

as_index()[source]

Returns this class as IndexDispersion. This method may be used to add dielectric and index based dispersions. Please ensure that you know what you are doing as building dielectric and index based dispersions is normally mathematically wrong.

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.

class elli.dispersions.base_dispersion.DispersionSum(*disps)[source]

Represents a sum of two dispersions

dielectric_function(lbda)[source]

Calculates the dielectric function in a given wavelength window.

Parameters:

lbda (npt.ArrayLike) – The wavelength window with unit nm.

Returns:

The dielectric function for each wavelength point.

Return type:

npt.NDArray

InvalidParameters

This exception is thrown whenever a dispersions got invalid parameters.

exception elli.dispersions.base_dispersion.InvalidParameters[source]

Exception for invalid dispersion parameters.