Expose burst acquisition in the app; refresh scan_format acquisition docs
Wires the burst_mode flag through QtScanController to ScanEngine and adds a checkbox to the scan panel. The setting persists via ScanDefaults like the other scan fields, defaulting to off — per-row acquisition stays the default path until burst mode has run on the rig and the gate-off preflight has settled which TRIGOUT value idles the pin low. scan_format.md — the acquisition settings table had drifted from the code it claimed to describe: it attributed the settings to sc3_aui_app.py (they moved to core/scope_sras.py in the Phase 2 extraction), listed a 1.24 V trigger level and 0 % offset where the code sets 0.500 V and HORizontal:POSition 30, and did not mention the logic-AND scan trigger at all. Corrected, pointed at the module that actually owns them, and noted that none of it affects byte layout — only where the acoustic packet lands inside a frame. Added an acquisition-paths section: the two paths write byte-identical files and the choice is a runtime flag that is not recorded in the file, so a reader never needs to care which produced it. Documents where row boundaries come from in a burst and that either path squares rows up to n_frames. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+41
-11
@@ -183,18 +183,48 @@ using that angle's `x_start` from the Per-Angle Geometry Table (not
|
||||
|
||||
---
|
||||
|
||||
## Acquisition Settings (fixed by sc3_aui_app.py)
|
||||
## Acquisition Settings (fixed by core/scope_sras.py)
|
||||
|
||||
| Parameter | Value |
|
||||
|-----------------------|------------------------------|
|
||||
| Oscilloscope trigger | CH2, rising edge, 1.24 V |
|
||||
| Trigger offset | 0 % (trigger at left edge) |
|
||||
| Sample rate | 6.25 GS/s (160 ps/sample) |
|
||||
| Channels recorded | CH1, CH3, CH4 |
|
||||
| Stage X velocity | 100 mm/s |
|
||||
| Stage X acceleration | 1500 mm/s² |
|
||||
| Stage X trigger out | Logic-high at max velocity |
|
||||
| Acquisition mode | FastFrame, Normal trigger |
|
||||
| Parameter | Value |
|
||||
|-----------------------|------------------------------------------|
|
||||
| Setup trigger | CH2, rising edge, 0.500 V (`TRIG_LEVEL_V`) |
|
||||
| Scan trigger | Logic AND, CH2 HIGH ∧ CH3 HIGH, 0.500 V |
|
||||
| Horizontal position | 30 (`HORizontal:POSition`) |
|
||||
| Sample rate | 6.25 GS/s (160 ps/sample) |
|
||||
| Transfer format | `DATa:ENCdg RIBinary`, `DATa:WIDth 1` |
|
||||
| Channels recorded | CH1, CH3, CH4 |
|
||||
| Stage X velocity | 100 mm/s |
|
||||
| Stage X acceleration | 1500 mm/s² |
|
||||
| Stage X trigger out | Logic-high at max velocity (`TRIGOUT_MAXV`) |
|
||||
| Acquisition mode | FastFrame, Normal trigger |
|
||||
|
||||
None of these are stored in the file, so they do not affect byte layout — but
|
||||
they do set where the acoustic packet lands inside each frame. Read them from
|
||||
`core/scope_sras.py`; earlier revisions of this table drifted from the code.
|
||||
|
||||
---
|
||||
|
||||
## Acquisition Paths
|
||||
|
||||
Two acquisition strategies write **byte-identical** files; the choice is a
|
||||
runtime flag (`ScanEngine(burst_mode=…)`, exposed as a checkbox in the app) and
|
||||
is not recorded in the file.
|
||||
|
||||
| | Per-row (default) | Burst |
|
||||
|---|---|---|
|
||||
| FastFrame acquisitions | one per row | one per `floor(max_frames / n_frames)` rows |
|
||||
| Curve transfers | one per channel per row | one per channel per burst |
|
||||
| Stage X trigger out | armed for the whole scan | armed per acquiring pass, dropped for the flyback |
|
||||
|
||||
Burst mode runs a single acquisition across several rows, so the return move
|
||||
must not trigger: the trigger output is dropped before each flyback and
|
||||
re-armed for each acquiring pass. Row boundaries inside the burst come from
|
||||
`ACQuire:NUMFRAMESACQuired?` sampled after each pass — the burst itself carries
|
||||
no row markers. See `core/scope_burst.py`.
|
||||
|
||||
Either path squares each row up to the declared `n_frames` (zero-padding a
|
||||
short row, dropping the tail of a long one), because the format has no per-row
|
||||
length field and a mismatch would shift every later row.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user