API Reference

Client API

High-level user API for querying element properties

This module provides a convenient, user-friendly interface to query, compare, and visualise atomic / electron / photon properties from the EPICS (EEDL / EPDL / EADL) datasets.

Usage

>>> from pyepics.client import EPICSClient
>>> client = EPICSClient("data/endf")
>>> props = client.get_properties("Fe")
>>> props["Z"]
26
>>> df = client.compare(["Fe", "Cu", "Au"], properties=["Z", "binding_energies"])
class pyepics.client.ElementProperties(z, symbol, name, *, electron=None, photon=None, atomic=None)[source]

Container for all properties of a single element.

This object behaves like a dictionary but also provides attribute access for convenience.

Parameters:
Z

Atomic number.

Type:

int

symbol

Element symbol.

Type:

str

name

Element name.

Type:

str

electron

Parsed EEDL data (if available).

Type:

EEDLDataset or None

photon

Parsed EPDL data (if available).

Type:

EPDLDataset or None

atomic

Parsed EADL data (if available).

Type:

EADLDataset or None

__init__(z, symbol, name, *, electron=None, photon=None, atomic=None)[source]

Initialise an ElementProperties container.

Parameters:
Return type:

None

property binding_energies: dict[str, float]

Subshell binding energies (eV) from EADL data.

Returns:

Mapping of subshell label → binding energy. Empty if no EADL data is loaded.

Return type:

dict[str, float]

property electron_cross_section_labels: list[str]

List of available electron cross-section keys.

property photon_cross_section_labels: list[str]

List of available photon cross-section keys.

property subshells: list[str]

List of subshell labels from EADL data.

property n_subshells: int

Number of subshells from EADL data.

to_dict()[source]

Export a flat summary dictionary.

Returns:

Includes scalar metadata, binding energies, and lists of available cross-section keys. Array data is not included to keep the output concise.

Return type:

dict[str, Any]

class pyepics.client.EPICSClient(data_dir='data/endf')[source]

High-level interface for querying EPICS element data.

Parameters:

data_dir (str or Path) – Root directory containing eedl/, epdl/, eadl/ sub-folders with ENDF files. Defaults to "data/endf" relative to the current working directory.

Examples

>>> client = EPICSClient("data/endf")
>>> fe = client.get_element("Fe")
>>> fe.Z
26
>>> fe.binding_energies
{'K': 7112.0, 'L1': 844.6, ...}
__init__(data_dir='data/endf')[source]

Initialise the client with the path to ENDF data.

Parameters:

data_dir (str | Path)

Return type:

None

get_element(element, *, libraries=('EEDL', 'EPDL', 'EADL'))[source]

Retrieve all available data for an element.

Parameters:
  • element (int or str) – Atomic number, symbol (e.g. "Fe"), or full name (e.g. "Iron").

  • libraries (sequence of str, optional) – Which EPICS libraries to load. Defaults to all three.

Returns:

Container with parsed datasets and derived properties.

Return type:

ElementProperties

Raises:

ValidationError – If element cannot be resolved.

Examples

>>> client = EPICSClient("data/endf")
>>> fe = client.get_element("Fe")
>>> fe.symbol
'Fe'
get_properties(element, *, libraries=('EEDL', 'EPDL', 'EADL'))[source]

Return a flat summary dictionary for an element.

This is a convenience wrapper around get_element() that returns a plain dict rather than an ElementProperties object.

Parameters:
  • element (int or str) – Element identifier.

  • libraries (sequence of str, optional) – Libraries to load.

Returns:

See ElementProperties.to_dict().

Return type:

dict[str, Any]

compare(elements, *, properties=None, libraries=('EEDL', 'EPDL', 'EADL'))[source]

Compare properties across multiple elements.

Parameters:
  • elements (sequence of int or str) – Elements to compare.

  • properties (sequence of str or None, optional) – If given, only include these keys in each row. Defaults to all scalar properties.

  • libraries (sequence of str, optional) – Libraries to load.

Returns:

One dict per element. If pandas is available, call compare_df() instead for a DataFrame.

Return type:

list[dict[str, Any]]

Examples

>>> client = EPICSClient("data/endf")
>>> rows = client.compare(["H", "He", "Li"])
>>> [r["symbol"] for r in rows]
['H', 'He', 'Li']
compare_df(elements, *, properties=None, libraries=('EEDL', 'EPDL', 'EADL'))[source]

Compare elements and return a pandas DataFrame.

Requires pandas to be installed.

Parameters:
  • elements (sequence of int or str) – Elements to compare.

  • properties (sequence of str or None, optional) – Subset of properties to include.

  • libraries (sequence of str, optional) – Libraries to load.

Returns:

One row per element, columns are property names.

Return type:

pandas.DataFrame

Raises:

ImportError – If pandas is not installed.

binding_energy_table(elements)[source]

Build a binding-energy table (requires pandas).

Parameters:

elements (sequence of int or str) – Elements to include.

Returns:

Rows = elements, columns = subshell labels. Missing subshells are NaN.

Return type:

pandas.DataFrame

Raises:

ImportError – If pandas is not installed.

get_cross_section(element, label, *, library='EEDL')[source]

Retrieve a specific cross-section array.

Parameters:
  • element (int or str) – Element identifier.

  • label (str) – Cross-section label (e.g. "xs_tot").

  • library (str) – "EEDL" or "EPDL".

Returns:

(energy_eV, cross_section_barns)

Return type:

tuple[numpy.ndarray, numpy.ndarray]

Raises:

KeyError – If the label does not exist for this element.

clear_cache()[source]

Clear all cached datasets.

Return type:

None

property available_elements: list[int]

Return sorted list of atomic numbers with ENDF data on disk.

Scans the data directory for EEDL files (as the primary indicator).

Plotting

Optional plotting helpers for PyEPICS

All functions in this module require matplotlib. The core library works without it — these are convenience wrappers for quick visualisation.

Usage

>>> from pyepics.plotting import plot_cross_sections, plot_binding_energies
>>> plot_cross_sections(client, "Fe", labels=["xs_tot", "xs_el"])
pyepics.plotting.plot_cross_sections(client, element, *, labels=None, library='EEDL', logx=True, logy=True, title=None, ax=None, show=True)[source]

Plot cross sections for a single element.

Parameters:
  • client (EPICSClient) – Initialised client instance.

  • element (int or str) – Element identifier.

  • labels (sequence of str or None, optional) – Cross-section labels to plot. Defaults to all available.

  • library (str) – "EEDL" or "EPDL".

  • logx (bool) – Use logarithmic axes.

  • logy (bool) – Use logarithmic axes.

  • title (str or None) – Plot title. Auto-generated if None.

  • ax (matplotlib.axes.Axes or None) – Existing axes to draw on. Creates a new figure if None.

  • show (bool) – Call plt.show() at the end.

Returns:

The axes object.

Return type:

matplotlib.axes.Axes

pyepics.plotting.compare_cross_sections(client, elements, label, *, library='EEDL', logx=True, logy=True, title=None, ax=None, show=True)[source]

Compare a single cross-section type across multiple elements.

Parameters:
  • client (EPICSClient) – Initialised client instance.

  • elements (sequence of int or str) – Elements to compare.

  • label (str) – Cross-section label (e.g. "xs_tot").

  • library (str) – "EEDL" or "EPDL".

  • logx (bool) – Use logarithmic axes.

  • logy (bool) – Use logarithmic axes.

  • title (str or None) – Plot title.

  • ax (matplotlib.axes.Axes or None) – Existing axes.

  • show (bool) – Call plt.show().

Return type:

matplotlib.axes.Axes

pyepics.plotting.plot_binding_energies(client, elements, *, subshell=None, title=None, ax=None, show=True)[source]

Plot binding energies vs. atomic number.

Parameters:
  • client (EPICSClient) – Initialised client instance.

  • elements (sequence of int or str) – Elements to plot.

  • subshell (str or None) – If given, plot only this subshell (e.g. "K"). Otherwise, plot all subshells with connected lines.

  • title (str or None) – Plot title.

  • ax (matplotlib.axes.Axes or None) – Existing axes.

  • show (bool) – Call plt.show().

