Source code for ewoksid14.tests.tasks.test_hdf5_to_spec2

from typing import List

import h5py
import numpy

from ...tasks.hdf5_to_spec2 import Hdf5ToSpec2


[docs] def test_hdf5_to_spec2(tmp_path): raw_filename = tmp_path / "RAW_DATA" / "bliss_dataset.h5" raw_filename.parent.mkdir() raw_output_filename = tmp_path / "PROCESSED_DATA" / "bliss_dataset.mca" filename = str(raw_filename) output_filename = str(raw_output_filename) time_iso = "2025-08-27T13:53:01.817551" time_spec = "Wed Aug 27 13:53:01 2025" nscans = 3 nchannels = 10 with h5py.File(filename, "w") as nxroot: for scan in range(1, nscans + 1): nxroot[f"/{scan}.1/start_time"] = time_iso nxroot[f"/{scan}.1/title"] = "NISscan" nxroot[f"/{scan}.1/measurement/diode1"] = numpy.full((nchannels,), scan) nxroot[f"/{scan}.1/end_time"] = time_iso def check_scan_content(scans: List[int], scan_acq_times: List[float]) -> List[str]: with open(task.outputs["output_filename"], "r") as f: lines = [s.rstrip() for s in f.readlines()] expected = [f"#F {output_filename}", lines[1], ""] if not scan_acq_times: scan_acq_times = [0] * len(scans) for scan, acq_time in zip(scans, scan_acq_times): expected.append(f"#S {scan} NISscan") expected.append(f"#D {time_spec}") expected.append(f"#T {acq_time} (Seconds)") expected.append("#L diode1 Seconds") for _ in range(nchannels): expected.append(f"{scan} {acq_time}") expected.append("#C") expected.append("") assert lines == expected all_scans_numbers = list(range(1, nscans + 1)) # Test fresh file inputs = { "filename": filename, "output_filename": output_filename, "scan_numbers": all_scans_numbers[:-1], } task = Hdf5ToSpec2(inputs=inputs) task.run() check_scan_content(all_scans_numbers[:-1], []) # Test no-duplicates and append inputs = {"filename": filename, "output_filename": output_filename} task = Hdf5ToSpec2(inputs=inputs) task.run() check_scan_content(all_scans_numbers, []) # Test scan_acq_times raw_output_filename.unlink() inputs = { "filename": filename, "output_filename": output_filename, "scan_acq_times": all_scans_numbers, } task = Hdf5ToSpec2(inputs=inputs) task.run() check_scan_content(all_scans_numbers, all_scans_numbers) # Test scan_acq_times ignored scan_acq_times = [] with h5py.File(filename, "a") as nxroot: for scan in range(1, nscans + 1): acq_time = scan / 10 scan_acq_times.append(acq_time) nxroot[f"/{scan}.1/measurement/timer"] = numpy.full((nchannels,), acq_time) raw_output_filename.unlink() inputs = { "filename": filename, "output_filename": output_filename, "scan_acq_times": all_scans_numbers, } task = Hdf5ToSpec2(inputs=inputs) task.run() check_scan_content(all_scans_numbers, scan_acq_times)