Source code for blissoda.demo.tests.utils.exafs

from typing import Optional

from esrf_pathlib import ESRFPath

from ....bliss_globals import setup_globals
from ....import_utils import unavailable_module
from ... import testing

try:
    from bliss.physics import units
except ImportError as ex:
    units = unavailable_module(ex)


[docs] def test_exafs_scan( exafs_processor, fast: bool = True, scan_info: Optional[dict] = None, split: bool = True, ): # Prepare scan if fast: e0 = 8950 # eV e1 = 9200 # eV step_size = 3.0 # eV else: e0 = 8800 # eV e1 = 9600 # eV step_size = 0.5 # eV npoints = int((e1 - e0) / step_size) intervals = npoints - 1 from_unit = "eV" to_unit = exafs_processor.counters["energy_unit"] e0 = (e0 * units.ur(from_unit)).to(to_unit).magnitude e1 = (e1 * units.ur(from_unit)).to(to_unit).magnitude scan = setup_globals.ascan( setup_globals.energy, e0, e1, intervals, 0.01, setup_globals.mu, scan_info=scan_info, run=False, ) # Processor is in charge of the scan lifecycle exafs_processor.run(scan) # Validate results scan_number = scan.scan_info["scan_nb"] raw_dataset_file = ESRFPath(scan.scan_info["filename"]) testing.wait_workflows() _assert_flint_plots_exist( exafs_processor, f"{raw_dataset_file.stem}: {scan_number}.1" ) if split: _assert_files_exist( raw_dataset_file.processed_dataset_file, scan_number, npoints )
@testing.demo_assert("Check EXAFS Flint plot {scan_label}") def _assert_flint_plots_exist(exafs_processor, scan_label): exafs_plot = exafs_processor._plotter._get_plot() scan_labels = exafs_plot.get_scans() if len(scan_labels) > exafs_processor.max_scans: raise AssertionError( f"{len(scan_labels)} scans plotted exceeds the maximum of {exafs_processor.max_scans}" ) if scan_label not in scan_labels: raise AssertionError(f"{scan_label!r} not in {scan_labels}") @testing.demo_assert("Check EXAFS workflow results for scan #{scan_number}") def _assert_files_exist(filename, scan_number, npoints): if not filename.exists(): raise FileNotFoundError(str(filename)) testing.assert_hdf5_dataset_exists( filename, f"/{scan_number}.1/measurement/mu", (npoints,) ) testing.assert_hdf5_dataset_exists( filename, f"/{scan_number}.1/measurement/energy", (npoints,) )