From 306b93cc0754936770eaf6d4d0f6e9f0eff4d170 Mon Sep 17 00:00:00 2001 From: x01dc Date: Sat, 19 Sep 2026 10:07:06 +0200 Subject: [PATCH] docs(omny): note unconditional 0-deg reference projection follow-up Not implemented for omny yet -- captures the same feature just added to Flomni/LamNI so the intent isn't lost. Omny still needs its own retraction- capability check and tomo_scan() entry point located before this can land. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_0132KBoxsovfcMNRGJhS1Pbw --- .../TODO_zero_deg_reference_projection.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 csaxs_bec/bec_ipython_client/plugins/omny/AI_docs/TODO_zero_deg_reference_projection.md diff --git a/csaxs_bec/bec_ipython_client/plugins/omny/AI_docs/TODO_zero_deg_reference_projection.md b/csaxs_bec/bec_ipython_client/plugins/omny/AI_docs/TODO_zero_deg_reference_projection.md new file mode 100644 index 00000000..da4c4e6e --- /dev/null +++ b/csaxs_bec/bec_ipython_client/plugins/omny/AI_docs/TODO_zero_deg_reference_projection.md @@ -0,0 +1,40 @@ +# TODO: unconditional 0-degree reference projection at tomogram start + +Status: **not implemented for omny.** Discussed 2026-09-19; implemented for +Flomni and LamNI the same day (see their `tomo_scan()` in `flomni.py`/ +`lamni.py` — search for "Unconditional single 0-degree reference +projection"). + +## What was implemented elsewhere + +At the very start of a new tomogram (not on resume), both Flomni and LamNI +now unconditionally take one real 0-degree projection — `self._tomo_scan_at_angle(0, 1)` +— independent of the `zero_deg_reference_at_each_subtomo` / +`golden_projections_at_0_deg_for_damage_estimation` flags. It's real data +(included in reconstruction, logged under `subtomo_number=1`), not a +reference-only/flat-field frame — this was an explicit choice: the point is +an immediate radiation-damage baseline that exists even when the periodic +damage-estimation flags are off, not a normalization frame. + +Flomni additionally takes 10 flat-field/empty frames at 0° before this +(`collect_empty_frames()` — sample retracted out of the beam via `fsamx` +shifted by `fovx/2`, excluded from reconstruction). **LamNI does not get an +equivalent** — confirmed 2026-09-19 that LamNI has no way to retract the +sample out of the beam at all, so only the 0-degree projection was added +there, no flat-field step. + +## What's needed for omny + +1. **Confirm whether omny can retract the sample out of the beam at all** + (same open question as LamNI, not yet checked for omny specifically) — + determines whether an empty-frames/flat-field step is even possible here, + or whether omny should only get the 0-degree-projection part like LamNI. +2. Locate omny's `tomo_scan()` equivalent (or whatever its tomogram-start + entry point is) and its own `_tomo_scan_at_angle`-equivalent method, and + add the same unconditional call in its "new scan" branch, following the + same placement pattern used in `flomni.py`/`lamni.py`. +3. Decide the logged `subtomo_number` / whether omny's tomo-type numbering + matches flomni/lamni's convention closely enough to reuse `1` directly. + +Not investigated yet — this note exists so the intent isn't lost, not +because the omny-side work has been scoped in detail.