Source code for est.io.utils.readers.larch_reader
import logging
import functools
from typing import Optional, List, Tuple, Dict
import numpy
try:
from larch.io import columnfile
except ImportError:
columnfile = None
from est.units import ur
from .parse import parse_energy_mu
_logger = logging.getLogger(__name__)
[docs]
def get_first_scan_title(file_path: str) -> Optional[str]:
return None
[docs]
def get_all_scan_titles(file_path: str) -> List[str]:
return list()
[docs]
def get_scan_column_names(file_path: str, scan_title: str) -> List[str]:
return list(_read_columnfile(file_path))
[docs]
@functools.lru_cache(maxsize=2) # called twice for energy and absorption
def read_spectrum(
column_file,
energy_col_name=None,
absorption_col_name=None,
monitor_col_name=None,
energy_unit=ur.eV,
scan_title=None,
) -> Tuple[Optional[numpy.ndarray], Optional[numpy.ndarray]]:
data = _read_columnfile(column_file)
if energy_col_name is None:
_logger.warning("Larch energy column name not provided. Try 'energy'")
energy_col_name = "energy"
if absorption_col_name is None:
_logger.warning("Larch absorption column name not provided. Try 'mu'")
absorption_col_name = "mu"
if monitor_col_name is None:
_logger.warning("Larch monitor column name not provided. Try 'i0'")
monitor_col_name = "i0"
energy = data.get(energy_col_name)
mu = data.get(absorption_col_name)
monitor = data.get(monitor_col_name)
return parse_energy_mu(energy, mu, monitor, energy_unit)
def _read_columnfile(
column_file,
) -> Dict[str, numpy.ndarray]:
larch_group = columnfile.read_ascii(column_file)
return dict(zip(larch_group.array_labels, larch_group.data))