NextStatNextStat

Визуализация

Rust-крейт ns-viz и Python-подмодуль nextstat.viz создают 18 типов графиков публикационного качества — полный паритет с каждым выводом TRExFitter. Все графики генерируются как сериализуемые JSON-артефакты в Rust; Python-обёртки рендерят через matplotlib.

Установка

pip install "nextstat[viz]"

Каталог графиков (18 типов)

Тип графикаCLI / PythonRust-артефакт
Prefit-распределенияviz distributionsDistributionArtifact
Postfit-распределенияviz distributions --fitDistributionArtifact
NP pull-диаграммаviz pullsPullArtifact
Корреляционная матрицаviz corrCorrelationArtifact
Ранжирование NP (impact)viz rankingRankingArtifact
Brazil band (CLs vs μ)viz clsClsCurveArtifact
Профильное правдоподобиеviz profileProfileCurveArtifact
Таблицы выходовreportYieldTableArtifact
Разбивка неопределённостейviz uncertaintyUncertaintyArtifact
Гаммы (стат. NP)viz gammasGammaArtifact
Summary (μ мульти-фит)viz summarySummaryArtifact
Разделение (S vs B)viz separationSeparationArtifact
Круговая диаграммаviz piePieArtifact
Скан значимостиviz significanceSignificanceScanArtifact
2D контуры правдоподобияviz contourContourArtifact
Развёртка (unfolding)viz unfoldingResponseMatrixArtifact / UnfoldedSpectrumArtifact
Валидация морфингаviz morphingMorphingArtifact
Signal injectionviz injectionInjectionArtifact

Подсвеченные строки — пять новых модулей, добавленных в v0.9.4.

Brazil band для CLs

import nextstat

scan = np.linspace(0.0, 5.0, 101)
cls_art = nextstat.viz.cls_curve(model, scan, alpha=0.05)
nextstat.viz.plot_cls_curve(cls_art, title="CLs Brazil band")

Скан значимости

Графики p₀ или Z (значимость открытия) как функция массы или параметра силы сигнала. Поддерживает однорабочее-пространство и multi-mass-point сканы. Аналог TRExFitter шага s (GetSignificance).

sig_art = nextstat.viz.significance_scan(model, masses, workspaces)
nextstat.viz.plot_significance_scan(sig_art, title="Значимость открытия")

2D контуры правдоподобия

Контуры Δ(2NLL) для двух POI на уровнях 68% и 95% CL. Используется алгоритм marching squares для извлечения гладких контуров из сетки профильного правдоподобия. Аналог TRExFitter GetContour.

contour_art = nextstat.viz.contour_2d(
    model, poi_x="mu_sig", poi_y="mu_bkg",
    x_range=(0.0, 3.0), y_range=(0.5, 1.5), grid=50,
)
nextstat.viz.plot_contour(contour_art, title="2D контур")

Графики развёртки

Два типа артефактов: ResponseMatrixArtifact (матрица миграции с метриками чистоты/стабильности, опциональная нормировка по столбцам) и UnfoldedSpectrumArtifact(развёрнутое дифференциальное распределение со стат./сист. ошибками и наложением истинного спектра). Аналог TRExFitter шага x.

resp = nextstat.viz.response_matrix(truth_bins, reco_bins, migration)
nextstat.viz.plot_response_matrix(resp, title="Матрица миграции")

unf = nextstat.viz.unfolded_spectrum(bins, unfolded, stat_err, syst_err, truth)
nextstat.viz.plot_unfolded_spectrum(unf, title="Развёрнутое pT")

Валидация морфинга

Визуализация интерполяции шаблонов между anchor-точками. Показывает дискретные шаблоны наряду с интерполированным результатом при произвольном значении параметра.

morph_art = nextstat.viz.morphing(anchors, interp_value=0.7)
nextstat.viz.plot_morphing(morph_art, title="Морфинг шаблонов")

Signal injection / линейность

Тест линейности μ̂ vs μinj с pull-статистикой для каждой точки и автоматическим fit наклона/смещения методом наименьших квадратов. Проверяет, что анализ корректно восстанавливает введённую силу сигнала.

inj_art = nextstat.viz.signal_injection(
    model, mu_inj=[0.0, 0.5, 1.0, 1.5, 2.0], n_toys=200,
)
nextstat.viz.plot_injection(inj_art, title="Линейность signal injection")

Рендерер отдельных артефактов (viz render)

Рендеринг одного JSON viz артефакта напрямую в изображение без генерации полного отчёта. Поддерживает типы pulls, corr и ranking.

# Рендеринг pulls
nextstat viz render --kind pulls --input pulls.json --output pulls.png

# Корреляционная матрица с фильтрами
nextstat viz render --kind corr --input corr.json --output corr.png \
  --corr-top-n 40 --corr-exclude "gamma_*"

# Ранжирование с заголовком и DPI
nextstat viz render --kind ranking --input ranking.json --output ranking.png \
  --title "NP Impact on mu" --dpi 220
ФлагОписание
--kindТип артефакта: pulls, corr или ranking
--inputПуть к JSON-файлу артефакта
--outputПуть к выходному изображению (.png)
--titleПользовательский заголовок графика
--dpiРазрешение вывода (по умолчанию 220)
--corr-include / --corr-excludeФильтрация параметров корреляционной матрицы по glob-паттерну
--corr-top-nПоказать только top N параметров по макс. абсолютной корреляции

Архитектура Rust-артефактов

Каждый тип графика поддерживается сериализуемой Rust-структурой в крейте ns-viz. Артефакты сериализуются в JSON через serde, их можно использовать из любого языка или передать в собственные рендереры. Python-обёртки nextstat.viz вызывают эти Rust-типы и рендерят через matplotlib.