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.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 µm-2.
- 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.
- B:
Resonance wavelength. Defaults to 0. Unit in µm-2.
- e_A:
- e_B:
- 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]¶
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
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. Defaults to np.linspace(0, 3000, 1000).
- n:
Complex refractive index values in the convention n + ik. Defaults to np.ones(1000).
- 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. Defaults to np.linspace(0, 3000, 1000).
- epsilon:
Complex dielectric function values in the convention ε1 + iε2. Defaults to np.ones(1000).
- Repeated parameters:
–
- Output:
The interpolation in the given wavelength range.
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.
- class elli.dispersions.base_dispersion.Dispersion(*args, **kwargs)[source]¶
Dispersion (abstract class).
Functions provided for derived classes: * dielectric_function(lbda) : returns dielectric constant for wavelength ‘lbda’
- add(*args, **kwargs)[source]¶
Adds a set of parameters to the dispersion.
- Returns:
The current object with the additional parameters added.
- Return type:
- abstract 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
- get_dielectric(lbda)[source]¶
Returns the dielectric constant for wavelength ‘lbda’ default unit (nm) in the convention ε1 + iε2.
- get_dielectric_df(lbda=None, conjugate=False)[source]¶
Returns the dielectric function as a pandas dataframe
- Parameters:
lbda (npt.ArrayLike, optional) – The wavelength range to use. If this parameter is not given a default spectral range from 200 to 1000 nm with 801 points is used. Defaults to None.
conjugate (bool, optional) – Per default the convention ε1 + iε2 is returned. If this flag is set to True, the ε1 + iε2 convention is returned. Defaults to False.
- Returns:
A pandas dataframe containing the wavelength as index and two rows containing ε1 and ε2.
- Return type:
pd.DataFrame
- get_refractive_index(lbda)[source]¶
Returns the refractive index for wavelength ‘lbda’ default unit (nm) in the convention n + ik.
- get_refractive_index_df(lbda=None, conjugate=False)[source]¶
Returns the refractive index as a pandas dataframe
- Parameters:
lbda (npt.ArrayLike, optional) – The wavelength range to use. If this parameter is not given a default spectral range from 200 to 1000 nm with 801 points is used. Defaults to None.
conjugate (bool, optional) – Per default the convention n + ik is returned. If this flag is set to True, the n + ik convention is returned. Defaults to False.
- Returns:
A pandas dataframe containing the wavelength as index and two rows containing n and k.
- Return type:
pd.DataFrame
- abstract property rep_params_template¶
Specifies the repeated parameters of the model and its default values.
- abstract property single_params_template¶
Specifies the single parameters of the model and its default 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 dispersions got invalid parameters.