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:
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user