{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "89453658",
   "metadata": {},
   "source": [
    "# rf211_paramconv\n",
    "'ADDITION AND CONVOLUTION' RooFit tutorial macro #211\n",
    "Working a with a p.d.f. with a convolution operator in terms\n",
    "of a parameter\n",
    "\n",
    "(require ROOT to be compiled with --enable-fftw3)\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:**  Clemens Lange, Wouter Verkerke (C version)  \n",
    "<i><small>This notebook tutorial was automatically generated with <a href= \"https://github.com/root-project/root/blob/master/documentation/doxygen/converttonotebook.py\">ROOTBOOK-izer</a> from the macro found in the ROOT repository  on Tuesday, May 19, 2026 at 08:30 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "5ab2b300",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:20.226805Z",
     "iopub.status.busy": "2026-05-19T20:30:20.226689Z",
     "iopub.status.idle": "2026-05-19T20:30:21.195926Z",
     "shell.execute_reply": "2026-05-19T20:30:21.195182Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed3e888a",
   "metadata": {},
   "source": [
    "Set up component pdfs\n",
    "---------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8720d9c6",
   "metadata": {},
   "source": [
    "Gaussian g(x ; mean,sigma)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "a81170ec",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:21.197998Z",
     "iopub.status.busy": "2026-05-19T20:30:21.197864Z",
     "iopub.status.idle": "2026-05-19T20:30:21.374676Z",
     "shell.execute_reply": "2026-05-19T20:30:21.374050Z"
    }
   },
   "outputs": [],
   "source": [
    "x = ROOT.RooRealVar(\"x\", \"x\", -10, 10)\n",
    "mean = ROOT.RooRealVar(\"mean\", \"mean\", -3, 3)\n",
    "sigma = ROOT.RooRealVar(\"sigma\", \"sigma\", 0.5, 0.1, 10)\n",
    "modelx = ROOT.RooGaussian(\"gx\", \"gx\", x, mean, sigma)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "54fc220b",
   "metadata": {},
   "source": [
    "Block function in mean"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "537bb8ae",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:21.376748Z",
     "iopub.status.busy": "2026-05-19T20:30:21.376595Z",
     "iopub.status.idle": "2026-05-19T20:30:21.560413Z",
     "shell.execute_reply": "2026-05-19T20:30:21.559714Z"
    }
   },
   "outputs": [],
   "source": [
    "a = ROOT.RooRealVar(\"a\", \"a\", 2, 1, 10)\n",
    "model_mean = ROOT.RooGenericPdf(\"model_mean\", \"abs(mean)<a\", [mean, a])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73554419",
   "metadata": {},
   "source": [
    "Convolution in mean model = g(x,mean,sigma) (x) block(mean)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "bdecf7fd",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:21.562392Z",
     "iopub.status.busy": "2026-05-19T20:30:21.562261Z",
     "iopub.status.idle": "2026-05-19T20:30:21.680680Z",
     "shell.execute_reply": "2026-05-19T20:30:21.679972Z"
    }
   },
   "outputs": [],
   "source": [
    "x.setBins(1000, \"cache\")\n",
    "mean.setBins(50, \"cache\")\n",
    "model = ROOT.RooFFTConvPdf(\"model\", \"model\", mean, modelx, model_mean)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4eb1b0d1",
   "metadata": {},
   "source": [
    "Configure convolution to construct a 2-D cache in (x,mean)\n",
    "rather than a 1-d cache in mean that needs to be recalculated\n",
    "for each value of x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "acb15ec9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:21.682332Z",
     "iopub.status.busy": "2026-05-19T20:30:21.682204Z",
     "iopub.status.idle": "2026-05-19T20:30:21.839194Z",
     "shell.execute_reply": "2026-05-19T20:30:21.830401Z"
    }
   },
   "outputs": [],
   "source": [
    "model.setCacheObservables({x})\n",
    "model.setBufferFraction(1.0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9f60d0d",
   "metadata": {},
   "source": [
    "Integrate model over projModel = Int model dmean"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "aa0007f9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:21.857290Z",
     "iopub.status.busy": "2026-05-19T20:30:21.857141Z",
     "iopub.status.idle": "2026-05-19T20:30:22.028943Z",
     "shell.execute_reply": "2026-05-19T20:30:22.028336Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Eval -- RooRealVar::setRange(mean) new range named 'refrange_fft_model' created with bounds [-3,3]\n",
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(gx_Int[mean,x]) using numeric integrator RooIntegrator1D to calculate Int(mean)\n",
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(model_mean_Int[mean]) using numeric integrator RooIntegrator1D to calculate Int(mean)\n",
      "[#0] WARNING:Eval -- The FFT convolution 'model' will run with 50 bins. A decent accuracy for difficult convolutions is typically only reached with n >= 1000. Suggest to increase the number of bins of the observable 'mean'.\n",
      "[#1] INFO:Caching -- RooAbsCachedPdf::getCache(model) creating new cache 0x5641e6fe7d50 with pdf gx_CONV_model_mean_CACHE_Obs[mean,x]_NORM_mean for nset (mean) with code 0\n"
     ]
    }
   ],
   "source": [
    "projModel = model.createProjection({mean})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "922a39cd",
   "metadata": {},
   "source": [
    "Generate 1000 toy events"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "bbdf2f5a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:22.030176Z",
     "iopub.status.busy": "2026-05-19T20:30:22.030053Z",
     "iopub.status.idle": "2026-05-19T20:30:22.190857Z",
     "shell.execute_reply": "2026-05-19T20:30:22.190250Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(gx_Int[mean,x]) using numeric integrator RooIntegrator1D to calculate Int(mean)\n",
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(model_mean_Int[mean]) using numeric integrator RooIntegrator1D to calculate Int(mean)\n",
      "[#0] WARNING:Eval -- The FFT convolution 'model' will run with 50 bins. A decent accuracy for difficult convolutions is typically only reached with n >= 1000. Suggest to increase the number of bins of the observable 'mean'.\n",
      "[#1] INFO:Caching -- RooAbsCachedPdf::getCache(model) creating new cache 0x5641e70e0850 with pdf gx_CONV_model_mean_CACHE_Obs[x,mean]_NORM_x_mean for nset (x,mean) with code 1\n"
     ]
    }
   ],
   "source": [
    "d = projModel.generateBinned({x}, 1000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "859e1cf3",
   "metadata": {},
   "source": [
    "Fit p.d.f. to toy data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "7a3a433b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:22.192340Z",
     "iopub.status.busy": "2026-05-19T20:30:22.192216Z",
     "iopub.status.idle": "2026-05-19T20:30:23.475333Z",
     "shell.execute_reply": "2026-05-19T20:30:23.474576Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(gx_Int[mean,x]) using numeric integrator RooIntegrator1D to calculate Int(mean)\n",
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(model_mean_Int[mean]) using numeric integrator RooIntegrator1D to calculate Int(mean)\n",
      "[#0] WARNING:Eval -- The FFT convolution 'model' will run with 50 bins. A decent accuracy for difficult convolutions is typically only reached with n >= 1000. Suggest to increase the number of bins of the observable 'mean'.\n",
      "[#1] INFO:Caching -- RooAbsCachedPdf::getCache(model) creating new cache 0x5641e25cec10 with pdf gx_CONV_model_mean_CACHE_Obs[x,mean]_NORM_x_mean for nset (x,mean) with code 1\n",
      "[#1] INFO:Fitting -- RooAbsPdf::fitTo(model_Int[mean]_Norm[mean,x]_wrapped_pdf) fixing normalization set for coefficient determination to observables in data\n",
      "[#1] INFO:Fitting -- using generic CPU library compiled with no vectorizations\n",
      "[#1] INFO:Fitting -- Creation of NLL object took 27.3476 ms\n",
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_model_Int[mean]_Norm[mean,x]_wrapped_pdf_genData) Summation contains a RooNLLVar, using its error level\n",
      "[#0] WARNING:Minimization -- RooAbsMinimizerFcn::synchronize: WARNING: no initial error estimate available for a: using 0.5\n",
      "[#0] WARNING:Minimization -- RooAbsMinimizerFcn::synchronize: WARNING: no initial error estimate available for sigma: using 0.2\n",
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      "sigma=0.5, [#1] INFO:NumericIntegration -- RooRealIntegral::init(model_mean_Int[mean]) using numeric integrator RooIntegrator1D to calculate Int(mean)\n",
      "[#0] WARNING:Eval -- The FFT convolution 'model' will run with 50 bins. A decent accuracy for difficult convolutions is typically only reached with n >= 1000. Suggest to increase the number of bins of the observable 'mean'.\n",
      "[#1] INFO:Caching -- RooAbsCachedPdf::getCache(model) creating new cache 0x5641e7a94c80 with pdf gx_CONV_model_mean_CACHE_Obs[mean] for nset () with code 2\n",
      "\n",
      "prevFCN = 2171.275755  a=2.017, \n",
      "prevFCN = 2171.275755  a=1.983, \n",
      "prevFCN = 2171.275755  a=2.172, \n",
      "prevFCN = 2171.861215  a=1.84, \n",
      "prevFCN = 2174.775121  a=2.017, \n",
      "prevFCN = 2171.275755  a=1.983, \n",
      "prevFCN = 2171.275755  a=2, sigma=0.5067, \n",
      "prevFCN = 2171.291807  sigma=0.4934, \n",
      "prevFCN = 2171.265264  sigma=0.5029, \n",
      "prevFCN = 2171.281998  sigma=0.4971, \n",
      "prevFCN = 2171.270547  sigma=0.4843, \n",
      "prevFCN = 2171.259881  a=2.172, \n",
      "prevFCN = 2171.692149  a=1.84, \n",
      "prevFCN = 2175.249474  a=2.017, \n",
      "prevFCN = 2171.259881  a=1.983, \n",
      "prevFCN = 2171.259881  a=2.172, \n",
      "prevFCN = 2171.692149  a=1.84, \n",
      "prevFCN = 2175.249474  a=2, sigma=0.4871, \n",
      "prevFCN = 2171.26042  sigma=0.4815, \n",
      "prevFCN = 2171.260367  a=2.003, sigma=0.4688, \n",
      "prevFCN = 2171.275519  a=2.001, sigma=0.479, \n",
      "prevFCN = 2171.261603  a=2, sigma=0.482, \n",
      "prevFCN = 2171.260187  a=2, sigma=0.4832, \n",
      "prevFCN = 2171.259943  a=2, sigma=0.4838, \n",
      "prevFCN = 2171.259893  a=2, sigma=0.484, \n",
      "prevFCN = 2171.259883  a=2, sigma=0.4841, \n",
      "prevFCN = 2171.259881  a=2, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2.017, \n",
      "prevFCN = 2171.25988  a=1.983, \n",
      "prevFCN = 2171.25988  a=2.172, \n",
      "prevFCN = 2171.691427  a=1.84, \n",
      "prevFCN = 2175.251788  a=2.017, \n",
      "prevFCN = 2171.25988  a=1.983, \n",
      "prevFCN = 2171.25988  a=2, sigma=0.487, \n",
      "prevFCN = 2171.260398  sigma=0.4814, \n",
      "prevFCN = 2171.260398  sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2.017, \n",
      "prevFCN = 2171.25988  a=1.983, \n",
      "prevFCN = 2171.25988  a=2.172, \n",
      "prevFCN = 2171.691427  a=1.84, \n",
      "prevFCN = 2175.251788  a=2.083, \n",
      "prevFCN = 2171.25988  a=1.92, \n",
      "prevFCN = 2172.379556  a=2, sigma=0.487, \n",
      "prevFCN = 2171.260398  sigma=0.4814, \n",
      "prevFCN = 2171.260398  a=2.002, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=1.998, \n",
      "prevFCN = 2171.25988  a=2, sigma=0.4848, \n",
      "prevFCN = 2171.259901  sigma=0.4836, \n",
      "prevFCN = 2171.259901  sigma=0.4843, \n",
      "prevFCN = 2171.259881  sigma=0.4841, \n",
      "prevFCN = 2171.259881  a=2.083, sigma=0.487, \n",
      "prevFCN = 2171.260398  a=2.041, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2.02, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2.01, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2.005, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2.003, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2.001, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2.001, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2.083, \n",
      "prevFCN = 2171.25988  a=1.92, \n",
      "prevFCN = 2172.379556  a=2, sigma=0.4843, \n",
      "prevFCN = 2171.259881  sigma=0.4841, \n",
      "prevFCN = 2171.259881  a=2.002, sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=1.998, \n",
      "prevFCN = 2171.25988  a=2, sigma=0.4842, \n",
      "prevFCN = 2171.25988  sigma=0.4842, \n",
      "prevFCN = 2171.25988  a=2.083, sigma=0.4843, \n",
      "prevFCN = 2171.259881  a=2, sigma=0.4842, "
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooFitResult object at 0x(nil)>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "projModel.fitTo(d, Verbose=True, PrintLevel=-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d353e4a2",
   "metadata": {},
   "source": [
    "Plot data and fitted p.d.f."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4f65333b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:23.477276Z",
     "iopub.status.busy": "2026-05-19T20:30:23.477144Z",
     "iopub.status.idle": "2026-05-19T20:30:23.705689Z",
     "shell.execute_reply": "2026-05-19T20:30:23.704988Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(gx_Int[mean,x]) using numeric integrator RooIntegrator1D to calculate Int(mean)\n",
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(model_mean_Int[mean]) using numeric integrator RooIntegrator1D to calculate Int(mean)\n",
      "[#0] WARNING:Eval -- The FFT convolution 'model' will run with 50 bins. A decent accuracy for difficult convolutions is typically only reached with n >= 1000. Suggest to increase the number of bins of the observable 'mean'.\n",
      "[#1] INFO:Caching -- RooAbsCachedPdf::getCache(model) creating new cache 0x5641e81292e0 with pdf gx_CONV_model_mean_CACHE_Obs[x,mean]_NORM_x_mean for nset (x,mean) with code 1\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x5641e7eba2f0>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame = x.frame(Bins=25)\n",
    "d.plotOn(frame)\n",
    "projModel.plotOn(frame)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6435022",
   "metadata": {},
   "source": [
    "Make 2d histogram of model(x;mean)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "c826f42d",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:23.707581Z",
     "iopub.status.busy": "2026-05-19T20:30:23.707431Z",
     "iopub.status.idle": "2026-05-19T20:30:23.911205Z",
     "shell.execute_reply": "2026-05-19T20:30:23.910495Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(gx_Int[mean,x]) using numeric integrator RooIntegrator1D to calculate Int(mean)\n",
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(model_mean_Int[mean]) using numeric integrator RooIntegrator1D to calculate Int(mean)\n",
      "[#0] WARNING:Eval -- The FFT convolution 'model' will run with 50 bins. A decent accuracy for difficult convolutions is typically only reached with n >= 1000. Suggest to increase the number of bins of the observable 'mean'.\n",
      "[#1] INFO:Caching -- RooAbsCachedPdf::getCache(model) creating new cache 0x5641e806df30 with pdf gx_CONV_model_mean_CACHE_Obs[x,mean]_NORM_x for nset (x) with code 3\n"
     ]
    }
   ],
   "source": [
    "hh = model.createHistogram(\n",
    "    \"hh\",\n",
    "    x,\n",
    "    Binning=50,\n",
    "    YVar=dict(var=mean, Binning=50),\n",
    "    ConditionalObservables={mean},\n",
    ")\n",
    "hh.SetTitle(\"histogram of model(x|mean)\")\n",
    "hh.SetLineColor(\"kBlue\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ff87d4b4",
   "metadata": {},
   "source": [
    "Draw frame on canvas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "251972bb",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:23.913226Z",
     "iopub.status.busy": "2026-05-19T20:30:23.913092Z",
     "iopub.status.idle": "2026-05-19T20:30:24.146412Z",
     "shell.execute_reply": "2026-05-19T20:30:24.145584Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf211_paramconv.png has been created\n"
     ]
    }
   ],
   "source": [
    "c = ROOT.TCanvas(\"rf211_paramconv\", \"rf211_paramconv\", 800, 400)\n",
    "c.Divide(2)\n",
    "c.cd(1)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "frame.GetYaxis().SetTitleOffset(1.4)\n",
    "frame.Draw()\n",
    "c.cd(2)\n",
    "ROOT.gPad.SetLeftMargin(0.20)\n",
    "hh.GetZaxis().SetTitleOffset(2.5)\n",
    "hh.Draw(\"surf\")\n",
    "\n",
    "c.SaveAs(\"rf211_paramconv.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d84fd2f5",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "52c65780",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:24.148166Z",
     "iopub.status.busy": "2026-05-19T20:30:24.148032Z",
     "iopub.status.idle": "2026-05-19T20:30:24.346983Z",
     "shell.execute_reply": "2026-05-19T20:30:24.346069Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222624336\" style=\"width: 800px; height: 400px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222624336() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(58888,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222624336', obj, '');\n",
       "});\n",
       "\n",
       "      }\n",
       "      const servers = ['/static/', 'https://root.cern/js/7.11.0/', 'https://jsroot.gsi.de/7.11.0/'],\n",
       "            path = 'build/jsroot';\n",
       "      if (typeof JSROOT !== 'undefined')\n",
       "         execCode(JSROOT);\n",
       "      else if (typeof requirejs !== 'undefined') {\n",
       "         servers.forEach((s,i) => { servers[i] = s + path; });\n",
       "         requirejs.config({ paths: { 'jsroot' : servers } })(['jsroot'],  execCode);\n",
       "      } else {\n",
       "         const config = document.getElementById('jupyter-config-data');\n",
       "         if (config)\n",
       "            servers[0] = (JSON.parse(config.innerHTML || '{}')?.baseUrl || '/') + 'static/';\n",
       "         else\n",
       "            servers.shift();\n",
       "         function loadJsroot() {\n",
       "            return !servers.length ? 0 : import(servers.shift() + path + '.js').catch(loadJsroot).then(() => execCode(JSROOT));\n",
       "         }\n",
       "         loadJsroot();\n",
       "      }\n",
       "   }\n",
       "   process_root_plot_1779222624336();\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from ROOT import gROOT \n",
    "gROOT.GetListOfCanvases().Draw()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
