{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e12b4b19",
   "metadata": {},
   "source": [
    "# rf108_plotbinning\n",
    "Basic functionality: plotting unbinned data with alternate and variable binnings\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": "f9c7a7ff",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:14.235239Z",
     "iopub.status.busy": "2026-05-19T20:29:14.235127Z",
     "iopub.status.idle": "2026-05-19T20:29:15.210182Z",
     "shell.execute_reply": "2026-05-19T20:29:15.209519Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7cf4b972",
   "metadata": {},
   "source": [
    "Set up model\n",
    "---------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d1391b1c",
   "metadata": {},
   "source": [
    "Build a B decay pdf with mixing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b9084a7f",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:15.219281Z",
     "iopub.status.busy": "2026-05-19T20:29:15.219145Z",
     "iopub.status.idle": "2026-05-19T20:29:15.391616Z",
     "shell.execute_reply": "2026-05-19T20:29:15.391021Z"
    }
   },
   "outputs": [],
   "source": [
    "dt = ROOT.RooRealVar(\"dt\", \"dt\", -20, 20)\n",
    "dm = ROOT.RooRealVar(\"dm\", \"dm\", 0.472)\n",
    "tau = ROOT.RooRealVar(\"tau\", \"tau\", 1.547)\n",
    "w = ROOT.RooRealVar(\"w\", \"mistag rate\", 0.1)\n",
    "dw = ROOT.RooRealVar(\"dw\", \"delta mistag rate\", 0.0)\n",
    "\n",
    "mixState = ROOT.RooCategory(\"mixState\", \"B0/B0bar mixing state\", {\"mixed\": -1, \"unmixed\": 1})\n",
    "tagFlav = ROOT.RooCategory(\"tagFlav\", \"Flavour of the tagged B0\", {\"B0\": 1, \"B0bar\": -1})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e43b9402",
   "metadata": {},
   "source": [
    "Build a gaussian resolution model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "07a8c9bd",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:15.393601Z",
     "iopub.status.busy": "2026-05-19T20:29:15.393479Z",
     "iopub.status.idle": "2026-05-19T20:29:15.515391Z",
     "shell.execute_reply": "2026-05-19T20:29:15.514771Z"
    }
   },
   "outputs": [],
   "source": [
    "dterr = ROOT.RooRealVar(\"dterr\", \"dterr\", 0.1, 1.0)\n",
    "bias1 = ROOT.RooRealVar(\"bias1\", \"bias1\", 0)\n",
    "sigma1 = ROOT.RooRealVar(\"sigma1\", \"sigma1\", 0.1)\n",
    "gm1 = ROOT.RooGaussModel(\"gm1\", \"gauss model 1\", dt, bias1, sigma1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b05a58d",
   "metadata": {},
   "source": [
    "Construct Bdecay (x) gauss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "07571f07",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:15.517148Z",
     "iopub.status.busy": "2026-05-19T20:29:15.517028Z",
     "iopub.status.idle": "2026-05-19T20:29:15.648146Z",
     "shell.execute_reply": "2026-05-19T20:29:15.647491Z"
    }
   },
   "outputs": [],
   "source": [
    "bmix = ROOT.RooBMixDecay(\"bmix\", \"decay\", dt, mixState, tagFlav, tau, dm, w, dw, gm1, type=\"DoubleSided\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86df2d5e",
   "metadata": {},
   "source": [
    "Sample data from model\n",
    "--------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9aa1f3d",
   "metadata": {},
   "source": [
    "Sample 2000 events in (dt,mixState,tagFlav) from bmix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "b77ea4cd",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:15.650042Z",
     "iopub.status.busy": "2026-05-19T20:29:15.649903Z",
     "iopub.status.idle": "2026-05-19T20:29:15.802762Z",
     "shell.execute_reply": "2026-05-19T20:29:15.802082Z"
    }
   },
   "outputs": [],
   "source": [
    "data = bmix.generate({dt, mixState, tagFlav}, 2000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f8c3e755",
   "metadata": {},
   "source": [
    "Show dt distribution with custom binning\n",
    "-------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8934a07",
   "metadata": {},
   "source": [
    "Make plot of dt distribution of data in range (-15,15) with fine binning\n",
    "for dt>0 and coarse binning for dt<0"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b6dd541c",
   "metadata": {},
   "source": [
    "Create binning object with range (-15,15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "081bca98",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:15.804470Z",
     "iopub.status.busy": "2026-05-19T20:29:15.804352Z",
     "iopub.status.idle": "2026-05-19T20:29:15.917451Z",
     "shell.execute_reply": "2026-05-19T20:29:15.916797Z"
    }
   },
   "outputs": [],
   "source": [
    "tbins = ROOT.RooBinning(-15, 15)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f46bc0d9",
   "metadata": {},
   "source": [
    "Add 60 bins with uniform spacing in range (-15,0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "85164bed",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:15.919286Z",
     "iopub.status.busy": "2026-05-19T20:29:15.919076Z",
     "iopub.status.idle": "2026-05-19T20:29:16.026444Z",
     "shell.execute_reply": "2026-05-19T20:29:16.025776Z"
    }
   },
   "outputs": [],
   "source": [
    "tbins.addUniform(60, -15, 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8868aaf",
   "metadata": {},
   "source": [
    "Add 15 bins with uniform spacing in range (0,15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "85ffd2aa",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:16.028124Z",
     "iopub.status.busy": "2026-05-19T20:29:16.028006Z",
     "iopub.status.idle": "2026-05-19T20:29:16.131364Z",
     "shell.execute_reply": "2026-05-19T20:29:16.130759Z"
    }
   },
   "outputs": [],
   "source": [
    "tbins.addUniform(15, 0, 15)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5aab88e",
   "metadata": {},
   "source": [
    "Make plot with specified binning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "235952b6",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:16.133123Z",
     "iopub.status.busy": "2026-05-19T20:29:16.133004Z",
     "iopub.status.idle": "2026-05-19T20:29:16.322933Z",
     "shell.execute_reply": "2026-05-19T20:29:16.322373Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooAbsReal::plotOn(bmix) plot on dt integrates over variables (mixState,tagFlav)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x559a47ffb370>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtframe = dt.frame(Range=(-15, 15), Title=\"dt distribution with custom binning\")\n",
    "data.plotOn(dtframe, Binning=tbins)\n",
    "bmix.plotOn(dtframe)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "860a6c59",
   "metadata": {},
   "source": [
    "NB: Note that bin density for each bin is adjusted to that of default frame binning as shown\n",
    "in Y axis label (100 bins -. Events/0.4*Xaxis-dim) so that all bins\n",
    "represent a consistent density distribution"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "42ab4698",
   "metadata": {},
   "source": [
    "Show mixstate asymmetry with custom binning\n",
    "------------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c467ae94",
   "metadata": {},
   "source": [
    "Make plot of dt distribution of data asymmetry in 'mixState' with\n",
    "variable binning"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "29ab3974",
   "metadata": {},
   "source": [
    "Create binning object with range (-10,10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "d3dd2154",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:16.324991Z",
     "iopub.status.busy": "2026-05-19T20:29:16.324870Z",
     "iopub.status.idle": "2026-05-19T20:29:16.428186Z",
     "shell.execute_reply": "2026-05-19T20:29:16.427565Z"
    }
   },
   "outputs": [],
   "source": [
    "abins = ROOT.RooBinning(-10, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "469addf4",
   "metadata": {},
   "source": [
    "Add boundaries at 0, (-1,1), (-2,2), (-3,3), (-4,4) and (-6,6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "8c26b6d1",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:16.430131Z",
     "iopub.status.busy": "2026-05-19T20:29:16.430011Z",
     "iopub.status.idle": "2026-05-19T20:29:16.539620Z",
     "shell.execute_reply": "2026-05-19T20:29:16.539177Z"
    }
   },
   "outputs": [],
   "source": [
    "abins.addBoundary(0)\n",
    "abins.addBoundaryPair(1)\n",
    "abins.addBoundaryPair(2)\n",
    "abins.addBoundaryPair(3)\n",
    "abins.addBoundaryPair(4)\n",
    "abins.addBoundaryPair(6)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6e0ce96",
   "metadata": {},
   "source": [
    "Create plot frame in dt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "aff4046f",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:16.541720Z",
     "iopub.status.busy": "2026-05-19T20:29:16.541581Z",
     "iopub.status.idle": "2026-05-19T20:29:16.645172Z",
     "shell.execute_reply": "2026-05-19T20:29:16.644533Z"
    }
   },
   "outputs": [],
   "source": [
    "aframe = dt.frame(Range=(-10, 10), Title=\"mixState asymmetry distribution with custom binning\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee31cfb6",
   "metadata": {},
   "source": [
    "Plot mixState asymmetry of data with specified customg binning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "02cc4d76",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:16.646799Z",
     "iopub.status.busy": "2026-05-19T20:29:16.646680Z",
     "iopub.status.idle": "2026-05-19T20:29:16.769751Z",
     "shell.execute_reply": "2026-05-19T20:29:16.768992Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x559a481ae1f0>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.plotOn(aframe, Asymmetry=mixState, Binning=abins)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ead56ede",
   "metadata": {},
   "source": [
    "Plot corresponding property of pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "43f52caf",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:16.771320Z",
     "iopub.status.busy": "2026-05-19T20:29:16.771199Z",
     "iopub.status.idle": "2026-05-19T20:29:16.886201Z",
     "shell.execute_reply": "2026-05-19T20:29:16.885648Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooAbsReal::plotAsymOn(bmix) plot on dt projects variables (tagFlav)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x559a481ae1f0>"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bmix.plotOn(aframe, Asymmetry=mixState)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ec63ea2",
   "metadata": {},
   "source": [
    "Adjust vertical range of plot to sensible values for an asymmetry"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "5d127876",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:16.888155Z",
     "iopub.status.busy": "2026-05-19T20:29:16.888029Z",
     "iopub.status.idle": "2026-05-19T20:29:16.997668Z",
     "shell.execute_reply": "2026-05-19T20:29:16.997119Z"
    }
   },
   "outputs": [],
   "source": [
    "aframe.SetMinimum(-1.1)\n",
    "aframe.SetMaximum(1.1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "97b18ca9",
   "metadata": {},
   "source": [
    "NB: For asymmetry distributions no density corrects are needed (and are\n",
    "thus not applied)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "00bcc5eb",
   "metadata": {},
   "source": [
    "Draw plots on canvas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "01a285a2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:16.999757Z",
     "iopub.status.busy": "2026-05-19T20:29:16.999633Z",
     "iopub.status.idle": "2026-05-19T20:29:17.214616Z",
     "shell.execute_reply": "2026-05-19T20:29:17.214070Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf108_plotbinning.png has been created\n"
     ]
    }
   ],
   "source": [
    "c = ROOT.TCanvas(\"rf108_plotbinning\", \"rf108_plotbinning\", 800, 400)\n",
    "c.Divide(2)\n",
    "c.cd(1)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "dtframe.GetYaxis().SetTitleOffset(1.6)\n",
    "dtframe.Draw()\n",
    "c.cd(2)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "aframe.GetYaxis().SetTitleOffset(1.6)\n",
    "aframe.Draw()\n",
    "\n",
    "c.SaveAs(\"rf108_plotbinning.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a073cae",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "da932ccf",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:29:17.216685Z",
     "iopub.status.busy": "2026-05-19T20:29:17.216538Z",
     "iopub.status.idle": "2026-05-19T20:29:17.397093Z",
     "shell.execute_reply": "2026-05-19T20:29:17.396530Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222557387\" style=\"width: 800px; height: 400px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222557387() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(40080,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222557387', 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_1779222557387();\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
}
