{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f3b17c86",
   "metadata": {},
   "source": [
    "# rf310_sliceplot\n",
    "Multidimensional models: projecting pdf and data slices in discrete observables\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:31 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4ac7f6c9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:03.923545Z",
     "iopub.status.busy": "2026-05-19T20:31:03.923407Z",
     "iopub.status.idle": "2026-05-19T20:31:04.876579Z",
     "shell.execute_reply": "2026-05-19T20:31:04.875933Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "da195efe",
   "metadata": {},
   "source": [
    "Create B decay pdf with mixing\n",
    "----------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4c50d1b9",
   "metadata": {},
   "source": [
    "Decay time observables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "44eb99c5",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:04.878783Z",
     "iopub.status.busy": "2026-05-19T20:31:04.878648Z",
     "iopub.status.idle": "2026-05-19T20:31:05.042545Z",
     "shell.execute_reply": "2026-05-19T20:31:05.041830Z"
    }
   },
   "outputs": [],
   "source": [
    "dt = ROOT.RooRealVar(\"dt\", \"dt\", -20, 20)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a05e47ea",
   "metadata": {},
   "source": [
    "Discrete observables mixState (B0tag==B0reco?) and tagFlav\n",
    "(B0tag==B0(bar)?)\n",
    "Define state labels of discrete observables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "5c2a8574",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:05.044137Z",
     "iopub.status.busy": "2026-05-19T20:31:05.044016Z",
     "iopub.status.idle": "2026-05-19T20:31:05.160758Z",
     "shell.execute_reply": "2026-05-19T20:31:05.160065Z"
    }
   },
   "outputs": [],
   "source": [
    "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": "29b2b81f",
   "metadata": {},
   "source": [
    "Model parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "d4ef5185",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:05.162987Z",
     "iopub.status.busy": "2026-05-19T20:31:05.162864Z",
     "iopub.status.idle": "2026-05-19T20:31:05.308859Z",
     "shell.execute_reply": "2026-05-19T20:31:05.289379Z"
    }
   },
   "outputs": [],
   "source": [
    "dm = ROOT.RooRealVar(\"dm\", \"delta m(B)\", 0.472, 0.0, 1.0)\n",
    "tau = ROOT.RooRealVar(\"tau\", \"B0 decay time\", 1.547, 1.0, 2.0)\n",
    "w = ROOT.RooRealVar(\"w\", \"Flavor Mistag rate\", 0.03, 0.0, 1.0)\n",
    "dw = ROOT.RooRealVar(\"dw\", \"Flavor Mistag rate difference between B0 and B0bar\", 0.01)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ad2f0573",
   "metadata": {},
   "source": [
    "Build a gaussian resolution model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "2ecdbb06",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:05.320397Z",
     "iopub.status.busy": "2026-05-19T20:31:05.320255Z",
     "iopub.status.idle": "2026-05-19T20:31:05.458624Z",
     "shell.execute_reply": "2026-05-19T20:31:05.458076Z"
    }
   },
   "outputs": [],
   "source": [
    "bias1 = ROOT.RooRealVar(\"bias1\", \"bias1\", 0)\n",
    "sigma1 = ROOT.RooRealVar(\"sigma1\", \"sigma1\", 0.01)\n",
    "gm1 = ROOT.RooGaussModel(\"gm1\", \"gauss model 1\", dt, bias1, sigma1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4cb2a3f",
   "metadata": {},
   "source": [
    "Construct a decay pdf, with single gaussian resolution model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "88a254ba",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:05.460409Z",
     "iopub.status.busy": "2026-05-19T20:31:05.460284Z",
     "iopub.status.idle": "2026-05-19T20:31:05.595538Z",
     "shell.execute_reply": "2026-05-19T20:31:05.595014Z"
    }
   },
   "outputs": [],
   "source": [
    "bmix_gm1 = ROOT.RooBMixDecay(\"bmix\", \"decay\", dt, mixState, tagFlav, tau, dm, w, dw, gm1, type=\"DoubleSided\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "608416f0",
   "metadata": {},
   "source": [
    "Generate BMixing data with above set of event errors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "6c125878",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:05.597168Z",
     "iopub.status.busy": "2026-05-19T20:31:05.597046Z",
     "iopub.status.idle": "2026-05-19T20:31:05.770214Z",
     "shell.execute_reply": "2026-05-19T20:31:05.769713Z"
    }
   },
   "outputs": [],
   "source": [
    "data = bmix_gm1.generate({dt, tagFlav, mixState}, 20000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "018bcc6c",
   "metadata": {},
   "source": [
    "Plot full decay distribution\n",
    "----------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e5bf2cdd",
   "metadata": {},
   "source": [
    "Create frame, data and pdf projection (integrated over tagFlav and\n",
    "mixState)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "288746e3",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:05.772286Z",
     "iopub.status.busy": "2026-05-19T20:31:05.772162Z",
     "iopub.status.idle": "2026-05-19T20:31:05.958246Z",
     "shell.execute_reply": "2026-05-19T20:31:05.957588Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooAbsReal::plotOn(bmix) plot on dt integrates over variables (tagFlav,mixState)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x564fdb41dcd0>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame = dt.frame(Title=\"Inclusive decay distribution\")\n",
    "data.plotOn(frame)\n",
    "bmix_gm1.plotOn(frame)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee1bbd59",
   "metadata": {},
   "source": [
    "Plot decay distribution for mixed and unmixed slice of mixState\n",
    "-------------------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0b287a29",
   "metadata": {},
   "source": [
    "Create frame, data (mixed only)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "7ae4e80a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:05.970372Z",
     "iopub.status.busy": "2026-05-19T20:31:05.970238Z",
     "iopub.status.idle": "2026-05-19T20:31:06.088546Z",
     "shell.execute_reply": "2026-05-19T20:31:06.088019Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooTreeData::plotOn: plotting 3787 events out of 20000 total events\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x564fdd08d820>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame2 = dt.frame(Title=\"Decay distribution of mixed events\")\n",
    "data.plotOn(frame2, Cut=\"mixState==mixState::mixed\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bbbf5d1d",
   "metadata": {},
   "source": [
    "Position slice in mixState at \"mixed\" and plot slice of pdf in mixstate\n",
    "over data (integrated over tagFlav)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f2be5300",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:06.090233Z",
     "iopub.status.busy": "2026-05-19T20:31:06.090108Z",
     "iopub.status.idle": "2026-05-19T20:31:06.221123Z",
     "shell.execute_reply": "2026-05-19T20:31:06.220247Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooAbsReal::plotOn(bmix) plot on dt represents a slice in (mixState)\n",
      "[#1] INFO:Plotting -- RooAbsReal::plotOn(bmix) plot on dt integrates over variables (tagFlav)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x564fdd08d820>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bmix_gm1.plotOn(frame2, Slice=(mixState, \"mixed\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bf2a01ae",
   "metadata": {},
   "source": [
    "Create frame, data (unmixed only)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "560afd04",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:06.222757Z",
     "iopub.status.busy": "2026-05-19T20:31:06.222623Z",
     "iopub.status.idle": "2026-05-19T20:31:06.337982Z",
     "shell.execute_reply": "2026-05-19T20:31:06.337431Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooTreeData::plotOn: plotting 16213 events out of 20000 total events\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x564fdd332e90>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame3 = dt.frame(Title=\"Decay distribution of unmixed events\")\n",
    "data.plotOn(frame3, Cut=\"mixState==mixState::unmixed\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2692622",
   "metadata": {},
   "source": [
    "Position slice in mixState at \"unmixed\" and plot slice of pdf in\n",
    "mixstate over data (integrated over tagFlav)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "842a79d4",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:06.339734Z",
     "iopub.status.busy": "2026-05-19T20:31:06.339590Z",
     "iopub.status.idle": "2026-05-19T20:31:06.581519Z",
     "shell.execute_reply": "2026-05-19T20:31:06.580991Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooAbsReal::plotOn(bmix) plot on dt represents a slice in (mixState)\n",
      "[#1] INFO:Plotting -- RooAbsReal::plotOn(bmix) plot on dt integrates over variables (tagFlav)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf310_sliceplot.png has been created\n"
     ]
    }
   ],
   "source": [
    "bmix_gm1.plotOn(frame3, Slice=(mixState, \"unmixed\"))\n",
    "\n",
    "c = ROOT.TCanvas(\"rf310_sliceplot\", \"rf310_sliceplot\", 1200, 400)\n",
    "c.Divide(3)\n",
    "c.cd(1)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "frame.GetYaxis().SetTitleOffset(1.4)\n",
    "ROOT.gPad.SetLogy()\n",
    "frame.Draw()\n",
    "c.cd(2)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "frame2.GetYaxis().SetTitleOffset(1.4)\n",
    "ROOT.gPad.SetLogy()\n",
    "frame2.Draw()\n",
    "c.cd(3)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "frame3.GetYaxis().SetTitleOffset(1.4)\n",
    "ROOT.gPad.SetLogy()\n",
    "frame3.Draw()\n",
    "\n",
    "c.SaveAs(\"rf310_sliceplot.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d0f530f8",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "2009161d",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:06.583274Z",
     "iopub.status.busy": "2026-05-19T20:31:06.583151Z",
     "iopub.status.idle": "2026-05-19T20:31:06.765059Z",
     "shell.execute_reply": "2026-05-19T20:31:06.764500Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222666755\" style=\"width: 1200px; height: 400px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222666755() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(57895,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222666755', 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_1779222666755();\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
}
