{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "990ff640",
   "metadata": {},
   "source": [
    "# gr010_approx_smooth\n",
    "\n",
    "See the [TGraphSmooth documentation](https://root.cern/doc/master/classTGraphSmooth.html)\n",
    "\n",
    "\n",
    "\n",
    "**Author:** Christian Stratowa, Jamie Gooding  \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:37 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "ed57ade9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:55.030191Z",
     "iopub.status.busy": "2026-05-19T20:37:55.030051Z",
     "iopub.status.idle": "2026-05-19T20:37:56.109300Z",
     "shell.execute_reply": "2026-05-19T20:37:56.108856Z"
    }
   },
   "outputs": [],
   "source": [
    "from ctypes import c_double\n",
    "\n",
    "import numpy as np\n",
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b87cb922",
   "metadata": {},
   "source": [
    "vC1 = ROOT.TCanvas()\n",
    "# grxy = ROOT.TGraph()\n",
    "grin = ROOT.TGraph()\n",
    "grout = ROOT.TGraph()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f00d1f4c",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:56.121449Z",
     "iopub.status.busy": "2026-05-19T20:37:56.121240Z",
     "iopub.status.idle": "2026-05-19T20:37:56.231978Z",
     "shell.execute_reply": "2026-05-19T20:37:56.231591Z"
    }
   },
   "outputs": [],
   "source": [
    "def DrawSmooth(pad, title, xt, yt):\n",
    "    vC1.cd(pad)\n",
    "    vFrame = ROOT.gPad.DrawFrame(0, 0, 15, 150)\n",
    "    vFrame.SetTitle(title)\n",
    "    vFrame.SetTitleSize(0.2)\n",
    "    vFrame.SetXTitle(xt)\n",
    "    vFrame.SetYTitle(yt)\n",
    "    grxy.SetMarkerColor(ROOT.kBlue)\n",
    "    grxy.SetMarkerStyle(21)\n",
    "    grxy.SetMarkerSize(0.5)\n",
    "    grxy.Draw(\"P\")\n",
    "    grin.SetMarkerColor(ROOT.kRed)\n",
    "    grin.SetMarkerStyle(5)\n",
    "    grin.SetMarkerSize(0.7)\n",
    "    grin.Draw(\"P\")\n",
    "    grout.DrawClone(\"LP\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9eec6f48",
   "metadata": {},
   "source": [
    "Test data (square)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ce4981e0",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:56.241176Z",
     "iopub.status.busy": "2026-05-19T20:37:56.241043Z",
     "iopub.status.idle": "2026-05-19T20:37:56.357442Z",
     "shell.execute_reply": "2026-05-19T20:37:56.356927Z"
    }
   },
   "outputs": [],
   "source": [
    "n = 11\n",
    "x = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 6.0, 6.0, 8.0, 9.0, 10.0])\n",
    "y = np.array([1.0, 4.0, 9.0, 16.0, 25.0, 25.0, 36.0, 49.0, 64.0, 81.0, 100.0])\n",
    "\n",
    "grxy = ROOT.TGraph(n, x, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "87c6bbfc",
   "metadata": {},
   "source": [
    "X values, for which y values should be interpolated"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "0afbbfac",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:56.359387Z",
     "iopub.status.busy": "2026-05-19T20:37:56.359256Z",
     "iopub.status.idle": "2026-05-19T20:37:56.487883Z",
     "shell.execute_reply": "2026-05-19T20:37:56.473333Z"
    }
   },
   "outputs": [],
   "source": [
    "nout = 14\n",
    "xout = np.array([1.2, 1.7, 2.5, 3.2, 4.4, 5.2, 5.7, 6.5, 7.6, 8.3, 9.7, 10.4, 11.3, 13])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e93f8c4",
   "metadata": {},
   "source": [
    "Create Canvas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "850aaef6",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:56.495750Z",
     "iopub.status.busy": "2026-05-19T20:37:56.495570Z",
     "iopub.status.idle": "2026-05-19T20:37:56.640523Z",
     "shell.execute_reply": "2026-05-19T20:37:56.639914Z"
    }
   },
   "outputs": [],
   "source": [
    "vC1 = ROOT.TCanvas(\"vC1\", \"square\", 200, 10, 700, 700)\n",
    "vC1.Divide(2, 2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "45c541f0",
   "metadata": {},
   "source": [
    "Initialize graph with data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b541be81",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:56.642290Z",
     "iopub.status.busy": "2026-05-19T20:37:56.642155Z",
     "iopub.status.idle": "2026-05-19T20:37:56.745550Z",
     "shell.execute_reply": "2026-05-19T20:37:56.744893Z"
    }
   },
   "outputs": [],
   "source": [
    "grin = ROOT.TGraph(n, x, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9fda1f7",
   "metadata": {},
   "source": [
    "Interpolate at equidistant points (use mean for tied x-values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "67f6d7ae",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:56.747403Z",
     "iopub.status.busy": "2026-05-19T20:37:56.747277Z",
     "iopub.status.idle": "2026-05-19T20:37:56.996854Z",
     "shell.execute_reply": "2026-05-19T20:37:56.996470Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779223077801\" style=\"width: 700px; height: 700px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779223077801() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(44247,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779223077801', 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_1779223077801();\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "gs = ROOT.TGraphSmooth(\"normal\")\n",
    "grout = gs.Approx(grin, \"linear\")\n",
    "DrawSmooth(1, \"Approx: ties = mean\", \"X-axis\", \"Y-axis\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8565641e",
   "metadata": {},
   "source": [
    "Re-initialize graph with data\n",
    "(since graph points were set to unique vales)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "cef299a6",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:57.004581Z",
     "iopub.status.busy": "2026-05-19T20:37:57.004438Z",
     "iopub.status.idle": "2026-05-19T20:37:57.113247Z",
     "shell.execute_reply": "2026-05-19T20:37:57.112580Z"
    }
   },
   "outputs": [],
   "source": [
    "grin = ROOT.TGraph(n, x, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a6e5feda",
   "metadata": {},
   "source": [
    "Interpolate at given points xout"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "f276a209",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:57.115416Z",
     "iopub.status.busy": "2026-05-19T20:37:57.115275Z",
     "iopub.status.idle": "2026-05-19T20:37:57.225793Z",
     "shell.execute_reply": "2026-05-19T20:37:57.225169Z"
    }
   },
   "outputs": [],
   "source": [
    "grout = gs.Approx(grin, \"linear\", 14, xout, 0, 130)\n",
    "DrawSmooth(2, \"Approx: ties = mean\", \"\", \"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "198b53e5",
   "metadata": {},
   "source": [
    "Print output variables for given values xout"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "42ce4ec7",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:57.227567Z",
     "iopub.status.busy": "2026-05-19T20:37:57.227433Z",
     "iopub.status.idle": "2026-05-19T20:37:57.355221Z",
     "shell.execute_reply": "2026-05-19T20:37:57.344277Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "k= 0  vXout[k]= 1.2  vYout[k]= 1.5999999999999999\n",
      "k= 1  vXout[k]= 1.7  vYout[k]= 3.0999999999999996\n",
      "k= 2  vXout[k]= 2.5  vYout[k]= 6.5\n",
      "k= 3  vXout[k]= 3.2  vYout[k]= 10.400000000000002\n",
      "k= 4  vXout[k]= 4.4  vYout[k]= 19.6\n",
      "k= 5  vXout[k]= 5.2  vYout[k]= 27.333333333333336\n",
      "k= 6  vXout[k]= 5.7  vYout[k]= 33.166666666666664\n",
      "k= 7  vXout[k]= 6.5  vYout[k]= 43.5\n",
      "k= 8  vXout[k]= 7.6  vYout[k]= 58.53333333333333\n",
      "k= 9  vXout[k]= 8.3  vYout[k]= 69.10000000000001\n",
      "k= 10  vXout[k]= 9.7  vYout[k]= 94.29999999999998\n",
      "k= 11  vXout[k]= 10.4  vYout[k]= 130.0\n",
      "k= 12  vXout[k]= 11.3  vYout[k]= 130.0\n",
      "k= 13  vXout[k]= 13.0  vYout[k]= 130.0\n"
     ]
    }
   ],
   "source": [
    "vNout = grout.GetN()\n",
    "vXout = c_double()\n",
    "vYout = c_double()\n",
    "for k in range(vNout):\n",
    "    grout.GetPoint(k, vXout, vYout)\n",
    "    print(f\"k= {k}  vXout[k]= {vXout.value}  vYout[k]= {vYout.value}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "35910f0c",
   "metadata": {},
   "source": [
    "Re-initialize graph with data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "7b63147b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:57.367050Z",
     "iopub.status.busy": "2026-05-19T20:37:57.366894Z",
     "iopub.status.idle": "2026-05-19T20:37:57.470287Z",
     "shell.execute_reply": "2026-05-19T20:37:57.469812Z"
    }
   },
   "outputs": [],
   "source": [
    "grin = ROOT.TGraph(n, x, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1c7e225e",
   "metadata": {},
   "source": [
    "Interpolate at equidistant points (use min for tied x-values)\n",
    "  _grout = gs.Approx(grin,\"linear\", 50, 0, 0, 0, 1, 0, \"min\")_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "30bfb4f9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:57.472841Z",
     "iopub.status.busy": "2026-05-19T20:37:57.472684Z",
     "iopub.status.idle": "2026-05-19T20:37:57.583642Z",
     "shell.execute_reply": "2026-05-19T20:37:57.583016Z"
    }
   },
   "outputs": [],
   "source": [
    "grout = gs.Approx(grin, \"constant\", 50, 0, 0, 0, 1, 0.5, \"min\")\n",
    "DrawSmooth(3, \"Approx: ties = min\", \"\", \"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e6f2406d",
   "metadata": {},
   "source": [
    "Re-initialize graph with data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "0af23ac5",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:57.585548Z",
     "iopub.status.busy": "2026-05-19T20:37:57.585412Z",
     "iopub.status.idle": "2026-05-19T20:37:57.688824Z",
     "shell.execute_reply": "2026-05-19T20:37:57.688327Z"
    }
   },
   "outputs": [],
   "source": [
    "grin = ROOT.TGraph(n, x, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fd1db2a4",
   "metadata": {},
   "source": [
    "Interpolate at equidistant points (use max for tied x-values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "acff91a9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:57.691678Z",
     "iopub.status.busy": "2026-05-19T20:37:57.691525Z",
     "iopub.status.idle": "2026-05-19T20:37:57.803618Z",
     "shell.execute_reply": "2026-05-19T20:37:57.802989Z"
    }
   },
   "outputs": [],
   "source": [
    "grout = gs.Approx(grin, \"linear\", 14, xout, 0, 0, 2, 0, \"max\")\n",
    "DrawSmooth(4, \"Approx: ties = max\", \"\", \"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73e25fe6",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "01162611",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:37:57.807715Z",
     "iopub.status.busy": "2026-05-19T20:37:57.807568Z",
     "iopub.status.idle": "2026-05-19T20:37:57.922101Z",
     "shell.execute_reply": "2026-05-19T20:37:57.921453Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779223077919\" style=\"width: 700px; height: 700px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779223077919() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(44247,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779223077919', 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_1779223077919();\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
}
