{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a56deeb3",
   "metadata": {},
   "source": [
    "# rf106_plotdecoration\n",
    "Basic functionality: adding boxes with parameters to RooPlots and decorating with arrows, etc...\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:29 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "99b97e9c",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:03.110079Z",
     "iopub.status.busy": "2026-05-19T20:29:03.109964Z",
     "iopub.status.idle": "2026-05-19T20:29:04.069123Z",
     "shell.execute_reply": "2026-05-19T20:29:04.068513Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72fa77ef",
   "metadata": {},
   "source": [
    "Set up model\n",
    "---------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "586af1d5",
   "metadata": {},
   "source": [
    "Create observables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d1b42969",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:04.071584Z",
     "iopub.status.busy": "2026-05-19T20:29:04.071452Z",
     "iopub.status.idle": "2026-05-19T20:29:04.232332Z",
     "shell.execute_reply": "2026-05-19T20:29:04.231746Z"
    }
   },
   "outputs": [],
   "source": [
    "x = ROOT.RooRealVar(\"x\", \"x\", -10, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60588fee",
   "metadata": {},
   "source": [
    "Create Gaussian"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "fef92f02",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:04.234399Z",
     "iopub.status.busy": "2026-05-19T20:29:04.234271Z",
     "iopub.status.idle": "2026-05-19T20:29:04.361262Z",
     "shell.execute_reply": "2026-05-19T20:29:04.360648Z"
    }
   },
   "outputs": [],
   "source": [
    "sigma = ROOT.RooRealVar(\"sigma\", \"sigma\", 1, 0.1, 10)\n",
    "mean = ROOT.RooRealVar(\"mean\", \"mean\", -3, -10, 10)\n",
    "gauss = ROOT.RooGaussian(\"gauss\", \"gauss\", x, mean, sigma)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ee82821",
   "metadata": {},
   "source": [
    "Generate a sample of 1000 events with sigma=3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9083f5a8",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:04.363804Z",
     "iopub.status.busy": "2026-05-19T20:29:04.363677Z",
     "iopub.status.idle": "2026-05-19T20:29:04.500773Z",
     "shell.execute_reply": "2026-05-19T20:29:04.500116Z"
    }
   },
   "outputs": [],
   "source": [
    "data = gauss.generate({x}, 1000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a92a0e3",
   "metadata": {},
   "source": [
    "Fit pdf to data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "35af5dc7",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:04.503379Z",
     "iopub.status.busy": "2026-05-19T20:29:04.503254Z",
     "iopub.status.idle": "2026-05-19T20:29:04.699256Z",
     "shell.execute_reply": "2026-05-19T20:29:04.698519Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooFitResult object at 0x(nil)>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "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 6.67798 ms\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"
     ]
    }
   ],
   "source": [
    "gauss.fitTo(data, PrintLevel=-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d9c963a",
   "metadata": {},
   "source": [
    "Plot pdf and data\n",
    "-------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3eb1a709",
   "metadata": {},
   "source": [
    "Overlay projection of gauss on data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "2ffe5661",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:04.701171Z",
     "iopub.status.busy": "2026-05-19T20:29:04.701043Z",
     "iopub.status.idle": "2026-05-19T20:29:04.881051Z",
     "shell.execute_reply": "2026-05-19T20:29:04.880416Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x55ecdbfd58b0>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame = x.frame(Name=\"xframe\", Title=\"RooPlot with decorations\", Bins=40)\n",
    "data.plotOn(frame)\n",
    "gauss.plotOn(frame)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "36d97e00",
   "metadata": {},
   "source": [
    "Add box with pdf parameters\n",
    "-----------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f20767e",
   "metadata": {},
   "source": [
    "Left edge of box starts at 55% of Xaxis)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "0520a6c1",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:04.883122Z",
     "iopub.status.busy": "2026-05-19T20:29:04.882999Z",
     "iopub.status.idle": "2026-05-19T20:29:05.012663Z",
     "shell.execute_reply": "2026-05-19T20:29:05.011935Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x55ecdbfd58b0>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gauss.paramOn(frame, Layout=0.55)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4514e524",
   "metadata": {},
   "source": [
    "Add box with data statistics\n",
    "-------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "768ef7b3",
   "metadata": {},
   "source": [
    "X size of box is from 55% to 99% of Xaxis range, of box is at 80% of\n",
    "Yaxis range)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "7c4eb2f2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:05.014501Z",
     "iopub.status.busy": "2026-05-19T20:29:05.014376Z",
     "iopub.status.idle": "2026-05-19T20:29:05.140310Z",
     "shell.execute_reply": "2026-05-19T20:29:05.139747Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x55ecdbfd58b0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.statOn(frame, Layout=(0.55, 0.99, 0.8))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "84146129",
   "metadata": {},
   "source": [
    "Add text and arrow\n",
    "-----------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eea49fb0",
   "metadata": {},
   "source": [
    "Add text to frame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "fa9dde67",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:05.142488Z",
     "iopub.status.busy": "2026-05-19T20:29:05.142366Z",
     "iopub.status.idle": "2026-05-19T20:29:05.261445Z",
     "shell.execute_reply": "2026-05-19T20:29:05.260897Z"
    }
   },
   "outputs": [],
   "source": [
    "txt = ROOT.TText(2, 100, \"Signal\")\n",
    "txt.SetTextSize(0.04)\n",
    "txt.SetTextColor(\"kRed\")\n",
    "frame.addObject(txt)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5de25608",
   "metadata": {},
   "source": [
    "Add arrow to frame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "cf0ee468",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:05.263480Z",
     "iopub.status.busy": "2026-05-19T20:29:05.263355Z",
     "iopub.status.idle": "2026-05-19T20:29:05.379810Z",
     "shell.execute_reply": "2026-05-19T20:29:05.379163Z"
    }
   },
   "outputs": [],
   "source": [
    "arrow = ROOT.TArrow(2, 100, -1, 50, 0.01, \"|>\")\n",
    "arrow.SetLineColor(\"kRed\")\n",
    "arrow.SetFillColor(\"kRed\")\n",
    "arrow.SetLineWidth(3)\n",
    "frame.addObject(arrow)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2fb1b63b",
   "metadata": {},
   "source": [
    "Persist frame with all decorations in ROOT file\n",
    "---------------------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "8fe40ca8",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:05.381915Z",
     "iopub.status.busy": "2026-05-19T20:29:05.381753Z",
     "iopub.status.idle": "2026-05-19T20:29:05.632363Z",
     "shell.execute_reply": "2026-05-19T20:29:05.631649Z"
    }
   },
   "outputs": [],
   "source": [
    "f = ROOT.TFile(\"rf106_plotdecoration.root\", \"RECREATE\")\n",
    "frame.Write()\n",
    "f.Close()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fbcc2426",
   "metadata": {},
   "source": [
    "To read back and plot frame with all decorations in clean root session do\n",
    "root> ROOT.TFile f(\"rf106_plotdecoration.root\")\n",
    "root>  xframe.Draw()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "92e86493",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:05.634857Z",
     "iopub.status.busy": "2026-05-19T20:29:05.634681Z",
     "iopub.status.idle": "2026-05-19T20:29:05.843279Z",
     "shell.execute_reply": "2026-05-19T20:29:05.842688Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf106_plotdecoration.png has been created\n"
     ]
    }
   ],
   "source": [
    "c = ROOT.TCanvas(\"rf106_plotdecoration\", \"rf106_plotdecoration\", 600, 600)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "frame.GetYaxis().SetTitleOffset(1.6)\n",
    "frame.Draw()\n",
    "\n",
    "c.SaveAs(\"rf106_plotdecoration.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b787ec73",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "a3df2018",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:05.844884Z",
     "iopub.status.busy": "2026-05-19T20:29:05.844761Z",
     "iopub.status.idle": "2026-05-19T20:29:06.017438Z",
     "shell.execute_reply": "2026-05-19T20:29:06.016832Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222546008\" style=\"width: 600px; height: 600px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222546008() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(27977,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222546008', 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_1779222546008();\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
}
