158f60d2a7733ff4810231737d1364f033cf4449
Colormap, DC threshold, velocity grating, and FFT pad-factor changes were all routing through a full recompute, which is unworkable on large v6 scans where a single angle's FFT can take minutes. These are now applied as cheap post-processing on cached data instead: - ComputeWorker computes CH1/Velocity as an unmasked raw FFT plus its DC4 mask image, cached per (angle, bg_sub, n_fft). Threshold masking and grating scaling are applied to the cached array on redraw, so neither needs a recompute; colormap changes only touch matplotlib. - New DcPrecomputeWorker fills a per-angle DC (CH3/CH4) cache in the background right after load, since DC images are cheap (mean, no FFT) and make switching angles instant once cached. Progress is shown in the Scan Info panel. - New _refresh_display()/_show_image_now() route every settings-changed handler through the cache first, falling back to the existing threaded _start_compute() (with a progress popup, now FFT- vs DC-specific) only on a genuine cache miss. - File load now defaults to a DC channel instead of CH1/FFT, so opening a large file shows something in seconds instead of minutes. Verified against a real 532 GB / 17-angle file: DC compute for one angle takes ~100s+ (I/O-bound over USB) the first time, but switching to an already-cached angle takes 0.4s with no compute thread spun up at all. Audited every widget signal connection for this pass; the spinboxes already correctly used editingFinished rather than valueChanged — the recompute-on-every-change bug was in the handlers, not the event type. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Description
No description provided
Languages
Python
91.6%
HTML
8.4%