{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c1a0e7ba",
   "metadata": {},
   "source": [
    "# rf508_listsetmanip\n",
    "'ORGANIZATION AND SIMULTANEOUS FITS' RooFit tutorial macro #508\n",
    "\n",
    "RooArgSet and RooArgList tools and tricks\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:**  Clemens Lange, Wouter Verkerke (C version)  \n",
    "<i><small>This notebook tutorial was automatically generated with <a href= \"https://github.com/root-project/root/blob/master/documentation/doxygen/converttonotebook.py\">ROOTBOOK-izer</a> from the macro found in the ROOT repository  on Tuesday, May 19, 2026 at 08:32 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e3ba1e24",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:26.104710Z",
     "iopub.status.busy": "2026-05-19T20:32:26.104574Z",
     "iopub.status.idle": "2026-05-19T20:32:27.107852Z",
     "shell.execute_reply": "2026-05-19T20:32:27.107104Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5cf1d04d",
   "metadata": {},
   "source": [
    "Create dummy objects\n",
    "---------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6aca445a",
   "metadata": {},
   "source": [
    "Create some variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c255a70d",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:27.110194Z",
     "iopub.status.busy": "2026-05-19T20:32:27.109916Z",
     "iopub.status.idle": "2026-05-19T20:32:27.281734Z",
     "shell.execute_reply": "2026-05-19T20:32:27.281085Z"
    }
   },
   "outputs": [],
   "source": [
    "a = ROOT.RooRealVar(\"a\", \"a\", 1, -10, 10)\n",
    "b = ROOT.RooRealVar(\"b\", \"b\", 2, -10, 10)\n",
    "c = ROOT.RooRealVar(\"c\", \"c\", 3, -10, 10)\n",
    "d = ROOT.RooRealVar(\"d\", \"d\", 4, -10, 10)\n",
    "x = ROOT.RooRealVar(\"x\", \"x\", 0, -10, 10)\n",
    "c.setError(0.5)\n",
    "a.setConstant()\n",
    "b.setConstant()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74978e26",
   "metadata": {},
   "source": [
    "Create a category"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "0b5739bf",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:27.284367Z",
     "iopub.status.busy": "2026-05-19T20:32:27.284238Z",
     "iopub.status.idle": "2026-05-19T20:32:27.402315Z",
     "shell.execute_reply": "2026-05-19T20:32:27.401740Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "e = ROOT.RooCategory(\"e\", \"e\")\n",
    "e.defineType(\"sig\")\n",
    "e.defineType(\"bkg\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9a3e765d",
   "metadata": {},
   "source": [
    "Create a pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "baac1551",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:27.404253Z",
     "iopub.status.busy": "2026-05-19T20:32:27.404132Z",
     "iopub.status.idle": "2026-05-19T20:32:27.525943Z",
     "shell.execute_reply": "2026-05-19T20:32:27.525290Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] WARNING:InputArguments -- The parameter 'b' with range [-10, 10] of the RooGaussian 'g' exceeds the safe range of (0, inf). Advise to limit its range.\n"
     ]
    }
   ],
   "source": [
    "g = ROOT.RooGaussian(\"g\", \"g\", x, a, b)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "872428ee",
   "metadata": {},
   "source": [
    "Creating, killing RooArgSets\n",
    "-------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a849209b",
   "metadata": {},
   "source": [
    "A ROOT.RooArgSet is a set of RooAbsArg objects. Each object in the set must have\n",
    "a unique name"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3ac8860f",
   "metadata": {},
   "source": [
    "Set constructors exists with up to 9 initial arguments"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d6554d07",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:27.531954Z",
     "iopub.status.busy": "2026-05-19T20:32:27.531828Z",
     "iopub.status.idle": "2026-05-19T20:32:27.651692Z",
     "shell.execute_reply": "2026-05-19T20:32:27.651034Z"
    }
   },
   "outputs": [],
   "source": [
    "s = ROOT.RooArgSet(a, b)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c8fdd880",
   "metadata": {},
   "source": [
    "At any time objects can be added with add()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "7c703957",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:27.653415Z",
     "iopub.status.busy": "2026-05-19T20:32:27.653296Z",
     "iopub.status.idle": "2026-05-19T20:32:27.761786Z",
     "shell.execute_reply": "2026-05-19T20:32:27.761121Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.add(e)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75bde768",
   "metadata": {},
   "source": [
    "Add up to 9 additional arguments in one call\n",
    "s.add(ROOT.RooArgSet(c, d))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f334bb04",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:27.767272Z",
     "iopub.status.busy": "2026-05-19T20:32:27.767148Z",
     "iopub.status.idle": "2026-05-19T20:32:27.871230Z",
     "shell.execute_reply": "2026-05-19T20:32:27.870613Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.add(c)\n",
    "s.add(d)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1491f715",
   "metadata": {},
   "source": [
    "Sets can contain any type of RooAbsArg, pdf and functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "462a660d",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:27.873038Z",
     "iopub.status.busy": "2026-05-19T20:32:27.872919Z",
     "iopub.status.idle": "2026-05-19T20:32:27.976959Z",
     "shell.execute_reply": "2026-05-19T20:32:27.976354Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.add(g)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cdc0b74e",
   "metadata": {},
   "source": [
    "Remove element d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b85b0c0c",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:27.980259Z",
     "iopub.status.busy": "2026-05-19T20:32:27.980138Z",
     "iopub.status.idle": "2026-05-19T20:32:28.089496Z",
     "shell.execute_reply": "2026-05-19T20:32:28.088898Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.remove(d)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d3d8be44",
   "metadata": {},
   "source": [
    "Accessing RooArgSet contents\n",
    "-------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6dffcf4f",
   "metadata": {},
   "source": [
    "You can look up objects by name"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "ec89d3ed",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:28.091524Z",
     "iopub.status.busy": "2026-05-19T20:32:28.091404Z",
     "iopub.status.idle": "2026-05-19T20:32:28.198701Z",
     "shell.execute_reply": "2026-05-19T20:32:28.198089Z"
    }
   },
   "outputs": [],
   "source": [
    "aptr = s.find(\"a\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4c43a4cf",
   "metadata": {},
   "source": [
    "Construct a subset by name"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "971a9902",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:28.200270Z",
     "iopub.status.busy": "2026-05-19T20:32:28.200150Z",
     "iopub.status.idle": "2026-05-19T20:32:28.308535Z",
     "shell.execute_reply": "2026-05-19T20:32:28.307938Z"
    }
   },
   "outputs": [],
   "source": [
    "subset1 = s.selectByName(\"a,b,c\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3bf0fedf",
   "metadata": {},
   "source": [
    "Construct asubset by attribute"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "4aebe288",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:28.311374Z",
     "iopub.status.busy": "2026-05-19T20:32:28.311252Z",
     "iopub.status.idle": "2026-05-19T20:32:28.418954Z",
     "shell.execute_reply": "2026-05-19T20:32:28.418366Z"
    }
   },
   "outputs": [],
   "source": [
    "subset2 = s.selectByAttrib(\"Constant\", True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "59f484a5",
   "metadata": {},
   "source": [
    "Construct the subset of overlapping contents with another set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "5b1095a2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:28.424884Z",
     "iopub.status.busy": "2026-05-19T20:32:28.424748Z",
     "iopub.status.idle": "2026-05-19T20:32:28.545639Z",
     "shell.execute_reply": "2026-05-19T20:32:28.545012Z"
    }
   },
   "outputs": [],
   "source": [
    "s1 = ROOT.RooArgSet(a, b, c)\n",
    "s2 = ROOT.RooArgSet(c, d, e)\n",
    "subset3 = s1.selectCommon(s2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c71c2c56",
   "metadata": {},
   "source": [
    "Owning RooArgSets\n",
    "---------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b6b21bf9",
   "metadata": {},
   "source": [
    "You can create a RooArgSet that owns copies of the objects instead of\n",
    "referencing the originals. A set either owns all of its components or none,\n",
    "so once addClone() is used, add() can no longer be used and will result in an\n",
    "error message"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "390a7b91",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:28.547542Z",
     "iopub.status.busy": "2026-05-19T20:32:28.547410Z",
     "iopub.status.idle": "2026-05-19T20:32:28.658357Z",
     "shell.execute_reply": "2026-05-19T20:32:28.657766Z"
    }
   },
   "outputs": [],
   "source": [
    "s3 = ROOT.RooArgSet()\n",
    "for arg in [a, b, c, d, e, g]:\n",
    "    s3.addClone(arg)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2d1a867",
   "metadata": {},
   "source": [
    "A clone of a owning set is non-owning and its\n",
    "contents is owned by the originating owning set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "d7d87d28",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:28.660201Z",
     "iopub.status.busy": "2026-05-19T20:32:28.660077Z",
     "iopub.status.idle": "2026-05-19T20:32:28.768491Z",
     "shell.execute_reply": "2026-05-19T20:32:28.767430Z"
    }
   },
   "outputs": [],
   "source": [
    "sclone = s3.Clone(\"sclone\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8848a135",
   "metadata": {},
   "source": [
    "To make a clone of a set and its contents use\n",
    "the snapshot method"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "7d8a43e9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:28.769921Z",
     "iopub.status.busy": "2026-05-19T20:32:28.769799Z",
     "iopub.status.idle": "2026-05-19T20:32:28.880221Z",
     "shell.execute_reply": "2026-05-19T20:32:28.879553Z"
    }
   },
   "outputs": [],
   "source": [
    "sclone2 = s3.snapshot()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13c1fc2a",
   "metadata": {},
   "source": [
    "If a set contains function objects, the head node\n",
    "is cloned in a snapshot. To make a snapshot of all\n",
    "servers of a function object do as follows. The result\n",
    "of a RooArgSet snapshot with deepCloning option is a set\n",
    "of cloned objects, all their clone (recursive) server\n",
    "dependencies, together form a self-consistent\n",
    "set that is free of external dependencies"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "5ddcdfe9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:28.882081Z",
     "iopub.status.busy": "2026-05-19T20:32:28.881957Z",
     "iopub.status.idle": "2026-05-19T20:32:28.985389Z",
     "shell.execute_reply": "2026-05-19T20:32:28.984782Z"
    }
   },
   "outputs": [],
   "source": [
    "sclone3 = s3.snapshot(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bf72ddf3",
   "metadata": {},
   "source": [
    "Set printing\n",
    "------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13d41086",
   "metadata": {},
   "source": [
    "Inline printing only show list of names of contained objects"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "3bffb6d5",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:28.987254Z",
     "iopub.status.busy": "2026-05-19T20:32:28.987132Z",
     "iopub.status.idle": "2026-05-19T20:32:29.117984Z",
     "shell.execute_reply": "2026-05-19T20:32:29.117341Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sclone =  { @0x55910c64eeb0, @0x55910c64eeb8, @0x55910c64eec0, @0x55910c64eec8, @0x55910c64eed0, @0x55910c64eed8 }\n"
     ]
    }
   ],
   "source": [
    "print(\"sclone = \", sclone)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aab1c536",
   "metadata": {},
   "source": [
    "Plain print shows the same, by name of the set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "fa6ca76c",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:29.119547Z",
     "iopub.status.busy": "2026-05-19T20:32:29.119426Z",
     "iopub.status.idle": "2026-05-19T20:32:29.227420Z",
     "shell.execute_reply": "2026-05-19T20:32:29.226727Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RooArgSet::sclone = (a,b,c,d,e,g)\n"
     ]
    }
   ],
   "source": [
    "sclone.Print()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1c79f53",
   "metadata": {},
   "source": [
    "Standard printing shows one line for each item with the items name, name\n",
    "and value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "98f3fa32",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:29.228867Z",
     "iopub.status.busy": "2026-05-19T20:32:29.228745Z",
     "iopub.status.idle": "2026-05-19T20:32:29.332400Z",
     "shell.execute_reply": "2026-05-19T20:32:29.332006Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  1) RooRealVar:: a = 1\n",
      "  2) RooRealVar:: b = 2\n",
      "  3) RooRealVar:: c = 3 +/- 0.5\n",
      "  4) RooRealVar:: d = 4\n",
      "  5) RooCategory:: e = sig(idx = 0)\n",
      "\n",
      "  6) RooGaussian:: g = 0.882497\n"
     ]
    }
   ],
   "source": [
    "sclone.Print(\"s\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3e7d4e0b",
   "metadata": {},
   "source": [
    "Verbose printing adds each items arguments, and 'extras' as defined by\n",
    "the object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "b6a937d8",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:29.358437Z",
     "iopub.status.busy": "2026-05-19T20:32:29.358276Z",
     "iopub.status.idle": "2026-05-19T20:32:29.463268Z",
     "shell.execute_reply": "2026-05-19T20:32:29.462488Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  1) 0x55910becc500 RooRealVar:: a = 1 C  L(-10 - 10)  \"a\"\n",
      "  2) 0x55910bd51970 RooRealVar:: b = 2 C  L(-10 - 10)  \"b\"\n",
      "  3) 0x559103e91490 RooRealVar:: c = 3 +/- 0.5  L(-10 - 10)  \"c\"\n",
      "  4) 0x559103e926a0 RooRealVar:: d = 4  L(-10 - 10)  \"d\"\n",
      "  5) 0x559109fd1530 RooCategory:: e = sig(idx = 0)\n",
      "  \"e\"\n",
      "  6) 0x55910c58eca0 RooGaussian:: g[ x=x mean=a sigma=b ] = 0.882497  \"g\"\n"
     ]
    }
   ],
   "source": [
    "sclone.Print(\"v\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8f8e78c",
   "metadata": {},
   "source": [
    "Using RooArgLists\n",
    "---------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "97d48bab",
   "metadata": {},
   "source": [
    "List constructors exists with up to 9 initial arguments"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a14b9d1d",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:29.464777Z",
     "iopub.status.busy": "2026-05-19T20:32:29.464651Z",
     "iopub.status.idle": "2026-05-19T20:32:29.577895Z",
     "shell.execute_reply": "2026-05-19T20:32:29.577353Z"
    }
   },
   "outputs": [],
   "source": [
    "l = ROOT.RooArgList(a, b, c, d)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "498c3bd3",
   "metadata": {},
   "source": [
    "Lists have an explicit order and allow multiple arguments with the same\n",
    "name"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "1e49141e",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:29.579844Z",
     "iopub.status.busy": "2026-05-19T20:32:29.579625Z",
     "iopub.status.idle": "2026-05-19T20:32:29.695700Z",
     "shell.execute_reply": "2026-05-19T20:32:29.695153Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l.add(ROOT.RooArgList(a, b, c, d))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62b8f1ef",
   "metadata": {},
   "source": [
    "Access by index is provided"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "b03960aa",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:29.697638Z",
     "iopub.status.busy": "2026-05-19T20:32:29.697478Z",
     "iopub.status.idle": "2026-05-19T20:32:29.806147Z",
     "shell.execute_reply": "2026-05-19T20:32:29.805586Z"
    }
   },
   "outputs": [],
   "source": [
    "arg4 = l.at(4)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0d09dd10",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "353968ad",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:29.808139Z",
     "iopub.status.busy": "2026-05-19T20:32:29.808013Z",
     "iopub.status.idle": "2026-05-19T20:32:29.915166Z",
     "shell.execute_reply": "2026-05-19T20:32:29.914637Z"
    }
   },
   "outputs": [],
   "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
}
