{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d8d05291",
   "metadata": {},
   "source": [
    "# principal\n",
    "Principal Components Analysis (PCA) example.\n",
    "\n",
    "Example of using TPrincipal as a stand alone class.\n",
    "\n",
    "I create n-dimensional data points, where c = trunc(n / 5) + 1\n",
    "are  correlated with the rest n - c randomly distributed variables.\n",
    "\n",
    "Based on principal.C by Rene Brun and Christian Holm Christensen\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:**  Juan Fernando, Jaramillo Botero  \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:27 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2f51431f",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:27:13.442328Z",
     "iopub.status.busy": "2026-05-19T20:27:13.442176Z",
     "iopub.status.idle": "2026-05-19T20:27:14.400939Z",
     "shell.execute_reply": "2026-05-19T20:27:14.397845Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "*************************************************\n",
      "*         Principal Component Analysis          *\n",
      "*                                               *\n",
      "*  Number of variables:             10          *\n",
      "*  Number of data points:            10000      *\n",
      "*  Number of dependent variables:    3          *\n",
      "*                                               *\n",
      "*************************************************\n"
     ]
    }
   ],
   "source": [
    "from ROOT import TPrincipal, gRandom, TBrowser, vector\n",
    "\n",
    "\n",
    "n = 10\n",
    "m = 10000\n",
    "\n",
    "c = int(n / 5) + 1\n",
    "\n",
    "print (\"\"\"*************************************************\n",
    "*         Principal Component Analysis          *\n",
    "*                                               *\n",
    "*  Number of variables:           {0:4d}          *\n",
    "*  Number of data points:         {1:8d}      *\n",
    "*  Number of dependent variables: {2:4d}          *\n",
    "*                                               *\n",
    "*************************************************\"\"\".format(n, m, c))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eaaf8f2b",
   "metadata": {},
   "source": [
    "Initilase the TPrincipal object. Use the empty string for the\n",
    "final argument, if you don't wan't the covariance\n",
    "matrix. Normalising the covariance matrix is a good idea if your\n",
    "variables have different orders of magnitude."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "f0f7f6e0",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:27:14.412406Z",
     "iopub.status.busy": "2026-05-19T20:27:14.412257Z",
     "iopub.status.idle": "2026-05-19T20:27:14.536487Z",
     "shell.execute_reply": "2026-05-19T20:27:14.536046Z"
    }
   },
   "outputs": [],
   "source": [
    "principal = TPrincipal(n, \"ND\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09bda92c",
   "metadata": {},
   "source": [
    "Use a pseudo-random number generator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "cac7f84a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:27:14.546379Z",
     "iopub.status.busy": "2026-05-19T20:27:14.546238Z",
     "iopub.status.idle": "2026-05-19T20:27:14.649361Z",
     "shell.execute_reply": "2026-05-19T20:27:14.648945Z"
    }
   },
   "outputs": [],
   "source": [
    "randomNum = gRandom"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9116f62b",
   "metadata": {},
   "source": [
    "Make the m data-points\n",
    "Make a variable to hold our data\n",
    "Allocate memory for the data point"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8ae375f9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:27:14.651724Z",
     "iopub.status.busy": "2026-05-19T20:27:14.651519Z",
     "iopub.status.idle": "2026-05-19T20:27:14.922471Z",
     "shell.execute_reply": "2026-05-19T20:27:14.922065Z"
    }
   },
   "outputs": [],
   "source": [
    "data = vector('double')()\n",
    "for i in range(m):\n",
    "    # First we create the un-correlated, random variables, according\n",
    "    # to one of three distributions\n",
    "    for j in range(n - c):\n",
    "        if j % 3 == 0:\n",
    "            data.push_back(randomNum.Gaus(5, 1))\n",
    "        elif j % 3 == 1:\n",
    "            data.push_back(randomNum.Poisson(8))\n",
    "        else:\n",
    "            data.push_back(randomNum.Exp(2))\n",
    "\n",
    "    # Then we create the correlated variables\n",
    "    for j in range(c):\n",
    "        data.push_back(0)\n",
    "        for k in range(n - c - j):\n",
    "            data[n - c + j] += data[k]\n",
    "\n",
    "    # Finally we're ready to add this datapoint to the PCA\n",
    "    principal.AddRow(data.data())\n",
    "    data.clear()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c38b79a0",
   "metadata": {},
   "source": [
    "Do the actual analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "929801a2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:27:14.934421Z",
     "iopub.status.busy": "2026-05-19T20:27:14.934281Z",
     "iopub.status.idle": "2026-05-19T20:27:15.041866Z",
     "shell.execute_reply": "2026-05-19T20:27:15.040820Z"
    }
   },
   "outputs": [],
   "source": [
    "principal.MakePrincipals()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4d8cd9e",
   "metadata": {},
   "source": [
    "Print out the result on"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "01456efb",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:27:15.064411Z",
     "iopub.status.busy": "2026-05-19T20:27:15.064237Z",
     "iopub.status.idle": "2026-05-19T20:27:15.172879Z",
     "shell.execute_reply": "2026-05-19T20:27:15.172223Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " Variable #  | Mean Value |   Sigma    | Eigenvalue\n",
      "-------------+------------+------------+------------\n",
      "           0 |      4.994 |     0.9926 |     0.3856 \n",
      "           1 |      8.011 |      2.824 |      0.112 \n",
      "           2 |      2.017 |      1.992 |     0.1031 \n",
      "           3 |      4.998 |     0.9952 |     0.1022 \n",
      "           4 |      8.019 |      2.794 |    0.09998 \n",
      "           5 |      1.976 |      2.009 |     0.0992 \n",
      "           6 |      4.996 |     0.9996 |    0.09794 \n",
      "           7 |      35.01 |      5.147 |  1.162e-16 \n",
      "           8 |      30.01 |      5.041 |  2.795e-16 \n",
      "           9 |      28.04 |      4.644 |  4.235e-16 \n",
      "\n"
     ]
    }
   ],
   "source": [
    "principal.Print()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7000aed7",
   "metadata": {},
   "source": [
    "Test the PCA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "9c066720",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:27:15.174143Z",
     "iopub.status.busy": "2026-05-19T20:27:15.174023Z",
     "iopub.status.idle": "2026-05-19T20:27:15.339084Z",
     "shell.execute_reply": "2026-05-19T20:27:15.338443Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::MakeDefCanvas>:  created default TCanvas with name c1\n"
     ]
    }
   ],
   "source": [
    "principal.Test()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a6621249",
   "metadata": {},
   "source": [
    "Make some histograms of the original, principal, residue, etc data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "cfd98e68",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:27:15.340458Z",
     "iopub.status.busy": "2026-05-19T20:27:15.340325Z",
     "iopub.status.idle": "2026-05-19T20:27:15.484025Z",
     "shell.execute_reply": "2026-05-19T20:27:15.483359Z"
    }
   },
   "outputs": [],
   "source": [
    "principal.MakeHistograms()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a7b061d9",
   "metadata": {},
   "source": [
    "Make two functions to map between feature and pattern space\n",
    "Start a browser, so that we may browse the histograms generated\n",
    "above"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "dcf6db8a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:27:15.485747Z",
     "iopub.status.busy": "2026-05-19T20:27:15.485619Z",
     "iopub.status.idle": "2026-05-19T20:27:15.599337Z",
     "shell.execute_reply": "2026-05-19T20:27:15.598642Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Writing on file \"pca.C\" ... done\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Warning in <TBrowser::TBrowser>: The ROOT browser cannot run in batch mode\n"
     ]
    }
   ],
   "source": [
    "principal.MakeCode()\n",
    "b = TBrowser(\"principalBrowser\", principal)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dd56328a",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "66b0a820",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:27:15.600762Z",
     "iopub.status.busy": "2026-05-19T20:27:15.600639Z",
     "iopub.status.idle": "2026-05-19T20:27:15.789248Z",
     "shell.execute_reply": "2026-05-19T20:27:15.788865Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222435778\" style=\"width: 700px; height: 500px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222435778() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(22023,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222435778', 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_1779222435778();\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
}
