{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "38d75eda",
   "metadata": {},
   "source": [
    "# rf601_intminuit\n",
    "'LIKELIHOOD AND MINIMIZATION' RooFit tutorial macro #601\n",
    "\n",
    "Interactive minimization with MINUIT\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:32 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7ab060f9",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:56.836720Z",
     "iopub.status.busy": "2026-05-19T20:32:56.836562Z",
     "iopub.status.idle": "2026-05-19T20:32:57.804911Z",
     "shell.execute_reply": "2026-05-19T20:32:57.804226Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d47e29c",
   "metadata": {},
   "source": [
    "Setup pdf and likelihood\n",
    "-----------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7094ff11",
   "metadata": {},
   "source": [
    "Observable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "2e2b60b0",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:57.807075Z",
     "iopub.status.busy": "2026-05-19T20:32:57.806942Z",
     "iopub.status.idle": "2026-05-19T20:32:57.965221Z",
     "shell.execute_reply": "2026-05-19T20:32:57.964445Z"
    }
   },
   "outputs": [],
   "source": [
    "x = ROOT.RooRealVar(\"x\", \"x\", -20, 20)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d88822cd",
   "metadata": {},
   "source": [
    "Model (intentional strong correlations)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "46f833e2",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:57.967066Z",
     "iopub.status.busy": "2026-05-19T20:32:57.966939Z",
     "iopub.status.idle": "2026-05-19T20:32:58.170411Z",
     "shell.execute_reply": "2026-05-19T20:32:58.169747Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] WARNING:InputArguments -- The parameter 'sigma_g1' with range [-inf, inf] of the RooGaussian 'g1' exceeds the safe range of (0, inf). Advise to limit its range.\n"
     ]
    }
   ],
   "source": [
    "mean = ROOT.RooRealVar(\"mean\", \"mean of g1 and g2\", 0)\n",
    "sigma_g1 = ROOT.RooRealVar(\"sigma_g1\", \"width of g1\", 3)\n",
    "g1 = ROOT.RooGaussian(\"g1\", \"g1\", x, mean, sigma_g1)\n",
    "\n",
    "sigma_g2 = ROOT.RooRealVar(\"sigma_g2\", \"width of g2\", 4, 3.0, 6.0)\n",
    "g2 = ROOT.RooGaussian(\"g2\", \"g2\", x, mean, sigma_g2)\n",
    "\n",
    "frac = ROOT.RooRealVar(\"frac\", \"frac\", 0.5, 0.0, 1.0)\n",
    "model = ROOT.RooAddPdf(\"model\", \"model\", [g1, g2], [frac])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3aa45b3f",
   "metadata": {},
   "source": [
    "Generate 1000 events"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "729b01b6",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:58.172468Z",
     "iopub.status.busy": "2026-05-19T20:32:58.172251Z",
     "iopub.status.idle": "2026-05-19T20:32:58.309702Z",
     "shell.execute_reply": "2026-05-19T20:32:58.309248Z"
    }
   },
   "outputs": [],
   "source": [
    "data = model.generate({x}, 1000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "760b0f27",
   "metadata": {},
   "source": [
    "Construct unbinned likelihood of model w.r.t. data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "199a86a5",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:58.330402Z",
     "iopub.status.busy": "2026-05-19T20:32:58.330243Z",
     "iopub.status.idle": "2026-05-19T20:32:58.478829Z",
     "shell.execute_reply": "2026-05-19T20:32:58.478121Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Fitting -- RooAbsPdf::fitTo(model) 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 6.69691 ms\n"
     ]
    }
   ],
   "source": [
    "nll = model.createNLL(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b25edf3",
   "metadata": {},
   "source": [
    "Interactive minimization, error analysis\n",
    "-------------------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eafcfd43",
   "metadata": {},
   "source": [
    "Create MINUIT interface object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "f7cc8c2c",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:58.481037Z",
     "iopub.status.busy": "2026-05-19T20:32:58.480900Z",
     "iopub.status.idle": "2026-05-19T20:32:58.601211Z",
     "shell.execute_reply": "2026-05-19T20:32:58.600498Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_model_modelData) Summation contains a RooNLLVar, using its error level\n"
     ]
    }
   ],
   "source": [
    "m = ROOT.RooMinimizer(nll)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "811b1c3e",
   "metadata": {},
   "source": [
    "Activate verbose logging of MINUIT parameter space stepping"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "8bde0fb5",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:58.603327Z",
     "iopub.status.busy": "2026-05-19T20:32:58.603199Z",
     "iopub.status.idle": "2026-05-19T20:32:58.711473Z",
     "shell.execute_reply": "2026-05-19T20:32:58.710815Z"
    }
   },
   "outputs": [],
   "source": [
    "m.setVerbose(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "efc82510",
   "metadata": {},
   "source": [
    "Call MIGRAD to minimize the likelihood"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a35d2dfd",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:58.713733Z",
     "iopub.status.busy": "2026-05-19T20:32:58.713538Z",
     "iopub.status.idle": "2026-05-19T20:32:58.860502Z",
     "shell.execute_reply": "2026-05-19T20:32:58.859783Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] WARNING:Minimization -- RooAbsMinimizerFcn::synchronize: WARNING: no initial error estimate available for frac: using 0.1\n",
      "[#0] WARNING:Minimization -- RooAbsMinimizerFcn::synchronize: WARNING: no initial error estimate available for sigma_g2: using 0.3\n",
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      "Minuit2Minimizer: Minimize with max-calls 1000 convergence for edm < 1 strategy 1\n",
      "\n",
      "prevFCN = 2660.220684  frac=0.5036, \n",
      "prevFCN = 2660.181264  frac=0.4964, \n",
      "prevFCN = 2660.261875  frac=0.5, sigma_g2=4.011, \n",
      "prevFCN = 2660.278974  sigma_g2=3.989, \n",
      "prevFCN = 2660.167705  sigma_g2=4.005, \n",
      "prevFCN = 2660.248509  sigma_g2=3.995, \n",
      "prevFCN = 2660.194127  frac=0.5812, sigma_g2=3.889, \n",
      "prevFCN = 2660.146969  frac=0.5429, sigma_g2=3.941, \n",
      "prevFCN = 2659.83839  frac=0.5459, \n",
      "prevFCN = 2659.836693  frac=0.5398, \n",
      "prevFCN = 2659.841351  frac=0.5429, sigma_g2=3.946, \n",
      "prevFCN = 2659.835035  sigma_g2=3.936, \n",
      "prevFCN = 2659.842919  frac=0.5497, sigma_g2=3.955, \n",
      "prevFCN = 2659.823248  frac=0.5767, sigma_g2=4.011, \n",
      "prevFCN = 2659.774616  frac=0.6314, sigma_g2=4.128, \n",
      "prevFCN = 2659.73914  frac=0.6266, sigma_g2=4.117, \n",
      "prevFCN = 2659.738319  frac=0.6296, \n",
      "prevFCN = 2659.740343  frac=0.6237, \n",
      "prevFCN = 2659.737969  frac=0.6266, sigma_g2=4.123, \n",
      "prevFCN = 2659.737996  sigma_g2=4.112, \n",
      "prevFCN = 2659.739643  frac=0.6227, sigma_g2=4.114, \n",
      "prevFCN = 2659.737959  frac=0.6236, sigma_g2=4.115, \n",
      "prevFCN = 2659.737923  frac=0.6262, \n",
      "prevFCN = 2659.738617  frac=0.621, \n",
      "prevFCN = 2659.738491  frac=0.6236, sigma_g2=4.121, \n",
      "prevFCN = 2659.738401  sigma_g2=4.108, \n",
      "prevFCN = 2659.738723  sigma_g2=4.115, \n",
      "prevFCN = 2659.737923  frac=0.6262, \n",
      "prevFCN = 2659.738617  frac=0.621, \n",
      "prevFCN = 2659.738491  frac=0.6236, sigma_g2=4.121, \n",
      "prevFCN = 2659.738401  sigma_g2=4.108, \n",
      "prevFCN = 2659.738723  frac=0.6241, sigma_g2=4.115, \n",
      "prevFCN = 2659.737961  frac=0.6231, \n",
      "prevFCN = 2659.737935  frac=0.6236, sigma_g2=4.116, \n",
      "prevFCN = 2659.737916  sigma_g2=4.113, \n",
      "prevFCN = 2659.737981  frac=0.6262, sigma_g2=4.121, \n",
      "prevFCN = 2659.737949  Minuit2Minimizer : Valid minimum - status = 0\n",
      "FVAL  = 2659.73792283928833\n",
      "Edm   = 2.40279108894231903e-05\n",
      "Nfcn  = 37\n",
      "frac\t  = 0.6236\t +/-  0.164\t(limited)\n",
      "sigma_g2\t  = 4.115\t +/-  0.405\t(limited)\n",
      "frac=0.6236, sigma_g2=4.115, "
     ]
    },
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <Minuit2>: MnSeedGenerator Computing seed using NumericalGradient calculator\n",
      "Info in <Minuit2>: MnSeedGenerator Evaluated function and gradient in 327.811 μs\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state: FCN =       2660.220684 Edm =      0.7499658139 NCalls =      7\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state  \n",
      "  Minimum value : 2660.220684\n",
      "  Edm           : 0.7499658139\n",
      "  Internal parameters:\t[                0    -0.3398369095]\t\n",
      "  Internal gradient  :\t[      -5.61967122      7.285345928]\t\n",
      "  Internal covariance matrix:\n",
      "[[    0.058086658              0]\n",
      " [              0    0.021957944]]]\n",
      "Info in <Minuit2>: VariableMetricBuilder Start iterating until Edm is < 0.001 with call limit = 1000\n",
      "Info in <Minuit2>: VariableMetricBuilder    0 - FCN =       2660.220684 Edm =      0.7499658139 NCalls =      7\n",
      "Info in <Minuit2>: VariableMetricBuilder    1 - FCN =        2659.83839 Edm =    0.008262338758 NCalls =     13\n",
      "Info in <Minuit2>: VariableMetricBuilder    2 - FCN =       2659.738319 Edm =   0.0004391718866 NCalls =     21\n",
      "Info in <Minuit2>: VariableMetricBuilder    3 - FCN =       2659.737923 Edm =   2.063673983e-05 NCalls =     27\n",
      "Info in <Minuit2>: MnHesse Done after 279.311 μs\n",
      "Info in <Minuit2>: VariableMetricBuilder After Hessian\n",
      "Info in <Minuit2>: VariableMetricBuilder    4 - FCN =       2659.737923 Edm =   2.402791089e-05 NCalls =     37\n",
      "Info in <Minuit2>: VariableMetricBuilder Stop iterating after 826.334 μs\n"
     ]
    }
   ],
   "source": [
    "m.migrad()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c898a807",
   "metadata": {},
   "source": [
    "Print values of all parameters, reflect values (and error estimates)\n",
    "that are back propagated from MINUIT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "2b657fdc",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:58.862449Z",
     "iopub.status.busy": "2026-05-19T20:32:58.862317Z",
     "iopub.status.idle": "2026-05-19T20:32:58.974425Z",
     "shell.execute_reply": "2026-05-19T20:32:58.973801Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  1) RooRealVar::     frac = 0.6236 +/- 0.164\n",
      "  2) RooRealVar::     mean = 0\n",
      "  3) RooRealVar:: sigma_g1 = 3\n",
      "  4) RooRealVar:: sigma_g2 = 4.115 +/- 0.405\n"
     ]
    }
   ],
   "source": [
    "model.getParameters({x}).Print(\"s\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2f54223",
   "metadata": {},
   "source": [
    "Disable verbose logging"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "131bdc2e",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:58.976169Z",
     "iopub.status.busy": "2026-05-19T20:32:58.976039Z",
     "iopub.status.idle": "2026-05-19T20:32:59.079611Z",
     "shell.execute_reply": "2026-05-19T20:32:59.078876Z"
    }
   },
   "outputs": [],
   "source": [
    "m.setVerbose(False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5b728402",
   "metadata": {},
   "source": [
    "Run HESSE to calculate errors from d2L/dp2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "23bc0642",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:59.081759Z",
     "iopub.status.busy": "2026-05-19T20:32:59.081622Z",
     "iopub.status.idle": "2026-05-19T20:32:59.191082Z",
     "shell.execute_reply": "2026-05-19T20:32:59.190441Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <Minuit2>: Minuit2Minimizer::Hesse Using max-calls 1000\n",
      "Info in <Minuit2>: MnHesse Done after 171.09 μs\n",
      "Info in <Minuit2>: Minuit2Minimizer::Hesse Hesse is valid - matrix is accurate\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m.hesse()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "12a861e4",
   "metadata": {},
   "source": [
    "Print value (and error) of sigma_g2 parameter, reflects\n",
    "value and error back propagated from MINUIT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f621def6",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:59.193247Z",
     "iopub.status.busy": "2026-05-19T20:32:59.193112Z",
     "iopub.status.idle": "2026-05-19T20:32:59.301643Z",
     "shell.execute_reply": "2026-05-19T20:32:59.300997Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RooRealVar::sigma_g2 = 4.115 +/- 0.4057  L(3 - 6) \n"
     ]
    }
   ],
   "source": [
    "sigma_g2.Print()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb2edddc",
   "metadata": {},
   "source": [
    "Run MINOS on sigma_g2 parameter only"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "12f35561",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:59.303413Z",
     "iopub.status.busy": "2026-05-19T20:32:59.303283Z",
     "iopub.status.idle": "2026-05-19T20:32:59.419254Z",
     "shell.execute_reply": "2026-05-19T20:32:59.418589Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "******************************************************************************************************\n",
      "Minuit2Minimizer::GetMinosError - Run MINOS LOWER error for parameter #1 : sigma_g2 using max-calls 1000, tolerance 1\n",
      "******************************************************************************************************\n",
      "Minuit2Minimizer::GetMinosError - Run MINOS UPPER error for parameter #1 : sigma_g2 using max-calls 1000, tolerance 1\n",
      "Minos: Lower error for parameter sigma_g2  :  -0.3794\n",
      "Minos: Upper error for parameter sigma_g2  :  0.4574\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <Minuit2>: MnMinos Determination of lower Minos error for parameter 1\n",
      "Info in <Minuit2>: MnFunctionCross Run Migrad with fixed parameters:\n",
      "  Pos 1: sigma_g2 = 3.70891\n",
      "Info in <Minuit2>: MnSeedGenerator Computing seed using NumericalGradient calculator\n",
      "Info in <Minuit2>: MnSeedGenerator Evaluated function and gradient in 61.551 μs\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state: FCN =       2660.551181 Edm =      0.1133084751 NCalls =      3\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state  \n",
      "  Minimum value : 2660.551181\n",
      "  Edm           : 0.1133084751\n",
      "  Internal parameters:\t[     -0.062266279]\t\n",
      "  Internal gradient  :\t[      3.194420928]\t\n",
      "  Internal covariance matrix:\n",
      "[[    0.044415863]]]\n",
      "Info in <Minuit2>: VariableMetricBuilder Start iterating until Edm is < 0.0005 with call limit = 1000\n",
      "Info in <Minuit2>: VariableMetricBuilder    0 - FCN =       2660.551181 Edm =      0.1133084751 NCalls =      3\n",
      "Info in <Minuit2>: VariableMetricBuilder    1 - FCN =       2660.315058 Edm =   0.0002150023274 NCalls =      7\n",
      "Info in <Minuit2>: VariableMetricBuilder Stop iterating after 54.751 μs\n",
      "Info in <Minuit2>: MnFunctionCross Result after Migrad FCN =       2660.315058 Edm =   0.0002150023274 NCalls =      7 \n",
      "  Pos |    Name    |  type   |      Value       |    Error +/-\n",
      "    0 |       frac | limited |     0.3972435352 | 0.1056591236\n",
      "    1 |   sigma_g2 |  fixed  |      3.708914333 | 0.4056662206\n",
      "Info in <Minuit2>: MnFunctionCross Run Migrad again (2nd) with fixed parameters:\n",
      "  Pos 1: sigma_g2 = 3.737\n",
      "Info in <Minuit2>: MnSeedGenerator Computing seed using NumericalGradient calculator\n",
      "Info in <Minuit2>: MnSeedGenerator Evaluated function and gradient in 34.061 μs\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state: FCN =       2660.250576 Edm =     0.01729037624 NCalls =      3\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state  \n",
      "  Minimum value : 2660.250576\n",
      "  Edm           : 0.01729037624\n",
      "  Internal parameters:\t[    -0.2069877956]\t\n",
      "  Internal gradient  :\t[    -0.8544281469]\t\n",
      "  Internal covariance matrix:\n",
      "[[    0.094735629]]]\n",
      "Info in <Minuit2>: VariableMetricBuilder Start iterating until Edm is < 0.0005 with call limit = 1000\n",
      "Info in <Minuit2>: VariableMetricBuilder    0 - FCN =       2660.250576 Edm =     0.01729037624 NCalls =      3\n",
      "Info in <Minuit2>: VariableMetricBuilder    1 - FCN =       2660.232876 Edm =   4.007061453e-06 NCalls =      6\n",
      "Info in <Minuit2>: VariableMetricBuilder Stop iterating after 49.851 μs\n",
      "Info in <Minuit2>: MnFunctionCross Result after 2nd Migrad FCN =       2660.232876 Edm =   4.007061453e-06 NCalls =      6 \n",
      "  Pos |    Name    |  type   |      Value       |    Error +/-\n",
      "    0 |       frac | limited |     0.4171265191 | 0.1072770092\n",
      "    1 |   sigma_g2 |  fixed  |      3.736995132 | 0.4056662206\n",
      "Info in <Minuit2>: MnFunctionCross Run Migrad again (3rd) with fixed parameters:\n",
      "  Pos 1: sigma_g2 = 3.73527\n",
      "Info in <Minuit2>: MnSeedGenerator Computing seed using NumericalGradient calculator\n",
      "Info in <Minuit2>: MnSeedGenerator Evaluated function and gradient in 40.12 μs\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state: FCN =       2660.237741 Edm =   5.406696249e-05 NCalls =      3\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state  \n",
      "  Minimum value : 2660.237741\n",
      "  Edm           : 5.406696249e-05\n",
      "  Internal parameters:\t[    -0.1665154017]\t\n",
      "  Internal gradient  :\t[    0.04741417272]\t\n",
      "  Internal covariance matrix:\n",
      "[[    0.096200119]]]\n",
      "Info in <Minuit2>: VariableMetricBuilder Start iterating until Edm is < 0.0005 with call limit = 1000\n",
      "Info in <Minuit2>: VariableMetricBuilder    0 - FCN =       2660.237741 Edm =   5.406696249e-05 NCalls =      3\n",
      "Info in <Minuit2>: VariableMetricBuilder    1 - FCN =       2660.237689 Edm =   2.190000736e-08 NCalls =      6\n",
      "Info in <Minuit2>: VariableMetricBuilder Stop iterating after 34.24 μs\n",
      "Info in <Minuit2>: MnFunctionCross Result after Migrad (3rd): FCN =       2660.237689 Edm =   2.190000736e-08 NCalls =      6 \n",
      "  Pos |    Name    |  type   |      Value       |    Error +/-\n",
      "    0 |       frac | limited |     0.4160021957 | 0.1061893687\n",
      "    1 |   sigma_g2 |  fixed  |      3.735270747 | 0.4056662206\n",
      "Info in <Minuit2>: MnMinos end of Minos scan for low interval for parameter sigma_g2\n",
      "Info in <Minuit2>: MnMinos Determination of upper Minos error for parameter 1\n",
      "Info in <Minuit2>: MnFunctionCross Run Migrad with fixed parameters:\n",
      "  Pos 1: sigma_g2 = 4.52025\n",
      "Info in <Minuit2>: MnSeedGenerator Computing seed using NumericalGradient calculator\n",
      "Info in <Minuit2>: MnSeedGenerator Evaluated function and gradient in 50.35 μs\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state: FCN =       2660.321661 Edm =      0.2677306814 NCalls =      5\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state  \n",
      "  Minimum value : 2660.321661\n",
      "  Edm           : 0.2677306814\n",
      "  Internal parameters:\t[     0.5618487643]\t\n",
      "  Internal gradient  :\t[        4.9103225]\t\n",
      "  Internal covariance matrix:\n",
      "[[    0.044415863]]]\n",
      "Info in <Minuit2>: VariableMetricBuilder Start iterating until Edm is < 0.0005 with call limit = 1000\n",
      "Info in <Minuit2>: VariableMetricBuilder    0 - FCN =       2660.321661 Edm =      0.2677306814 NCalls =      5\n",
      "Info in <Minuit2>: VariableMetricBuilder    1 - FCN =       2660.139576 Edm =   5.875660685e-08 NCalls =      9\n",
      "Info in <Minuit2>: VariableMetricBuilder Stop iterating after 42.24 μs\n",
      "Info in <Minuit2>: MnFunctionCross Result after Migrad FCN =       2660.139576 Edm =   5.875660685e-08 NCalls =      9 \n",
      "  Pos |    Name    |  type   |      Value       |    Error +/-\n",
      "    0 |       frac | limited |     0.7343787978 | 0.05405769968\n",
      "    1 |   sigma_g2 |  fixed  |      4.520246774 | 0.4056662206\n",
      "Info in <Minuit2>: MnFunctionCross Run Migrad again (2nd) with fixed parameters:\n",
      "  Pos 1: sigma_g2 = 4.56719\n",
      "Info in <Minuit2>: MnSeedGenerator Computing seed using NumericalGradient calculator\n",
      "Info in <Minuit2>: MnSeedGenerator Evaluated function and gradient in 33.03 μs\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state: FCN =       2660.244047 Edm =     0.01621248945 NCalls =      3\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state  \n",
      "  Minimum value : 2660.244047\n",
      "  Edm           : 0.01621248945\n",
      "  Internal parameters:\t[     0.4878837463]\t\n",
      "  Internal gradient  :\t[     -1.467517802]\t\n",
      "  Internal covariance matrix:\n",
      "[[    0.030112232]]]\n",
      "Info in <Minuit2>: VariableMetricBuilder Start iterating until Edm is < 0.0005 with call limit = 1000\n",
      "Info in <Minuit2>: VariableMetricBuilder    0 - FCN =       2660.244047 Edm =     0.01621248945 NCalls =      3\n",
      "Info in <Minuit2>: VariableMetricBuilder    1 - FCN =       2660.228567 Edm =   3.216979859e-05 NCalls =      6\n",
      "Info in <Minuit2>: VariableMetricBuilder Stop iterating after 33.611 μs\n",
      "Info in <Minuit2>: MnFunctionCross Result after 2nd Migrad FCN =       2660.228567 Edm =   3.216979859e-05 NCalls =      6 \n",
      "  Pos |    Name    |  type   |      Value       |    Error +/-\n",
      "    0 |       frac | limited |     0.7440794003 | 0.05226504469\n",
      "    1 |   sigma_g2 |  fixed  |      4.567194797 | 0.4056662206\n",
      "Info in <Minuit2>: MnFunctionCross Run Migrad again (3rd) with fixed parameters:\n",
      "  Pos 1: sigma_g2 = 4.57213\n",
      "Info in <Minuit2>: MnSeedGenerator Computing seed using NumericalGradient calculator\n",
      "Info in <Minuit2>: MnSeedGenerator Evaluated function and gradient in 32.78 μs\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state: FCN =       2660.238339 Edm =   5.179528976e-05 NCalls =      3\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state  \n",
      "  Minimum value : 2660.238339\n",
      "  Edm           : 5.179528976e-05\n",
      "  Internal parameters:\t[     0.5099788642]\t\n",
      "  Internal gradient  :\t[   -0.08477489166]\t\n",
      "  Internal covariance matrix:\n",
      "[[    0.028828084]]]\n",
      "Info in <Minuit2>: VariableMetricBuilder Start iterating until Edm is < 0.0005 with call limit = 1000\n",
      "Info in <Minuit2>: VariableMetricBuilder    0 - FCN =       2660.238339 Edm =   5.179528976e-05 NCalls =      3\n",
      "Info in <Minuit2>: VariableMetricBuilder    1 - FCN =       2660.238288 Edm =   1.944200952e-10 NCalls =      6\n",
      "Info in <Minuit2>: VariableMetricBuilder Stop iterating after 34.39 μs\n",
      "Info in <Minuit2>: MnFunctionCross Result after Migrad (3rd): FCN =       2660.238288 Edm =   1.944200952e-10 NCalls =      6 \n",
      "  Pos |    Name    |  type   |      Value       |    Error +/-\n",
      "    0 |       frac | limited |     0.7446124488 | 0.05217900468\n",
      "    1 |   sigma_g2 |  fixed  |      4.572130423 | 0.4056662206\n",
      "Info in <Minuit2>: MnMinos end of Minos scan for up interval for parameter sigma_g2\n"
     ]
    }
   ],
   "source": [
    "m.minos({sigma_g2})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d8294282",
   "metadata": {},
   "source": [
    "Print value (and error) of sigma_g2 parameter, reflects\n",
    "value and error back propagated from MINUIT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "2f615efd",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:59.421393Z",
     "iopub.status.busy": "2026-05-19T20:32:59.421267Z",
     "iopub.status.idle": "2026-05-19T20:32:59.525211Z",
     "shell.execute_reply": "2026-05-19T20:32:59.524558Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RooRealVar::sigma_g2 = 4.115 +/- (-0.3794,0.4574)  L(3 - 6) \n"
     ]
    }
   ],
   "source": [
    "sigma_g2.Print()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d073cbf1",
   "metadata": {},
   "source": [
    "Saving results, contour plots\n",
    "---------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04688ad3",
   "metadata": {},
   "source": [
    "Save a snapshot of the fit result. ROOT.This object contains the initial\n",
    "fit parameters, final fit parameters, complete correlation\n",
    "matrix, EDM, minimized FCN , last MINUIT status code and\n",
    "the number of times the ROOT.RooFit function object has indicated evaluation\n",
    "problems (e.g. zero probabilities during likelihood evaluation)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "85c0f9ec",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:59.527022Z",
     "iopub.status.busy": "2026-05-19T20:32:59.526899Z",
     "iopub.status.idle": "2026-05-19T20:32:59.638107Z",
     "shell.execute_reply": "2026-05-19T20:32:59.637352Z"
    }
   },
   "outputs": [],
   "source": [
    "r = m.save()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa9372ae",
   "metadata": {},
   "source": [
    "Make contour plot of mx vs sx at 1,2, sigma"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "85a6a338",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:59.639858Z",
     "iopub.status.busy": "2026-05-19T20:32:59.639730Z",
     "iopub.status.idle": "2026-05-19T20:32:59.782722Z",
     "shell.execute_reply": "2026-05-19T20:32:59.782295Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#0] WARNING:InputArguments -- Value -1.15669e-17 is slightly outside the default range [0, 1] of the variable \"frac\"!\n",
      "The value will be clipped. To restore the dangerous old behavior of silently clipping the value to the range, call `RooRealVar::enableSilentClipping()`.\n",
      "[#0] WARNING:InputArguments -- Value -1.15669e-17 is slightly outside the default range [0, 1] of the variable \"frac\"!\n",
      "The value will be clipped. To restore the dangerous old behavior of silently clipping the value to the range, call `RooRealVar::enableSilentClipping()`.\n",
      "[#0] WARNING:InputArguments -- Value -1.15669e-17 is slightly outside the default range [0, 1] of the variable \"frac\"!\n",
      "The value will be clipped. To restore the dangerous old behavior of silently clipping the value to the range, call `RooRealVar::enableSilentClipping()`.\n",
      "[#0] WARNING:InputArguments -- Value -1.15669e-17 is slightly outside the default range [0, 1] of the variable \"frac\"!\n",
      "The value will be clipped. To restore the dangerous old behavior of silently clipping the value to the range, call `RooRealVar::enableSilentClipping()`.\n",
      "[#0] WARNING:InputArguments -- Value -1.15669e-17 is slightly outside the default range [0, 1] of the variable \"frac\"!\n",
      "The value will be clipped. To restore the dangerous old behavior of silently clipping the value to the range, call `RooRealVar::enableSilentClipping()`.\n",
      "[#0] WARNING:InputArguments -- Value -1.15669e-17 is slightly outside the default range [0, 1] of the variable \"frac\"!\n",
      "The value will be clipped. To restore the dangerous old behavior of silently clipping the value to the range, call `RooRealVar::enableSilentClipping()`.\n",
      "[#0] WARNING:InputArguments -- Value -1.15669e-17 is slightly outside the default range [0, 1] of the variable \"frac\"!\n",
      "The value will be clipped. To restore the dangerous old behavior of silently clipping the value to the range, call `RooRealVar::enableSilentClipping()`.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <Minuit2>: Minuit2Minimizer::Contour Computing contours at level - 0.5\n",
      "Info in <Minuit2>: Minuit2Minimizer::Contour  Computed 50 points at level 0.5\n",
      "( 0.397204, 3.75645) ( 0.416069, 3.73525) ( 0.443681, 3.74275) ( 0.468572, 3.75686) ( 0.491424, 3.77374) \n",
      "( 0.512763, 3.7925) ( 0.532576, 3.81249) ( 0.551172, 3.83362) ( 0.568618, 3.8557) ( 0.584976, 3.8786) \n",
      "( 0.600107, 3.90189) ( 0.614278, 3.92578) ( 0.627536, 3.95019) ( 0.639931, 3.97505) ( 0.651505, 4.00029) \n",
      "( 0.662308, 4.02586) ( 0.681774, 4.07786) ( 0.69833, 4.12967) ( 0.712664, 4.18214) ( 0.724985, 4.23512) \n",
      "( 0.735451, 4.28849) ( 0.744147, 4.34217) ( 0.751057, 4.39612) ( 0.755974, 4.4503) ( 0.75818, 4.50465) \n",
      "( 0.756965, 4.53937) ( 0.744894, 4.57195) ( 0.725496, 4.55142) ( 0.712825, 4.52618) ( 0.700766, 4.50094) \n",
      "( 0.69117, 4.47466) ( 0.670342, 4.42313) ( 0.651447, 4.37086) ( 0.632444, 4.31878) ( 0.611816, 4.26732) \n",
      "( 0.592713, 4.21525) ( 0.581033, 4.19009) ( 0.570487, 4.16444) ( 0.550417, 4.11274) ( 0.537968, 4.08796) \n",
      "( 0.526798, 4.06257) ( 0.505119, 4.01155) ( 0.492422, 3.9869) ( 0.480697, 3.96178) ( 0.469366, 3.93644) \n",
      "( 0.456767, 3.91171) ( 0.445324, 3.88643) ( 0.433481, 3.86134) ( 0.421376, 3.83626) ( 0.411377, 3.81026) \n",
      "\n",
      "\n",
      "Info in <Minuit2>: Minuit2Minimizer::Contour Computing contours at level - 2\n",
      "Info in <Minuit2>: Minuit2Minimizer::Contour  Computed 50 points at level 2\n",
      "( 0, 3.52619) ( 0, 3.40406) ( 0.000304375, 3.40406) ( 0.0630768, 3.40963) ( 0.121838, 3.4324) \n",
      "( 0.181402, 3.45105) ( 0.239929, 3.47275) ( 0.297221, 3.49773) ( 0.352834, 3.52626) ( 0.406331, 3.55861) \n",
      "( 0.457173, 3.59499) ( 0.505114, 3.63575) ( 0.549309, 3.68054) ( 0.589399, 3.72903) ( 0.625236, 3.78075) \n",
      "( 0.656828, 3.83501) ( 0.684506, 3.89137) ( 0.729578, 4.00849) ( 0.762032, 4.12287) ( 0.786939, 4.23912) \n",
      "( 0.806098, 4.35642) ( 0.820806, 4.47436) ( 0.831925, 4.59256) ( 0.840006, 4.71101) ( 0.845246, 4.82962) \n",
      "( 0.847335, 4.94833) ( 0.845371, 5.04869) ( 0.825769, 5.14714) ( 0.78052, 5.04063) ( 0.750009, 4.92901) \n",
      "( 0.722873, 4.81674) ( 0.689415, 4.70619) ( 0.652659, 4.58209) ( 0.612693, 4.45899) ( 0.594621, 4.3967) \n",
      "( 0.568676, 4.33726) ( 0.544881, 4.27707) ( 0.519745, 4.21742) ( 0.493087, 4.15829) ( 0.46484, 4.0999) \n",
      "( 0.43488, 4.04237) ( 0.403087, 3.98583) ( 0.369336, 3.93041) ( 0.333541, 3.87628) ( 0.295626, 3.82362) \n",
      "( 0.255547, 3.77258) ( 0.197107, 3.70555) ( 0.134747, 3.64215) ( 0.0688327, 3.58247) ( 0.0358561, 3.55257) \n",
      "\n",
      "\n",
      "Info in <Minuit2>: Minuit2Minimizer::Contour Computing contours at level - 4.5\n",
      "Info in <Minuit2>: Minuit2Minimizer::Contour  Computed 50 points at level 4.5\n",
      "( 0, 3.65632) ( 0, 3.28839) ( 0.000118912, 3.28838) ( 0.0433327, 3.29515) ( 0.0846458, 3.30952) \n",
      "( 0.127838, 3.31705) ( 0.168254, 3.33405) ( 0.25054, 3.36278) ( 0.330847, 3.39665) ( 0.408664, 3.43698) \n",
      "( 0.482236, 3.48461) ( 0.550023, 3.54027) ( 0.610426, 3.60387) ( 0.662196, 3.67405) ( 0.705642, 3.74966) \n",
      "( 0.741454, 3.8291) ( 0.770781, 3.91115) ( 0.814432, 4.07901) ( 0.844344, 4.24985) ( 0.864018, 4.40872) \n",
      "( 0.878473, 4.56816) ( 0.889201, 4.72787) ( 0.89715, 4.88774) ( 0.902923, 5.04767) ( 0.906887, 5.20765) \n",
      "( 0.909214, 5.36766) ( 0.909872, 5.52768) ( 0.907255, 5.73496) ( 0.885755, 5.94113) ( 0.846212, 5.79043) \n",
      "( 0.820098, 5.63683) ( 0.796561, 5.48294) ( 0.767105, 5.33008) ( 0.748441, 5.21448) ( 0.722136, 5.10037) \n",
      "( 0.69715, 4.98603) ( 0.670097, 4.87217) ( 0.640625, 4.75886) ( 0.608354, 4.64632) ( 0.572833, 4.53475) \n",
      "( 0.533544, 4.42445) ( 0.489386, 4.31463) ( 0.440075, 4.20702) ( 0.384852, 4.10229) ( 0.322986, 4.00134) \n",
      "( 0.253654, 3.90498) ( 0.176625, 3.81466) ( 0.135204, 3.77212) ( 0.0919029, 3.73149) ( 0.0467995, 3.69287) \n",
      "\n",
      "\n"
     ]
    }
   ],
   "source": [
    "frame = m.contour(frac, sigma_g2, 1, 2, 3)\n",
    "frame.SetTitle(\"Contour plot\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8daf2f2c",
   "metadata": {},
   "source": [
    "Print the fit result snapshot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "7f204ed8",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:59.785213Z",
     "iopub.status.busy": "2026-05-19T20:32:59.785057Z",
     "iopub.status.idle": "2026-05-19T20:32:59.894472Z",
     "shell.execute_reply": "2026-05-19T20:32:59.893830Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "  RooFitResult: minimized FCN value: 2660, estimated distance to minimum: 2.409e-05\n",
      "                covariance matrix quality: Full, accurate covariance matrix\n",
      "                Status : MIGRAD=0 HESSE=0 MINOS=0 \n",
      "\n",
      "    Constant Parameter    Value     \n",
      "  --------------------  ------------\n",
      "                  mean    0.0000e+00\n",
      "              sigma_g1    3.0000e+00\n",
      "\n",
      "    Floating Parameter  InitialValue    FinalValue (+HiError,-LoError)    GblCorr.\n",
      "  --------------------  ------------  ----------------------------------  --------\n",
      "                  frac    5.0000e-01    6.2360e-01         +/-  1.64e-01  <none>\n",
      "              sigma_g2    4.0000e+00    4.1146e+00 (+4.57e-01,-3.79e-01)  <none>\n",
      "\n"
     ]
    }
   ],
   "source": [
    "r.Print(\"v\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "632f435c",
   "metadata": {},
   "source": [
    "Change parameter values, plotting\n",
    "-----------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "29b1e0ae",
   "metadata": {},
   "source": [
    "At any moment you can manually change the value of a (constant)\n",
    "parameter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "ddab9345",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:32:59.896311Z",
     "iopub.status.busy": "2026-05-19T20:32:59.896184Z",
     "iopub.status.idle": "2026-05-19T20:33:00.003694Z",
     "shell.execute_reply": "2026-05-19T20:33:00.003256Z"
    }
   },
   "outputs": [],
   "source": [
    "mean.setVal(0.3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "53660b2a",
   "metadata": {},
   "source": [
    "Rerun MIGRAD,HESSE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "8b19714f",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:00.019365Z",
     "iopub.status.busy": "2026-05-19T20:33:00.019221Z",
     "iopub.status.idle": "2026-05-19T20:33:00.125866Z",
     "shell.execute_reply": "2026-05-19T20:33:00.125209Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      "Minuit2Minimizer: Minimize with max-calls 1000 convergence for edm < 1 strategy 1\n",
      "Minuit2Minimizer : Valid minimum - status = 0\n",
      "FVAL  = 2663.35774508719987\n",
      "Edm   = 9.5636987971879807e-05\n",
      "Nfcn  = 38\n",
      "frac\t  = 0.5655\t +/-  0.1961\t(limited)\n",
      "sigma_g2\t  = 4.005\t +/-  0.3917\t(limited)\n",
      "RooRealVar::frac = 0.5655 +/- 0.1961  L(0 - 1) \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <Minuit2>: MnSeedGenerator Computing seed using NumericalGradient calculator\n",
      "Info in <Minuit2>: MnSeedGenerator Evaluated function and gradient in 149.151 μs\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state: FCN =       2663.411598 Edm =      0.0145493914 NCalls =      9\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state  \n",
      "  Minimum value : 2663.411598\n",
      "  Edm           : 0.0145493914\n",
      "  Internal parameters:\t[     0.2497912426    -0.2598610789]\t\n",
      "  Internal gradient  :\t[      1.120322622    -0.2622810123]\t\n",
      "  Internal covariance matrix:\n",
      "[[    0.044738711              0]\n",
      " [              0    0.029727437]]]\n",
      "Info in <Minuit2>: VariableMetricBuilder Start iterating until Edm is < 0.001 with call limit = 1000\n",
      "Info in <Minuit2>: VariableMetricBuilder    0 - FCN =       2663.411598 Edm =      0.0145493914 NCalls =      9\n",
      "Info in <Minuit2>: VariableMetricBuilder    1 - FCN =       2663.400666 Edm =    0.005796742294 NCalls =     15\n",
      "Info in <Minuit2>: VariableMetricBuilder    2 - FCN =        2663.35958 Edm =    0.001729013892 NCalls =     22\n",
      "Info in <Minuit2>: VariableMetricBuilder    3 - FCN =       2663.357745 Edm =   8.583255995e-05 NCalls =     28\n",
      "Info in <Minuit2>: MnHesse Done after 159.18 μs\n",
      "Info in <Minuit2>: VariableMetricBuilder After Hessian\n",
      "Info in <Minuit2>: VariableMetricBuilder    4 - FCN =       2663.357745 Edm =   9.563698797e-05 NCalls =     38\n",
      "Info in <Minuit2>: VariableMetricBuilder Stop iterating after 445.132 μs\n",
      "Info in <Minuit2>: Minuit2Minimizer::Hesse Using max-calls 1000\n",
      "Info in <Minuit2>: MnHesse Done after 131.859 μs\n",
      "Info in <Minuit2>: Minuit2Minimizer::Hesse Hesse is valid - matrix is accurate\n"
     ]
    }
   ],
   "source": [
    "m.migrad()\n",
    "m.hesse()\n",
    "frac.Print()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d36af25",
   "metadata": {},
   "source": [
    "Now fix sigma_g2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "e86c70e3",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:00.127586Z",
     "iopub.status.busy": "2026-05-19T20:33:00.127460Z",
     "iopub.status.idle": "2026-05-19T20:33:00.237347Z",
     "shell.execute_reply": "2026-05-19T20:33:00.236701Z"
    }
   },
   "outputs": [],
   "source": [
    "sigma_g2.setConstant(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "caab2566",
   "metadata": {},
   "source": [
    "Rerun MIGRAD,HESSE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "805b8d6b",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:00.239471Z",
     "iopub.status.busy": "2026-05-19T20:33:00.239255Z",
     "iopub.status.idle": "2026-05-19T20:33:00.443142Z",
     "shell.execute_reply": "2026-05-19T20:33:00.442512Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Minimization -- [fitFCN] No discrete parameters, performing continuous minimization only\n",
      "Minuit2Minimizer: Minimize with max-calls 1000 convergence for edm < 1 strategy 1\n",
      "Minuit2Minimizer : Valid minimum - status = 0\n",
      "FVAL  = 2663.35774092453494\n",
      "Edm   = 1.35711170955699541e-10\n",
      "Nfcn  = 15\n",
      "frac\t  = 0.5652\t +/-  0.08029\t(limited)\n",
      "sigma_g2\t  = 4.005\t (fixed)\n",
      "RooRealVar::frac = 0.5652 +/- 0.08029  L(0 - 1) \n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <Minuit2>: MnSeedGenerator Computing seed using NumericalGradient calculator\n",
      "Info in <Minuit2>: MnSeedGenerator Evaluated function and gradient in 80.451 μs\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state: FCN =       2663.357745 Edm =   4.211167067e-06 NCalls =      5\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state  \n",
      "  Minimum value : 2663.357745\n",
      "  Edm           : 4.211167067e-06\n",
      "  Internal parameters:\t[     0.1313437863]\t\n",
      "  Internal gradient  :\t[    0.01784069119]\t\n",
      "  Internal covariance matrix:\n",
      "[[    0.052922349]]]\n",
      "Info in <Minuit2>: VariableMetricBuilder Start iterating until Edm is < 0.001 with call limit = 1000\n",
      "Info in <Minuit2>: VariableMetricBuilder    0 - FCN =       2663.357745 Edm =   4.211167067e-06 NCalls =      5\n",
      "Info in <Minuit2>: VariableMetricBuilder    1 - FCN =       2663.357741 Edm =   6.315904677e-14 NCalls =      8\n",
      "Info in <Minuit2>: MnHesse Done after 61.21 μs\n",
      "Info in <Minuit2>: VariableMetricBuilder After Hessian\n",
      "Info in <Minuit2>: VariableMetricBuilder    2 - FCN =       2663.357741 Edm =    1.35711171e-10 NCalls =     15\n",
      "Info in <Minuit2>: VariableMetricBuilder Stop iterating after 120.47 μs\n",
      "Info in <Minuit2>: Minuit2Minimizer::Hesse Using max-calls 1000\n",
      "Info in <Minuit2>: MnHesse Done after 43.5 μs\n",
      "Info in <Minuit2>: Minuit2Minimizer::Hesse Hesse is valid - matrix is accurate\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf601_intminuit.png has been created\n"
     ]
    }
   ],
   "source": [
    "m.migrad()\n",
    "m.hesse()\n",
    "frac.Print()\n",
    "\n",
    "c = ROOT.TCanvas(\"rf601_intminuit\", \"rf601_intminuit\", 600, 600)\n",
    "ROOT.gPad.SetLeftMargin(0.15)\n",
    "frame.GetYaxis().SetTitleOffset(1.4)\n",
    "frame.Draw()\n",
    "\n",
    "c.SaveAs(\"rf601_intminuit.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9fb411de",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "068f972f",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:00.444729Z",
     "iopub.status.busy": "2026-05-19T20:33:00.444584Z",
     "iopub.status.idle": "2026-05-19T20:33:00.624422Z",
     "shell.execute_reply": "2026-05-19T20:33:00.623768Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222780615\" style=\"width: 600px; height: 600px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222780615() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(27129,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222780615', 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_1779222780615();\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
}