Return type:

matplotlib.axes.Axes

pyepics.plotting.plot_shell_binding_energies(client, element, *, title=None, ax=None, show=True)[source]

Bar chart of binding energies by subshell for a single element.

Parameters:
  • client (EPICSClient) – Initialised client instance.

  • element (int or str) – Element identifier.

  • title (str or None) – Plot title.

  • ax (matplotlib.axes.Axes or None) – Existing axes.

  • show (bool) – Call plt.show().

Return type:

matplotlib.axes.Axes

Readers

EEDL (Evaluated Electron Data Library) reader

Parses ENDF-format EEDL files and returns a strongly-typed EEDLDataset instance. All low-level parsing is delegated to pyepics.utils.parsing; validation is handled by pyepics.utils.validation.

Supported ENDF sections

  • MF=23 — Electron cross sections (total, elastic, bremsstrahlung, excitation, ionisation per subshell).

  • MF=26 — Angular and energy distributions (large-angle elastic angular distributions, bremsstrahlung spectra, excitation average energy loss, subshell energy spectra).

File Format Assumptions

  • The file follows ENDF-6 fixed-width format (80 chars/line).

  • The endf Python package is used to parse MF=23 and most of MF=26.

  • MF=26 / MT=525 (large-angle elastic angular distribution) is parsed manually via pyepics.utils.parsing.parse_mf26_mt525() because the endf library does not handle it reliably.

References

class pyepics.readers.eedl.EEDLReader[source]

Reader for EEDL (Evaluated Electron Data Library) ENDF files

Extracts electron interaction cross sections (MF=23) and angular / energy distributions (MF=26) from a single-element ENDF file generated by the LLNL EPICS 2025 pipeline.

The reader produces an EEDLDataset dataclass that can be passed directly to the HDF5 converter.

Notes

The ENDF file is opened using endf.Material(path), which reads the entire file into memory. For very large files this may require significant RAM; however, individual EEDL element files are typically < 10 MB so this is not a practical concern.

Examples

>>> reader = EEDLReader()
>>> dataset = reader.read("eedl/EEDL.ZA026000.endf")
>>> dataset.Z
26
>>> "xs_tot" in dataset.cross_sections
True
read(path, *, validate=True)[source]

Parse an EEDL ENDF file and return a typed dataset model

Parameters:
  • path (Path | str) – Path to the EEDL ENDF file. The filename must contain the pattern ZA{ZZZ}000 so that the atomic number can be extracted (e.g. EEDL.ZA026000.endf for iron).

  • validate (bool, optional) – Run post-parse validation on cross-section arrays. Default True.

Returns:

Fully populated dataset model.

Return type:

EEDLDataset

Raises:
  • FileFormatError – If the file does not exist, cannot be opened by the endf library, or has an unrecognised filename pattern.

  • ParseError – If any ENDF section is malformed.

  • ValidationError – If validate is True and any cross-section array fails monotonicity or non-negativity checks.

EPDL (Evaluated Photon Data Library) reader

Parses ENDF-format EPDL files and returns a strongly-typed EPDLDataset instance.

Supported ENDF sections

  • MF=23 — Photon cross sections (total, coherent, incoherent, pair production, photoelectric, subshell photoelectric).

  • MF=27 — Form factors and scattering functions (coherent form factor, incoherent scattering function, anomalous scattering factors).

File Format Assumptions

  • Standard ENDF-6 fixed-width format (80 chars/line).

  • Parsed entirely via the endf Python package.

References

class pyepics.readers.epdl.EPDLReader[source]

Reader for EPDL (Evaluated Photon Data Library) ENDF files

Extracts photon interaction cross sections (MF=23) and form factors (MF=27) from a single-element ENDF file generated by the LLNL EPICS 2025 pipeline.

Notes

All parsing is done via endf.Material. The sigma attribute of each section’s Tabulated1D object is read for both MF=23 and MF=27 data.

Examples

>>> reader = EPDLReader()
>>> dataset = reader.read("epdl/EPDL.ZA026000.endf")
>>> dataset.Z
26
>>> "xs_tot" in dataset.cross_sections
True
read(path, *, validate=True)[source]

Parse an EPDL ENDF file and return a typed dataset model

Parameters:
  • path (Path | str) – Path to the EPDL ENDF file. The filename must contain ZA{ZZZ}000.

  • validate (bool, optional) – Run post-parse validation. Default True.

Returns:

Fully populated photon dataset model.

Return type:

EPDLDataset

Raises:

EADL (Evaluated Atomic Data Library) reader

Parses ENDF-format EADL files and returns a strongly-typed EADLDataset instance containing atomic relaxation data (binding energies, transition probabilities, fluorescence yields, and Auger yields).

Supported ENDF sections

  • MF=28, MT=533 — Atomic relaxation data (transition arrays per subshell, including radiative and non-radiative channels).

File Format Assumptions

  • Standard ENDF-6 fixed-width format.

  • The endf Python package handles the MF=28 section, exposing a subshells list of dicts with keys SUBI, EBI, ELN, NTR, and transitions (each with SUBJ, SUBK, ETR, FTR).

References

class pyepics.readers.eadl.EADLReader[source]

Reader for EADL (Evaluated Atomic Data Library) ENDF files

Extracts atomic relaxation data from MF=28 / MT=533. Each subshell entry includes the binding energy, electron count, and a list of transitions (radiative X-ray emission and non-radiative Auger / Coster-Kronig).

Notes

A radiative transition has SUBK == 0 in the ENDF record; a non-radiative transition has SUBK > 0. This convention is preserved in the SubshellTransition model.

Examples

>>> reader = EADLReader()
>>> dataset = reader.read("eadl/EADL.ZA026000.endf")
>>> dataset.Z
26
>>> "K" in dataset.subshells
True
read(path, *, validate=True)[source]

Parse an EADL ENDF file and return a typed dataset model

Parameters:
  • path (Path | str) – Path to the EADL ENDF file. The filename must contain ZA{ZZZ}000.

  • validate (bool, optional) – Run post-parse validation on the atomic number. Default True.

Returns:

Fully populated atomic relaxation dataset model.

Return type:

EADLDataset

Raises:

Models

Typed dataclass models for EPICS parsed datasets

Every model is a frozen-safe dataclass carrying scalar metadata and NumPy arrays. Models are the sole output of the reader layer and the sole input accepted by the converter layer, enforcing strict separation of concerns.

Hierarchy

CrossSectionRecord   — energy / xs pair with optional interpolation info
DistributionRecord   — flat (inc_energy, value, probability) triple
FormFactorRecord     — x / y pair (momentum transfer / form factor)
SubshellTransition   — single radiative or Auger transition
SubshellRelaxation   — one subshell's relaxation data
EEDLDataset          — full electron (EEDL) parsed output
EPDLDataset          — full photon  (EPDL) parsed output
EADLDataset          — full atomic  (EADL) parsed output

Units

  • Energies are in eV unless explicitly noted otherwise.

  • Cross sections are in barns (ENDF convention).

  • Momentum-transfer values are in 1/Å (inverse ångström).

  • Probabilities are dimensionless fractions summing to ≈ 1 per subshell.

class pyepics.models.records.CrossSectionRecord(label, energy, cross_section, breakpoints=None, interpolation=None)[source]

A single cross-section table (energy vs. σ)

Parameters:
  • label (str) – Short mnemonic name (e.g. "xs_tot", "xs_K").

  • energy (numpy.ndarray) – Incident-energy grid, shape (N,), units eV. Must be monotonically non-decreasing.

  • cross_section (numpy.ndarray) – Cross-section values, shape (N,), units barns. Must be non-negative.

  • breakpoints (numpy.ndarray | None) – ENDF TAB1 interpolation-region breakpoints, or None.

  • interpolation (numpy.ndarray | None) – ENDF TAB1 interpolation law codes, or None.

class pyepics.models.records.DistributionRecord(label, inc_energy, value, probability)[source]

A flat ENDF distribution (incident energy → outgoing value / PDF)

