optmat.gas.euv#

Build the complex polarizability from photoabsorption (the extreme ultraviolet).

Above its first resonance an atom absorbs, and its polarizability is complex. Both parts follow from the dipole oscillator-strength distribution, the discrete lines \((E_i, f_i)\) and the continuum density \(g(E) = \mathrm{d}f/\mathrm{d}E\) above the ionisation threshold \(I\):

\[\mathrm{Re}\,\alpha(\omega) = \sum_i \frac{f_i}{E_i^2 - \omega^2} + \mathcal{P}\!\int_I^\infty \frac{g(E)}{E^2 - \omega^2}\,\mathrm{d}E, \qquad \mathrm{Im}\,\alpha(\omega) = \frac{\pi}{2\omega}\,g(\omega),\]

in atomic units (the Kramers-Kronig pair of the causal response; the lines contribute delta functions to the imaginary part, which are left out). The continuum is measured as a photoionisation cross section, \(\sigma = (\pi e^2\hbar/2\varepsilon_0 m_e c) \,g(E)\), 109.76 Mb per eV-1. The same distribution gives the dipole sums \(S(k) = \sum_i f_i E_i^k + \int g(E) E^k\,\mathrm{d}E\): the Thomas-Reiche-Kuhn sum \(S(0)\) is the number of electrons and \(S(-2)\) the static polarizability, which test the data.

The principal value is taken by subtracting \(g(\omega)\) from the integrand, whose remainder is regular at \(E = \omega\), and adding \(g(\omega)\,\mathcal{P}\!\int_I^{E_\mathrm{max}} \mathrm{d}E/(E^2-\omega^2) = (g(\omega)/2\omega) \ln[(E_\mathrm{max}-\omega)(I+\omega)/((E_\mathrm{max}+\omega) (\omega-I))]\) analytically. Beyond the last tabulated energy the continuum falls as \(E^{-7/2}\), the nonrelativistic asymptote.

The refractive index of the dilute gas is \(n = 1 + N\alpha/2\varepsilon_0\): above threshold \(\mathrm{Re}\,n - 1\) becomes negative and \(\mathrm{Im}\,n\) is the absorption index. For comparison, Henke’s atomic scattering factors give \(\alpha = -(f_1 - i f_2)/\omega^2\) in atomic units: Henke et al. write \(n = 1 - \delta - i\beta\) with \(\beta \propto f_2 > 0\), the opposite sign convention to the package’s \(\mathrm{Im}\,n > 0\) for absorption.

Module Attributes

EV_PER_HARTREE

Electronvolts per hartree.

MB_PER_INVERSE_EV

Photoionisation cross section (Mb) per unit df/dE (1/eV), 109.761: pi e^2 hbar / (2 eps0 m_e c), per eV and in units of 1e-22 m^2.

Functions

constrained(distribution, region_max, target)

Scale the continuum below an energy so that one dipole sum takes a target value.

euv_model(gas)

Build a gas's complex-index model from data/gas/euv/<gas>.toml.

nist_resonance_lines(gas)

Return the ground-state J = 1 lines with oscillator strengths from the NIST file.

Classes

ComplexModel(gas, name, distribution[, ...])

A constrained oscillator-strength distribution as a complex-index model.

OscillatorDistribution(gas, name, ...)

A dipole oscillator-strength distribution: discrete lines and a continuum.

class optmat.gas.euv.ComplexModel(gas, name, distribution, chi0_au=0.0, factor=1.0)[source]#

Bases: object

A constrained oscillator-strength distribution as a complex-index model.

Attributes:
gasGas

The species.

namestr

euv/<gas>.

distributionOscillatorDistribution

The constrained distribution.

chi0_aufloat

The magnetic susceptibility added to the electric polarizability.

factorfloat

The scale applied to the measured continuum by the constraint.

chi0_au: float = 0.0#
distribution: OscillatorDistribution#
factor: float = 1.0#
gas: Gas#
name: str#
polarizability_au(omega)[source]#

Return the complex refractive polarizability, atomic units.

Parameters:
omeganumpy.ndarray

