Source code for blissoda.demo.tests.itest_bm02

from pathlib import Path

from blissoda.bm02.xrpd_processor import scan_processed_directory

from ...bliss_globals import setup_globals
from ...bm02.utils import export_filename_prefix
from ...demo.processors.bm02 import DemoBm02XrpdProcessor
from ...demo.tests.utils.xrpd import _scan_context
from ...processor import BlissScanType
from .. import testing


[docs] @testing.integration_fixture def bm02_xrpd_processor(gc_collect): bm02_processor = DemoBm02XrpdProcessor() bm02_processor.enable(setup_globals.difflab6) yield bm02_processor bm02_processor.disable_empty_cell_subtraction(setup_globals.difflab6) bm02_processor.disable()
def _scan(expo=0.2, npoints=10, counters=tuple()) -> BlissScanType: with _scan_context() as scans: scan = setup_globals.loopscan(npoints, expo, setup_globals.difflab6, *counters) scans.append(scan) return scan
[docs] @testing.integration_test def test_bm02_1d(bm02_xrpd_processor, expo=0.2, npoints=10, ascii=False): bm02_xrpd_processor.ascii_export_enabled = ascii bm02_xrpd_processor.integration_options["difflab6"].pop("nbpt_azim", None) _scan(expo, npoints) testing.wait_workflows(raise_on_error=True)
[docs] @testing.integration_test def test_bm02_2d(bm02_xrpd_processor, expo=0.2, npoints=10, ascii=False): bm02_xrpd_processor.integration_options["difflab6"]["nbpt_azim"] = 100 bm02_xrpd_processor.ascii_export_enabled = ascii _scan(expo, npoints) testing.wait_workflows(raise_on_error=True)
[docs] @testing.integration_test def test_bm02_1d_with_cell_subtraction( bm02_xrpd_processor, expo=0.2, npoints=10, ascii=False ): bm02_xrpd_processor.ascii_export_enabled = ascii bm02_xrpd_processor.integration_options["difflab6"].pop("nbpt_azim", None) # Do a first scan to be subtracted scan = _scan(expo, npoints) testing.wait_workflows(raise_on_error=True) scan_metadata = scan.scan_saving bm02_xrpd_processor.enable_empty_cell_subtraction(setup_globals.difflab6) bm02_xrpd_processor.set_cell_pattern_url( sample=scan_metadata.sample_name, dataset=scan_metadata.dataset, scan_number=scan.scan_info["scan_nb"], detector="difflab6", ) _scan(expo, npoints) testing.wait_workflows(raise_on_error=True)
[docs] @testing.integration_test def test_bm02_1d_with_energy(bm02_xrpd_processor, expo=0.2, npoints=10, energy=13): bm02_xrpd_processor.energy = energy bm02_xrpd_processor.integration_options["difflab6"].pop("nbpt_azim", None) _scan(expo, npoints) testing.wait_workflows(raise_on_error=True)
[docs] @testing.integration_test def test_bm02_1d_with_exported_counters( bm02_xrpd_processor: DemoBm02XrpdProcessor, expo=0.2, npoints=10 ): bm02_xrpd_processor.enable_ascii_export() bm02_xrpd_processor.exported_counters = ["diode1"] try: scan = _scan(expo, npoints, counters=(setup_globals.diode1,)) _assert_counter_in_file( bm02_xrpd_processor, scan=scan, lima_name="difflab6", ) finally: bm02_xrpd_processor.disable_ascii_export()
@testing.demo_assert("BM02: check that the counter are in of the ASCII files") def _assert_counter_in_file( bm02_xrpd_processor: DemoBm02XrpdProcessor, scan, lima_name: str, ): future = bm02_xrpd_processor._last_future assert future is not None future.result(timeout=10) output_filenames = [ Path(scan_processed_directory(scan)) / "export" / f"{export_filename_prefix(scan, lima_name)}_f{i:04d}.dat" for i in range(10) ] for i, filename in enumerate(output_filenames): with open(filename, "r") as file: for line in file: if "# diode1 =" in line: break else: raise ValueError(f"diode1 not in {filename}")