Skip to content

Releases: VibeEngineering-LLC/waterfall-viewer

waterfall-viewer v0.1.12 — пропуски во времени в отчёте целостности

Choose a tag to compare

@Verter73 Verter73 released this 12 Jul 13:35

waterfall-viewer v0.1.12 — отчёт целостности показывает пропуски во времени

Патч-релиз поверх v0.1.11. Единственное изменение — #DATA-6: отчёт о целостности
теперь обнаруживает и показывает пропуски во времени (вероятные потерянные сегменты).

Что добавлено

Проблема. Прибор держит кольцевой буфер сегментов записи (по спецификации ASWF —
до 64 строк / до 10 минут на сегмент); при переполнении старейший сегмент удаляется
автоматически
. Если сегмент потерян, склейка непрерывного файла по started_at
оставляет дыру во времени, но прежний отчёт о целостности её не показывал.

Решение. При загрузке .aswf вьюер сканирует шаг между соседними строками против
ожидаемой длительности (реальная длительность строки, иначе номинальный интервал).
Если шаг существенно больше ожидаемого — это разрыв (пропущенный сегмент). Отчёт о
целостности получил новую секцию:

⚠ Пропуски во времени (возможна потеря сегментов): N, всего X с (~K строк)
  после среза i: пропуск Y с (~M строк)

Секция появляется только при наличии разрывов; на равномерной записи её нет.

Область изменений

  • Затронуто только чтение .aswf (детекция разрывов) и отчёт о целостности.
    Прочая функциональность — без изменений.
  • Добавлено 4 регресс-теста. Полный автотест-набор — 802 passed.

Установка

Скачайте waterfall-viewer-0.1.12-windows-x64.zip, распакуйте и запустите
waterfall-viewer/waterfall-viewer.exe. Python устанавливать не нужно.

waterfall-viewer v0.1.11 — исправление оси времени графика сечений

Choose a tag to compare

@Verter73 Verter73 released this 12 Jul 10:26

waterfall-viewer v0.1.11 — исправление оси времени графика сечений

Патч-релиз поверх v0.1.10. Единственное изменение — исправление бага #DATA-5.

Что исправлено

Симптом. На нижней панели «Срезы / Сечения / Выборки» ось времени показывала
Время, с (×1e+09) с отрицательными значениями (напр. −1.6…−0.2), а зелёная кривая
«суммарный cps» вырождалась в прямую диагональ. Кривые полосы ROI и энергоокна
схлопывались к нулю. (Верхний спектр и 3D-водопад при этом отображались корректно.)

Причина. При чтении .aswf загрузчик использует пер-строчные абсолютные метки времени
(timestamp), если они есть. Одна строка записи могла содержать несинхронизированное
NTP-время
— прибор ещё не поднял синхронизацию, и в поле стоял аптайм (~секунды), тогда
как момент старта записи started_at уже был реальной эпохой (~1.78·10⁹). Разность
timestamp − started_at давала смещение ≈ −1.78·10⁹ с для этой единственной строки.
Один такой выброс растягивал автомасштаб оси X в ×10⁹ и соединялся длинной диагональю с
кластером настоящих точек.

Что сделано. Загрузчик теперь принимает пер-строчный timestamp только если он —
правдоподобная абсолютная эпоха рядом со started_at (в окне started_at−60 с … started_at + 1 год). Несинхронизированные/сброшенные строки используют накопленную
длительность (cumsum) как запасной вариант. Ось времени снова корректна (0…N секунд),
все кривые графика сечений рисуются правильно.

Область изменений

  • Затронуто только чтение .aswf (все версии формата v1–v5). Прочая функциональность —
    без изменений.
  • Добавлен регресс-тест. Полный автотест-набор — 798 passed.

Установка

Скачайте waterfall-viewer-0.1.11-windows-x64.zip, распакуйте и запустите
waterfall-viewer/waterfall-viewer.exe. Python устанавливать не нужно.

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.

waterfall-viewer v0.1.9

Choose a tag to compare

@Verter73 Verter73 released this 09 Jul 23:58

Пересборка exe строго с текущего HEAD (провенанс-релиз).

