{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "b5e234cb",
   "metadata": {},
   "source": [
    "# rf101_basics\n",
    "This tutorial illustrates the basic features of RooFit.\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:28 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "524fd963",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:21.777008Z",
     "iopub.status.busy": "2026-05-19T20:28:21.776890Z",
     "iopub.status.idle": "2026-05-19T20:28:22.761990Z",
     "shell.execute_reply": "2026-05-19T20:28:22.755837Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "16f63d54",
   "metadata": {},
   "source": [
    "Set up model\n",
    "---------------------\n",
    "Declare variables x,mean,sigma with associated name, title, initial\n",
    "value and allowed range"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "81069759",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:22.763745Z",
     "iopub.status.busy": "2026-05-19T20:28:22.763576Z",
     "iopub.status.idle": "2026-05-19T20:28:22.927759Z",
     "shell.execute_reply": "2026-05-19T20:28:22.927075Z"
    }
   },
   "outputs": [],
   "source": [
    "x = ROOT.RooRealVar(\"x\", \"x\", -10, 10)\n",
    "mean = ROOT.RooRealVar(\"mean\", \"mean of gaussian\", 1, -10, 10)\n",
    "sigma = ROOT.RooRealVar(\"sigma\", \"width of gaussian\", 1, 0.1, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3358efa2",
   "metadata": {},
   "source": [
    "Build gaussian pdf in terms of x,mean and sigma"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d03ab3fa",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:22.929890Z",
     "iopub.status.busy": "2026-05-19T20:28:22.929753Z",
     "iopub.status.idle": "2026-05-19T20:28:23.052094Z",
     "shell.execute_reply": "2026-05-19T20:28:23.051422Z"
    }
   },
   "outputs": [],
   "source": [
    "gauss = ROOT.RooGaussian(\"gauss\", \"gaussian PDF\", x, mean, sigma)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45ac98ff",
   "metadata": {},
   "source": [
    "Construct plot frame in 'x'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2ad67a58",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:23.054178Z",
     "iopub.status.busy": "2026-05-19T20:28:23.054049Z",
     "iopub.status.idle": "2026-05-19T20:28:23.188777Z",
     "shell.execute_reply": "2026-05-19T20:28:23.188002Z"
    }
   },
   "outputs": [],
   "source": [
    "xframe = x.frame(Title=\"Gaussian pdf\")  # RooPlot"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71fe7b8f",
   "metadata": {},
   "source": [
    "Plot model and change parameter values\n",
    "---------------------------------------------------------------------------\n",
    "Plot gauss in frame (i.e. in x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "3e77739e",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:23.190795Z",
     "iopub.status.busy": "2026-05-19T20:28:23.190666Z",
     "iopub.status.idle": "2026-05-19T20:28:23.337443Z",
     "shell.execute_reply": "2026-05-19T20:28:23.336800Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x55a8eb2c0800>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gauss.plotOn(xframe)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "77bc83e0",
   "metadata": {},
   "source": [
    "Change the value of sigma to 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "99646912",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:23.339476Z",
     "iopub.status.busy": "2026-05-19T20:28:23.339337Z",
     "iopub.status.idle": "2026-05-19T20:28:23.448299Z",
     "shell.execute_reply": "2026-05-19T20:28:23.447142Z"
    }
   },
   "outputs": [],
   "source": [
    "sigma.setVal(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c01ee55a",
   "metadata": {},
   "source": [
    "Plot gauss in frame (i.e. in x) and draw frame on canvas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "ca9c6d5a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:23.449885Z",
     "iopub.status.busy": "2026-05-19T20:28:23.449759Z",
     "iopub.status.idle": "2026-05-19T20:28:23.563107Z",
     "shell.execute_reply": "2026-05-19T20:28:23.562478Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x55a8eb2c0800>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gauss.plotOn(xframe, LineColor=\"r\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8d24f90",
   "metadata": {},
   "source": [
    "Generate events\n",
    "-----------------------------\n",
    "Generate a dataset of 1000 events in x from gauss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "eba1ad9b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:23.565130Z",
     "iopub.status.busy": "2026-05-19T20:28:23.565001Z",
     "iopub.status.idle": "2026-05-19T20:28:23.701324Z",
     "shell.execute_reply": "2026-05-19T20:28:23.700702Z"
    }
   },
   "outputs": [],
   "source": [
    "data = gauss.generate({x}, 10000)  # ROOT.RooDataSet"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7e8eecb",
   "metadata": {},
   "source": [
    "Make a second plot frame in x and draw both the\n",
    "data and the pdf in the frame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d1a5e5e5",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:23.703376Z",
     "iopub.status.busy": "2026-05-19T20:28:23.703251Z",
     "iopub.status.idle": "2026-05-19T20:28:23.831304Z",
     "shell.execute_reply": "2026-05-19T20:28:23.830641Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x55a8eb6f7770>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xframe2 = x.frame(Title=\"Gaussian pdf with data\")  # RooPlot\n",
    "data.plotOn(xframe2)\n",
    "gauss.plotOn(xframe2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d1b8ea73",
   "metadata": {},
   "source": [
    "Fit model to data\n",
    "-----------------------------\n",
    "Fit pdf to data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "cfecd5e0",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:23.833310Z",
     "iopub.status.busy": "2026-05-19T20:28:23.833181Z",
     "iopub.status.idle": "2026-05-19T20:28:24.018383Z",
     "shell.execute_reply": "2026-05-19T20:28:24.017799Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Fitting -- RooAbsPdf::fitTo(gauss_over_gauss_Int[x]) 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 792.183 μs\n",
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_gauss_over_gauss_Int[x]_gaussData) Summation contains a RooNLLVar, using its error level\n",
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooFitResult object at 0x(nil)>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gauss.fitTo(data, PrintLevel=-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "91b8a905",
   "metadata": {},
   "source": [
    "Print values of mean and sigma (that now reflect fitted values and\n",
    "errors)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "d777adb2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:24.020528Z",
     "iopub.status.busy": "2026-05-19T20:28:24.020403Z",
     "iopub.status.idle": "2026-05-19T20:28:24.129317Z",
     "shell.execute_reply": "2026-05-19T20:28:24.128729Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RooRealVar::mean = 1.01746 +/- 0.0300144  L(-10 - 10) \n",
      "RooRealVar::sigma = 2.9787 +/- 0.0219217  L(0.1 - 10) \n"
     ]
    }
   ],
   "source": [
    "mean.Print()\n",
    "sigma.Print()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "87497d6a",
   "metadata": {},
   "source": [
    "Draw all frames on a canvas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "c0ffbe1a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:24.131068Z",
     "iopub.status.busy": "2026-05-19T20:28:24.130944Z",
     "iopub.status.idle": "2026-05-19T20:28:24.349174Z",
     "shell.execute_reply": "2026-05-19T20:28:24.348520Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf101_basics.png has been created\n"
     ]
    }
   ],
   "source": [
    "c = ROOT.TCanvas(\"rf101_basics\", \"rf101_basics\", 800, 400)\n",
    "c.Divide(2)\n",
    "c.cd(1)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "xframe.GetYaxis().SetTitleOffset(1.6)\n",
    "xframe.Draw()\n",
    "c.cd(2)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "xframe2.GetYaxis().SetTitleOffset(1.6)\n",
    "xframe2.Draw()\n",
    "\n",
    "c.SaveAs(\"rf101_basics.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ecd0c9d1",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "ace03985",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:28:24.351267Z",
     "iopub.status.busy": "2026-05-19T20:28:24.351139Z",
     "iopub.status.idle": "2026-05-19T20:28:24.532482Z",
     "shell.execute_reply": "2026-05-19T20:28:24.531875Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222504523\" style=\"width: 800px; height: 400px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222504523() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(43546,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222504523', 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_1779222504523();\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
}
