GUI: bug fix, if sample is None default values are no longer enforced by the GUI, user can edit values again.

This commit is contained in:
2025-11-07 11:16:33 +01:00
parent f95f92264e
commit 36f8fa9d58
3 changed files with 51 additions and 24 deletions
@@ -23,7 +23,9 @@ class RasterDataCollectionPanel(ScanSettingsPanel):
default_transmission: float = 1.0,
parent=None):
super().__init__(diffraction, raster_mgr.active_grid.dtz, default_transmission, parent)
self._previous_sample_was_none_raster = True
self.__n_x = raster_mgr.active_grid.n_x
self.__n_y = raster_mgr.active_grid.n_y
self.__size_x = raster_mgr.active_grid.grid_size_mm.x * 1000.0
@@ -151,6 +153,20 @@ class RasterDataCollectionPanel(ScanSettingsPanel):
w.setStyleSheet(
"background-color: rgb(255, 255, 255);" if can_edit else "background-color: rgb(240, 240, 240);")
# Only reset raster-specific widgets when transitioning from sample to no-sample
if s.sample is None and not self._previous_sample_was_none_raster:
for w in (self.width_enter, self.height_enter, self.image_time_enter):
try:
if hasattr(w, "saved_value"):
w.saved_value = float("nan")
if hasattr(w, "reset_to_default"):
w.reset_to_default()
except Exception:
pass
self._previous_sample_was_none_raster = True
elif s.sample is not None:
self._previous_sample_was_none_raster = False
def update_grid_scan_size(self):
self.width_enter.update_value(self.__size_x)
self.height_enter.update_value(self.__size_y)
@@ -34,6 +34,7 @@ class RotationDataCollectionPanel(ScanSettingsPanel):
default_transmission=default_transmission)
self._filename = ""
self._previous_sample_was_none_rotation = True
self.__omega = 0
self.__dose_mgy = 0
@@ -169,7 +170,7 @@ class RotationDataCollectionPanel(ScanSettingsPanel):
w.setStyleSheet("background-color: rgb(255, 255, 255);" if can_edit else "background-color: rgb(240, 240, 240);")
if s.sample is None:
if s.sample is None and not self._previous_sample_was_none_rotation:
# 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):
@@ -181,10 +182,9 @@ class RotationDataCollectionPanel(ScanSettingsPanel):
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
self._previous_sample_was_none_rotation = True
elif s.sample is not None:
self._previous_sample_was_none_rotation = False
lambda_a = s.diffraction.wavelength_angstrom
kdose = 2000 / (lambda_a * lambda_a)
+29 -18
View File
@@ -27,6 +27,7 @@ class ScanSettingsPanel(QWidget):
self._sample = None
self._params = None
self._last_sample_id = None
self._previous_sample_was_none = True
self._sample_space_group = None
self._sample_cell_parameters = None
self._sample_pdb_id = None
@@ -88,36 +89,46 @@ class ScanSettingsPanel(QWidget):
self._sample = s.sample
self._params = s.sample.aaredb_params if hasattr(s.sample, 'aaredb_params') else None
# Enable reload button only if sample has parameters
self._previous_sample_was_none = False
self.reload_params_button.setEnabled(self._params is not None)
# Check if this is a new sample - if so, update parameters
if self._last_sample_id != s.sample.db_id:
self.update_data_collection_parameters()
else:
if not self._previous_sample_was_none:
logger.info("Sample cleared, resetting parameters to defaults")
self._reset_to_defaults()
self._previous_sample_was_none = True # Mark that sample is now None
self._sample = None
self._params = None
self._last_sample_id = None
self.reload_params_button.setEnabled(False)
try:
# Reset high-resolution dependent defaults
self._dtz = float(self.dtz_enter.get_default())
self._transmission = float(self.transmission_enter.get_default())
self._high_res = float(self.high_res_enter.get_default())
except Exception:
pass
def _reset_to_defaults(self):
"""Reset all parameters to their defaults. Only called when sample transitions to None."""
try:
# Reset high-resolution dependent defaults
self._dtz = float(self.dtz_enter.get_default())
self._transmission = float(self.transmission_enter.get_default())
self._high_res = float(self.high_res_enter.get_default())
except Exception:
pass
# Force-update to defaults
if hasattr(self.dtz_enter, "saved_value"):
self.dtz_enter.saved_value = float("nan")
if hasattr(self.transmission_enter, "saved_value"):
self.transmission_enter.saved_value = float("nan")
if hasattr(self.high_res_enter, "saved_value"):
self.high_res_enter.saved_value = float("nan")
# Force-update to defaults (invalidate saved values)
if hasattr(self.dtz_enter, "saved_value"):
self.dtz_enter.saved_value = float("nan")
if hasattr(self.transmission_enter, "saved_value"):
self.transmission_enter.saved_value = float("nan")
if hasattr(self.high_res_enter, "saved_value"):
self.high_res_enter.saved_value = float("nan")
# Apply defaults
self.dtz_enter.reset_to_default()
self.transmission_enter.reset_to_default()
self.high_res_enter.reset_to_default()
# Apply defaults shown in the controls
self.dtz_enter.reset_to_default()
self.transmission_enter.reset_to_default()
self.high_res_enter.reset_to_default()
@Slot(float)
def set_dtz(self, v: float):