DAQ/GUI: added jfjoch_status to daq for progress bar in GUI

This commit is contained in:
2025-12-02 13:34:23 +01:00
parent 4d068a49f9
commit 2142097ce6
4 changed files with 39 additions and 3 deletions
+1
View File
@@ -714,6 +714,7 @@ class DAQStatusModel(BaseModel):
sample: SampleShortInfo | None = None
session: SessionStatus
box: BoundingBoxModel | None = None
jfjoch_status: BrokerStatus | None = None
last_best_res: float | None = None
last_best_b_factor: float | None = None
crystal_size: CrystalSize = CrystalSize(x=0,y=0,z=0)
+3 -1
View File
@@ -1298,6 +1298,7 @@ class AareDAQ:
spreadsheet_params, file_prefix = self.spreadsheet_params()
logger.debug(f"spreadsheet_params: {spreadsheet_params}")
smart_params = self.__cfg.auto_params
logger.debug(f"smart_params: {smart_params}")
default_params = SimpleScanParameters(exp_time_s=0.04, dtz=110, incr_omega_deg=0.2)
#if file_prefix is not None:
# default_params.file_prefix = file_prefix
@@ -1540,7 +1541,7 @@ class AareDAQ:
@property
def status(self) -> DAQStatusModel:
# session should be set by FastAPI server
# session is initialised here and set by FastAPI server
return DAQStatusModel(
state=self.state,
busy=self.busy,
@@ -1550,6 +1551,7 @@ class AareDAQ:
session=SessionStatus(),
diffraction=self.diffraction_geometry,
box=self.__saved_box,
jfjoch_status = self.__jfjoch.status(),
last_best_res = self.__cfg.last_best_res,
last_best_b_factor = self.__cfg.last_best_b_factor,
crystal_size = self.__cfg.crystal_size
+4
View File
@@ -146,6 +146,10 @@ class JFJochWrapper:
self.__api.wait_till_done_post_with_http_info(timeout=math.ceil(timeout))
return self.__api.result_scan_get()
def status(self) -> jfjoch_client.models.BrokerStatus:
l = self.__api.status_get()
return l
def detector(self) -> jfjoch_client.models.DetectorListElement:
l = self.__api.config_select_detector_get()
@@ -6,6 +6,7 @@ from PySide6.QtWidgets import (
QGridLayout,
QPushButton,
QWidget,
QProgressBar, QMessageBox,
)
from aaredaqlib.diffraction_geometry import DiffractionGeometry
@@ -21,6 +22,9 @@ from aaregui.panels.smart_rotation_panel import SimpleRotationSettingsPanel
from aaregui.scan_logic.raster_grid_manager import RasterGridManager
from aaregui.widgets.title_label import TitleLabel
from aaredaqlib.logger_config import setup_logger
logger = setup_logger("aareGUI")
class DataCollectionSettings(QFrame):
cancel = Signal()
@@ -57,6 +61,11 @@ class DataCollectionSettings(QFrame):
v_layout.addWidget(self.__tab_widget)
v_layout.addStretch()
self.progress_bar = QProgressBar(self)
self.progress_bar.setRange(0, 100)
self.progress_bar.setStyleSheet("background-color: rgb(255, 255, 255);")
v_layout.addWidget(self.progress_bar)
abort_button = QPushButton("Abort measurement", parent=self)
abort_button.setStyleSheet("color: rgb(164, 0, 0);")
abort_button.clicked.connect(self.cancel_button_clicked)
@@ -74,8 +83,6 @@ class DataCollectionSettings(QFrame):
self.__tab_widget.currentChanged.connect(self._on_tab_changed)
# ... existing code ...
@Slot()
def switch_to_raster(self):
self.__tab_widget.setCurrentIndex(0)
@@ -93,6 +100,28 @@ class DataCollectionSettings(QFrame):
self.__sample_id = s.sample.db_id
self.__tab_widget.setCurrentIndex(0)
jfjoch_status = s.jfjoch_status
progress = getattr(jfjoch_status, "progress", None)
if progress:
if not self.progress_bar.isVisible():
self.progress_bar.setVisible(True)
try:
p = int(max(0, min(100, round(100*progress, 2))))
self.progress_bar.setValue(p)
except Exception as e:
logger.error(f"Failed to update progress bar: {e}")
else:
self.progress_bar.setVisible(False)
#states are Enum: "Idle" "Waiting" "Busy" "Error" "Not connected"
#message serverity is Enum: "success" "info" "warning" "error"
#messagge is string
#progress is float from 0 to 1
if jfjoch_status.state == "Error":
QMessageBox.critical(self, "Error", jfjoch_status.message)
@Slot(int)
def _on_tab_changed(self, idx: int):
# 0: Raster, 1: Rotation (incl. screening), 2: Simple (rotation wrapper), 3: XRF (ignore)