Skip to content
pure-python implementation of some (maybe someday all?) HistFactory models
Python Other
  1. Python 99.9%
  2. Other 0.1%
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github ci: Pin GitHub Actions release versions to stable tags (#664) Dec 3, 2019
binder Use curl -L to have trigger_binder follow URL redirect (#487) Jun 22, 2019
docker
docs feat: Add backend option to pyhf CLI (#534) Dec 4, 2019
examples Fix toy example of spec in docs and render parts of schema in docs fr… Jun 26, 2019
src/pyhf feat: normfactor import/export parameter configuration (#666) Dec 6, 2019
tests feat: normfactor import/export parameter configuration (#666) Dec 6, 2019
validation fix: Correct warnings raised by LGTM scan (#574) Sep 26, 2019
.ackrc Add additional pdf information to aid with refactoring (#305) Oct 12, 2018
.bumpversion.cfg Bump version: 0.2.1 → 0.2.2 Nov 20, 2019
.coveragerc ci: Use Codecov GitHub Action to report coverage (#598) Oct 4, 2019
.git_archival.txt Finish adding deploy testing with TestPyPI (#436) Apr 11, 2019
.gitattributes Finish adding deploy testing with TestPyPI (#436) Apr 11, 2019
.gitignore test: Add public API canary tests to CI and nightly tests for current… Nov 21, 2019
.pre-commit-config.yaml Use python3 for precommit language version (#637) Nov 14, 2019
.readthedocs.yml Flesh out base documentation with introduction/background/details (#480) Jun 24, 2019
.travis.yml ci: Migrate publishing from Travis CI to GitHub Actions (#638) Nov 15, 2019
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md Jan 26, 2018
CONTRIBUTING.md chore: Migrate from diana-hep GitHub org to scikit-hep (#643) Nov 20, 2019
LICENSE
MANIFEST.in Use src directory for project directory structure (#513) Jul 16, 2019
README.md ci: Use pydocstyle (#588) Dec 3, 2019
pyproject.toml fix: Add build-system to pyproject.toml (#639) Nov 15, 2019
pytest.ini ci: Use Codecov GitHub Action to report coverage (#598) Oct 4, 2019
setup.cfg Finish adding deploy testing with TestPyPI (#436) Apr 11, 2019
setup.py feat: pyhf spec CLI (#617) Dec 3, 2019

README.md

pyhf logo

pure-python fitting/limit-setting/interval estimation HistFactory-style

DOI

Travis Build Status GitHub Actions Status: CI GitHub Actions Status: Publish Docker Automated Code Coverage Language grade: Python CodeFactor Code style: black

Docs Binder

PyPI version Supported Python versionss Docker Stars Docker Pulls

The HistFactory p.d.f. template [CERN-OPEN-2012-016] is per-se independent of its implementation in ROOT and sometimes, it's useful to be able to run statistical analysis outside of ROOT, RooFit, RooStats framework.

This repo is a pure-python implementation of that statistical model for multi-bin histogram-based analysis and its interval estimation is based on the asymptotic formulas of "Asymptotic formulae for likelihood-based tests of new physics" [arxiv:1007.1727]. The aim is also to support modern computational graph libraries such as PyTorch and TensorFlow in order to make use of features such as autodifferentiation and GPU acceleration.

Hello World

>>> import pyhf
>>> pdf = pyhf.simplemodels.hepdata_like(signal_data=[12.0, 11.0], bkg_data=[50.0, 52.0], bkg_uncerts=[3.0, 7.0])
>>> CLs_obs, CLs_exp = pyhf.utils.hypotest(1.0, [51, 48] + pdf.config.auxdata, pdf, return_expected=True)
>>> print('Observed: {}, Expected: {}'.format(CLs_obs, CLs_exp))
Observed: [0.05290116], Expected: [0.06445521]

What does it support

Implemented variations:

  • HistoSys
  • OverallSys
  • ShapeSys
  • NormFactor
  • Multiple Channels
  • Import from XML + ROOT via uproot
  • ShapeFactor
  • StatError
  • Lumi Uncertainty

Computational Backends:

  • NumPy
  • PyTorch
  • TensorFlow

Available Optimizers

NumPy Tensorflow PyTorch
SLSQP (scipy.optimize) Newton's Method (autodiff) Newton's Method (autodiff)
MINUIT (iminuit) . .

Todo

  • StatConfig
  • Non-asymptotic calculators

results obtained from this package are validated against output computed from HistFactory workspaces

A one bin example

nobs = 55, b = 50, db = 7, nom_sig = 10.

manual

manual

A two bin example

bin 1: nobs = 100, b = 100, db = 15., nom_sig = 30.
bin 2: nobs = 145, b = 150, db = 20., nom_sig = 45.

manual

manual

Installation

To install pyhf from PyPI with the NumPy backend run

pip install pyhf

and to install pyhf with additional backends run

pip install pyhf[tensorflow,torch]

or a subset of the options.

To uninstall run

pip uninstall pyhf

Authors

Please check the contribution statistics for a list of contributors

You can’t perform that action at this time.