Photon energies, hartree.

Returns:
numpy.ndarray

Re alpha + chi_0 + i Im alpha (complex).

refractive_index(wavelength, state=State(pressure=101325.0, temperature=273.15))[source]#

Return the complex refractive index at a state (Lorentz-Lorenz).

Parameters:
wavelengtharray_like or float

Vacuum wavelength, m.

stateState, optional

Pressure and temperature; 0 degrees C and 1 atm by default.

Returns:
numpy.ndarray

n (complex; Im n > 0 is absorption), the shape of wavelength.

optmat.gas.euv.EV_PER_HARTREE: Final = 27.211386245981167#

Electronvolts per hartree.

optmat.gas.euv.MB_PER_INVERSE_EV: Final = 109.76098670810207#

Photoionisation cross section (Mb) per unit df/dE (1/eV), 109.761: pi e^2 hbar / (2 eps0 m_e c), per eV and in units of 1e-22 m^2.

class optmat.gas.euv.OscillatorDistribution(gas, name, line_energies, line_strengths, continuum_energies, continuum_density)[source]#

Bases: object

A dipole oscillator-strength distribution: discrete lines and a continuum.

Attributes:
gasGas

The species.

namestr

What the distribution is built from.

line_energiesnumpy.ndarray

Discrete line energies, hartree.

line_strengthsnumpy.ndarray

Their oscillator strengths.

continuum_energiesnumpy.ndarray

Photon energies of the continuum samples, hartree, increasing from the threshold.

continuum_densitynumpy.ndarray

df/dE at those energies, per hartree.

complex_polarizability_au(omega)[source]#

Return the real and imaginary parts of the polarizability.

Parameters:
omeganumpy.ndarray

Photon energies, hartree; exactly at a discrete line the real part is infinite.

Returns:
tuple of numpy.ndarray

Re alpha and Im alpha, atomic units.

continuum_density: Float[ndarray, 'n_continuum']#
continuum_energies: Float[ndarray, 'n_continuum']#
gas: Gas#
line_energies: Float[ndarray, 'n_lines']#
line_strengths: Float[ndarray, 'n_lines']#
name: str#
sum_rule(k)[source]#

Return the dipole sum S(k).

Parameters:
kfloat

The order; the integral converges for k < 2.5 with the E^-3.5 tail.

Returns:
float

sum_i f_i E_i^k + int g(E) E^k dE, atomic units.

property threshold: float#

The ionisation threshold, the first continuum energy, hartree.

Returns:
float

The threshold.

optmat.gas.euv.constrained(distribution, region_max, target)[source]#

Scale the continuum below an energy so that one dipole sum takes a target value.

Typically the measured continuum near threshold is scaled, within its stated uncertainty, to the static polarizability S(-2) of an ab initio calculation, the simplest of Kumar and Meath’s constrained distributions; the higher-energy data are left as they are, and the Thomas-Reiche-Kuhn sum S(0) is kept as a check.

Parameters:
distributionOscillatorDistribution

The measured distribution.

region_maxfloat

The continuum below this energy (hartree) is scaled.

targettuple of float

(k, value): the sum S(k) to meet.

Returns:
tuple

The scaled distribution and the factor applied.

Raises:
DataError

If the target does not respond to scaling, or a secant step requires a non-positive or non-finite continuum scale. The local iteration is intended for adjustments within the measured uncertainty, not arbitrary targets.

optmat.gas.euv.euv_model(gas)[source]#

Build a gas’s complex-index model from data/gas/euv/<gas>.toml.

Parameters:
gasGas or str

The species.

Returns:
ComplexModel

The constrained distribution as a model.

Raises:
DataError

If the configuration is malformed or refers to missing data.

optmat.gas.euv.nist_resonance_lines(gas)[source]#

Return the ground-state J = 1 lines with oscillator strengths from the NIST file.

Parameters:
gasGas

A noble gas with a data/external/nist_asd/<gas>_I_lines.tsv file.

Returns:
list of tuple

(energy in hartree, f, upper configuration), by increasing energy.