{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "435077b1",
   "metadata": {},
   "source": [
    "# gr108_timeSeriesFromCSV\n",
    "This macro illustrates the use of the time axis on a TGraph\n",
    "with data read from a text file containing the SWAN usage\n",
    "statistics during July 2017.\n",
    "\n",
    "\n",
    "\n",
    "**Author:**  Danilo Piparo, Olivier Couet  \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:38 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "197460de",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:38:22.017555Z",
     "iopub.status.busy": "2026-05-19T20:38:22.017439Z",
     "iopub.status.idle": "2026-05-19T20:38:22.994005Z",
     "shell.execute_reply": "2026-05-19T20:38:22.993448Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5e050a8d",
   "metadata": {},
   "source": [
    "Open the data file. This csv contains the usage statistics of a CERN IT\n",
    "service, SWAN, during two weeks. We would like to plot this data with\n",
    "ROOT to draw some conclusions from it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d67a5918",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:38:22.995774Z",
     "iopub.status.busy": "2026-05-19T20:38:22.995640Z",
     "iopub.status.idle": "2026-05-19T20:38:23.111276Z",
     "shell.execute_reply": "2026-05-19T20:38:23.110642Z"
    }
   },
   "outputs": [],
   "source": [
    "dirName = str(ROOT.gROOT.GetTutorialDir())\n",
    "dirName += \"/visualisation/graphs/\"\n",
    "dirName= dirName.replace(\"/./\", \"/\")\n",
    "inputFileName = \"%s/SWAN2017.dat\" %dirName"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c87be9af",
   "metadata": {},
   "source": [
    "Create the time graph. In this example, we don't specify anything about it,\n",
    "and data points will be added with SetPoint (the first point has index 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "0f3bee86",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:38:23.112722Z",
     "iopub.status.busy": "2026-05-19T20:38:23.112585Z",
     "iopub.status.idle": "2026-05-19T20:38:23.230427Z",
     "shell.execute_reply": "2026-05-19T20:38:23.229796Z"
    }
   },
   "outputs": [],
   "source": [
    "g = ROOT.TGraph()\n",
    "g.SetTitle(\"SWAN Users during July 2017;Time;Number of Sessions\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "29457c7c",
   "metadata": {},
   "source": [
    "Read the data and fill the graph with time along the X axis and number\n",
    "of users along the Y axis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "5830a897",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:38:23.231924Z",
     "iopub.status.busy": "2026-05-19T20:38:23.231790Z",
     "iopub.status.idle": "2026-05-19T20:38:23.348589Z",
     "shell.execute_reply": "2026-05-19T20:38:23.347892Z"
    }
   },
   "outputs": [],
   "source": [
    "lines = open(inputFileName, \"r\").readlines()\n",
    "\n",
    "for i, line in enumerate(lines):\n",
    "    d, h, value = line.split()\n",
    "    g.SetPoint(i, ROOT.TDatime(\"%s %s\" %(d,h)).Convert(), float(value))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "79333327",
   "metadata": {},
   "source": [
    "Draw the graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5817e582",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:38:23.350081Z",
     "iopub.status.busy": "2026-05-19T20:38:23.349957Z",
     "iopub.status.idle": "2026-05-19T20:38:23.535984Z",
     "shell.execute_reply": "2026-05-19T20:38:23.535202Z"
    }
   },
   "outputs": [],
   "source": [
    "c = ROOT.TCanvas(\"c\", \"c\", 950, 500)\n",
    "c.SetLeftMargin(0.07)\n",
    "c.SetRightMargin(0.04)\n",
    "c.SetGrid()\n",
    "g.SetLineWidth(3)\n",
    "g.SetLineColor(ROOT.kBlue)\n",
    "g.Draw(\"al\")\n",
    "g.GetYaxis().CenterTitle()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04e8fb2d",
   "metadata": {},
   "source": [
    "Make the X axis labelled with time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0981489a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:38:23.537587Z",
     "iopub.status.busy": "2026-05-19T20:38:23.537462Z",
     "iopub.status.idle": "2026-05-19T20:38:23.659991Z",
     "shell.execute_reply": "2026-05-19T20:38:23.658834Z"
    }
   },
   "outputs": [],
   "source": [
    "xaxis = g.GetXaxis()\n",
    "xaxis.SetTimeDisplay(1)\n",
    "xaxis.CenterTitle()\n",
    "xaxis.SetTimeFormat(\"%a %d\")\n",
    "xaxis.SetTimeOffset(0)\n",
    "xaxis.SetNdivisions(-219)\n",
    "xaxis.SetLimits(ROOT.TDatime(2017, 7, 3, 0, 0, 0).Convert(), ROOT.TDatime(2017, 7, 22, 0, 0, 0).Convert())\n",
    "xaxis.SetLabelSize(0.025)\n",
    "xaxis.CenterLabels()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0e382cbd",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e29ec2dd",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:38:23.661672Z",
     "iopub.status.busy": "2026-05-19T20:38:23.661529Z",
     "iopub.status.idle": "2026-05-19T20:38:23.853356Z",
     "shell.execute_reply": "2026-05-19T20:38:23.852383Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779223103842\" style=\"width: 950px; height: 500px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779223103842() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(30182,'WkwI2SkA5nUAeAHVnWuPHDeWpv+KkJj5Rid4v0R8kmVr3LOyJVjusTSNwSKlypJyXaqsqUrZcg/83xfPIYPBLFlet7cbmBFUCR4GGTx8efjy8Jb5X5v/ffr5Zn+9e7ffTJvvHu2uf9zdfb9/9fx6d3P39njaqM3ln68P//l+/6cvNpNWm8vPD6e7Gnr66v/sX5+I35Ds6c3pcLxuwv86XF9sJqc2l/1N03/9WlmfKsA5b533anP55HC9f3S8Ot5uJtPE56efr/ar+P3h4vS2io8PV1ctMcoiLom1luz7y9PXu9s3h+vNpLc6qc3lt4c3b8c4Cv38eDod360Jyfrd8eY84sXlATWs2ly+XIMPa5AcL+5OuxPllEKaM+lhlcj8+Hb3bn9fc+LuVb2nO69ST7pEL68k+4gNr/z8eHuxv31++GvDb4j8+nixry37wmwm40suRucctq7oSFO+NJvpM5u3ySdbvE9EZ6ppN5MJWqcQXCrblHwWTOxmcj5vkw3Rpmysd0D74nR8+Oru2eHD/uqHzfRZijmFtC0ulmKdp0FenI6/5/FmCltjc0oxlWR0CmX/GQW8PCvAu7jVwaXsg7cuiGLr+3/j6Wb6zGxt0N7qbJItRUc6w9nLsbE/r28bxc1UPBn+7SyDTyjwb2uW84jN9FmNWBA6HV/88KttIQD9P59uJlN82aZso0/GFhfUZnj3yx9+tYXau3n6a829PN5Mn+ltKiU5nWIKMSZH5V5cHX/65otH1ZJejsKLP9/IAwz05RD+vsd+1UMPX92dvejhq7uzdz18dbdme/jqbs355w/v6NzGl6K91loa5WeJoxf++cO73YdqrzGbuDwmzhm9LSm7+g9L/O7t/rTbTI53PHt7aKGHdzf716dvd6fDsdbym/fvXu1va/i7w+sfPqzBn2vwyfFNi3xyfLPG/bU+fba7eLY7XEMVanP56PZ4d/d2d2gv7OKzYyPesQ+DeJXX7vv18eJwedhfbKbL3dXdXm0u/+X2cPFhM51u3y/Sz116+Oru0fF4O6T+8uJw2r2C2lqGx4cP+4uzWi8vfnZ7eHc4HX7c333E708Odwwfy9DSxN3t7Wb6y3+ozfHmROAXtbn88sP+9d1mun5/daU2l9/Useg1I8N3hxNqVOGb9++e7a72p9MyHADWN/sPp49jv/jT82dPHr7cTJt/WoJqc/nF8f2rq/3n7y8vl8b6dn/aHa5BqtX0xd3hr/s/3y3PX56L8vTb/e5qM1kKl8dVNnobbJQO8P3h+uL403fHmxe1Pbv8cpQbMfOamuCrPeNQM4GfFvp49HbTOOLR7nT6COSHp1Mds6nfi8/3p5/2++s2JJ1JguTj2+O77443m8lspade7E4wvggvFwGmf1gF84va/PD18cf905vdf77v9vDDt3twOY+8/Orw5u0TqtDGX7HM3en12wXcH56/Pf705Y/769Pz0+70/q6b5w8P35+OGEFP+fX++v3nu9sqYyIPX2NkPcflt/vdxdPrq9WKvz+c3h7fn0Z7XGz0q91ds7AlZkz1l3tuyd/N+WEo+qTz8/3+lfT4w/WbT3lAQgVXu7u71iFIV12uMeIGU93oyYag2t9sJq200rOVWEJu0vJUz16e2RDm0PPoObaUxKeWlnCeclHWGJX9XAhnr6yJs6FAr9rfbMxkilUmW2WSnY2dUlTyfzZuMtqq9jcbPxmbVPubTZhMcKr9zSZOJmXV/maTJqu9an+zyZO1RbW/2ZTJeqva32y1JDaF/Hq25ly0kylOmWKUiXm2bjI5KpMR3Wx9LTcGZYKebZhMdjxRJoTZolVT0uvZpsmEoIy3yjg92zwZF6SCOc62TCYFZXVEk9npyTirpOjoZmcm4xIaKBP17OxknFYmZMWLnavl5FzzApWt5QQ3uzAZk5Tk92F2cTLao4Go7NJkdFGSwdnZ5clYL7haXWZXVtRDmL2eTNJKqlvM7M1EE4vOLszeTtYaJfggAlWuSjo9ez8JxLSa9bMPk2CKGqbMPk68pnhV4uxTLQagfJp9nqREI2rOvkzGJyWVMHYOWpQQE5uDmYyPSmx2DlZwaIKbSl7Cfkp+CYcpmCUcJ5uWcJrcEswYdntNmbTyGHCYo560irmG6TrF1LCdqJR0qznSg4wr9QmdCOuQ7AEhpypEyjC1kCg9ybVSpHTppGaOFC+CTXOifBG0nxMKIJis54QGIoQ4p6UP074JDeSJznNCA4Qc5iQKhKCimdPSk12a01K8cXMqU9VQ6TnrqSpI2ExBqkHYTllgIEwXruyi54xVCgwItftSnp4z3SQuAl23aqXnTMcVGBDotoK20nNpxOUygqmMZDxCJS9ToK/i5ImJEcFXwVuEymIYlZ5LpbEib06SKhnis4R9IlwkbJ3Ss9F6MsYoH4QUjDZiod4qb2ejbSWFQvOa2Wg35aSMWA2PvdTDhKgcYpiszcolFfxsdGRCpBIdtMxGQxlR0prIq+ieVjmnrEUEEhVB1cxGuDXQh+xsDDRmlDPKIllBFTKKZTZwK2H+bJgN5EprAjzvNaFqXO3ZwK7aqFKU0Xo2Jk0QHPUxeTawK3YXizIweplMLhRsZmP1ZDyc5ZWJ8Ds8VnHLiHaSbDqpXGZj3WSdlKNnA7XmwLCg6OYGbjVOCZVZEkfp6tbkqjPsOgwBVpupGLpkMbOlSaDE+jdbDTc51f5mS5sY6iN/s9Wh8i20PlsaJTuhAD1bnSb6ZjIq8eY8WVeqWibNVpeJXJB1mC1NghWQebbGTMmomnm2xgovt9yzpVEoj8yzNZ6cNfNsTSBnzTxb2gNGN4ncszWparsUmnvlpNQi+i7FMtxBR1Xp2UqToG0tlyapdTXZzVaaRCprnZ+t9b22UjKN0mqL0hYWX1G1aalvzZx7hcnslj4Mt2k/u6UbY0yMW/TkNopXuXZmea7t7OjPy3ORB59A5NqrSR/M7OjYLbmIuXsQIsJt1d0IZvZ6dYz07HX1CciOZHtOpNVPQfIMJ4wos9egUdmL+nnpzML9Uh9PZ0ZmNA5u9piOtr1+3ugq81zb2eMsoSIjqMiWslr1vHEiaS/6G9GDpNTGyCBHZpEWqtezN0L1tV4GqicL8Qw0ZNCzt4wztUq2NUn1GWePO9SqxJDm6bStSlJl7KNVqT6HSaxUuT7H+2hVAgKblyrV5GWpk6R2GpECJLEzItZWm71bBj3J6mTUq+09eycDb88oI2/PBxzSaHPAJJuN8JZQTG/qKq9Nj0ahrI1fn/tan1rHOWCStRxROZSIyrXV5lDSIsm7pO61gnMoUnUkbeeoaQIZFeeoq5dOnqipszTaHDU1lkabo67eOh4DVlh7mKgYoa/aw5qcpcqt2ebImMLz2mxzFAoTC6xFYoXVAqVKkaFFelh9nXHyOqqIgowsYoQtccVjqZYZpw+xee2wHjlr72iVY1TBGiscVgyBVpsjJrnUj3wwVqsfVhKhrNrDmtwG/tb8UTir1k+gFi9deliT6/BWDSTaslSPsvHSa+1Eqv2zpXTrJCq6CgoeScQ7p49JuMJRw2IaBNNChFXtOTUibLDPCatrKgYzJ4yuiWQOvb7ycG1+qpeaeyMqzKk5OJQkiWvt6sO8cKCwQ4YDG67BzFlXJpBGmXMjQSGJrHub86SpU7knN2ts+s55sUZhmowtNtuTMjrY+JiVkWsRzQhJTEKG0kYrpBQmbK9ciZAnjY5qdTPj6ELI2s6ZcbSavSTOXZIyOhfh5IoBUjxCGx0qOnNmCF14nddCklhbJeMMRzaRzM0Tbio1a2wozLlZ41JS7atIqMScsRWEs924qyqFMba60S0yU8YGEd0iuwpStZs5rwSJxk7GC3SqaRtrt4E6u2V+UBOvnC0FyRRlyerHOUr2wti8R97rhbFr55uzl5lSsxO/EDb19Ks6aOdXdeprujpUzHd1auJFHV4UFm1EaAjVIXrOTBdbu0hFQjcjeW9Ao8bOuc4aG6BzDlWjBvicAxrJU5ZCgmi0imjU+DHLHLKNBznWAa0225zrPLI22pxlItmIM9eJZNV2zrEO79UU5hyHQZbyZTq5vrXis9RaZpQ9a51SLs9SWwpZFEpt9FtUStWwF1BSNezK2DlVw14qmqoz1FFIzGyWGXZO1bAXIJho1odYVK6GXYe/nGuzLUlzbbU6aOQsbVZHiZzFB2rqMOMU26qNy5yzcaZglGvXX8qoXb+XIV2/FVHa2CPZGlMvCDSibuU350CGqdxIugmVFJfWbBzd27Nx9PKaPgCJQTeOlheVRtFNWBka3MpA0VhwgaTbWKztXBpN11JK4+lWk7LwdGvq0ni6glmaz7BI1WNoLV0aUbeHbXVNbAqlmG4AfP2bC2SJHde/uVhpwTqGFuun4JhWG0dWMXPP1DjNxcYpaJmBeyb9afKFibrxvDRPPismnj7OxZbJRxW0Mj7PxenJQ5/KBDMXZybvlSjj5+Ls5J0SekpzcW7yVjH9jqwk+MlrxYpbtHNxYXJFhcJa2FxcnFxWsS4RFpcmlxRT5EQJeXJBMQFOlFBYNolRmRTn4vXknIpJmVTm4s3kLLN55sbF28nJlM/kMBfvJlsUc+Gc5uL9ZLMsEhSWNQLLVimwWjgXVtKiSkmZQgmJFYJUlCmUwGRVZSzZzMWXyVqVq19XZB1NydQvzQVyLCoH1qTmAjVmlaOyxs0lsHqgclbWhLkEP5moCqtXeS5BJoQshFkzF3gxqGKbRJeX5QnLO/HvWHKpkkybS6xSxK9SJTUJk1GFeT5LNawZsBZhTZlLdEiGhQsRRRmxWhFDfera01jFunBRYqoilcxziZlqGU0tEVmQVSxNiJhY+lQslVqT5pKMiCyHiciSj2JJqIqCkDG2iawSK1YvWAIvMGNWRtYaEFldqOuFIqYqUi5PmcwrwyoHaMOMiKgR5pK1iKwUiGiqiBo8Ze1aFj2q6KqIGn4uLMjxlOojsiCrjKX6iLGKqIGYqogabi4QJIlRA7GI6FDDzaVUrVh7MnYuTKIyq49NrFix3mTMXGBJVqdRA7G2oEMNxNqCDjVYgxODMg41EMWiZHVVRDEp47HvMhem9F4ZVrE0a2ks2iFj8BmZxSgIY5FZVVfGsxwhz91kWIGOyupEelYwWZFe5FDlvMgsyyjjCyvipE8iB9QRmVEF2lFWB57LcqoJ6INs9FTaUCyiEVG2MXhqJxbT61qJ0caJiC7y1IuIKo6nYWJJB01EjIgRRVhxZAGP9cRFzCKihjwtE6t5oMISo9WSV1YHEQ0FQWcFTK1FSbY/CpCJqyvLraYAGb6ubTJ1wttlDRJ2Qm1ZxGsyioq7W7c5CrqwZITm8JcoU81fOJLimYAVtm2UyZTv8FiaTPlMwthakl0JZFYY65piRh/HWmyT0ccxOazroqxPaic7ArJOWldyE8RrWJ7NoOEytMzGDQxuNPRO+cjoA8FTfuV7o6F4ykemfEie8hkBKN87Bou6jgke3jOUVBl9fGCgMfB5onwfGYZMBnPK94lBqspSfmYIq7tV4OELA1yVwSNohj/ZfovoEwyDoyyLRsoPloG0ypTffGLZ46I9gp8C+RnQKR+/OCmTmThQfogTY6TIUl6aIvrwXMrLE7YjMvUPZWKLi3VfWSqPmhXEKlNeNBNr1jz3lBdlw7DKlBfdBDbs0HnKi35ia1FkyothoiyRKS9GWegWmfrFNMmqPX6ElJcnNv+QZTk+lqmw+4dMeUmzq1Rl8GVY0CgM31EgAwMTHImgRPGZgUgYkQg/MYzUCMpkeKDT5CLbhEYzQLDKSoSVUiEWiiVCimVbgGKJkGLZt6OPatlsM5qBwrK1SAQty1CB6UoExTJYyI4jKbAthguMkZ1P1vk1AwbWSApDsQwZmN8awZo8u5akAH+GDQxMIlCMgcM3Pdgt0AwdmJikQDEGD7wziQCgZQ1OItBUFuEaHgZNZT2k4SFML4MImLJjgeoyjDRMhcsZSMTySIGmDCXQkkSgKYNJ5Rm2GonAIWhtS4RsAgkTZGWgWdkGomtLBLsuy06QRMgODfsOyzvYSmFMkY2IrOBTdoPEmpHZW5GtB6qWFYQqG0IAkRMbpUY2hGQDPSkIlh0hU7C3pCBY9oRMoVpJQbBsCxn2cZBll4hlHBRa5LpSJTIKyzYEVcLFQ2bmgj5RdmzYGmLXkvQQMHtDbAmLjH5sDokxZzYZDbtDbLJQHwiXDSIrtp1VRj/WUmB8tnMpn9W9ZuoQrmwRwfBFKwiXXSLZc0amfFb3YPxiVAIv1lOkIxgF4bJLZGF4ZCmfHUZs2ioI17C+B8Mjgw+LKtJNnIJwDQMMW1vFqbqRZicrvcYrCNfIAIPBewXhGgYY6UQ4/chhsg77Z0qAHCf2MEWmfAYY6VJRQbiGAcZTXmRj1hhXzy7QphCu8Xqy0sGSgnANW/IwODLlsycv/S0rCNgwj5DulhUEbJhJeJkdqED5zCWk9xUFARtmE+KgyBTTGOYTss6gVQAPZhQiWwUhG+YUIjvlKZ9ZhchBQcgmMEfFtYgKQjaBVVJxwBSEbAKrt3giRXn0CezZ4jga2Vo1Af2QnYKgDVv2InsFQZuAfjyPCoI2Af2QE5vZxgT0Qy7KoU9EP2YrWsHXJqIfslXQtYnoh+yVQ5+IfshBQdYmoh9yUg48YsUPG2KT0kT008riGqNPRD9ko2BuE9EP2Skr+qAfMtvmbLWiH3JU0LZhSUZkZkPI6MdzPHFk2rcobAYSN6m2L2ddDPqk0J7TB5Fjk/FIkJkvkh+vCxn7Q2Zzl4NEn7+/5CzZP8lxvM3jq+Pu5OxGba7k9FgIavPjZvpLsV4Vy9QvqmLhlqyKLao4rQpbvM6q4pwqzivOlhYXVXFwVFbFFVW8VsUbVbxVxTtVvFfFM3nkjAjcllXxRZWgVQlGlWBVCU6V4FVhDzxEVQKcmFUJRZWoVYlGlWhViU6VyEGToEqMqkS4NKsSiypJq5KMKsmqkpwqyauSmIpGVVJSJcHDRZWsVclGlWxVyU6V7FXJTFKjKnCp8HdRpWhV2IMuVpXiVOGASwmqFKawSZUC78u+OuswMLGWlRDNDoSsjGr2YqBgjdugIV/NgR0N7Wq4VkOwGr9aQ60aPtUyK4ZJNfSp8ZI1xKnxEzQUqfGENeSoYUSNe6DhQg0BalhP48xq+E5DchrfVUNvWg4uQWQaj0BDYRre0rifGsbSmJzG29QYm4aVNGam6+EdcmBVmoUZDefoQA5ZlcOp1IzxmuUXjU+pGeE13qRmaNestmjGdI6Y4+nxQQ4WVzRDucaV1IzhmgmCZvDWLKFofEjN0K3x1DVjtsYH1xwg0HiQGpdaM1RrHEjNGK1xHTW+p8Zh1HiBWoZ2cRoYljXOkmZA1viNmqFYF3LgNmpGYo3DqGlzVi1wGvjgkANtXk810eYsRDDe88GMnzYXR5FVBiMeYj0PQZuLf2ho83owgDaX81IsDTCq8iEHKSiDNmfez/DIB2XQ5uIQ1hNZtLm4g4Y2Z7LO2MUHOWhzJuGMRyxkUAZtLs4fE2oGFj7IQZvLgS3x85geMyzwQQ7aXBYDDW0u5+PkxIuhzeWAG9NYiJoPctDmcsJOZqH1ZBhtLu6bnJATv00mheKw1SMktLm4azI7Ez9N5l0m5f/45Zdf1D/qNCcH5z95mrNevPiNqzLtxCZHtG+vSbgcbK4xD/oL7t34QBxuddy/0LFedjEcbf/4tsvXu9sf9rfD7ZkaMbyyRfT7IN/tP5weXr/h1DUHUBHrQ73VYCDPrw5vrjesilR5eD+PHx85yR7lhPHuw+Hjk+EPT6eHxHN8++Lw4+HucLy+20zBUCJPhhc+2b3aLzd6KE/kWoKnBJGfXl7e7eWiDTzbIrvacumBY/lP9tdvuCikt5pDztIGS1apC6fN72c7XS3HzXuSpXgOJr/8H1NDac4/UMN//x9Tw95Af2Mbfr67Ha5Jfb67XYxCjmBz9YxuevXsee0TX9zufqpXLqr89Oa0Xu+oQrvhUYV2yePpzemLet6+XpbjEDydSLrR05tTowQq8fTm9FiulrWkjw/tXsBHJ+hJIJEXhxM35Bb5u+PxSg7QE1Gvpzw6Xp+O72/v2t2Fh6emzj3GfHg60YmFpH6DC+zfSAb0FarPnYit3MRD4kZElb68vvjy9vbYbqbRs0WU5BT1+P3160YLPEQcWAyxNSFPue7SElN/xJaYfo84tPeT/Zv99cV4p4YmqLEDw/KiNXIpe7lUyCsWWugJwa+ZotpcfsVdiP3dPQ5vsc9vdq+5CyBl93t+Qx36Jb8Wh4493bk2PekSvSS9V7Sku1/vIXK9UPTV4Q6DHPUhivc1daKm2ku6peCKzpJ0iW0J72lDqq8P14d379/9+/72uF714MHZ1Uuh+Hrr5dnt/nJ/+y9P1tQ1fgCuRozVRNMxdq1njf1if/nVZgpyM6zHfL+Z0nkMl+to157kZYt4thuN79nuzLYovEetJUvUx1dOn+0uzqoOds92F+eXWFvkvWusLRZjf7HC82wnMS/PYhgb210lCjy8/qHdVHq2u6l3RV800ugRLzdsT24un7++3e+vH+9eC/tQJrQ2wI9IPxjMlqixPZZcQ/8hCeLae4hZDKiaVU1z+w4W3cStl4s0RApnFC6mIgnF1IuPiN8v950QvkIwUo/T7eHmi/3rw7vd1d1yDal6CM3bsd1lGGonnH2vehI31g8jkcihgl3uQ5XwqQzP9XJzz9UpUJ7W6pSemvos76c6lXyOf7q+3t9+S/VISVeT195tpr9wkejBAz6MfWCY9D/wD/Iixwf+gYlIVpPAtySrJFFjvNXnyfuzrNuzrB94/cA/8JJSyv4HffwH5LLfXexvGa3lzpTA1qXHh9PjxWhCMxq5iUUr9idiS4La692VZKb1//V4uCZycQQe7W5G8bvDu+5OppyLyV4Y40/vdm/2vKgT/KPd9cXV/vu3h7sf9rff7q7ftMvYNf7z44cWV1uvxoomwyXNfzscrw7XS2y7vliTPjrcvr66z/btEXdLUXoYAF/gcn/54ebF6PYskS/HyJe/lnKJPEtJwq93H744vJGvC8AIn96e3h4f7d7tb3eNff6B0zXhlOU7DO67ODLGfWq6Bm8A0EBYiAv3tKcDfPcGxo8nYe02/XobmXv0zNeWe/P9HrLcmP/oEvLIJZRf5TZ2/N0x3F2BTP3+ht9E8V9udzdvP4WirDT1u7ziTMJtm2nz/PuH3zzghu3dg4v3t4frNw/+9f3Vzw+sNolkA/T1bvanwadL/ib4kOHfPgP+5uZ4uOY7LnxgZHhxf500soAq66SSgHXSetfcoXANJu7gSDDo3IMePqixmXvpEoxyB70GQ88Wc8+WbM+WYs+WSi8tu54tx55NzK2+t3ANvgV5hQRZb+xBv2RjdWyJ5XlLa0LPZkrPZm3PZmPP5uTOPRUyrkNiXIfE+A6J8R0SgwqttNAhMaFDYkKHxMQOiYkdEhM7JCZ1SEzqkJjM9wFUzajlElwhKSskZYWkdEis7pBY3SGxukNiTYfEmg6JJVctzdoOibUdEus6JHzpyZLWdUis75BY3yGxvkNiQ4fEolgrLXRIuJu+xMYOiU0dEps6JDZ1SGzukNjcIbF5hYS6t9LKCknpkDjdIXG6Q+I4x1OzOdMhcaZD4myHxNkOieNdLZvrkDjXIXGuQ+J8h8T5DonzHRIXOiQudEhc7JA41G2lxQ6JSx0SlzokfMHIkjZ3SFzukLi8QlJWSEqHhLLaG7zukHjdIfEsZ1d1vOmQeNMh8bZD4m2HxNsOiXcdEmGr9jLXIfG+Q+J9h8SHDokPHRIfOiQ+dkh87JD42CERQmylpQ6JTx0SnzskPq+QlBUSGqa9oXRIgu6QBN0hEc6taQNLzkuwQxJMhyTYDkmw3UqC7ZAE1yEJrkMSfIdEaL0V4TskIXRIQuiQhNAhCbFbSYgdkhA7JCF1SELqkMjI0UrLHZKQV0jKCklZISndSqLukETdIYm6QxJNh0QGp1paNB2SaDsk0XZIouuQRNetJLoOSfQdkug7JNF3SGT8a6WFDkkMHZIYOyQxdkhi6lYSU4ckpg5JzB2SmDskMsS20soKSVkhKR2SpDskSXcrSbpDkkyHJJkOSbIdEhnFa2nJdkiS65Ak1yFJrkOSfLeS5DskyXdIUuiQpNAhoYCltNghSbFDklKHJKUOSUrdSlL9bhyG8ZQ7JCmvkJQVEmBodSsdkqw7JFl3SDJ7izVtNt1KsumQZNshybZDkm2HRNyd9gbXIcmuQ5J9hyT7DkkOHZIcOiQ5dEhy7JDk2CERj6qVlrqV5NQhyalDknOHJOcOSc4rJAxr7WVYZQ0W3SGpcwRBvYi3V4PiirVgh6TNL2mh6mG0YIekyNhcY2XgbMEOSR1yauzqvVayrrGr91pprsV2K6kEUWNX77V2rRq7eq/VKFtsh6Q2Z41dvdcKRI1dvdf6Cr7vQuvmvUqwQiLBaiUEsaKWtnmvEluthGDzXiVYISHYvFcJViuRYLUSgs17lWC1EglWSAg271WC1UokWK2EYPNeJVitRIIVEoLNe5VgtRKCzXuVYO04Eqwdh2DzXiW4QtK816A1JwcaJGzI92CHhO3jJbZ5r2QjV0XSNO9VYjskpnmvxDbvVYIdEtO8V2Kb9yrBDolp3iuxKNZKa94rsc17lWCHxDTvldjmvUqwQ2Ka90ps814l2K1EzKGV1rxXEjTvNWhtm/cqwW4ltnmvxDbvVYIdEtu8V2Kb9yrBDolt3iuxzXuVYIfENu+V2Oa9SrBbiW3eK7HNeyXYvFcJdiuxzXsltnmvEuxWYpv3SmzzXiXYrcQ275XY5r1KsEMi/aYi6Zr3GuhNHRLXvFdim/cqwQ6Ja94rsc17lWCHxDXvlVi6Ziutea/ENu9Vgt1KXPNeiW3eqwS7lbjmvRLbvFcJdiuR3t9Ka94rCZr3SrB5rxJcIWneK7HNe5Vgh8Q37zXAKp1LhGBqab55ryRo3qsEOyS+ea/ENu9Vgt1KfPNeiW3eK8HmvUqwW4lv3iuxzXuVYLcS37xXYpv3KsFuJb55r8Q271WCHRKhyVa35r2SoHmvBJv3KsEVkua9Bq1D814l2Ok1NO+V2Oa9SrBbSWjeK7HNe5Vgt5LQvFdim/cqwW4loXmvxDbvVYLdSoTsa91C815J0LxXgs17lWCHJDTvldjmvUqwW0lo3iuxzXuVYO84oXmvxDbvVYLdSmLzXoPWsXmvEuxWEpv3SmzzXgk271WC3Upi816Jbd6rBLuVxOa9Etu8Vwl2K4nNeyW2ea8S7JDIqFiRjM17JUHzXgk271WC3Upi816JFe9Vvlzw5e9ZvwtbJhTyjws3Wy7wKOO3YYh1W86BLmk4ILblbJMyZpuX74zkAsXWr5K1W6Oc3sagXNzaNb9327gm83nr1mfBbG37DkrHF39s4/rMp60eJL/1q4bebcP6The2maKH5DZuy/piU8bkHDWL2zA8DtsuSLVMF6nkUBfjt3otV+5mbfmqta1XtmwXbWNCpRSUt9u0RCaqPuAV/NavxYQy6hv9qELMW6Oi23Jfc5uGPGm7IBKTCnHLEqH8k7Kccnnr0Cus8TZt7ZIpKa7OeWXdGXJma4Yq5lFLzGUt38Szd5mxgWzZxjWly2cm4O8186Bf9KMuqZzZm3FsiBvrtl1Bjsjlre0yh+rGtxsTxtcbnccWyXGbA9oZFB7NR5/1krTlyteY0/itX1E1bkQCk+FK2BkepjbFYD0ubfXaFN6OL7xn7WevCm5s6BC3PqioVSzjC5IekYtlxD+eWWUoY9cPdpuUr73YKptHFW0are+8h9l4lvKsy5tMX6AP8jH0d+u3bkXA5hEwZ7ZBOTvaorPb/o21jorzNWNmC31FO+Y10Y/1NRF+MNGBlAlnOJWCBYS4dasJcRszjpqZcibFETCYc81q7AiDOWM34U/51Fs5YEtqD1mmgDEUDLEE5co2ooO3I1N6vqBZWX3GzHG0WXA4759hBNuEbR4sluuU8v+MxIkLo+XUsWEgHePPNJChYzBjKDHQMPw/awS+93r5p5DWlperwiM32jMWsGEs0oYRcBiMK9jbvL7O6pEfrD4j8HxeuzOu4J7+SFsm0mnPupuzlVdHqqX7bctgBOf91caEjdnkz5TMZuQMm92oCqIjC9ebR/2zHRWMYRtUOBuh/FmX9U6Mq2z5Br6RyW3B1KwfxyyuWdttpJ8P3dLZrRVzzGNfDG5Mk/Roadw2KOIw+NGCjdEj/UHFcl7eb7kNsQ3CxouFOCoyjFTOb4WOuOocRwjoFG5kPpNGmO8ZoVhllnr3ohirHYw7jPPnKAY9DsfhbKSIZE5GSPhMsehHi4ag1t4XpOoh0qX5uggHiWFamAkt1sw6bPUKCA7WauSmjPZiypjSpJEorRtr5tw4jHkzGm7wI+ThrMFjGUfZFEZdUj5v/m1SyY8qJDNyRLRncKbRLgNujhdgnMWXtHHLF3WOb8NfWVuP/q3kSvUZpUQc27hNK2I2gK8z0iPiaJn+zOXxZ0NZiCNhxDC+MZ3ZRUlnfKfN2OIlb7kvNPoi+azN+DGBtVKM8atE112aPmG8gxv5m2OTsPlI3gwRUPjgZlcndvSg4tg8Jo3WA878H9FjTBqsVAvZcZlrHCYhlrVCSEOFzNhyVo+20r5RMkEn5+NJrcr6OZICHFA9DoZMXjk4o9aMSFuu7p1hlO9JI/RmJH54h49h5mT92BPs2diKwyQdO4wFwF9n3r49d2XKaOsmjRxssCl7NpPhByBWYP0Z5fuz3hDsCHrgMubW0zUHbyaaM0mfddRyJsWRf5jHrRbh4zh8ezvOvJwdvQJ7NqFhiFrfYs89xzSWAEcMKZnXjN3UntmGLaOr6M4GZX/m9ge35cuFxxaNeRxcUmA+ks/aM+cR1+yh+HyGXErwUPKQyeCR8cMgjDsmwEcDfqi4dh1c4qGuZ5WxfiwbpwhjH/qdKWf2y6+F8MIQqLkPygc+gx0bM6YRr1QY7sq2CGGt5JrOZtgpjU2e5N1Rjx4D05bVUIPcuPFnzi0TgPX99xo8jLU6r2OlHr5HRIYPKy5DGonXOVmkSKMGPoyU5gvNEM54Mp6ZaswMcma00GQhnVZZ+npkZAp+7LL+zCVHkbVl7dl8EKcX10boSsb3FS4YepDC2ED4rANsZ4sM7mxS6PDTXTlzB8KZAxDG9YVox0US1iRWM4xn8/QYxipHj6cZDUYPovBBneUM0wabtj7IGhbXG/hxpY+vUv3+H9ngGP3xze3u3UfHIb8yjz91jC8Yzqu322v9wN8fOcrHez59lI+Dhr95lI8Ef+Ao3+v9Fce5fZCfKfr1i0ztJtqv/cqVZcF6BeCDvGA5bc3vZR3eyTnS8RbbZ1xK/0dcY6s3bv4B19io4KsDxtVOPH78+zkvPv7NnBc1y184cf34cHvXbig92S0hfijMLqfT3+2/ONzdXO3WH+wAu37e+p93D/754p8fm5L0Z9p8ps0DviqX/3ccGa+3/NafiPn6ePFk96rJv3EL7zea1nOVt5v2z/dbtl6ZenC8fPB8f1fvJ5L6v8ttxX7kv18faJccf+O24trMdKbayHIK+RO/ffSHG3j5lZWzFv49rfiJm4a/0YpD5/zr/Sb8b9VgQC60+f/ZYFS4dUZCf7QP/uEmunc5crg5yX7s5vLL69PtgWsmYqF379/9NAQXNiB6+YksCbcHX+8+cP3r136Iq90Mq+fmvznevluuHFFOu9lYf1fq8vn7d5QkxHT2m4R/j1G0/njUei1p+TEpKe3zwzW3ir68vX3Kj1uhGvLTH/e3l1fHn7h5ychwewsNfurLN3zIv0BpvcaftSuiHZ0lYq3c3/0SwKsrfojt990DeLb7Ua5AkfzXBlE4ZjjVj93+UUcARJfbFD5rW3DdPQVwpcKxB6KjNjkXz1d4rDcsTA4lsgPBt1Fs6j0LH7fZZRvlvIz8EOQLIz8/p7dO58SXYxT24m19f3tUnCvZ6RCiCVkevbDtUSzGZk5EhGL49hHKWXJxUpXDQylmJz8BOF7qoFp/uuaOL5mev91dHH8arp88Ot5ymWt3ceA3s0jcW763U3PRTnLJAq755NXd5WG9w2+xyPsX2Pod/vWGfbtL9eR4/WbPAG/5dbz11zDrrfvD9d/4M3D3rh4/2Z32Hz5lRig+/PDV7/RBfy8OCyzj3b4OAw/b/ch2MfJ32zPwPuEn8ipfVeLg4srT28Obw3UfDYKRM4epBDa/7S/9B/L4UTy+2AI36/nr28MNN1NkbOP31q7q761dX+9fn9YrnfJzffXVQvS//F/ui669').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779223103842', 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_1779223103842();\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "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
}
