Source code for est.io.utils.readers.parse

import logging
from typing import Optional, Tuple

import numpy
from est.units import ur


_logger = logging.getLogger(__name__)


[docs] def parse_energy_mu( energy: Optional[numpy.ndarray], mu: Optional[numpy.ndarray], monitor: Optional[numpy.ndarray], energy_unit, ) -> Tuple[Optional[numpy.ndarray], Optional[numpy.ndarray]]: if energy is not None and mu is not None: if len(mu) != len(energy): raise ValueError( f"different number of elements between energy {len(energy)} and absorption {len(mu)}" ) if energy is not None: energy = (energy * energy_unit).m_as(ur.eV) if mu is not None and monitor is not None: if len(mu) != len(monitor): raise ValueError( f"different number of elements between absorption {len(mu)} and monitor {len(monitor)}" ) with numpy.errstate(divide="ignore"): mu = mu / monitor not_finite = ~numpy.isfinite(mu) if not_finite.any(): _logger.warning( "found non-finite values after mu division by the monitor. Replace them by 0" ) mu[not_finite] = 0 return energy, mu