{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "1a40399b",
   "metadata": {},
   "source": [
    "# rf304_uncorrprod\n",
    "Multidimensional models: simple uncorrelated multi-dimensional pdfs\n",
    "\n",
    "`pdf = gauss(x,mx,sx) * gauss(y,my,sy)`\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:**  Clemens Lange, Wouter Verkerke (C++ version)  \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:30 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2f8aa854",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:40.763751Z",
     "iopub.status.busy": "2026-05-19T20:30:40.763634Z",
     "iopub.status.idle": "2026-05-19T20:30:41.744805Z",
     "shell.execute_reply": "2026-05-19T20:30:41.723921Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b0ec6070",
   "metadata": {},
   "source": [
    "Create component pdfs in x and y\n",
    "----------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "592e45c3",
   "metadata": {},
   "source": [
    "Create two pdfs gaussx(x,meanx,sigmax) gaussy(y,meany,sigmay) and its\n",
    "variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "237c2335",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:41.761461Z",
     "iopub.status.busy": "2026-05-19T20:30:41.761297Z",
     "iopub.status.idle": "2026-05-19T20:30:41.945150Z",
     "shell.execute_reply": "2026-05-19T20:30:41.944468Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] WARNING:InputArguments -- The parameter 'sigmax' with range [-inf, inf] of the RooGaussian 'gaussx' exceeds the safe range of (0, inf). Advise to limit its range.\n",
      "[#0] WARNING:InputArguments -- The parameter 'sigmay' with range [-inf, inf] of the RooGaussian 'gaussy' exceeds the safe range of (0, inf). Advise to limit its range.\n"
     ]
    }
   ],
   "source": [
    "x = ROOT.RooRealVar(\"x\", \"x\", -5, 5)\n",
    "y = ROOT.RooRealVar(\"y\", \"y\", -5, 5)\n",
    "\n",
    "meanx = ROOT.RooRealVar(\"mean1\", \"mean of gaussian x\", 2)\n",
    "meany = ROOT.RooRealVar(\"mean2\", \"mean of gaussian y\", -2)\n",
    "sigmax = ROOT.RooRealVar(\"sigmax\", \"width of gaussian x\", 1)\n",
    "sigmay = ROOT.RooRealVar(\"sigmay\", \"width of gaussian y\", 5)\n",
    "\n",
    "gaussx = ROOT.RooGaussian(\"gaussx\", \"gaussian PDF\", x, meanx, sigmax)\n",
    "gaussy = ROOT.RooGaussian(\"gaussy\", \"gaussian PDF\", y, meany, sigmay)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8ec464b0",
   "metadata": {},
   "source": [
    "Construct uncorrelated product pdf\n",
    "-------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b7221dd3",
   "metadata": {},
   "source": [
    "Multiply gaussx and gaussy into a two-dimensional pdf gaussxy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "64ac3a92",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:41.947016Z",
     "iopub.status.busy": "2026-05-19T20:30:41.946884Z",
     "iopub.status.idle": "2026-05-19T20:30:42.127294Z",
     "shell.execute_reply": "2026-05-19T20:30:42.126649Z"
    }
   },
   "outputs": [],
   "source": [
    "gaussxy = ROOT.RooProdPdf(\"gaussxy\", \"gaussx*gaussy\", [gaussx, gaussy])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "81c62547",
   "metadata": {},
   "source": [
    "Sample pdf, plot projection on x and y\n",
    "---------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "960b1b2b",
   "metadata": {},
   "source": [
    "Generate 10000 events in x and y from gaussxy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7a372139",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:42.129462Z",
     "iopub.status.busy": "2026-05-19T20:30:42.129334Z",
     "iopub.status.idle": "2026-05-19T20:30:42.263375Z",
     "shell.execute_reply": "2026-05-19T20:30:42.262727Z"
    }
   },
   "outputs": [],
   "source": [
    "data = gaussxy.generate({x, y}, 10000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2d9c818f",
   "metadata": {},
   "source": [
    "Plot x distribution of data and projection of gaussxy x = Int(dy)\n",
    "gaussxy(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "67b43214",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:42.265455Z",
     "iopub.status.busy": "2026-05-19T20:30:42.265328Z",
     "iopub.status.idle": "2026-05-19T20:30:42.459047Z",
     "shell.execute_reply": "2026-05-19T20:30:42.458342Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooAbsReal::plotOn(gaussxy) plot on x integrates over variables (y)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x55ae576c77e0>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xframe = x.frame(Title=\"X projection of gauss(x)*gauss(y)\")\n",
    "data.plotOn(xframe)\n",
    "gaussxy.plotOn(xframe)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e20af9b6",
   "metadata": {},
   "source": [
    "Plot x distribution of data and projection of gaussxy y = Int(dx)\n",
    "gaussxy(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "c044832a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:42.460924Z",
     "iopub.status.busy": "2026-05-19T20:30:42.460798Z",
     "iopub.status.idle": "2026-05-19T20:30:42.567101Z",
     "shell.execute_reply": "2026-05-19T20:30:42.566383Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Plotting -- RooAbsReal::plotOn(gaussxy) plot on y integrates over variables (x)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x55ae578e6520>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "yframe = y.frame(Title=\"Y projection of gauss(x)*gauss(y)\")\n",
    "data.plotOn(yframe)\n",
    "gaussxy.plotOn(yframe)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7853d9c2",
   "metadata": {},
   "source": [
    "Make canvas and draw ROOT.RooPlots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "fb5dd602",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:42.569245Z",
     "iopub.status.busy": "2026-05-19T20:30:42.569118Z",
     "iopub.status.idle": "2026-05-19T20:30:42.800314Z",
     "shell.execute_reply": "2026-05-19T20:30:42.799318Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf304_uncorrprod.png has been created\n"
     ]
    }
   ],
   "source": [
    "c = ROOT.TCanvas(\"rf304_uncorrprod\", \"rf304_uncorrprod\", 800, 400)\n",
    "c.Divide(2)\n",
    "c.cd(1)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "xframe.GetYaxis().SetTitleOffset(1.4)\n",
    "xframe.Draw()\n",
    "c.cd(2)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "yframe.GetYaxis().SetTitleOffset(1.4)\n",
    "yframe.Draw()\n",
    "\n",
    "c.SaveAs(\"rf304_uncorrprod.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "965b0bbb",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "971fbec3",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:30:42.801806Z",
     "iopub.status.busy": "2026-05-19T20:30:42.801669Z",
     "iopub.status.idle": "2026-05-19T20:30:42.985303Z",
     "shell.execute_reply": "2026-05-19T20:30:42.984542Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222642975\" style=\"width: 800px; height: 400px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222642975() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(43666,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222642975', 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_1779222642975();\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
}
