refellips.dispersion

class refellips.dispersion.Cauchy(A, B=0, C=0, wavelength=658, name='')

Bases: ScattererSE

Cauchy model for wavelength-dependent refractive index.

Optical parameters are supplied in units of micrometers (‘cause thats what seems to be used in refractive index repos and cauchy models), the wavelength of the incident radiation is supplied in nanometers (that’s typical) and the fitting is done in angstroms.

The refractive index is calculated as: A + (B * 1000**2) / (wav**2) + (C * 1000**4) / (wav**4)

where the factors of 1000 convert from microns to nm.

Parameters:
  • A (float or parameter) – Cauchy parameter A.

  • B (float or parameter) – Cauchy parameter B in um^2. Default 0.

  • C (float or parameter) – Cauchy parameter C in um^4. Default 0.

  • wavelength (float) – default wavelength for calculation (nm)

  • name (str, optional) – Name of material.

complex(wavelength)

Calculate a complex RI

Parameters:

wavelength (float) – wavelength of light in nm

Returns:

RI – refractive index and extinction coefficient

Return type:

complex

property parameters
class refellips.dispersion.Gauss(Am, Br, En, Einf=1, wavelength=658, name='')

Bases: ScattererSE

Dispersion curves for Gaussian oscillators.

Parameters:
  • Am ({float, Parameter, sequence}) – Amplitude of Gaussian

  • Br ({float, Parameter, sequence}) – Broadening of oscillator

  • En ({float, Parameter, sequence}) – Centre energy of oscillator (eV)

  • Einf ({float, Parameter}) – Offset term

  • wavelength (float) – default wavelength for calculation (nm)

  • name (str, optional) – Name of material.

Notes

Calculates dispersion curves for k Gaussian oscillators. The model is Kramers-Kronig consistent. The parameters for constructing this object should have len(Am) == len(Br) == len(En) == k, or be single float/Parameter.

epsilon(energy)

The complex dielectric function for the oscillator

property parameters
class refellips.dispersion.Lorentz(Am, Br, En, Einf=1, wavelength=658, name='')

Bases: ScattererSE

Dispersion curves for Lorentz oscillators.

Parameters:
  • Am ({float, Parameter, sequence}) – Amplitude of Lorentzian

  • Br ({float, Parameter, sequence}) – Broadening of oscillator

  • En ({float, Parameter, sequence}) – Centre energy of oscillator (eV)

  • Einf ({float, Parameter}) – Offset term

  • wavelength (float) – default wavelength for calculation (nm)

  • name (str, optional) – Name of material.

Notes

Calculates dispersion curves for k oscillators, as implemented in WVASE. The model is Kramers-Kronig consistent. The parameters for constructing this object should have len(Am) == len(Br) == len(En) == k, or be single float/Parameter.

..math:

\tilde{\varepsilon}(h\nu)=\varepsilon_{1\infty }+\sum_{k}\frac{A_{k}}{E_{k}^2 - (h\nu)^2-iB_kh\nu}

Examples

>>> # Create a single Lorentz oscillator
>>> Lorentz(5, 0.25, 2, Einf=1)
>>> # Create a 2 oscillator dispersion curve
>>> lo = Lorentz([5, 10], [0.25, 0.5], [2, 4], Einf=2)
>>> lo.complex(658)  # calculates the refractive index at 658 nm.
epsilon(energy)

The complex dielectric function for the oscillator

property parameters
class refellips.dispersion.RI(dispersion=None, wavelength=658, name='')

Bases: ScattererSE

Object representing a materials wavelength-dependent refractive index.

An issue is that optical parameters are supplied in units of micrometers (‘cause thats what seems to be used in refractive index repos and cauchy models), the wavelength of the incident radiation is supplied in nanometers (thats typical) and the fitting is done in angstroms. Very unpleasant.