The three arrays are aligned element-wise: for each index k, inc_energy[k] is the incident energy, value[k] is the outgoing quantity (cosine μ or secondary energy E’), and probability[k] is the probability density.

Parameters:
  • label (str) – Short mnemonic name (e.g. "ang_lge", "spec_K").

  • inc_energy (numpy.ndarray) – Incident energies, shape (M,), units eV.

  • value (numpy.ndarray) – Outgoing quantity, shape (M,).

  • probability (numpy.ndarray) – Probability-density values, shape (M,).

class pyepics.models.records.AverageEnergyLoss(label, energy, avg_loss)[source]

Average energy loss vs. incident energy

Parameters:
  • label (str) – Short mnemonic name (e.g. "loss_exc").

  • energy (numpy.ndarray) – Incident-energy grid, shape (N,), units eV.

  • avg_loss (numpy.ndarray) – Average energy loss per collision, shape (N,), units eV.

class pyepics.models.records.FormFactorRecord(label, x, y, breakpoints=None, interpolation=None)[source]

A form-factor or scattering-function table

Parameters:
  • label (str) – Short mnemonic (e.g. "ff_coherent", "sf_incoherent").

  • x (numpy.ndarray) – Independent variable — momentum transfer (1/Å) or energy (eV).

  • y (numpy.ndarray) – Form factor or scattering function values, same shape as x.

  • breakpoints (numpy.ndarray | None) – ENDF TAB1 interpolation-region breakpoints.

  • interpolation (numpy.ndarray | None) – ENDF TAB1 interpolation law codes.

class pyepics.models.records.SubshellTransition(origin_designator, origin_label, secondary_designator, secondary_label, energy_eV, probability, is_radiative)[source]

A single atomic-relaxation transition

Parameters:
  • origin_designator (int) – EADL subshell designator of the originating electron.

  • origin_label (str) – Human-readable label (e.g. "L1").

  • secondary_designator (int) – Designator for the subshell that fills the vacancy. Zero (0) indicates a radiative (X-ray) transition.

  • secondary_label (str) – "radiative" when secondary_designator is 0, else the subshell label (e.g. "M2").

  • energy_eV (float) – Transition energy (eV).

  • probability (float) – Fractional probability of this transition occurring.

  • is_radiative (bool) – True for X-ray emission, False for Auger / Coster-Kronig.

class pyepics.models.records.SubshellRelaxation(designator, name, binding_energy_eV, n_electrons, transitions=<factory>)[source]

Relaxation data for a single atomic subshell

Parameters:
  • designator (int) – EADL numeric subshell designator (1 = K, 2 = L1, …).

  • name (str) – Standard label (e.g. "K", "L1").

  • binding_energy_eV (float) – Binding energy of the subshell (eV).

  • n_electrons (float) – Number of electrons in the neutral atom.

  • transitions (list[SubshellTransition]) – All radiative and non-radiative transitions from this subshell.

class pyepics.models.records.EEDLDataset(Z, symbol, atomic_weight_ratio, ZA, cross_sections=<factory>, distributions=<factory>, average_energy_losses=<factory>, bremsstrahlung_spectra=None)[source]

Complete parsed output of an EEDL (Evaluated Electron Data Library) file

Instances are returned by EEDLReader.read() and consumed by convert_dataset_to_hdf5().

Parameters:
  • Z (int) – Atomic number.

  • symbol (str) – Element symbol (e.g. "Fe").

  • atomic_weight_ratio (float) – AWR from the ENDF material header.

  • ZA (float) – ZA identifier (Z × 1000 + A).

  • cross_sections (dict[str, CrossSectionRecord]) – Keyed by abbreviation (e.g. "xs_tot", "xs_K").

  • distributions (dict[str, DistributionRecord]) – Keyed by abbreviation (e.g. "ang_lge", "spec_K").

  • average_energy_losses (dict[str, AverageEnergyLoss]) – Keyed by abbreviation (e.g. "loss_exc", "loss_brem_spec").

  • bremsstrahlung_spectra (DistributionRecord | None) – Bremsstrahlung photon energy spectrum, if present.

class pyepics.models.records.EPDLDataset(Z, symbol, atomic_weight_ratio, ZA, cross_sections=<factory>, form_factors=<factory>)[source]

Complete parsed output of an EPDL (Evaluated Photon Data Library) file

Instances are returned by EPDLReader.read() and consumed by convert_dataset_to_hdf5().

Parameters:
  • Z (int) – Atomic number.

  • symbol (str) – Element symbol.

  • atomic_weight_ratio (float) – AWR from the ENDF material header.

  • ZA (float) – ZA identifier.

  • cross_sections (dict[str, CrossSectionRecord]) – Photon cross sections keyed by abbreviation.

  • form_factors (dict[str, FormFactorRecord]) – Form factors / scattering functions keyed by abbreviation.

class pyepics.models.records.EADLDataset(Z, symbol, atomic_weight_ratio, ZA, n_subshells=0, subshells=<factory>)[source]

Complete parsed output of an EADL (Evaluated Atomic Data Library) file

Instances are returned by EADLReader.read() and consumed by convert_dataset_to_hdf5().

Parameters:
  • Z (int) – Atomic number.

  • symbol (str) – Element symbol.

  • atomic_weight_ratio (float) – AWR from the ENDF material header.

  • ZA (float) – ZA identifier.

  • n_subshells (int) – Number of subshells for which relaxation data is given.

  • subshells (dict[str, SubshellRelaxation]) – Relaxation data keyed by subshell label (e.g. "K").

Converters

HDF5 converter for EPICS parsed datasets

Writes deterministic, self-documenting HDF5 files from the typed dataclass models returned by the reader layer.

HDF5 Layout

All three dataset types share a common metadata block and then branch into library-specific groups:

/metadata/
    Z                   int64    — atomic number
    symbol              string   — element symbol
    ZA                  float64  — ZA identifier (Z × 1000 + A)
    AWR                 float64  — atomic weight ratio

/EEDL/
    Z_{ZZZ}/
        total/
            energy              float64[]   units: eV
            cross_section       float64[]   units: barns
        elastic_scatter/
            total/  ...
            large_angle/ ...
        ionization/
            total/  ...
            subshells/
                K/  ...
        bremsstrahlung/ ...
        excitation/ ...

/EPDL/
    Z_{ZZZ}/
        total/ ...
        coherent_scattering/ ...
        incoherent_scattering/ ...
        photoelectric/ ...
        pair_production/ ...
        form_factors/ ...

/EADL/
    Z_{ZZZ}/
        subshells/
            K/
                binding_energy_eV   float64
                n_electrons         float64
                radiative/ ...
                non_radiative/ ...

Physical units are stored as HDF5 dataset attributes (ds.attrs["units"] = "eV"). Element-level metadata (Z, AWR, etc.) are stored as group attributes on the Z_{ZZZ} group.

References

  • HDF5 best practices, The HDF Group.

  • ENDF-6 Formats Manual (ENDF-102).

pyepics.converters.hdf5.convert_dataset_to_hdf5(dataset_type, source_path, output_path, *, validate=True, overwrite=False)[source]

Read an ENDF source file and write a structured HDF5 file

This is the main convenience function of the converter layer. It instantiates the appropriate reader, parses the source file, and writes the result to an HDF5 file with a deterministic, self-documenting group layout.

Parameters:
  • dataset_type ("EEDL" | "EADL" | "EPDL") – Which EPICS library the source file belongs to.

  • source_path (Path | str) – Path to the ENDF source file.

  • output_path (Path | str) – Path for the output HDF5 file. Parent directories are created automatically.

  • validate (bool, optional) – Run post-parse validation. Default True.

  • overwrite (bool, optional) – If True, overwrite an existing HDF5 file. If False (default), raise ConversionError when the output file already exists.

Raises:
  • ConversionError – If overwrite is False and output_path exists, or if any HDF5 write operation fails.

  • FileFormatError – If the source file cannot be opened.

  • ParseError – If the source file content is malformed.

  • ValidationError – If validation is enabled and fails.

  • ValueError – If dataset_type is not one of the supported types.

Return type:

