From dcde0e783eec11ad2c71a3ca36fdb343bfdde187 Mon Sep 17 00:00:00 2001 From: x12sa Date: Tue, 17 Mar 2026 14:42:52 +0100 Subject: [PATCH] fix angle reversal at start with start angle pecified --- .../plugins/flomni/flomni.py | 43 +++++++++++++------ .../plugins/flomni/gui_tools.py | 11 ++++- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py b/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py index 5fa740e..bec40bf 100644 --- a/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py +++ b/csaxs_bec/bec_ipython_client/plugins/flomni/flomni.py @@ -1559,7 +1559,7 @@ class Flomni( self._write_subtomo_to_scilog(subtomo_number) if start_angle is not None: - print(f"Sub tomo scan with start angle {angle} requested.") + print(f"Sub tomo scan with start angle {start_angle} requested.") if start_angle is None: if subtomo_number == 1: @@ -1582,16 +1582,35 @@ class Flomni( # _tomo_shift_angles (potential global variable) _tomo_shift_angles = 0 - angle_end = start_angle + 180 - angles = np.linspace( - start_angle + _tomo_shift_angles, - angle_end, - num=int(180 / self.tomo_angle_stepsize) + 1, - endpoint=True, - ) - # reverse even sub-tomograms - if not (subtomo_number % 2): - angles = np.flip(angles) + # compute number of projections + N = int(180 / self.tomo_angle_stepsize) + 1 + start = start_angle + _tomo_shift_angles + + if subtomo_number % 2: # odd subtomos → forward direction + # clamp end angle to max allowed + max_allowed_angle = 180.05 + self.tomo_angle_stepsize + proposed_end = start + 180 + angle_end = min(proposed_end, max_allowed_angle) + + angles = np.linspace( + start, + angle_end, + num=N, + endpoint=True, + ) + + else: # even subtomos → reverse direction + # go FROM start_angle down toward 0 + min_allowed_angle = 0 + proposed_end = start - 180 + angle_end = max(proposed_end, min_allowed_angle) + + angles = np.linspace( + start, + angle_end, + num=N, + endpoint=True, + ) for angle in angles: self.progress["subtomo"] = subtomo_number self.progress["subtomo_projection"] = np.where(angles == angle)[0][0] @@ -1866,7 +1885,7 @@ class Flomni( def _write_tomo_scan_number(self, scan_number: int, angle: float, subtomo_number: int) -> None: tomo_scan_numbers_file = os.path.expanduser( - "~/tomography_scannumbers.txt" + "~/data/raw/logs/tomography_scannumbers.txt" ) with open(tomo_scan_numbers_file, "a+") as out_file: # pylint: disable=undefined-variable diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py b/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py index c002ede..ba93df9 100644 --- a/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py +++ b/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py @@ -210,7 +210,16 @@ class flomniGuiTools: main_progress_ring.set_value(progress) subtomo_progress_ring.set_value(subtomo_progress) - text = f"Progress report:\n Tomo type: {self.progress['tomo_type']}\n Projection: {self.progress['projection']:.0f}\n Total projections expected {self.progress['total_projections']}\n Angle: {self.progress['angle']}\n Current subtomo: {self.progress['subtomo']}\n Current projection within subtomo: {self.progress['subtomo_projection']}\n Total projections per subtomo: {int(self.progress['subtomo_total_projections'])}" + text = ( + f"Progress report:\n" + f" Tomo type: {self.progress['tomo_type']}\n" + f" Projection: {self.progress['projection']:.0f}\n" + f" Total projections expected {self.progress['total_projections']:.1f}\n" + f" Angle: {self.progress['angle']:.1f}\n" + f" Current subtomo: {self.progress['subtomo']}\n" + f" Current projection within subtomo: {self.progress['subtomo_projection']}\n" + f" Total projections per subtomo: {int(self.progress['subtomo_total_projections'])}" + ) self.progressbar.set_center_label(text)