optmat.gas.two_photon_bound#

The bound two-photon levels of the noble gases (OEP 6, Phase 2a: curation only).

Below half the ionisation energy, two photons of a field can excite a noble gas’s ground state to an even-parity level. This module states what is curated about those levels, per gas (two_photon_bound_levels()):

  • the even levels with \(J = 0, 1, 2\) below the ionisation energy, from the NIST level lists held as returned (nist_asd_2026; helium’s singlets only). For one linear polarisation and equal photons, \(J = 0\) and 2 are reached; \(J = 1\) only with unequal photons or another polarisation;

  • each level’s curated two-photon strengths, calculated or measured, in one convention: \(\delta^{TP}\) per level (summed over \(M_J\)), parallel linear polarisation, equal photons, in atomic units, and the frequency-integrated cross section

    \[\sigma_0^{(2)} = 2\pi^3 \alpha^2 a_0^4\, \omega_\mathrm{au}^2\, \delta^{TP},\]

    with the line profile normalised in the two-photon angular frequency, for coherent light (TC-952). A measured \(\sigma_0^{(2)}\) is corrected for the photon statistics its source used;

  • each level’s curated photoionisation cross sections.

It is a record of facts with no evaluator. A line profile, the excited population and the (2+1) ionisation that follows need the theory OEP 6 asks for in Q9, and are deferred to its Phase 2b (TC-945). Helium’s and xenon’s strengths are checked against independent values (assessment = "checked"). Neon’s, argon’s and krypton’s are "unresolved", each with its reason.

Examples#

>>> xenon = two_photon_bound_levels("Xe")
>>> level = xenon.level("5p5.(2P*<3/2>).6p", "2[1/2]", 0)
>>> round(level.wavelength * 1e9, 2)  # the exciting photon's vacuum wavelength, nm
249.63
>>> [(s.source, s.kind) for s in xenon.strengths_of(level)]
[('henriksson_2005', 'calculated'), ('kroll_1990', 'measured')]

Module Attributes

BOUND_DERIVATION_VERSION

The version of the stored records' derivation.

SIGMA0_PER_DELTA

\(\sigma_0^{(2)} / (\omega_\mathrm{au}^2 \delta^{TP})\), m^4 (TC-952).

Functions

sigma0_from_delta(delta, omega)

Return the frequency-integrated cross section of a two-photon strength.

two_photon_bound_levels(gas)

Return what is curated about a noble gas's bound two-photon levels.

Classes

BoundLevel(configuration, term, j, energy, ...)

An even level below the ionisation energy, as NIST lists it.

BoundPhotoionisation(level, unassigned, ...)

A curated photoionisation cross section of an excited level.

BoundStrength(level, unassigned, dataset, ...)

A curated two-photon strength of a level, in the canonical convention.

TwoPhotonBoundLevels(gas, ...[, ...])

The bound two-photon levels of a noble gas and what is curated about them.

optmat.gas.two_photon_bound.BOUND_DERIVATION_VERSION: Final = 1#

The version of the stored records’ derivation.

class optmat.gas.two_photon_bound.BoundLevel(configuration, term, j, energy, printed, reach)[source]#

Bases: object

An even level below the ionisation energy, as NIST lists it.

Attributes:
configurationstr

NIST’s configuration, e.g. "5p5.(2P*<3/2>).6p".

termstr

NIST’s term, e.g. "2[1/2]".

jint

The total angular momentum.

energyfloat

Above the ground level, J.

printedstr

NIST’s level, cm^-1, as printed (with any brackets).

reachstr

"linear" (J = 0, 2: reached by two equal, linearly polarised photons) or "other" (J = 1: only with unequal photons or another polarisation).

configuration: str#
energy: float#
j: int#
property key: str#

The level as "configuration|term|J".

Returns:
str

The key the selection file uses.

printed: str#
reach: str#
term: str#
property wavelength: float#

The vacuum wavelength of each of two equal photons that reach it, m.

Returns:
float

\(2 hc / E\).

class optmat.gas.two_photon_bound.BoundPhotoionisation(level, unassigned, dataset, source, omega, sigma, use)[source]#

Bases: object

A curated photoionisation cross section of an excited level.

Attributes:
levelstr

The level’s key, or empty where unassigned.

unassignedstr

Why it is not assigned, or empty.

datasetstr

The curated dataset.

sourcestr

The source record.

omegatuple of float or None

The ionising photon’s angular frequency, rad/s; None where the source states none (a threshold value at an unstated energy).

sigmatuple of float

The cross section, m^2.

usestr

The dataset’s use.

