changes from the beamline

This commit is contained in:
x12sa
2026-07-20 13:45:47 +02:00
committed by appel_c
parent a7bd4a220b
commit 8f38053aeb
4 changed files with 34 additions and 7 deletions
@@ -270,10 +270,10 @@ class ROIMappingBox(QGroupBox):
layout.setColumnStretch(2, 1)
# An unknown calibration must not silently become a one-motor-unit-per-pixel scan.
self.camera_scale_pixel_x = spinbox(value=0.0, single_step=0.1, parent=self)
self.camera_scale_pixel_x = spinbox(value=0.0, single_step=0.1, decimals=6, parent=self)
self.offset_cam_xray_x = spinbox(value=0.0, single_step=0.1, parent=self)
self.direction_x = direction_combo(self)
self.camera_scale_pixel_y = spinbox(value=0.0, single_step=0.1, parent=self)
self.camera_scale_pixel_y = spinbox(value=0.0, single_step=0.1, decimals=6, parent=self)
self.offset_cam_xray_y = spinbox(value=0.0, single_step=0.1, parent=self)
self.direction_y = direction_combo(self)
self.mapping_lock_toggle = ToggleSwitch(self, checked=False)
@@ -13,6 +13,7 @@ from typing import Any, Literal
from uuid import uuid4
from bec_lib import bec_logger
from bec_lib.endpoints import MessageEndpoints
from bec_lib.messages import VariableMessage
from bec_qthemes import material_icon
from bec_widgets.utils.bec_widget import BECWidget
@@ -115,6 +116,11 @@ class SAXSWidget(BECWidget, QWidget):
self._sync_mapping_reference_to_display()
self._refresh_crosshair_pin_if_enabled()
# Connect to ScanStatusUpdates
self.bec_dispatcher.connect_slot(
slot=self._deactivate_toggle_live_mode, topics = MessageEndpoints.scan_status()
)
# ------------------------------------------------------------------
# UI construction
# ------------------------------------------------------------------
@@ -284,8 +290,22 @@ class SAXSWidget(BECWidget, QWidget):
self._clear_reference_crosshair_pin()
# self.image.toggle_crosshair(False)
@SafeSlot(dict,dict)
def _deactivate_toggle_live_mode(self, content, _metadata) -> None:
status = content.get("status", "")
if status == "open":
enabled = False
else:
enabled = True
toggle_cam_action = self.image.toolbar.components.get_action("toggle_cam")
if toggle_cam_action is not None:
toggle_cam_action.action.setEnabled(enabled)
def _toggle_camera_live_mode(self, enabled: bool) -> None:
# If enabled, set the camera to live mode, if disabled, stop the live mode.
dev_manager = self.bec_dispatcher.client.device_manager
if dev_manager.scan_info.msg is not None and dev_manager.scan_info.msg.status in ["open"]:
return # Ignore commands if scan is running
device_name = getattr(self.image, "device", "")
if device_name and device_name in self.dev:
device = self.dev[device_name]
+2 -2
View File
@@ -13,8 +13,8 @@ eiger_9:
description: Eiger 9M detector
deviceClass: csaxs_bec.devices.jungfraujoch.eiger_9m.Eiger9M
deviceConfig:
detector_distance: 2200
beam_center: [870, 1203]
detector_distance: 6975.225
beam_center: [1149.71, 1450.89]
onFailure: raise
enabled: True
readoutPriority: async
+10 -3
View File
@@ -85,7 +85,7 @@ class Eiger(PSIDeviceBase):
**kwargs: Additional keyword arguments.
"""
USER_ACCESS = ["set_detector_distance", "set_beam_center"]
USER_ACCESS = ["set_detector_distance", "set_beam_center", "print_detector_distance_and_center"]
file_event = Cpt(FileEventSignal, name="file_event")
preview_image = Cpt(PreviewSignal, name="preview_image", ndim=2)
@@ -160,6 +160,10 @@ class Eiger(PSIDeviceBase):
"""
self.detector_distance = distance
def print_detector_distance_and_center(self):
print(f"Detector Distance : {self.detector_distance}")
print(f"Beam cetner position (x,y) : {self.beam_center}")
# pylint: disable=missing-function-docstring
@property
def beam_center(self) -> tuple[float, float]:
@@ -273,6 +277,9 @@ class Eiger(PSIDeviceBase):
logger.info(f"Device {self.name} on_stage called.")
start_time = time.time()
self.scan_parameters = fetch_scan_info(self.scan_info)
if self.jfj_client.detector_state != DetectorState.IDLE:
self.jfj_client.stop(request_timeout=0.5)
self.jfj_client.wait_for_idle(timeout=5)
# TODO Reactivate
try:
@@ -323,8 +330,8 @@ class Eiger(PSIDeviceBase):
image_time_us=int(exp_time * 1e6),
ntrigger=self._num_triggers,
file_prefix=path,
beam_x_pxl=int(self._beam_center[0]),
beam_y_pxl=int(self._beam_center[1]),
beam_x_pxl=float(self._beam_center[0]),
beam_y_pxl=float(self._beam_center[1]),
detector_distance_mm=self.detector_distance,
incident_energy_ke_v=self._incident_energy,
)