Linear Interpolation of Histograms

The root macro th1fmorph.C is an implementation of the method described in the article Linear Interpolation of Histograms. There is also a version for TH1D histograms.

The method is also implemented as the class RooIntegralMorph in root. There are several interpolation methods implemented in root - this one is sometimes also referred to a "horizontal" interpolation or morphing.

Image may contain: Slope, White, Line, Plot, Black.

(From http://dx.doi.org/10.1016/S0168-9002(98)01347-3, posted with permission from ScienceDirect) Fig. 1. Example of histogram interpolation. The reconstructed invariant mass distribution for a  Higgs (solid line) has been obtained by interpolation between the simulation results for 50 (dotted line) and 70 (dash-dotted line)  GeV/c2 Higgs masses and is overlaid with the simulation results of a  Higgs (dashed line).

 

If the two histograms in the example in the article (see Fig.1) are hist60 and hist70, representing the invariant mass distributions of a hypothetical particle with mass 60 or 70 GeV, respectively, then the interpolated histogram hist65 may be created with:

TH1F *hist65 = (TH1F *)th1morph("hist65","Interpolation to 65 GeV",hist60,hist70,60,70,65);

Some examples, in the form of simple animations, serve to illustrate the successful interpolation between 2 Gaussian distributions (execute the root macro gausfilm.C) and between 2 exponential distributions (execute the root macro expfilm.C). The examples assume you have previously downloaded th1fmorph.C .

One should always test the interpolation by comparison of an interpolated histogram to a regular histogram (say you have parameter-ordered histograms A, B, C - compare the interpolation between A and C at the value of the parameter to which B corresponds to B itself and check that it makes sense).

To illustrate the limitations of the method, an amusing failure to interpolate between 2 Gaussian distributions on top of a large, exponential background is provided (execute the root macro bumpfilm.C).

The beginning of the macro documents the arguments in some more detail:

TH1F *th1fmorph(Char_t *chname="TH1F-interpolated", 
		Char_t *chtitle="Interpolated histogram",
		TH1F *hist1,TH1F *hist2,
		Double_t par1,Double_t par2,Double_t parinterp,
		Double_t morphedhistnorm=1,
		Int_t idebug=1)
{
  //--------------------------------------------------------------------------
  // Author           : Alex Read 
  // Version 0.1 of ROOT implementation, 05.05.2011
  // *
  // *      Perform a linear interpolation between two histograms as a function
  // *      of the characteristic parameter of the distribution.
  // *
  // *      The algorithm is described in Read, A. L., "Linear Interpolation
  // *      of Histograms", NIM A 425 (1999) 357-360.
  // *      
  // *      This ROOT-based CINT implementation is based on the FORTRAN77
  // *      implementation used by the DELPHI experiment at LEP (d_pvmorph.f).
  // *      The use of double precision allows pdf's to be accurately 
  // *      interpolated down to something like 10**-15.
  // *
  // *      The input histograms don't have to be identical, the binning is also
  // *      interpolated.
  // *
  // *      Extrapolation is allowed (a warning is given) but the extrapolation 
  // *      is not as well-defined as the interpolation and the results should 
  // *      be used with great care.
  // *
  // *      Data in the underflow and overflow bins are completely ignored. 
  // *      They are neither interpolated nor do they contribute to the 
  // *      normalization of the histograms.
  // *
  // * Input arguments:
  // * ================
  // * chname, chtitle : The ROOT name and title of the interpolated histogram.
  // *                   Defaults for the name and title are "THF1-interpolated"
  // *                   and "Interpolated histogram", respectively.
  // *
  // * hist1, hist2    : The two input histograms.
  // *
  // * par1,par2       : The values of the linear parameter that characterises
  // *                   the histograms (e.g. a particle mass).
  // *
  // * parinterp       : The value of the linear parameter we wish to 
  // *                   interpolate to. 
  // * 
  // * morphedhistnorm : The normalization of the interpolated histogram 
  // *                   (default is 1.0).  
  // * 
  // * idebug          : Default is zero, no internal information displayed. 
  // *                   Values between 1 and increase the verbosity of 
  // *                   informational output which may prove helpful to
  // *                   understand errors and pathalogical results.
  // * 
  // * The routine returns a pointer (TH1F *) to a new histogram which is
  // * the interpolated result.
  // *
  // *------------------------------------------------------------------------
  
Tags: interpolation, histograms, morphing By Alex Read
Published Dec. 15, 2020 9:53 AM - Last modified Dec. 17, 2020 11:24 AM