From 954b288f7dcf136f58a76adc74f1a3c32e3f2de7 Mon Sep 17 00:00:00 2001 From: appleb_m Date: Thu, 4 Dec 2025 11:48:49 +0100 Subject: [PATCH] GUI: reformatted total_time label on rotation, raster and smart --- .../aaregui/panels/raster_data_collection.py | 19 +++++++++----- .../panels/rotation_data_collection.py | 17 ++++++++++--- .../aaregui/panels/smart_rotation_panel.py | 25 +++++++++++++++---- 3 files changed, 46 insertions(+), 15 deletions(-) diff --git a/gui/src/aaregui/panels/raster_data_collection.py b/gui/src/aaregui/panels/raster_data_collection.py index 2c36593a..d7ea6baf 100644 --- a/gui/src/aaregui/panels/raster_data_collection.py +++ b/gui/src/aaregui/panels/raster_data_collection.py @@ -116,10 +116,9 @@ class RasterDataCollectionPanel(ScanSettingsPanel): self._layout.addItem(horizontal_spacer, 10, 0, 1, 5) self._layout.addWidget(QLabel("Measurement time", parent=self), 11, 0) - self.total_time = QLabel(f"{self.__total_time}") + self.total_time = QLabel(f"{self.__total_time} min 0 s") self.total_time.setAlignment(Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignVCenter) self._layout.addWidget(self.total_time, 11, 1, 1, 3) - self._layout.addWidget(QLabel("min", parent=self), 11, 4) self.image_time_enter.newValue.connect(self.exp_time_s) self.calculate_total_time() @@ -188,7 +187,7 @@ class RasterDataCollectionPanel(ScanSettingsPanel): self.size_x_label.setText(f"{self.__size_x * self.__n_x:.1f}") self.n_y_label.setText(str(self.__n_y)) self.size_y_label.setText(f"{self.__size_y * self.__n_y:.1f}") - self.total_time.setText(f"{(self.__total_time / 60.0):.2f}") + self.update_total_time_label() try: self.exp_time_s(self.image_time_enter.value) except ValueError as e: @@ -206,14 +205,22 @@ class RasterDataCollectionPanel(ScanSettingsPanel): # Add other raster-specific parameters here as needed ] + def update_total_time_label(self): + mins = int(self.__total_time // 60) + secs = int(round(self.__total_time % 60)) + if secs == 60: + mins += 1 + secs = 0 + self.total_time.setText(f"{mins} min {secs} s") + def calculate_total_time(self): if self.__n_x <= 0 or self.__n_y <= 0 or self.image_time_enter.value < 0: self.__total_time = 0.0 else: - self.__total_time = self.__n_x * self.__n_y * self.image_time_enter.value + self.__total_time = self.__n_x * self.__n_y * self.image_time_enter.value * 1.3 + #30% buffer added # Show minutes - self.total_time.setText(f"{(self.__total_time/60.0):.2f}") - + self.update_total_time_label() @Slot() def _on_evaluate_clicked(self): diff --git a/gui/src/aaregui/panels/rotation_data_collection.py b/gui/src/aaregui/panels/rotation_data_collection.py index faa27a98..9a3121d1 100644 --- a/gui/src/aaregui/panels/rotation_data_collection.py +++ b/gui/src/aaregui/panels/rotation_data_collection.py @@ -100,10 +100,9 @@ class RotationDataCollectionPanel(ScanSettingsPanel): self._layout.addWidget(QLabel("s", parent=self), 12, 4) self._layout.addWidget(QLabel("Total measurement time", parent=self), 13, 0) - self.total_time = QLabel(f"{self.__total_time}") + self.total_time = QLabel(f"{self.__total_time} min 0 s") self.total_time.setAlignment(Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignVCenter) self._layout.addWidget(self.total_time, 13, 1, 1, 3) - self._layout.addWidget(QLabel("min", parent=self), 13, 4) self.total_angle.newValue.connect(self.calculate_measurement_time) self.image_angle.newValue.connect(self.calculate_measurement_time) @@ -174,13 +173,23 @@ class RotationDataCollectionPanel(ScanSettingsPanel): return round(total_angle / image_angle) + def update_total_time_label(self): + mins = int(self.__total_time // 60) + secs = int(round(self.__total_time % 60)) + if secs == 60: + mins += 1 + secs = 0 + self.total_time.setText(f"{mins} min {secs} s") + + def calculate_measurement_time(self): if self.image_angle.value <= 0 or self.total_angle.value <= 0 or self.image_time_enter.value < 0: self.__total_time = 0.0 - self.total_time.setText("0.0") + self.update_total_time_label() return self.__total_time = (self.total_angle.value / self.image_angle.value) * self.image_time_enter.value - self.total_time.setText(f"{self.__total_time / 60:.2f}") + self.update_total_time_label() + @Slot(str) def update_filename(self, filename: str): diff --git a/gui/src/aaregui/panels/smart_rotation_panel.py b/gui/src/aaregui/panels/smart_rotation_panel.py index b454378a..aadaeb03 100644 --- a/gui/src/aaregui/panels/smart_rotation_panel.py +++ b/gui/src/aaregui/panels/smart_rotation_panel.py @@ -36,6 +36,7 @@ class SimpleRotationSettingsPanel(QWidget): self.__omega = 0 self._wilson_b = None self.flux_ph_s = None + self.total_time_s = 0 self.parameters = SimpleScanParameters() self._prev_params = SimpleScanParameters() @@ -174,14 +175,19 @@ class SimpleRotationSettingsPanel(QWidget): self._layout.addWidget(self.calculated_dose_label, 19, 1, 1, 3) self._layout.addWidget(QLabel("MGy", parent=self), 19, 4) + self._layout.addWidget(QLabel("Total measurement time", parent=self), 20, 0) + self.total_time = QLabel(f"{self.total_time_s} min 0 s") + self.total_time.setAlignment(Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignVCenter) + self._layout.addWidget(self.total_time, 20, 1, 1, 3) + # add vertical stretch between detector distance and the run button - self._layout.addItem(QSpacerItem(0, 0, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding), 20, 0, 1, 6) + self._layout.addItem(QSpacerItem(0, 0, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding), 21, 0, 1, 6) # Run rotation button self.run_rotation_button = QPushButton("Run rotation", parent=self) self.run_rotation_button.setStyleSheet("color: rgb(78, 154, 6);") self.run_rotation_button.clicked.connect(self.run_measurement) - self._layout.addWidget(self.run_rotation_button, 21, 0, 1, 6) + self._layout.addWidget(self.run_rotation_button, 22, 0, 1, 6) @Slot(DAQStatusModel) def update_daq_status(self, s: DAQStatusModel): @@ -251,6 +257,14 @@ class SimpleRotationSettingsPanel(QWidget): def update_omega_start(self): self.start_angle_enter.update_value(self.__omega) + def update_total_time_label(self): + mins = int(self.total_time_s // 60) + secs = int(round(self.total_time_s % 60)) + if secs == 60: + mins += 1 + secs = 0 + self.total_time.setText(f"{mins} min {secs} s") + def update_calculated_labels(self): if self.__d is None: return @@ -293,13 +307,14 @@ class SimpleRotationSettingsPanel(QWidget): self.calculated_dose_rate_label.setText(f"{self.dose_rate_MGy_s:.2f}") self.xtal_size_dose_label.setText(f"{self.xtal_size_dose_rate_MGy_s:.2f}") - total_time_s = self.target_dose_MGy / self.dose_rate_MGy_s + self.total_time_s = self.target_dose_MGy / self.dose_rate_MGy_s + self.update_total_time_label() - self.calculated_dose_label.setText(f"{self.xtal_size_dose_rate_MGy_s*total_time_s:.2f}") + self.calculated_dose_label.setText(f"{self.xtal_size_dose_rate_MGy_s*self.total_time_s:.2f}") if image_angle == 0.0: image_angle = 0.001 self.n_images = round(total_angle / image_angle) - self.image_time_s = total_time_s / self.n_images + self.image_time_s = self.total_time_s / self.n_images if self.image_time_s < 0.0011: self.transmission = self.image_time_s / 0.0011 self.image_time_s = 0.0011