diff --git a/csaxs_bec/bec_widgets/widgets/client.py b/csaxs_bec/bec_widgets/widgets/client.py index ec2d37c..4f9cc32 100644 --- a/csaxs_bec/bec_widgets/widgets/client.py +++ b/csaxs_bec/bec_widgets/widgets/client.py @@ -83,20 +83,6 @@ class XRayEye(RPCBase): Return the currently active ROI, or None if no ROI is active. """ - @property - @rpc_call - def enable_live_view(self): - """ - Get or set the live view enabled state. - """ - - @enable_live_view.setter - @rpc_call - def enable_live_view(self): - """ - Get or set the live view enabled state. - """ - @property @rpc_call def user_message(self): @@ -139,6 +125,12 @@ class XRayEye(RPCBase): None """ + @rpc_call + def switch_tab(self, tab: "str"): + """ + None + """ + class XRayEye2DControl(RPCBase): @rpc_call diff --git a/csaxs_bec/bec_widgets/widgets/xray_eye/x_ray_eye.py b/csaxs_bec/bec_widgets/widgets/xray_eye/x_ray_eye.py index 4479a8f..47b56e7 100644 --- a/csaxs_bec/bec_widgets/widgets/xray_eye/x_ray_eye.py +++ b/csaxs_bec/bec_widgets/widgets/xray_eye/x_ray_eye.py @@ -127,8 +127,8 @@ class XRayEye2DControl(BECWidget, QWidget): class XRayEye(BECWidget, QWidget): - USER_ACCESS = ["active_roi", "enable_live_view", "enable_live_view.setter", "user_message", "user_message.setter", - "sample_name", "sample_name.setter", "enable_move_buttons", "enable_move_buttons.setter"] + USER_ACCESS = ["active_roi", "user_message", "user_message.setter", + "sample_name", "sample_name.setter", "enable_move_buttons", "enable_move_buttons.setter","switch_tab"] PLUGIN = True def __init__(self, parent=None, **kwargs): @@ -259,9 +259,19 @@ class XRayEye(BECWidget, QWidget): self.fit_tab = QWidget(parent=self) self.fit_layout = QVBoxLayout(self.fit_tab) - self.waveform = Waveform(parent=self.fit_tab) - self.waveform.dap_params_update.connect(self.on_dap_params) - self.fit_layout.addWidget(self.waveform) + self.waveform_x = Waveform(parent=self.fit_tab) + self.waveform_x.dap_params_update.connect(self.on_dap_params) + self.waveform_y = Waveform(parent=self.fit_tab) + self.waveform_y.dap_params_update.connect(self.on_dap_params) + + for wave in (self.waveform_x,self.waveform_y): + wave.x_label = "Angle (deg)" + wave.x_grid = True + wave.y_grid = True + wave.enable_toolbar = False + + self.fit_layout.addWidget(self.waveform_x) + self.fit_layout.addWidget(self.waveform_y) self.tab_widget.addTab(self.fit_tab, "Fit") def _make_connections(self): @@ -331,6 +341,14 @@ class XRayEye(BECWidget, QWidget): ################################################################################ # Slots ported from the original OmnyAlignment, can be adjusted as needed ################################################################################ + + @SafeSlot(str) + def switch_tab(self,tab:str): + if tab == "fit": + self.tab_widget.setCurrentIndex(1) + else: + self.tab_widget.setCurrentIndex(0) + @SafeSlot() def get_roi_coordinates(self) -> dict | None: @@ -417,16 +435,15 @@ class XRayEye(BECWidget, QWidget): @SafeSlot(dict,dict) def on_dap_params(self,data,meta): - print('on dap params') print(f"data: {data}") print(f"meta: {meta}") - self.blockSignals(True) - amplitude = data.get("amplitude") - frequency = data.get("frequency") - shift = data.get("shift") - dev.omny_xray_gui.fit_params.put(data) - self.waveform.blockSignals(False) - + self.bec_dispatcher.disconnect_slot(self.device_updates, MessageEndpoints.device_readback("omny_xray_gui")) + curve_id = meta.get("curve_id") + if curve_id == "fit-x-SineModel": + dev.omny_xray_gui.fit_params_x.put(data) + else: + dev.omny_xray_gui.fit_params_y.put(data) + self.bec_dispatcher.connect_slot(self.device_updates, MessageEndpoints.device_readback("omny_xray_gui")) @SafeSlot(bool, bool) def on_tomo_angle_readback(self, data: dict, meta: dict): @@ -453,10 +470,11 @@ class XRayEye(BECWidget, QWidget): self.on_motors_enable(bool(enable_x_motor), bool(enable_y_motor)) #TODO hook the waveform plotting logic - fov_array = signals.get("omny_xray_gui_fov_array").get('value') - print(f"fov_array: {fov_array}") - self.waveform.clear_all() - self.waveform.plot(x=fov_array[0],y=fov_array[1], label="fov_array",dap="SineModel",dap_oversample=5) + fit_array = signals.get("omny_xray_gui_fit_array").get('value') + self.waveform_x.clear_all() + self.waveform_y.clear_all() + self.waveform_x.plot(x=fit_array[0],y=fit_array[1], label="fit-x",dap="SineModel",dap_oversample=5) + self.waveform_y.plot(x=fit_array[0],y=fit_array[2], label="fit-y",dap="SineModel",dap_oversample=5) # Signals from epics gui device # send message diff --git a/csaxs_bec/devices/omny/xray_epics_gui.py b/csaxs_bec/devices/omny/xray_epics_gui.py index be0777b..94290c4 100644 --- a/csaxs_bec/devices/omny/xray_epics_gui.py +++ b/csaxs_bec/devices/omny/xray_epics_gui.py @@ -71,8 +71,10 @@ class OMNYXRayEpicsGUI(Device): mvy = Cpt( EpicsSignal, name="mvy", read_pv="XOMNYI-XEYE-MVY:0",auto_monitor=True ) - fov_array = Cpt(Signal, name="fov_array", value=np.zeros((3, 10)))#, dtype=np.float32)) - fit_params = Cpt(Signal, name="fit_params", value=np.zeros((2,3)))#, dtype=np.float32)) - + + + 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))