changes from the beamline
This commit is contained in:
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user