# Потоки данных runtime ## 1. Непрерывный acquisition pipeline 1. `AppWindowPipelineMixin._start_run()` строит `RunConfigModel` из UI. 2. `ConfigWriter` пишет runtime config и bundles calibration/reference. 3. `ProcessSupervisor` запускает: - `data_processor` - `data_preprocessor` - `sweep_orchestrator` 4. GUI открывает `ShmRingReader` для: - raw tap - preprocessed tap - results 5. Таймер GUI (`QTimer`) вызывает `_poll_rings()`: - чтение raw/preprocessed/results - запись в history deques - рендер либо trace-lines, либо B-scan heatmap. ## 2. B-scan path - Источник: `preprocessed` history ring. - Кэш-сигнатура: `build_bscan_signature()` учитывает live-параметры и tail history. - Ребилд: `rebuild_bscan_history_from_preprocessed()` + `compute_bscan_profile()`. - Рендер: `ImageItem` с LUT и уровнями (`bscan_lookup_table`, `bscan_levels`). ## 3. Single capture path - `_start_single_capture()` запускает pipeline в non-continuous режиме. - GUI ждет collection после стартового timestamp и валидного trace payload. - По завершении выполняется `_stop_run()`. ## 4. Snapshot path - `AppWindowSnapshotMixin._save_snapshot()` предварительно дренирует ring buffers. - `NpzStore.save_runtime_snapshot_numpy()`: - выбирает aligned histories (`select_aligned_histories`), - пишет `raw/preprocessed/results` + `manifest.json`. ## 5. Failure handling - Process crashes читаются через `ProcessSupervisor.collect_crash_reports()`. - Reader/parsing errors логируются в GUI runtime log. - Hardware/validation errors показываются через `_show_error()` и лог.