#!/usr/bin/env python # coding: utf-8 # # rf208_convolution # 'ADDITION AND CONVOLUTION' RooFit tutorial macro #208 # One-dimensional numeric convolution # (require ROOT to be compiled with --enable-fftw3) # # pdf = landau(t) (x) gauss(t) # # # # # **Author:** Clemens Lange, Wouter Verkerke (C version) # This notebook tutorial was automatically generated with ROOTBOOK-izer from the macro found in the ROOT repository on Wednesday, April 17, 2024 at 11:17 AM. # In[1]: import ROOT # Set up component pdfs # --------------------------------------- # Construct observable # In[2]: t = ROOT.RooRealVar("t", "t", -10, 30) # Construct landau(t,ml,sl) # In[3]: ml = ROOT.RooRealVar("ml", "mean landau", 5.0, -20, 20) sl = ROOT.RooRealVar("sl", "sigma landau", 1, 0.1, 10) landau = ROOT.RooLandau("lx", "lx", t, ml, sl) # Construct gauss(t,mg,sg) # In[4]: mg = ROOT.RooRealVar("mg", "mg", 0) sg = ROOT.RooRealVar("sg", "sg", 2, 0.1, 10) gauss = ROOT.RooGaussian("gauss", "gauss", t, mg, sg) # Construct convolution pdf # --------------------------------------- # Set #bins to be used for FFT sampling to 10000 # In[5]: t.setBins(10000, "cache") # Construct landau (x) gauss # In[6]: lxg = ROOT.RooFFTConvPdf("lxg", "landau (X) gauss", t, landau, gauss) # Sample, fit and plot convoluted pdf # ---------------------------------------------------------------------- # Sample 1000 events in x from gxlx # In[7]: data = lxg.generate({t}, 10000) # Fit gxlx to data # In[8]: lxg.fitTo(data, PrintLevel=-1) # Plot data, pdf, landau (X) gauss pdf # In[9]: frame = t.frame(Title="landau (x) gauss convolution") data.plotOn(frame) lxg.plotOn(frame) landau.plotOn(frame, LineStyle="--") # Draw frame on canvas # In[10]: c = ROOT.TCanvas("rf208_convolution", "rf208_convolution", 600, 600) ROOT.gPad.SetLeftMargin(0.15) frame.GetYaxis().SetTitleOffset(1.4) frame.Draw() c.SaveAs("rf208_convolution.png") # Draw all canvases # In[11]: from ROOT import gROOT gROOT.GetListOfCanvases().Draw()