Source code for elli.dispersions.cauchy_urbach

# Encoding: utf-8
"""Cauchy dispersion, with Urbach tail."""

import numpy as np
import numpy.typing as npt

from .base_dispersion import IndexDispersion
from ..utils import conversion_wavelength_energy


[docs] class CauchyUrbach(IndexDispersion): r"""Cauchy dispersion, with an Urbach Tail absorption. Single parameters: :n0: Defaults to 1.5. :B: Defaults to 0. Unit in 1/eV\ :sup:`2`. :C: Defaults to 0. Unit in 1/eV\ :sup:`4`. :D: Defaults to 0. :Eg: Defaults to 0. Unit in eV. :Eu: Defaults to 1. Unit in eV. Repeated parameters: -- Output: .. math:: 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 """ single_params_template = {"n0": 1.5, "B": 0, "C": 0, "D": 0, "Eg": 2, "Eu": 0.5} rep_params_template = {} def refractive_index(self, lbda: npt.ArrayLike) -> npt.NDArray: energy = conversion_wavelength_energy(lbda) return ( self.single_params.get("n0") + self.single_params.get("B") * energy**2 + self.single_params.get("C") * energy**4 + 1j * self.single_params.get("D") * np.exp( (energy - self.single_params.get("Eg")) / self.single_params.get("Eu") ) )