{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "fa13bbfc",
   "metadata": {},
   "source": [
    "# rf703_effpdfprod\n",
    "Special pdf's: using a product of an (acceptance) efficiency and a pdf as pdf\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:34 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "315d1c0c",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:34:33.365042Z",
     "iopub.status.busy": "2026-05-19T20:34:33.364927Z",
     "iopub.status.idle": "2026-05-19T20:34:34.317296Z",
     "shell.execute_reply": "2026-05-19T20:34:34.316500Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2da85f91",
   "metadata": {},
   "source": [
    "Define observables and decay pdf\n",
    "---------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "feaad1a7",
   "metadata": {},
   "source": [
    "Declare observables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "fec36ad7",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:34:34.319026Z",
     "iopub.status.busy": "2026-05-19T20:34:34.318894Z",
     "iopub.status.idle": "2026-05-19T20:34:34.480594Z",
     "shell.execute_reply": "2026-05-19T20:34:34.479823Z"
    }
   },
   "outputs": [],
   "source": [
    "t = ROOT.RooRealVar(\"t\", \"t\", 0, 5)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f86deb34",
   "metadata": {},
   "source": [
    "Make pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d0e1e591",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:34:34.482215Z",
     "iopub.status.busy": "2026-05-19T20:34:34.482091Z",
     "iopub.status.idle": "2026-05-19T20:34:34.608180Z",
     "shell.execute_reply": "2026-05-19T20:34:34.607577Z"
    }
   },
   "outputs": [],
   "source": [
    "tau = ROOT.RooRealVar(\"tau\", \"tau\", -1.54, -4, -0.1)\n",
    "model = ROOT.RooExponential(\"model\", \"model\", t, tau)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "32ee4ca4",
   "metadata": {},
   "source": [
    "Define efficiency function\n",
    "---------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d9d80ac",
   "metadata": {},
   "source": [
    "Use error function to simulate turn-on slope"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "152a8dca",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:34:34.610304Z",
     "iopub.status.busy": "2026-05-19T20:34:34.610177Z",
     "iopub.status.idle": "2026-05-19T20:34:34.792110Z",
     "shell.execute_reply": "2026-05-19T20:34:34.791618Z"
    }
   },
   "outputs": [],
   "source": [
    "eff = ROOT.RooFormulaVar(\"eff\", \"0.5*(TMath::Erf((t-1)/0.5)+1)\", [t])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1bad1b18",
   "metadata": {},
   "source": [
    "Define decay pdf with efficiency\n",
    "---------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "278027f5",
   "metadata": {},
   "source": [
    "Multiply pdf(t) with efficiency in t"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "2184cd7c",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:34:34.797753Z",
     "iopub.status.busy": "2026-05-19T20:34:34.797597Z",
     "iopub.status.idle": "2026-05-19T20:34:34.908134Z",
     "shell.execute_reply": "2026-05-19T20:34:34.907365Z"
    }
   },
   "outputs": [],
   "source": [
    "modelEff = ROOT.RooEffProd(\"modelEff\", \"model with efficiency\", model, eff)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6f6cef68",
   "metadata": {},
   "source": [
    "Plot efficiency, pdf\n",
    "----------------------------------------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "7c153e33",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:34:34.910153Z",
     "iopub.status.busy": "2026-05-19T20:34:34.910022Z",
     "iopub.status.idle": "2026-05-19T20:34:35.123658Z",
     "shell.execute_reply": "2026-05-19T20:34:35.122931Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x56320b5cca50>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(modelEff_Int[t]) using numeric integrator RooIntegrator1D to calculate Int(t)\n"
     ]
    }
   ],
   "source": [
    "frame1 = t.frame(Title=\"Efficiency\")\n",
    "eff.plotOn(frame1, LineColor=\"r\")\n",
    "\n",
    "frame2 = t.frame(Title=\"Pdf with and without efficiency\")\n",
    "\n",
    "model.plotOn(frame2, LineStyle=\"--\")\n",
    "modelEff.plotOn(frame2)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "725254d5",
   "metadata": {},
   "source": [
    "Generate toy data, fit model eff to data\n",
    "------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7fabc14b",
   "metadata": {},
   "source": [
    "Generate events. If the input pdf has an internal generator, internal generator\n",
    "is used and an accept/reject sampling on the efficiency is applied."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "c6a1cdee",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:34:35.125502Z",
     "iopub.status.busy": "2026-05-19T20:34:35.125366Z",
     "iopub.status.idle": "2026-05-19T20:34:35.272790Z",
     "shell.execute_reply": "2026-05-19T20:34:35.272060Z"
    }
   },
   "outputs": [],
   "source": [
    "data = modelEff.generate({t}, 10000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b102e33",
   "metadata": {},
   "source": [
    "Fit pdf. The normalization integral is calculated numerically."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "664ec77b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:34:35.274785Z",
     "iopub.status.busy": "2026-05-19T20:34:35.274526Z",
     "iopub.status.idle": "2026-05-19T20:34:35.457750Z",
     "shell.execute_reply": "2026-05-19T20:34:35.457010Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Fitting -- RooAbsPdf::fitTo(modelEff_over_modelEff_Int[t]) fixing normalization set for coefficient determination to observables in data\n",
      "[#1] INFO:Fitting -- using generic CPU library compiled with no vectorizations\n",
      "[#1] INFO:Fitting -- Creation of NLL object took 807.024 μs\n",
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_modelEff_over_modelEff_Int[t]_modelEffData) Summation contains a RooNLLVar, using its error level\n",
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(modelEff_Int[t]) using numeric integrator RooIntegrator1D to calculate Int(t)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooFitResult object at 0x(nil)>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "modelEff.fitTo(data, PrintLevel=-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86346172",
   "metadata": {},
   "source": [
    "Plot generated data and overlay fitted pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "155c8afe",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:34:35.459818Z",
     "iopub.status.busy": "2026-05-19T20:34:35.459679Z",
     "iopub.status.idle": "2026-05-19T20:34:35.708066Z",
     "shell.execute_reply": "2026-05-19T20:34:35.707635Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:NumericIntegration -- RooRealIntegral::init(modelEff_Int[t]) using numeric integrator RooIntegrator1D to calculate Int(t)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf703_effpdfprod.png has been created\n"
     ]
    }
   ],
   "source": [
    "frame3 = t.frame(Title=\"Fitted pdf with efficiency\")\n",
    "data.plotOn(frame3)\n",
    "modelEff.plotOn(frame3)\n",
    "\n",
    "c = ROOT.TCanvas(\"rf703_effpdfprod\", \"rf703_effpdfprod\", 1200, 400)\n",
    "c.Divide(3)\n",
    "c.cd(1)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "frame1.GetYaxis().SetTitleOffset(1.4)\n",
    "frame1.Draw()\n",
    "c.cd(2)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "frame2.GetYaxis().SetTitleOffset(1.6)\n",
    "frame2.Draw()\n",
    "c.cd(3)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "frame3.GetYaxis().SetTitleOffset(1.6)\n",
    "frame3.Draw()\n",
    "\n",
    "c.SaveAs(\"rf703_effpdfprod.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb9aeab0",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f2f6eba5",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:34:35.717517Z",
     "iopub.status.busy": "2026-05-19T20:34:35.717377Z",
     "iopub.status.idle": "2026-05-19T20:34:35.898872Z",
     "shell.execute_reply": "2026-05-19T20:34:35.898475Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222875889\" style=\"width: 1200px; height: 400px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222875889() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(50872,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222875889', 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_1779222875889();\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
}
