diff --git a/gui/src/aaregui/panels/raster_data_collection.py b/gui/src/aaregui/panels/raster_data_collection.py index c91ef9c5..e8c05eeb 100644 --- a/gui/src/aaregui/panels/raster_data_collection.py +++ b/gui/src/aaregui/panels/raster_data_collection.py @@ -3,6 +3,7 @@ from PySide6.QtWidgets import QWidget, QGridLayout, QLabel, QSizePolicy, QSpacer QComboBox, QSlider from aaredaqlib.diffraction_geometry import DiffractionGeometry +from aaredaqlib.models import DAQStatusModel from aaregui.panels.scan_settings_panel import ScanSettingsPanel from aaregui.scan_logic.raster_grid_manager import RasterGridManager, RasterGridMetric from aaregui.widgets.number_line_edit import NumberLineEdit @@ -141,6 +142,15 @@ class RasterDataCollectionPanel(ScanSettingsPanel): self.__n_y = n_y self.update_grid_scan_size() + @Slot(DAQStatusModel) + def update_daq_status(self, s: DAQStatusModel): + super().update_daq_status(s) + can_edit = getattr(self, "_can_edit_params", False) + for w in (self.width_enter, self.height_enter, self.image_time_enter): + w.setReadOnly(not can_edit) + w.setStyleSheet( + "background-color: rgb(255, 255, 255);" if can_edit else "background-color: rgb(240, 240, 240);") + def update_grid_scan_size(self): self.width_enter.update_value(self.__size_x) self.height_enter.update_value(self.__size_y) diff --git a/gui/src/aaregui/panels/rotation_data_collection.py b/gui/src/aaregui/panels/rotation_data_collection.py index 4f4195f5..9c6de607 100644 --- a/gui/src/aaregui/panels/rotation_data_collection.py +++ b/gui/src/aaregui/panels/rotation_data_collection.py @@ -4,11 +4,13 @@ from PySide6.QtCore import Slot, Signal, Qt from PySide6.QtWidgets import QLabel, QComboBox, QPushButton from aaredaqlib.diffraction_geometry import DiffractionGeometry +from aaredaqlib.logger_config import setup_logger from aaredaqlib.models import DAQStatusModel from aaredaqlib.rotation_scan import RotationScanRequest from aaregui.panels.scan_settings_panel import ScanSettingsPanel from aaregui.widgets.number_line_edit import NumberLineEdit +logger = setup_logger("aareGUI") def add_screening_to_path(path): p = Path(path) @@ -159,6 +161,31 @@ class RotationDataCollectionPanel(ScanSettingsPanel): def update_daq_status(self, s: DAQStatusModel): super().update_daq_status(s) self.__omega = s.geom.omega_deg + + can_edit = getattr(self, "_can_edit_params", False) + for w in (self.start_angle, self.screening_image_angle, self.screening_image_time_enter, + self.total_angle, self.image_angle, self.image_time_enter): + w.setReadOnly(not can_edit) + w.setStyleSheet("background-color: rgb(255, 255, 255);" if can_edit else "background-color: rgb(240, 240, 240);") + + + if s.sample is None: + # Reset rotation-specific widgets to their defaults + for w in (self.start_angle, self.screening_image_angle, self.screening_image_time_enter, + self.total_angle, self.image_angle, self.image_time_enter): + try: + if hasattr(w, "saved_value"): + w.saved_value = float("nan") + # NumberLineEdit keeps its default in .default + w.update_value(w.default if hasattr(w, "default") else 0.0) + except Exception: + logger.error(f"Failed to reset {w} to default.", exc_info=True) + pass + # Reset dose label + self.__dose_mgy = 0 + self.dose.setText("0.0") + return + lambda_a = s.diffraction.wavelength_angstrom kdose = 2000 / (lambda_a * lambda_a) beam_area = s.geom.beam_size_mm.x * s.geom.beam_size_mm.y * 1e6