This repository provides an extension for the unfolding software TUnfold V17.8 written by Stefan Schmitt. TUnfold implements Tikhonov regularization for unfolding smeared data from particle detectors. However, as demonstrated by Kuusela (2016), the resulting confidence intervals may seriously underestimate the uncertainty in the unfolded space, unless care is taken in the choice of the regularization strength tau. This extension provides a new function for choosing the regularization strength, UndersmoothTau
, which aims at choosing tau so that the confidence intervals have nearly nominal coverage. UndersmoothTau
is an implementation of the data-driven undersmoothing technique introduced in Kuusela (2016). Please refer to the references section for more details on the statistical methodology.
Detailed documentation for UndersmoothedUnfolding can be found here.
Function | Input | Output | Description |
---|---|---|---|
UndersmoothTau |
Initial tau, tolerance epsilon, max number of iterations | Undersmoothed tau | Undersmooths the initial tau (from L-curve for example) gradually until the minimum estimated coverage meets the target coverage, which is the nominal 68% minus the tolerance epsilon. This is the main function from the user's perspective. |
ComputeCoverage |
Estimate of the true histogram, tau | Estimated coverage | Computes the estimated coverage given an estimate of the true histogram and a regularization strength tau. Used by UndersmoothTau . |
UndersmoothTau
is implemented so that it can be used with any initial estimate of tau. Below is example usage of UndersmoothTau
with the ScanLcurve
method provided in TUnfold
.
TUnfold unfold = new TUnfold(); // construct a TUnfold object
unfold.ScanLcurve(); // unfold using ScanLcurve method
TauFromLcurve = unfold.GetTau(); // retrieve tau chosen by ScanLcurve
// starting from tau chosen by ScanLcurve, undersmooth tau until the minimum estimated coverage
// meets the target coverage, which is the nominal 68% minus the tolerance epsilon (0.01 in this example).
TauFromUndersmoothing = unfold.UndersmoothTau(TauFromLcurve, 0.01, 1000);
unfold.DoUnfold(TauFromUndersmoothing); // unfold again with undersmoothed tau
See UndersmoothDemo.C
for more details on how to use UndersmoothTau
.
The simulation below compares the performance of the unfolded confidence intervals when the regularization strength is chosen using ScanLcurve
provided by TUnfold
and the algorithm UndersmoothTau
provided by this extension. The tolerance epsilon was set to 0.01, so the intervals from UndersmoothTau
should have 67% coverage. The top plots compare the binwise coverage of the methods. The coverage is estimated by repeating the unfolding 1,000 times with independent realizations of data. The bottom plots show one realization of the unfolded confidence intervals for each method. The confidence intervals provided by ScanLcurve
are too short and suffer from drastic undercoverage, while the intervals provided by UndersmoothTau
have nearly nominal coverage without being excessively long. See UndersmoothDemo.C
for details of the simulation setup.
To install, simply set up the ROOT
environment (tested with ROOT V6.18/00) and run make
as below:
$ source /path/to/install-or-build/dir/bin/thisroot.sh
$ make
You should see an executable named UndersmoothDemo
. Running the executable will generate UndersmoothDemo.pdf
. (Running the demo takes a while. To obtain results faster reduce repeatNum
in UndersmoothDemo.C
.)
- The current version is intended to be used with
kEConstraintNone
for the area constraint option when constructing theTUnfold
object.