{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "4a7fac7d",
   "metadata": {},
   "source": [
    "# combinedFit\n",
    "Combined (simultaneous) fit of two histogram with separate functions\n",
    "and some common parameters\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Author:** Jonas Rembser, Lorenzo Moneta (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:24 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e4ec0fa4",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:32.145501Z",
     "iopub.status.busy": "2026-05-19T20:24:32.145389Z",
     "iopub.status.idle": "2026-05-19T20:24:33.204434Z",
     "shell.execute_reply": "2026-05-19T20:24:33.203693Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "59ed3565",
   "metadata": {},
   "source": [
    "definition of shared parameter background function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "eca4f8b5",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:33.206412Z",
     "iopub.status.busy": "2026-05-19T20:24:33.206220Z",
     "iopub.status.idle": "2026-05-19T20:24:33.319214Z",
     "shell.execute_reply": "2026-05-19T20:24:33.318467Z"
    }
   },
   "outputs": [],
   "source": [
    "iparB = np.array([0, 2], dtype=np.int32)  # exp amplitude in B histo and exp common parameter"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8b4632d6",
   "metadata": {},
   "source": [
    "signal + background function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6018de3e",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:33.320830Z",
     "iopub.status.busy": "2026-05-19T20:24:33.320705Z",
     "iopub.status.idle": "2026-05-19T20:24:33.424737Z",
     "shell.execute_reply": "2026-05-19T20:24:33.423928Z"
    }
   },
   "outputs": [],
   "source": [
    "iparSB = np.array(\n",
    "    [\n",
    "        1,  # exp amplitude in S+B histo\n",
    "        2,  # exp common parameter\n",
    "        3,  # Gaussian amplitude\n",
    "        4,  # Gaussian mean\n",
    "        5,  # Gaussian sigma\n",
    "    ],\n",
    "    dtype=np.int32,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f72af92f",
   "metadata": {},
   "source": [
    "Create the GlobalCHi2 structure"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "c52a8811",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:33.426629Z",
     "iopub.status.busy": "2026-05-19T20:24:33.426483Z",
     "iopub.status.idle": "2026-05-19T20:24:33.590181Z",
     "shell.execute_reply": "2026-05-19T20:24:33.589372Z"
    }
   },
   "outputs": [],
   "source": [
    "class GlobalChi2(object):\n",
    "    def __init__(self, f1, f2):\n",
    "        self._f1 = f1\n",
    "        self._f2 = f2\n",
    "\n",
    "    def __call__(self, par):\n",
    "        # parameter vector is first background (in common 1 and 2) and then is\n",
    "        # signal (only in 2)\n",
    "\n",
    "        # the zero-copy way to get a numpy array from a double *\n",
    "        par_arr = np.frombuffer(par, dtype=np.float64, count=6)\n",
    "\n",
    "        p1 = par_arr[iparB]\n",
    "        p2 = par_arr[iparSB]\n",
    "\n",
    "        return self._f1(p1) + self._f2(p2)\n",
    "\n",
    "\n",
    "hB = ROOT.TH1D(\"hB\", \"histo B\", 100, 0, 100)\n",
    "hSB = ROOT.TH1D(\"hSB\", \"histo S+B\", 100, 0, 100)\n",
    "\n",
    "fB = ROOT.TF1(\"fB\", \"expo\", 0, 100)\n",
    "fB.SetParameters(1, -0.05)\n",
    "hB.FillRandom(fB)\n",
    "\n",
    "fS = ROOT.TF1(\"fS\", \"gaus\", 0, 100)\n",
    "fS.SetParameters(1, 30, 5)\n",
    "\n",
    "hSB.FillRandom(fB, 2000)\n",
    "hSB.FillRandom(fS, 1000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3556e787",
   "metadata": {},
   "source": [
    "perform now global fit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bfe9403b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:33.592302Z",
     "iopub.status.busy": "2026-05-19T20:24:33.592173Z",
     "iopub.status.idle": "2026-05-19T20:24:33.758553Z",
     "shell.execute_reply": "2026-05-19T20:24:33.758134Z"
    }
   },
   "outputs": [],
   "source": [
    "fSB = ROOT.TF1(\"fSB\", \"expo + gaus(2)\", 0, 100)\n",
    "\n",
    "wfB = ROOT.Math.WrappedMultiTF1(fB, 1)\n",
    "wfSB = ROOT.Math.WrappedMultiTF1(fSB, 1)\n",
    "\n",
    "opt = ROOT.Fit.DataOptions()\n",
    "rangeB = ROOT.Fit.DataRange()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b9ac536e",
   "metadata": {},
   "source": [
    "set the data range"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e9eb4750",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:33.766248Z",
     "iopub.status.busy": "2026-05-19T20:24:33.766113Z",
     "iopub.status.idle": "2026-05-19T20:24:34.099997Z",
     "shell.execute_reply": "2026-05-19T20:24:34.099647Z"
    }
   },
   "outputs": [],
   "source": [
    "rangeB.SetRange(10, 90)\n",
    "dataB = ROOT.Fit.BinData(opt, rangeB)\n",
    "ROOT.Fit.FillData(dataB, hB)\n",
    "\n",
    "rangeSB = ROOT.Fit.DataRange()\n",
    "rangeSB.SetRange(10, 50)\n",
    "dataSB = ROOT.Fit.BinData(opt, rangeSB)\n",
    "ROOT.Fit.FillData(dataSB, hSB)\n",
    "\n",
    "chi2_B = ROOT.Fit.Chi2Function(dataB, wfB)\n",
    "chi2_SB = ROOT.Fit.Chi2Function(dataSB, wfSB)\n",
    "\n",
    "globalChi2 = GlobalChi2(chi2_B, chi2_SB)\n",
    "\n",
    "fitter = ROOT.Fit.Fitter()\n",
    "\n",
    "Npar = 6\n",
    "par0 = np.array([5, 5, -0.1, 100, 30, 10])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "abda1499",
   "metadata": {},
   "source": [
    "create before the parameter settings in order to fix or set range on them"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "3abe0234",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:34.103413Z",
     "iopub.status.busy": "2026-05-19T20:24:34.103281Z",
     "iopub.status.idle": "2026-05-19T20:24:34.215076Z",
     "shell.execute_reply": "2026-05-19T20:24:34.214403Z"
    }
   },
   "outputs": [],
   "source": [
    "fitter.Config().SetParamsSettings(6, par0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "579522fd",
   "metadata": {},
   "source": [
    "fix 5-th parameter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "33acdaa7",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:34.217096Z",
     "iopub.status.busy": "2026-05-19T20:24:34.216973Z",
     "iopub.status.idle": "2026-05-19T20:24:34.329288Z",
     "shell.execute_reply": "2026-05-19T20:24:34.328879Z"
    }
   },
   "outputs": [],
   "source": [
    "fitter.Config().ParSettings(4).Fix()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "00032d5f",
   "metadata": {},
   "source": [
    "set limits on the third and 4-th parameter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "7ceea394",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:34.350498Z",
     "iopub.status.busy": "2026-05-19T20:24:34.350351Z",
     "iopub.status.idle": "2026-05-19T20:24:34.467944Z",
     "shell.execute_reply": "2026-05-19T20:24:34.467210Z"
    }
   },
   "outputs": [],
   "source": [
    "fitter.Config().ParSettings(2).SetLimits(-10, -1.0e-4)\n",
    "fitter.Config().ParSettings(3).SetLimits(0, 10000)\n",
    "fitter.Config().ParSettings(3).SetStepSize(5)\n",
    "\n",
    "fitter.Config().MinimizerOptions().SetPrintLevel(0)\n",
    "fitter.Config().SetMinimizer(\"Minuit2\", \"Migrad\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "44b5aa76",
   "metadata": {},
   "source": [
    "we can't pass the Python object globalChi2 directly to FitFCN.\n",
    "It needs to be wrapped in a ROOT::Math::Functor."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b1e3ae36",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:34.469871Z",
     "iopub.status.busy": "2026-05-19T20:24:34.469742Z",
     "iopub.status.idle": "2026-05-19T20:24:34.825257Z",
     "shell.execute_reply": "2026-05-19T20:24:34.824829Z"
    }
   },
   "outputs": [],
   "source": [
    "globalChi2Functor = ROOT.Math.Functor(globalChi2, 6)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "48de82b7",
   "metadata": {},
   "source": [
    "fit FCN function\n",
    "(specify optionally data size and flag to indicate that is a chi2 fit)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "7f6d2afd",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:34.835472Z",
     "iopub.status.busy": "2026-05-19T20:24:34.835336Z",
     "iopub.status.idle": "2026-05-19T20:24:35.264702Z",
     "shell.execute_reply": "2026-05-19T20:24:35.264012Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "****************************************\n",
      "Minimizer is Minuit2 / Migrad\n",
      "Chi2                      =      131.104\n",
      "NDf                       =          115\n",
      "Edm                       =  2.11602e-08\n",
      "NCalls                    =          225\n",
      "Par_0                     =       5.5396   +/-   0.0354094   \n",
      "Par_1                     =      4.66089   +/-   0.050106    \n",
      "Par_2                     =   -0.0514037   +/-   0.00108539   \t (limited)\n",
      "Par_3                     =      77.2733   +/-   3.93105      \t (limited)\n",
      "Par_4                     =           30                      \t (fixed)\n",
      "Par_5                     =        4.864   +/-   0.243005    \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file combinedFit.png has been created\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222275254\" style=\"width: 700px; height: 700px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222275254() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(40183,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222275254', 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_1779222275254();\n",
       "</script>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fitter.FitFCN(globalChi2Functor, 0, dataB.Size() + dataSB.Size(), True)\n",
    "result = fitter.Result()\n",
    "result.Print(ROOT.std.cout)\n",
    "\n",
    "c1 = ROOT.TCanvas(\"Simfit\", \"Simultaneous fit of two histograms\", 10, 10, 700, 700)\n",
    "c1.Divide(1, 2)\n",
    "c1.cd(1)\n",
    "ROOT.gStyle.SetOptFit(1111)\n",
    "\n",
    "fB.SetFitResult(result, iparB)\n",
    "fB.SetRange(rangeB().first, rangeB().second)\n",
    "fB.SetLineColor(\"kBlue\")\n",
    "hB.GetListOfFunctions().Add(fB)\n",
    "hB.Draw()\n",
    "\n",
    "c1.cd(2)\n",
    "fSB.SetFitResult(result, iparSB)\n",
    "fSB.SetRange(rangeSB().first, rangeSB().second)\n",
    "fSB.SetLineColor(\"kRed\")\n",
    "hSB.GetListOfFunctions().Add(fSB)\n",
    "hSB.Draw()\n",
    "\n",
    "c1.SaveAs(\"combinedFit.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5bb240ca",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "a047eb25",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:24:35.266229Z",
     "iopub.status.busy": "2026-05-19T20:24:35.266105Z",
     "iopub.status.idle": "2026-05-19T20:24:35.394761Z",
     "shell.execute_reply": "2026-05-19T20:24:35.394120Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222275385\" style=\"width: 700px; height: 700px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222275385() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(40183,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222275385', 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_1779222275385();\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
}
