{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5c6fb7a0",
   "metadata": {},
   "source": [
    "# df019_Cache\n",
    "Cache a processed RDataFrame in memory for further usage.\n",
    "\n",
    "This tutorial shows how the content of a data frame can be cached in memory\n",
    "in form of a dataframe. The content of the columns is stored in memory in\n",
    "contiguous slabs of memory and is \"ready to use\", i.e. no ROOT IO operation\n",
    "is performed.\n",
    "\n",
    "Creating a cached data frame storing all of its content deserialised and uncompressed\n",
    "in memory is particularly useful when dealing with datasets of a moderate size\n",
    "(small enough to fit the RAM) over which several explorative loops need to be\n",
    "performed as fast as possible. In addition, caching can be useful when no file\n",
    "on disk needs to be created as a side effect of checkpointing part of the analysis.\n",
    "\n",
    "All steps in the caching are lazy, i.e. the cached data frame is actually filled\n",
    "only when the event loop is triggered on it.\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:** Danilo Piparo (CERN)  \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:09 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4477aa2c",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:09:52.538422Z",
     "iopub.status.busy": "2026-05-19T20:09:52.538254Z",
     "iopub.status.idle": "2026-05-19T20:09:53.547401Z",
     "shell.execute_reply": "2026-05-19T20:09:53.547030Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT\n",
    "import os"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4df9015",
   "metadata": {},
   "source": [
    "We create a data frame on top of the hsimple example."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "119217af",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:09:53.558528Z",
     "iopub.status.busy": "2026-05-19T20:09:53.558372Z",
     "iopub.status.idle": "2026-05-19T20:09:54.115575Z",
     "shell.execute_reply": "2026-05-19T20:09:54.115205Z"
    }
   },
   "outputs": [],
   "source": [
    "hsimplePath = os.path.join(str(ROOT.gROOT.GetTutorialDir().Data()), \"hsimple.root\")\n",
    "df = ROOT.RDataFrame(\"ntuple\", hsimplePath)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "934e3572",
   "metadata": {},
   "source": [
    "We apply a simple cut and define a new column."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8f685876",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:09:54.124129Z",
     "iopub.status.busy": "2026-05-19T20:09:54.123997Z",
     "iopub.status.idle": "2026-05-19T20:09:54.348932Z",
     "shell.execute_reply": "2026-05-19T20:09:54.337422Z"
    }
   },
   "outputs": [],
   "source": [
    "df_cut = df.Filter(\"py > 0.f\")\\\n",
    "           .Define(\"px_plus_py\", \"px + py\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "34364c0d",
   "metadata": {},
   "source": [
    "We cache the content of the dataset. Nothing has happened yet: the work to accomplish\n",
    "has been described."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "58ff3592",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:09:54.370384Z",
     "iopub.status.busy": "2026-05-19T20:09:54.370234Z",
     "iopub.status.idle": "2026-05-19T20:09:56.693920Z",
     "shell.execute_reply": "2026-05-19T20:09:56.676428Z"
    }
   },
   "outputs": [],
   "source": [
    "df_cached = df_cut.Cache()\n",
    "\n",
    "h = df_cached.Histo1D(\"px_plus_py\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d82664ee",
   "metadata": {},
   "source": [
    "Now the event loop on the cached dataset is triggered by accessing the histogram.\n",
    "This event triggers the loop on the `df` data frame lazily."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e614611e",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:09:56.705207Z",
     "iopub.status.busy": "2026-05-19T20:09:56.705055Z",
     "iopub.status.idle": "2026-05-19T20:09:57.594867Z",
     "shell.execute_reply": "2026-05-19T20:09:57.589396Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file df019_Cache.png has been created\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saved figure to df019_Cache.png\n"
     ]
    }
   ],
   "source": [
    "c = ROOT.TCanvas()\n",
    "h.Draw()\n",
    "c.SaveAs(\"df019_Cache.png\")\n",
    "\n",
    "print(\"Saved figure to df019_Cache.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "adac1c00",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "9cfe3af6",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:09:57.607237Z",
     "iopub.status.busy": "2026-05-19T20:09:57.607101Z",
     "iopub.status.idle": "2026-05-19T20:09:57.792244Z",
     "shell.execute_reply": "2026-05-19T20:09:57.791726Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779221397779\" style=\"width: 700px; height: 500px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779221397779() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(21974,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779221397779', 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_1779221397779();\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
}
