{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "726d6938",
   "metadata": {},
   "source": [
    "# hsimple\n",
    " This program creates :\n",
    "   - a one dimensional histogram\n",
    "   - a two dimensional histogram\n",
    "   - a profile histogram\n",
    "   - a memory-resident ntuple\n",
    "\n",
    " These objects are filled with some random numbers and saved on a file.\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:** Vincenzo Eduardo Padulano (CERN), 09.2025  \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:07 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "cd0c2398",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:07:35.583136Z",
     "iopub.status.busy": "2026-05-19T20:07:35.582985Z",
     "iopub.status.idle": "2026-05-19T20:07:37.067071Z",
     "shell.execute_reply": "2026-05-19T20:07:37.060441Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy\n",
    "from ROOT import TH1F, TH2F, TCanvas, TFile, TNtuple, TProfile, gBenchmark, gSystem"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "88ce7093",
   "metadata": {},
   "source": [
    "Create a new canvas, and customize it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d5ec9075",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:07:37.068820Z",
     "iopub.status.busy": "2026-05-19T20:07:37.068614Z",
     "iopub.status.idle": "2026-05-19T20:07:37.206689Z",
     "shell.execute_reply": "2026-05-19T20:07:37.205964Z"
    }
   },
   "outputs": [],
   "source": [
    "c1 = TCanvas(\"c1\", \"Dynamic Filling Example\", 200, 10, 700, 500)\n",
    "c1.SetFillColor(42)\n",
    "frame = c1.GetFrame()\n",
    "frame.SetFillColor(21)\n",
    "frame.SetBorderSize(6)\n",
    "frame.SetBorderMode(-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d7ab37b",
   "metadata": {},
   "source": [
    "Create some histograms, a profile histogram and an ntuple"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "1bbc86db",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:07:37.208668Z",
     "iopub.status.busy": "2026-05-19T20:07:37.208519Z",
     "iopub.status.idle": "2026-05-19T20:07:37.333204Z",
     "shell.execute_reply": "2026-05-19T20:07:37.332474Z"
    }
   },
   "outputs": [],
   "source": [
    "hpx = TH1F(\"hpx\", \"This is the px distribution\", 100, -4, 4)\n",
    "hpxpy = TH2F(\"hpxpy\", \"py vs px\", 40, -4, 4, 40, -4, 4)\n",
    "hprof = TProfile(\"hprof\", \"Profile of pz versus px\", 100, -4, 4, 0, 20)\n",
    "ntuple = TNtuple(\"ntuple\", \"Demo ntuple\", \"px:py:pz:random:i\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0c31273",
   "metadata": {},
   "source": [
    "Set canvas/frame attributes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "27e219f2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:07:37.335365Z",
     "iopub.status.busy": "2026-05-19T20:07:37.335237Z",
     "iopub.status.idle": "2026-05-19T20:07:37.442585Z",
     "shell.execute_reply": "2026-05-19T20:07:37.441917Z"
    }
   },
   "outputs": [],
   "source": [
    "hpx.SetFillColor(48)\n",
    "\n",
    "gBenchmark.Start(\"hsimple\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6847d71b",
   "metadata": {},
   "source": [
    "Fill histograms randomly."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "983d011e",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:07:37.444849Z",
     "iopub.status.busy": "2026-05-19T20:07:37.444717Z",
     "iopub.status.idle": "2026-05-19T20:07:37.855759Z",
     "shell.execute_reply": "2026-05-19T20:07:37.854988Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hsimple   : Real Time =   0.34 seconds Cpu Time =   0.24 seconds\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779221258024\" style=\"width: 700px; height: 500px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779221258024() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(21976,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779221258024', 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_1779221258024();\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in range(25000):\n",
    "    # Retrieve the generated values\n",
    "    px, py = numpy.random.standard_normal(size=2)\n",
    "\n",
    "    pz = px * px + py * py\n",
    "    random = numpy.random.rand()\n",
    "\n",
    "    # Fill histograms.\n",
    "    hpx.Fill(px)\n",
    "    hpxpy.Fill(px, py)\n",
    "    hprof.Fill(px, pz)\n",
    "    ntuple.Fill(px, py, pz, random, i)\n",
    "\n",
    "    # Update display every 1000 events.\n",
    "    if i > 0 and i % 1000 == 0:\n",
    "        hpx.Draw()\n",
    "\n",
    "        c1.Modified()\n",
    "        c1.Update()\n",
    "\n",
    "        if gSystem.ProcessEvents():  # allow user interrupt\n",
    "            break\n",
    "\n",
    "gBenchmark.Show(\"hsimple\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f2c6129",
   "metadata": {},
   "source": [
    "Create a new ROOT binary machine independent file.\n",
    "Note that this file may contain any kind of ROOT objects, histograms,\n",
    "pictures, graphics objects, detector geometries, tracks, events, etc."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "71dfce97",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:07:37.857342Z",
     "iopub.status.busy": "2026-05-19T20:07:37.857142Z",
     "iopub.status.idle": "2026-05-19T20:07:38.026339Z",
     "shell.execute_reply": "2026-05-19T20:07:38.025629Z"
    }
   },
   "outputs": [],
   "source": [
    "with TFile(\"py-hsimple.root\", \"RECREATE\", \"Demo ROOT file with histograms\") as hfile:\n",
    "    # Save all created objects in the file\n",
    "    hfile.WriteObject(hpx)\n",
    "    hfile.WriteObject(hpxpy)\n",
    "    hfile.WriteObject(hprof)\n",
    "    # TNTuple is special because it is a TTree-derived class. To make sure all the\n",
    "    # dataset is properly written to disk, we connect it to the file and then\n",
    "    # we ask the ntuple to write all the information to the file itself.\n",
    "    ntuple.SetDirectory(hfile)\n",
    "    ntuple.Write()\n",
    "\n",
    "c1.Modified()\n",
    "c1.Update()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72d80582",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "81f18732",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:07:38.027825Z",
     "iopub.status.busy": "2026-05-19T20:07:38.027696Z",
     "iopub.status.idle": "2026-05-19T20:07:38.139908Z",
     "shell.execute_reply": "2026-05-19T20:07:38.139192Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779221258137\" style=\"width: 700px; height: 500px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779221258137() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(21976,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779221258137', 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_1779221258137();\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
}
