{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "00451879",
   "metadata": {},
   "source": [
    "# hist007_TH1_liveupdate_uhi\n",
    "Simple example illustrating how to use the C++ interpreter.\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:** Wim Lavrijsen, Nursena Bitirgen  \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:11 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "aa847840",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:11:58.727796Z",
     "iopub.status.busy": "2026-05-19T20:11:58.727663Z",
     "iopub.status.idle": "2026-05-19T20:12:00.133523Z",
     "shell.execute_reply": "2026-05-19T20:12:00.132863Z"
    }
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import mplhep as hep\n",
    "import numpy as np\n",
    "from ROOT import TH1F, gBenchmark, gRandom"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "673da8a7",
   "metadata": {},
   "source": [
    "Create a new canvas, and enable interactive mode."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "0e772482",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:12:00.135558Z",
     "iopub.status.busy": "2026-05-19T20:12:00.135344Z",
     "iopub.status.idle": "2026-05-19T20:12:00.308116Z",
     "shell.execute_reply": "2026-05-19T20:12:00.307517Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqoAAAH/CAYAAACfLv+zAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAH6RJREFUeJzt3X9s1fW9+PEXrbbVzFa8XMqPW8fVXec2FRxIVx0x3vSuiYZd/rgZVxfgEqfXjWsczb0T/EHn3CjXqSGZOCLT65I7L2xGvcsgeF3vyOLsDRnQxF1B49DBXdYKd5eW4dZK+/n+ca/dt1Icp7blJTweyfmj773f5/M+e8v29NNzDhOKoigCAACSKTvZGwAAgOEIVQAAUhKqAACkJFQBAEhJqAIAkJJQBQAgJaEKAEBKQhUAgJSEKgAAKQlVAABSKjlUf/zjH8f8+fNj2rRpMWHChHjmmWf+4Jpt27bFxz/+8aisrIwPfehD8fjjj490vwAAnCZKDtUjR47EzJkzY926dSc0/7XXXovrrrsurrnmmujo6IgvfvGL8bnPfS6effbZkewXAIDTxISiKIoRL54wIZ5++ulYsGDBcefcfvvtsXnz5vjZz342OPbXf/3XcejQodi6detILw0AwCnujLG+QHt7ezQ2Ng4Za2pqii9+8YvHXdPb2xu9vb2DPw8MDMSvf/3r+KM/+qOYMGHCmO4XAIDSFUURhw8fjmnTpkVZ2eh8DGrMQ7WzszNqa2uHjNXW1kZPT0/89re/jbPOOuuYNa2trXHPPfeM9dYAABhl+/fvjz/5kz8Zleca81AdiZUrV0Zzc/Pgz93d3XH++efH/v37o7q6+qTuDQCAY/X09ERdXV2cc845o/acYx6qU6ZMia6uriFjXV1dUV1dPezd1IiIysrKqKysPGa8urpaqAIAJDaab9Mc8+9RbWhoiLa2tiFjzz33XDQ0NIz1pQEAeB8rOVR/85vfREdHR3R0dET839dPdXR0xL59+yL+79f2ixcvHpx/yy23xN69e+NLX/pS7NmzJx5++OH47ne/G8uXLx/N1wEAwCmm5FD96U9/GpdffnlcfvnlERHR3Nwcl19+eaxatSoiIn71q18NRmtExJ/+6Z/G5s2b47nnnouZM2fGAw88EN/61reiqalpNF8HAACnmPf0ParjpaenJ2pqaqK7u9t7VAEAEhqLXhvz96gCAMBICFUAAFISqgAApCRUAQBISagCAJCSUAUAICWhCgBASkIVAICUhCoAACkJVQAAUhKqAACkJFQBAEhJqAIAkJJQBQAgJaEKAEBKQhUAgJSEKgAAKQlVAABSEqoAAKQkVAEASEmoAgCQklAFACAloQoAQEpCFQCAlIQqAAApCVUAAFISqgAApCRUAQBISagCAJCSUAUAICWhCgBASkIVAICUhCoAACkJVQAAUhKqAACkJFQBAEhJqAIAkJJQBQAgJaEKAEBKQhUAgJSEKgAAKQlVAABSEqoAAKQkVAEASEmoAgCQklAFACAloQoAQEpCFQCAlIQqAAApCVUAAFISqgAApCRUAQBISagCAJCSUAUAICWhCgBASkIVAICUhCoAACkJVQAAUhKqAACkJFQBAEhJqAIAkJJQBQAgJaEKAEBKQhUAgJSEKgAAKQlVAABSEqoAAKQkVAEASEmoAgCQklAFACAloQoAQEpCFQCAlIQqAAApCVUAAFISqgAApCRUAQBISagCAJCSUAUAICWhCgBASkIVAICUhCoAACmNKFTXrVsXM2bMiKqqqqivr4/t27e/6/y1a9fGhz/84TjrrLOirq4uli9fHr/73e9GumcAAE4DJYfqpk2borm5OVpaWmLnzp0xc+bMaGpqijfeeGPY+U888USsWLEiWlpaYvfu3fHoo4/Gpk2b4o477hiN/QMAcIoqOVQffPDBuOmmm2Lp0qXx0Y9+NNavXx9nn312PPbYY8POf+GFF+Kqq66KG264IWbMmBGf+tSn4vrrr/+Dd2EBADi9lRSqfX19sWPHjmhsbPz9E5SVRWNjY7S3tw+75sorr4wdO3YMhunevXtjy5Ytce21177XvQMAcAo7o5TJBw8ejP7+/qitrR0yXltbG3v27Bl2zQ033BAHDx6MT37yk1EURRw9ejRuueWWd/3Vf29vb/T29g7+3NPTU8o2AQA4BYz5p/63bdsWq1evjocffjh27twZTz31VGzevDnuvffe465pbW2NmpqawUddXd1YbxMAgGQmFEVRnOjkvr6+OPvss+PJJ5+MBQsWDI4vWbIkDh06FP/6r/96zJp58+bFJz7xifj6178+OPbP//zPcfPNN8dvfvObKCs7tpWHu6NaV1cX3d3dUV1dXeprBABgjPX09ERNTc2o9lpJd1QrKipi9uzZ0dbWNjg2MDAQbW1t0dDQMOyaN99885gYLS8vj4iI4zVyZWVlVFdXD3kAAHB6Kek9qhERzc3NsWTJkpgzZ07MnTs31q5dG0eOHImlS5dGRMTixYtj+vTp0draGhER8+fPjwcffDAuv/zyqK+vj1dffTXuvvvumD9//mCwAgDAO5UcqgsXLowDBw7EqlWrorOzM2bNmhVbt24d/IDVvn37htxBveuuu2LChAlx1113xS9/+cv44z/+45g/f3587WtfG91XAgDAKaWk96ieLGPxngcAAEbPSX+PKgAAjBehCgBASkIVAICUhCoAACkJVQAAUhKqAACkJFQBAEhJqAIAkJJQBQAgJaEKAEBKQhUAgJSEKgAAKQlVAABSEqoAAKQkVAEASEmoAgCQklAFACAloQoAQEpCFQCAlIQqAAApCVUAAFISqgAApCRUAQBISagCAJCSUAUAICWhCgBASkIVAICUhCoAACkJVQAAUhKqAACkJFQBAEhJqAIAkJJQBQAgJaEKAEBKQhUAgJSEKgAAKQlVAABSEqoAAKQkVAEASEmoAgCQklAFACAloQoAQEpCFQCAlIQqAAApCVUAAFISqgAApCRUAQBISagCAJCSUAUAICWhCgBASkIVAICUhCoAACkJVQAAUhKqAACkJFQBAEhJqAIAkJJQBQAgJaEKAEBKQhUAgJSEKgAAKQlVAABSEqoAAKQkVAEASEmoAgCQklAFACAloQoAQEpCFQCAlIQqAAApCVUAAFISqgAApCRUAQBISagCAJCSUAUAICWhCgBASkIVAICUhCoAACkJVQAAUhKqAACkJFQBAEhJqAIAkJJQBQAgJaEKAEBKIwrVdevWxYwZM6Kqqirq6+tj+/bt7zr/0KFDsWzZspg6dWpUVlbGRRddFFu2bBnpngEAOA2cUeqCTZs2RXNzc6xfvz7q6+tj7dq10dTUFC+//HJMnjz5mPl9fX3xF3/xFzF58uR48sknY/r06fGLX/wizj333NF6DQAAnIImFEVRlLKgvr4+rrjiinjooYciImJgYCDq6uri1ltvjRUrVhwzf/369fH1r3899uzZE2eeeeaINtnT0xM1NTXR3d0d1dXVI3oOAADGzlj0Wkm/+u/r64sdO3ZEY2Pj75+grCwaGxujvb192DXf//73o6GhIZYtWxa1tbVxySWXxOrVq6O/v/+41+nt7Y2e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AICUhCoAACmlCdV169bFjBkzoqqqKurr62P79u3vOv973/teXHzxxVFVVRWXXnppbNmyZdz2yntXynlv2LAh5s2bFxMnToyJEydGY2PjH/zng1xK/fP9to0bN8aECRNiwYIFY75HRk+p533o0KFYtmxZTJ06NSorK+Oiiy7yv+nvI6We99q1a+PDH/5wnHXWWVFXVxfLly+P3/3ud+O2X0bmxz/+ccyfPz+mTZsWEyZMiGeeeeYPrtm2bVt8/OMfj8rKyvjQhz4Ujz/+eOkXLhLYuHFjUVFRUTz22GPFf/7nfxY33XRTce655xZdXV3Dzv/JT35SlJeXF/fdd1/x0ksvFXfddVdx5plnFi+++OK4753SlXreN9xwQ7Fu3bpi165dxe7du4u/+Zu/KWpqaor/+q//Gve9U7pSz/ttr732WjF9+vRi3rx5xV/+5V+O2355b0o9797e3mLOnDnFtddeWzz//PPFa6+9Vmzbtq3o6OgY971TulLP+zvf+U5RWVlZfOc73ylee+214tlnny2mTp1aLF++fNz3Tmm2bNlS3HnnncVTTz1VRETx9NNPv+v8vXv3FmeffXbR3NxcvPTSS8U3vvGNory8vNi6dWtJ100RqnPnzi2WLVs2+HN/f38xbdq0orW1ddj5n/nMZ4rrrrtuyFh9fX3xt3/7t2O+V967Us/7nY4ePVqcc845xbe//e0x3CWjZSTnffTo0eLKK68svvWtbxVLliwRqu8jpZ73N7/5zeKCCy4o+vr6xnGXjJZSz3vZsmXFn//5nw8Za25uLq666qox3yuj50RC9Utf+lLxsY99bMjYwoULi6amppKuddJ/9d/X1xc7duyIxsbGwbGysrJobGyM9vb2Yde0t7cPmR8R0dTUdNz55DGS836nN998M956660477zzxnCnjIaRnvdXvvKVmDx5ctx4443jtFNGw0jO+/vf/340NDTEsmXLora2Ni655JJYvXp19Pf3j+POGYmRnPeVV14ZO3bsGHx7wN69e2PLli1x7bXXjtu+GR+j1Wol/81Uo+3gwYPR398/+Ddbva22tjb27Nkz7JrOzs5h53d2do7pXnnvRnLe73T77bfHtGnTjvkDQD4jOe/nn38+Hn300ejo6BinXTJaRnLee/fujX//93+Pz372s7Fly5Z49dVX4wtf+EK89dZb0dLSMk47ZyRGct433HBDHDx4MD75yU9GURRx9OjRuOWWW+KOO+4Yp10zXo7Xaj09PfHb3/42zjrrrBN6npN+RxVKsWbNmti4cWM8/fTTUVVVdbK3wyg7fPhwLFq0KDZs2BCTJk062dthHAwMDMTkyZPjkUceidmzZ8fChQvjzjvvjPXr15/srTEGtm3bFqtXr46HH344du7cGU899VRs3rw57r333pO9NZI66XdUJ02aFOXl5dHV1TVkvKurK6ZMmTLsmilTppQ0nzxGct5vu//++2PNmjXxwx/+MC677LIx3imjodTz/vnPfx6vv/56zJ8/f3BsYGAgIiLOOOOMePnll+PCCy8ch50zEiP58z116tQ488wzo7y8fHDsIx/5SHR2dkZfX19UVFSM+b4ZmZGc99133x2LFi2Kz33ucxERcemll8aRI0fi5ptvjjvvvDPKytw/O1Ucr9Wqq6tP+G5qZLijWlFREbNnz462trbBsYGBgWhra4uGhoZh1zQ0NAyZHxHx3HPPHXc+eYzkvCMi7rvvvrj33ntj69atMWfOnHHaLe9Vqed98cUXx4svvhgdHR2Dj09/+tNxzTXXREdHR9TV1Y3zK6AUI/nzfdVVV8Wrr746+C8kERGvvPJKTJ06VaQmN5LzfvPNN4+J0bf/JeV/P6PDqWLUWm1EH/caZRs3biwqKyuLxx9/vHjppZeKm2++uTj33HOLzs7OoiiKYtGiRcWKFSsG5//kJz8pzjjjjOL+++8vdu/eXbS0tPh6qveRUs97zZo1RUVFRfHkk08Wv/rVrwYfhw8fPomvghNV6nm/k0/9v7+Uet779u0rzjnnnOLv/u7vipdffrn4wQ9+UEyePLn46le/ehJfBSeq1PNuaWkpzjnnnOJf/uVfir179xb/9m//Vlx44YXFZz7zmZP4KjgRhw8fLnbt2lXs2rWriIjiwQcfLHbt2lX84he/KIqiKFasWFEsWrRocP7bX0/1D//wD8Xu3buLdevWvX+/nqooiuIb3/hGcf755xcVFRXF3Llzi//4j/8Y/M+uvvrqYsmSJUPmf/e73y0uuuiioqKiovjYxz5WbN68+STsmpEq5bw/+MEPFhFxzKOlpeUk7Z5Slfrn+/8nVN9/Sj3vF154oaivry8qKyuLCy64oPja175WHD169CTsnJEo5bzfeuut4stf/nJx4YUXFlVVVUVdXV3xhS98ofif//mfk7R7TtSPfvSjYf+/+O3zXbJkSXH11Vcfs2bWrFlFRUVFccEFFxT/9E//VPJ1JxTutQMAkNBJf48qAAAMR6gCAJCSUAUAICWhCgBASkIVAICUhCoAACkJVQAAUhKqAACkJFQBAEhJqAIAkJJQBQAgJaEKAEBK/w8cFndl2PLRlgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.ion()\n",
    "fig, ax = plt.subplots(figsize=(8, 6), num=\"The HSUM Example\")\n",
    "\n",
    "gBenchmark.Start(\"hsum\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07d25885",
   "metadata": {},
   "source": [
    "Create some histograms."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "34a841d4",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:12:00.309844Z",
     "iopub.status.busy": "2026-05-19T20:12:00.309720Z",
     "iopub.status.idle": "2026-05-19T20:12:00.422104Z",
     "shell.execute_reply": "2026-05-19T20:12:00.421556Z"
    }
   },
   "outputs": [],
   "source": [
    "BINS = 100\n",
    "RANGE_MIN, RANGE_MAX = -4, 4\n",
    "total = TH1F(\"total\", \"This is the total distribution\", BINS, RANGE_MIN, RANGE_MAX)\n",
    "main = TH1F(\"main\", \"Main contributor\", BINS, RANGE_MIN, RANGE_MAX)\n",
    "s1 = TH1F(\"s1\", \"This is the first signal\", BINS, RANGE_MIN, RANGE_MAX)\n",
    "s2 = TH1F(\"s2\", \"This is the second signal\", BINS, RANGE_MIN, RANGE_MAX)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "06d0e87d",
   "metadata": {},
   "source": [
    "total.Sumw2()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8db1aab0",
   "metadata": {},
   "source": [
    "initialize a dictionary that holds the histogram counts as numpy arrays"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "546939da",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:12:00.429390Z",
     "iopub.status.busy": "2026-05-19T20:12:00.429262Z",
     "iopub.status.idle": "2026-05-19T20:12:00.532736Z",
     "shell.execute_reply": "2026-05-19T20:12:00.532109Z"
    }
   },
   "outputs": [],
   "source": [
    "counts = {\"total\": np.zeros(BINS), \"main\": np.zeros(BINS), \"s1\": np.zeros(BINS), \"s2\": np.zeros(BINS)}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a08975ba",
   "metadata": {},
   "source": [
    "Initialize random number generator."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "3df7e1f9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:12:00.535530Z",
     "iopub.status.busy": "2026-05-19T20:12:00.535405Z",
     "iopub.status.idle": "2026-05-19T20:12:00.643040Z",
     "shell.execute_reply": "2026-05-19T20:12:00.642492Z"
    }
   },
   "outputs": [],
   "source": [
    "gRandom.SetSeed()\n",
    "gauss, landau = gRandom.Gaus, gRandom.Landau"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ddd34905",
   "metadata": {},
   "source": [
    "def gauss(loc, scale):\n",
    "    return np.random.normal(loc, scale)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2428317",
   "metadata": {},
   "source": [
    "def landau(loc, scale):\n",
    "    return np.random.standard_cauchy() * scale + loc"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ef883bf1",
   "metadata": {},
   "source": [
    "initialize the histogram filling method"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "c3adbf27",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:12:00.645193Z",
     "iopub.status.busy": "2026-05-19T20:12:00.645068Z",
     "iopub.status.idle": "2026-05-19T20:12:00.748572Z",
     "shell.execute_reply": "2026-05-19T20:12:00.748040Z"
    }
   },
   "outputs": [],
   "source": [
    "def fill_hist(hist_name, x, weight=1.0):\n",
    "    if RANGE_MIN <= x < RANGE_MAX:\n",
    "        idx = int((x - RANGE_MIN) / (RANGE_MAX - RANGE_MIN) * BINS)\n",
    "        counts[hist_name][idx] += weight"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e663d021",
   "metadata": {},
   "source": [
    "Fill histograms randomly"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "09a7c9bd",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:12:00.759839Z",
     "iopub.status.busy": "2026-05-19T20:12:00.759699Z",
     "iopub.status.idle": "2026-05-19T20:12:10.168456Z",
     "shell.execute_reply": "2026-05-19T20:12:10.167771Z"
    }
   },
   "outputs": [],
   "source": [
    "kUPDATE = 500\n",
    "N_EVENTS = 10000\n",
    "for i in range(1, N_EVENTS + 1):\n",
    "    # Generate random values.\n",
    "    xmain = gauss(-1, 1.5)\n",
    "    xs1 = gauss(-0.5, 0.5)\n",
    "    xs2 = landau(1, 0.15)\n",
    "\n",
    "    # Fill histograms\n",
    "    # Compute the counts\n",
    "    fill_hist(\"main\", xmain)\n",
    "    fill_hist(\"s1\", xs1, 0.3)\n",
    "    fill_hist(\"s2\", xs2, 0.2)\n",
    "    fill_hist(\"total\", xmain)\n",
    "    fill_hist(\"total\", xs1, 0.3)\n",
    "    fill_hist(\"total\", xs2, 0.2)\n",
    "    # Set the bin contents\n",
    "    total[...] = counts[\"total\"]\n",
    "    main[...] = counts[\"main\"]\n",
    "    s1[...] = counts[\"s1\"]\n",
    "    s2[...] = counts[\"s2\"]\n",
    "\n",
    "    # Update display every kUPDATE events.\n",
    "    if i % kUPDATE == 0:\n",
    "        ax.cla()\n",
    "        entries = total.GetEntries()\n",
    "        mean = total.GetMean()\n",
    "        stddev = total.GetStdDev()\n",
    "        stats_text = f\"Entries = {entries:.0f}\\nMean = {mean:.2f}\\nStd Dev = {stddev:.2f}\"\n",
    "        hep.histplot(main, histtype=\"fill\", color=\"gray\", alpha=0.5, edgecolor=\"blue\", linewidth=1.5, ax=ax)\n",
    "        hep.histplot(total, histtype=\"errorbar\", color=\"black\", ecolor=\"blue\", linewidth=2, ax=ax)\n",
    "        hep.histplot(s1, histtype=\"errorbar\", color=\"blue\", alpha=0.7, ecolor=\"blue\", linewidth=2, marker=\"+\", ax=ax)\n",
    "        hep.histplot(s2, histtype=\"errorbar\", color=\"blue\", alpha=0.7, ecolor=\"blue\", linewidth=2, marker=\"+\", ax=ax)\n",
    "        ax.set_title(\"This is the total distribution\", pad=20, fontsize=14, loc=\"center\")\n",
    "        ax.text(\n",
    "            0.95,\n",
    "            0.90,\n",
    "            stats_text,\n",
    "            transform=ax.transAxes,\n",
    "            ha=\"right\",\n",
    "            va=\"top\",\n",
    "            fontsize=12,\n",
    "            bbox=dict(facecolor=\"white\", edgecolor=\"black\", boxstyle=\"round,pad=0.2\", alpha=0.9),\n",
    "        )\n",
    "\n",
    "        # Plot formatting\n",
    "        ax.set_xlim(RANGE_MIN, RANGE_MAX)\n",
    "        ax.set_ylim(0, max(counts[\"total\"]) * 1.2)\n",
    "        plt.pause(0.001)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a1bd10a",
   "metadata": {},
   "source": [
    "Done, show final plot."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "f2657eb4",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:12:10.170430Z",
     "iopub.status.busy": "2026-05-19T20:12:10.170305Z",
     "iopub.status.idle": "2026-05-19T20:12:10.311944Z",
     "shell.execute_reply": "2026-05-19T20:12:10.311514Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.grid(True)\n",
    "plt.ioff()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c5798f39",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "ce91a55b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:12:10.324534Z",
     "iopub.status.busy": "2026-05-19T20:12:10.324344Z",
     "iopub.status.idle": "2026-05-19T20:12:10.455354Z",
     "shell.execute_reply": "2026-05-19T20:12:10.454810Z"
    }
   },
   "outputs": [],
   "source": [
    "%jsroot on\n",
    "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
}
