From cf3db9fb36c823358cd33f3ba24f94e02c824a6c Mon Sep 17 00:00:00 2001 From: x01dc Date: Wed, 10 Dec 2025 15:29:10 +0100 Subject: [PATCH] tests and fixes --- .../plugins/flomni/flomni.py | 14 +++ .../plugins/flomni/x_ray_eye_align.py | 6 +- csaxs_bec/device_configs/flomni_config.yaml | 6 +- csaxs_bec/devices/omny/xray_epics_gui.py | 109 ++++++------------ 4 files changed, 58 insertions(+), 77 deletions(-) diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py b/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py index 87f3680..1ffeea8 100644 --- a/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py +++ b/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py @@ -1004,6 +1004,20 @@ class FlomniAlignmentMixin: with open(os.path.join(dir_path, "ptychotomoalign_Cy3.txt"), "r") as file: tomo_alignment_fit[1][4] = file.readline() + tomo_alignment_fit[0][0] = gui.flomni.xeyegui.XRayEye.Waveform.fit_x_SineModel.dap_params['amplitude'] + tomo_alignment_fit[0][1] = gui.flomni.xeyegui.XRayEye.Waveform.fit_x_SineModel.dap_params['frequency'] + tomo_alignment_fit[0][2] = gui.flomni.xeyegui.XRayEye.Waveform.fit_x_SineModel.dap_params['shift'] + tomo_alignment_fit[1][0] = gui.flomni.xeyegui.XRayEye.Waveform_0.fit_y_SineModel.dap_params['amplitude'] + tomo_alignment_fit[1][1] = gui.flomni.xeyegui.XRayEye.Waveform_0.fit_y_SineModel.dap_params['frequency'] + tomo_alignment_fit[1][2] = gui.flomni.xeyegui.XRayEye.Waveform_0.fit_y_SineModel.dap_params['shift'] + print("applying vertical default values from mirror calibration, not from fit!") + tomo_alignment_fit[1][0] = 0 + tomo_alignment_fit[1][1] = 0 + tomo_alignment_fit[1][2] = 0 + tomo_alignment_fit[1][3] = 0 + tomo_alignment_fit[1][4] = 0 + + print("New alignment parameters loaded:") print( f"X Amplitude {tomo_alignment_fit[0][0]}, " diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/x_ray_eye_align.py b/csaxs_bec/bec_ipython_client/plugins/flomni/x_ray_eye_align.py index 0f637ed..1344e7a 100644 --- a/csaxs_bec/bec_ipython_client/plugins/flomni/x_ray_eye_align.py +++ b/csaxs_bec/bec_ipython_client/plugins/flomni/x_ray_eye_align.py @@ -80,8 +80,8 @@ class XrayEyeAlign: def update_fov(self, k: int): # self._xray_fov_xy[0] = max(epics_get(f"XOMNYI-XEYE-XWIDTH_X:{k}"), self._xray_fov_xy[0]) # self._xray_fov_xy[1] = max(epics_get(f"XOMNYI-XEYE-YWIDTH_Y:{k}"), self._xray_fov_xy[1]) - self._xray_fov_xy[0] = max(getattr(dev.omny_xray_gui.width_x, f"width_x_{k}").get(), self._xray_fov_xy[0]) - self._xray_fov_xy[1] = max(getattr(dev.omny_xray_gui.width_y, f"width_y_{k}").get(), self._xray_fov_xy[1]) + self._xray_fov_xy[0] = max(getattr(dev.omny_xray_gui, f"width_x_{k}").get(), self._xray_fov_xy[0]) + self._xray_fov_xy[1] = max(getattr(dev.omny_xray_gui, f"width_y_{k}").get(), self._xray_fov_xy[1]) # @property # def movement_buttons_enabled(self): @@ -173,7 +173,7 @@ class XrayEyeAlign: time.sleep(0.1) dev.omny_xray_gui.submit.set(0) #epics_put("XOMNYI-XEYE-SUBMIT:0", 0) - self.alignment_values[k] = getattr(dev.omny_xray_gui.xval_x, f"xval_x_{k}").get() / 2 * self.PIXEL_CALIBRATION # in mm + self.alignment_values[k] = getattr(dev.omny_xray_gui, f"xval_x_{k}").get() / 2 * self.PIXEL_CALIBRATION # in mm #val_x = epics_get(f"XOMNYI-XEYE-XVAL_X:{k}") / 2 * self.PIXEL_CALIBRATION # in mm #self.alignment_values[k] = val_x print(f"Clicked position {k}: x {self.alignment_values[k]}") diff --git a/csaxs_bec/device_configs/flomni_config.yaml b/csaxs_bec/device_configs/flomni_config.yaml index 66b3b39..8e5122f 100644 --- a/csaxs_bec/device_configs/flomni_config.yaml +++ b/csaxs_bec/device_configs/flomni_config.yaml @@ -414,9 +414,9 @@ cam_ids_rgb: deviceConfig: camera_id: 203 bits_per_pixel: 24 - num_rotation_90: 3 + num_rotation_90: 2 transpose: false - force_monochrome: true + force_monochrome: false m_n_colormode: 1 enabled: true onFailure: buffer @@ -450,7 +450,7 @@ omnyfsh: #################### GUI Signals ########################### ############################################################ omny_xray_gui: - description: Gui Epics signals + description: Gui signals deviceClass: csaxs_bec.devices.omny.xray_epics_gui.OMNYXRayAlignGUI deviceConfig: {} enabled: true diff --git a/csaxs_bec/devices/omny/xray_epics_gui.py b/csaxs_bec/devices/omny/xray_epics_gui.py index c9705da..5f783db 100644 --- a/csaxs_bec/devices/omny/xray_epics_gui.py +++ b/csaxs_bec/devices/omny/xray_epics_gui.py @@ -1,79 +1,46 @@ import numpy as np -from ophyd import Component as Cpt, Signal +from ophyd import Component as Cpt, Signal, EpicsSignal from ophyd import Device from ophyd import DynamicDeviceComponent as Dcpt -#from ophyd import EpicsSignal - - class OMNYXRayAlignGUI(Device): -# save_frame = Cpt( -# EpicsSignal, name="save_frame", read_pv="XOMNYI-XEYE-SAVFRAME:0",auto_monitor=True -# ) - update_frame_acqdone = Cpt( - Signal, name="update_frame_acqdone", read_pv="XOMNYI-XEYE-ACQDONE:0",auto_monitor=True - ) - update_frame_acq = Cpt( - Signal, name="update_frame_acq", read_pv="XOMNYI-XEYE-ACQ:0",auto_monitor=True - ) - width_y_dynamic = { - f"width_y_{i}": (Signal, f"XOMNYI-XEYE-YWIDTH_Y:{i}", {"auto_monitor": True}) for i in range(0, 11) - } - width_y = Dcpt(width_y_dynamic) - width_x_dynamic = { - f"width_x_{i}": (Signal, f"XOMNYI-XEYE-XWIDTH_X:{i}", {"auto_monitor": True}) for i in range(0, 11) - } - width_x = Dcpt(width_x_dynamic) - enable_mv_x = Cpt( - Signal, name="enable_mv_x", read_pv="XOMNYI-XEYE-ENAMVX:0",auto_monitor=True - ) - enable_mv_y = Cpt( - Signal, name="enable_mv_y", read_pv="XOMNYI-XEYE-ENAMVY:0",auto_monitor=True - ) - send_message = Cpt( - Signal, name="send_message", read_pv="XOMNYI-XEYE-MESSAGE:0.DESC",auto_monitor=True - ) - sample_name = Cpt( - Signal, name="sample_name", read_pv="XOMNYI-XEYE-SAMPLENAME:0.DESC",auto_monitor=True - ) - angle = Cpt( - Signal, name="angle", read_pv="XOMNYI-XEYE-ANGLE:0",auto_monitor=True - ) - pixel_size = Cpt( - Signal, name="pixel_size", read_pv="XOMNYI-XEYE-PIXELSIZE:0",auto_monitor=True - ) + update_frame_acqdone = Cpt(Signal, value=0) + update_frame_acq = Cpt(Signal, value=0) + enable_mv_x = Cpt(Signal, value=0) + enable_mv_y = Cpt(Signal, value=0) + send_message = Cpt(Signal, value=0) + sample_name = Cpt(Signal, value=0) + angle = Cpt(Signal, value=0) + pixel_size = Cpt(Signal, value=0) submit = Cpt( - Signal, name="submit", read_pv="XOMNYI-XEYE-SUBMIT:0",auto_monitor=True - ) - step = Cpt( - Signal, name="step", read_pv="XOMNYI-XEYE-STEP:0",auto_monitor=True - ) - xval_x_dynamic = { - f"xval_x_{i}": (Signal, f"XOMNYI-XEYE-XVAL_X:{i}", {"auto_monitor": True}) for i in range(0, 11) - } - xval_x = Dcpt(xval_x_dynamic) - yval_y_dynamic = { - f"yval_y_{i}": (Signal, f"XOMNYI-XEYE-YVAL_Y:{i}", {"auto_monitor": True}) for i in range(0, 11) - } - yval_y = Dcpt(yval_y_dynamic) - recbg = Cpt( - Signal, name="recbg", read_pv="XOMNYI-XEYE-RECBG:0",auto_monitor=True - ) - stage_pos_x_dynamic = { - f"stage_pos_x_{i}": (Signal, f"XOMNYI-XEYE-STAGEPOSX:{i}", {"auto_monitor": True}) for i in range(1, 6) - } - stage_pos_x = Dcpt(stage_pos_x_dynamic) - mvx = Cpt( - Signal, name="mvx", read_pv="XOMNYI-XEYE-MVX:0",auto_monitor=True - ) - mvy = Cpt( - Signal, name="mvy", read_pv="XOMNYI-XEYE-MVY:0",auto_monitor=True - ) + EpicsSignal, name="submit", read_pv="XOMNYI-XEYE-SUBMIT:0",auto_monitor=True + ) + step = Cpt(Signal, value=0) + recbg = Cpt(Signal, value=0) + mvx = Cpt(Signal, value=0) + mvy = Cpt(Signal, value=0) + + fit_array = Cpt(Signal, value=np.zeros((3, 10))) + fit_params_x = Cpt(Signal, value=np.zeros((2, 3))) + fit_params_y = Cpt(Signal, value=np.zeros((2, 3))) + + # Generate width_y_0 to width_y_10 + for i in range(11): + locals()[f'width_y_{i}'] = Cpt(Signal, value=0) - - fit_array = Cpt(Signal, name="fit_array", value=np.zeros((3, 10)))#, dtype=np.float32)) - fit_params_x = Cpt(Signal, name="fit_params_x", value=np.zeros((2,3)))#, dtype=np.float32)) - fit_params_y = Cpt(Signal, name="fit_params_y", value=np.zeros((2,3)))#, dtype=np.float32)) - - + # Generate width_x_0 to width_x_10 + for i in range(11): + locals()[f'width_x_{i}'] = Cpt(Signal, value=0) + + # Generate xval_x_0 to xval_x_10 + for i in range(11): + locals()[f'xval_x_{i}'] = Cpt(Signal, value=0) + + # Generate yval_y_0 to yval_y_10 + for i in range(11): + locals()[f'yval_y_{i}'] = Cpt(Signal, value=0) + + # Generate stage_pos_x_1 to stage_pos_x_5 + for i in range(1, 6): + locals()[f'stage_pos_x_{i}'] = Cpt(Signal, value=0)