CI for csaxs_bec / test (push) Successful in 2m26s
- New shared static helper _equally_spaced_subtomo_angles(), ported from flomni's _subtomo_angle_plan() with the 180/360-degree-range branch removed (OMNY only ever scans 180 degrees). Generalizes the bit-reversal sub-tomogram interleaving to any power-of-two sub-tomogram count; for n_subtomos=2 it reduces to OMNY's original type-1 scheme. - sub_tomo_scan() refactored onto the new helper (gains an n_subtomos param); tomo_type 1 (2 sub-tomograms) is otherwise unchanged. - Adds tomo_type 4 (4 sub-tomograms) and 5 (8 sub-tomograms), gated by the same "wear in OMNY" authorization-code prompt already used for tomo_type 2/3. - Advanced tomo modes (2, 3, 4, 5) are now hidden from tomo_parameters()'s menu unless bec.active_account is in the new _SUPERUSER_ACCOUNTS allowlist; a non-superuser landing on an advanced type is forced back to type 1. _SUPERUSER_ACCOUNTS is left empty -- needs real account codes before anyone can use the advanced modes. - As a side effect of reusing flomni's formula, also fixes a latent bug: the old code derived the inter-sub-tomogram phase offset from the raw configured tomo_angle_stepsize rather than the achievable (int-truncated) step, producing an unevenly-spaced combined grid whenever stepsize didn't divide 180 evenly. - New tests/tests_bec_ipython_client/test_omny_tomo_angles.py: angle-count and no-duplicate-angle checks for n_subtomos in (2, 4, 8), a regression check against the old type-1 formula, an explicit test of the achievable-step fix, a cross-check against flomni's hardcoded N=8 bit-reversal table, and superuser-gating tests (including the full tomo_parameters() interactive flow forcing a non-superuser back to type 1, and a superuser successfully unlocking type 5).