{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "b3bcad3a",
   "metadata": {},
   "source": [
    "# rf501_simultaneouspdf\n",
    "Organization and simultaneous fits: using simultaneous pdfs to describe simultaneous\n",
    "fits to multiple datasets\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:32 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4ac7a92c",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:05.455972Z",
     "iopub.status.busy": "2026-05-19T20:32:05.455848Z",
     "iopub.status.idle": "2026-05-19T20:32:06.409622Z",
     "shell.execute_reply": "2026-05-19T20:32:06.409172Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "83997a10",
   "metadata": {},
   "source": [
    "Create model for physics sample\n",
    "-------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ceed8068",
   "metadata": {},
   "source": [
    "Create observables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "8503e75a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:06.433273Z",
     "iopub.status.busy": "2026-05-19T20:32:06.433117Z",
     "iopub.status.idle": "2026-05-19T20:32:06.600937Z",
     "shell.execute_reply": "2026-05-19T20:32:06.600251Z"
    }
   },
   "outputs": [],
   "source": [
    "x = ROOT.RooRealVar(\"x\", \"x\", -8, 8)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d370a2a9",
   "metadata": {},
   "source": [
    "Construct signal pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "07f85fc5",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:06.603247Z",
     "iopub.status.busy": "2026-05-19T20:32:06.603116Z",
     "iopub.status.idle": "2026-05-19T20:32:06.730034Z",
     "shell.execute_reply": "2026-05-19T20:32:06.729273Z"
    }
   },
   "outputs": [],
   "source": [
    "mean = ROOT.RooRealVar(\"mean\", \"mean\", 0, -8, 8)\n",
    "sigma = ROOT.RooRealVar(\"sigma\", \"sigma\", 0.3, 0.1, 10)\n",
    "gx = ROOT.RooGaussian(\"gx\", \"gx\", x, mean, sigma)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee0ca0bd",
   "metadata": {},
   "source": [
    "Construct background pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "70360f4f",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:06.738067Z",
     "iopub.status.busy": "2026-05-19T20:32:06.737920Z",
     "iopub.status.idle": "2026-05-19T20:32:06.921721Z",
     "shell.execute_reply": "2026-05-19T20:32:06.920947Z"
    }
   },
   "outputs": [],
   "source": [
    "a0 = ROOT.RooRealVar(\"a0\", \"a0\", -0.1, -1, 1)\n",
    "a1 = ROOT.RooRealVar(\"a1\", \"a1\", 0.004, -1, 1)\n",
    "px = ROOT.RooChebychev(\"px\", \"px\", x, [a0, a1])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aa9251af",
   "metadata": {},
   "source": [
    "Construct composite pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "6ac7c11f",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:06.923511Z",
     "iopub.status.busy": "2026-05-19T20:32:06.923352Z",
     "iopub.status.idle": "2026-05-19T20:32:07.040907Z",
     "shell.execute_reply": "2026-05-19T20:32:07.040243Z"
    }
   },
   "outputs": [],
   "source": [
    "f = ROOT.RooRealVar(\"f\", \"f\", 0.2, 0.0, 1.0)\n",
    "model = ROOT.RooAddPdf(\"model\", \"model\", [gx, px], [f])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce844c44",
   "metadata": {},
   "source": [
    "Create model for control sample\n",
    "--------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e0fcf1c",
   "metadata": {},
   "source": [
    "Construct signal pdf.\n",
    "NOTE that sigma is shared with the signal sample model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "5b21e2e3",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:07.043072Z",
     "iopub.status.busy": "2026-05-19T20:32:07.042912Z",
     "iopub.status.idle": "2026-05-19T20:32:07.147186Z",
     "shell.execute_reply": "2026-05-19T20:32:07.146485Z"
    }
   },
   "outputs": [],
   "source": [
    "mean_ctl = ROOT.RooRealVar(\"mean_ctl\", \"mean_ctl\", -3, -8, 8)\n",
    "gx_ctl = ROOT.RooGaussian(\"gx_ctl\", \"gx_ctl\", x, mean_ctl, sigma)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1672883b",
   "metadata": {},
   "source": [
    "Construct the background pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "50d3cbe4",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:07.149482Z",
     "iopub.status.busy": "2026-05-19T20:32:07.149310Z",
     "iopub.status.idle": "2026-05-19T20:32:07.253342Z",
     "shell.execute_reply": "2026-05-19T20:32:07.252749Z"
    }
   },
   "outputs": [],
   "source": [
    "a0_ctl = ROOT.RooRealVar(\"a0_ctl\", \"a0_ctl\", -0.1, -1, 1)\n",
    "a1_ctl = ROOT.RooRealVar(\"a1_ctl\", \"a1_ctl\", 0.5, -0.1, 1)\n",
    "px_ctl = ROOT.RooChebychev(\"px_ctl\", \"px_ctl\", x, [a0_ctl, a1_ctl])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "21d17cf3",
   "metadata": {},
   "source": [
    "Construct the composite model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "98402487",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:07.255332Z",
     "iopub.status.busy": "2026-05-19T20:32:07.255207Z",
     "iopub.status.idle": "2026-05-19T20:32:07.358769Z",
     "shell.execute_reply": "2026-05-19T20:32:07.358237Z"
    }
   },
   "outputs": [],
   "source": [
    "f_ctl = ROOT.RooRealVar(\"f_ctl\", \"f_ctl\", 0.5, 0.0, 1.0)\n",
    "model_ctl = ROOT.RooAddPdf(\"model_ctl\", \"model_ctl\", [gx_ctl, px_ctl], [f_ctl])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7091310f",
   "metadata": {},
   "source": [
    "Generate events for both samples\n",
    "---------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f0313815",
   "metadata": {},
   "source": [
    "Generate 1000 events in x and y from model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "ce83e33f",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:07.361078Z",
     "iopub.status.busy": "2026-05-19T20:32:07.360957Z",
     "iopub.status.idle": "2026-05-19T20:32:07.508729Z",
     "shell.execute_reply": "2026-05-19T20:32:07.508256Z"
    }
   },
   "outputs": [],
   "source": [
    "data = model.generate({x}, 1000)\n",
    "data_ctl = model_ctl.generate({x}, 2000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2cb043f5",
   "metadata": {},
   "source": [
    "Create index category and join samples\n",
    "---------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f00b9c1",
   "metadata": {},
   "source": [
    "Define category to distinguish physics and control samples events"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "901c2f4e",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:07.510681Z",
     "iopub.status.busy": "2026-05-19T20:32:07.510544Z",
     "iopub.status.idle": "2026-05-19T20:32:07.629359Z",
     "shell.execute_reply": "2026-05-19T20:32:07.628646Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sample = ROOT.RooCategory(\"sample\", \"sample\")\n",
    "sample.defineType(\"physics\")\n",
    "sample.defineType(\"control\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "133f97d8",
   "metadata": {},
   "source": [
    "Construct combined dataset in (x,sample)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "a08b3ac1",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:07.631028Z",
     "iopub.status.busy": "2026-05-19T20:32:07.630905Z",
     "iopub.status.idle": "2026-05-19T20:32:07.927797Z",
     "shell.execute_reply": "2026-05-19T20:32:07.927168Z"
    }
   },
   "outputs": [],
   "source": [
    "combData = ROOT.RooDataSet(\n",
    "    \"combData\",\n",
    "    \"combined data\",\n",
    "    {x},\n",
    "    Index=sample,\n",
    "    Import={\"physics\": data, \"control\": data_ctl},\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0b748e0",
   "metadata": {},
   "source": [
    "Construct a simultaneous pdf in (x, sample)\n",
    "-----------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "242e488f",
   "metadata": {},
   "source": [
    "Construct a simultaneous pdf using category sample as index: associate model\n",
    "with the physics state and model_ctl with the control state"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "e12700c2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:07.929618Z",
     "iopub.status.busy": "2026-05-19T20:32:07.929485Z",
     "iopub.status.idle": "2026-05-19T20:32:08.105257Z",
     "shell.execute_reply": "2026-05-19T20:32:08.104766Z"
    }
   },
   "outputs": [],
   "source": [
    "simPdf = ROOT.RooSimultaneous(\"simPdf\", \"simultaneous pdf\", {\"physics\": model, \"control\": model_ctl}, sample)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1808d3fc",
   "metadata": {},
   "source": [
    "Perform a simultaneous fit\n",
    "---------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e50269f9",
   "metadata": {},
   "source": [
    "Perform simultaneous fit of model to data and model_ctl to data_ctl"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "a34be389",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:08.107104Z",
     "iopub.status.busy": "2026-05-19T20:32:08.106971Z",
     "iopub.status.idle": "2026-05-19T20:32:08.301107Z",
     "shell.execute_reply": "2026-05-19T20:32:08.300538Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Fitting -- RooAbsPdf::fitTo(simPdf) 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 1.25343 ms\n",
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_simPdf_combData) Summation contains a RooNLLVar, using its error level\n",
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      "\n",
      "  RooFitResult: minimized FCN value: 8630.62, estimated distance to minimum: 0.000174671\n",
      "                covariance matrix quality: Full, accurate covariance matrix\n",
      "                Status : MINIMIZE=0 HESSE=0 \n",
      "\n",
      "    Floating Parameter    FinalValue +/-  Error   \n",
      "  --------------------  --------------------------\n",
      "                    a0    6.7634e-02 +/-  6.04e-02\n",
      "                a0_ctl   -1.5627e-01 +/-  5.53e-02\n",
      "                    a1   -3.8353e-03 +/-  6.32e-02\n",
      "                a1_ctl    3.8442e-01 +/-  4.35e-02\n",
      "                     f    1.7952e-01 +/-  1.55e-02\n",
      "                 f_ctl    5.2710e-01 +/-  1.25e-02\n",
      "                  mean    1.4991e-02 +/-  3.34e-02\n",
      "              mean_ctl   -3.0079e+00 +/-  1.04e-02\n",
      "                 sigma    3.0450e-01 +/-  8.33e-03\n",
      "\n"
     ]
    }
   ],
   "source": [
    "fitResult = simPdf.fitTo(combData, PrintLevel=-1, Save=True)\n",
    "fitResult.Print()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e0a1e27",
   "metadata": {},
   "source": [
    "Plot model slices on data slices\n",
    "----------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8198aaf0",
   "metadata": {},
   "source": [
    "Make a frame for the physics sample"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "a5d6b771",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:08.302667Z",
     "iopub.status.busy": "2026-05-19T20:32:08.302518Z",
     "iopub.status.idle": "2026-05-19T20:32:08.433708Z",
     "shell.execute_reply": "2026-05-19T20:32:08.433151Z"
    }
   },
   "outputs": [],
   "source": [
    "frame1 = x.frame(Title=\"Physics sample\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc7360c4",
   "metadata": {},
   "source": [
    "Plot all data tagged as physics sample"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "b5c82da2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:08.435378Z",
     "iopub.status.busy": "2026-05-19T20:32:08.435260Z",
     "iopub.status.idle": "2026-05-19T20:32:08.586297Z",
     "shell.execute_reply": "2026-05-19T20:32:08.585714Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x5584dd0cf2a0>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "slicedData1 = combData.reduce(Cut=\"sample==sample::physics\")\n",
    "slicedData1.plotOn(frame1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3186bc7",
   "metadata": {},
   "source": [
    "Plot \"physics\" slice of simultaneous pdf."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "8fa883a8",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:08.588074Z",
     "iopub.status.busy": "2026-05-19T20:32:08.587956Z",
     "iopub.status.idle": "2026-05-19T20:32:08.737625Z",
     "shell.execute_reply": "2026-05-19T20:32:08.737059Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x5584dd0cf2a0>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) directly selected PDF components: (px)\n",
      "[#1] INFO:Plotting -- RooAbsPdf::plotOn(model) indirectly selected PDF components: ()\n"
     ]
    }
   ],
   "source": [
    "simPdf.getPdf(\"physics\").plotOn(frame1)\n",
    "simPdf.getPdf(\"physics\").plotOn(frame1, Components=\"px\", LineStyle=\"--\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de3b65ea",
   "metadata": {},
   "source": [
    "The same plot for the control sample slice. We do this with a different\n",
    "approach, using the data slice for the projection. This approach is more\n",
    "general, because you can plot sums of slices by using logical or in the\n",
    "Cut() command.\n",
    "NBL You _must_ project the sample index category with data using ProjWData\n",
    "as a RooSimultaneous makes no prediction on the shape in the index category\n",
    "and can thus not be integrated.\n",
    "In other words: Since the PDF doesn't know the number of events in the different\n",
    "category states, it doesn't know how much of each component it has to project out.\n",
    "This information is read from the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "72871de3",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:08.739259Z",
     "iopub.status.busy": "2026-05-19T20:32:08.739094Z",
     "iopub.status.idle": "2026-05-19T20:32:08.892149Z",
     "shell.execute_reply": "2026-05-19T20:32:08.891549Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooSimultaneous::plotOn(simPdf) plot on x averages with data index category (sample)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x5584dd188d00>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooSimultaneous::plotOn(simPdf) plot on x averages with data index category (sample)\n",
      "[#1] INFO:Plotting -- RooAbsPdf::plotOn(simPdf) directly selected PDF components: (px_ctl)\n",
      "[#1] INFO:Plotting -- RooAbsPdf::plotOn(simPdf) indirectly selected PDF components: (model_ctl)\n"
     ]
    }
   ],
   "source": [
    "frame2 = x.frame(Title=\"Control sample\")\n",
    "slicedData2 = combData.reduce(Cut=\"sample==sample::control\")\n",
    "slicedData2.plotOn(frame2)\n",
    "simPdf.plotOn(frame2, ProjWData=(sample, slicedData2))\n",
    "simPdf.plotOn(frame2, Components=\"px_ctl\", ProjWData=(sample, slicedData2), LineStyle=\"--\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0e0b07a",
   "metadata": {},
   "source": [
    "The same plot for all the phase space. Here, we can just use the original\n",
    "combined dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "9a801cab",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:08.893558Z",
     "iopub.status.busy": "2026-05-19T20:32:08.893430Z",
     "iopub.status.idle": "2026-05-19T20:32:09.155057Z",
     "shell.execute_reply": "2026-05-19T20:32:09.154522Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooSimultaneous::plotOn(simPdf) plot on x averages with data index category (sample)\n",
      "[#1] INFO:Plotting -- RooSimultaneous::plotOn(simPdf) plot on x averages with data index category (sample)\n",
      "[#1] INFO:Plotting -- RooAbsPdf::plotOn(simPdf) directly selected PDF components: (px,px_ctl)\n",
      "[#1] INFO:Plotting -- RooAbsPdf::plotOn(simPdf) indirectly selected PDF components: (model_ctl,model)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf501_simultaneouspdf.png has been created\n"
     ]
    }
   ],
   "source": [
    "frame3 = x.frame(Title=\"Both samples\")\n",
    "combData.plotOn(frame3)\n",
    "simPdf.plotOn(frame3, ProjWData=(sample, combData))\n",
    "simPdf.plotOn(frame3, Components=\"px,px_ctl\", ProjWData=(sample, combData), LineStyle=\"--\")\n",
    "\n",
    "c = ROOT.TCanvas(\"rf501_simultaneouspdf\", \"rf501_simultaneouspdf\", 1200, 400)\n",
    "c.Divide(3)\n",
    "\n",
    "\n",
    "def draw(i, frame):\n",
    "    c.cd(i)\n",
    "    ROOT.gPad.SetLeftMargin(0.15)\n",
    "    frame.GetYaxis().SetTitleOffset(1.4)\n",
    "    frame.Draw()\n",
    "\n",
    "\n",
    "draw(1, frame1)\n",
    "draw(2, frame2)\n",
    "draw(3, frame3)\n",
    "\n",
    "c.SaveAs(\"rf501_simultaneouspdf.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf520b55",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "e9202b9b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:09.156969Z",
     "iopub.status.busy": "2026-05-19T20:32:09.156850Z",
     "iopub.status.idle": "2026-05-19T20:32:09.337745Z",
     "shell.execute_reply": "2026-05-19T20:32:09.337135Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222729328\" style=\"width: 1200px; height: 400px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222729328() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(71059,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222729328', 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_1779222729328();\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
}
