Skip to content

Latest commit

 

History

History
60 lines (46 loc) · 4.93 KB

README.md

File metadata and controls

60 lines (46 loc) · 4.93 KB

OmniFold

This repository contains simple examples of implementing the OmniFold algorithm originally described in Phys. Rev. Lett. 124 (2020) 182001, 1911.09107 [hep-ph]. The code for the original paper can be found at this repository, which includes a binder demo. This repository includes simple examples that do not depend on the energyflow package.

The main example is in the notebook GaussianExample.ipynb which performs all four functions of a complete unfolding algorithm:

  1. Background subtraction. In many cases, one has an estimate of a background process that you would like to remove before correcting for detector effects. For example, you may want to measure spectra in top quark pair production, but want to subtract the contribution from W+jets. In the notebook, this is controlled by back which is set to 0.1 as a default. Unbinned subtraction is achieved using neural positive reweighting.
  2. Fake factors. Events that pass the detector-level event selection, but not the particle-level one. These events participate in Step 1 of OmniFold, but not Step 2. The rate of these events are controlled by fake which is set to 0.1 by default. You should also change dummyval to be some value that is unlikely to occur (set to -10 by default).
  3. Resolution effects. This step does most of the heavy lifting in OmniFold and is the main part of the algorithm. The procedure is iterative, with the number of iterations set by iterations.
  4. Efficiency factors. Events that pass the particle-level event selection, but not the particle-level one. One option for these events is to simply take the prior, which is the option weights_pull[theta0_S==dummyval] = 1. in the code. Another option (which is on by default) is to set the pulled-back weights for such events to be equal to the average weight: w = E[w(reco)|true]. This also uses the neural positive reweighting.

If you are not worried about (1), (2), or (4) and would simply like to do deconvolution, then you can see the script GaussianExample_mimimal.ipynb which calls the OmniFold algorithm in omnifold.py. The Jupyter notebook is simply used to show the results - all that you need to do are specify a TensorFlow model and pass in the data to omnifold.omnifold.

Further explanation

Here are some recent presentations that further explain the OmniFold approach:

Publications

Name

The name OmniFold refers generally to the iterative reweighting algorithm introduced in Phys. Rev. Lett. 124 (2020) 182001. One- and multi-dimensional variants are sometimes called Unifold and Multifold, respectively. The name OmniFold originates from a poem by Emily Dickinson:

Emily Dickinson, #975

The Mountain sat upon the Plain
In his tremendous Chair—
His observation omnifold,
His inquest, everywhere—

The Seasons played around his knees
Like Children round a sire—
Grandfather of the Days is He
Of Dawn, the Ancestor—

Citation

If you use OmniFold, please cite:

@article{Andreassen:2019cjw,
    author = "Andreassen, Anders and Komiske, Patrick T. and Metodiev, Eric M. and Nachman, Benjamin and Thaler, Jesse",
    title = "{OmniFold: A Method to Simultaneously Unfold All Observables}",
    eprint = "1911.09107",
    archivePrefix = "arXiv",
    primaryClass = "hep-ph",
    doi = "10.1103/PhysRevLett.124.182001",
    journal = "Phys. Rev. Lett.",
    volume = "124",
    pages = "182001",
    year = "2020"
}

The software in this repository includes contributions from Adi Suresh and is based on the OmniFold paper based on the above paper. We would also like to thank Miguel Arratia for many useful discussions and helpful feedback about the code.