None

Examples

>>> convert_dataset_to_hdf5(
...     "EEDL",
...     "data/endf/eedl/EEDL.ZA026000.endf",
...     "output/Fe.h5",
...     overwrite=True,
... )
pyepics.converters.hdf5.create_raw_hdf5(dataset_type, source_path, output_path, *, validate=True, overwrite=False)[source]

Parse an ENDF file and write a raw HDF5 file

Raw files preserve the original energy grids, breakpoints, and interpolation info exactly as they appear in the ENDF evaluation. They are suitable for external users who want full-fidelity data.

Parameters:
  • dataset_type ("EEDL" | "EADL" | "EPDL") – Which EPICS library.

  • source_path (Path | str) – Path to the ENDF source file.

  • output_path (Path | str) – Path for the output HDF5 file.

  • validate (bool, optional) – Post-parse validation. Default True.

  • overwrite (bool, optional) – Overwrite existing file. Default False.

Return type:

None

Examples

>>> create_raw_hdf5("EEDL", "data/endf/eedl/EEDL.ZA026000.endf", "data/raw/electron/Fe.h5")
pyepics.converters.hdf5.create_mcdc_hdf5(dataset_type, source_path, output_path, *, validate=True, overwrite=False)[source]

Parse an ENDF file and write an MCDC-format HDF5 file

MCDC files have cross sections interpolated onto a common energy grid, compressed distribution tables, and analytically computed small-angle scattering. They are optimised for transport codes.

Parameters:
  • dataset_type ("EEDL" | "EADL" | "EPDL") – Which EPICS library.

  • source_path (Path | str) – Path to the ENDF source file.

  • output_path (Path | str) – Path for the output HDF5 file.

  • validate (bool, optional) – Post-parse validation. Default True.

  • overwrite (bool, optional) – Overwrite existing file. Default False.

Return type:

None

Examples

>>> create_mcdc_hdf5("EEDL", "data/endf/eedl/EEDL.ZA026000.endf", "data/mcdc/electron/Fe.h5")
pyepics.converters.hdf5.create_combined_mcdc_hdf5(Z, output_path, *, eedl_path=None, epdl_path=None, eadl_path=None, validate=True, overwrite=False)[source]

Create a single MCDC HDF5 file containing electron, photon, and atomic data.

Each element gets one file (e.g. Fe.h5) with up to three top-level groups: electron_reactions, photon_reactions, and atomic_relaxation.

Parameters:
  • Z (int) – Atomic number (used for logging only; actual Z comes from the parsed data).

  • output_path (Path | str) – Path for the combined output HDF5 file.

  • eedl_path (Path | str | None) – Path to the EEDL ENDF source file (electron).

  • epdl_path (Path | str | None) – Path to the EPDL ENDF source file (photon).

  • eadl_path (Path | str | None) – Path to the EADL ENDF source file (atomic relaxation).

  • validate (bool, optional) – Post-parse validation. Default True.

  • overwrite (bool, optional) – Overwrite existing file. Default False.

Return type:

None

Examples

>>> create_combined_mcdc_hdf5(
...     26, "data/mcdc/Fe.h5",
...     eedl_path="data/endf/eedl/EEDL.ZA026000.endf",
...     epdl_path="data/endf/epdl/EPDL.ZA026000.endf",
...     eadl_path="data/endf/eadl/EADL.ZA026000.endf",
... )

Raw HDF5 writer for EPICS parsed datasets

Writes a “raw” HDF5 file that preserves every piece of information from the ENDF source file: original energy grids, breakpoints, interpolation law codes, and distribution tables. No resampling or merging is done.

These files are intended for external users who need the full fidelity of the ENDF evaluation — users can inspect, re-interpolate, or convert the data with their own tools.

Output Directories

  • data/raw/electron/ — EEDL (electron) raw files

  • data/raw/photon/ — EPDL (photon) raw files

  • data/raw/atomic/ — EADL (atomic) raw files

HDF5 Layout — EEDL

/metadata/
    Z, symbol, ZA, AWR

/total_xs/cross_section/
    energy, cross_section, breakpoints, interpolation

/elastic_scatter/
    cross_section/total/    ...
    cross_section/large_angle/  ...
    distributions/large_angle/
        inc_energy, mu, probability
        y_inc_energy, y_yield

/bremsstrahlung/
    cross_section/ ...
    distributions/
        inc_energy, out_energy, probability
        loss_inc_energy, avg_loss

/excitation/
    cross_section/ ...
    distributions/
        loss_inc_energy, avg_loss

/ionization/
    cross_section/total/ ...
    cross_section/{shell}/ ...
    distributions/{shell}/
        inc_energy, out_energy, probability
        y_inc_energy, y_yield
        binding_energy
pyepics.converters.raw_hdf5.write_raw_eedl(h5f, dataset)[source]

Write a raw EEDL dataset preserving all original data

Parameters:
  • h5f (h5py.File) – Open HDF5 file handle (write mode).

  • dataset (EEDLDataset) – Parsed EEDL dataset.

Return type:

None

pyepics.converters.raw_hdf5.write_raw_epdl(h5f, dataset)[source]

Write a raw EPDL dataset preserving all original data

Parameters:
  • h5f (h5py.File) – Open HDF5 file handle (write mode).

  • dataset (EPDLDataset) – Parsed EPDL dataset.

Return type:

None

pyepics.converters.raw_hdf5.write_raw_eadl(h5f, dataset)[source]

Write a raw EADL dataset preserving all original data

Parameters:
  • h5f (h5py.File) – Open HDF5 file handle (write mode).

  • dataset (EADLDataset) – Parsed EADL dataset.

Return type:

None

MCDC-format HDF5 writer for EPICS datasets

Writes HDF5 files optimised for the MC/DC (Monte Carlo / Dynamic Code) transport code. These differ from the “raw” format in several ways:

  • All cross sections are interpolated onto a common energy grid.

  • Angular distributions are converted to (energy_grid, energy_offset, value, PDF) compressed tables via build_pdf().

  • Small-angle elastic scattering cosine PDFs are analytically computed from screened Rutherford via small_angle_scattering_cosine().

  • Atomic relaxation transitions are split into radiative / non-radiative groups with pre-computed fluorescence and Auger yields.

Important

This file is intentionally kept separate from the raw HDF5 writer so that the MCDC data layout can be changed frequently without affecting the raw-data pipeline. If the transport code changes its expected input format, edit this file only.

Output Directories

  • data/mcdc/electron/ — EEDL (electron)

  • data/mcdc/photon/ — EPDL (photon)

  • data/mcdc/atomic/ — EADL (atomic)

See also

pyepics.converters.raw_hdf5

raw (full-fidelity) writer

pyepics.converters.hdf5

high-level convenience API

pyepics.converters.mcdc_hdf5.write_mcdc_eedl(h5f, dataset)[source]

Write an MCDC-format EEDL HDF5 file

All cross sections are resampled onto the total-xs energy grid. Angular distributions are compressed into (grid, offset, value, PDF) tables. Small-angle elastic scattering cosine PDFs are computed analytically from screened Rutherford theory.

Parameters:
  • h5f (h5py.File) – Open HDF5 file handle (write mode).

  • dataset (EEDLDataset) – Parsed EEDL dataset.

Return type:

None

pyepics.converters.mcdc_hdf5.write_mcdc_epdl(h5f, dataset)[source]

Write an MCDC-format EPDL HDF5 file

All cross sections are resampled onto the total-xs energy grid. Form factors are stored as-is (no interpolation needed).

Parameters:
  • h5f (h5py.File) – Open HDF5 file handle (write mode).

  • dataset (EPDLDataset) – Parsed EPDL dataset.

Return type:

None

pyepics.converters.mcdc_hdf5.write_mcdc_eadl(h5f, dataset)[source]

Write an MCDC-format EADL HDF5 file

Splits transitions into radiative / non-radiative groups with pre-computed fluorescence and Auger yields.

Parameters:
  • h5f (h5py.File) – Open HDF5 file handle (write mode).

  • dataset (EADLDataset) – Parsed EADL dataset.

Return type:

