feat(flomni): add 360° tomo range and single-point acquire mode plus few fixes #228

Merged
holler merged 2 commits from feat/flomni360 into main 2026-06-20 14:03:05 +02:00

2 Commits

Author SHA1 Message Date
x12sa 3f5db26db6 fix(flomni): correct angular-step labeling, wire manual_shift_y, validate frames_per_trigger
CI for csaxs_bec / test (push) Successful in 1m32s
CI for csaxs_bec / test (pull_request) Successful in 1m31s
Fix tomo_parameters() printing the per-sub-tomogram angular step
(self.tomo_angle_stepsize) while labeling it as the final tomogram's
step. At 180° / 2400 total projections this printed 0.6° instead of
the actual combined-tomogram resolution of 0.075°. Both the static
printout and the interactive editor for tomo_type 1 now print and
correctly label both numbers, with explicit parentheses around every
(tomo_angle_range / tomo_angle_stepsize) * 8 expression to remove any
ambiguity. tomo_type 2/3 were already correctly labeled and are
unchanged.

Wire manual_shift_y into sum_offset_y in both tomo_scan_projection
and tomo_acquire_at_angle; it was previously defined and shown in
tomo_parameters() but never applied anywhere. Fix its printed unit
from <mm> to <um>, matching the value it actually holds.

Validate frames_per_trigger on assignment: must be a positive
integer (rejects 0, negative, float, and bool).

Set bec.builtin_actors.scan_interlock (trigger_setting=restart_scan,
enabled=True) at the start of tomo_scan.

Reset estimated_remaining_time at the start of a new tomo_scan, and
add estimated_finish_time (wall-clock projected completion,
stored/reset alongside it). Previously estimated_remaining_time was
never reset between scans, so the progress GUI could display a
leftover estimate from a prior run while the client-side text
printout correctly showed N/A (gated until projection 10).

Also includes: guard tomo_parameters() so stitch_x/stitch_y are
forced to 0 and cannot be set while single_point_instead_of_fermat_scan
is enabled, since stitching is not supported in that mode.
2026-06-20 13:27:08 +02:00
x12sa dc64638315 feat(flomni): add 360° tomo range and single-point acquire mode
Add optional full-circle (0-360°, inclusive) angular sweep for
tomo_type 1 (equally spaced sub-tomograms), selectable via the new
tomo_angle_range property (180 default, or 360). Fixes the
_tomo_scan_at_angle gate, which previously hardcoded a 180.05° cutoff
and would silently drop any projection beyond 180° without error.

Add an alternative acquisition mode for each projection angle:
tomo_acquire_at_angle moves fsamroy and the alignment-corrected
rtx/rty/rtz position (same offset logic as tomo_scan_projection, no
stitching), runs the existing laser-tracker checks and
move_samx_to_scan_region, then calls scans.acquire instead of
scans.flomni_fermat_scan. Selectable per scan via the new
single_point_instead_of_fermat_scan flag, dispatched from
_at_each_angle, so it applies independently of tomo_type and
tomo_angle_range.

Add frames_per_trigger as a persistent property, used by both
scans.flomni_fermat_scan (already supported it) and the new
scans.acquire call, for burst acquisition.

Surface all three new settings in tomo_parameters()'s printout and
interactive editor. Update write_pdf_report's projection-count
estimate to scale with tomo_angle_range instead of a hardcoded 180.

tomo_alignment_scan and tomo_type 2/3 angle generation remain
unchanged (still 0-180°), as the new range option only applies to
tomo_type 1.
2026-06-19 16:02:23 +02:00