Source code for est.tests.data
from typing import Union, Tuple
import numpy
from numpy.typing import ArrayLike
from est.resources import resource_path
[docs]
def example_spectrum(
spectrum: Union[Tuple, str] = "exafs/EXAFS_Ge.dat"
) -> Tuple[ArrayLike, ArrayLike]:
if isinstance(spectrum, tuple):
energy = numpy.linspace(*spectrum) # eV
mi, ma = energy.min(), energy.max()
edge = mi + (ma - mi) * 0.08
mu = numpy.linspace(0.6, 0.1, energy.size) + (energy > edge).astype(int)
elif spectrum in ("exafs/EXAFS_Cu.dat", "exafs/EXAFS_Ge.dat", "exafs/cu_rt01.xmu"):
energy, mu, *_ = numpy.loadtxt(resource_path(spectrum)).T
else:
energy, mu = example_spectrum((5000, 5500, 100))
return energy, mu
[docs]
def example_spectra(
spectrum: Union[Tuple, str] = "exafs/EXAFS_Ge.dat",
shape: Tuple[int] = (0, 1, 1),
noise: bool = False,
) -> Tuple[ArrayLike, ArrayLike]:
"""Replicate a single spectrum to a nD dataset with optional noise addition."""
energy, mu = example_spectrum(spectrum=spectrum)
nenergy = shape[0]
if shape[0]:
assert nenergy <= len(energy)
energy = energy[:nenergy]
mu = mu[:nenergy]
else:
nenergy = len(energy)
mu = mu.reshape((nenergy,) + (1,) * (len(shape) - 1))
tile_repts = (1,) + shape[1:]
mu = numpy.tile(mu, tile_repts)
if noise:
mu += numpy.random.normal(0.0, 0.05, shape)
return energy, mu