None

pyepics.converters.mcdc_hdf5.write_mcdc_combined(h5f, *, eedl=None, epdl=None, eadl=None)[source]

Write a combined MCDC HDF5 file with electron, photon, and atomic data.

Produces a single file per element containing up to three top-level groups (electron_reactions, photon_reactions, atomic_relaxation) plus shared metadata.

Parameters:
  • h5f (h5py.File) – Open HDF5 file handle (write mode).

  • eedl (EEDLDataset or None) – Parsed EEDL dataset (electron).

  • epdl (EPDLDataset or None) – Parsed EPDL dataset (photon).

  • eadl (EADLDataset or None) – Parsed EADL dataset (atomic relaxation).

Raises:

ValueError – If no dataset is provided.

Return type:

None

Download

EPICS dataset downloader

Downloads EEDL, EPDL, and EADL ENDF files from the LLNL Nuclear Data website (EPICS 2025).

Data Sources

  • EEDL: https://nuclear.llnl.gov/EPICS/ENDF2025/EEDL.ELEMENTS/

  • EPDL: https://nuclear.llnl.gov/EPICS/ENDF2025/EPDL.ELEMENTS/

  • EADL: https://nuclear.llnl.gov/EPICS/ENDF2025/EADL.ELEMENTS/

Examples

>>> from pyepics.io.download import download_library, download_all
>>> download_library("eedl")           # downloads to ./data/endf/eedl/
>>> download_all(out_dir="data/endf")   # downloads all three
pyepics.io.download.LIBRARY_URLS: dict[str, dict[str, str]] = {'eadl': {'description': 'Evaluated Atomic Data Library', 'prefix': 'EADL', 'url': 'https://nuclear.llnl.gov/EPICS/ENDF2025/EADL.ELEMENTS/getza.htm'}, 'eedl': {'description': 'Evaluated Electron Data Library', 'prefix': 'EEDL', 'url': 'https://nuclear.llnl.gov/EPICS/ENDF2025/EEDL.ELEMENTS/getza.htm'}, 'epdl': {'description': 'Evaluated Photon Data Library', 'prefix': 'EPDL', 'url': 'https://nuclear.llnl.gov/EPICS/ENDF2025/EPDL.ELEMENTS/getza.htm'}}

Download URLs and metadata for each EPICS library.

pyepics.io.download.download_library(library_name, out_dir=None)[source]

Download a specific EPICS library from the LLNL website

Fetches the LLNL index page for the requested library, discovers all element ENDF files, and downloads each one to out_dir.

Parameters:
  • library_name ("eedl" | "epdl" | "eadl") – Which library to download.

  • out_dir (Path | str | None, optional) – Output directory. Defaults to "./{library_name}".

Returns:

Path to the directory containing the downloaded files.

Return type:

Path

Raises:
  • DownloadError – If network requests fail or the HTML cannot be parsed.

  • ValueError – If library_name is not one of the supported values.

pyepics.io.download.download_all(out_dir=None)[source]

Download all three EPICS libraries (EEDL, EPDL, EADL)

Parameters:

out_dir (Path | str | None, optional) – Parent output directory. Each library will be placed in a sub-folder (data/endf/eedl/, etc.). Defaults to the current working directory.

Returns:

Mapping from library name to download directory.

Return type:

dict[str, Path]

Exceptions

Custom exception hierarchy for the PyEPICS package

All exceptions raised by PyEPICS inherit from PyEPICSError, making it possible to catch every library-specific error with a single except clause while still allowing fine-grained handling when needed.

Exception Hierarchy

PyEPICSError
├── ParseError          # Malformed file content
├── ValidationError     # Failed format or range checks
├── FileFormatError     # Wrong file type or header
├── ConversionError     # HDF5 write failures
└── DownloadError       # Network errors (future)
exception pyepics.exceptions.PyEPICSError[source]

Base exception for all PyEPICS errors

Every exception raised by PyEPICS is a subclass of this type. Catching PyEPICSError therefore catches any library-specific failure while still allowing standard Python exceptions (KeyError, TypeError, etc.) to propagate normally.

exception pyepics.exceptions.ParseError[source]

Raised when an ENDF-format file contains malformed or unparseable content

This includes unexpected column widths, non-numeric data in numeric fields, truncated records, or any deviation from the ENDF-6 fixed-width format that prevents successful extraction of physical data.

Parameters:

message (str) – Human-readable description of the parse failure, including the file path and approximate line number when available.

exception pyepics.exceptions.ValidationError[source]

Raised when parsed data fails post-parse validation checks

Validation checks include energy monotonicity, non-negative cross sections, probability normalization, and physically meaningful atomic-number ranges. A ValidationError means the file was parseable but the resulting data violates expected constraints.

Parameters:

message (str) – Description of the failed check, including the field name, expected constraint, and actual value.

exception pyepics.exceptions.FileFormatError[source]

Raised when a file does not match the expected EPICS/ENDF format

This is raised before full parsing begins—for example when the filename pattern does not match ZA{ZZZ}000 or when the file cannot be opened with the endf library.

Parameters:

message (str) – Description of the format mismatch, including the expected pattern and actual file characteristics.

exception pyepics.exceptions.ConversionError[source]

Raised when HDF5 conversion fails

This covers any error during HDF5 file creation: permission denied, disk full, incompatible dataset shapes, or a missing prerequisite dataset that should have been written in an earlier step.

Parameters:

message (str) – Description of the conversion failure and the target HDF5 path.

exception pyepics.exceptions.DownloadError[source]

Raised when dataset download from LLNL fails

Reserved for future use by the io.download module. Covers HTTP errors, connection timeouts, and checksum mismatches.

Parameters:

message (str) – Description of the network failure, including the URL attempted.

Constants

Physical constants and data-mapping tables used across PyEPICS

All constants are sourced from NIST CODATA 2018 [constants-1]. Mapping dictionaries use (MF, MT) integer tuples as keys so that look-ups from ENDF section identifiers are O(1).

References

[constants-1]

NIST, “The 2018 CODATA Recommended Values of the Fundamental Physical Constants”, https://physics.nist.gov/cuu/pdf/wallet_2018.pdf

pyepics.utils.constants.FINE_STRUCTURE: float = 0.0072973525693

Fine-structure constant α (dimensionless).

pyepics.utils.constants.ELECTRON_MASS: float = 0.51099895069

Electron rest-mass energy m_e c² (MeV).

pyepics.utils.constants.BARN_TO_CM2: float = 1e-24

Conversion factor from barns to cm².

pyepics.utils.constants.PLANCK_CONSTANT: float = 6.62607015e-34

Planck constant h (J·s, exact by SI definition).

pyepics.utils.constants.SPEED_OF_LIGHT: float = 299792458.0

Speed of light in vacuum c (m/s, exact by SI definition).

pyepics.utils.constants.ELECTRON_CHARGE: float = 1.602176634e-19

Elementary charge e (C, exact by SI definition).

pyepics.utils.constants.ELECTRON_SUBSHELL_LABELS: dict[int, str] = {534: 'K', 535: 'L1', 536: 'L2', 537: 'L3', 538: 'M1', 539: 'M2', 540: 'M3', 541: 'M4', 542: 'M5', 543: 'N1', 544: 'N2', 545: 'N3', 546: 'N4', 547: 'N5', 548: 'N6', 549: 'N7', 550: 'O1', 551: 'O2', 552: 'O3', 553: 'O4', 554: 'O5', 555: 'O6', 556: 'O7', 557: 'O8', 558: 'O9', 559: 'P1', 560: 'P2', 561: 'P3', 562: 'P4', 563: 'P5', 564: 'P6', 565: 'P7', 566: 'P8', 567: 'P9', 568: 'P10', 569: 'P11', 570: 'Q1', 571: 'Q2', 572: 'Q3'}

Mapping from ENDF MT number to subshell label string.

Used to identify specific electron-ionisation or photoelectric subshell cross-section sections. MT 534 corresponds to the K shell, 535–537 to L sub-shells, and so on through the Q shell.

