f745efe7e0e6740844f6288b0a44ecc5248c0790
Previously the FFT was always run unmasked (dc_threshold_mv=-1e9) so the result could be cached independent of the threshold, with masking applied afterward as a display-time step. That meant every pixel's CH1 waveform was read and FFT'd even when most of the scan is background — wasted work now that the DC map (and its threshold mask) is already known ahead of time via the DC precompute cache. compute_rf_image now takes the real threshold and an optional precomputed dc4_mv array (reused from the DC cache, avoiding a redundant CH4 read), and skips the FFT for masked-out pixels entirely, same as before this threshold-caching detour was introduced. The masked-out CH1 samples are also never read from disk: the boolean valid-pixel mask is applied to the raw memmap slice before any dtype conversion, so numpy only pages in the bytes for pixels that pass the threshold. Threshold is therefore back to being part of the FFT cache key (changing it now decides which pixels get computed at all, so it can't be satisfied from a cache built for a different threshold) — but the recompute it triggers reuses the cached DC4 image and skips both the FFT and the I/O for masked pixels, so it's much cheaper than the original full-image compute. Grating and colormap remain pure post-processing with no recompute. Verified bit-identical output against the un-optimized reference path on synthetic data (including scattered, non-row-aligned masking), and timed on the real 532 GB / 17-angle file: angle 0's FFT (75.2% of pixels above the default 50 mV threshold) went from ~121s (fully unmasked) to 114s (FFT skipped, I/O not skipped) to 90.2s with this change (both skipped). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Description
No description provided
Languages
Python
91.6%
HTML
8.4%