NextStatNextStat

Модели HistFactory

NextStat полностью совместим с форматом pyhf JSON workspace. Вы можете взять любой существующий pyhf workspace и запустить его через NextStat без модификаций.

Формат workspace

JSON-файл workspace содержит каналы, образцы, измерения и наблюдения. NextStat парсит этот формат идентично pyhf, производя то же пуассоновское правдоподобие с термами ограничений.

Построение правдоподобия

Отрицательное лог-правдоподобие включает:

  • Пуассоновские термы для каждого бина (наблюдаемое vs ожидаемое)
  • Гауссовы ограничения для нормировочных и shape-систематик
  • Пуассоновские ограничения для shape-факторов
  • Вспомогательные термы Barlow-Beeston для побиновых статистических неопределённостей

Поддерживаемые модификаторы

МодификаторТип
normfactorНеограниченная нормировка
normsysНормировка с гауссовым ограничением
histosysShape-вариация (гистограммы up/down)
shapesysПобиновое пуассоновское ограничение
staterrorBarlow-Beeston lite
lumiНеопределённость светимости

Поддержка HS3 (ROOT 6.37+)

NextStat нативно загружает HS3 v0.2 (HEP Statistics Serialization Standard) JSON workspace'ы, созданные ROOT 6.37+. Автоопределение формата мгновенно (скан префикса первых ~2 КБ).

# Автоопределение: pyhf vs HS3
nextstat fit --input workspace-postFit_PTV.json

# Python: автоопределение
model = nextstat.HistFactoryModel.from_workspace(hs3_json)

# Python: явно HS3
model = nextstat.HistFactoryModel.from_hs3(hs3_json, analysis="combPdf_obsData")

Также поддерживается HS3-экспорт: model.to_hs3() генерирует HS3 JSON с точками bestfit-параметров, сохраняя оригинальные метаданные.

Коды интерполяции

ВходNormSysHistoSys
pyhf JSON (по умолчанию)Code4 (smooth)Code4p (smooth)
pyhf JSON + --interp-defaults pyhfCode1 (exponential)Code0 (piecewise linear)
HS3 JSON (всегда)Code1 (exponential)Code0 (piecewise linear)

Семантика ConstraintTerm

NextStat поддерживает полный набор типов constraint-термов HistFactory, парсимых из XML-метаданных <ConstraintTerm>:

  • LogNormal — альфа-преобразование (normsys_alpha_effective)
  • Gamma — пуассоновское ограничение для ShapeSys-модификаторов
  • Uniform — плоский приор, без штрафа ограничения
  • NoConstraint — свободный параметр (поведение normfactor)

Загрузка Arrow / Polars

Создайте HistFactoryModel из колоночных данных (PyArrow, Polars, DuckDB, Spark) или Parquet-файлов:

import nextstat, pyarrow as pa

# Из PyArrow Table
model = nextstat.from_arrow(table, poi="mu")

# Из Parquet
model = nextstat.from_parquet("histograms.parquet", poi="mu")

# Экспорт yields обратно в Arrow
yields = nextstat.to_arrow(model, what="yields")

См. документацию Arrow / Polars для требований к схеме и полной справки API.

Паритет с pyhf

NextStat поддерживает строгий контракт паритета с pyhf. Разница NLL на всех тестовых workspace'ах составляет < 1e-8 (детерминистический CPU-режим). Оптимизатор (L-BFGS-B) часто находит лучшие минимумы, чем SLSQP по умолчанию в pyhf, особенно на моделях со 100+ мешающими параметрами.