pyepics.utils.constants.SUBSHELL_LABELS = {534: 'K', 535: 'L1', 536: 'L2', 537: 'L3', 538: 'M1', 539: 'M2', 540: 'M3', 541: 'M4', 542: 'M5', 543: 'N1', 544: 'N2', 545: 'N3', 546: 'N4', 547: 'N5', 548: 'N6', 549: 'N7', 550: 'O1', 551: 'O2', 552: 'O3', 553: 'O4', 554: 'O5', 555: 'O6', 556: 'O7', 557: 'O8', 558: 'O9', 559: 'P1', 560: 'P2', 561: 'P3', 562: 'P4', 563: 'P5', 564: 'P6', 565: 'P7', 566: 'P8', 567: 'P9', 568: 'P10', 569: 'P11', 570: 'Q1', 571: 'Q2', 572: 'Q3'}

Backward-compatible alias for ELECTRON_SUBSHELL_LABELS.

pyepics.utils.constants.SUBSHELL_DESIGNATORS: dict[int, str] = {1: 'K', 2: 'L1', 3: 'L2', 4: 'L3', 5: 'M1', 6: 'M2', 7: 'M3', 8: 'M4', 9: 'M5', 10: 'N1', 11: 'N2', 12: 'N3', 13: 'N4', 14: 'N5', 15: 'N6', 16: 'N7', 17: 'O1', 18: 'O2', 19: 'O3', 20: 'O4', 21: 'O5', 22: 'O6', 23: 'O7', 24: 'O8', 25: 'O9', 26: 'P1', 27: 'P2', 28: 'P3', 29: 'P4', 30: 'P5', 31: 'P6', 32: 'P7', 33: 'P8', 34: 'P9', 35: 'P10', 36: 'P11', 37: 'Q1', 38: 'Q2', 39: 'Q3'}

Mapping from EADL subshell-designator index to orbital label.

Index 1 = K (1s½), 2 = L1 (2s½), …, 39 = Q3 (7p³⁄₂).

pyepics.utils.constants.SUBSHELL_DESIGNATORS_INV: dict[str, int] = {'K': 1, 'L1': 2, 'L2': 3, 'L3': 4, 'M1': 5, 'M2': 6, 'M3': 7, 'M4': 8, 'M5': 9, 'N1': 10, 'N2': 11, 'N3': 12, 'N4': 13, 'N5': 14, 'N6': 15, 'N7': 16, 'O1': 17, 'O2': 18, 'O3': 19, 'O4': 20, 'O5': 21, 'O6': 22, 'O7': 23, 'O8': 24, 'O9': 25, 'P1': 26, 'P10': 35, 'P11': 36, 'P2': 27, 'P3': 28, 'P4': 29, 'P5': 30, 'P6': 31, 'P7': 32, 'P8': 33, 'P9': 34, 'Q1': 37, 'Q2': 38, 'Q3': 39}

subshell label → EADL designator index.

Type:

Reverse mapping

pyepics.utils.constants.ELECTRON_MF_MT: dict[tuple[int, int], str] = {(1, 451): 'General Information / Directory', (23, 501): 'Total Electron Cross Sections', (23, 522): 'Ionization (sum of subshells)', (23, 525): 'Large Angle Elastic Scattering Cross Section', (23, 526): 'Elastic Scatter (Total) Cross Sections', (23, 527): 'Bremsstrahlung Cross Sections', (23, 528): 'Excitation Cross Sections', (23, 534): 'K (1S1/2) Electroionization Subshell Cross Sections', (23, 535): 'L1 (2s1/2) Electroionization Subshell Cross Sections', (23, 536): 'L2 (2p1/2) Electroionization Subshell Cross Sections', (23, 537): 'L3 (2p3/2) Electroionization Subshell Cross Sections', (23, 538): 'M1 (3s1/2) Electroionization Subshell Cross Sections', (23, 539): 'M2 (3p1/2) Electroionization Subshell Cross Sections', (23, 540): 'M3 (3p3/2) Electroionization Subshell Cross Sections', (23, 541): 'M4 (3d3/2) Electroionization Subshell Cross Sections', (23, 542): 'M5 (3d5/2) Electroionization Subshell Cross Sections', (23, 543): 'N1 (4s1/2) Electroionization Subshell Cross Sections', (23, 544): 'N2 (4p1/2) Electroionization Subshell Cross Sections', (23, 545): 'N3 (4p3/2) Electroionization Subshell Cross Sections', (23, 546): 'N4 (4d3/2) Electroionization Subshell Cross Sections', (23, 547): 'N5 (4d5/2) Electroionization Subshell Cross Sections', (23, 548): 'N6 (4f5/2) Electroionization Subshell Cross Sections', (23, 549): 'N7 (4f7/2) Electroionization Subshell Cross Sections', (23, 550): 'O1 (5s1/2) Electroionization Subshell Cross Sections', (23, 551): 'O2 (5p1/2) Electroionization Subshell Cross Sections', (23, 552): 'O3 (5p3/2) Electroionization Subshell Cross Sections', (23, 553): 'O4 (5d3/2) Electroionization Subshell Cross Sections', (23, 554): 'O5 (5d5/2) Electroionization Subshell Cross Sections', (23, 555): 'O6 (5f5/2) Electroionization Subshell Cross Sections', (23, 556): 'O7 (5f7/2) Electroionization Subshell Cross Sections', (23, 557): 'O8 (5g7/2) Electroionization Subshell Cross Sections', (23, 558): 'O9 (5g9/2) Electroionization Subshell Cross Sections', (23, 559): 'P1 (6s1/2) Electroionization Subshell Cross Sections', (23, 560): 'P2 (6p1/2) Electroionization Subshell Cross Sections', (23, 561): 'P3 (6p3/2) Electroionization Subshell Cross Sections', (23, 562): 'P4 (6d3/2) Electroionization Subshell Cross Sections', (23, 563): 'P5 (6d5/2) Electroionization Subshell Cross Sections', (23, 564): 'P6 (6f5/2) Electroionization Subshell Cross Sections', (23, 565): 'P7 (6f7/2) Electroionization Subshell Cross Sections', (23, 566): 'P8 (6g7/2) Electroionization Subshell Cross Sections', (23, 567): 'P9 (6g9/2) Electroionization Subshell Cross Sections', (23, 568): 'P10 (6h7/2) Electroionization Subshell Cross Sections', (23, 569): 'P11 (6h9/2) Electroionization Subshell Cross Sections', (23, 570): 'Q1 (7s1/2) Electroionization Subshell Cross Sections', (23, 571): 'Q2 (7p1/2) Electroionization Subshell Cross Sections', (23, 572): 'Q3 (7p3/2) Electroionization Subshell Cross Sections', (26, 525): 'Large Angle Elastic Angular Distributions', (26, 527): 'Bremsstrahlung Photon Energy Spectra and Electron Average Energy Loss', (26, 528): 'Excitation Electron Average Energy Loss', (26, 534): 'K (1S1/2) Electroionization Subshell Energy Spectra', (26, 535): 'L1 (2s1/2) Electroionization Subshell Energy Spectra', (26, 536): 'L2 (2p1/2) Electroionization Subshell Energy Spectra', (26, 537): 'L3 (2p3/2) Electroionization Subshell Energy Spectra', (26, 538): 'M1 (3s1/2) Electroionization Subshell Energy Spectra', (26, 539): 'M2 (3p1/2) Electroionization Subshell Energy Spectra', (26, 540): 'M3 (3p3/2) Electroionization Subshell Energy Spectra', (26, 541): 'M4 (3d3/2) Electroionization Subshell Energy Spectra', (26, 542): 'M5 (3d5/2) Electroionization Subshell Energy Spectra', (26, 543): 'N1 (4s1/2) Electroionization Subshell Energy Spectra', (26, 544): 'N2 (4p1/2) Electroionization Subshell Energy Spectra', (26, 545): 'N3 (4p3/2) Electroionization Subshell Energy Spectra', (26, 546): 'N4 (4d3/2) Electroionization Subshell Energy Spectra', (26, 547): 'N5 (4d5/2) Electroionization Subshell Energy Spectra', (26, 548): 'N6 (4f5/2) Electroionization Subshell Energy Spectra', (26, 549): 'N7 (4f7/2) Electroionization Subshell Energy Spectra', (26, 550): 'O1 (5s1/2) Electroionization Subshell Energy Spectra', (26, 551): 'O2 (5p1/2) Electroionization Subshell Energy Spectra', (26, 552): 'O3 (5p3/2) Electroionization Subshell Energy Spectra', (26, 553): 'O4 (5d3/2) Electroionization Subshell Energy Spectra', (26, 554): 'O5 (5d5/2) Electroionization Subshell Energy Spectra', (26, 555): 'O6 (5f5/2) Electroionization Subshell Energy Spectra', (26, 556): 'O7 (5f7/2) Electroionization Subshell Energy Spectra', (26, 557): 'O8 (5g7/2) Electroionization Subshell Energy Spectra', (26, 558): 'O9 (5g9/2) Electroionization Subshell Energy Spectra', (26, 559): 'P1 (6s1/2) Electroionization Subshell Energy Spectra', (26, 560): 'P2 (6p1/2) Electroionization Subshell Energy Spectra', (26, 561): 'P3 (6p3/2) Electroionization Subshell Energy Spectra', (26, 562): 'P4 (6d3/2) Electroionization Subshell Energy Spectra', (26, 563): 'P5 (6d5/2) Electroionization Subshell Energy Spectra', (26, 564): 'P6 (6f5/2) Electroionization Subshell Energy Spectra', (26, 565): 'P7 (6f7/2) Electroionization Subshell Energy Spectra', (26, 566): 'P8 (6g7/2) Electroionization Subshell Energy Spectra', (26, 567): 'P9 (6g9/2) Electroionization Subshell Energy Spectra', (26, 568): 'P10 (6h7/2) Electroionization Subshell Energy Spectra', (26, 569): 'P11 (6h9/2) Electroionization Subshell Energy Spectra', (26, 570): 'Q1 (7s1/2) Electroionization Subshell Energy Spectra', (26, 571): 'Q2 (7p1/2) Electroionization Subshell Energy Spectra', (26, 572): 'Q3 (7p3/2) Electroionization Subshell Energy Spectra'}

