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:
- 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. - 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 changedummyval
to be some value that is unlikely to occur (set to -10 by default). - 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
. - 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
.
Here are some recent presentations that further explain the OmniFold approach:
- LHC Electroweak Jets and EW Bosons Working Group Meeting
- SMU Physics Department Speaker Series
- Dark-matter and Neutrino Computation Explored (DANCE) ML Workshop
- Paper for this repository: 2021 ICLR simDL Workshop
- Preliminary Measurement from H1 Collaboration (first MultiFold on collider data!): H1prelim-21-031
- Original Paper: Phys. Rev. Lett. 124 (2020) 182001, 1911.09107 [hep-ph]
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—
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.