{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "4ed67557",
   "metadata": {},
   "source": [
    "# df017_vecOpsHEP\n",
    "Use RVecs to plot the transverse momentum of selected particles.\n",
    "\n",
    "This tutorial shows how VecOps can be used to slim down the programming\n",
    "model typically adopted in HEP for analysis.\n",
    "In this case we have a dataset containing the kinematic properties of\n",
    "particles stored in individual arrays.\n",
    "We want to plot the transverse momentum of these particles if the energy is\n",
    "greater than 100 MeV.\n",
    "\n",
    "\n",
    "**Author:**   \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": "markdown",
   "id": "5e07b62c",
   "metadata": {},
   "source": [
    " \\macro_code\n",
    " \\macro_image\n",
    "\n",
    " \\date March 2018\n",
    " \\authors Danilo Piparo (CERN), Andre Vieira Silva"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "44147c37",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:09:50.214854Z",
     "iopub.status.busy": "2026-05-19T20:09:50.214741Z",
     "iopub.status.idle": "2026-05-19T20:09:51.359262Z",
     "shell.execute_reply": "2026-05-19T20:09:51.358166Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT\n",
    "import numpy as np\n",
    "\n",
    "filename = ROOT.gROOT.GetTutorialDir().Data() + \"/analysis/dataframe/df017_vecOpsHEP.root\"\n",
    "treename = \"myDataset\"\n",
    "\n",
    "def WithPyROOT(filename):\n",
    "    from math import sqrt\n",
    "    f = ROOT.TFile(filename)\n",
    "    h = ROOT.TH1F(\"pt\", \"With PyROOT\", 16, 0, 4)\n",
    "    for event in f[treename]:\n",
    "        h.Fill(\n",
    "            np.array(\n",
    "                [\n",
    "                    sqrt(px * px + py * py)\n",
    "                    for E, px, py in zip(event.E, event.px, event.py)\n",
    "                    if E > 100\n",
    "                ]\n",
    "            )\n",
    "        )\n",
    "    h.DrawCopy()\n",
    "\n",
    "def WithRDataFrameVecOpsJit(treename, filename):\n",
    "    f = ROOT.RDataFrame(treename, filename)\n",
    "    h = f.Define(\"good_pt\", \"sqrt(px*px + py*py)[E>100]\")\\\n",
    "         .Histo1D((\"pt\", \"With RDataFrame and RVec\", 16, 0, 4), \"good_pt\")\n",
    "    h.DrawCopy()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "020d4acf",
   "metadata": {},
   "source": [
    " We plot twice the same quantity, the key is to look into the implementation\n",
    " of the functions above."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e07818d2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:09:51.361099Z",
     "iopub.status.busy": "2026-05-19T20:09:51.360886Z",
     "iopub.status.idle": "2026-05-19T20:09:53.417421Z",
     "shell.execute_reply": "2026-05-19T20:09:53.416945Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file df017_vecOpsHEP.png has been created\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Saved figure to df017_vecOpsHEP.png\n"
     ]
    }
   ],
   "source": [
    "c = ROOT.TCanvas()\n",
    "c.Divide(2,1)\n",
    "c.cd(1)\n",
    "WithPyROOT(filename)\n",
    "c.cd(2)\n",
    "WithRDataFrameVecOpsJit(treename, filename)\n",
    "c.SaveAs(\"df017_vecOpsHEP.png\")\n",
    "\n",
    "print(\"Saved figure to df017_vecOpsHEP.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "632ec432",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "11e24e16",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:09:53.431292Z",
     "iopub.status.busy": "2026-05-19T20:09:53.431154Z",
     "iopub.status.idle": "2026-05-19T20:09:53.605890Z",
     "shell.execute_reply": "2026-05-19T20:09:53.604635Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779221393594\" style=\"width: 700px; height: 500px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779221393594() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(30714,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779221393594', 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_1779221393594();\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
}