Human-readable descriptions for every EEDL (MF, MT) section pair.

pyepics.utils.constants.MF_MT = {(1, 451): 'General Information / Directory', (23, 501): 'Total Electron Cross Sections', (23, 522): 'Ionization (sum of subshells)', (23, 525): 'Large Angle Elastic Scattering Cross Section', (23, 526): 'Elastic Scatter (Total) Cross Sections', (23, 527): 'Bremsstrahlung Cross Sections', (23, 528): 'Excitation Cross Sections', (23, 534): 'K (1S1/2) Electroionization Subshell Cross Sections', (23, 535): 'L1 (2s1/2) Electroionization Subshell Cross Sections', (23, 536): 'L2 (2p1/2) Electroionization Subshell Cross Sections', (23, 537): 'L3 (2p3/2) Electroionization Subshell Cross Sections', (23, 538): 'M1 (3s1/2) Electroionization Subshell Cross Sections', (23, 539): 'M2 (3p1/2) Electroionization Subshell Cross Sections', (23, 540): 'M3 (3p3/2) Electroionization Subshell Cross Sections', (23, 541): 'M4 (3d3/2) Electroionization Subshell Cross Sections', (23, 542): 'M5 (3d5/2) Electroionization Subshell Cross Sections', (23, 543): 'N1 (4s1/2) Electroionization Subshell Cross Sections', (23, 544): 'N2 (4p1/2) Electroionization Subshell Cross Sections', (23, 545): 'N3 (4p3/2) Electroionization Subshell Cross Sections', (23, 546): 'N4 (4d3/2) Electroionization Subshell Cross Sections', (23, 547): 'N5 (4d5/2) Electroionization Subshell Cross Sections', (23, 548): 'N6 (4f5/2) Electroionization Subshell Cross Sections', (23, 549): 'N7 (4f7/2) Electroionization Subshell Cross Sections', (23, 550): 'O1 (5s1/2) Electroionization Subshell Cross Sections', (23, 551): 'O2 (5p1/2) Electroionization Subshell Cross Sections', (23, 552): 'O3 (5p3/2) Electroionization Subshell Cross Sections', (23, 553): 'O4 (5d3/2) Electroionization Subshell Cross Sections', (23, 554): 'O5 (5d5/2) Electroionization Subshell Cross Sections', (23, 555): 'O6 (5f5/2) Electroionization Subshell Cross Sections', (23, 556): 'O7 (5f7/2) Electroionization Subshell Cross Sections', (23, 557): 'O8 (5g7/2) Electroionization Subshell Cross Sections', (23, 558): 'O9 (5g9/2) Electroionization Subshell Cross Sections', (23, 559): 'P1 (6s1/2) Electroionization Subshell Cross Sections', (23, 560): 'P2 (6p1/2) Electroionization Subshell Cross Sections', (23, 561): 'P3 (6p3/2) Electroionization Subshell Cross Sections', (23, 562): 'P4 (6d3/2) Electroionization Subshell Cross Sections', (23, 563): 'P5 (6d5/2) Electroionization Subshell Cross Sections', (23, 564): 'P6 (6f5/2) Electroionization Subshell Cross Sections', (23, 565): 'P7 (6f7/2) Electroionization Subshell Cross Sections', (23, 566): 'P8 (6g7/2) Electroionization Subshell Cross Sections', (23, 567): 'P9 (6g9/2) Electroionization Subshell Cross Sections', (23, 568): 'P10 (6h7/2) Electroionization Subshell Cross Sections', (23, 569): 'P11 (6h9/2) Electroionization Subshell Cross Sections', (23, 570): 'Q1 (7s1/2) Electroionization Subshell Cross Sections', (23, 571): 'Q2 (7p1/2) Electroionization Subshell Cross Sections', (23, 572): 'Q3 (7p3/2) Electroionization Subshell Cross Sections', (26, 525): 'Large Angle Elastic Angular Distributions', (26, 527): 'Bremsstrahlung Photon Energy Spectra and Electron Average Energy Loss', (26, 528): 'Excitation Electron Average Energy Loss', (26, 534): 'K (1S1/2) Electroionization Subshell Energy Spectra', (26, 535): 'L1 (2s1/2) Electroionization Subshell Energy Spectra', (26, 536): 'L2 (2p1/2) Electroionization Subshell Energy Spectra', (26, 537): 'L3 (2p3/2) Electroionization Subshell Energy Spectra', (26, 538): 'M1 (3s1/2) Electroionization Subshell Energy Spectra', (26, 539): 'M2 (3p1/2) Electroionization Subshell Energy Spectra', (26, 540): 'M3 (3p3/2) Electroionization Subshell Energy Spectra', (26, 541): 'M4 (3d3/2) Electroionization Subshell Energy Spectra', (26, 542): 'M5 (3d5/2) Electroionization Subshell Energy Spectra', (26, 543): 'N1 (4s1/2) Electroionization Subshell Energy Spectra', (26, 544): 'N2 (4p1/2) Electroionization Subshell Energy Spectra', (26, 545): 'N3 (4p3/2) Electroionization Subshell Energy Spectra', (26, 546): 'N4 (4d3/2) Electroionization Subshell Energy Spectra', (26, 547): 'N5 (4d5/2) Electroionization Subshell Energy Spectra', (26, 548): 'N6 (4f5/2) Electroionization Subshell Energy Spectra', (26, 549): 'N7 (4f7/2) Electroionization Subshell Energy Spectra', (26, 550): 'O1 (5s1/2) Electroionization Subshell Energy Spectra', (26, 551): 'O2 (5p1/2) Electroionization Subshell Energy Spectra', (26, 552): 'O3 (5p3/2) Electroionization Subshell Energy Spectra', (26, 553): 'O4 (5d3/2) Electroionization Subshell Energy Spectra', (26, 554): 'O5 (5d5/2) Electroionization Subshell Energy Spectra', (26, 555): 'O6 (5f5/2) Electroionization Subshell Energy Spectra', (26, 556): 'O7 (5f7/2) Electroionization Subshell Energy Spectra', (26, 557): 'O8 (5g7/2) Electroionization Subshell Energy Spectra', (26, 558): 'O9 (5g9/2) Electroionization Subshell Energy Spectra', (26, 559): 'P1 (6s1/2) Electroionization Subshell Energy Spectra', (26, 560): 'P2 (6p1/2) Electroionization Subshell Energy Spectra', (26, 561): 'P3 (6p3/2) Electroionization Subshell Energy Spectra', (26, 562): 'P4 (6d3/2) Electroionization Subshell Energy Spectra', (26, 563): 'P5 (6d5/2) Electroionization Subshell Energy Spectra', (26, 564): 'P6 (6f5/2) Electroionization Subshell Energy Spectra', (26, 565): 'P7 (6f7/2) Electroionization Subshell Energy Spectra', (26, 566): 'P8 (6g7/2) Electroionization Subshell Energy Spectra', (26, 567): 'P9 (6g9/2) Electroionization Subshell Energy Spectra', (26, 568): 'P10 (6h7/2) Electroionization Subshell Energy Spectra', (26, 569): 'P11 (6h9/2) Electroionization Subshell Energy Spectra', (26, 570): 'Q1 (7s1/2) Electroionization Subshell Energy Spectra', (26, 571): 'Q2 (7p1/2) Electroionization Subshell Energy Spectra', (26, 572): 'Q3 (7p3/2) Electroionization Subshell Energy Spectra'}

