Skip to content

waterfall-viewer v0.1.10

Choose a tag to compare

@Verter73 Verter73 released this 11 Jul 21:12

Крупная функциональная волна поверх v0.1.9: поддержка нового формата прошивки ASWF v5 (температура детектора), отдельная вкладка анализа неспектральных данных «Прибор», диалог отчёта о целостности при открытии файла, отключаемый оверлей температуры на 2D-спектрограмме, аудит-фиксы загрузчика по спецификации формата и приведение поля отчёта к тёмной теме.

Что нового

Чтение ASWF v5 — температура детектора (#DATA-2)

Прошивка firmware-v1.0.11 (#FW-41) пишет формат ASWF v5: перед полем crc32 в каждой строке добавлено temperature (float32, °C детектора), crc32 сдвинут на offset 16406 (covers=16406), row_stride=16410. Загрузчик читал stride и смещения полей из заголовка (row_fields), поэтому файл открывался и раньше, но температура терялась. Теперь она извлекается (обе ветки — без сжатия и RLE), хранится в модели (Spectrogram.temperature_c, NaN = прибор ещё не отдал значение) и доступна анализу.

Вкладка «Прибор» — анализ неспектральных данных (#DATA-3)

Новая вкладка сводит воедино всё, что прибор пишет помимо спектра:

  • график мощности дозы (мкЗв/ч) по времени;
  • график температуры детектора (°C) по времени;
  • GPS-трек — точки маршрута, окрашенные по скорости счёта (cps);
  • экспорт в CSV — единая таблица index, t_offset_s, duration_s, cps, dose_rate_usv_h, temperature_c, latitude, longitude (отсутствующие ряды — пустые ячейки).

Отчёт о целостности данных при открытии файла (#UI-236)

При открытии .aswf показывается немодальный отчёт: путь, число срезов и каналов, суммарные отсчёты, время начала записи, длительность, проверка per-row CRC32 (для v4/v5 — OK / номера повреждённых строк / пропуск для сжатых файлов), версия формата, наличие данных дозы/температуры/GPS/baseline. Отчёт сохраняется в .txt кнопкой «Сохранить отчёт…»; также доступен из меню «Файл → Отчёт целостности…».

Ось времени и единицы на вкладке «Прибор» (#UI-237, #UI-238)

  • #UI-237 — графики дозы и температуры фиксируются по оси времени от нуля до конца записи (раньше пустой график давал бессмысленный автодиапазон 0.1…0.9).
  • #UI-238 — переключение единиц оси времени с / мин / ч, синхронно с общей кнопкой «Время:» на панели инструментов.

Оверлей температуры на 2D-спектрограмме (#UI-239)

Отключаемый флажок «Темп. (2D)» на панели инструментов рисует поверх 2D-карты кривую температуры вдоль оси времени: белая линия с чёрной обводкой (читаема на любой палитре), значения нормируются в полосу 5…95 % ширины карты, разрывы данных не соединяются, сверху появляется отдельная шкала °C. Включается только при наличии температуры в файле.

Исправления и надёжность

Аудит загрузчика против спецификации формата (#DATA-4)

Построчная сверка загрузчика с ASWF_FORMAT.md. Исправлены три граничных случая:

  • t0 при не синхронизированных часахstarted_at == 0 (по спеке «NTP не синхронизирован») давал фиктивную дату 1970-01-01…; теперь время начала помечается как неизвестное, ось времени относительна.
  • baseline без размера — секция baseline без ключей channels/count подставляла число каналов и читала 32 КБ мусора со сдвигом полезных данных; по спеке B = (channels ?? count ?? 0) × 4 → секции нет.
  • валидация заголовка — при dtype/byte_order, отличных от uint16/little, разбор молча давал бы кашу; теперь честная ошибка загрузки.

Тёмная тема поля отчёта (#UI-240)

Поле отчёта целостности рисовалось системным белым фоном и выбивалось из тёмной темы приложения (в таблице стилей не было правила для многострочных полей). Приведено к теме: тёмный фон, светлый текст, зелёное выделение.

Установка

Распаковать waterfall-viewer-0.1.10-windows-x64.zip, запустить waterfall-viewer/waterfall-viewer.exe. Windows x64, отдельно ставить зависимости не нужно.

Технические данные

  • Полный прогон тестов — 797 passed (headless-Qt, со scipy и sample-файлом).
  • Сборка: PyInstaller onedir, Python 3.14, PySide6 6.11.1, pyqtgraph 0.14.0.
  • Совместимость чтения: ASWF v1–v5, RadiaCode .rcspg, ANSI N42.42 .n42.