Source code for elli.dispersions.poles

# Encoding: utf-8
"""Dispersion law for an UV and IR pole."""

import numpy.typing as npt

from ..utils import conversion_wavelength_energy
from .base_dispersion import Dispersion


[docs] class Poles(Dispersion): r"""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 eV\ :sup:`2`. :A_uv: UV Pole amplitude. Defaults to 1. Unit in eV\ :sup:`2`. :E_uv: UV Pole energy. Defaults to 6. Unit in eV. Repeated parameters: -- Output: .. math:: \varepsilon(E) = \boldsymbol{A\_ir} / E^2 + \boldsymbol{A\_uv} / (\boldsymbol{E\_uv}^2 - E^2) """ single_params_template = {"A_ir": 1, "A_uv": 1, "E_uv": 6} rep_params_template = {} def dielectric_function(self, lbda: npt.ArrayLike) -> npt.NDArray: energy = conversion_wavelength_energy(lbda) return self.single_params.get("A_ir") / energy**2 + self.single_params.get( "A_uv" ) / (self.single_params.get("E_uv") ** 2 - energy**2)