{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "40267c41",
   "metadata": {},
   "source": [
    "# rf313_paramranges\n",
    "Multidimensional models: working with parameterized ranges to define non-rectangular\n",
    "regions for fitting and integration\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:31 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7ee4c482",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:15.527458Z",
     "iopub.status.busy": "2026-05-19T20:31:15.527317Z",
     "iopub.status.idle": "2026-05-19T20:31:16.498810Z",
     "shell.execute_reply": "2026-05-19T20:31:16.498227Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "449f3266",
   "metadata": {},
   "source": [
    "Create 3D pdf\n",
    "-------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c4265bc1",
   "metadata": {},
   "source": [
    "Define observable (x,y,z)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d4004f6a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:16.501052Z",
     "iopub.status.busy": "2026-05-19T20:31:16.500909Z",
     "iopub.status.idle": "2026-05-19T20:31:16.664070Z",
     "shell.execute_reply": "2026-05-19T20:31:16.663480Z"
    }
   },
   "outputs": [],
   "source": [
    "x = ROOT.RooRealVar(\"x\", \"x\", 0, 10)\n",
    "y = ROOT.RooRealVar(\"y\", \"y\", 0, 10)\n",
    "z = ROOT.RooRealVar(\"z\", \"z\", 0, 10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d00d941",
   "metadata": {},
   "source": [
    "Define 3 dimensional pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "74a9d53a",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:16.665819Z",
     "iopub.status.busy": "2026-05-19T20:31:16.665690Z",
     "iopub.status.idle": "2026-05-19T20:31:16.876548Z",
     "shell.execute_reply": "2026-05-19T20:31:16.875925Z"
    }
   },
   "outputs": [],
   "source": [
    "z0 = ROOT.RooRealVar(\"z0\", \"z0\", -0.1, 1)\n",
    "px = ROOT.RooPolynomial(\"px\", \"px\", x, [0.0])\n",
    "py = ROOT.RooPolynomial(\"py\", \"py\", y, [0.0])\n",
    "pz = ROOT.RooPolynomial(\"pz\", \"pz\", z, [z0])\n",
    "pxyz = ROOT.RooProdPdf(\"pxyz\", \"pxyz\", [px, py, pz])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cff263c2",
   "metadata": {},
   "source": [
    "Defined non-rectangular region R in (x, y, z)\n",
    "-------------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "18f1cb90",
   "metadata": {},
   "source": [
    "R = Z[0 - 0.1*Y^2] * Y[0.1*X - 0.9*X] * X[0 - 10]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9ccef188",
   "metadata": {},
   "source": [
    "Construct range parameterized in \"R\" in y [ 0.1*x, 0.9*x ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b91c3810",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:16.878284Z",
     "iopub.status.busy": "2026-05-19T20:31:16.878145Z",
     "iopub.status.idle": "2026-05-19T20:31:17.005550Z",
     "shell.execute_reply": "2026-05-19T20:31:17.004984Z"
    }
   },
   "outputs": [],
   "source": [
    "ylo = ROOT.RooFormulaVar(\"ylo\", \"0.1*x\", [x])\n",
    "yhi = ROOT.RooFormulaVar(\"yhi\", \"0.9*x\", [x])\n",
    "y.setRange(\"R\", ylo, yhi)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a930be6",
   "metadata": {},
   "source": [
    "Construct parameterized ranged \"R\" in z [ 0, 0.1*y^2 ]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "8a191d63",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:17.007203Z",
     "iopub.status.busy": "2026-05-19T20:31:17.007077Z",
     "iopub.status.idle": "2026-05-19T20:31:17.126380Z",
     "shell.execute_reply": "2026-05-19T20:31:17.125864Z"
    }
   },
   "outputs": [],
   "source": [
    "zlo = ROOT.RooFormulaVar(\"zlo\", \"0.0*y\", [y])\n",
    "zhi = ROOT.RooFormulaVar(\"zhi\", \"0.1*y*y\", [y])\n",
    "z.setRange(\"R\", zlo, zhi)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c02d4dc5",
   "metadata": {},
   "source": [
    "Calculate integral of normalized pdf in R\n",
    "----------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "edaa4128",
   "metadata": {},
   "source": [
    "Create integral over normalized pdf model over x,y, in \"R\" region"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ad26e0c1",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:17.127936Z",
     "iopub.status.busy": "2026-05-19T20:31:17.127818Z",
     "iopub.status.idle": "2026-05-19T20:31:17.261258Z",
     "shell.execute_reply": "2026-05-19T20:31:17.260774Z"
    }
   },
   "outputs": [],
   "source": [
    "intPdf = pxyz.createIntegral({x, y, z}, {x, y, z}, \"R\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c8b1c613",
   "metadata": {},
   "source": [
    "Plot value of integral as function of pdf parameter z0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "f3c17849",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:17.262735Z",
     "iopub.status.busy": "2026-05-19T20:31:17.262595Z",
     "iopub.status.idle": "2026-05-19T20:31:17.545043Z",
     "shell.execute_reply": "2026-05-19T20:31:17.544545Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(pxyz_Int[z|R]_Norm[x,y,z]_Int[y|R]_Int[x|R]) using numeric integrator RooIntegrator1D to calculate Int(x)\n",
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(pxyz_Int[z|R]_Norm[x,y,z]_Int[y|R]) using numeric integrator RooIntegrator1D to calculate Int(y)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf313_paramranges.png has been created\n"
     ]
    }
   ],
   "source": [
    "frame = z0.frame(Title=\"Integral of pxyz over x,y, in region R\")\n",
    "intPdf.plotOn(frame)\n",
    "\n",
    "c = ROOT.TCanvas(\"rf313_paramranges\", \"rf313_paramranges\", 600, 600)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "frame.GetYaxis().SetTitleOffset(1.6)\n",
    "frame.Draw()\n",
    "\n",
    "c.SaveAs(\"rf313_paramranges.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "652a17ee",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "664d6cbe",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:31:17.546492Z",
     "iopub.status.busy": "2026-05-19T20:31:17.546374Z",
     "iopub.status.idle": "2026-05-19T20:31:17.726133Z",
     "shell.execute_reply": "2026-05-19T20:31:17.725703Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222677716\" style=\"width: 600px; height: 600px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222677716() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(23553,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222677716', 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_1779222677716();\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
}
