{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "0b812964",
   "metadata": {},
   "source": [
    "# rf802_mcstudy_addons\n",
    "\n",
    "'VALIDATION AND MC STUDIES' RooFit tutorial macro #802\n",
    "\n",
    "RooMCStudy: using separate fit and generator models, the chi^2 calculator model\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": "8f82ebc4",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:20.560051Z",
     "iopub.status.busy": "2026-05-19T20:35:20.559931Z",
     "iopub.status.idle": "2026-05-19T20:35:21.540213Z",
     "shell.execute_reply": "2026-05-19T20:35:21.539562Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea824d34",
   "metadata": {},
   "source": [
    "Create model\n",
    "-----------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "42acc3d1",
   "metadata": {},
   "source": [
    "Observables, parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e8af1b35",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:21.542062Z",
     "iopub.status.busy": "2026-05-19T20:35:21.541931Z",
     "iopub.status.idle": "2026-05-19T20:35:21.718724Z",
     "shell.execute_reply": "2026-05-19T20:35:21.718037Z"
    }
   },
   "outputs": [],
   "source": [
    "x = ROOT.RooRealVar(\"x\", \"x\", -10, 10)\n",
    "x.setBins(10)\n",
    "mean = ROOT.RooRealVar(\"mean\", \"mean of gaussian\", 0, -2.0, 1.8)\n",
    "sigma = ROOT.RooRealVar(\"sigma\", \"width of gaussian\", 5, 1, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "53d24780",
   "metadata": {},
   "source": [
    "Create Gaussian pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e204956c",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:21.720329Z",
     "iopub.status.busy": "2026-05-19T20:35:21.720200Z",
     "iopub.status.idle": "2026-05-19T20:35:21.843476Z",
     "shell.execute_reply": "2026-05-19T20:35:21.842883Z"
    }
   },
   "outputs": [],
   "source": [
    "gauss = ROOT.RooGaussian(\"gauss\", \"gaussian PDF\", x, mean, sigma)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2498ac9",
   "metadata": {},
   "source": [
    "Create manager with chi^2 add-on module\n",
    "----------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bd7ef7d3",
   "metadata": {},
   "source": [
    "Create study manager for binned likelihood fits of a Gaussian pdf in 10\n",
    "bins"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "a04c1c69",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:21.856450Z",
     "iopub.status.busy": "2026-05-19T20:35:21.856307Z",
     "iopub.status.idle": "2026-05-19T20:35:22.017479Z",
     "shell.execute_reply": "2026-05-19T20:35:22.016892Z"
    }
   },
   "outputs": [],
   "source": [
    "mcs = ROOT.RooMCStudy(gauss, {x}, Silence=True, Binned=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d98e2f4",
   "metadata": {},
   "source": [
    "Add chi^2 calculator module to mcs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "87e1c841",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:22.019621Z",
     "iopub.status.busy": "2026-05-19T20:35:22.019484Z",
     "iopub.status.idle": "2026-05-19T20:35:22.133523Z",
     "shell.execute_reply": "2026-05-19T20:35:22.132928Z"
    }
   },
   "outputs": [],
   "source": [
    "chi2mod = ROOT.RooChi2MCSModule()\n",
    "mcs.addModule(chi2mod)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "83030c10",
   "metadata": {},
   "source": [
    "Generate 1000 samples of 1000 events"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ab9a98ed",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:22.135282Z",
     "iopub.status.busy": "2026-05-19T20:35:22.135158Z",
     "iopub.status.idle": "2026-05-19T20:35:22.933913Z",
     "shell.execute_reply": "2026-05-19T20:35:22.933462Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1980\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1960\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1940\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1920\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1900\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1880\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1860\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1840\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1820\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1800\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1780\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1760\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1740\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1720\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1700\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1680\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1660\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1640\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1620\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1600\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1580\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1560\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1540\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1520\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1500\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1480\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1460\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1440\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1420\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1400\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1380\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1360\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1340\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1320\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1300\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1280\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1260\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1240\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1220\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1200\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1180\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1160\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1140\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1120\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1100\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1080\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1060\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1040\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1020\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1000\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 980\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 960\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 940\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 920\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 900\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 880\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 860\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 840\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 820\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 800\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 780\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 760\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 740\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 720\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 700\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 680\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 660\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 640\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 620\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 600\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 580\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 560\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 540\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 520\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 500\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 480\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 460\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 440\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 420\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 400\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 380\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 360\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 340\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 320\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 300\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 280\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 260\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 240\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 220\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 200\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 180\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 160\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 140\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 120\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 100\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 80\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 60\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 40\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 20\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mcs.generateAndFit(2000, 1000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "79cc9390",
   "metadata": {},
   "source": [
    "Number of bins for chi2 plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "9c40e539",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:22.946114Z",
     "iopub.status.busy": "2026-05-19T20:35:22.945988Z",
     "iopub.status.idle": "2026-05-19T20:35:23.048855Z",
     "shell.execute_reply": "2026-05-19T20:35:23.048407Z"
    }
   },
   "outputs": [],
   "source": [
    "nBins = 100"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c71f316e",
   "metadata": {},
   "source": [
    "Fill histograms with distributions chi2 and prob(chi2,ndf) that\n",
    "are calculated by ROOT.RooChiMCSModule"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "9bf4e2e9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:23.050357Z",
     "iopub.status.busy": "2026-05-19T20:35:23.050242Z",
     "iopub.status.idle": "2026-05-19T20:35:23.202912Z",
     "shell.execute_reply": "2026-05-19T20:35:23.197007Z"
    }
   },
   "outputs": [],
   "source": [
    "hist_chi2 = mcs.fitParDataSet().createHistogram(\"chi2\", AutoBinning=nBins)\n",
    "hist_prob = mcs.fitParDataSet().createHistogram(\"prob\", AutoBinning=nBins)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "753e94a7",
   "metadata": {},
   "source": [
    "Create manager with separate fit model\n",
    "----------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1522c0b7",
   "metadata": {},
   "source": [
    "Create alternate pdf with shifted mean"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "ff7f6a58",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:23.204283Z",
     "iopub.status.busy": "2026-05-19T20:35:23.204158Z",
     "iopub.status.idle": "2026-05-19T20:35:23.313914Z",
     "shell.execute_reply": "2026-05-19T20:35:23.313312Z"
    }
   },
   "outputs": [],
   "source": [
    "mean2 = ROOT.RooRealVar(\"mean2\", \"mean of gaussian 2\", 2.0)\n",
    "gauss2 = ROOT.RooGaussian(\"gauss2\", \"gaussian PDF2\", x, mean2, sigma)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "16112ae9",
   "metadata": {},
   "source": [
    "Create study manager with separate generation and fit model. ROOT.This configuration\n",
    "is set up to generate bad fits as the fit and generator model have different means\n",
    "and the mean parameter is not floating in the fit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "74f54526",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:23.323286Z",
     "iopub.status.busy": "2026-05-19T20:35:23.323137Z",
     "iopub.status.idle": "2026-05-19T20:35:23.457993Z",
     "shell.execute_reply": "2026-05-19T20:35:23.449749Z"
    }
   },
   "outputs": [],
   "source": [
    "mcs2 = ROOT.RooMCStudy(gauss2, {x}, FitModel=gauss, Silence=True, Binned=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b503dcba",
   "metadata": {},
   "source": [
    "Add chi^2 calculator module to mcs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "0aad7f91",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:23.462353Z",
     "iopub.status.busy": "2026-05-19T20:35:23.462220Z",
     "iopub.status.idle": "2026-05-19T20:35:23.565710Z",
     "shell.execute_reply": "2026-05-19T20:35:23.565037Z"
    }
   },
   "outputs": [],
   "source": [
    "chi2mod2 = ROOT.RooChi2MCSModule()\n",
    "mcs2.addModule(chi2mod2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c3f79d47",
   "metadata": {},
   "source": [
    "Generate 1000 samples of 1000 events"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "fe75fbb1",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:23.573844Z",
     "iopub.status.busy": "2026-05-19T20:35:23.573715Z",
     "iopub.status.idle": "2026-05-19T20:35:24.388744Z",
     "shell.execute_reply": "2026-05-19T20:35:24.388087Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1980\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1960\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1940\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1920\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1900\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1880\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1860\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1840\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1820\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1800\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1780\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1760\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1740\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1720\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1700\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1680\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1660\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1640\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1620\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1600\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1580\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1560\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1540\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1520\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1500\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1480\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1460\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1440\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1420\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1400\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1380\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1360\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1340\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1320\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1300\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1280\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1260\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1240\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1220\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1200\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1180\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1160\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1140\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1120\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1100\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1080\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1060\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1040\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1020\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 1000\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 980\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 960\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 940\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 920\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 900\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 880\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 860\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 840\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 820\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 800\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 780\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 760\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 740\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 720\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 700\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 680\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 660\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 640\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 620\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 600\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 580\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 560\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 540\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 520\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 500\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 480\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 460\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 440\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 420\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 400\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 380\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 360\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 340\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 320\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 300\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 280\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 260\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 240\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 220\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 200\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 180\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 160\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 140\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 120\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 100\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 80\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 60\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 40\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 20\n",
      "[#0] PROGRESS:Generation -- RooMCStudy::run: sample 0\n",
      "[#0] WARNING:Generation -- The fit parameter 'mean' is not in the model that was used to generate toy data. The parameter 'mean2'=2 was found at the same position in the generator model. It will be used to compute pulls.\n",
      "If this is not desired, the parameters of the generator model need to be renamed or reordered.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mcs2.generateAndFit(2000, 1000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ced0027b",
   "metadata": {},
   "source": [
    "Request a the pull plot of mean. The pulls will be one-sided because\n",
    "`mean` is limited to 1.8.\n",
    "Note that RooFit will have trouble to compute the pulls because the parameters\n",
    "are called `mean` in the fit, but `mean2` in the generator model. It is not obvious\n",
    "that these are related. RooFit will nevertheless compute pulls, but complain that\n",
    "this is risky."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "6046de15",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:24.392193Z",
     "iopub.status.busy": "2026-05-19T20:35:24.392071Z",
     "iopub.status.idle": "2026-05-19T20:35:24.506094Z",
     "shell.execute_reply": "2026-05-19T20:35:24.505442Z"
    }
   },
   "outputs": [],
   "source": [
    "pullMeanFrame = mcs2.plotPull(mean)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4f377628",
   "metadata": {},
   "source": [
    "Fill histograms with distributions chi2 and prob(chi2,ndf) that\n",
    "are calculated by ROOT.RooChiMCSModule"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "c04e43a0",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:24.507870Z",
     "iopub.status.busy": "2026-05-19T20:35:24.507747Z",
     "iopub.status.idle": "2026-05-19T20:35:24.737650Z",
     "shell.execute_reply": "2026-05-19T20:35:24.737179Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf802_mcstudy_addons.png has been created\n"
     ]
    }
   ],
   "source": [
    "hist2_chi2 = mcs2.fitParDataSet().createHistogram(\"chi2\", AutoBinning=nBins)\n",
    "hist2_prob = mcs2.fitParDataSet().createHistogram(\"prob\", AutoBinning=nBins)\n",
    "hist2_chi2.SetLineColor(\"kRed\")\n",
    "hist2_prob.SetLineColor(\"kRed\")\n",
    "\n",
    "c = ROOT.TCanvas(\"rf802_mcstudy_addons\", \"rf802_mcstudy_addons\", 800, 400)\n",
    "c.Divide(3)\n",
    "c.cd(1)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "hist_chi2.GetYaxis().SetTitleOffset(1.4)\n",
    "hist_chi2.Draw()\n",
    "hist2_chi2.Draw(\"esame\")\n",
    "c.cd(2)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "hist_prob.GetYaxis().SetTitleOffset(1.4)\n",
    "hist_prob.Draw()\n",
    "hist2_prob.Draw(\"esame\")\n",
    "c.cd(3)\n",
    "pullMeanFrame.Draw()\n",
    "\n",
    "c.SaveAs(\"rf802_mcstudy_addons.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f10bec54",
   "metadata": {},
   "source": [
    "Make RooMCStudy object available on command line after\n",
    "macro finishes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "25c93564",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:24.739267Z",
     "iopub.status.busy": "2026-05-19T20:35:24.739147Z",
     "iopub.status.idle": "2026-05-19T20:35:24.856125Z",
     "shell.execute_reply": "2026-05-19T20:35:24.855638Z"
    }
   },
   "outputs": [],
   "source": [
    "ROOT.gDirectory.Add(mcs)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be227647",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "5ae56053",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:35:24.857674Z",
     "iopub.status.busy": "2026-05-19T20:35:24.857541Z",
     "iopub.status.idle": "2026-05-19T20:35:25.042734Z",
     "shell.execute_reply": "2026-05-19T20:35:25.042270Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222925033\" style=\"width: 800px; height: 400px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222925033() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(44735,'WkwIOCsAv64AeAHtneuTHEWS4P+VtrL9sGcWyov3I9P2gxBomT2BZAgGaWfmZCV1tVSn7qre6hKIGeN/P/t5RGZV9QMkRgjBCOgiPTIiw+Pl7uHu4fGP2ZPtD+eL1fxsMetnX9+Zr76bX3y7ePpwNT+/eLHeztTs5JvV8n9eLf706azXanbyyXJ7UZ/uP/1/i2db0mdku3++Xa5XDfg/y9XxrHdqdjJ9qf/HdXXdVIFz3jrv1ezk3nK1uLM+XW9mvWngw+0Pp4sd+O3yePuigneXp6ctM8gCjpm1luKLk+0X883z5WrW646Ur5bPX1xK+mS93a7PDrN9vT4/THh0sgQJq2Ynj3ePt+sjH350sZ1vqaUU8hxAtytE4bub+dniMt6kXWr4lO+wQVPWMXn8JMX3e4ZPfrLeHC82D5d/b723l/jF+nhRx/WRqf9/3P7/yNa+fdz+/2i7vv304sHy9eL0ZSuxXV8HzvpUIk0/KOCSdNmuyGHCrL9VE745KMVofrMrsw+O1fz5oED9yJ93RQ4TpmrGpmzXj1prpClXQUZSa2NDtNl4nbQLJqvZ3gcev6wd1T4ACJ4jOOtv8QUbczbJau+00SkwUU7X33/56Z3W6/vAo2/O5QWD+njv+dsp9fPp6fbTi4MP3X56cfCt208vdsVuP73Ylfzm9ZksB7r4h93j67P569qgb36YHr9+sdjOZ72Thr1YtqfbF+eLZ9uv5tvlurbiy1dnTxeb+vz18tnL17vHH+rjvfXzlnhv/XyX9vf69sH8+MF8uWL5qNnJnc364uLFfNk+OIEP1o0U7c9rZleFd1P6i/Xx8mS5OJ71J/PTi4WanfznZnn8+hD8YQfefnpxZ73e7OX/7Hi5nT9lwW83r/jA3eXrxfFBu8dPP9gsz5bb5XeLiys0797yApI6ktsGzjebWf+Xv6nZ+nzLw49qdvLZ68Wzi1m/enV6qmYnX1b6vDnJ2j45e3axfXX8w5P58fF6JQT06+UWzG58/+Wrswfz08V2OxJSOvXLxevt1dRP//Twwb3bj2f97N/GRzU7+XT96unp4pNXJyfjoH612M6XK3q09ceji+XfF99cjO8fH4Ly9qvF/HTWWyqX1xU2wN8uV8fr779en7PM9uHH+3AjZ7sMny8g3m2SfD8SgjsvZm2135lvt1cG4fZ2W/kcLXv0yWL7/WKxaoT8AJJuvbtZn329Pp/1pmNmPTqeb6GTAjweARjd7QqYH9Xs5Rfr7xb3z+f/82qaLy+/WtAjh4knny+fv7hHExrPkrk73z57MXbry4cv1t9/9t1itX24nW9fXUxT9OXtV9s1k2TK+cVi9eqT+abCTKHbz5iEU4mTrxbz4/ur0x/GEiffLrcv1q+2+/N1nMOfzy/aDBxT9nP95RIrf2cCA/z+RoHh28VToQnL1fObpAZmxp3T+cVFWzDkq2LKfsI5k3SmexuCan+D6bXSSg9WUnlyvZa3evDyzoYwhKmMHmLLSXpqeXnOfS7KGqOyHwrP2Str4mCo0Kv2NxjTm2KVyVaZZAdj+xSV/DcY1xttVfsbjO+NTar9DSb0JjjV/gYTe5Oyan+DSb3VXrW/weTe2qLa32BKb71V7W+wWjKbQnk9WHMI2t4Up0wxysQ8WNebHJXJgG6wvtYbgzJBDzb0JjveKBPCYMGqIen1YFNvQlDGW2WcHmzujQvSwBwHW3qTgrI6gsngdG+cVVJ1dIMzvXEJDJSJenC2N04rE7Liw87VenKuZekqW+sJbnChNyYpKe/D4GJvtAcDQdml3uiipICzg8u9sV761eoyuLLr9RAGr3uTtJLmFjN40zPEgrMLg7e9tUZJ/wDSVbki6fTgfS9dzKhZP/jQS5+ChimDjz2fKV6VOPhUq6GjfBp87qVGI2gOvvTGJyWNMHYIWpCQKTYE0xsflczZIVjphwa4vuTx2ffJj8+hD2Z8jr1N43Pq3fiYmdjtM6XXyjOBwxB1r1XM9ZmlU0x9tj2NkmU1RFaQcaW+YRExO6R4AMipApE6TK0kykpyrRapXRapGSLVC2DTkKhfAO2HBAIAJushgYEAIQ5pXMOMbwIDeaPzkMAAIIchCQIhqGiGNK5kl4Y0Vm/ckAp8ikx6yLqvCPJs+iDN4Nn2WbqBZ5ZwpS56yMxK6QaAunzbp1gmcQRYulMlLFzpBsqwbKW3lR5KI1wuA5hKkYwHqMTLFMhXcfLGxAjgK+AtQKViTCo9lErGinw5Sa5kSM/y7BPPRZ6tU3owWvfGGOWDEAWjjcxQb5W3g9G2EoXC8JrBaNfnpIzMGl57aYcJUTnA0FublUsq+MHo2JugVWKBlsFoSEaUvCbyKZanVc4pawHpEhXpVTMYoa2BNWQHYyBjRjmjLJCVXoUYxTIYaCvP/NkwGIgro0nH810TKsZ1PhuoqzaqFGW0HoxJPQSO9pg8GKgr8y4WZaDopTe5ULEZjNW98dAsr0yEvkPHar9lQNtLMZ1ULoOxrrdO6tGDgbTmAFtQLHMDbTVOCSmzZI6y1K3JFWeo6x4LsNr0xbAkixksQwJJrH+D1dAmp9rfYBkTQ3vkb7A6VHoLWR8sg5KdkAA9WJ161mYyKvHl3FtXKlomDVaXnlIQ6zBYhoRZQOHBGtMno2rhwRordLmVHiyDQn0UHqzxlKyFB2sCJWvhwTIeUHSTKD1Ykyq2Y6V5apzUWgTfsVrYHeSoIj1YGRKwrfUyJLWtJrvBypBIY63zg7V+aq3UzKC01oK0hYrvetWmsb21cJ4aTGE3rmFom/aDG5cxkwm+xUpuXLzCdTHLe20Hx3oe3wu8JxMIXFc1+YMZHAu7ZRcwTxKEgNC2Km4EM3i9E4z04HWVCSgOZKeSQDs5BcjDTuAog9f0RqVetM/LYhbaL+3xLGZguHFwg2fqaDu1zxtdYd5rO3iEJVCEgwpsqas1zxsnkPaCvxE8yEprjDA5Cgs0kno9eCOkvrbLQOopQjqMhgJ68BY+U5tk25BUmXHwiEOtSbA0z6JtTZImMz9ak+p7KImVJtf3SB+tSXSBzWOTavYytklyOw1IBZLZGQHrqA3ejUxPijrhenW8B++E8U4FhfNO5egOGbQhMCXbHOEroZhpqCu8G3owCmU3+PW9r+2pbRwCU7LWIyiHEkG5jtoQShoh+Za0vTZwCEWaDqTtEDVDIFxxiLpK6ZSJmjbLoA1R02IZtCHqKq0jMTAL6woTFCPkq66wBmdpchu2IcJTeF+HbYhCwmQG1iqZhXUGSpMirEVWWP2ccfI5mgiCcBaZhC1z7Y+xWWZ/+xCb1A7Vo2RdHa1xcBVmY+0OKxOBURsiU3JsH+WgWK19zJIIyaorrMGN8bfhj0Kzavukq0VKlxXW4Mre6gSJtozNo26k9No6ger6bDndbhMVXe0UJJKIdM4ak+faHfVZpgaPaSSEFe0hNULYun1IzLqGYjBDYtI1kMJhaq+83A0/zUtNvBEUhtQEHGqSzLV19WUeaaBQhwwNbP0azJB1pQQyKENuRFCIRNbTmPOmoVNpT26zseE75HE2CqXJzMU296SOqbORMStFrlW0SUhmMsJKG1khp1DC9skdIeRNI0e1uRk+OhJkbYcMH63TXjLnCZI6JlqEkCsTkOoBGneovTNkWOhI1/ksRJLZVolxhkY2kMJNEm4otdnYemHIbTaONdW1CgRK7BlbRQjbjXZVpJiMrW0si8yWsXURyyK72kl13gx5RyDB2Am/AKeat1HtxqizG/cHNfOOZktFskUZi/r9PUr2QrH5jnzXC8Wui2/IXnZKbZ74kWDTTr9DB+z8Dp36mQkdGuYndGrmER0+FEZsBGg9VFn0kNkutnGRhoRpGsl3Axg16pzrrrF16JBDxah1+JADGMlbVCFBMNqBYNToY5Y9ZOMHOVaGVodtyHUfWQdtyLKRbIQz141kxXbIsbL3OhWGHPeYLPXLdnL31do/Y6tlRzkVrVvK8V1qqpARodS434hSqhN77JRUJ3al2DnViT02NFVhaOqFxM5m3GHnVCf22BFsNOtLZlSuE7uyv5zrsI1Zcx21yjRyljGrXCJnkYEaOuw4ZW7VwWXP2Wim9FGuS3+soy79qQ5Z+q2K0niPFGuUeuyBRqhb/U04EDaVG5FuQCWK42g2Gj2NZ6PR42cmBiQTutFo+VBpJLoBOwpNv5U9Es0MLhDpxou1HUoj07WW0uh0a0kZ6XQb6tLodO3M0mSGEaoSQxvp0gh1e9m0azKnQIrtBh1f/4YCsWQe17+hWBnBykOL9X1wbKuNo6hMc8/WOA3Fxj5o2YF7Nv2p94WNuvF8NPc+KzaePg7Flt5HFbQyPg/F6d5DPpUJZijO9N4rQcYPxdneOyXkKQ3Fud5bxfY7oknwvdcKjVu0Q3Ghd0WFgi5sKC72LqtYVYTFpd4lxRY5UUPuXVBsgBM1FNQmMSqT4lC87p1TMSmTylC86Z1lN8/euHjbO9nymRyG4l1vi2IvnNNQvO9tFiVBQa0RUFulgLZwKGjSokpJmUINCQ1BKsoUamCzqjIz2QzFl95alatcV0SPpmTrl4YCcSwqB3RSQ4E0ZpWjssYNJaA9UDkra8JQgu9NVAXtVR5KkA0hijBrhgJdDKrYBrHkRT1h+SbyHSqXCsm2ucQKReQqVVKDmDKqsM9HVYPOAF2ENWUo0QEZFBcCCjIyawUM9a1rb2MFq+KixFRBGpmHEjPNMppWAqKQVagmBEyoPhWqUmvSUJIREHWYgKh8FCqhCkoPGWMbiJZYob1ABV6gjFkZ0TUAol2o+kIBUwWpl7ds5pVBy0FvQxkBQSMMJWsB0RQIaCoIGrxFdy1Kjwq6CoKGHwoKOd7SfEAUsspYmg8YKwgagKmCoOGGAoEkM2gAFgEdaLihlIoVuidjh8ImKqN9bGDtK/RNxgwFKol2GjQA6wg60ACsI+hAAx2cTCjjQANQZpRoVwWUKWU887sMhS29VwYtlkaXhtIOmAmfgVFGQTBGGK26Mh51hLx3vUEDHZXVifxoMNFIj3CocB5h1DLK+IJGnPxJ4AA6AsNVIDvK6sB7UaeaAD7ARvelsWIBjYBixuCt7VGmV12J0cYJCC7y1gsIKo63oUelAyYCRsAIImgcUeChTxzBLCBoyNvSo82jV1AxWi1lRTsIaKgIclboU2tBEvNHoctE1BV1qyl0GbKubTBtQtpFBwl1Am1R4jUYREXcrWaOAi6ojMAc+iXI1OkvNJLq2YAVzDbKZOp3SCwNpn42YZiWxCoBjIax6hQz+Dh0sQ0GH8fmsOpF0U9qJxYB0ZNWTW6C8BrUs5necBmyjOEGCm405J36gcEHAk/9ld4bDYmnfmDqh8hTPxyA+r2DWVQ9Jv3hPaykwuDjA4zGQM8T9fsIGzKZPqd+n2BSFZb6MyysWqvoD19gcBWmP4KG/Yn5LYJPMDBHUYtG6g8WRlph6m8ysdi4GI/g+0B5GDr1IxcnZTIbB+oPsYdHCiz1pT6CD++lvtwzdwSm/aH0mLjQ+4qqPGo0iBWmvmh6dNa899QXxWBYYeqLrqdvsNB56ou+x7QoMPXF0FOXwNQXoyi6BaZ9MfWitUeOkPpyj/EPWNTxsfQF6x8w9SWNVanC9C9sQYMw9I4KYQxscCSBGkVmpouEIpLge9hITaBO2AOLJhcxExoNg0DLSoKVWiEsVEuCVItZgGpJkGqx27FGtRjbjIZRWEyLJDCysAqmriRQLcxCLI7kYG7BLpiMWD7R82sYBrORHIZqYRlMv10COnmsluSg/2EbTDBJADEYh294YC3QsA6mmOQAMZgH0pkk0EGjDk4SwFSUcK0/DJiKPqT1h1B6YSL0KRYLUBc20vpUaDmMRGYeOcAUVgJZkgQwhZlUOoOpkQQEgja2JIgRSChBVgYyK2YglrYkYHUZLUGSIBYa7A7jNzClwFPEEJEV9BRrkMxmYGwrYnqgaVlBUMUgREfkhKHUiEFIDOhJQWCxCJnCfEsKAotNyBSalRQEFrOQwY4DLFYi1DggNMJVUyUwCIsZgiYh4gGzcwGfKBYbTENYLckPAcY2hElYYPDDOCSTOWNkNFiHMLLQHgguBiIrczurDH7oUqD4mHOpH+1em+oQXDERQeGLVhBcrERicwamfrR7UPxiVKK/0KfIQjAKgouVyELhgaV+LIzMaasguAb9HhQemP5BqSLLxCkIroHBYNoqTlVDmu2trBqvILhGGAwT3isIroHByCJC6AcOvXXMf7YEwLHHhikw9cNgZElFBcE1MBhPfRHDrDGu+i4wphBc43VvZYElBcE1mOSh4MDUj01e1ltWEGDDPkKWW1YQYMNOwsvuQAXqZy8hq68oCLBhNyECimwxjWE/IXoGrQL9wY5CYKsgyIY9hcBOeepnVyFwUBBkE9ijIlpEBUE2AS2pCGAKgmwC2lskkaI8+ARstgiORkyrJoAfsFMQaIPJXmCvINAmgB/vo4JAmwB+wAljtjEB/ICLcuATwY/dilbQaxPBD9gqyLWJ4AfslQOfCH7AQUGsTQQ/4KQc/RFr/zGHMFKaCH5aWURj8IngB2wUlNtE8AN2ygo+4AeM2RxTK/gBRwXZNqhkBGY3BAx+vEcSB2Z8i2LOQMRNquOLr4sBnxTae9YgcGwwEgkw+0XKI3UBM/+AMe7iSPTJqxN8yf5N3PVmd0/X862zMzU7Fe+xENTsu1n/l2K9KpatX1TFQluyKrao4rQqmHidVcU5VZxXxQVVXFTFQaOyKq6o4rUq3qjirSreqeK9Kp7NIz4i0Lasii+qBK1KMKoEq0pwqgSvCjbwEFUJ0MSsSiiqRK1KNKpEq0p0qkQcTYIqMaoSoaVZlVhUSVqVZFRJVpXkVElelcRWNKqSkioJOlxUyVqVbFTJVpXsVMlelcwmNaoCLRX6XVQpWhVs0MWqUpwqOLiUoEphC5tUKdB9saujh4ESa9GEaCwQohnV2GIgwRqxQUN8NQ47GrKrobUaAquRqzWkVUNPteyKoaQa8qmRkjWEUyMnaEikRhLWEEcNRdSIBxpaqCGAGqqnEWY19E5D5DSyq4a8aXFcgpBpJAINCdPQLY34qaFYmimnkTY1k01DlTTTTFfnHUowqzSKGQ3N0YESopVDqNTweI36RSNTaji8RprUsHaNtkXD0zWaFs2ORMPRNcoVDSvXiJIaHq7ZIGiYt0aFopEhNawb12MELH4ogQOBRoLUiNQaVq0RIDU8WiM6amRPjcCokQK1sHYRGmDLGmFJw5A1cqOGFetCCcRGDSfWCIyaMUdrgdDAD04OjHn1amLMUUTA7/lhx8+Yi6CIlsGIhFj9IRhzkQ8NY14dAxhz8ZdCNQBX5UccKaiDMWffD3vkhzoYcxEIq0cWYy7ioGHM2azDu/ihBGPOJhx+hCKDOhhzEf7YUMNY+KEEYy4OWyLnsT2GLfBDCcZclIGGMRf/OPF4MYy5OLixjYVQ80MJxlw87GQXWj3DGHMR38RDTuQ22RSKwFZdSBhzEddkdyZymuy7TMp/+/HHH9Wv5c2Jb/uN3pz1uMJPHC9pHps4cW9WZBy9nGvK0fSBS+ckAPfOQlw+BrE7IGI4lnH1hMgX883LxWbvxElN2PtkS5hOUXy9eL29vXqOCzYOqID1pe40fSDvT5fPVzO0IhXe+z6v767xdY/iYTx/vbzqOX57u71NOo7bx8vvlhdLfL/7IN7TvNn74L3508V4Cob6BK41eGoQ+P7JycVCjqdAZ1vihLYTvJfPXt5brJ5zuEZ3GidnGYOxqLQF1/PLxbano6P5lGWsHsfkx7+bFspw/oIW/vfvpoXTAL3lGH4y3+wdLvpkvhknhbhgc1yLZXr64GFdE59u5t/XQxkVvn++3R0AqUA7A1KBdgzk/vn20+pvXw+Y4QTPIpJldP9820gCjbh/vr0rB7Ja1rvLdi7gigc9GSTxeLnlVNkIf71en4oDPQn1AMud9Wq7frW5aKcWbm8bOpco5u3tlkUsROonaIF9S2LAWqH59egRjQTiREQn0Ger4882m3U7z8XKFlCyU9XdV6tnjSzwEnCPigG2IeQtB2JaZtoP2DKz7gH3xvve4vlidbx/6gbsauoeheVDu8Sx7vEgHp8YycKUkf5rU1HNTj7nLMTi4hINb6kPz+fPOAsgdU+n4/baMB2Na2ngOOU7xGbKOiaPWS9VLfkut3svcXfk6PPlBRNyHx+S+F5DJ2qaPeYbK669M2YdU1vGS9iQ64vlann26uy/F5v17qgHLw4OLAqJr6deHmwWJ4vNf97b5a7pex1XE/abCab7qbt21tRPFyefz/qgGbQp5dtZnw5THs3qcZ8py+OW8GC+P/kezA/mFpVPSbuaJenqQc0H8+ODptN3D+bHVw9+PpgfX3P288H8mMn+aNc9LeXxQQq8sZ1VosLls5ftpNKD+Xk9YfmoEY0p4fEM8+Ts5OGzzWKxujt/JtQH9CBre90PyDrYm7Yk7Y/HWGpv/ZAFcLd6SBknUJ1WNc/mDCo6i52XgzQkCs0oHGcEEhLD5rSC347nnXj3OYCRdmw3y/NPF8+WZ/PTi+lQkZDkJu3YSWTYa51kuNQ8SdtvH/NIEvcaOMETq6pCCgJIPRA8lZpIoJSpzSlTbtozfp/mVOKz/tNqtdh8RfPIyVKTz17M+r9wkOjoiB9jjwyb/iN/lEc4HvkjE4GsJoNvWXaQJO2nW32YfXqXdXuX9ZHXR/7IS06p+1f6+RvEZTE/Xmzg1nJmSrptgu4ut3fHSRPapJGTWIzi9EbmkvTas/mpFGb0/2u9XJE4CgJ35uf74NfLs0mcTDkXk71QjD+dzZ8v+NBE4O/MV8eni29fLC9eLjZfzVfP2xHmmv7J+nVLq6NXUwWTvUOcf16uT5erMbUdXKxZ7yw3z04vU/v2itOnIL3HAB8hcn/2+vzRvtgzJj7eT3x8Xc4x8SAnGb+Yv/50+VyO2DMJ72+2L9Z35meLzbxRn6vbtQfz43d2/o4Ru3HH9mB+fNN+jZ0UPbRHsQBH4tPe7vXfJc54dRd2iVzTGdcQ648H9W/lzjurnbOmFN3O25tZf8uYLrjgbHQpJgwPMznI71xnotc+J5tSkMAEHOvXrssmFaeD8UV2eoen/EPuginGBm2DLRryv3foP+guBN5a7SwqnN3bWR+6UqJOKUTnXCrpakAAZ7psXSkpFxeuRAewuUPBVlKhIbW0HKnnCH9nonYpF120cZ7pexg2IHUllFJKtlZndIQ/EUXA+tJ545xzMReUJrPLIQVi7mzW/JMdKh3JILi8nPUu+i5EXpoYrbRzjD4AplffHkYeuFW6FEqIKZkcciig2iIHEJjgunEeX1eOHOni4oOJ/rq4BNp3pQStfWAQRCgigsNWwhRcN1vG1xK2wPHVlEKwuqAL3Q9a0GlNF5dSUoo+20DH7EIPXPt6DGygO2fpcedcCDEH8BoDHRA4Qzpba2tdMMycGsFAd07GiQmVtYtUWMMZ6K7UAdLae0I01AANu8AI12JzECrhphw3Vz0FU7iu9hZc4ZbtTLHR6mSjQ714XawFWzrw9jpoyySrmYjCUGxns43aG5dNlnn8lpEY6NmPkRimSDdvHYnh0pb/zcv/ROyGJ2Zfr3lddIea403jN7y7U/9NNnovh/6ZmTcKHbK3vknsYIG8W7GD2DfXLNX9UDjXLFJY6DUrdH9DQyMr3DawVwW5dybF/WSHfm7u/lR3ttl6stw+mG8+nW/nT57PX11cPHny7MWSfU/dGsz6GSqG9fPN/OxofXJ0c/a94an6jn9SLnx77fyXzxan7E+xNM1ObtCuN9X6TaGuWq+8FrXuXic8e7H8v9Irv2udPOrOp0vMCdjlZiePJAbQNcvgkfCiaxbAo1qcGDYnd5ebi6Z6vTcfn4gaZsdt99ni0+XF+el8L+AO+8BpJ0kPi41iFwDni/XxvfnTBv+EDeHNxvGHy+MoEVYujv76v4/+/QjhwpRkjv4XeHw4A9shEcrGfNJ/NCvNT5hb9oZ2Gtg6xGNsp/c/dDcYR95s6P5+eeg+rEH6gwzRJXvOnrFHC4X4bLXdLNGMIabS5otXZ98fQvYQJJKYL851IeIRUIJYX6Xcazag3voU2MrGElOkH7+Yv0axLVtZsfc0Tfcu4cv15mxUo4JFs9bUWFonD1+dgcShw07Ek0ccdoQdnM9QXeC24xRGcsXZA69wYQocovGGQzAhq5Q5SRK8ioFDKylwBCXKQZQoh1OC4dhLdBzSCRKmgrKcLVWuKPzyk3w2KvyhguKwAe7hirMQeHRSe1S4sliF1V9F+dcpo7yyKsqvhGtRpv2r5a3ELVKk8qv33hqJJHYQlxGjD2EarxqYf0qgvST7Pph/t0AVLNbo61jmu1cHIZdZ32ljC44YOeYskQXNrE+py9F5n7022UfZm9pZ72yHUsSmnK3JadR0lNg5U0osupiSZIv1yNTge12qW0cTdXGEaZqdPJ5epSBb0VCi9pFXj2wr1TacpujkfMVqeuVqKeuyx290FAErAWeS/2mFmZKnhy/mx+vv9xRod9Yb9NHz4yVhv5jf00g+3VA3tL3GhSOYpAwGCtnrPRFYpLxsbggwhss6+MkNYeck0NTB99ar5wtYuaXcLgxmdRxYrt4y0t2l6XRvvl28pjXXTSUQb60ki/C/Wf9T8umNXdA1TcFeP4zdsm+emLqBl83E02w7e8IsQ3azKEs33SMKYCVPdbyZmfc3y+fL1cTATcrGRZeDTyY5d8UV55d0TaPNR/9xBHE+EqvBG0+M37pDrC+5JB8DzmI2vJMO+WIxXx0d/cfRUep8TDKLbpwjh8tkBH+r6fFr9MbD7fHRp4vvjqRHHFa+33OPTEEzJVDm4c/I/SZPkPvnhw4k19m14GvTRmS0kD6Ybxb4Z/1j9m+bxcmsN+XHw5qlqhoes63t6i8s4TJlV/TJcsWnP9ts7hPkk/fA979bbE5O198jSqGq3GzYFR3KLDsn438NmeWda0YWF7BJNWtRqYXbjvGtL+v1fqF6RJQk9m21JJdL7fGXKCrimzkMjfhZI9pHZcm7d2Dc21EfKktKSsHpaIJLuC2jRmGP7W2XkRm1LobA0bz4Q2lLfMguf2DKEmHcb+m3uTewMnhjSOw6jJL23sfto6pERnHPCWhUVH4wQ/TrqEpyjrqLJetUDAFEmooFVYm1xaTc2eRKsknsxO9XVWJQUXDKzCoXCTziE0E+OBdpiZvBIR/OFKqkm3IkB/QmiTifkuJ5IBSJqEt8aZ9CLUKEBvmPU1sSBJLTD4ojwyqroopKyjfNiAcRFCT8oQbh/1URMqpGanpVkdTfmrJLf2dKkkkU/W2EwT/cqLxzMfDpadOa1MtJICE3ioGouNglIjVep5Z4hxoueNWB2bHgmZMKDAn9VoldLjG5EEIs1XMA/ZaNXbE+uuhdiBzDmtULOrTrrOeAUMray0cm/ZZ4UU0qreKrc4UrPucqsIx6q4zbxE6LhdsIDhUp5nqJxr5hE/R/oRZrHI+m39nCsN9mMyraKEZpT2u2U9/crMUSs8mHoMV6Qxvq70Vd4Y0NOVkbvEsm+stb5B9//NsVfc5H58XdPIQgXfFc/0PfMnRLd84VvLhsNFFzbLPSvFuhCzgbas/ZVWdlO4WZqLOhBJc050GdFxOAnfW+dHEvu5gADi8DsrGzNpkYkg6cF945KL6c9cF2xbmMzh9vQZEt271BM+4t6Epx4mQZOah95T6jX+6+GLsofmxW3NjEKe/QfdEm11k6yJkQvOB94yVIv7H7ou1kg5uyzdYH8bUY/RNxX7xupMf3+C9qHT3HoKPTmfYy4jsHSa5SCrozYoXxOtoYGIjRRZEKrpkx42up3gRjdYmpRO2CmIP2nAKdp066WZcshxve2H8xhlj/yQX7E9OjXdT06/gvXkX1fXgv6k4jBjjOidvkvdxbdc1lUWSLvhQXxYt158DofaVvb3d9FDLQR6fFD8xp8cAN7FqnxeoS9YaXTn10Wvxn1byye7h2he77LV6zNoV31oW5L9LDAH/Xvornm/VT2UjIjuJnfRXH7Pvqd2Fgfyj1O638d7w41ep4ffKBObcJnX+7SAJ7+tp9Rfy166DpcK9yp/ev0r0h+MGbeb/9jOMiEnQx4QNTxn/0XJTLdT96Lr4Pv+BfRR1fHE7BWluOoLnM9nHyXIwax7GYjLUxEdLofXsuWoszoXM4FvJfFJCgboogxVEcGr0i6LDk5MYtz1uiEnM3A4p2k+XaKq4yE09FL7/iDEn8Zcd/EtS4lZI74UZXSS7uEW09kXLFy7E+ELmY79cMxFAiDuX4XxL0jGCoeSbcElF8xxq5L0o8JAmGTRXc+UQCENGIRweP3bXTv2f3Rt0VnRKuYGh1gxh9kN9c6qwuLoUQvI8WFUlThdgUQok25uDlpL2Ic7HTltw+5+SzKE4mJ8aP/o0SZulmzfAH7N84Cqk3K4M/SP/G6PDnKzZnnz/6N2rro08uRhtCsCZf0Yf/EofP0b9Rdz6Gujn/3fg3vvve2Pdv1J3NpbyNSUkcR3YWpRGsdEMsddV379dyCL48Pyaj8qFro3g6juzv3fs3+vRB+DfC5/9VJZt3bv1+j06QE6t6I/XL6AQ5ltrXwvzxnCD/lbQwscSYsrEmFJFPd1qYGHP0JZtEFNo/mkMkWpj40SWyMsp3fvD3o0vkv6ZLZNK+C8ZnDP2ZSwz2dDDe6M6aoLPT+AygGn7PLpHac0NZ1BwaDVaFxJFPzoF6Hlz1c3RoOTgK6sTh0YhOJorCRKNdkdsTRIUi6g60IlXfURUp3MwiiVwCgS6lZqvqEdQsBNIXlUvV2xDLG7dJlDOoS6QsAftFe0KUe1Lqd8ggR0/brxZXS7kzinxyTFUSURfhjplVHOXPf1b9Msm4v5Hj5L/m2L1zAXNy5/tA3Ssnw5AJeAHlqjIzs97HTuiGDqlIwP1RwaY5IRy91sG46o5ZfY0IEJZCjMVHCeg5Kdg+OljWY8K/FwfLccvxe9GXeJ25sSKZEr396GC5eS5ndMSx6GNwyPXmeDEGl4KEEcnKdWPcgpATN80090pru1R8wdW8+CCOhxIz4ZrsEscjdCZ4E0ux2Yqr+aF7ZYyuaw508g/VNwfKlzOuY+uSxkkuex8yjnvj2xnxKG0IXPkRHYET36V7pelCKU77EGyyXrxFD90rg8tdtGAm1hIw+1DdK03pio9Z55QKTrE770dxr7xm5A68K53WSYdILEy5LOWyc6XVqfNZm6wzrA0JevSexLnymvkyvhbnymiDTSalZK3hgqqD8JAxNQ9J7x13oLxFcMirASB/XefKq6i+D+dK+uuqL2VLlThN2XYuFBs1E1WUYm/pSMnHPjpSfmCOlG7fR+1aR0rJ8dGR8vozWNi295TFaAT+SYe9yjMbkxQmSiAhYM4eXF2E79dp8u43X0rQnzfYX31uPmVuXXdyLVga1o5cnWzmZ4snZ4v56vzV6emTEOKJP05pbhNR56doO7ePvlqvH5yut8R6/OuM/DyJ5n45Xx09eHV6+tcatm8XBPw3dqG0Imdcfw/PmznbXYn2eG276acPJ0jgOGhThKG3CREo99O04I/M+qqvl6f3fvL913STtP4D85BkRYpW9xcNG4NeR01I1sfIjh/KXWd7HsofzBC9sX+kkJIa1lGmJ49jBFeeX1f7zuQHSaZJ6X4Nr/xl0RsldtIU9w5a+8tc/N6PjnkXXRLucy6B/b67Kjm8e93rOT3z83LBV+s1R47JfJ1oIFedTrLBiydXojpXUz3F38q0f3663j6ZpAyK74kJzLN/Qmyr0+6nbmxETLx8Y+OX5+vlakvQLTE/X464tTeO7VbfW7bLWd2yXfT8yo+J6pbpiuU3Zn6959eqW7orkd8kzz7zbOUlF55ah5+PDSYubpmo5JUmlxSQsnxFviefllosFVK1IAE+Yi95/PPIy4WuhNHgclYMPcQZxa5DGrf8Kq5ytYVAp76add7FKptOt8968V6aXaUBE8G4tbvTb2dO+owTmj/bPN0RzXLFWHKU7LNHL5bPX7x1Kc57/myhv+Su2BBcsTo6rjNRpStybjhbm3FpUEZ3ISaTY/Ypyh29nc6WUsFkL3fLdtGnEHzJPkb8mA0xcV3WJTofuDLWdtEFIsAQm0EuBe5iNK6UnDQqFFW67EwO3oWQguPC585x5UiwLnO8GRsdB0V1tjpG6lKpC3gFc0+KRJ1UsUshhaxL8anoUp2pP3v8Rp33F5ptQkxO+1QiKJpOc3GKLp57brnAtovGB1usi577qY3pjLPBJZe4lcZKM4uWU7maW08kQfsYUk7eeK5Adl3EkTk6Z+Wqe9MlnZ0lmFYOcpNxl7NNTvopyxXInTfRFZudTp47c23nciI2a/Ga239zF7llxRvO+RJXONGXnqunPBcFu7+p2XeGk+bGg4iP3nvu7J6tSOVOxic/sIGQAOWz/lLo8CZaPvlhDB/15Icqj6VLbZk9Wa03Z3+en76qt8Y+Wa3Plqv56SfLVbsmScjC7Mnq4fL52VxYyZPFYdjlJ5v591Mk5ltGzZ6sJbzo/PTbxfL5C+jbYSTBq3TtbUnDO7ca3n70p4cPb3/x2c0MrIZcTOGdV/2hGywtalUCr7iCzVJisjAHi+k8mtaouTBIREuU9NfkFt09UZO9tyGaYgr69Y/mynrJ3RTVWOwiuzgcv11U4zfXs/xuLJZ47MRYnDMpl0N3Zu4e/xtJ3Ii5PIdciYT/+fL5i1Po1531arV4tt3du3l3+XpxXPfIJ/PTi8WP/x8o2rhY').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222925033', 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_1779222925033();\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
}
