Source code for ewoksid16a.tasks.fluo.helpers
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 25 13:05:03 2026
@author: blissadm
"""
from ewokscore import Task
from silx.io import h5py_utils
from silx.io.url import DataUrl
DEFAULTS = {
"output_root_group": None,
"fscan_parameters": "instrument/fscan_parameters",
"instrument_positioners_template": "measurement/{}",
"horizontal_motors": ["sy", "spy", "spyp"],
}
[docs]
class PositionersFromFscan(
Task,
input_names=[
"bliss_scan_uri",
"output_root_uri",
"xrf_results_uri",
],
optional_input_names=[
"output_root_group",
"fscan_parameters",
"horizontal_motors",
"instrument_positioners_template",
],
output_names=[
"xrf_results_uri",
"bliss_scan_uri",
"output_root_uri",
"output_root_group",
"positioners",
],
):
[docs]
def run(self):
params = {
**DEFAULTS,
**self.get_input_values(),
}
bliss_scan_uri = DataUrl(params["bliss_scan_uri"])
fscan_parameters = params["fscan_parameters"]
ipt = params["instrument_positioners_template"]
horz_motors = params["horizontal_motors"]
with h5py_utils.open_item(bliss_scan_uri.file_path(), bliss_scan_uri.data_path()) as scan: # type: ignore[reportGeneralTypeIssues]
fp = scan[fscan_parameters]
fastmot = fp["fast_motor"][()].decode()
slowmot = fp["slow_motor"][()].decode()
if ipt.format(fastmot) not in scan:
if ipt.format(f"axis_{fastmot}") in scan:
fastmot = f"axis_{fastmot}"
else:
raise RuntimeError(
f"Can't find {fastmot} nor axis_{fastmot} in positioners!"
)
if ipt.format(slowmot) not in scan:
if ipt.format(f"axis_{slowmot}") in scan:
slowmot = f"axis_{slowmot}"
else:
raise RuntimeError(
f"Can't find {slowmot} nor axis_{slowmot} in positioners!"
)
print(f"{fastmot=} {slowmot=}")
if slowmot in horz_motors:
fastmot, slowmot = slowmot, fastmot
self.outputs.positioners = [slowmot, fastmot]
self.outputs.bliss_scan_uri = params["bliss_scan_uri"]
self.outputs.output_root_uri = params["output_root_uri"]
self.outputs.xrf_results_uri = params["xrf_results_uri"]
self.outputs.output_root_group = params["output_root_group"]