{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "0d20eec2",
   "metadata": {},
   "source": [
    "# rf803_mcstudy_addons2\n",
    "\n",
    "'VALIDATION AND MC STUDIES' RooFit tutorial macro #803\n",
    "\n",
    "RooMCStudy: Using the randomizer and profile likelihood add-on models\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:** Clemens Lange  \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:35 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "882e2e23",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:25.230435Z",
     "iopub.status.busy": "2026-05-19T20:35:25.230316Z",
     "iopub.status.idle": "2026-05-19T20:35:26.202049Z",
     "shell.execute_reply": "2026-05-19T20:35:26.201627Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e7eb4159",
   "metadata": {},
   "source": [
    "Create model\n",
    "-----------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b66b0a41",
   "metadata": {},
   "source": [
    "Simulation of signal and background of top quark decaying into\n",
    "3 jets with background"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be092e84",
   "metadata": {},
   "source": [
    "Observable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "3b2acada",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:26.210363Z",
     "iopub.status.busy": "2026-05-19T20:35:26.210213Z",
     "iopub.status.idle": "2026-05-19T20:35:26.368746Z",
     "shell.execute_reply": "2026-05-19T20:35:26.368145Z"
    }
   },
   "outputs": [],
   "source": [
    "mjjj = ROOT.RooRealVar(\"mjjj\", \"m(3jet) (GeV)\", 100, 85.0, 350.0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62daf755",
   "metadata": {},
   "source": [
    "Signal component (Gaussian)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "1de30ee9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:26.370468Z",
     "iopub.status.busy": "2026-05-19T20:35:26.370342Z",
     "iopub.status.idle": "2026-05-19T20:35:26.497593Z",
     "shell.execute_reply": "2026-05-19T20:35:26.497061Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] WARNING:InputArguments -- The parameter 'wtop' with range [-inf, inf] of the RooGaussian 'sig' exceeds the safe range of (0, inf). Advise to limit its range.\n"
     ]
    }
   ],
   "source": [
    "mtop = ROOT.RooRealVar(\"mtop\", \"m(top)\", 162)\n",
    "wtop = ROOT.RooRealVar(\"wtop\", \"m(top) resolution\", 15.2)\n",
    "sig = ROOT.RooGaussian(\"sig\", \"top signal\", mjjj, mtop, wtop)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "726f07fd",
   "metadata": {},
   "source": [
    "Background component (Chebychev)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "523888dc",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:26.499111Z",
     "iopub.status.busy": "2026-05-19T20:35:26.498986Z",
     "iopub.status.idle": "2026-05-19T20:35:26.680784Z",
     "shell.execute_reply": "2026-05-19T20:35:26.680201Z"
    }
   },
   "outputs": [],
   "source": [
    "c0 = ROOT.RooRealVar(\"c0\", \"Chebychev coefficient 0\", -0.846, -1.0, 1.0)\n",
    "c1 = ROOT.RooRealVar(\"c1\", \"Chebychev coefficient 1\", 0.112, -1.0, 1.0)\n",
    "c2 = ROOT.RooRealVar(\"c2\", \"Chebychev coefficient 2\", 0.076, -1.0, 1.0)\n",
    "bkg = ROOT.RooChebychev(\"bkg\", \"combinatorial background\", mjjj, [c0, c1, c2])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2cae9967",
   "metadata": {},
   "source": [
    "Composite model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "94bd849c",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:26.682534Z",
     "iopub.status.busy": "2026-05-19T20:35:26.682317Z",
     "iopub.status.idle": "2026-05-19T20:35:26.795322Z",
     "shell.execute_reply": "2026-05-19T20:35:26.794718Z"
    }
   },
   "outputs": [],
   "source": [
    "nsig = ROOT.RooRealVar(\"nsig\", \"number of signal events\", 53, 0, 1e3)\n",
    "nbkg = ROOT.RooRealVar(\"nbkg\", \"number of background events\", 103, 0, 5e3)\n",
    "model = ROOT.RooAddPdf(\"model\", \"model\", [sig, bkg], [nsig, nbkg])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2029584a",
   "metadata": {},
   "source": [
    "Create manager\n",
    "---------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3605a678",
   "metadata": {},
   "source": [
    "Configure manager to perform binned extended likelihood fits (Binned=True, Extended=True) on data generated\n",
    "with a Poisson fluctuation on Nobs (Extended=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "cd0b4c4b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:26.797370Z",
     "iopub.status.busy": "2026-05-19T20:35:26.797235Z",
     "iopub.status.idle": "2026-05-19T20:35:26.976326Z",
     "shell.execute_reply": "2026-05-19T20:35:26.975637Z"
    }
   },
   "outputs": [],
   "source": [
    "mcs = ROOT.RooMCStudy(\n",
    "    model, {mjjj}, Binned=True, Silence=True, Extended=True, FitOptions={\"Extended\": True, \"PrintEvalErrors\": -1}\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c775a10",
   "metadata": {},
   "source": [
    "Customize manager\n",
    "---------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d82cc0fc",
   "metadata": {},
   "source": [
    "Add module that randomizes the summed value of nsig+nbkg\n",
    "sampling from a uniform distribution between 0 and 1000\n",
    "\n",
    "In general one can randomize a single parameter, a\n",
    "sum of N parameters, either a uniform or a Gaussian\n",
    "distribution. Multiple randomization can be executed\n",
    "by a single randomizer module"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "724d3b91",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:26.978423Z",
     "iopub.status.busy": "2026-05-19T20:35:26.978301Z",
     "iopub.status.idle": "2026-05-19T20:35:27.098351Z",
     "shell.execute_reply": "2026-05-19T20:35:27.097623Z"
    }
   },
   "outputs": [],
   "source": [
    "randModule = ROOT.RooRandomizeParamMCSModule()\n",
    "randModule.sampleSumUniform({nsig, nbkg}, 50, 500)\n",
    "mcs.addModule(randModule)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d704f6e5",
   "metadata": {},
   "source": [
    "Add profile likelihood calculation of significance. Redo each\n",
    "fit while keeping parameter nsig fixed to zero. For each toy,\n",
    "the difference in -log(L) of both fits is stored, well\n",
    "a simple significance interpretation of the delta(-logL)\n",
    "Dnll = 0.5 sigma^2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "2fc393f3",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:27.101182Z",
     "iopub.status.busy": "2026-05-19T20:35:27.101049Z",
     "iopub.status.idle": "2026-05-19T20:35:27.217229Z",
     "shell.execute_reply": "2026-05-19T20:35:27.216614Z"
    }
   },
   "outputs": [],
   "source": [
    "sigModule = ROOT.RooDLLSignificanceMCSModule(nsig, 0)\n",
    "mcs.addModule(sigModule)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9b243646",
   "metadata": {},
   "source": [
    "Run manager, make plots\n",
    "---------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "856bc928",
   "metadata": {},
   "source": [
    "Run 1000 experiments. ROOT.This configuration will generate a fair number\n",
    "of (harmless) MINUIT warnings due to the instability of the Chebychev polynomial fit\n",
    "at low statistics."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4ab991c3",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:27.218880Z",
     "iopub.status.busy": "2026-05-19T20:35:27.218757Z",
     "iopub.status.idle": "2026-05-19T20:35:28.028993Z",
     "shell.execute_reply": "2026-05-19T20:35:28.028546Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 495\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 490\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 485\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 480\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 475\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 470\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 465\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 460\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 455\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 450\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 445\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 440\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 435\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 430\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 425\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 420\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 415\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 410\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 405\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 400\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 395\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 390\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 385\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 380\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 375\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 370\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 365\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 360\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 355\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 350\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 345\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 340\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 335\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 330\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 325\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 320\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 315\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 310\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 305\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 300\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 295\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 290\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 285\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 280\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 275\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 270\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 265\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 260\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 255\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 250\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 245\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 240\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 235\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 230\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 225\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 220\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 215\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 210\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 205\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 200\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 195\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 190\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 185\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 180\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 175\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 170\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 165\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 160\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 155\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 150\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 145\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 140\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 135\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 130\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 125\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 120\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 115\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 110\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 105\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 100\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 95\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 90\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 85\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 80\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 75\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 70\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 65\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 60\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 55\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 50\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 45\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 40\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 35\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 30\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 25\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 20\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 15\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 10\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 5\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 0\n",
      "[#0] WARNING:Generation -- Fit parameter 'mtop' does not have an error. A pull distribution cannot be generated. This might be caused by the parameter being constant or because the fits were not run.\n",
      "[#0] WARNING:Generation -- Fit parameter 'wtop' does not have an error. A pull distribution cannot be generated. This might be caused by the parameter being constant or because the fits were not run.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mcs.generateAndFit(500)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dee6ffbf",
   "metadata": {},
   "source": [
    "Make some plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "2e0cdbfd",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:28.036208Z",
     "iopub.status.busy": "2026-05-19T20:35:28.036076Z",
     "iopub.status.idle": "2026-05-19T20:35:28.180948Z",
     "shell.execute_reply": "2026-05-19T20:35:28.180337Z"
    }
   },
   "outputs": [],
   "source": [
    "binning = ROOT.RooFit.AutoBinning(40)\n",
    "dll_vs_ngen = mcs.fitParDataSet().createHistogram(\"ngen,dll_nullhypo_nsig\", binning, binning)\n",
    "z_vs_ngen = mcs.fitParDataSet().createHistogram(\"ngen,significance_nullhypo_nsig\", binning, binning)\n",
    "errnsig_vs_ngen = mcs.fitParDataSet().createHistogram(\"ngen,nsigerr\", binning, binning)\n",
    "errnsig_vs_nsig = mcs.fitParDataSet().createHistogram(\"nsig,nsigerr\", binning, binning)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f468a6f",
   "metadata": {},
   "source": [
    "Draw plots on canvas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "059f0fb1",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:28.186266Z",
     "iopub.status.busy": "2026-05-19T20:35:28.186135Z",
     "iopub.status.idle": "2026-05-19T20:35:28.414318Z",
     "shell.execute_reply": "2026-05-19T20:35:28.413659Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf803_mcstudy_addons2.png has been created\n"
     ]
    }
   ],
   "source": [
    "c = ROOT.TCanvas(\"rf803_mcstudy_addons2\", \"rf802_mcstudy_addons2\", 800, 800)\n",
    "c.Divide(2, 2)\n",
    "c.cd(1)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "dll_vs_ngen.GetYaxis().SetTitleOffset(1.6)\n",
    "dll_vs_ngen.Draw(\"box\")\n",
    "c.cd(2)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "z_vs_ngen.GetYaxis().SetTitleOffset(1.6)\n",
    "z_vs_ngen.Draw(\"box\")\n",
    "c.cd(3)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "errnsig_vs_ngen.GetYaxis().SetTitleOffset(1.6)\n",
    "errnsig_vs_ngen.Draw(\"box\")\n",
    "c.cd(4)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "errnsig_vs_nsig.GetYaxis().SetTitleOffset(1.6)\n",
    "errnsig_vs_nsig.Draw(\"box\")\n",
    "\n",
    "c.SaveAs(\"rf803_mcstudy_addons2.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "90c478d5",
   "metadata": {},
   "source": [
    "Make ROOT.RooMCStudy object available on command line after\n",
    "macro finishes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "54554cf6",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:28.423221Z",
     "iopub.status.busy": "2026-05-19T20:35:28.423089Z",
     "iopub.status.idle": "2026-05-19T20:35:28.541155Z",
     "shell.execute_reply": "2026-05-19T20:35:28.540419Z"
    }
   },
   "outputs": [],
   "source": [
    "ROOT.gDirectory.Add(mcs)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "55ce8976",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "938f00df",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:28.543107Z",
     "iopub.status.busy": "2026-05-19T20:35:28.542926Z",
     "iopub.status.idle": "2026-05-19T20:35:28.755164Z",
     "shell.execute_reply": "2026-05-19T20:35:28.754165Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222928743\" style=\"width: 800px; height: 800px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222928743() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(58764,'WkwImDAAjOUAeAHtnW2TVDeS779KR8W+2I2Q6+r54ZzYFxib8dyLx4TtWcP6TjgKuhrq0nSx1QWG2fB3v/HL1KmqbhoGPOAFu8Ou5uTRUyolpaTUX3n+e/bT9uXT5dniyXI2zL6/uTh7vjj/YXn/u7PF0/NH6+3MzE7+erb6r2fLP38xG6yZnXy+2p7r0zf3/9/ywZb3M6J983S7Wp914v+szo5nQzCzk11Ow39fVdbrCggh+hCjmZ3cXp0tb65P15vZ4Dr53fbl6XJP/rA63j5S8tbq9LRHhlnIKbK1knx5sv16sXm4OpsNds6bb1cPH1169fl6u10/uRjt+/XTiy/unqxgwpvZyb394w19JOO759vFllJaI84F6oZSJL61WTxZXuabd5cqvot3sUK7qNPrKUuSH0qGLD9fb46Xm+9Wf+/SO3j59fp4qe161+m/9/q/d73K9l7/9+52feP++Z3Vi+Xp455iu76KnA2lZap+IUEpIrJ9kosvZsNn+uKvF1LRmn/dpzkkp2L+40ICzeQ/9kkuvtgVM1Vlu77bayNVeZWkJa11PmVfXbTFhuSqmR1kcO+xCqpnAAmfEzkbPtMcWgohl1pSjqXQUU7XP//li5td6ofE3b8+lQAa9d7B8w+7t1/tnm7cP7+Q0Y375xfyunH/fJ/sxv3zfcq/vngiwwERv9w/vniyeKEV+uvL3eP3j5bbxWwIUrFHq/504/zp8sH228V2tdZa/OXZk/vLjT5/v3rw+MX+8aU+3l4/7C9vrx/u3/1dQ+8sju8sVmcMHzM7ublZn58/Wqx6hjvyzrqrosN+Te9Set+lv14fr05Wy+PZcLI4PV+a2cmfNqvjFxfJl3vyxv3zm+v15iD+l8er7eI+A367eUYGt1YvlscX6j1lfWezerLarp4vz1/RebdX56jUSd12crHZzIYf/2Zm66dbHn4xs5MvXywfnM+Gs2enp2Z28hfVz5uTasNPTx6cb58dv/xpcXy8Pjv3aNDvV1tYkwj+qgh/efbkzuJ0ud1OqhSx/mX5Yvvq2y/+/N2d2zfuzYbZv0yPZnbyxfrZ/dPl589OTqZm/Xa5XazOkGmXyN3z1d+Xfz2fwu9dJCX02+XidDZ4CpfgA/qH1dnx+ufv108ZaGa2p+8d0l2h7SN8tUR9927y86QKbj6a9fF+c7HdvtIMN7Zbnemo2d3Pl9ufl8uzrsovUCLXW5v1k+/XT2eDm9O37h4vtmhKIe5NBFPdDSXcL2b2+Ov18+U3Txf/9WzXYx5/u0QiF1+efLV6+Og2VeizlvTexfbBo0msj797tP75y+fLs+1328X22fmukz6+8Wy7ppvsYn69PHv2+WKjNJ3oxgO64S7FybfLxfE3Z6cvpxQnP6y2j9bPtoc9durFXy3Oex+c3hzG+vHSZP7elgzM+K9dMvywvC9aYXX28HXrBnrGzdPF+XkfMsTThcrhi6d00pkdfEqm/0Y3WGONHb285SkMVkLtGCXMpzSmXRo75h6T96XH5bkOtRnvnKlxbDzXaLzLo6PAaPpvdG5wzRtXvXHFj84PJRv5f3RhcNab/htdHJwvpv9GlwaXgum/0eXBlWr6b3Rl8Daa/htdHbxvpv9G1wYfvem/0VuJ7Brp7ejdRdIPrgXjmjMu19GHwdVsXIUMo49abk7GJTv6NLgaCDEupdHDVWcy2tGXwaVkXPTGBTv6OriQpII1j74NriTjbYaTMdjBBW+k6BzG4AYXChwYl+0Y/OCCNS5VQ8YhaDm1alpE5bWcFMaQBueKkfQxjSEPzkY4EJZDGZxtRhIEP4Y6OB9Frt62MbS91FMaox1csUaq29wY3UATC88hjdEP3jsj8oFEVFWZDHaMcRAR02o+jjENIlPYcG2MeSCbFk3LYyxaDIKKZYx1kBKdsDnGNrhYjFTC+TFZYUK62Jjc4GI20mfH5EUOnQhDq9NzHEqcntOQ3PScB1+m5zKE6bHSsXs2bbAm0oHTmO1gTa76zNBpTp/9QKVkWI2ZEeRC0xAGEb1DkieIWpTIlOG0kCwjKfRSpHQZpG7MFC+EL2OhfCFsHAsMQLhqxwIHQqQ8lmkM074FDiTE1rHAAURNYxEGUjLZjWUayaGMZSrehbG0QTk0dqx2UAZ5dkOSavDshypi4JkhrNrFjpVeKWKA0OFLeXasDJM8EQxd5cqOlYErYoBg2Iq0jR1bV1yhQjjVSC5CqPJyDfXVgoS4nCGiEtFDqBajU9mxqRprknORWMXxvspzLDw3efbB2NFZOzjnTEyiFJx10kOjN9GPznpVCo3mdaOzYajFOOk1BEeph0vZBMg0eF9NKCbF0dk8uGRNYYC20VlURpa4LpMVw9ObEIz3kIjEZKTqRie6NTGG/OgcasyZ4IyH8iJVlFFuo0O38szPp9GhXGlNBE++LinH2p8d2tU605px1o7OlQEFR31cHR3alX6Xm3Fo9Da42ijYjc7bwUV0VjQuo9/RYyq3CukHSWaLqW10Pgw+SDl2dKjWmpgWDMPcoVtdMKLKPJGzDHXvqvKMdj2YArx1Q3MMyeZGT5OgEvU3eotuCqb/Rk+bOOojv9HbpPoWtT56GqUGUQF29LYMjM3iTCHnOvjQlC1XRm/bQCqUdRo9TUIvIPHonRuKM5p49M6LXu6pR0+jUB6JR+8iKTXx6F0ipSYePe2BRneF1KN3RbmdCq27ykmpTfidimW6Qx0p06OXJoFbLZcm0bq6GkYvTSKV9SGO3sddbaVkGqXXFqY9WnwvVV+m+mriuqswicM0htFtNo5hGsZ0JuYtRnKfxZXWwSzh1o+B8TyFC32wJhBaRzXxkxsDA7tHF7LuVhBCott0uZHcGO1+YWTHaHVNQHIov0sJtV+nQEWmE2aUMVqkodqL+kUZzKL7pT6RwQzNbJzCGOk61u/qF51VmnDrx8hiCRaZQYX2lNWrF10Qykbh3wkfRKU2TiY5Egs1qXo7RieqXuvlUPUk4T0TDQnsGD3zjFbJ9ybRNeMYWQ71KjGlRQZtr5JUmf7Rq6ThaBIvVdZwVh+9SojA16lKGr1NdZLYwUJSgEQOTkhttTGGadKTpEFmPW3vMQaZeHcJZebdpUMc0mhjokv2PkIuqbldUyu9b3o4Sm3f+BoetT5axzHRJbUcYTm1DMvaamNqZaIkL6m7VnBMTaoOZf2YLU0gs+KYra7SSZMtdZZGG7OlxtJoY7a6WmfFQC/UESYsZtSXjrBOV6lyb7YxM6cQrs02ZlFh0gO1SHqh9kCpUmZqkRGm2bkg2VFFGGRmkU7YI6s8pmq5w+1D7qt2tB4pdXT0yjGr0BtVHF46Aq02ZrrkVD/SobF6/eglGZWlI6zTfeLvzZ9FZ2n9RNSySpcR1mmd3rSDZN+m6lE2q3StnVA6PnvMsN9E5aBCYUWSWZ0zxuRZxaHP0jV4LJMiVLbH0hVhF/tY6HWdxeTGQqfrJInTrr4SuG9+qlf68kZYGEtf4FCSRNbaaWCddKBoh4oO7HJNbqxWNYE0yli7EhQlUe2uzQnp7Kjuqb03dn7HOvVG0TSVvtj7npSxEzZrTNXIWkTvhEQmIlNpVyvEFE3Ys9wrQkK6OtLqVubRSSFbP1bmUe32ErnuKCljp4tY5EoHpHiIPjuodMbKFDrpdbJFSdLbVBlXdGQnSdxXwp2l3hu7FMbae+NUko5VKFhiz9gLYrHddZcyRWfsdWNYVLaMXUQMixpUSNpvxrpXkHAcZL6AJ43btXafqGuY9gcaea+zpSDZokxJ4+EepUbR2OQj+UbR2Dr4xhplp9T7SZwUNvWMe3bgLu7Z0Wx27FCxuGNHI0/skFGauBGiS0in6LGyXeztIhVJu24k+SY46tq56q6xC3SsSTnqAh9rgiMJxRSShKM9CUddP1bZQ/b5oGad0LTZxqr7SG20scpGsivOqhtJ5XasWad37QpjzQeTLOXLdnKfq8pnqrXsKHdJdUs5hZVuCpkYKn32m1gq2rEnoRTt2Kqxa9GOPVW06GJoJ4XCzmbaYdeiHXsSBBtNDaRHVe3YOv3Vqs02Ra3aajpp1CptprNErbIG6uyw45S+pY3LnrPrTJFR1aE/laFDf1eGDP1eROtzjyTrmnqSQFfUvfy+OJBpqnYl3QlVilNrdh29a8+uo6dsdhOQdOiuoyWj1lV0J/YaGrm1AxVND24o6T4XWz+2rqa1lNb1dK9Jm/R0b+rW9bQKs/U1w0TpiqG3dOuKugd265r0KZhiu4Hg9Tc2lCX9WH9j89KCOoc2H4cU2Fa7QFLp5pGtcRmbz0OysgOPbPrLEBsbdRfJtA6xGjaeMY/NtyFmk6xxsY4t2CGiPo1LbmzBDTEaYSaOLfghBiPqqYwthCF6w/Y7Y0mIQ7QGi1v2YwtpCM2khi1sbCEPoZqsJsIWyhCKYYtcKKEOIRk2wIUSGmaTnI0reWzRDiGYXIwrbWzRDcGzm2dv3KIfgmz5XE1ji2HwzbAXrmVsMQ6+ipGgYdZImK1Kwlo4Nixp2ZRiXKOEgoWgNOMaJbBZNZWe7MYW2+C9qbqua2JHM7L1K2NDOTZTEzapsaEaq6nZeBfGlrAemFqNd2lsKQ4um4b1qo4tyYYQQ5h3Y0MvJtN8pxjyYp7w5Mn6DpOLUrJtblmpzLrKtNIpuoxp7PMx1WAzwBbhXRtbDlAOw4WQwoz0WiGThoYempVUw0XLRUkqWceWK9VyllpCYpA1mCaELJg+DaZS78rYihMSc5iQmHwMJiElRULO+U5iJTZYLzCBNzRjNU5sDZBYF9ReKGRRknIJZTNvHFYOpI1mhISNNLZqhcRSIKRTEjYIxXYtRg8lg5KwEceGQY5Qqg+JQdY4T/Uhs5KwAVmUhI0wNhQkkWEDsgkZYCOMrSlX2J6cHxubqIr1sZMqK+xNzo0NLYl1GjYgtQUDbEBqCwbYwAYnHcoF2ICUHiXWVSGlS7lI/25jY0sfjcOKZbGlYbSDpsNXaIxRKIyJxqpuXMQcIeFhcFigs/G2EB8LJhbpiU5K14nGLGNcbFjEiV+ETrAjNLMKasd4mwgXc6pL8APt7ND6VCykE1KOMQj1A8Z0tZU464KQ8CKhUUhYCYSmAZMOnAiZITOMYHHEgIc9cSKrkLAhoW3AmodUMDF6K2nFOgjpKAh11pCp9zDJ8UdDZLLUFXOra4iMta7vNHVitYsNEu0E22LE6zSMynJXjzkavGAygnP0lzCj3V90JMWzAWsc2xhXKT+wYuk05bMJ42hJTiWgsTCqTbHCT8AW22n4CWwO1S6KfdIGOREQO6lacguK12GerUgjVNQyBzdocGdR75QPDT8oeMpXfe8sKp7yoSkfJU/5zACUHwOThdoxkUeMTCVKw09MTDQOfV4oP2amIVeROeXHwiSltJRfmcL0tAp5xMYEpzTySJbpT47fMvwkx+QoZtFM+ckzkSpN+X1NLGdctEeKQyI9Ezrlsy4uxlU2DpSf8sAcKbSUV4YMP4RLeXWg7whN/VMbOOLC7ium8myxICpNedkN2KwJj5SX5cBQacrLYUA2nNBFystx4GhRaMrLaaAsoSkvZzF0C039chnEas86QsqrA4d/0GKOz21onP5BU16xnCopjXyZFiwMo+8okImBDY68oERZMyMi0Yi8iAPTiL6gTKYHBk1tckzoLBMEVlZeeCkVxUKxvJBiORagWF5IsZzbMUatHLY5y0ThOVrkBS3LVEHXlRcUy2QhJ47EoG8xXdAZOfnEzm+ZMOiNxHAUy5RB99u/wCbPqSUxkD/TBh1MXsAYE0fsfHBaYJk66GISA8aYPFidyQsENNng5AWcihGuy8PBqdhDujxE08skgkw5sYB1mUa6TEWXM5FIzyMGnDKVoJbkBZwymaie4aiRFywIetvyQg6BRBNU41CzcgzE0JYXnLpMJ0HyQk5oOHeY8uAohTlFDiKqQZ9yGiS9GZqzFTl6oGrVoFDlQAhB1MJBqZMDITlALwYFy4mQa/S3YlCwnAm5RrWKQcFyLOQ4x4GWUyLMODA00WqpEhqG5RiCKrHEg2bnAj9ZTmw4GuLUkvgoYM6GOBIWGv44HJLOXDlkdJwOcchCfVC4HBB56dvVVPjDloLG5ziX8rHu9a6OwpUjIjR8swaFyymRnDlDUz7WPTR+c6YgL+wpMhCcQeFySuTR8NBSPieM9GlvULgO+x4aHhr5YFSRYRIMCtcxwXC01YLRgzQ/eBk10aBwnUwwdPhoULiOCUYGEYt+6DT4QP9nSwCdB84whaZ8JhgZUtmgcB0TTKS8zMGsc0GxC7QpCtdFO3gZYMWgcB1H8mhwaMrnTF7GWzUoYMc+QoZbNShgx04iyu7AJMpnLyGjrxkUsGM3IQsU2WI6x35C7AzWJOTBjkJob1DIjj2F0MFEymdXIXQyKGSX2KOytMgGhewSVlJZgBkUsktYb1mJNBPhJ3Fmy8LRydGqS/AHHQwK2nFkL3Q0KGiX4I/wbFDQLsEfdOEw27kEf9DNBPjJ8MduxRr0tcvwB+0N6tpl+IOOJsBPhj/oZFDWLsMfdDEBeWSVH32IQ0qX4c8az9IYfjL8QTuD5nYZ/qCD8cIP/EFzbM5RK/xBZ4PadphkhGY3BA1/hLMSh6Z9m6HPoMRd0fYF6+Lgp6QezhiEzp1mRQLNfpH0rLqg6X/QHO4CJPr82QlYsn8RwN7s1ul6sQ3g704FPZaSmT2fDT82H03zbP2yaR7dUk3zzbRgTeOIN3jTQjAtRNNCMi1k0wI6qpoWmmnRmhadadGbFoNpMZoW2TyCEUG3VdNiMy1Z05IzLXnTUjAtRdM4A0/ZtIROrKalZlq2pmVnWvam5WBaBmiSTMvZtIwurablZlqxphVnWvGmlWBaiaYVtqLZtFJMK+jhZlq1plVnWvWm1WBajaZVNqnZNHSp6O9mWrOmcQbdvGktmAbApSXTGlvYYlpD78u5OnYYNLEVS4jlBEIso5azGFSwZdlgUb4WwI5F7Vp0rUXBWtbVFtVq0adWdsVoUov6tKySLYrTsk6wqEjLStiiHC0a0bI8sOhCiwK0aD3LYtai7yxKzrJ2tag3K8AlFJllRWBRYRa9ZVl+WjSWpctZVpuWzmbRSpZuZhW8Qwp6lcUwY9E5NpFCrHIsKi1zvMX8YllTWmZ4y2rSMrVbrC2WOd1iabHsSCwzusW4YpnKLUtJyxxu2SBYJm+LCcWyhrRM3ZaVumXOtqzBLQACywrSsqS2TNWWBaRljrYsHS1rT8uC0bIKtDK1y6KBadmyWLJMyJZ1o2Uqto0ULBstM7FlwWhpc6wWLBr4A8iBNldUE22OIYL5nj/s+GlzWShiZXCyQlQ8BG0u60NHmyswgDYXvBSmAWZV/giQgjJoc/b9TI/8oQzaXBaEisiizWU56GhzNuvMXfwhBW3OJpz5CEMGZdDmsvhjQ83Ewh9S0OYC2JJ1HttjpgX+kII2F2Ogo80FHyeIF0ebC8CNbSyKmj+koM0FYSe7UEWG0eayfBOEnKzbZFMoCzaFkNDmslyT3Zms02Tf5Ur92y+//GI+FJozvQnNqRcW3nDBpCM2gXFvzog4wZz1zdEug0s3JSAPbkNcvgixvyLiuJjx6h2Rrxebx8vNwZ0TfXGQZX+xu0fx/fLF9sbZQzDYAFAhNdDOLTKQ8NPVw7MZVhGlD/In+NYatHsWhPHixepV7PiN7fYG7wFuH6+er85X67Pz2ZAcJRJykOHtxf3ldA+G8oTWEiIlCP3Nycn5Ui6ooGf7yx3bQfhePXh8e3n2kOs1dm4BOUsbTEmlLmDPLyfbnk5A812UqXiAyfc+mRpKc/6KGv7nJ1PDXQO9Yxt+vtgcXC/6fLGZOoVAsLmwxTA9vfOdjokvNouf9VqG0t883e6vgCjRb4Eo0S+CfPN0+4Xi7fWKGSB4BpEMo2+ebrtKoBLfPN3ekitZPeqtVb8X8AqCngjy8ni15V7ZRH+/Xp8KgJ4XeoXl5vpsu362Oe+3Fm5sOzuXNOaN7ZZBLErqDbrAv6MyYKxQfb18RCWhuBExF+rLs+MvN5t1v9HFyBZSolPUrWdnD7paIBDyQItB9iYklCsxPTL1h+yRGfeQB+19e/lweXZ8eO8G7vTtgYYlo/3LqezpKh5ZTGphFxH59a5oZidfcRdieX5Jh/e33z1dPOAugJS9ux93UIfd5bj+Dh538S5ys4s6vZ6iXipa4l2u98HL/aWjr1bndMhDfnhFfp2dbKn2FG8qWKUzRZ3e9oiXuCHW16uz1ZNnT/5zuVnvr3oQcOHKoqh4vfVyZ7M8WW7+dHsfW98fCE5fHFYTTg/f7uupb79Ynnw1G5Kl0XZvfpgN5eKbuzPOAQ6i3Osv7iwOO9+dxYW+ReG7V/uS5dWrVzXvLI4vVB3Z3Vkcv3r1887i+Irbn3cWx3T2u3vx9Df3Lrxhbux3lShw9eBxv6l0Z/FU71je7Upj9+LejOPJ2cl3DzbL5dmtxQPRPrCHWjsQPyTj4KDb8uqwPaZUB+OHKJD70cObqQNpt9I4mydo0VmeR7lIw0vRGY0LjVCiYticKvnDdN+JsK8gnNRju1k9/WL5YPVkcXq+u1QkKrmvdvxuyXBQO4lwqXry7rB+dBJ5eVDBHb2bqnSRwgJErwTvUu1UoKTR6rRdbOoz5U91VPms/3x2ttx8S/WIyVCTbM9nw49cJDo64o/zR45N/1E8qhOdj+KRy1DeEiH2KHtKXh2+9/Zi9F1YtT2s2qNoj+JRlJhS9gf68zeUy3JxvNwwW8udKRHbjrq12t6aOk3qnUZuYtGKuxDpSyK1B4tTSUzr/+/16oyX00Lg5uLpIfn96sluOVlqba5G0Rh/frJ4uCSjnYK/uTg7Pl3+8Gh1/ni5+XZx9rBfYtb3n69f9HfaevpWODm4xvkfq/Xp6mx62y8uatSbq82D08vavgdx/xSmDybAuyy5v3zx9O7hsmd6ee/w5b2rYk4vL8Qk4teLF1+sHsolezrhN5vto/XNxZPlZtG1z6vbtTuL4/d2/44We+39uzuL49ft19hJIaEDjQU5KZ8eeiC/SzPjq7uwS+oaYVyhrK+v6n/mXJ4zaGxMAbvgTG7uf+by3MVsq2uhdFcK3OTPMc5LttZi2Kh6F9/PhmrnxZeSYm0xYc+YXbrnn/M8lRyKizl5jm0kwnTtP9V5doTmGFyozNeTUwBRp9blanOurdXgCb3oEyC4PE+uBluyTViZJMKUebB1XhqhpZTMDdHJe8Bs+CzMq0+uuuhSw5IpbgKmS/2PZ0OZt9Raa9V7W7ERvsGPQKh+bqu11oaUKlEv+hQIpc69hLviE/beQwcDodh5QrI2xKQblMn9AHy+Gjpxqb4GPnPBz4vNudiWIkbenesAPBNc0czdsQBLqnlrwbdWY4oNS+BltwTVz0tMLbVSXeKAaZc3Xgqu6isXvBb47KJPybYQXRALwt7VwNxa5Ntao3GqTzC+9zwwTxeCpd90TwZ2HhvistZ6H5LDF8Lk5QCvGZfD1H2BnUdpAjp8xAsDk5e6T7gi5IJXhCtZveAn4Qpud34TXpP968vufhU+83MWS921wmd5HlPNreSSc8wR9rurhZTrFBPPC8XNbbSh2BxC82IZekfvC4zia+8LO+827+x94dIm/+3Tv8lfw0/u0JR5pUsHjfK2Phve303/vh76TS76y/5l8jJ0WdKyn37dUgP98n6XGni86aMUpzdXDVGmzml8Ml9eMTgPdy/UTum+W3111fZPLtnur18gIHW09EZhfuVvvUmUva+erLZ3FpsvFtvFT0+w2/3009nD5dlPx6enP+GE5NHLp+ufzs5XssaXzcFsmGFkWD/cLJ4crU+O3iWDg+ZTG8g/uVZ8d4v9Xx4sT9mzOl1QvMbk3u3tr/OA1UX3Qmy9035yNszOxPsNQnm4PFtuFtvl8dESFx6fvvUew+j9FQcPkV3zXXEX1MfOXZm2plFyV6Ph1+bk1mpz3o2xtxfTE57E/LQRf7L8YnX+9HRx4ISHneFub4l45dRi7xTn6/Xx7cX9Tr/hVOHtGvHl5Ub87HT98F9v/9vR8QqfN8uzB8ujn+eb+faI4XDEeDg6WW+Oni7o/9PI+HhOZmQlIQN1ZyzpRzpvOJu5unWvWLFoU1+hBH/7Vn/NScvbtfrfL7e6eNo5P/q//+voX49cnPt69OLIzVsosR79G53w42nhSeH8qvYltQ5eHcaTq6/fvv0unRwdHCtZMQR9ebbdrLDBqW35+/NnT36+QDAzS0wJwmVZaEBFZv2Fnw0x1xrBIc1Ovl68wFouGyo5ROrm8/2Lv6w3TybbLCn6EZC66Dr57tkTSryIAsrAgwQFpPMJzqLYWgMHCiYax39/M7OnbiYQwNlzNxt+9MYZQvlXQv1s8KmY2XMv6bKGyF+53ayxwmzwGGqfh9nwI6FB8uGvlkRc/a+niLMhsKV/HiUF8bLE9ZI6wFmaDYEt7/MknJGr5juVv6tDRvfDZZaDl6dlNkQOtp4XyZ2SuazMX/LQMqymN7ib6c+UWmdDLNbMntdeF2KQwpm0i0mtrNa90dbNzJ63C2VRCrIkZ9IJr1161EL5UZlI+dIWdjYkETdPIklS2s615qbckMfUgm42pEb1efpRa6TliSsdyQNulBc428uj18KJHYYG4elHjUurEFfrovmmXvLEv/IdZkOWpuJpl1rjaB5aY+lXkqO2xsVc4mwoXupBr9Aw5XuSIJQ3OAviX/1NNUjdwdpznjoPWh7xgkny75RS8hCZ59lQMcI850nSaatQvrglOigJuWmqMhsqdoXnPO1SUTftG9pTlXvlYuKzzoaKE8rnPO1SapmkV8lMLQDvyoGW22YDqLvZc552MiJN7GVSQ4nr7WwA/TZ7ztOBRA7Lmkrs3HnH4VdAUfAonUlZIRGV2onA43wT7NbsOY+7fqe5a1R4mXIOckguOU+dhKi7LrArR5mPRMfE8JzHzj0sSP12uabZ4LjNOHvO444JzVVzQimAsp0957GPqkPOChGaFEVj9rQ9dUV7BylA24uy9zJuBBd0DY+UT6cKdja4JLKXR9aCF7zRctCNc9pXQTVv2tJf2v3fWTxfcvwla/irdgTv3wTOvjSWMhfLpXeYVjEXsUdNbu6q8yFFQGaF2U6su77Nk6/WpRRLSVjbZLca5zHYllIJGErF6ajrNrOi1jSXbQu4piP/HpRbEhtcKbFmmv3kru9BradqtoRYxcvrLihoKh9qBCs/7YR1ncLC489nQDNk0/pocbz++eDQ4OZ6wxnc4niFq0Om311L3t9QNksw9YaJC11pDA6hrkZfsQYgsEOvWN9ePnfcQa/2wKh+BHZ7ffZwyWZFdjp7578KllqdvaN/z0vd6fZiu5Qd/FVdCcZ7LQ/3le+yxX69UOY2iJ38QDKToA4PaXeCIbAfdPcT7oPtO434+s07Ar+NN1RdT2kPoFN+s1k9XJ3tVq6gV5NL2YbgY66vABJ/jbD6uvHo34+StUdHcnb6Bqlc7CoT+T8lEJ+y9T6mYkMILb8XgXy9XJwdvTj6d2ThC2fX1+J4iTi8m5fwRxfHd9vjoy+Wz7WDOF/ncuPh9Vpk6j2qWify9zReJolIHzlyfp4+5T6ycy8tLqVf90d8TwuQspvrvnl6EXJ5FRKEVdHOUDdhiu4sNksQzf89+5fN8mQ2uPbLRR6kKHUo3ecBvWEjDqbFavj56oysv9xsvsExNuHQ3zxfbk5O1z+DyeQVYJOTAyyVmAFeslyuOc1dTsW5xoWcbhB46WdDcNHHME821RC42DIZC17OhpBZObl5jTGVwqrnxmaDYfLinn9/8+d6z7/fWlzv+dmzs6nRjQ1/ZZNyvee/3vOzWb3e83+YPf/7P2A97dvNtzhixTbAUokFwlX7ufdoGmAWnM6r2ZyHXGsIfd8+G0qYt9xcCS1Wy81StQukYOfJE9/XUOS7JR315WMINbvivVjYTnZ2AUHc7UwBLVgfgsspJhsT8+7OFKBwrd3uv9sMYsk1CLzs8Fwc7n/l7n9qjr4v3nKO9S4LMoGd0UgH1ob9Jvf1u38xonwMu/9ffdr+ySziqy+ttOyjLy60y8vFX3752yv74Gvo675nYop55d7D7/orVVdgIgW/4+e11OhTrsFGrtt34+jV0FeOeV0oofraqsfEfgn6GnO8gH3VCBM69Z+GvqZ5LSm6UGNVQ+r+m1UgXzHlumi9i3LnYgoFseTmuVruTtualfGLH82KNh2iXz9e6GvzGayjtS1i92LWmsCt/zT01cV5yq36ZINtRWa1CdtK3lf0lSlYP9gVs/PJ+5xyKTVe/F7XFXDRt0S+vopu/bDI11dRuL817tXNXW7eNldDrVHm26txr1haWGO40mzOng34O+JeGfDXuNePDff6ypfKXvmUmUa5xr1evYlAf7/1yQuLgX94xWbaR/QzxauG6GXc6xWD83B9T7G/C9zr+erh2epk9WBx9mD5zwFg35zTQYNeI2E/KT8WV2Ml9a7H7wsJ+6fFs/Pz1eLsiK58snqwYlCAbv5iebpd/GsHyv7bHxUee8XCRtv/Cl3528MrPzw81s5DdDWGa3ysnGC9b1T77xYfC8pLEaSCigXVBR4OG/mEcAXppqg+BXqBYwUtOiFfBRuGVR2EK7dOBeE6nbxISAKdCoQPwJri2fqJDDjW3HGsgnjbndWUCWWqADXFGCoObVdiBTwKhHNCrk7IRWLsYoFXFaxbh6sJoo4zMj0fUnRbj9/PiexsyMC8FJUqPCkCTkqwxguO0s0GQX1NKFQQvaAAkVbYnzgVvrWrKFNyugLTK7mF2VAi2EKeaAFBh2ZBqO7xgJNcNRfK6ri+PUqvl5y4UCy4yQkdSh3hzQsyVFGFHYQoHIALFdRgx4WCO9X4xNWSkNsEXJxKAhkqyL8DZKhKdYfkNKnnRFqkw/mc1kUlv2stMKJ4ZryAFp2kT8p9GztBZ6u0tW7TOR+Y0bLDjCq/xNuje6HIVVGy00nhhNwEzIi3wgtAUhWBlUJJMFWOatCZ9J1WRwSqx0xZ8KKKNSdQ5ac4W5IgC8WMT+e2ExfATfG9t4Obkhy2YT7LT0GnKkiBDNOQCjzlgOD5BeAp9dVxBHJ2aoFde0pSAaE2qfnU6bRGWrY+T4BfskCk0iSSXMCpAXB4B6fCKj8SEk2zUXqqp8BVBUzd4apTZ1PxEFmaS0oAuirX158LdFVz0jE95S3s9J42lSGgVrkOIKBWZYkOIRKVnAG2in1vArZOkQ4hrjGL7gNerLIX3kgfUJwJl1DP5ZFXtGAHxfL4RwDFtrm1Nvsacc6u153eAIp1YY7Pz1gy/hEEHLo7/CrXoFjxR/j6YzFxNLE/fPjoQLFv3na//kjsI0TH2lpdLKXiAqNF/8oh2DU69j1gq6/RsReg5iIOQT5mvH+8y0E7u6CDc/aJVIUC9YHB5B8COz1hQQU+fY2OnQ07iSiCem7zNToWi/seCDv5SXsrdGwMvzU6Nrhg5xy5Fm+zTOaKm2Xv7Uqw8xCCa67xxYoDcGyrtvg697lFV8W739uDY683/LvNR98usHa/3vD3a4LXG/6Dm6PXG/5pn3694f+VG/5rRKygwVyYW+988Xy1IRSguHKofTUi1sW5A4dYUnIxK9xnug57jYjV+7Diiu5j2Pq/DSL219oB+ibmY7nfFn3wqVXrXfY5XUNjV2fihZpLXddeYdeb4+XkaA71hg+7q73CunmowZdagi2t4UlFLaRXI2NBZdqYa3TZlhrFAcD20LnqB3UKW2qa21ZLBRLKJ3v2fl8fz4bQ3DwUQl2LuQI8OoDGujS3yQZXS/Gh+A59nRyuvme3sCXjKIrLFZ+aW9jk5y7H5rkuEi5DY6/oKxeRsTnHGLgrWfHaK73jdP1zdxDxD7zCXhX8dn5hX/UZ+1v4hb2K3/fsGTbMcd/rWvQ2JS9OfK8GyPowT9GnGGIB+80gfkeALBj3a4DsxwaQVR8Ecq9peI1jWIlyDZD9HwLIXjFCL+Njrxibv0t8LA4vl5uNnAv0Hvs2q/GDZNfI10/1C25/HOTr3pEv28jFaffieyRf2aLvfzzeQN+fv9ertJz4B71Ct/0+8ayx+eiv/b1e41lxL/PW/l4vHW9BAmzteNYEJFA9N4q/1QteXL1JHAWJn1YwXgp/CybyVjyzAuQDS+lN0fSgVwXXyvFJ1Jh4Ys0A4MCtJs0TnCp+bgWnytdjFUAKMBWnAQJMjTgtmc6ikrrLVCeWODMRJgRwKuA6cXsK9i7uYaay/56cmTpTOL6Q/ACWim/Y7qq07UrC/aigbzvA1JsK6E1SAR/lK3GTc1GAkqmHARQVxjtQVBzZSiqgoMq7wnb55u0evCfYThGueAKF/bzLFMymelQFpxtM5TCKTDsaU9pukkiXVUdYCt5QEZZBMLiaTvCT6n9zcteZTDalB4t7TvlgeEdJOtOMfMVaW02wkB6vxuqQsxnnFeErXAnUEWzWBHVEPgArpa06qFGYpncIJpGOMwESBceIN+QJx6isdRFfxisixAx7gmuU8hWuKM5OVWBSPkHigPMAqEhHAarZi+5ARXozjwKPBcsoQlPIovhb5VGAkr4HIbAk2FB5/COgGV2dx5ZcSrmlKF5X34Rm9HEebfTN15xTELdVu4OLazTjP0Izdtfgm25X/ujQjAf7pk8KuuhCLSFl71P2KbVr6OKHAKddQxdfA110cd7KNXTx2rHnxQ4ygTnVsWeY10/aF+7/tGPPXH5r6GKJlYFdK57Hrfg422EXnWupyPcwU7GOO239KyAvZ4MPPvvIVwdzq43Le78evHi9u5s9vd7d7W7Hccnwenf33nZ319A1ga55cAW5+ZyjK4WLqW+Crvk0r9WlUnxyNohXxt0O8Bq61j/lgAw/FejaW236Pi6cWogpZVf59kfxoV5cnPzt2oXjdt/31FXSdrv+Y7twjHnuW/XBtexSxkquqN2rgWo++3lIOYdSXbFeUF/cWPlHQLWYw9wXrwgtvbcyfZ/88WxIZR6wtrpmQ5Fvme1C+ba2D6VWFp2pFnEmefHj5R8Up/YeXTh+WJhaKHHuY7TB8n14gQgfunC8opmnYICc1ZbqFcvnK14LAFdNaDNa6MMB1V71jHjgwvEq2NcepvYmJ44fAqb2KqsXnThexe0/DVJjhunfLr/iZLgj1Hxw89icSzbb5jiFIQ0flbzi0PgdwWpy/2z14PGL6VuxDx6/1Mfb64f95e31w/27v2voncXxncWKb1BQhZub9fn5o8Vqc4m8s+7fmTqE6QBxuIyq/Xp9vDpZLY9nw8ni9HxpZid/2qyOX1wkDz5fe+P++c31enMQ/8vj1XZx/3Q5mz60fWv1Ynl84/zp8sH228V2td7ndfgJ7suXm1fn+Bk/049gTV8wW2z6ByrXfCrjR/m4xpcvlg/e7ZNnO1uCpO+etq/+RLl+HuaNYDWJcg1W+y3BavR0XCBfMVJBql0xTGX6fBVQejgadKVygDF//9uzD/8x8/PVwwsL6rcErV1K9ocBrV3AO31cSCfBLm9Pf913j+Vbfpc/fHzFsPjtgU335FPUl7X9W37H+pWvl18j1xRB/4dArqV5qUU+VY5x+xq7xkc7mQk/AV+MMbva5sGH1JrL8mEW/Yw5XzUPMfpS5yUEvhLMJabf7Ovlgms68M4I1ugQzcb5x4TREUyQ4NmAHOGbUSA9+h5MWwApNLl0w7NZ91AoyDawaSDbQGQJTkjTCb6NUtU9AK4TxFMdICPBueEiEaCX3pSPCmAD7SbfJp++9gz2SL6iTToBvQF7mrwxUubkUZGvgTfx/adAL/LVrzxLWgXAybGPApcmr3Ld4xv5yze+uGE8eVzUr7sTs+Of9MhEoG3TZ5kFtiV8ah4CjBM+kJj6rVNXd9yI1zjiXxGhin9F4iC7ySmcxhGgnJSkEkQSO6iVguUkVGWIKzl+SEQcMUh9xB+i+KKcvsZMLnianHxMirdDiaEyVccWKhNqL7DCjqITvBrChRGi8N9ONFd5LFQveETetVP3TCjgtqkDqgh7B9HqK8KO+9sTwo6CoiniQrEoRLGD8S75HeydUFCHIA+pLIITkXQvgwfQO63x5NNQ/UJOQDv1LoiYu3dBFR8ipEOrcC55FaQoLRK/lfynBYsXwSzjburcyJHGYmBow01cCkAPFNPkTxAuxd2g5tg9kCJfyV1he+LPVNwNTIKXLtf/KkYPT4OxIdcdgE/dmkxim5B+4n9QvbVOCEhlYEL7CaSvMlp+f5A+1+I8Jp+Ki8E31IpaNa+G9PmU566GFHOwNckXaGRbdg3pO+Nj8f2I4x2/2/UxQ/ou7So/LUhf9IFPs9jK5exwDen7sJC+5ufhk8YnvTfnjALXuob0HfjeE2+EMc+jflpn+WJ74+wh9mU2P5D7DytL4B/lW93XkD5u/Px6b4TNfSqQvlJyTnEeki+tFTYibw/pu97iXm9xu8v/6y3u9RaXzemH3uK+/4Oz6avIH+lHqkEFxFJwse+tr2n52QTweQ220bs8t6lGW0Lii9NsnDm4vMY2/sM7bJ8MtvGtd78fGbYxuRpjycnH1Fy8CtsoF8YfbFZPt+f9zslXq4ePTlcPH21vrs/Olg+2e4iHgD90gS6Akl/+P1SZm/k=').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222928743', 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_1779222928743();\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
}
