Sophie

Sophie

distrib > Fedora > 18 > x86_64 > by-pkgid > 8c86774a3e53d77cc119f53a2b94a57a > files > 1257

root-tutorial-5.34.14-2.fc18.noarch.rpm

//////////////////////////////////////////////////////////////////////////
//
// 'NUMERIC ALGORITHM TUNING' RooFit tutorial macro #904
// 
//  Caching and interpolation of (numeric) pdf integrals to
//  speed up calculations and to promote numeric stability
//
//  11/2012 - Wouter Verkerke 
// 
/////////////////////////////////////////////////////////////////////////

#ifndef __CINT__
#include "RooGlobalFunc.h"
#endif
#include "RooRealVar.h"
#include "RooDataSet.h"
#include "RooDataHist.h"
#include "RooGaussian.h"
#include "RooConstVar.h"
#include "TCanvas.h"
#include "TAxis.h"
#include "RooPlot.h"
#include "RooVoigtian.h"
#include "TFile.h"
#include "TH1.h"

using namespace RooFit ;


void rf904_interpnorm(Bool_t cacheParamInt=kTRUE)
{
  // Report INFO messages on integration to see reporting on topic of this tutorial
  RooMsgService::instance().addStream(INFO,Topic(Caching)) ;

  // Observable
  RooRealVar m("m","m",0,100) ;


  // Parameters
  RooRealVar mass("mass","mass",50,0,100) ;
  RooRealVar sigma("sigma","sigma",1,0.1,10) ;
  RooRealVar width("width","width",1) ;

  // Voigtian is convolution of Gaussian and Breit-Wigner (with numerical normalization integral)
  RooVoigtian v("v","v",m,mass,sigma,width) ;

  // Activate parameterized integral caching for (mass,sigma) parameters
  // Set explicit binning for cache here to control precision (otherwise default binning of 100 bins is used)
  if (cacheParamInt) {
    sigma.setBins(20,"cache") ;
    mass.setBins(20,"cache") ;
    v.setStringAttribute("CACHEPARAMINT","mass:sigma") ;
  }

  // Generate a dataset
  RooDataSet* d = v.generate(m,100) ;

  // Fit model to data
  v.fitTo(*d,Verbose(1)) ;


  TCanvas* c = new TCanvas("c","c",800,400) ;
  c->Divide(2) ;
  
  // Make plot of data and fitted pdf
  RooPlot* frame = m.frame() ;
  d->plotOn(frame) ;
  v.plotOn(frame) ;
  c->cd(1) ;frame->Draw() ;

  // Plot the (cached) normalization integral in (mass,sigma) plane
  const RooAbsReal* nobj = v.getNormIntegral(m) ;
  c->cd(2) ; nobj->createHistogram("mass,sigma")->Draw("surf") ;
}