Backward-compatible alias for ELECTRON_MF_MT.

pyepics.utils.constants.ELECTRON_SECTIONS_ABBREVS: dict[tuple[int, int], str] = {(1, 451): 'general_info', (23, 501): 'xs_tot', (23, 522): 'xs_ion', (23, 525): 'xs_lge', (23, 526): 'xs_el', (23, 527): 'xs_brem', (23, 528): 'xs_exc', (23, 534): 'xs_K', (23, 535): 'xs_L1', (23, 536): 'xs_L2', (23, 537): 'xs_L3', (23, 538): 'xs_M1', (23, 539): 'xs_M2', (23, 540): 'xs_M3', (23, 541): 'xs_M4', (23, 542): 'xs_M5', (23, 543): 'xs_N1', (23, 544): 'xs_N2', (23, 545): 'xs_N3', (23, 546): 'xs_N4', (23, 547): 'xs_N5', (23, 548): 'xs_N6', (23, 549): 'xs_N7', (23, 550): 'xs_O1', (23, 551): 'xs_O2', (23, 552): 'xs_O3', (23, 553): 'xs_O4', (23, 554): 'xs_O5', (23, 555): 'xs_O6', (23, 556): 'xs_O7', (23, 557): 'xs_O8', (23, 558): 'xs_O9', (23, 559): 'xs_P1', (23, 560): 'xs_P2', (23, 561): 'xs_P3', (23, 562): 'xs_P4', (23, 563): 'xs_P5', (23, 564): 'xs_P6', (23, 565): 'xs_P7', (23, 566): 'xs_P8', (23, 567): 'xs_P9', (23, 568): 'xs_P10', (23, 569): 'xs_P11', (23, 570): 'xs_Q1', (23, 571): 'xs_Q2', (23, 572): 'xs_Q3', (26, 525): 'ang_lge', (26, 527): 'loss_brem_spec', (26, 528): 'loss_exc', (26, 534): 'spec_K', (26, 535): 'spec_L1', (26, 536): 'spec_L2', (26, 537): 'spec_L3', (26, 538): 'spec_M1', (26, 539): 'spec_M2', (26, 540): 'spec_M3', (26, 541): 'spec_M4', (26, 542): 'spec_M5', (26, 543): 'spec_N1', (26, 544): 'spec_N2', (26, 545): 'spec_N3', (26, 546): 'spec_N4', (26, 547): 'spec_N5', (26, 548): 'spec_N6', (26, 549): 'spec_N7', (26, 550): 'spec_O1', (26, 551): 'spec_O2', (26, 552): 'spec_O3', (26, 553): 'spec_O4', (26, 554): 'spec_O5', (26, 555): 'spec_O6', (26, 556): 'spec_O7', (26, 557): 'spec_O8', (26, 558): 'spec_O9', (26, 559): 'spec_P1', (26, 560): 'spec_P2', (26, 561): 'spec_P3', (26, 562): 'spec_P4', (26, 563): 'spec_P5', (26, 564): 'spec_P6', (26, 565): 'spec_P7', (26, 566): 'spec_P8', (26, 567): 'spec_P9', (26, 568): 'spec_P10', (26, 569): 'spec_P11', (26, 570): 'spec_Q1', (26, 571): 'spec_Q2', (26, 572): 'spec_Q3'}

Short mnemonic abbreviations for each EEDL (MF, MT) section.

pyepics.utils.constants.SECTIONS_ABBREVS = {(1, 451): 'general_info', (23, 501): 'xs_tot', (23, 522): 'xs_ion', (23, 525): 'xs_lge', (23, 526): 'xs_el', (23, 527): 'xs_brem', (23, 528): 'xs_exc', (23, 534): 'xs_K', (23, 535): 'xs_L1', (23, 536): 'xs_L2', (23, 537): 'xs_L3', (23, 538): 'xs_M1', (23, 539): 'xs_M2', (23, 540): 'xs_M3', (23, 541): 'xs_M4', (23, 542): 'xs_M5', (23, 543): 'xs_N1', (23, 544): 'xs_N2', (23, 545): 'xs_N3', (23, 546): 'xs_N4', (23, 547): 'xs_N5', (23, 548): 'xs_N6', (23, 549): 'xs_N7', (23, 550): 'xs_O1', (23, 551): 'xs_O2', (23, 552): 'xs_O3', (23, 553): 'xs_O4', (23, 554): 'xs_O5', (23, 555): 'xs_O6', (23, 556): 'xs_O7', (23, 557): 'xs_O8', (23, 558): 'xs_O9', (23, 559): 'xs_P1', (23, 560): 'xs_P2', (23, 561): 'xs_P3', (23, 562): 'xs_P4', (23, 563): 'xs_P5', (23, 564): 'xs_P6', (23, 565): 'xs_P7', (23, 566): 'xs_P8', (23, 567): 'xs_P9', (23, 568): 'xs_P10', (23, 569): 'xs_P11', (23, 570): 'xs_Q1', (23, 571): 'xs_Q2', (23, 572): 'xs_Q3', (26, 525): 'ang_lge', (26, 527): 'loss_brem_spec', (26, 528): 'loss_exc', (26, 534): 'spec_K', (26, 535): 'spec_L1', (26, 536): 'spec_L2', (26, 537): 'spec_L3', (26, 538): 'spec_M1', (26, 539): 'spec_M2', (26, 540): 'spec_M3', (26, 541): 'spec_M4', (26, 542): 'spec_M5', (26, 543): 'spec_N1', (26, 544): 'spec_N2', (26, 545): 'spec_N3', (26, 546): 'spec_N4', (26, 547): 'spec_N5', (26, 548): 'spec_N6', (26, 549): 'spec_N7', (26, 550): 'spec_O1', (26, 551): 'spec_O2', (26, 552): 'spec_O3', (26, 553): 'spec_O4', (26, 554): 'spec_O5', (26, 555): 'spec_O6', (26, 556): 'spec_O7', (26, 557): 'spec_O8', (26, 558): 'spec_O9', (26, 559): 'spec_P1', (26, 560): 'spec_P2', (26, 561): 'spec_P3', (26, 562): 'spec_P4', (26, 563): 'spec_P5', (26, 564): 'spec_P6', (26, 565): 'spec_P7', (26, 566): 'spec_P8', (26, 567): 'spec_P9', (26, 568): 'spec_P10', (26, 569): 'spec_P11', (26, 570): 'spec_Q1', (26, 571): 'spec_Q2', (26, 572): 'spec_Q3'}

Backward-compatible alias for ELECTRON_SECTIONS_ABBREVS.