Parameters:
  • dispersion ({str, Path, tuple, np.ndarray)) –

    If a string then a dispersion curve will be loaded from a file that the string points to. The file is assumed to be of CSV format, with the first column holding the wavelength (in microns), with the second column specifying the refractive index. An optional third column can be present that should hold the extinction coefficient.

    If dispersion has length 2 (float, float), then dispersion[0] points to the refractive index of the material and dispersion[1] points to the extinction coefficient. This refractive index is assumed to be wavelength independent.

    If dispersion has length 3, then dispersion[0], dispersion[1], dispersion[2] are assumed to hold arrays specifying the wavelength (in microns), refractive index, and extinction coefficient.

  • wavelength (float) – default wavelength for calculation (nm)

  • name (str, optional) – Name of material.

Notes

An RI object can be used to create a Slab

complex(wavelength)

Calculate a complex RI

Parameters:

wavelength (float) – wavelength of light in nm

Returns:

RI – refractive index and extinction coefficient

Return type:

complex

property parameters
class refellips.dispersion.Sellmeier(Am, En, P, Einf=1, wavelength=658, name='')

Bases: ScattererSE

Dispersion curves for Sellmeier oscillators.

Parameters:
  • Am ({float, Parameter}) – Amplitude of Sellmeier in μm.

  • En ({float, Parameter}) – Center energy of oscillator in μm.

  • P ({float, Parameter}) – Position of a pole in μm.

  • Einf ({float, Parameter}) – Offset term

  • wavelength (float) – default wavelength for calculation (nm)

  • name (str, optional) – Name of material.

Notes

Calculates dispersion curves of a Sellmeier oscillator as implemented in CompleteEase. CompleteEase Manual, Chapter 9, pg 9-306, J.A. Woollam Co., 2014.

\[\]

n = sqrt{ varepsilon (infty) + frac{Am lambda^2}{lambda^2 - En^2} - Plambda^2}

Examples

>>> # Create a Sellmeier oscillator
>>> sell = Sellmeier(2, 0.1, 0.11, Einf=1)
>>> sell.complex(658)  # calculates the refractive index at 658 nm.
complex(wavelength)

Calculate a complex RI for the given Sellmeier oscillator

Parameters:

wavelength (float) – wavelength of light in nm

Returns:

RI – refractive index and extinction coefficient

Return type:

complex

epsilon(wavelength)

The complex dielectric function for the oscillator

property parameters
class refellips.dispersion.TaucLorentz(Am, C, En, Eg, Einf=1, wavelength=658, name='')

Bases: ScattererSE

Dispersion curves for Tauc-Lorentz oscillators. The model works well for amorphous materials in the visible range.

Parameters:
  • Am ({float, Parameter, sequence}) – Amplitude of absorption. Typically in [10, 200]

  • C ({float, Parameter, sequence}) – Lorentz broadening of oscillator (eV). Typically in [0, 10]. C should be less than 2 * En

  • En ({float, Parameter, sequence}) – Lorentz resonance energy (eV). En should be greater than Eg.

  • Eg ({float, Parameter}) – Common bandgap energy (eV) for all oscillators

  • Einf ({float, Parameter}) – Offset term

  • wavelength (float) – default wavelength for calculation (nm)

  • name (str, optional) – Name of material

Notes

Calculates dispersion curves for k Tauc-Lorentz oscillators. The model is Kramers-Kronig consistent. The parameters for constructing this object should have len(Am) == len(C) == len(En) == k, or be single float/Parameter.

Implemented using the equations from Horiba technical note and also the WVASE manual and https://en.wikipedia.org/wiki/Tauc%E2%80%93Lorentz_model.

The Horiba technical note gives parameters for many materials.

  • 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)

epsilon(energy)

The complex dielectric function for the oscillator

property parameters
refellips.dispersion.load_material(material)

Loads a dispersion curve from a file distributed with refellips.

Parameters:

material (str) – One of the materials in refellips.materials

Returns:

ri

Return type:

refellips.RI

Notes

To get a list of the dispersion curves distributed with refellips examine the entries in refellips.materials.