{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "03c00e2b",
   "metadata": {},
   "source": [
    "# rf606_nllerrorhandling\n",
    "'LIKELIHOOD AND MINIMIZATION' RooFit tutorial macro #606\n",
    "\n",
    "Understanding and customizing error handling in likelihood evaluations\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:33 PM.</small></i>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "749a972d",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:14.601666Z",
     "iopub.status.busy": "2026-05-19T20:33:14.601521Z",
     "iopub.status.idle": "2026-05-19T20:33:15.569935Z",
     "shell.execute_reply": "2026-05-19T20:33:15.569224Z"
    }
   },
   "outputs": [],
   "source": [
    "import ROOT"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "740382b2",
   "metadata": {},
   "source": [
    "Create model and dataset\n",
    "----------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c772fb69",
   "metadata": {},
   "source": [
    "Observable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "0277721d",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:15.571971Z",
     "iopub.status.busy": "2026-05-19T20:33:15.571833Z",
     "iopub.status.idle": "2026-05-19T20:33:15.730990Z",
     "shell.execute_reply": "2026-05-19T20:33:15.730303Z"
    }
   },
   "outputs": [],
   "source": [
    "m = ROOT.RooRealVar(\"m\", \"m\", 5.20, 5.30)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "033b9f3d",
   "metadata": {},
   "source": [
    "Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "76762838",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:15.733355Z",
     "iopub.status.busy": "2026-05-19T20:33:15.733231Z",
     "iopub.status.idle": "2026-05-19T20:33:15.843328Z",
     "shell.execute_reply": "2026-05-19T20:33:15.842630Z"
    }
   },
   "outputs": [],
   "source": [
    "m0 = ROOT.RooRealVar(\"m0\", \"m0\", 5.291, 5.20, 5.30)\n",
    "k = ROOT.RooRealVar(\"k\", \"k\", -30, -50, -10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b44e1919",
   "metadata": {},
   "source": [
    "Pdf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2e731aac",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:15.845115Z",
     "iopub.status.busy": "2026-05-19T20:33:15.844992Z",
     "iopub.status.idle": "2026-05-19T20:33:15.967420Z",
     "shell.execute_reply": "2026-05-19T20:33:15.966870Z"
    }
   },
   "outputs": [],
   "source": [
    "argus = ROOT.RooArgusBG(\"argus\", \"argus\", m, m0, k)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1639b57",
   "metadata": {},
   "source": [
    "Sample 1000 events in m from argus"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "824ba0eb",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:15.969467Z",
     "iopub.status.busy": "2026-05-19T20:33:15.969340Z",
     "iopub.status.idle": "2026-05-19T20:33:16.116792Z",
     "shell.execute_reply": "2026-05-19T20:33:16.116142Z"
    }
   },
   "outputs": [],
   "source": [
    "data = argus.generate({m}, 1000)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6d90cd6e",
   "metadata": {},
   "source": [
    "Plot model and data\n",
    "--------------------------------------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d5d9691f",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:16.118560Z",
     "iopub.status.busy": "2026-05-19T20:33:16.118434Z",
     "iopub.status.idle": "2026-05-19T20:33:16.303335Z",
     "shell.execute_reply": "2026-05-19T20:33:16.302755Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooPlot object at 0x557d362e8960>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame1 = m.frame(Bins=40, Title=\"Argus model and data\")\n",
    "data.plotOn(frame1)\n",
    "argus.plotOn(frame1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb547589",
   "metadata": {},
   "source": [
    "Fit model to data\n",
    "---------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ce0b73ca",
   "metadata": {},
   "source": [
    "The ARGUS background shape has a sharp kinematic cutoff at m=m0\n",
    "and is prone to evaluation errors if the cutoff parameter m0\n",
    "is floated: when the pdf cutoff value is lower than that in data\n",
    "events with m>m0 will have zero probability"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "399f69e9",
   "metadata": {},
   "source": [
    "Perform unbinned ML fit. Print detailed error messages for up to\n",
    "10 events per likelihood evaluation. The default error handling strategy\n",
    "is to return a very high value of the likelihood to MINUIT if errors occur,\n",
    "which will force MINUIT to retreat from the problematic area"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "ee0c81de",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:16.305224Z",
     "iopub.status.busy": "2026-05-19T20:33:16.305100Z",
     "iopub.status.idle": "2026-05-19T20:33:16.487236Z",
     "shell.execute_reply": "2026-05-19T20:33:16.486643Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Fitting -- RooAbsPdf::fitTo(argus_over_argus_Int[m]) 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 761.554 μs\n",
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_argus_over_argus_Int[m]_argusData) Summation contains a RooNLLVar, using its error level\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",
      "RooAbsMinimizerFcn: Minimized function has error status.\n",
      "Returning maximum FCN so far (-2417.08) to force MIGRAD to back out of this region. Error log follows.\n",
      "Parameter values: \tk=-33.8075\tm0=5.29014\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ]\n",
      "     getLogVal() top-level p.d.f not greater than zero @ numerator=argus=0.387202, denominator=argus_Int[m]=0.0305662\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status.\n",
      "Returning maximum FCN so far (-2417.08) to force MIGRAD to back out of this region. Error log follows.\n",
      "Parameter values: \tk=-36.7074\tm0=5.2901\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ]\n",
      "     getLogVal() top-level p.d.f not greater than zero @ numerator=argus=0.370612, denominator=argus_Int[m]=0.0290505\n",
      "\n",
      "Minuit2Minimizer : Valid minimum - status = 0\n",
      "FVAL  = -2419.30692128725059\n",
      "Edm   = 2.90497824934036358e-06\n",
      "Nfcn  = 47\n",
      "k\t  = -35.3713\t +/-  3.51942\t(limited)\n",
      "m0\t  = 5.2904\t +/-  0.000261877\t(limited)\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 278.561 μs\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state: FCN =       -2417.48203 Edm =       1.594361239 NCalls =      7\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state  \n",
      "  Minimum value : -2417.48203\n",
      "  Edm           : 1.594361239\n",
      "  Internal parameters:\t[                0     0.9614110188]\t\n",
      "  Internal gradient  :\t[      6.430040774      66.49119995]\t\n",
      "  Internal covariance matrix:\n",
      "[[    0.059577243              0]\n",
      " [              0  0.00088534902]]]\n",
      "Info in <Minuit2>: VariableMetricBuilder Start iterating until Edm is < 0.001 with call limit = 1000\n",
      "Info in <Minuit2>: VariableMetricBuilder    0 - FCN =       -2417.48203 Edm =       1.594361239 NCalls =      7\n",
      "Info in <Minuit2>: VariableMetricBuilder    1 - FCN =      -2418.669621 Edm =      0.6597753353 NCalls =     15\n",
      "Info in <Minuit2>: VariableMetricBuilder    2 - FCN =      -2419.092375 Edm =      0.3262165039 NCalls =     23\n",
      "Info in <Minuit2>: VariableMetricBuilder    3 - FCN =      -2419.306527 Edm =    0.001182979896 NCalls =     29\n",
      "Info in <Minuit2>: VariableMetricBuilder    4 - FCN =      -2419.306921 Edm =   3.048074102e-06 NCalls =     35\n",
      "Info in <Minuit2>: MnHesse Done after 282.821 μs\n",
      "Info in <Minuit2>: VariableMetricBuilder After Hessian\n",
      "Info in <Minuit2>: VariableMetricBuilder    5 - FCN =      -2419.306921 Edm =   2.904978249e-06 NCalls =     47\n",
      "Info in <Minuit2>: VariableMetricBuilder Stop iterating after 1.0327 ms\n",
      "Info in <Minuit2>: Minuit2Minimizer::Hesse Using max-calls 1000\n",
      "Info in <Minuit2>: MnHesse Done after 195.051 μs\n",
      "Info in <Minuit2>: Minuit2Minimizer::Hesse Hesse is valid - matrix is accurate\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooFitResult object at 0x(nil)>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "argus.fitTo(data, PrintEvalErrors=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f885abf",
   "metadata": {},
   "source": [
    "Perform another fit. In self configuration only the number of errors per\n",
    "likelihood evaluation is shown, it is greater than zero. The\n",
    "EvalErrorWall(kFALSE) arguments disables the default error handling strategy\n",
    "and will cause the actual (problematic) value of the likelihood to be passed\n",
    "to MINUIT.\n",
    "\n",
    "NB: Use of self option is NOT recommended as default strategt as broken -log(L) values\n",
    "can often be lower than 'good' ones because offending events are removed.\n",
    "ROOT.This may effectively create a False minimum in problem areas. ROOT.This is clearly\n",
    "illustrated in the second plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "e3f2fb80",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:16.489021Z",
     "iopub.status.busy": "2026-05-19T20:33:16.488898Z",
     "iopub.status.idle": "2026-05-19T20:33:16.665269Z",
     "shell.execute_reply": "2026-05-19T20:33:16.664698Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<cppyy.gbl.RooFitResult object at 0x(nil)>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Fitting -- RooAbsPdf::fitTo(argus_over_argus_Int[m]) fixing normalization set for coefficient determination to observables in data\n",
      "[#1] INFO:Fitting -- Creation of NLL object took 151.6 μs\n",
      "[#1] INFO:Fitting -- RooAddition::defaultErrorLevel(nll_argus_over_argus_Int[m]_argusData) Summation contains a RooNLLVar, using its error level\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",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=5.28877\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 4 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=nan\tm0=nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-nan\tm0=-nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-nan\tm0=-nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-nan\tm0=-nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-nan\tm0=-nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-nan\tm0=-nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-nan\tm0=-nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-nan\tm0=-nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-nan\tm0=-nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-nan\tm0=-nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-nan\tm0=-nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=nan\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 2000 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=5.27133\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 166 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=5.28726\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 9 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=5.2898\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 1 errors\n",
      "\n",
      "Minuit2Minimizer : Invalid minimum - status = 3\n",
      "FVAL  = -2419.31\n",
      "Edm   = nan\n",
      "Nfcn  = 34\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=5.2898\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 1 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=5.28374\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 44 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=5.27133\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 166 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=5.28726\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 9 errors\n",
      "\n",
      "RooAbsMinimizerFcn: Minimized function has error status but is ignored.\n",
      "Parameter values: \tk=-35.3713\tm0=5.2898\n",
      "RooFit::Detail::RooNormalizedPdf::argus_over_argus_Int[m][ numerator=argus denominator=argus_Int[m] ] has 1 errors\n",
      "\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 12.8985 ms\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state: FCN =      -2419.306921 Edm =               nan NCalls =      9\n",
      "Info in <Minuit2>: MnSeedGenerator Initial state  \n",
      "  Minimum value : -2419.306921\n",
      "  Edm           : nan\n",
      "  Internal parameters:\t[    -0.2719048895      0.940796957]\t\n",
      "  Internal gradient  :\t[   -0.01318043729              nan]\t\n",
      "  Internal covariance matrix:\n",
      "[[    0.065014457              0]\n",
      " [              0              2]]]\n",
      "Info in <Minuit2>: VariableMetricBuilder Start iterating until Edm is < 0.001 with call limit = 1000\n",
      "Info in <Minuit2>: VariableMetricBuilder    0 - FCN =      -2419.306921 Edm =               nan NCalls =      9\n",
      "Warning in <Minuit2>: VariableMetricBuilder No improvement in line search\n",
      "Info in <Minuit2>: VariableMetricBuilder    1 - FCN =      -2419.306921 Edm =               nan NCalls =     20\n",
      "Warning in <Minuit2>: MnPosDef Matrix forced pos-def by adding to diagonal nan\n",
      "Info in <Minuit2>: MnHesse Done after 6.96664 ms\n",
      "Info in <Minuit2>: VariableMetricBuilder After Hessian\n",
      "Info in <Minuit2>: VariableMetricBuilder    2 - FCN =      -2419.306921 Edm =               nan NCalls =     34\n",
      "Info in <Minuit2>: VariableMetricBuilder Edm has been re-computed after Hesse; Edm nan is now within tolerance\n",
      "Info in <Minuit2>: VariableMetricBuilder Stop iterating after 44.3485 ms\n",
      "Warning in <Minuit2>: Minuit2Minimizer::Minimize Minimization did NOT converge, Edm is above max\n",
      "Info in <Minuit2>: Minuit2Minimizer::Hesse Using max-calls 1000\n",
      "Warning in <Minuit2>: MnPosDef Matrix forced pos-def by adding to diagonal nan\n",
      "Info in <Minuit2>: MnHesse Done after 766.595 μs\n",
      "Info in <Minuit2>: Minuit2Minimizer::Hesse Hesse is valid - matrix is full but made positive defined\n"
     ]
    }
   ],
   "source": [
    "m0.setError(0.1)\n",
    "argus.fitTo(data, PrintEvalErrors=0, EvalErrorWall=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9d700874",
   "metadata": {},
   "source": [
    "Plot likelihood as function of m0\n",
    "------------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e31e70b6",
   "metadata": {},
   "source": [
    "Construct likelihood function of model and data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "132ad8d1",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:16.667113Z",
     "iopub.status.busy": "2026-05-19T20:33:16.666988Z",
     "iopub.status.idle": "2026-05-19T20:33:16.786758Z",
     "shell.execute_reply": "2026-05-19T20:33:16.786194Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[#1] INFO:Fitting -- RooAbsPdf::fitTo(argus_over_argus_Int[m]) fixing normalization set for coefficient determination to observables in data\n",
      "[#1] INFO:Fitting -- Creation of NLL object took 174.471 μs\n"
     ]
    }
   ],
   "source": [
    "nll = argus.createNLL(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8508f41",
   "metadata": {},
   "source": [
    "Plot likelihood in m0 in range that includes problematic values\n",
    "In self configuration no messages are printed for likelihood evaluation errors,\n",
    "but if an likelihood value evaluates with error, corresponding value\n",
    "on the curve will be set to the value given in EvalErrorValue()."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "04943612",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:16.789175Z",
     "iopub.status.busy": "2026-05-19T20:33:16.789022Z",
     "iopub.status.idle": "2026-05-19T20:33:17.069296Z",
     "shell.execute_reply": "2026-05-19T20:33:17.068710Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Info in <TCanvas::Print>: png file rf606_nllerrorhandling.png has been created\n"
     ]
    }
   ],
   "source": [
    "frame2 = m0.frame(Range=(5.288, 5.293), Title=\"-log(L) scan vs m0, regions masked\")\n",
    "nll.plotOn(frame2, ShiftToZero=True, PrintEvalErrors=-1, EvalErrorValue=(nll.getVal() + 10), LineColor=\"r\")\n",
    "frame2.SetMaximum(15)\n",
    "frame2.SetMinimum(0)\n",
    "\n",
    "c = ROOT.TCanvas(\"rf606_nllerrorhandling\", \"rf606_nllerrorhandling\", 1200, 400)\n",
    "c.Divide(2)\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.4)\n",
    "frame2.Draw()\n",
    "\n",
    "c.SaveAs(\"rf606_nllerrorhandling.png\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "113ad760",
   "metadata": {},
   "source": [
    "Draw all canvases "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "ccdbd445",
   "metadata": {
    "collapsed": false,
    "execution": {
     "iopub.execute_input": "2026-05-19T20:33:17.071006Z",
     "iopub.status.busy": "2026-05-19T20:33:17.070855Z",
     "iopub.status.idle": "2026-05-19T20:33:17.252600Z",
     "shell.execute_reply": "2026-05-19T20:33:17.252070Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "\n",
       "<div id=\"root_plot_1779222797243\" style=\"width: 1200px; height: 400px; position: relative\">\n",
       "</div>\n",
       "\n",
       "</div>\n",
       "<script>\n",
       "   function process_root_plot_1779222797243() {\n",
       "      function execCode(Core) {\n",
       "         Core.settings.HandleKeys = false;\n",
       "         \n",
       "Core.unzipJSON(35236,'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').then(json => {\n",
       "   const obj = Core.parse(json);\n",
       "   Core.draw('root_plot_1779222797243', 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_1779222797243();\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
}
