- replay_raw_producer carries the RECORDED per-trace capture windows
from each snapshot's meta.json (re-anchored by the same shift as the
frame time) instead of one synthetic window for all traces — without
this the segmented timing model degenerates in replay;
- GUI/profile/orchestration swap the removed window knobs
(center_depth, half_width_*, grid_n*) for the notebook parameters
(ground depth, pitch override, voxel pitch, Y range, X margin, norm
edge margin, smooth sigma, comp power, tx per segment).
Headless replay smoke on the 20260922_mine_fast_true dataset passes:
51 sar3d result collections, transparent preprocessor.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The display threshold from 'add treshhold' (e113ef6) was meant for the
sar3d projections; the GPR heatmap goes back to full-range levels and
the constant moves into sar3d_plot_mixin.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
MultiDeviceLibreVnaService only exposes the 2x4 virtual combo matrix on
its own USB transport. When a physical GPIO switch sits on the master
stimulus and/or slave receiver path, the effective matrix is wider than
that. SwitchedMatrixRadarService wraps the inner service and drives the
extra switch(es) between acquire_collection calls, widening the combo
matrix by the physical position counts (matrix_output_switch_positions /
matrix_input_switch_positions in RunConfigModel).
Combo-matrix construction was centralized into
RunConfigModel.build_runtime_combos() so the GUI, workflows, and codec
all derive the same widened matrix instead of each computing its own
version of the virtual 2x4 layout.