From 1c3cfab2d8461a9101a04e8a7753c14da56889db Mon Sep 17 00:00:00 2001 From: martinappleby Date: Tue, 4 Nov 2025 13:48:46 +0100 Subject: [PATCH] GUI: update rotation_panel data collection parameters from database --- .../panels/rotation_data_collection.py | 74 ++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/gui/src/aaregui/panels/rotation_data_collection.py b/gui/src/aaregui/panels/rotation_data_collection.py index ac607235..f77c832e 100644 --- a/gui/src/aaregui/panels/rotation_data_collection.py +++ b/gui/src/aaregui/panels/rotation_data_collection.py @@ -31,7 +31,15 @@ class RotationDataCollectionPanel(ScanSettingsPanel): default_dtz=default_dtz, default_transmission=default_transmission) + self._sample_cell_parameters = None + self._sample_space_group = None + self._sample_pdb_id = None + self._target_dose = None + self._filename = "" + self._last_sample_id = None + self.sample = None + self._params = None self.__omega = 0 self.__dose_mgy = 0 @@ -99,10 +107,16 @@ class RotationDataCollectionPanel(ScanSettingsPanel): self._layout.addWidget(self.dose, 13, 1, 1, 3) self._layout.addWidget(QLabel("MGy", parent=self), 13, 4) + self.reload_params_button = QPushButton("Reload params from DB") + self.reload_params_button.setToolTip("Reload data collection parameters from database") + self.reload_params_button.clicked.connect(self.reload_parameters) + self._layout.addWidget(self.reload_params_button, 14, 0, 1, 6) + + self.measurement_button = QPushButton("Run rotation") self.measurement_button.setStyleSheet("color: rgb(78, 154, 6);") self.measurement_button.clicked.connect(self.run_measurement) - self._layout.addWidget(self.measurement_button, 14, 0, 1, 6) + self._layout.addWidget(self.measurement_button, 15, 0, 1, 6) @Slot() def run_screening(self): @@ -159,9 +173,67 @@ class RotationDataCollectionPanel(ScanSettingsPanel): beam_area = s.geom.beam_size_mm.x * s.geom.beam_size_mm.y * 1e6 time = self.image_number() * self.image_time_enter.value + self.__dose_mgy = time * s.bl.flux_ph_s / (beam_area * kdose) self.__dose_mgy = time * s.bl.flux_ph_s / (beam_area * kdose) self.dose.setText(f"{(self.__dose_mgy / 1e6):.1f}") + if s.sample is not None: + self._sample = s.sample + self._params = s.sample.aaredb_params if hasattr(s.sample, 'aaredb_params') else None + + if self._last_sample_id != self.sample.db_id: + self.update_data_collection_parameters() @Slot() def update_omega_start(self): self.start_angle.update_value(self.__omega) + + @Slot() + def reload_parameters(self): + temp_id = self._last_sample_id + self._last_sample_id = None + self.update_data_collection_parameters() + self._last_sample_id = temp_id + + + def update_data_collection_parameters(self): + if self._sample is None: + return + + # Update the last sample ID to prevent repeated updates + self._last_sample_id = self._sample.db_id + + # If no parameters exist, we keep the current (default) values + if self._params is None: + return + + updates = { + 'totalrange': (self.total_angle, lambda v: float(v)), + 'oscillation': (self.image_angle, None), + 'exposure': (self.image_time_enter, None), + } + + for param_name, (widget, converter) in updates.items(): + value = getattr(self._params, param_name, None) + if value is not None: + widget.update_value(converter(value) if converter else value) + + if (resolution := getattr(self._params, 'targetresolution', None)) is not None: + res_value = resolution + self.set_high_res(res_value) + self._high_res = res_value + self.high_res_enter.update_value(res_value) + + if (transmission := getattr(self._params, 'transmission', None)) is not None: + transmission_value = transmission #/ 100.0 if transmission > 1.0 else transmission + self._transmission = transmission_value + self.transmission_enter.update_value(transmission_value) + + if (target_res := getattr(self._params, 'targetresolution', None)) is not None: + self._high_res = target_res + + self._sample_space_group = getattr(self._params, 'spacegroupnumber', None) + self._sample_cell_parameters = getattr(self._params, 'cellparameters', None) + self._sample_pdb_id = getattr(self._params, 'pdbid', None) + self._target_dose = getattr(self._params, 'dose', None) + +