Что нового

  • exe теперь собран из коммита 663667d (#ASWF4) — в v0.1.8 exe отставал на 1 коммит.
  • #ASWF4-1: чтение ASWF v4 приведено к букве спеки (baseline-ключ channels, count — legacy). Функционально нейтрально — чтение v4 не менялось.
  • #ASWF4-2: постоянный регресс-тест tests/test_aswf_v4.py (6 тестов). Полный прогон — 770 passed.

Кода вьюера логика не менялась относительно v0.1.8.

Установка

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

waterfall-viewer v0.1.8

Choose a tag to compare

@Verter73 Verter73 released this 09 Jul 12:21

waterfall-viewer v0.1.8

Собирает четыре доработки с версии v0.1.7:

  • #DATA-1 — проверка целостности .aswf v4: пер-строчный CRC32 сверяется при загрузке, отчёт в статусе («✓ целостность N/N» либо предупреждение со списком повреждённых строк).
  • #UI-233 — 3D-водопад: ось времени растягивается под окно (x_scale = nc/nt), время больше не сплющивается при малом числе временны́х срезов.
  • #UI-234 — движок «Окно t»: 0 в центре шкалы, биполярное сжатие/растяжение оси времени, более мелкие деления.
  • #UI-235 — нижний график: отдельная зелёная кривая «суммарный cps» (валовая скорость по всем каналам, независима от выбора ROI).

Служебно: вычищен раздутый дистрибутив (#BUILD-1) — из сборки исключены ML/OCR-пакеты (torch/cv2/onnxruntime/pyarrow/…), не используемые вьюером; zip ужат с ~399 до ~120 МБ.

Полный прогон тестов — 764 passed.

Установка

Скачать waterfall-viewer-0.1.8-windows-x64.zip, распаковать, запустить waterfall-viewer.exe (Windows x64, автономно, Python не требуется).

v0.1.7 — реструктура меню + хоткеи

Choose a tag to compare

@Verter73 Verter73 released this 06 Jul 22:55

Что нового

Меню (#MENU-2..5)

  • Убраны верхнеуровневые «Изотопы» и «О программе»; «Инструменты» → «Вид»
  • Новый порядок: Файл → Вид → Анализ → Калибровка → Сервис → Справка
  • «О программе» перенесено в «Справка» (Windows-конвенция)
  • Меню «Анализ»: подменю Фон / Пики / Эффективность + «Мощность дозы»
  • Хоткеи: Ctrl+E, Ctrl+F, Ctrl+B, Ctrl+Shift+B, Ctrl+K, F1, Ctrl+T
  • Имя кривой ε(E) → строка статуса

Прочее (#BQ2)

  • BecqMoni XML: StartTime/EndTime с локальным TZ

761 passed

v0.1.6 — export formats fix (#226)

Choose a tag to compare

@Verter73 Verter73 released this 06 Jul 17:35

#226 — Correct spectrum export formats

Previous release (v0.1.5, #217) mislabeled the export formats:

  • claimed LSRM .spe but wrote IAEA ASCII ($SPEC_ID: / $DATA: blocks)
  • claimed BecqMoni .tka but .tka is a plain counts-per-line file, not BecqMoni's XML

Fixed to the actual reference formats (verified against SpectraVibe writers):

  • BecqMoniXML (.xml, ResultDataFile FormatVersion 120920,
    EnergySpectrum/EnergyCalibration/{PolynomialOrder,Coefficients/Coefficient…},
    Spectrum/DataPoint…). Identity calibration [0,1] fallback if the sample
    has no calibration (BecqMoni requires ≥2 coefficients).
  • LSRM SpectraLinebinary .spe (CP-1251 header
    KEY=VALUE\r\n block with SHIFR/NOMER/CONFIGNAME/MEASBEGIN/TLIVE/TREAL/ENERGY/SPECTRSIZE,
    literal SPECTR= marker, then uint32-LE binary counts block).
  • InterSpec/ANSI N42.42 → unchanged (was already correct XML).

File dialog filter:
BecqMoni XML (*.xml);;LSRM (*.spe);;InterSpec/ANSI N42 (*.n42).

Verification

Full pytest: 761 passed (+2 new format-verification tests, −1 removed TKA-writer test).

Bundle

waterfall-viewer-0.1.6-win64.zip — PyInstaller onedir, unzip anywhere and run
waterfall-viewer\waterfall-viewer.exe.

v0.1.5

Choose a tag to compare

@Verter73 Verter73 released this 06 Jul 16:41

Изменения v0.1.4 → v0.1.5

Оператор — цикл #215..#218 (calibration/save-as/export/Y-axis):

  • #215 — интерактивная перекалибровка спектрограммы (меню «Калибровка»)
  • #216 — «Сохранить как…» → .aswf с текущей калибровкой
  • #217 — «Создать спектр из спектрограммы» → BecqMoni .tka / LSRM .spe / InterSpec .n42
  • #218 — Y-ось спектра без SI-префикса (×0.001); Y нижнего графика обновляется при show_roi

Оператор — цикл #220..#225 (2D-карта + диалог калибровки + инвалидация кэша):

  • #220 — 2D-карта: перекрестье + оверлей CPS по строке
  • #221 — перекрестье толще (width=1→2)
  • #222 — тумблер «Подложка» работает теперь и на 2D (HeatmapPanel.set_floor_visible)
  • #223 — в таблице калибровки — чекбокс включения/отключения каждой строки
  • #224 — «Подобрать E ▼» из ближайших линий активных нуклидов + multi-select нуклидов
  • #225 — после «Применить» в калибровке автоматически обновляется таблица найденных пиков и идентификация (кэш _found_peaks теперь учитывает id(sg.calibration))

Phase 6 (PC-1) — новые IO-загрузчики/писатели:

  • awf/io/spe_loader.py, awf/io/csv_loader.py, awf/io/becqmoni_loader.py
  • awf/io/tka_writer.py, awf/io/spe_writer.py, awf/io/n42_writer.py
  • awf/io/aswf_single_writer.py
  • awf/analysis/calibration_fit.py, awf/model/series.py, awf/usb/assembler.py, awf/ui/tab_live.py

QA

Полный pytest759 passed (headless offscreen Qt).

Артефакт

waterfall-viewer-0.1.5-win64.zip — PyInstaller onedir Windows-сборка (~98 МБ архив, ~242 МБ распакованно). Запуск: распакуйте архив, запустите waterfall-viewer.exe.

waterfall-viewer v0.1.4

Choose a tag to compare

@Verter73 Verter73 released this 05 Jul 23:09

waterfall-viewer v0.1.4

Просмотрщик и анализатор гамма-спектрограмм (waterfall = «спектр × время») с приборов AtomSpectra и RadiaCode.

Изменения с v0.1.3

  • #203 — нижний график «Скорость в полосе»: Y-масштаб нельзя ужать ниже начальной подгонки.
  • #204 — нижний график: при загрузке Y-ось авто-подгоняется под данные (было залипание на 0–372).
  • #205 — 3D-вьюер: начальная ориентация камеры — начало данных в дальнем углу (азимут 45°).
  • Плюс накопленные с 0.1.3: срез спектра (лимит 3000 кэВ, min-зум, LMB-drag), Энергоокно («вручную»/«откл»), фиксация Y-лимитов графиков, ASWF v3, проверка обновлений в «О программе».

Установка (Windows x64)

  1. Скачать waterfall-viewer-v0.1.4-win64.zip (91 МБ).
  2. Распаковать в любую папку.
  3. Запустить waterfall-viewer.exe.

Portable-сборка (onedir, PyInstaller), Python-рантайм внутри — установка не требуется. Подробности — INSTALL.md.

Требования

  • Windows 10/11 x64.
  • Для 3D-вкладки — OpenGL 2.1+ (2D-карта и слой данных от OpenGL не зависят).

Полный pytest — 631 passed.

v0.1.1 — Security & stability fixes

Choose a tag to compare

@Verter73 Verter73 released this 05 Jul 13:31

Что нового в v0.1.1

Исправления безопасности

  • #187: XXE-защита в загрузчике N42 — resolve_entities=False + no_network=True

Исправления стабильности

  • #188: Поиск пиков — потеря значимого пика при SNIP-режиме (net_height ≤ 0)
  • #191: Загрузчики N42/ASWF — корректная обработка усечённых файлов (предупреждения вместо traceback)

Оптимизация

  • #190: Кэш результатов поиска пиков — устранены лишние пересчёты при движении слайдеров

3D-водопад

  • #192: Подавление одиночных временных игл на границах LOD-зон (медианный фильтр axis=0)
  • #193: Подавление одиночных энергетических игл на правом краю спектра (медианный фильтр axis=1)

Загрузка

waterfall-viewer-v0.1.1-win64.zip — готовый дистрибутив Windows 64-bit (без установки, ~93 МБ).
Распакуйте и запустите waterfall-viewer.exe.

Требования

  • Windows 10/11 x64
  • Видеокарта с поддержкой OpenGL 3.x (для 3D-водопада)

Форматы файлов

.aswf (AtomSpectra waterfall) · .n42 (ANSI N42.42) · .rcspg (RadiaCode)