dataset: str#
level: str#
omega: tuple[float | None, ...]#
sigma: tuple[float, ...]#
source: str#
unassigned: str#
use: str#
class optmat.gas.two_photon_bound.BoundStrength(level, unassigned, dataset, row, source, kind, delta, sigma0, convention, derived, reason)[source]#

Bases: object

A curated two-photon strength of a level, in the canonical convention.

Attributes:
levelstr

The level’s key (BoundLevel.key), or empty where unassigned.

unassignedstr

Why it is not assigned to a level, or empty.

datasetstr

The curated dataset.

rowstr

Its row.

sourcestr

The source record.

kindstr

"calculated" or "measured".

deltafloat or None

\(\delta^{TP}\) per level, a.u.: as printed, or derived from a cross section; None for an unassigned cross section.

sigma0float or None

\(\sigma_0^{(2)}\), m^4, at the level’s NIST photon frequency; None where unassigned.

conventionstr

How it was obtained: "per_level", "one_component" (times 4/3) or "sigma0".

derivedbool

True unless the stored quantity is as printed.

reasonstr

Why this level.

convention: str#
dataset: str#
delta: float | None#
derived: bool#
kind: str#
level: str#
reason: str#
row: str#
sigma0: float | None#
source: str#
unassigned: str#
optmat.gas.two_photon_bound.SIGMA0_PER_DELTA: Final = 2.589493367193569e-44#

\(\sigma_0^{(2)} / (\omega_\mathrm{au}^2 \delta^{TP})\), m^4 (TC-952).

class optmat.gas.two_photon_bound.TwoPhotonBoundLevels(gas, derivation_version, ionisation, levels, strengths, photoionisation, assessment, assessment_reason, input_digests=<factory>, *, status='user', status_reason='', modified=(), base='')[source]#

Bases: Identified

The bound two-photon levels of a noble gas and what is curated about them.

Attributes:
gasGas

The species.

derivation_versionint

BOUND_DERIVATION_VERSION when it was derived.

ionisationfloat

The ionisation energy, J.

levelstuple of BoundLevel

The even J = 0, 1, 2 levels below it, by energy.

strengthstuple of BoundStrength

The curated two-photon strengths.

photoionisationtuple of BoundPhotoionisation

The curated photoionisation cross sections of the levels.

assessmentstr

"checked" or "unresolved".

assessment_reasonstr

Why.

input_digestsMapping of str to str

SHA-256 digests of what it was derived from.

EVALUATION_VERSION: ClassVar[int] = 1#
IDENTITY_KIND: ClassVar[str] = 'two_photon_bound_levels'#
assessment: str#
assessment_reason: str#
derivation_version: int#
property digest: str#

The record’s digest, identity.digest.

Returns:
str

64 hexadecimal digits.

gas: Gas#
input_digests: Mapping[str, str]#
ionisation: float#
level(configuration, term, j)[source]#

Return a listed level.

Parameters:
configurationstr

NIST’s configuration.

termstr

NIST’s term.

jint

The total angular momentum.

Returns:
BoundLevel

The level.

Raises:
DataError

If it is not listed.

levels: tuple[BoundLevel, ...]#
photoionisation: tuple[BoundPhotoionisation, ...]#
photoionisation_of(level)[source]#

Return the photoionisation cross sections assigned to a level.

Parameters:
levelBoundLevel

A listed level.

Returns:
tuple of BoundPhotoionisation

Its cross sections.

strengths: tuple[BoundStrength, ...]#
strengths_of(level)[source]#

Return the strengths assigned to a level.

Parameters:
levelBoundLevel

A listed level.

Returns:
tuple of BoundStrength

Its strengths, calculated and measured.

optmat.gas.two_photon_bound.sigma0_from_delta(delta, omega)[source]#

Return the frequency-integrated cross section of a two-photon strength.

Parameters:
deltafloat

\(\delta^{TP}\) per level, parallel linear polarisation, equal photons, atomic units.

omegafloat

The photon’s angular frequency, rad/s: half the level’s over hbar.

Returns:
float

\(\sigma_0^{(2)} = 2\pi^3\alpha^2 a_0^4 \omega_\mathrm{au}^2 \delta\), m^4, the profile normalised in the two-photon angular frequency, coherent light (TC-952).

Examples

>>> f"{sigma0_from_delta(1.0, AU_ANGULAR_FREQUENCY):.5e}"
'2.58949e-44'
optmat.gas.two_photon_bound.two_photon_bound_levels(gas)[source]#

Return what is curated about a noble gas’s bound two-photon levels.

Parameters:
gasGas or str

He, Ne, Ar, Kr or Xe.

Returns:
TwoPhotonBoundLevels

The record.

Raises:
UnavailableModelError

For any other gas.

Examples

>>> two_photon_bound_levels("He").assessment
'checked'