{ "cells": [ { "cell_type": "markdown", "id": "negative-concord", "metadata": {}, "source": [ "# Cost functions\n", "\n", "We give an in-depth guide on how to use the built-in cost functions.\n", "\n", "The iminuit package comes with a couple of common cost functions that you can import from `iminuit.cost` for convenience. Of course, you can write your own cost functions to use with iminuit, but most of the cost function is always the same. What really varies is the statistical model which predicts the probability density as a function of the parameter values. This you still have to provide yourself and the iminuit package will not include machinery to build statistical models (that is out of scope).\n", "\n", "Using the built-in cost functions is not only convenient, they also have some extra features.\n", "\n", "* Support of fitted weighted histograms.\n", "* Technical tricks improve numerical stability.\n", "* Optional numba acceleration (if numba is installed).\n", "* Cost functions can be added to fit data sets with shared parameters.\n", "* Temporarily mask data.\n", "\n", "We demonstrate each cost function on a standard example from high-energy physics, the fit of a peak over some smooth background (here taken to be constant)." ] }, { "cell_type": "code", "execution_count": 76, "id": "lucky-canvas", "metadata": {}, "outputs": [], "source": [ "from iminuit import cost, Minuit\n", "# faster than scipy.stats functions\n", "from numba_stats import truncnorm, truncexpon, norm, expon \n", "import numpy as np\n", "from matplotlib import pyplot as plt\n", "from scipy.stats import multivariate_normal as mvnorm\n", "# accurate numerical derivatives\n", "from jacobi import jacobi" ] }, { "cell_type": "markdown", "id": "absent-missile", "metadata": {}, "source": [ "We generate our data by sampling from a Gaussian peak and from exponential background in the range 0 to 2. The original data is then binned. One can fit the original or the binned data." ] }, { "cell_type": "code", "execution_count": 77, "id": "destroyed-fusion", "metadata": {}, "outputs": [ { "data": { "image/png": "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QabuU2UdGmP085//XNdff738fv8xy7ph/d188816/PHHtXnzZlVXVx+zrFv2hVM2oPj9fp133nnatGlTZl46ndamTZuy/od9uLq6uqzykvT0009nys+bN08VFRVZZaLRqJ5//vmjvmY+jaWN0uDZ19/97nf15JNP6vzzzz/u++zZs0fvvvuuKisrc1LvEzXW9h3OcRzt3LkzU3c3rcOTad8jjzyieDyuz372s8d9n4laf2NxvO9gLrYJN3jooYf0+c9/Xg899FDWJeJH09vbq7fffntSrMORvPzyy5m6T5V1uHXrVr311lsn9J+EiVx/xhjdfPPNevTRR/XMM89o3rx5x32Oa/aFOTvd1oUefvhhEwgEzPr1681rr71mvvjFL5qSkhLT0dFhjDHm+uuvN9/4xjcy5f/4xz8ar9drfvCDH5jXX3/d3HHHHcbn85mdO3dmytx5552mpKTEPPbYY+Z//ud/zBVXXGHmzZtn+vv7x719xoy+jXfeeafx+/1mw4YNpr29PfPo6ekxxhjT09NjvvrVr5rm5mbT0tJi/vCHP5gPf/jD5oMf/KAZGBhwffu+/e1vm6eeesq8/fbbZseOHeaaa64xwWDQvPrqq5kyblqHo23fkI9//OPm6quvHjbfbeuvp6fHvPTSS+all14ykswPf/hD89JLL5l33nnHGGPMN77xDXP99ddnyv/lL38xhYWF5tZbbzWvv/66uffee41t2+bJJ5/MlDneZzbeRtvGX/7yl8br9Zp777036zt46NChTJmvfOUrZsuWLaalpcX88Y9/NIsWLTKzZs0yXV1drm/f3XffbX7729+aN9980+zcudOsXLnSeDwe84c//CFTxk3rcLTtG/LZz37WLFiwYMTXdNP6u+mmm0wkEjFbtmzJ2t76+voyZdy6L5zSAcUYY370ox+ZOXPmGL/fby644ALz3HPPZZZ94hOfMMuXL88q/+tf/9p86EMfMn6/35xxxhnmv/7rv7KWp9Np861vfcuUl5ebQCBgLrnkErNr167xaMpRjaaNc+fONZKGPe644w5jjDF9fX1m8eLFZvbs2cbn85m5c+eaL3zhCxP242/M6Nq3atWqTNny8nKzdOlS8+KLL2a9ntvW4Wi30TfeeMNIMr///e+HvZbb1t/QJadHPobatHz5cvOJT3xi2HPOPfdc4/f7zSmnnGLuv//+Ya97rM9svI22jZ/4xCeOWd6YwUurKysrjd/vN+973/vM1Vdfbd56663xbdh7Rtu+733ve+b973+/CQaDprS01CxcuNA888wzw17XLetwLNvooUOHTEFBgfn3f//3EV/TTetvpLZJyvpeuXVfaL3XAAAAANeYsuegAACAyYuAAgAAXIeAAgAAXIeAAgAAXIeAAgAAXIeAAgAAXIeAAgAAXIeAAgAAXIeAAgAAXIeAAgAAXIeAAgAAXIeAAgAAXOf/A0qbx+orJ1afAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xr = (0, 2) # xrange\n", "\n", "rng = np.random.default_rng(1)\n", "\n", "xdata = rng.normal(1, 0.1, size=1000)\n", "ydata = rng.exponential(size=len(xdata))\n", "xmix = np.append(xdata, ydata)\n", "xmix = xmix[(xr[0] < xmix) & (xmix < xr[1])]\n", "\n", "n, xe = np.histogram(xmix, bins=20, range=xr)\n", "cx = 0.5 * (xe[1:] + xe[:-1])\n", "dx = np.diff(xe)\n", "\n", "plt.errorbar(cx, n, n ** 0.5, fmt=\"ok\")\n", "plt.plot(xmix, np.zeros_like(xmix), \"|\", alpha=0.1);" ] }, { "cell_type": "markdown", "id": "5c50cab3", "metadata": {}, "source": [ "We also generate some 2D data to demonstrate multivariate fits. In this case, a Gaussian along axis 1 and independently an exponential along axis 2. In this case, the distributions are not restricted to some range in x and y." ] }, { "cell_type": "code", "execution_count": 78, "id": "b62cbb46", "metadata": {}, "outputs": [ { "data": { "image/png": "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8mPU1rnw0avbwx4TTuBrPaIhqtfHRHjjfw3qMRoh/zcrRBz/8hZR+PHHHwUAsX37dr/n77jjDlFQUBDyNffdd5+AHH7wi1/84he/+MWvLv515MiRaEKHqMS9++buu+/G7bffrn5fWVmJfv364fjx47Db7fG+vGY4HA7k5ubixIkTSE5O7uzb6TB833zfPQHfN993T1BVVYW+ffsiLS0tbteIKijJyMhAQkICTp486ff8yZMnkZ2dHfI1JpMJJpMp6Hm73d6jPkxFcnIy33cPwvfds/B99yw99X3rdPFbMo/qzEajEaNHj8bGjc27dXq9XmzcuBGFhYXtfnNERETUc0S9fHP77bdj8eLFGDNmDAoKCvDkk0/C6XSq3ThEREREsYg6KLnmmmtQVlaGe++9F6WlpRg5ciQ2bNiAXr16RfR6k8mE++67L+SSTnfG98333RPwffN99wR83/F735IQ8eztISIiIopMBwx4ICIiImodgxIiIiLSBAYlREREpAkMSoiIiEgT2hyUPP300+jfvz/MZjPGjh2LXbt2tXj866+/jry8PJjNZuTn5+P999/3+7kQAvfeey9ycnJgsVgwbdo0HD58uK232e6ied8vvPACLrroIqSmpiI1NRXTpk0LOn7JkiWQJMnva8aMGfF+G1GL5n2vXLky6D2ZzWa/Y7rj5z158uSg9y1JEmbNmqUe0xU+761bt2LOnDno3bs3JEnC22+/3eprNm/ejFGjRsFkMmHQoEFYuXJl0DHR/n9GR4v2fb/11lu45JJLkJmZieTkZBQWFuKDDz7wO+aPf/xj0Oedl5cXx3cRvWjf9+bNm0P+d15aWup3XHf7vEP92ZUkCUOHDlWP0frnvWzZMlxwwQVISkpCVlYWrrjiChw6dKjV13XE399tCkpee+013H777bjvvvuwd+9ejBgxAtOnT8epU6dCHr99+3Zcd911uPHGG/HFF1/giiuuwBVXXIEDBw6ox/zpT3/C//7v/+LZZ5/FZ599BpvNhunTp6OuruXNtjpStO978+bNuO666/DJJ59gx44dyM3NxaWXXooff/zR77gZM2agpKRE/XrllVc64u1ELNr3DcgTD33f0/fff+/38+74eb/11lt+7/nAgQNISEjAvHnz/I7T+uftdDoxYsQIPP300xEdf/ToUcyaNQsXX3wx9u3bh9tuuw033XST31/Qsfw31NGifd9bt27FJZdcgvfffx979uzBxRdfjDlz5uCLL77wO27o0KF+n/e//vWveNx+zKJ934pDhw75va+srCz1Z93x837qqaf83u+JEyeQlpYW9Odby5/3li1bsHTpUuzcuRMfffQRGhoacOmll8LpdIZ9TYf9/d2WjXMKCgrE0qVL1e89Ho/o3bu3WLZsWcjjr776ajFr1iy/58aOHSt+8YtfCCGE8Hq9Ijs7WzzyyCPqzysrK4XJZBKvvPJKW261XUX7vgM1NjaKpKQk8dJLL6nPLV68WFx++eXtfavtKtr3vWLFCmG328Oer6d83k888YRISkoSNTU16nNd4fP2BUCsW7euxWPuvPNOMXToUL/nrrnmGjF9+nT1+7b+Xna0SN53KOedd564//771e/vu+8+MWLEiPa7sTiL5H1/8sknAoA4c+ZM2GN6wue9bt06IUmSOHbsmPpcV/u8T506JQCILVu2hD2mo/7+jjlTUl9fjz179mDatGnqczqdDtOmTcOOHTtCvmbHjh1+xwPA9OnT1eOPHj2K0tJSv2PsdjvGjh0b9pwdLZb3HcjlcqGhoSFoU6PNmzcjKysLQ4YMwS9/+UuUl5e36723Razvu6amBv369UNubi4uv/xyfP311+rPesrn/eKLL+Laa6+FzWbze17Ln3csWvvz3R6/l12B1+tFdXV10J/vw4cPo3fv3jj77LOxYMECHD9+vJPusH2NHDkSOTk5uOSSS7Bt2zb1+Z7yeb/44ouYNm0a+vXr5/d8V/q8q6qqAKDFjfY66u/vmIOS06dPw+PxBE1y7dWrV9CaoqK0tLTF45XHaM7Z0WJ534F+97vfoXfv3n4f3owZM/Dyyy9j48aNePjhh7FlyxYUFRXB4/G06/3HKpb3PWTIEPztb3/DO++8g1WrVsHr9WL8+PH44YcfAPSMz3vXrl04cOAAbrrpJr/ntf55xyLcn2+Hw4Ha2tp2+bPTFTz66KOoqanB1VdfrT43duxYrFy5Ehs2bMAzzzyDo0eP4qKLLkJ1dXUn3mnb5OTk4Nlnn8Wbb76JN998E7m5uZg8eTL27t0LoH3+v1LrfvrpJ6xfvz7oz3dX+ry9Xi9uu+02TJgwAcOGDQt7XEf9/R31mHlqm+XLl+PVV1/F5s2b/Yo+r732WvXX+fn5GD58OAYOHIjNmzdj6tSpnXGrbVZYWOi3UeP48eNx7rnn4rnnnsMDDzzQiXfWcV588UXk5+ejoKDA7/nu+HkTsGbNGtx///145513/GorioqK1F8PHz4cY8eORb9+/bB27VrceOONnXGrbTZkyBAMGTJE/X78+PE4cuQInnjiCfz973/vxDvrOC+99BJSUlJwxRVX+D3flT7vpUuX4sCBA5qpeYk5U5KRkYGEhAScPHnS7/mTJ08iOzs75Guys7NbPF55jOacHS2W96149NFHsXz5cnz44YcYPnx4i8eeffbZyMjIQHFxcZvvuT205X0rDAYDzj//fPU9dffP2+l04tVXX43o/4S09nnHItyf7+TkZFgslnb5b0jLXn31Vdx0001Yu3ZtUJo7UEpKCgYPHtylP+9QCgoK1PfU3T9vIQT+9re/4frrr4fRaGzxWK1+3rfeeiveffddfPLJJ+jTp0+Lx3bU398xByVGoxGjR4/Gxo0b1ee8Xi82btzo969jX4WFhX7HA8BHH32kHj9gwABkZ2f7HeNwOPDZZ5+FPWdHi+V9A3JV8gMPPIANGzZgzJgxrV7nhx9+QHl5OXJyctrlvtsq1vfty+PxYP/+/ep76s6fNyC3z7ndbixcuLDV62jt845Fa3++2+O/Ia165ZVXcMMNN+CVV17xa/0Op6amBkeOHOnSn3co+/btU99Td/68AbmDpbi4OKJ/dGjt8xZC4NZbb8W6deuwadMmDBgwoNXXdNjf31GV6AZ49dVXhclkEitXrhT//ve/xS233CJSUlJEaWmpEEKI66+/Xtx1113q8du2bRN6vV48+uij4ptvvhH33XefMBgMYv/+/eoxy5cvFykpKeKdd94RX331lbj88svFgAEDRG1tbVtutV1F+76XL18ujEajeOONN0RJSYn6VV1dLYQQorq6Wvz2t78VO3bsEEePHhUff/yxGDVqlDjnnHNEXV1dp7zHUKJ93/fff7/44IMPxJEjR8SePXvEtddeK8xms/j666/VY7rj56248MILxTXXXBP0fFf5vKurq8UXX3whvvjiCwFAPP744+KLL74Q33//vRBCiLvuuktcf/316vHfffedsFqt4o477hDffPONePrpp0VCQoLYsGGDekxrv5daEO37Xr16tdDr9eLpp5/2+/NdWVmpHvOb3/xGbN68WRw9elRs27ZNTJs2TWRkZIhTp051+PsLJ9r3/cQTT4i3335bHD58WOzfv1/86le/EjqdTnz88cfqMd3x81YsXLhQjB07NuQ5tf55//KXvxR2u11s3rzZ779Zl8ulHtNZf3+3KSgRQog///nPom/fvsJoNIqCggKxc+dO9WeTJk0Sixcv9jt+7dq1YvDgwcJoNIqhQ4eK9957z+/nXq9X/OEPfxC9evUSJpNJTJ06VRw6dKitt9nuonnf/fr1EwCCvu677z4hhBAul0tceumlIjMzUxgMBtGvXz9x8803a+oPriKa933bbbepx/bq1UvMnDlT7N271+983fHzFkKIgwcPCgDiww8/DDpXV/m8lZbPwC/lvS5evFhMmjQp6DUjR44URqNRnH322WLFihVB523p91ILon3fkyZNavF4IeTW6JycHGE0GsVZZ50lrrnmGlFcXNyxb6wV0b7vhx9+WAwcOFCYzWaRlpYmJk+eLDZt2hR03u72eQsht7paLBbx/PPPhzyn1j/vUO8XgN+f1876+1tqukEiIiKiTsW9b4iIiEgTGJQQERGRJjAoISIiIk1gUEJERESawKCEiIiINIFBCREREWkCgxIiIiLSBAYlREREpAkMSoiIiEgTGJQQERGRJjAoISIiIk1gUEJERESa8P8BQ4gHyiAcCmAAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n2, _, ye = np.histogram2d(xdata, ydata, bins=(20, 5), range=(xr, (0, np.max(ydata))))\n", "\n", "plt.pcolormesh(xe, ye, n2.T)\n", "plt.scatter(xdata, ydata, marker=\".\", color=\"w\", s=1);" ] }, { "cell_type": "markdown", "id": "interesting-cursor", "metadata": {}, "source": [ "## Maximum-likelihood fits\n", "\n", "Maximum-likelihood fits are the state-of-the-art when it comes to fitting models to data. They can be applied to unbinned and binned data (histograms).\n", "\n", "* Unbinned fits are the easiest to use, because no data binning is needed. They become slow when the sample size is large.\n", "* Binned fits require you to appropriately bin the data. The binning has to be fine enough to retain all essential information. Binned fits are much faster when the sample size is large.\n", "\n", "### Unbinned fit\n", "\n", "Unbinned fits are ideal when the data samples are not too large or very high dimensional. There is no need to worry about the appropriate binning of the data. Unbinned fits are inefficient when the samples are very large and can become numerically unstable, too. Binned fits are a better choice then.\n", "\n", "The cost function for an unbinned maximum-likelihood fit is really simple, it is the sum of the logarithm of the pdf evaluated at each sample point (times -1 to turn maximization into minimization). You can easily write this yourself, but a naive implementation will suffer from instabilities when the pdf becomes locally zero. Our implementation mitigates the instabilities to some extent.\n", "\n", "To perform the unbinned fit you need to provide the pdf of the model, which must be vectorized (a Numpy ufunc). The pdf must be normalized, which means that the integral over the sample value range must be a constant for any combination of model parameters.\n", "\n", "The model pdf in this case is a linear combination of the normal and the exponential pdfs. The parameters are $z$ (the weight), $\\mu$ and $\\sigma$ of the normal distribution and $\\tau$ of the exponential. The cost function detects the parameter names.\n", "\n", "It is important to put appropriate limits on the parameters, so that the problem does not become mathematically undefined.\n", "* $0 < z < 1$,\n", "* $\\sigma > 0$,\n", "* $\\tau > 0$.\n", "\n", "In addition, it can be beneficial to use $0 < \\mu < 2$, but it is not required. We use `truncnorm` and `truncexpon`, which are normalized inside the data range (0, 2)." ] }, { "cell_type": "code", "execution_count": 79, "id": "uniform-drama", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 768.1 Nfcn = 111
EDM = 3.76e-06 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 z 0.537 0.015 0 1
1 mu 0.996 0.004 0 2
2 sigma 0.1006 0.0035 0
3 tau 1.05 0.08 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
z mu sigma tau
z 0.000231 -0.003e-3 (-0.052) 0.019e-3 (0.353) -0.24e-3 (-0.206)
mu -0.003e-3 (-0.052) 1.5e-05 -0.001e-3 (-0.069) -0.015e-3 (-0.053)
sigma 0.019e-3 (0.353) -0.001e-3 (-0.069) 1.25e-05 -0.043e-3 (-0.163)
tau -0.24e-3 (-0.206) -0.015e-3 (-0.053) -0.043e-3 (-0.163) 0.00568
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:33.776003\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 768.1 │ Nfcn = 111 │\n", "│ EDM = 3.76e-06 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ z │ 0.537 │ 0.015 │ │ │ 0 │ 1 │ │\n", "│ 1 │ mu │ 0.996 │ 0.004 │ │ │ 0 │ 2 │ │\n", "│ 2 │ sigma │ 0.1006 │ 0.0035 │ │ │ 0 │ │ │\n", "│ 3 │ tau │ 1.05 │ 0.08 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬─────────────────────────────────────────┐\n", "│ │ z mu sigma tau │\n", "├───────┼─────────────────────────────────────────┤\n", "│ z │ 0.000231 -0.003e-3 0.019e-3 -0.24e-3 │\n", "│ mu │ -0.003e-3 1.5e-05 -0.001e-3 -0.015e-3 │\n", "│ sigma │ 0.019e-3 -0.001e-3 1.25e-05 -0.043e-3 │\n", "│ tau │ -0.24e-3 -0.015e-3 -0.043e-3 0.00568 │\n", "└───────┴─────────────────────────────────────────┘" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def pdf(x, z, mu, sigma, tau):\n", " return (z * truncnorm.pdf(x, *xr, mu, sigma) + \n", " (1 - z) * truncexpon.pdf(x, *xr, 0.0, tau))\n", "\n", "c = cost.UnbinnedNLL(xmix, pdf)\n", "\n", "m = Minuit(c, z=0.4, mu=1, sigma=0.2, tau=1)\n", "m.limits[\"z\"] = (0, 1)\n", "m.limits[\"mu\"] = (0, 2)\n", "m.limits[\"sigma\", \"tau\"] = (0, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "fa50a81d", "metadata": {}, "source": [ "If the gradient of the model is available, it can be passed to the cost function to enable the computation of its gradient, which Minuit then uses to potentially improve the minimization. We use a numerically computed gradient here obtained from the `jacobi` library. This is for demonstration purpose only and generally not recommended, since `jacobi` computes the gradient much more accurately than what is required for Minuit." ] }, { "cell_type": "code", "execution_count": 80, "id": "8081f7f5", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 768.1 Nfcn = 87, Ngrad = 5
EDM = 3.31e-05 (Goal: 0.0002) time = 0.2 sec
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 z 0.537 0.015 0 1
1 mu 0.996 0.004 0 2
2 sigma 0.1006 0.0035 0
3 tau 1.05 0.08 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
z mu sigma tau
z 0.000231 -0.003e-3 (-0.052) 0.019e-3 (0.353) -0.24e-3 (-0.206)
mu -0.003e-3 (-0.052) 1.5e-05 -0.001e-3 (-0.069) -0.015e-3 (-0.053)
sigma 0.019e-3 (0.353) -0.001e-3 (-0.069) 1.25e-05 -0.043e-3 (-0.163)
tau -0.24e-3 (-0.206) -0.015e-3 (-0.053) -0.043e-3 (-0.163) 0.00569
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:34.123443\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 768.1 │ Nfcn = 87, Ngrad = 5 │\n", "│ EDM = 3.31e-05 (Goal: 0.0002) │ time = 0.2 sec │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ z │ 0.537 │ 0.015 │ │ │ 0 │ 1 │ │\n", "│ 1 │ mu │ 0.996 │ 0.004 │ │ │ 0 │ 2 │ │\n", "│ 2 │ sigma │ 0.1006 │ 0.0035 │ │ │ 0 │ │ │\n", "│ 3 │ tau │ 1.05 │ 0.08 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬─────────────────────────────────────────┐\n", "│ │ z mu sigma tau │\n", "├───────┼─────────────────────────────────────────┤\n", "│ z │ 0.000231 -0.003e-3 0.019e-3 -0.24e-3 │\n", "│ mu │ -0.003e-3 1.5e-05 -0.001e-3 -0.015e-3 │\n", "│ sigma │ 0.019e-3 -0.001e-3 1.25e-05 -0.043e-3 │\n", "│ tau │ -0.24e-3 -0.015e-3 -0.043e-3 0.00569 │\n", "└───────┴─────────────────────────────────────────┘" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def grad(x, *par):\n", " return jacobi(lambda par: pdf(x, *par), par)[0].T\n", "\n", "c = cost.UnbinnedNLL(xmix, pdf, grad=grad)\n", "\n", "m = Minuit(c, z=0.4, mu=1, sigma=0.2, tau=1)\n", "m.limits[\"z\"] = (0, 1)\n", "m.limits[\"mu\"] = (0, 2)\n", "m.limits[\"sigma\", \"tau\"] = (0, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "380b6ca6", "metadata": {}, "source": [ "We can also fit a multivariate model to multivariate data. We pass model as a logpdf this time, which works well because the pdfs factorize." ] }, { "cell_type": "code", "execution_count": 81, "id": "9da33a94", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 147.6 Nfcn = 134
EDM = 2.1e-06 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 mu 0.9946 0.0031
1 sigma 0.0986 0.0022 0
2 tau 0.972 0.031 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mu sigma tau
mu 9.73e-06 0e-6 -0e-6
sigma 0e-6 4.86e-06 -0e-6
tau -0e-6 -0e-6 0.000944
" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 147.6 │ Nfcn = 134 │\n", "│ EDM = 2.1e-06 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ mu │ 0.9946 │ 0.0031 │ │ │ │ │ │\n", "│ 1 │ sigma │ 0.0986 │ 0.0022 │ │ │ 0 │ │ │\n", "│ 2 │ tau │ 0.972 │ 0.031 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬────────────────────────────┐\n", "│ │ mu sigma tau │\n", "├───────┼────────────────────────────┤\n", "│ mu │ 9.73e-06 0e-6 -0e-6 │\n", "│ sigma │ 0e-6 4.86e-06 -0e-6 │\n", "│ tau │ -0e-6 -0e-6 0.000944 │\n", "└───────┴────────────────────────────┘" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def logpdf(xy, mu, sigma, tau):\n", " x, y = xy\n", " return (norm.logpdf(x, mu, sigma) + expon.logpdf(y, 0, tau))\n", "\n", "c = cost.UnbinnedNLL((xdata, ydata), logpdf, log=True)\n", "m = Minuit(c, mu=1, sigma=2, tau=2)\n", "m.limits[\"sigma\", \"tau\"] = (0, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "c272cd2b", "metadata": {}, "source": [ "And we can also use a gradient as before." ] }, { "cell_type": "code", "execution_count": 84, "id": "220d17c6", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 147.6 Nfcn = 81, Ngrad = 9
EDM = 3.73e-05 (Goal: 0.0002) time = 0.1 sec
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 mu 0.9946 0.0031
1 sigma 0.0986 0.0022 0
2 tau 0.972 0.031 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mu sigma tau
mu 9.73e-06 0e-6 -0e-6
sigma 0e-6 4.87e-06 -0e-6
tau -0e-6 -0e-6 0.000944
" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 147.6 │ Nfcn = 81, Ngrad = 9 │\n", "│ EDM = 3.73e-05 (Goal: 0.0002) │ time = 0.1 sec │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ mu │ 0.9946 │ 0.0031 │ │ │ │ │ │\n", "│ 1 │ sigma │ 0.0986 │ 0.0022 │ │ │ 0 │ │ │\n", "│ 2 │ tau │ 0.972 │ 0.031 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬────────────────────────────┐\n", "│ │ mu sigma tau │\n", "├───────┼────────────────────────────┤\n", "│ mu │ 9.73e-06 0e-6 -0e-6 │\n", "│ sigma │ 0e-6 4.87e-06 -0e-6 │\n", "│ tau │ -0e-6 -0e-6 0.000944 │\n", "└───────┴────────────────────────────┘" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def grad(xy, *par):\n", " return jacobi(lambda p: logpdf(xy, *p), par)[0].T\n", "\n", "c = cost.UnbinnedNLL((xdata, ydata), logpdf, log=True, grad=grad)\n", "m = Minuit(c, mu=1, sigma=2, tau=2)\n", "m.limits[\"sigma\", \"tau\"] = (0, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "introductory-watershed", "metadata": {}, "source": [ "### Extended unbinned fit\n", "\n", "An important variant of the unbinned ML fit is described by [Roger Barlow, Nucl.Instrum.Meth.A 297 (1990) 496-506](https://inspirehep.net/literature/297773). Use this if both the shape and the integral of the density are of interest. In practice, this is often the case, for example, if you want to estimate a cross-section or yield.\n", "\n", "The model in this case has to return the integral of the density and the density itself (which must be vectorized). The parameters in this case are those already discussed in the previous section and in addition $s$ (integral of the signal density), $b$ (integral of the uniform density). The additional limits are:\n", "\n", "* $s > 0$,\n", "* $b > 0$.\n", "\n", "Compared to the previous case, we have one more parameter to fit." ] }, { "cell_type": "code", "execution_count": null, "id": "expanded-japanese", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = -2.388e+04 Nfcn = 362
EDM = 2.8e-07 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 s 1.01e3 0.04e3 0
1 b 872 35 0
2 mu 0.996 0.004
3 sigma 0.1006 0.0035 0
4 tau 1.05 0.08 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
s b mu sigma tau
s 1.36e+03 -0.4e3 (-0.272) -5.740e-3 (-0.040) 35.547e-3 (0.272) -0.440 (-0.158)
b -0.4e3 (-0.272) 1.22e+03 5.739e-3 (0.042) -35.543e-3 (-0.288) 0.440 (0.167)
mu -5.740e-3 (-0.040) 5.739e-3 (0.042) 1.5e-05 -0.001e-3 (-0.068) -0.015e-3 (-0.053)
sigma 35.547e-3 (0.272) -35.543e-3 (-0.288) -0.001e-3 (-0.068) 1.25e-05 -0.043e-3 (-0.161)
tau -0.440 (-0.158) 0.440 (0.167) -0.015e-3 (-0.053) -0.043e-3 (-0.161) 0.00568
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:07.144075\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = -2.388e+04 │ Nfcn = 362 │\n", "│ EDM = 2.8e-07 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ s │ 1.01e3 │ 0.04e3 │ │ │ 0 │ │ │\n", "│ 1 │ b │ 872 │ 35 │ │ │ 0 │ │ │\n", "│ 2 │ mu │ 0.996 │ 0.004 │ │ │ │ │ │\n", "│ 3 │ sigma │ 0.1006 │ 0.0035 │ │ │ 0 │ │ │\n", "│ 4 │ tau │ 1.05 │ 0.08 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬────────────────────────────────────────────────────────┐\n", "│ │ s b mu sigma tau │\n", "├───────┼────────────────────────────────────────────────────────┤\n", "│ s │ 1.36e+03 -0.4e3 -5.740e-3 35.547e-3 -0.440 │\n", "│ b │ -0.4e3 1.22e+03 5.739e-3 -35.543e-3 0.440 │\n", "│ mu │ -5.740e-3 5.739e-3 1.5e-05 -0.001e-3 -0.015e-3 │\n", "│ sigma │ 35.547e-3 -35.543e-3 -0.001e-3 1.25e-05 -0.043e-3 │\n", "│ tau │ -0.440 0.440 -0.015e-3 -0.043e-3 0.00568 │\n", "└───────┴────────────────────────────────────────────────────────┘" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def density(x, s, b, mu, sigma, tau):\n", " return s + b, (\n", " s * truncnorm.pdf(x, *xr, mu, sigma) + b * truncexpon.pdf(x, *xr, 0, tau)\n", " )\n", "\n", "\n", "c = cost.ExtendedUnbinnedNLL(xmix, density)\n", "\n", "m = Minuit(c, s=300, b=1500, mu=0, sigma=0.2, tau=2)\n", "m.limits[\"s\", \"b\", \"sigma\", \"tau\"] = (0, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "understood-monte", "metadata": {}, "source": [ "The fitted values and the uncertainty estimates for the shape parameters are identical to the previous fit." ] }, { "cell_type": "code", "execution_count": null, "id": "governmental-hardware", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABMvklEQVR4nO3deXhTZb4H8G8aaEpL2lK627LoYBEExK2CVmCobA4DU6rCqIMOgjpFNmcG8arAOAouV0EvisxF0avAaK0wMohC2aoUlG3YpFIsdKErpU2b0rRNzv0DE5o2y0l7knOSfD/Pk0fOOW9Ofm+Tml/fVSUIggAiIiIiBQmQOwAiIiKitpigEBERkeIwQSEiIiLFYYJCREREisMEhYiIiBSHCQoREREpDhMUIiIiUhwmKERERKQ4XeQOoCNMJhMuXLgArVYLlUoldzhEREQkgiAIqKurQ3x8PAICHLeReGWCcuHCBSQmJsodBhEREXVAUVEREhISHJbxygRFq9UCuFLB0NBQmaMhIiIiMXQ6HRITEy3f4454ZYJi7tYJDQ1lgkJERORlxAzP4CBZIiIiUhwmKERERKQ4TFCIiIhIcZigEBERkeIwQSEiIiLFYYJCREREisMEhYiIiBSHCQoREREpDhMUIiIiUhwmKERERKQ4LiUoy5Ytw2233QatVovo6GhMnjwZeXl5VmUaGxuRkZGBnj17onv37pgyZQrKy8utyhQWFuLee+9FcHAwoqOj8Ze//AUtLS2drw0RERH5BJcSlD179iAjIwP79+/H9u3b0dzcjDFjxkCv11vKzJ8/H19++SU+++wz7NmzBxcuXEBaWprlutFoxL333oumpibs27cPH374IdatW4cXXnhBuloRERGRV1MJgiB09MmVlZWIjo7Gnj17cPfdd6O2thZRUVFYv3490tPTAQCnT5/GDTfcgNzcXNxxxx346quv8Jvf/AYXLlxATEwMAGD16tVYuHAhKisrERgY6PR1dTodwsLCUFtby80CiYiIvIQr39+dGoNSW1sLAIiIiAAAHDp0CM3NzUhNTbWU6d+/P3r16oXc3FwAQG5uLgYNGmRJTgBg7Nix0Ol0OHnyZGfCISIfpNfroVKpoFKprFprici3denoE00mE+bNm4c777wTN954IwCgrKwMgYGBCA8PtyobExODsrIyS5nWyYn5uvmaLQaD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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m.visualize()" ] }, { "cell_type": "markdown", "id": "262567e0", "metadata": {}, "source": [ "Once again, we fit 2D data, using the log-density mode." ] }, { "cell_type": "code", "execution_count": null, "id": "68ba4583", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = -1.167e+04 Nfcn = 328
EDM = 4.42e-06 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 n 1000 32 0
1 mu 0.9946 0.0031
2 sigma 0.0986 0.0022 0
3 tau 0.972 0.031 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
n mu sigma tau
n 1e+03 0e-6 0e-6 -0
mu 0e-6 9.73e-06 0e-6 (0.001) -0e-6
sigma 0e-6 0e-6 (0.001) 4.86e-06 -0e-6
tau -0 -0e-6 -0e-6 0.000944
" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = -1.167e+04 │ Nfcn = 328 │\n", "│ EDM = 4.42e-06 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ n │ 1000 │ 32 │ │ │ 0 │ │ │\n", "│ 1 │ mu │ 0.9946 │ 0.0031 │ │ │ │ │ │\n", "│ 2 │ sigma │ 0.0986 │ 0.0022 │ │ │ 0 │ │ │\n", "│ 3 │ tau │ 0.972 │ 0.031 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬─────────────────────────────────────┐\n", "│ │ n mu sigma tau │\n", "├───────┼─────────────────────────────────────┤\n", "│ n │ 1e+03 0e-6 0e-6 -0 │\n", "│ mu │ 0e-6 9.73e-06 0e-6 -0e-6 │\n", "│ sigma │ 0e-6 0e-6 4.86e-06 -0e-6 │\n", "│ tau │ -0 -0e-6 -0e-6 0.000944 │\n", "└───────┴─────────────────────────────────────┘" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def logdensity(xy, n, mu, sigma, tau):\n", " x, y = xy\n", " return n, np.log(n) + norm.logpdf(x, mu, sigma) + expon.logpdf(y, 0, tau)\n", "\n", "c = cost.ExtendedUnbinnedNLL((xdata, ydata), logdensity, log=True)\n", "m = Minuit(c, n=1, mu=1, sigma=2, tau=2)\n", "m.limits[\"n\", \"sigma\", \"tau\"] = (0, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "controlling-celebration", "metadata": {}, "source": [ "### Binned Fit\n", "\n", "Binned fits are computationally more efficient and numerically more stable when samples are large. The caveat is that one has to choose an appropriate binning. The binning should be fine enough so that the essential information in the original is retained. Using large bins does not introduce a bias, but the parameters have a larger-than-minimal variance.\n", "\n", "In this case, 50 bins are fine enough to retain all information. Using many bins is safe, since the maximum-likelihood method correctly takes Poisson statistics into account, which works even if bins have zero entries. Using more bins than necessary just increases the computational cost.\n", "\n", "Instead of a pdf, you need to provide a cdf for a binned fit (which must be vectorized). " ] }, { "cell_type": "code", "execution_count": null, "id": "robust-groove", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 15.03 (χ²/ndof = 0.9) Nfcn = 270
EDM = 5.28e-06 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 z 0.540 0.015 0 1
1 mu 0.995 0.004
2 sigma 0.100 0.004 0.01
3 tau 1.05 0.08 0.01
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
z mu sigma tau
z 0.000235 -0.004e-3 (-0.067) 0.020e-3 (0.354) -0.24e-3 (-0.209)
mu -0.004e-3 (-0.067) 1.63e-05 -0.001e-3 (-0.090) -0.015e-3 (-0.050)
sigma 0.020e-3 (0.354) -0.001e-3 (-0.090) 1.43e-05 -0.045e-3 (-0.160)
tau -0.24e-3 (-0.209) -0.015e-3 (-0.050) -0.045e-3 (-0.160) 0.00564
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:07.893934\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 15.03 (χ²/ndof = 0.9) │ Nfcn = 270 │\n", "│ EDM = 5.28e-06 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ z │ 0.540 │ 0.015 │ │ │ 0 │ 1 │ │\n", "│ 1 │ mu │ 0.995 │ 0.004 │ │ │ │ │ │\n", "│ 2 │ sigma │ 0.100 │ 0.004 │ │ │ 0.01 │ │ │\n", "│ 3 │ tau │ 1.05 │ 0.08 │ │ │ 0.01 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬─────────────────────────────────────────┐\n", "│ │ z mu sigma tau │\n", "├───────┼─────────────────────────────────────────┤\n", "│ z │ 0.000235 -0.004e-3 0.020e-3 -0.24e-3 │\n", "│ mu │ -0.004e-3 1.63e-05 -0.001e-3 -0.015e-3 │\n", "│ sigma │ 0.020e-3 -0.001e-3 1.43e-05 -0.045e-3 │\n", "│ tau │ -0.24e-3 -0.015e-3 -0.045e-3 0.00564 │\n", "└───────┴─────────────────────────────────────────┘" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def cdf(xe, z, mu, sigma, tau):\n", " return (z * truncnorm.cdf(xe, *xr, mu, sigma) + \n", " (1-z) * truncexpon.cdf(xe, *xr, 0, tau))\n", "\n", "c = cost.BinnedNLL(n, xe, cdf)\n", "m = Minuit(c, z=0.4, mu=0, sigma=0.2, tau=2)\n", "m.limits[\"z\"] = (0, 1)\n", "m.limits[\"sigma\", \"tau\"] = (0.01, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "2dc873af-e615-498a-be72-3e66720c53e1", "metadata": {}, "source": [ "iminuit also shows the chi-square goodness-of-fit test statistic when the data are binned. It is calculated for free in the binned case.\n", "\n", "Sometimes the cdf is expensive to calculate. In this case, you can approximate it via the cumulated sum of \"bin-width times pdf evaluated at center\". This approxmiation may lead to a bias. Using an accurate cdf avoids this bias.\n", "\n", "Here is the same example fitted with an approximate cdf." ] }, { "cell_type": "code", "execution_count": null, "id": "838d5fcc-e2b2-4eb6-9831-205ca2753810", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 15.65 (χ²/ndof = 1.0) Nfcn = 189
EDM = 1.07e-05 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 z 0.540 0.015 0 1
1 mu 0.995 0.004
2 sigma 0.104 0.004 0.01
3 tau 1.05 0.08 0.01
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
z mu sigma tau
z 0.000235 -0.004e-3 (-0.067) 0.020e-3 (0.353) -0.24e-3 (-0.208)
mu -0.004e-3 (-0.067) 1.63e-05 -0.001e-3 (-0.090) -0.015e-3 (-0.050)
sigma 0.020e-3 (0.353) -0.001e-3 (-0.090) 1.31e-05 -0.043e-3 (-0.159)
tau -0.24e-3 (-0.208) -0.015e-3 (-0.050) -0.043e-3 (-0.159) 0.00568
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:08.282459\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 15.65 (χ²/ndof = 1.0) │ Nfcn = 189 │\n", "│ EDM = 1.07e-05 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ z │ 0.540 │ 0.015 │ │ │ 0 │ 1 │ │\n", "│ 1 │ mu │ 0.995 │ 0.004 │ │ │ │ │ │\n", "│ 2 │ sigma │ 0.104 │ 0.004 │ │ │ 0.01 │ │ │\n", "│ 3 │ tau │ 1.05 │ 0.08 │ │ │ 0.01 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬─────────────────────────────────────────┐\n", "│ │ z mu sigma tau │\n", "├───────┼─────────────────────────────────────────┤\n", "│ z │ 0.000235 -0.004e-3 0.020e-3 -0.24e-3 │\n", "│ mu │ -0.004e-3 1.63e-05 -0.001e-3 -0.015e-3 │\n", "│ sigma │ 0.020e-3 -0.001e-3 1.31e-05 -0.043e-3 │\n", "│ tau │ -0.24e-3 -0.015e-3 -0.043e-3 0.00568 │\n", "└───────┴─────────────────────────────────────────┘" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def pdf(x, z, mu, sigma, tau):\n", " return z * truncnorm.pdf(x, *xr, mu, sigma) + (1 - z) * truncexpon.pdf(\n", " x, *xr, 0, tau\n", " )\n", "\n", "\n", "def approximate_cdf(xe, z, mu, sigma, tau):\n", " dx = np.diff(xe)\n", " cx = xe[:-1] + 0.5 * dx\n", " p = pdf(cx, z, mu, sigma, tau)\n", " return np.append([0], np.cumsum(p * dx))\n", "\n", "\n", "c = cost.BinnedNLL(n, xe, approximate_cdf)\n", "m = Minuit(c, z=0.4, mu=0, sigma=0.2, tau=2)\n", "m.limits[\"z\"] = (0, 1)\n", "m.limits[\"sigma\", \"tau\"] = (0.01, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "comparable-special", "metadata": {}, "source": [ "The fitted values and the uncertainty estimates for $\\mu$ and $\\sigma$ are not identical to the unbinned fit, but very close. For practical purposes, the results are equivalent. This shows that the binning is fine enough to retain the essential information in the original data.\n", "\n", "Since this approximation is useful in practice, the `BinnedNLL` computes it automatically if you pass the keyword `use_pdf=\"approximate\"`." ] }, { "cell_type": "code", "execution_count": null, "id": "c26df624", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 15.65 (χ²/ndof = 1.0) Nfcn = 189
EDM = 1.06e-05 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 z 0.540 0.015 0 1
1 mu 0.995 0.004
2 sigma 0.104 0.004 0.01
3 tau 1.05 0.08 0.01
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
z mu sigma tau
z 0.000235 -0.004e-3 (-0.067) 0.020e-3 (0.353) -0.24e-3 (-0.208)
mu -0.004e-3 (-0.067) 1.63e-05 -0.001e-3 (-0.090) -0.015e-3 (-0.050)
sigma 0.020e-3 (0.353) -0.001e-3 (-0.090) 1.31e-05 -0.043e-3 (-0.159)
tau -0.24e-3 (-0.208) -0.015e-3 (-0.050) -0.043e-3 (-0.159) 0.00568
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:08.713342\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 15.65 (χ²/ndof = 1.0) │ Nfcn = 189 │\n", "│ EDM = 1.06e-05 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ z │ 0.540 │ 0.015 │ │ │ 0 │ 1 │ │\n", "│ 1 │ mu │ 0.995 │ 0.004 │ │ │ │ │ │\n", "│ 2 │ sigma │ 0.104 │ 0.004 │ │ │ 0.01 │ │ │\n", "│ 3 │ tau │ 1.05 │ 0.08 │ │ │ 0.01 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬─────────────────────────────────────────┐\n", "│ │ z mu sigma tau │\n", "├───────┼─────────────────────────────────────────┤\n", "│ z │ 0.000235 -0.004e-3 0.020e-3 -0.24e-3 │\n", "│ mu │ -0.004e-3 1.63e-05 -0.001e-3 -0.015e-3 │\n", "│ sigma │ 0.020e-3 -0.001e-3 1.31e-05 -0.043e-3 │\n", "│ tau │ -0.24e-3 -0.015e-3 -0.043e-3 0.00568 │\n", "└───────┴─────────────────────────────────────────┘" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = cost.BinnedNLL(n, xe, pdf, use_pdf=\"approximate\")\n", "m = Minuit(c, z=0.4, mu=0, sigma=0.2, tau=2)\n", "m.limits[\"z\"] = (0, 1)\n", "m.limits[\"sigma\", \"tau\"] = (0.01, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "275568f0", "metadata": {}, "source": [ "Another option is to compute the cdf numerically with `use_pdf=\"numerical\"`, but this tends to be expensive and is only supported for 1D histograms." ] }, { "cell_type": "code", "execution_count": null, "id": "5a6fe4cc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 15.03 (χ²/ndof = 0.9) Nfcn = 270
EDM = 5.28e-06 (Goal: 0.0002) time = 2.0 sec
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 z 0.540 0.015 0 1
1 mu 0.995 0.004
2 sigma 0.100 0.004 0.01
3 tau 1.05 0.08 0.01
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
z mu sigma tau
z 0.000235 -0.004e-3 (-0.067) 0.020e-3 (0.354) -0.24e-3 (-0.209)
mu -0.004e-3 (-0.067) 1.63e-05 -0.001e-3 (-0.090) -0.015e-3 (-0.050)
sigma 0.020e-3 (0.354) -0.001e-3 (-0.090) 1.43e-05 -0.045e-3 (-0.160)
tau -0.24e-3 (-0.209) -0.015e-3 (-0.050) -0.045e-3 (-0.160) 0.00564
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:10.955181\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 15.03 (χ²/ndof = 0.9) │ Nfcn = 270 │\n", "│ EDM = 5.28e-06 (Goal: 0.0002) │ time = 2.0 sec │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ z │ 0.540 │ 0.015 │ │ │ 0 │ 1 │ │\n", "│ 1 │ mu │ 0.995 │ 0.004 │ │ │ │ │ │\n", "│ 2 │ sigma │ 0.100 │ 0.004 │ │ │ 0.01 │ │ │\n", "│ 3 │ tau │ 1.05 │ 0.08 │ │ │ 0.01 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬─────────────────────────────────────────┐\n", "│ │ z mu sigma tau │\n", "├───────┼─────────────────────────────────────────┤\n", "│ z │ 0.000235 -0.004e-3 0.020e-3 -0.24e-3 │\n", "│ mu │ -0.004e-3 1.63e-05 -0.001e-3 -0.015e-3 │\n", "│ sigma │ 0.020e-3 -0.001e-3 1.43e-05 -0.045e-3 │\n", "│ tau │ -0.24e-3 -0.015e-3 -0.045e-3 0.00564 │\n", "└───────┴─────────────────────────────────────────┘" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = cost.BinnedNLL(n, xe, pdf, use_pdf=\"numerical\")\n", "m = Minuit(c, z=0.4, mu=0, sigma=0.2, tau=2)\n", "m.limits[\"z\"] = (0, 1)\n", "m.limits[\"sigma\", \"tau\"] = (0.01, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "c7a06b88", "metadata": {}, "source": [ "Fitting a multidimensional histogram is equally easy. Since the pdfs in this example factorise, the cdf of the 2D model is the product of the cdfs along each axis." ] }, { "cell_type": "code", "execution_count": null, "id": "fad40fc9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 25.22 (χ²/ndof = 0.3) Nfcn = 206
EDM = 9.93e-06 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 mu 0.9932 0.0032
1 sigma 0.0984 0.0024 0
2 tau 0.940 0.033 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mu sigma tau
mu 1.05e-05 0e-6 -0
sigma 0e-6 5.68e-06 0e-6
tau -0 0e-6 0.0011
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:11.174033\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 25.22 (χ²/ndof = 0.3) │ Nfcn = 206 │\n", "│ EDM = 9.93e-06 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ mu │ 0.9932 │ 0.0032 │ │ │ │ │ │\n", "│ 1 │ sigma │ 0.0984 │ 0.0024 │ │ │ 0 │ │ │\n", "│ 2 │ tau │ 0.940 │ 0.033 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬────────────────────────────┐\n", "│ │ mu sigma tau │\n", "├───────┼────────────────────────────┤\n", "│ mu │ 1.05e-05 0e-6 -0 │\n", "│ sigma │ 0e-6 5.68e-06 0e-6 │\n", "│ tau │ -0 0e-6 0.0011 │\n", "└───────┴────────────────────────────┘" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def cdf(xe_ye, mu, sigma, tau):\n", " xe, ye = xe_ye\n", " return norm.cdf(xe, mu, sigma) * expon.cdf(ye, 0, tau)\n", "\n", "c = cost.BinnedNLL(n2, (xe, ye), cdf)\n", "m = Minuit(c, mu=0.1, sigma=0.2, tau=2)\n", "m.limits[\"sigma\", \"tau\"] = (0, None)\n", "m.migrad()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a6c8ae4e", "metadata": {}, "source": [ "The automatically provided visualization for multidimensional data set is often not very pretty, but still helps to judge whether the fit is reasonable. There is no obvious way to draw higher dimensional data with error bars in comparison to a model, and so the automatic visualization shows all data bins as a single sequence. You can override the default visualization by calling `Minuit.visualize` with your own plotting function, or by assigning a plot function to the cost function `BinnedNLL` (monkey patching), or by deriving your own class from `BinnedNLL`." ] }, { "cell_type": "markdown", "id": "decent-treat", "metadata": {}, "source": [ "### Extended binned maximum-likelihood fit\n", "\n", "As in the unbinned case, the binned extended maximum-likelihood fit should be used when also the amplitudes of the pdfs are of interest.\n", "\n", "Instead of a density, you need to provide the integrated density in this case (which must be vectorized). There is no need to separately return the total integral of the density, like in the unbinned case. The parameters are the same as in the unbinned extended fit." ] }, { "cell_type": "code", "execution_count": null, "id": "suitable-fetish", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 15.03 (χ²/ndof = 1.0) Nfcn = 437
EDM = 9.97e-07 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 s 1.02e3 0.04e3 0
1 b 867 35 0
2 mu 0.995 0.004
3 sigma 0.100 0.004 0
4 tau 1.05 0.08 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
s b mu sigma tau
s 1.38e+03 -0.4e3 (-0.280) -7.764e-3 (-0.052) 38.616e-3 (0.275) -0.452 (-0.162)
b -0.4e3 (-0.280) 1.23e+03 7.764e-3 (0.055) -38.615e-3 (-0.291) 0.452 (0.172)
mu -7.764e-3 (-0.052) 7.764e-3 (0.055) 1.63e-05 -0.001e-3 (-0.090) -0.015e-3 (-0.050)
sigma 38.616e-3 (0.275) -38.615e-3 (-0.291) -0.001e-3 (-0.090) 1.43e-05 -0.045e-3 (-0.160)
tau -0.452 (-0.162) 0.452 (0.172) -0.015e-3 (-0.050) -0.045e-3 (-0.160) 0.00564
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:11.443465\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 15.03 (χ²/ndof = 1.0) │ Nfcn = 437 │\n", "│ EDM = 9.97e-07 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ s │ 1.02e3 │ 0.04e3 │ │ │ 0 │ │ │\n", "│ 1 │ b │ 867 │ 35 │ │ │ 0 │ │ │\n", "│ 2 │ mu │ 0.995 │ 0.004 │ │ │ │ │ │\n", "│ 3 │ sigma │ 0.100 │ 0.004 │ │ │ 0 │ │ │\n", "│ 4 │ tau │ 1.05 │ 0.08 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬────────────────────────────────────────────────────────┐\n", "│ │ s b mu sigma tau │\n", "├───────┼────────────────────────────────────────────────────────┤\n", "│ s │ 1.38e+03 -0.4e3 -7.764e-3 38.616e-3 -0.452 │\n", "│ b │ -0.4e3 1.23e+03 7.764e-3 -38.615e-3 0.452 │\n", "│ mu │ -7.764e-3 7.764e-3 1.63e-05 -0.001e-3 -0.015e-3 │\n", "│ sigma │ 38.616e-3 -38.615e-3 -0.001e-3 1.43e-05 -0.045e-3 │\n", "│ tau │ -0.452 0.452 -0.015e-3 -0.045e-3 0.00564 │\n", "└───────┴────────────────────────────────────────────────────────┘" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def integral(xe, s, b, mu, sigma, tau):\n", " return (s * truncnorm.cdf(xe, *xr, mu, sigma) +\n", " b * truncexpon.cdf(xe, *xr, 0, tau))\n", "\n", "c = cost.ExtendedBinnedNLL(n, xe, integral)\n", "m = Minuit(c, s=300, b=1500, mu=0, sigma=0.2, tau=2)\n", "m.limits[\"s\", \"b\", \"sigma\", \"tau\"] = (0, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "noticed-wireless", "metadata": {}, "source": [ "Again, we can also fit multivariate data." ] }, { "cell_type": "code", "execution_count": null, "id": "aeb53009", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 24.64 (χ²/ndof = 0.3) Nfcn = 182
EDM = 5.24e-08 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 n 1.000e3 0.032e3 0
1 mu 0.9932 0.0032
2 sigma 0.0984 0.0024 0
3 tau 0.943 0.034 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
n mu sigma tau
n 1e+03 0 -0e-6 0.0029
mu 0 1.05e-05 0e-6 -0
sigma -0e-6 0e-6 5.68e-06 0e-6
tau 0.0029 -0 0e-6 0.00113
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:11.678019\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 24.64 (χ²/ndof = 0.3) │ Nfcn = 182 │\n", "│ EDM = 5.24e-08 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ n │ 1.000e3 │ 0.032e3 │ │ │ 0 │ │ │\n", "│ 1 │ mu │ 0.9932 │ 0.0032 │ │ │ │ │ │\n", "│ 2 │ sigma │ 0.0984 │ 0.0024 │ │ │ 0 │ │ │\n", "│ 3 │ tau │ 0.943 │ 0.034 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬─────────────────────────────────────┐\n", "│ │ n mu sigma tau │\n", "├───────┼─────────────────────────────────────┤\n", "│ n │ 1e+03 0 -0e-6 0.0029 │\n", "│ mu │ 0 1.05e-05 0e-6 -0 │\n", "│ sigma │ -0e-6 0e-6 5.68e-06 0e-6 │\n", "│ tau │ 0.0029 -0 0e-6 0.00113 │\n", "└───────┴─────────────────────────────────────┘" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def integral(xe_ye, n, mu, sigma, tau):\n", " xe, ye = xe_ye\n", " return n * norm.cdf(xe, mu, sigma) * expon.cdf(ye, 0, tau)\n", "\n", "c = cost.ExtendedBinnedNLL(n2, (xe, ye), integral)\n", "m = Minuit(c, n=1500, mu=0.1, sigma=0.2, tau=2)\n", "m.limits[\"n\", \"sigma\", \"tau\"] = (0, None)\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "infectious-trash", "metadata": {}, "source": [ "### Temporary masking\n", "\n", "In complicated binned fits with peak and background, it is sometimes useful to fit in several stages. One typically starts by masking the signal region, to fit only the background region.\n", "\n", "The cost functions have a mask attribute to that end. We demonstrate the use of the mask with an extended binned fit." ] }, { "cell_type": "code", "execution_count": null, "id": "ruled-society", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 6.623 (χ²/ndof = 0.8) Nfcn = 55
EDM = 3.75e-07 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 s 0.0 0.1 0 yes
1 b 870 40 0
2 mu 1.00 0.01 yes
3 sigma 0.200 0.002 0 yes
4 tau 1.02 0.08 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
s b mu sigma tau
s 0 0 0 0 0.000
b 0 1.71e+03 0 0 0.950 (0.289)
mu 0 0 0 0 0.000
sigma 0 0 0 0 0.000
tau 0.000 0.950 (0.289) 0.000 0.000 0.00632
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:11.961326\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 6.623 (χ²/ndof = 0.8) │ Nfcn = 55 │\n", "│ EDM = 3.75e-07 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ s │ 0.0 │ 0.1 │ │ │ 0 │ │ yes │\n", "│ 1 │ b │ 870 │ 40 │ │ │ 0 │ │ │\n", "│ 2 │ mu │ 1.00 │ 0.01 │ │ │ │ │ yes │\n", "│ 3 │ sigma │ 0.200 │ 0.002 │ │ │ 0 │ │ yes │\n", "│ 4 │ tau │ 1.02 │ 0.08 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬──────────────────────────────────────────────┐\n", "│ │ s b mu sigma tau │\n", "├───────┼──────────────────────────────────────────────┤\n", "│ s │ 0 0 0 0 0.000 │\n", "│ b │ 0 1.71e+03 0 0 0.950 │\n", "│ mu │ 0 0 0 0 0.000 │\n", "│ sigma │ 0 0 0 0 0.000 │\n", "│ tau │ 0.000 0.950 0.000 0.000 0.00632 │\n", "└───────┴──────────────────────────────────────────────┘" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def integral(xe, s, b, mu, sigma, tau):\n", " return (s * truncnorm.cdf(xe, *xr, mu, sigma) +\n", " b * truncexpon.cdf(xe, *xr, 0, tau))\n", "\n", "c = cost.ExtendedBinnedNLL(n, xe, integral)\n", "\n", "# we set the signal amplitude to zero and fix all signal parameters\n", "m = Minuit(c, s=0, b=1500, mu=1, sigma=0.2, tau=2)\n", "\n", "m.limits[\"s\", \"b\", \"sigma\", \"tau\"] = (0, None)\n", "m.fixed[\"s\", \"mu\", \"sigma\"] = True\n", "\n", "# we temporarily mask out the signal\n", "c.mask = (cx < 0.5) | (1.5 < cx)\n", "\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "9424b64d", "metadata": {}, "source": [ "We plot the intermediate result. Points which have been masked out are shown with open markers." ] }, { "cell_type": "code", "execution_count": null, "id": "happy-diabetes", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABXt0lEQVR4nO3dfVxUZd4/8M8wMMPjgKgwICgkpZKg25NiaraRmuJLFtmttjVrS+8M3YxqXbq7K20T13TT9XZz27asvVM3bbRfrFlm4kNOmqYbqJkaKAIDPjEzDM8z1++PcY4MTzIwMAf8vF+v8zqcc65z5ro4g+frda4HhRBCgIiIiEhGvDydASIiIqKmGKAQERGR7DBAISIiItlhgEJERESywwCFiIiIZIcBChEREckOAxQiIiKSHQYoREREJDvens5AR9hsNpSUlCAoKAgKhcLT2SEiIqJ2EELAbDYjMjISXl5t15H0yAClpKQE0dHRns4GERERdUBRURGioqLaTNMjA5SgoCAA9gJqNBoP54aIiIjaw2QyITo6WnqOt6VHBiiO1zoajYYBChERUQ/TnuYZbCRLREREssMAhYiIiGSHAQoRERHJTo9sg0JERORpQgg0NDTAarV6OiuyoVQq4e3t7ZYhQBigEBERuaiurg6lpaWoqqrydFZkx9/fHxEREVCpVJ26DgMUIiIiF9hsNhQUFECpVCIyMhIqlYqDhsJeo1RXV4cLFy6goKAAN99883UHY2sLAxQiIiIX1NXVwWazITo6Gv7+/p7Ojqz4+fnBx8cHZ8+eRV1dHXx9fTt8LTaSJSIi6oDO1A70Zu76vfC3S0RERLLDAIWIiIhkhwEKERHRDWLChAlYsGBBu9IWFhZCoVDg6NGjXZqn1rCRLBER0Q1Cp9PBx8enXWmjo6NRWlqKfv36AQByc3Nx77334sqVKwgJCenCXNoxQCEiIrpBhIaGtjutUqmEVqvtwty0ja94iIiIbhCNX/HExMRgyZIl+O1vf4ugoCAMHDgQb7/9tpS28SuewsJC3HvvvQCAPn36QKFQ4LHHHuvSvDJAIaIeyWKxQKFQQKFQwGKxeDo7RACAclMNfjCYpO1TZWaUVFQDAGrqrcgvNqKytgEAcMFci+Ml19KeuVCJ81fsI9PWW23ILzbCVFMPALhUWYv8YqOUtuCiBeWmmk7nd8WKFbjjjjtw5MgRPP3005g7dy5OnjzZLF10dDQ+/vhjAMDJkydRWlqKVatWdfrz28IAhYiIyE0+PHAOj737rbQ9f8MRvL3nJwCAwViDlNX7kHfeHmjovjuPh//+jZT2+U3/weqdpwEAVyx1SFm9D4cKLwMA/p1XirS/7pfSvrQ1Dx8eONfp/E6ZMgVPP/004uLisHDhQvTr1w+7du1qlk6pVEqvh8LCwqDVahEcHNzpz28L26AQERG5ySOjBuKBhGvtNlY//DMEqO2PWm2wL3Lmj0VMvwAAQNptURh3c38p7fJfjoDa215v0CdAhZz5YzGwr32k2qkJEbhtYB8p7R9TExCgUnY6v4mJidLPCoUCWq0W5eXlnb6uOzBAISIicpMwjS/CNNeGd785PEj62ddHieEDrtU69A9So3+QWtoe3D9Q+tlH6eWUtm+gGn0Dr6WNvRrkdFbTHj0KhQI2m80t1+4svuIhIiKi63LMTmy1Wrvl8xigEBER0XUNGjQICoUCOTk5uHDhAiorK7v08xigEBER0XUNGDAAixYtwh/+8AeEh4dj3rx5Xfp5CiGE6NJP6AImkwnBwcEwGo3QaDSezg4ReYDFYkFgoP2dfWVlJQIC3PNOnuh6ampqUFBQgNjYWPj6+l7/hBtMW78fV57frEEhIiIi2WGAQkRERLLDAIWIiIhkhwEKERERyQ4DFCLqkRqPxbBnz55uG5uBiLoHAxQi6nF0Op3TEN1TpkxBXFwcdDqdB3NFRO7EAIWIehSdTof09HQkJiZCr9fDbDZDr9cjISEB6enpDFKIegmOg0JEPYbVakVcXBwSEhKwdetWeHld+z+WzWZDamoq8vPzcerUKSiVnZ9IjaglHAelbRwHhYhuOHv37kVhYSFefPFFp+AEALy8vJCVlYWCggLs3bvXQzkkkjchBObMmYPQ0FAoFAqEhIRgwYIFns5WizoVoCxduhQKhcKpcDU1NcjIyEDfvn0RGBiIGTNmoKyszOm8c+fOYerUqfD390dYWBheeOEFNDQ0dCYrRHQDKC0tBQAMHz68xeOO/Y50RORs+/btWLduHXJyclBaWooff/wRr732mnQ8JiYGK1eu9FwGG+lwgPLtt9/ib3/7m1NDNQB49tln8emnn2LTpk3YvXs3SkpKkJaWJh23Wq2YOnUq6urqsH//frz//vtYt24dXn755Y6XgohuCBEREQCA/Pz8Fo879jvSEZGzM2fOICIiAmPGjIFWq0VYWBiCgoI8na2WiQ4wm83i5ptvFjt27BD33HOPeOaZZ4QQQlRUVAgfHx+xadMmKe2JEycEAKHX64UQQmzbtk14eXkJg8EgpXnrrbeERqMRtbW17fp8o9EoAAij0diR7BNRD9XQ0CBiYmLEtGnThNVqdTpmtVrFtGnTRGxsrGhoaPBQDulGUF1dLY4fPy6qq6s9nRWXzJo1SwCQlkGDBjk9w++55x6n4x0MEdr8/bjy/O5QDUpGRgamTp2K5ORkp/2HDx9GfX290/6hQ4di4MCB0Ov1ACC1tg8PD5fSTJo0CSaTCceOHWvx82pra2EymZwWIrrxKJVKrFixAjk5OUhNTXXqxZOamoqcnBwsX76cDWSJWrBq1SosXrwYUVFRKC0txbfffut0XKfTISoqCosXL0ZpaanHX5V6u3rCxo0b8d133zUrGAAYDAaoVCqEhIQ47Q8PD4fBYJDSNA5OHMcdx1qSnZ2NRYsWuZpVIuqF0tLSsHnzZmRmZmLMmDHS/tjYWGzevNnplTJRt6qrAi7+2L2f2e8WQOXfrqTBwcEICgqCUqmEVqttdjw0NBRKpRJBQUEtHu9uLgUoRUVFeOaZZ7Bjx45u7VqVlZWFzMxMadtkMiE6OrrbPp+I5CUtLQ3JyckIDg4GAGzbtg0TJ05kzQl51sUfgbfv6d7PnLMbiBzZvZ/ZTVwKUA4fPozy8nLcdttt0j6r1Yo9e/bgf//3f/H555+jrq4OFRUVTrUoZWVlUjSm1Wpx8OBBp+s6evm0FrGp1Wqo1WpXskpEvVzjYGT8+PEMTsjz+t1iDxi6+zN7KZcClPvuuw95eXlO+x5//HEMHToUCxcuRHR0NHx8fLBz507MmDEDAHDy5EmcO3cOSUlJAICkpCS8/vrrKC8vR1hYGABgx44d0Gg0iI+Pd0eZiIiIup/Kv8fXZqhUKtnMa+VSgBIUFNRs/IGAgAD07dtX2v/EE08gMzMToaGh0Gg0mD9/PpKSkjB69GgAwMSJExEfH4+ZM2di2bJlMBgMeOmll5CRkcFaEiIiIg+KiYnBnj178NBDD0GtVqNfv34ey4vbR5J98803kZKSghkzZmD8+PHQarVOc2MolUrk5ORAqVQiKSkJv/nNb/Doo49i8eLF7s4KERERuWDx4sUoLCzE4MGD0b9/f4/mhXPxEFGPZLFYEBgYCACorKxEQECAh3NENwrOxdM2zsVDREREvRYDFCIiIpIdBihEREQkOwxQiKhLWSwWKBQKKBQKWCwWT2eHiHoIBihEREQkOwxQiIiIOqAHdoLtFu76vbg8WSARkRwEBATwAUEe4ePjAwCoqqqCn5+fh3MjP1VVVQCu/Z46igEKERGRC5RKJUJCQlBeXg4A8Pf3h0Kh8HCuPE8IgaqqKpSXlyMkJKTT82MxQCEiInKRY3JbR5BC14SEhLQ6+a8rGKAQERG5SKFQICIiAmFhYaivr/d0dmTDx8fHbTOLM0AhIiLqIKVS6bYHMjljLx4iIiKSHQYoREREJDsMUIiIiEh2GKAQUZeyWq3Sz3v27HHaJiJqDQMUIuoyOp0OiYmJ0vaUKVMQFxcHnU7nwVwRUU/AAIWIuoROp0N6ejoSExOh1+thNpuh1+uRkJCA9PR0BilE1CaF6IFjRZtMJgQHB8NoNEKj0Xg6O0TUhNVqRVxcHBISErB161Z4eV37v5DNZkNqairy8/Nx6tQpdtEkuoG48vxmDQoRud3evXtRWFiIF1980Sk4AQAvLy9kZWWhoKAAe/fu9VAOiUjuGKAQkduVlpYCAIYPH97iccd+RzoioqYYoBCR20VERAAA8vPzWzzu2O9IR0TUFAMUInK7cePGISYmBkuWLIHNZnM6ZrPZkJ2djdjYWIwbN85DOSQiuWOAQkRup1QqsWLFCuTk5CA1NdWpF09qaipycnKwfPlyNpAlolZxskAi6hJpaWnYvHkzMjMzMWbMGGl/bGwsNm/ejLS0NA/mjojkjt2MiahLOf5eAWDbtm2YOHEia06IblDsZkxEstE4GBk/fjyDEyJqFwYoREREJDsMUIiIiEh2GKAQERGR7DBAISIiItlxKUB56623kJiYCI1GA41Gg6SkJHz22WfS8QkTJkChUDgtTz31lNM1zp07h6lTp8Lf3x9hYWF44YUX0NDQ4J7SEBERUa/g0jgoUVFRWLp0KW6++WYIIfD+++9j+vTpOHLkCG699VYAwOzZs7F48WLpHH9/f+lnq9WKqVOnQqvVYv/+/SgtLcWjjz4KHx8fLFmyxE1FIiIiop7OpQBl2rRpTtuvv/463nrrLXzzzTdSgOLv7w+tVtvi+V988QWOHz+OL7/8EuHh4Rg5ciRee+01LFy4EK+++ipUKlUHi0FERES9SYfboFitVmzcuBEWiwVJSUnS/g8//BD9+vXD8OHDkZWVhaqqKumYXq9HQkICwsPDpX2TJk2CyWTCsWPHWv2s2tpamEwmp4WIiIh6L5eHus/Ly0NSUhJqamoQGBiILVu2ID4+HgDw61//GoMGDUJkZCS+//57LFy4ECdPnoROpwMAGAwGp+AEgLRtMBha/czs7GwsWrTI1awSERFRD+VygDJkyBAcPXoURqMRmzdvxqxZs7B7927Ex8djzpw5UrqEhARERETgvvvuw5kzZzB48OAOZzIrKwuZmZnStslkQnR0dIevR0TdJyAgAD1wRg0i8jCXX/GoVCrExcXh9ttvR3Z2NkaMGIFVq1a1mHbUqFEAgNOnTwMAtFotysrKnNI4tltrtwIAarVa6jnkWIiIiKj36vQ4KDabDbW1tS0eO3r0KAAgIiICAJCUlIS8vDyUl5dLaXbs2AGNRiO9JiIiIiJy6RVPVlYWHnjgAQwcOBBmsxnr169Hbm4uPv/8c5w5cwbr16/HlClT0LdvX3z//fd49tlnMX78eCQmJgIAJk6ciPj4eMycORPLli2DwWDASy+9hIyMDKjV6i4pIBEREfU8LgUo5eXlePTRR1FaWorg4GAkJibi888/x/3334+ioiJ8+eWXWLlyJSwWC6KjozFjxgy89NJL0vlKpRI5OTmYO3cukpKSEBAQgFmzZjmNm0JERESkED2w9ZrJZEJwcDCMRiPboxAREfUQrjy/ORcPERERyQ4DFCIiIpIdBihEREQkOwxQiIiISHYYoBAREZHsMEAhIiIi2WGAQkRERLLDAIWIiIhkhwEKERERyQ4DFCIiIpIdBihEREQkOwxQiIiISHYYoBAREZHsMEAhIiIi2WGAQkRERLLDAIWIiIhkhwEKERERyQ4DFCIiIpIdBihEREQkOwxQiIiISHYYoBAREZHsMEAhIiIi2WGAQkRERLLDAIWIiIhkhwEKERERyQ4DFCIiIpIdBihEREQkOwxQiIiISHYYoBAREZHsMEAhIiIi2WGAQkRERLLjUoDy1ltvITExERqNBhqNBklJSfjss8+k4zU1NcjIyEDfvn0RGBiIGTNmoKyszOka586dw9SpU+Hv74+wsDC88MILaGhocE9piIiIqFdwKUCJiorC0qVLcfjwYRw6dAg///nPMX36dBw7dgwA8Oyzz+LTTz/Fpk2bsHv3bpSUlCAtLU0632q1YurUqairq8P+/fvx/vvvY926dXj55ZfdWyoiIiLq0RRCCNGZC4SGhuKNN95Aeno6+vfvj/Xr1yM9PR0A8MMPP2DYsGHQ6/UYPXo0PvvsM6SkpKCkpATh4eEAgLVr12LhwoW4cOECVCpVuz7TZDIhODgYRqMRGo2mM9knIiKibuLK87vDbVCsVis2btwIi8WCpKQkHD58GPX19UhOTpbSDB06FAMHDoRerwcA6PV6JCQkSMEJAEyaNAkmk0mqhWlJbW0tTCaT00JERES9l8sBSl5eHgIDA6FWq/HUU09hy5YtiI+Ph8FggEqlQkhIiFP68PBwGAwGAIDBYHAKThzHHcdak52djeDgYGmJjo52NdtERETUg7gcoAwZMgRHjx7FgQMHMHfuXMyaNQvHjx/virxJsrKyYDQapaWoqKhLP4+IiIg8y9vVE1QqFeLi4gAAt99+O7799lusWrUKDz74IOrq6lBRUeFUi1JWVgatVgsA0Gq1OHjwoNP1HL18HGlaolaroVarXc0qERER9VCdHgfFZrOhtrYWt99+O3x8fLBz507p2MmTJ3Hu3DkkJSUBAJKSkpCXl4fy8nIpzY4dO6DRaBAfH9/ZrBAREVEv4VINSlZWFh544AEMHDgQZrMZ69evR25uLj7//HMEBwfjiSeeQGZmJkJDQ6HRaDB//nwkJSVh9OjRAICJEyciPj4eM2fOxLJly2AwGPDSSy8hIyODNSREREQkcSlAKS8vx6OPPorS0lIEBwcjMTERn3/+Oe6//34AwJtvvgkvLy/MmDEDtbW1mDRpEv76179K5yuVSuTk5GDu3LlISkpCQEAAZs2ahcWLF7u3VERERNSjdXocFE/gOChEREQ9T7eMg0JERETUVRigEBERkewwQCEiIiLZYYBCREREssMAhYiIiGSHAQoRERHJDgMUIiIikh0GKERERCQ7DFCIiIhIdhigEBERkewwQCEiIiLZYYBCREREssMAhYiIiGSHAQoRERHJDgMUIiIikh0GKERERCQ7DFCIiIhIdhigEBERkewwQCEiIiLZYYBCREREssMAhYiIiGSHAQoRERHJDgMUIiIikh0GKERERCQ7DFCIiIhIdhigEBERkewwQCEiIiLZYYBCREREssMAhYiIiGSHAQoRERHJjksBSnZ2Nu68804EBQUhLCwMqampOHnypFOaCRMmQKFQOC1PPfWUU5pz585h6tSp8Pf3R1hYGF544QU0NDR0vjRERETUK3i7knj37t3IyMjAnXfeiYaGBrz44ouYOHEijh8/joCAACnd7NmzsXjxYmnb399f+tlqtWLq1KnQarXYv38/SktL8eijj8LHxwdLlixxQ5GIiIiop1MIIURHT75w4QLCwsKwe/dujB8/HoC9BmXkyJFYuXJli+d89tlnSElJQUlJCcLDwwEAa9euxcKFC3HhwgWoVKrrfq7JZEJwcDCMRiM0Gk1Hs09ERETdyJXnd6faoBiNRgBAaGio0/4PP/wQ/fr1w/Dhw5GVlYWqqirpmF6vR0JCghScAMCkSZNgMplw7NixFj+ntrYWJpPJaSEiIqLey6VXPI3ZbDYsWLAAd999N4YPHy7t//Wvf41BgwYhMjIS33//PRYuXIiTJ09Cp9MBAAwGg1NwAkDaNhgMLX5WdnY2Fi1a1NGsEhERUQ/T4QAlIyMD+fn52Ldvn9P+OXPmSD8nJCQgIiIC9913H86cOYPBgwd36LOysrKQmZkpbZtMJkRHR3cs40RERCR7HXrFM2/ePOTk5GDXrl2IiopqM+2oUaMAAKdPnwYAaLValJWVOaVxbGu12havoVarodFonBYiIiLqvVwKUIQQmDdvHrZs2YKvvvoKsbGx1z3n6NGjAICIiAgAQFJSEvLy8lBeXi6l2bFjBzQaDeLj413JDhEREfVSLr3iycjIwPr16/HJJ58gKChIajMSHBwMPz8/nDlzBuvXr8eUKVPQt29ffP/993j22Wcxfvx4JCYmAgAmTpyI+Ph4zJw5E8uWLYPBYMBLL72EjIwMqNVq95eQiIiIehyXuhkrFIoW97/33nt47LHHUFRUhN/85jfIz8+HxWJBdHQ0fvGLX+Cll15yei1z9uxZzJ07F7m5uQgICMCsWbOwdOlSeHu3L15iN2MiIqKex5Xnd6fGQfEUBihEREQ9T7eNg0JERETUFRigEBERkewwQCEiIiLZYYBCREREssMAhYiIiGSHAQoRERHJDgMUIiIikh0GKERERCQ7DFCIiIhIdhigEBERkewwQCEiIiLZYYBCREREssMAhYiIiGSHAQoRERHJDgMUIiIikh0GKERERCQ7DFCIiIhIdhigEBERkewwQCEiIiLZYYBCREREssMAhYiIiGSHAQoRERHJDgMUIiIikh0GKERERCQ7DFCIiIhIdhigEBERkewwQCEiIiLZYYBCREREssMAhYiIiGSHAQoRERHJDgMUIoLFYoFCoYBCoYDFYvF0doiIXAtQsrOzceeddyIoKAhhYWFITU3FyZMnndLU1NQgIyMDffv2RWBgIGbMmIGysjKnNOfOncPUqVPh7++PsLAwvPDCC2hoaOh8aYiIiKhXcClA2b17NzIyMvDNN99gx44dqK+vx8SJE53+x/Xss8/i008/xaZNm7B7926UlJQgLS1NOm61WjF16lTU1dVh//79eP/997Fu3Tq8/PLL7isVERER9WgKIYTo6MkXLlxAWFgYdu/ejfHjx8NoNKJ///5Yv3490tPTAQA//PADhg0bBr1ej9GjR+Ozzz5DSkoKSkpKEB4eDgBYu3YtFi5ciAsXLkClUl33c00mE4KDg2E0GqHRaDqafSK6ymKxIDAwEABQWVmJgIAAD+eIiHojV57fnWqDYjQaAQChoaEAgMOHD6O+vh7JyclSmqFDh2LgwIHQ6/UAAL1ej4SEBCk4AYBJkybBZDLh2LFjLX5ObW0tTCaT00JERES9V4cDFJvNhgULFuDuu+/G8OHDAQAGgwEqlQohISFOacPDw2EwGKQ0jYMTx3HHsZZkZ2cjODhYWqKjozuabSIiIuoBOhygZGRkID8/Hxs3bnRnflqUlZUFo9EoLUVFRV3+mUQ3EqvVKv28Z88ep20iIk/oUIAyb9485OTkYNeuXYiKipL2a7Va1NXVoaKiwil9WVkZtFqtlKZprx7HtiNNU2q1GhqNxmkhIvfQ6XRITEyUtqdMmYK4uDjodDoP5oqIbnQuBShCCMybNw9btmzBV199hdjYWKfjt99+O3x8fLBz505p38mTJ3Hu3DkkJSUBAJKSkpCXl4fy8nIpzY4dO6DRaBAfH9+ZshCRi3Q6HdLT05GYmAi9Xg+z2Sy1E0tPT2eQQkQe41Ivnqeffhrr16/HJ598giFDhkj7g4OD4efnBwCYO3cutm3bhnXr1kGj0WD+/PkAgP379wOwVyWPHDkSkZGRWLZsGQwGA2bOnIknn3wSS5YsaVc+2IuHqPOsVivi4uKQkJCArVu3wsvr2v9XbDYbUlNTkZ+fj1OnTkGpVHowp0TUW7j0/BYuANDi8t5770lpqqurxdNPPy369Okj/P39xS9+8QtRWlrqdJ3CwkLxwAMPCD8/P9GvXz/x3HPPifr6+nbnw2g0CgDCaDS6kn0iamTXrl0CgNDr9S0e379/vwAgdu3a1b0ZI6Jey5Xnt7crkY9oR2WLr68v1qxZgzVr1rSaZtCgQdi2bZsrH01EblZaWgoAUi+8phz7HemIiLoT5+IhukFFREQAAPLz81s87tjvSEdE1J0YoBDdoMaNG4eYmBgsWbIENpvN6ZjNZkN2djZiY2Mxbtw4D+WQiG5kDFCIblBKpRIrVqxATk4OUlNTnXrxpKamIicnB8uXL2cDWSLyCJfaoBBR75KWlobNmzcjMzMTY8aMkfbHxsZi8+bNThN9EhF1p05NFugp7GZM5F6OvykA2LZtGyZOnMiaEyJyu26bLJCIeofGwcj48eMZnBCRxzFAISIiItlhgEJERESywwCFiIiIZIcBChEREckOAxQiIiKSHY6DQkQICAho11xbRETdhTUoREREJDsMUIiIiEh2GKAQERGR7DBAISIiItlhgEJERESywwCFiIiIZIcBChEREckOAxQiIiKSHQYoREREJDsMUIiIiEh2GKAQERGR7DBAISIiItlhgEJERESywwCFiKgJi8UChUIBhUIBi8Xi6ewQ3ZAYoBAREZHsMEAhIiIi2WGAQkRERLLDAIWIiIhkx+UAZc+ePZg2bRoiIyOhUCiwdetWp+OPPfaY1LjMsUyePNkpzeXLl/HII49Ao9EgJCQETzzxBCorKztVECIid7FardLPe/bscdomou7hcoBisVgwYsQIrFmzptU0kydPRmlpqbRs2LDB6fgjjzyCY8eOYceOHcjJycGePXswZ84c13NPRORmOp0OiYmJ0vaUKVMQFxcHnU7nwVwR3XhcDlAeeOAB/PGPf8QvfvGLVtOo1WpotVpp6dOnj3TsxIkT2L59O9555x2MGjUKY8eOxerVq7Fx40aUlJR0rBRERG6g0+mQnp6OxMRE6PV6mM1m6PV6JCQkID09nUEKUTfqkjYoubm5CAsLw5AhQzB37lxcunRJOqbX6xESEoI77rhD2pecnAwvLy8cOHCgxevV1tbCZDI5LURE7mS1WvHcc88hJSUFW7duxejRoxEYGIjRo0dj69atSElJwfPPP8/XPUTdxO0ByuTJk/HBBx9g586d+NOf/oTdu3fjgQcekP6oDQYDwsLCnM7x9vZGaGgoDAZDi9fMzs5GcHCwtERHR7s720R0g9u7dy8KCwvx4osvwsvL+Z9GLy8vZGVloaCgAHv37vVQDoluLN7uvuBDDz0k/ZyQkIDExEQMHjwYubm5uO+++zp0zaysLGRmZkrbJpOJQQoRuVVpaSkAYPjw4S0ed+x3pCOirtXl3Yxvuukm9OvXD6dPnwYAaLValJeXO6VpaGjA5cuXodVqW7yGWq2GRqNxWoiI3CkiIgIAkJ+f3+Jxx35HOiLqWl0eoJw/fx6XLl2S/qiTkpJQUVGBw4cPS2m++uor2Gw2jBo1qquzQ0TUonHjxiEmJgZLliyBzWZzOmaz2ZCdnY3Y2FiMGzfOQzkkurG4HKBUVlbi6NGjOHr0KACgoKAAR48exblz51BZWYkXXngB33zzDQoLC7Fz505Mnz4dcXFxmDRpEgBg2LBhmDx5MmbPno2DBw/i66+/xrx58/DQQw8hMjLSrYUjImovpVKJFStWICcnB6mpqU69eFJTU5GTk4Ply5dDqVR6OqtENwbhol27dgkAzZZZs2aJqqoqMXHiRNG/f3/h4+MjBg0aJGbPni0MBoPTNS5duiQefvhhERgYKDQajXj88ceF2Wxudx6MRqMAIIxGo6vZJyJq08cffywGDRrk9O9bbGys+Pjjjz2dNaIez5Xnt0IIITwVHHWUyWRCcHAwjEYj26MQkds5/o0BgG3btmHixImsOSFyA1ee35yLh4ioicbByPjx4xmcEHkAAxQiIiKSHQYoREREJDsMUIiIiEh23D6SLBFRTxcQEIAe2H+AqFdhDQoRERHJDgMUIiIikh0GKERERCQ7DFCIiIhIdhigEBERkewwQCEiIiLZYYBCREREssMAhYiIiGSHAQoRERHJDgMUIiIikh0GKERERCQ7DFCIiIhIdhigEBERkewwQCEiIiLZYYBCREREssMApQXFFdUorqgGANQ2WJFfbIS5ph4AcMFci2MlRintmQuVKLpcBQCot9qQX2yEsdqe9lJlLfKLr6U1VtV3VxGIiIh6NAYoTVyqrMWcDw7hz1/8CAAoN9UiZfU+/KfIHmh8crQYD/7tG1gsFigUCsSFBeGNnO8BAKbqeqSs3oeDBZcBANuPGTB9zdfSdedt+E4KfIiIiKh13p7OgNz0DVTjg9/ehZoGGwAgTKNGzvyxGNTXHwAwfeQAJA3u63ROxr2DAQAaPx/kzB+L6FB72sm3ajEiKgQAYKm1Qu3tBatVdFNJiIiIei6FEKLHPTFNJhOCg4NhNBqh0Wg8kgeLxYLAwEAAQGVlJQICAjySDyIiop7Clec3X/E0caLUhDtf/xInSk1uva7VJlBV1wCrrcfFg0RERN2OAUoTfQNUeHT0IPQNULWZzmq1Sj/v2bPHabslJ0pNiH/5c5woNaGiqg75xUbYrgYr5y5VofCiRUqbX2zEZUsdAHvD2vxiIxqs9ldORZer8NOFSintsRIjLlbWulZIIiIimWOA0kSYxhfz77sZYRrfVtPodDrEx8dL21OmTEFMTAx0Ol2r50T18cOqh0Yiqo8fdp0sR8rqfai32YOO17cdx6JPj0lpU1bvwxfHDAAA/U8XkbJ6HyprGwAAK744iSxdnpQ2/S09Pv1PSccKS0REJFNsg9KEpbYBPxjMGKoNQoC6eRtinU6H9PR0NP21KRQKAMDmzZuRlpbW5mdUVNXh/JVqxEdo4OWlwLlLVbAJgZh+9nYs+cVGRIb4ITRABWNVPYquVGGoNgjeSi8UXa5CvdWGm/rb278cKzEiQOWNs5ercNvAEAT5+rjj10BEROR2rjy/GaA0kV9sRMrqfciZPxbDBwQ7HbNarYiJicH58+dbPFehUCAqKgoFBQVQKpVuzVdb2sozERGRXLCRbCfEhQXii2fHIy4ssNmxvXv3thqcAIAQAkVFRdi7d29XZrGZW8KDoM/6OW4JD+rWzyUiIuoqLgcoe/bswbRp0xAZGQmFQoGtW7c6HRdC4OWXX0ZERAT8/PyQnJyMU6dOOaW5fPkyHnnkEWg0GoSEhOCJJ55AZWUl5MDXR4lbwoPg69O8BqS0tLRd12hvOndReXtBpfTCuasj2gL2Rrnl5hoA9tdW+cVG1NTbG/KWGqtxqswspT1pMKPMZE9bXWcfObe6zp627up4MERERN3J5QDFYrFgxIgRWLNmTYvHly1bhr/85S9Yu3YtDhw4gICAAEyaNAk1NTVSmkceeQTHjh3Djh07kJOTgz179mDOnDkdL4UblRqrsWTbCZQam4/4GhER0a5rtDedu1TXWbH8ix+R+dFRad8j7xzApkP22p7jpSakrN4njWL7zt4CPP3hd1La3677Fv/UnwVgH7o/ZfU+nLlQiUuVtfjLzlMc/ZaIiLqf6AQAYsuWLdK2zWYTWq1WvPHGG9K+iooKoVarxYYNG4QQQhw/flwAEN9++62U5rPPPhMKhUIUFxe363ONRqMAIIxGY2ey36KTBpO4941d4qTB1OxYQ0ODiIqKEgqFQgBotigUChEdHS0aGhrcnq/rOX+lSpwqM0vbx0uMosxULYQQorKmXuSdrxDVdfZ8lVRUiR8ble+HUpMwGO1pq2obRN75ClFV2yB+KDWJ8cu+Ej+UNv9dEBERucqV57db26AUFBTAYDAgOTlZ2hccHIxRo0ZBr9cDAPR6PUJCQnDHHXdIaZKTk+Hl5YUDBw60eN3a2lqYTCanpavcEh6Er56f0GJ7DqVSiVWrVgG41mvHwbG9cuXKbm0g6zAgxM+p3cywCA3CguxdpQPU3hg+IFh6bRUR7IebG5VviDYI4Ve7VfuplBg+IBh+KiWGaIOw+4V7MUTLti1ERNS93BqgGAz2sTvCw8Od9oeHh0vHDAYDwsLCnI57e3sjNDRUStNUdnY2goODpSU6Otqd2XZJWloaNm/ejMjISKf9UVFR7epi3NNcqqyVXnfV1Nvbp1iujslSbq5xGnH3dHml9DqorsHmNAv0xUrnWaB/ulDJV0dERNSqHtGLJysrC0ajUVqKioq67LN+LDPjnjd24cdGjUibSktLw/Hjx6Xtbdu2oaCgoNcFJxcra/HQ29/gLzvtjZyLK6qRsnofjl8NSjYdOo9H3rlW65X50VH871enAQCXLPZZoL87VwEA+PQ/JUh/Sy+lXfjx93hj+w9SsENERNSYW2cz1mq1AICysjKnhqJlZWUYOXKklKa8vNzpvIaGBly+fFk6vym1Wg21Wu3OrLZK4+uDKQkR0FxnwLPGr3HGjx/vkdc6Xa1foBrrfnsXvK6+zRoQ4oec+WMRe3VAuV/eEYWfD71WG/bnX42En8r+e+gb4DwL9LQRkbgrNlRK+6cZiQj282lxMDwiIiK31qDExsZCq9Vi586d0j6TyYQDBw4gKSkJAJCUlISKigocPnxYSvPVV1/BZrNh1KhR7sxOh2iDfbFw8lBog1sf6v5GMiDEDxHBfgDsXbCHDwiWgoqwIF8Mi7g20E5cWCAGhNjTqry9MHxAsDSybb9ANW6NvDaI3MBQfyi9FNIcQ0RERI25HKBUVlbi6NGjOHr0KAB7w9ijR4/i3LlzUCgUWLBgAf74xz/i//2//4e8vDw8+uijiIyMRGpqKgBg2LBhmDx5MmbPno2DBw/i66+/xrx58/DQQw81a9fhCTX1VpwoNUljhrQmICAAQggIIRAQENBNues9fjCYMXLxDvxgMOOyxT55okPhRQvOXbKP6WKzCeQXG1FRZZ880THRorXRRIsFTSZavMTJE4mIejyX69cPHTqEe++9V9rOzMwEAMyaNQvr1q3D73//e1gsFsyZMwcVFRUYO3Ystm/fDl/fazUSH374IebNm4f77rsPXl5emDFjBv7yl7+4oTidd7q8EnNWb8UHDw9GXP/mo8l2in9fIMRzDXzlJLqPP9b+5jZE9/HHZ/ml+IMuD4VLpwIAFn16DCpvL/xt5h2ot9mQsnof3nxwBH7xsyjs/vECntl4FMcXT4K/yhtLt5+AuaYB/3zCXvs2fc3XWDz9VjwyapAni0dERJ3EuXiaqL5QCNXfRkPZ0AU9THz8gYyDDFKauGypQ0lFtTSPUOFFC7wUCgzs6w+bTeB4qQlRffwQ4q+SJlocFqGB8upEi1YhpHYx+cVGRAT7om9g97RZIiKi9nPl+c0Wik341VcADdVA2t+Bfre478IXfwR0s4GqSwxQmggNUCE0QCVtO2Z1BgAvL4XTBIgh/iqE+F9LO/BqI1yH6FB/HCy4jLtiQxHsx5mdiYh6KgYoTVy21CEUwGW/GIRGjvR0dshFRZerMPuDQ8iZPxYmPx/UWW0YfPVV3bESI8KCfNE/SA1zTT3OXqrCzeGBUHsrUVxRjeq6BsSF2QelO1FqQt8AFcI0vrDUNqDgogVxYYEtztFERETu1yPGQelOxqsDiznW3c1isUChUEChUMBisVz/BHIyRBuEwy8lY4g2CCu/PIWFm7+Xjj34t2/wydFiAMB/ioxIWb0P5SZ7g9q1uWfwzMajUtpH3z2If31rH2/nB4MZKav3OU3G6Cn8fhDRjYI1KE3E9g1wWlPP4qP0ktqfLEi+GXWNujH/679GS8P/j4gORs78sQjT2NM+NWEwquuuDRr3wW/vQt+rr52GaoOQM38sVEovLNl2Ao/fHSN1vSYioq7BGhSZsVqvdW/es2eP0za5JjrUX3q9AwC3Rgajf5A9IAny9cHwAcFQe9tf2djnMro259CwCA3CNM5zGdVZbfjyeBnMNQ34scwMg9E+Q7djCoCqqwFOuakGPxiuTQFwqsyMkgrn6QIqr46ge8Fci+Ml7Z9bit8PIrpRMEBpwlGN32XV+Rd/BEqOtrjo3lmB+CE3S0mnTJmCmOgB0L2zotVzpKWi64b/J7vGE0nO/uAQ3tcXAgAKLlqQsnofTpVVAgA+PHAOj737rXTe/A1H8PaenwAABmMNUlbvQ955+7gvuu/O4+G/f9Ouz9fpdEhMTJS2p0yZgri4OOh0OncUj4hIVtjNuIkLPx5A//UTceHXX6D/LW4c2baiCFhzF1DfcuCjO1GP9I+q0fRmOOZM3vwrP6QNa6NXCrswd6sfy8zQ+PpAG+yLmnorTpdX4qb+AfBXeaPcVIPLVXUYqrV/N0+VmRGg9kZkiJ+UNqZfAALV3rhgrsUFcy3iI9v+Hut0OqSnpyMlJQUvvvgihg8fjvz8fCxZsgQ5OTm9cqJKIup9XHl+M0BpquQo8PY9wJzdgLt78VQU2bsZN2G1WhEzairOl5a1eJpCoUBURBgKvvl3y3P+OLowd0WeqcuduVCJ5zf9B8t/OcLplZSD1WpFXFwcEhISsHXrVnh5Xav4tNlsSE1NRX5+Pk6dOtUr54Qiot6D46B0Qm2DDepGa7cKiW6xhmNvbm6rwQkACCFQVFKGvWfMmDBhgrtzRR6m9vbCLWFBUCoUyC82YmBff2h8fXCpshalxhpcPHUEhYWF2LBhg1NwAgBeXl7IysrCmDFj8IHuMzyWPhUKhQJnL9l7+AxiY28i6qHYBqWJoitVTuvuUFpa6tZ01LNE9fHHn9IT4a9SImX1PhwqvAwA+HdeKdL+ul+678OHD2/xfMf+3/9zjzRH0Ws5x/FaznEIIdBgtaEHVpQS0Q2OAUoTkVdn43Wsu0NERIRb01HP1CdAhZz5Y3FHTCgAYGpCBHRPj5Hue35+fovnOfYvmzkeSi97q6X/SYnH/6TE41iJCXH//RmOudBTiIhIDviKpwn/qyOF+nfjiKHjxo1DVFQUiouLW/yfrkKhQFRUFMaNG9f2hS7+6P7MtXOCQ4vFgsBAe/uJyspKzvDcAT5KL6dh/fsGqtE3UA2rdhxiYmKwZMmSFtugZGdnIzY2Fo+mPQCFwh6gOF7tXLHU4Y30RASqvZFfbJTmMCq6XIUGW8tzGJlq6nHuUhWGaIPgo/TC+StVqG24NiLv8RIT+geppS7bRERdgQFKE1eq6tGn0bo7KJVKrFq1Cunp6VAoFE5BiuOBs3LlytYbQPr3tffi0c12f+bYO8jjlEolVqxYgfT0dKSmpiIrK0vqxZOdnS314mnp+9EnQIVf3hGNf39fioz13yHv1YkI8vXBss9P4rKlFh8+ORoAkPbX/XgpZRgeTYrBocLL+O26Qzj44n0I0/hi9c7T+LHcjC1P3w0AePjv3+DpCYPxyOhByDtvREJUMALV/KeEiNyLvXia+On7r3GTbgp+StuGmxLvduu1r0en0+F3v/sdiouLpX3R0dFYuXLl9buQttJDqFNc6B3kuCcAsG3bNkycOJE9StxMp9MhMzMTZ8+elfbFxsZi+fLl1/1+GKvqUXSlyq01KGUm+5guOfPHOtX8EBG1ht2MO6Mruxm3g6we9O38XbQUWEVFRWHVqlUcm8PN5PT9qKm3SqPp1lttuDncPhLvDwYTQv3tEy1W1TXgpwvXJlo0GGtgqqnHLVfT/lhmRpCvNyKCr40RE9svAAGskSHqlVx5frORrMw0ftiMHz/erQ+frphozjGAWOPgBACKi4uRnp7e6VFOOTmes678frjK10eJmH4BWLe/EPM3HJH2P/but/jwwDkAwKmySqSs3oeCi/Z7976+ELM/OCSlfeqfh/He14UA7KM3p6zehx8M5u4rBBHJFgOUJoquzpniWFPrrFYrnnnmmRYb9jr2LViwgPPF9HJzxt+E1Q//TNpe99s78ciogQCAm8MDkTN/rPQqaVZSDP7+6B1S2rUzb8fjd8cAAAaG+iNn/lj0DVBh9c5TKDfVdF8hiEh2WI/ahEqpcFp3t4CAgC4bs6LpRHPtfj3QSu+gvfsP4fz5862eJoRAUVER9m55DxPG3NE8QTt6CHU4z71UV34/Oqppl3zHEP8A4K/ydmqfog32hTbYV9p2vOoB7DUywwcE40SpCR98cxbJ8eEw1dTDT+WNASF+qG2w4lRZJQb19UeQrw8umGtRbq7BrZH265+5UAmV0gvRof6ot9pw0mBGdKg/gv2uDXrHtjJEPQdrUJoID/J1WvcWOp0O8fHx0vaUKVMQExPT9iuYxr2D3r6n2VK64Xft+uzSDb9r8XysuavNSQ47lGfq8YZFaPDtfydjWIQGz2w8irW5ZwAA5aZapKzeh/8U2Sda/ORoMR7827WJFhdu/h4rvzwFADBV1yNl9T4cLLAPerf9mAHT13zdzSUhos5gI9km6s8fgc87E1D/ZC58on52/RN6AEc7kaa32tGFuc2J5troHZS7/xDu/eX1uzbv2vT35jUo1+kh1Kk8U69xutzs1hqUALU3Xv4kH4unD5deOxFR92Evnk44/Z99iNsyFad/8W/EjRjr1mt7gtVqRUxMTKuvYhyDwBUUFLj86sRx7esNMNfitdvoIdSVeaYb27lLVVi6/QR+P2koKmsbENXHDyH+KlRU1eH8lWrER2jg5aXAuUtVsAmBmEbdsCND/BAaoJK6bA/VBsFb6YWiy1Wot9pwUwsTPRKRM/bi6QTH+/HG78l7sr1797avncjevS5f2zHAHHCtZsOhXQPMtaIr80w3toF9/fHXR25HmEaNlNX7sPvHCwCAXSfLkbJ6H+ptNgDA69uOY9Gnx6TzUlbvwxfHDAAA/U8XkbJ6HyprGwAAK744iSxdXjeXhKj3YyPZJgJV3k7rnq6rJyJMS0vD5s2bWxwHpV0DzHUiL5w8kTpK7a1EzvyxiOpjb+B775Aw5MwfC5+r0wj895R42BrVCubMHys1Bk66qR9y5o+VRs99buIQ1Ftt3VwCot6vdzyF3aiiuh4hjdY9XXdMRJiWlobk5OSODSDWQg+hCJ/2jXcS4WOxvypqqp3zB9GNS+mlcOrRE+KvQoi/Stoe2NffKX3jtMH+Pgj2v7YdHeqPYyVGDPuf7dg8NwkDQ/1x9lIVbgkPgsrbC8UV1aiusyIuzP4K6ESpCX0DVQgL8oWltgEFF68NZFdqrEZlTYM06N1Jgxkh/j4I1/SOGl0iVzBAaeJiZS1CGq17OrdNRHgdLg8g1sb8QeNsAlEaBYpNAi01kFIAiNIoMO77TCC/he7gnD+Iulm4xhe/nzwE4RpffHeuArPePQh91s8REeyH//3qNI6VGPH/5tnbtD3yzgE8MTYWGffG4XipCb9cq8fO5+7B4P6BeGdvAfb8eAE7Mu8BAPx23bf4xc8G4PlJQzxZPCKPYCPZpjw81H1XcPSIAdDiRIQe6xHTRg8h3badSJ/zAgCBxt9QKc9vv4G0Kfc1P9GF+YOIuoK5pt6tNShqby+cvVyFhAHBCA1QocxUg4qqegzR2tOcKjMjsJXpAsrNNbhUWYdhEfZ/J0+XV8JPpcSAED/UNdhwobIWA5qMY0PUldhIlpw42olERkY67Y+KivJsd92QaHsQ0cKS9uRzV/M8wOkUKc9PPtfyuf1u6dYitITD89/Ygnx9MHxAMFTe9n9eB4T4ScEJYB/nJezqOEsBavtAdr4+9hrHiGA/KTgBYJ+w0dsLs949iLxi+/gv/9SfxW/XfSulefrD7/DO3gIAQHFFNVJW78PxUhMAYNOh83jknQNS2syPjuJ/vzoNwD4P0t1Lv0IxR80mmWINShPFx/UY8NFkFP9qOwbEJ7n12p4mp4nm2svlPMugBqwn/p5J3oorqhHqr4KfSum2GpTLljrs/rEcycPCEeTr48ni0Q3Elec326A0ofRSOK17E41GI7th0q+nw3luZXj+TrtOA1ydTofMzExp2zH67YoVKziwHHVY49cw4Rpfp0azN7cwXYBDWJCvVFsDwKkmJzRAhXE398e5y1XSYHc/XaiEz9XB7hqsNvxgMCO6jz+C/X1w2VKHkopq6fqFFy3wUigwsK8/bDaB46Ump3FlLHVWvj6iTmGA0oT26h++lq3me6Y2Gt+6RRsNcB1tfVJSUrBx40YMHz4c+fn5WLJkCdLT0zn6LcFisSAw0B4kVFZWIiDAs6PZfvqfEizbfhInXpsMAMjS5SEi2BcrH/oZKmsbkLJ6H9b+5jZMHh6BL44Z8AddHgqXTgUALPr0GFTeXvjbzDtQb7MhZfU+vPngCPziZ1HYcqQYiz49jq//8HMGKdRhfMXThLX4CJR/nwDr7FwoB/SOoe5vOG00vm3MUlWNwJvHAAAqT+1HgP91/iFtowGu1WpFXFwcEhISsHXrVnh5XWveZbPZkJqaivz8fJw6dYqve25gcnv9d7GyFmWmGrfXoFy21MFS2wCrzd4TL7bRiLwRwb7oG6iGsboeRZer7O1sro7IW2e1YfDVEXmPlRgRFuSL/kFqqeHxzeGBUHvz76cn82gj2VdffVVqIOhYhg4dKh2vqalBRkYG+vbti8DAQMyYMQNlZWXuzkaHFVy0OK2pB2qj8W3jxRp2q3TKnlMVsIYntH1OGw1w9+7di8LCQrz44otOwQkAeHl5ISsrCwUFBRz99gam0+mQmJgobU+ZMgVxcXEenfyyX6BaCk4A4Kb+gYgOtY8B4630wvABwQj2t7dPCQ1QOb0+iukXII0X43V1XBnHWDKhASpEh/pj2ec/4OVP8qVzpq/5Gtuvjsh7sOAyUlbvg6m6HgCw8stTWLj5eyntg3/7Bp8ctQ/++J8iI1JW70O5qdbtvwOSry7pxXPrrbeitLRUWvbt2ycde/bZZ/Hpp59i06ZN2L17N0pKSmRV7d1bZzMmZ516WFz80d4Yt9FSelwPABg+fHiLpzj2lx7XNzsXJUfbnNWZej7H67/ExETo9XqYzWbo9XokJCQgPT29187Q/YfJw7B4+rW/iU8y7sbkW7UAgLtiQ5Ezfyw0fvYAaEHyzfhT+rW/yX/912hMH2nvxTciOhg588fCahN47qP/SD2PTpSaUG6qAQBYahuQX2xETb0VAFBqrMaPZWbpej+WmWEw2tPW1FuRX2xEVZ19uoJyUw1+MJi65HdAnSDc7JVXXhEjRoxo8VhFRYXw8fERmzZtkvadOHFCABB6vb7dn2E0GgUAYTQaO5vd5oqPCPGKxr6mXunjjz8WCoVCTJs2Tej1emE2m4VerxfTpk0TCoVCfPzxxy2feOWcEH/U2r8fTZZds/zb/B7v379fABC7Zvm3eL74o9Z+fep1GhoaRExMjJg2bZqwWq1Ox6xWq5g2bZqIjY0VDQ0NHsphz3H+SpWYsmqPuGiuEUIIcccfd4i/fPmjEEKIQ4WXxaCFOeKkwSSEEOL1fx8X976xSzp3/LKvxNLPTgghhDheYhSDFuaIo+euCCGE+PMXJ8Wo17/svoLcwFx5fndJgOLv7y8iIiJEbGys+PWvfy3Onj0rhBBi586dAoC4cuWK0zkDBw4Uf/7zn1u9Zk1NjTAajdJSVFTUZQGK8cxBIV7R2NfU63T6YXHlnD14bbI0nDskYqIHtH3dgVGi4dyh5uf/518MinuxXbt2tS943bWrezPWQzmCEyHsgUaZsVoIIURlTb3IO18hquvsf7slFVVSsCKEECcNJlFaYU9bXdcg8s5XCEttvRBCiDJjtThRahQXzTWi+EqVUxpzjT1NualGHCu+9sw5XW4WRZctQggh6hqsIu98hTBW10l5zDtfIaWtsNS595fQg7kSoLj9Fc+oUaOwbt06bN++HW+99RYKCgowbtw4mM1mGAwGqFQqhISEOJ0THh4Og8HQ6jWzs7MRHBwsLdHRXTeEebm51mlNvUun24q00r5FGX07Vqz8C3JycpCamupUjZ+amoqcnBwsf3MVlNG3y3JwOeo6jkktr/v6j5NftkvfQLX087AIDcI0rQ96d0ujLti3hAdJs9Q7umP7X50UNkzji/6BajzyzgG8ucM+RIHBWIOU1fuQd94+QJ7uu/N4+O/fSNd7ftN/sHqnfdC7K5Y6pKzeh0OFlwEA/84rRdpf9wMALlXW4un1hzkgXge4vZvxAw88IP2cmJiIUaNGYdCgQfjoo4/g59ex7mZZWVlOY0uYTKYuC1IG9w9wWlPv0pUPC8eIvZmZmRgzZoy0PzY2tn1djD00dgt1LcdEnPn5+Rg9enSz4/n5+U7pyDP6Bqrxj8fuhGMELG2wL3Lmj0XM1R5IabdFYdzN/aX0y385AuqrowX3CVAhZ/5YqdHw1IQI3DawDwCgqs6KQLU36htsyC82Sr2irljqUFxRjVsjNVAoFDh7yd4xY1DfAAghcKzEhAEhfugToIKxqh5FV6owLEIDpZcCRZer0GATUu+o3qrLx0EJCQnBLbfcgtOnT+P+++9HXV0dKioqnGpRysrKoNVqW72GWq2GWq1u9bg7Ka5+PRXofQO1Udc/LDo0s7MHx26hrjdu3DjExMRgyZIlLXZBz87ORmxsbKcn7KTOazxmS9NB7/oHqdE/6NpzyNEdGgB8rvZ4cugbqJZqeqJD/fG3mXfAXFOPCctzsebXt2FqYgS+PFGGFzZ/j9OvPwBvpQKv5RwHALwz605YbQIpq/fhjfRE/PKOaOw7fREZ679D3qsTEeTrg2Wfn8RlSy0+fLL5v2G9SZePg1JZWYmBAwfi1VdfxaxZs9C/f39s2LABM2bMAACcPHkSQ4cOhV6vb/GB0ZKuHAel9IQeEf+ajNIHtyNiWO8a6p5kPF5JO8ducRknT5SFxoP4ZWVlSYP4ZWdnIycnh4P43QCsNoETpSa31qBYahuQ9tf90D09BgP7+uPcpWvjypy/UoXahmvjyhwvMUlBVmVtAwobTVJZUlENS+21SSp/MJgQ6q+SXp+5k0vPb3c3gHnuuedEbm6uKCgoEF9//bVITk4W/fr1E+Xl5UIIIZ566ikxcOBA8dVXX4lDhw6JpKQkkZSU5NJndGUvnpLj+4V4RWNfU6/UuBfP/v37hclkEvv3779+L56eiL3SZOPjjz8WgwYNEgCkJTY2tnd936hbXTTXiPf3F4iL5hqx84RBDFqYIzUa/v2m/4jUNfuktImvfi7W5p4WQgix//RFMWhhjii4UCmEEOKVT/LFpDd3S2lHvf6l+PMXJ7skz648v91eg/LQQw9hz549uHTpEvr374+xY8fi9ddfx+DBgwHYB2p77rnnsGHDBtTW1mLSpEn461//2uYrnqa6sgZFDpPNUddzzJlz9uxZaV9sbCyWL1/eu/4n6/g+p/29axrjsn2LS+Q2kiz1HqaaerfWoPh6K2GsrsfN4YFSY2K35NOF5zeHum9ClByB4u0JEHNyoYjkUPe92Q3xsKgoAtbcBdRXdc312b6FqFfKL7aP3pszf6xT+5rO4mzGnXDmggVxjnWkp3NDXaknzu7sspBoewDRle1bqi4xQCHqZeLCAvHZM+M82lOIAUoTYVdbaYcFdU+vIaIuFxLdtQFEV3SP5qsjIo/y9VFiWISbm1C4iAFKExpfH6c1EbWiK7tH89URkUcZjDV4X1+IWUkx0gB33Y0BShPmmgYENVoTUSu66vURXx0ReZypph7b8krxi58NYIAiF2XmGgQ1WhNRG7ry9RFH1iXymFvCg7D7hXs9mgcGKE04GgT19iGEiWSLI+vKjtVqxd69e1FaWoqIiAiMGzeu9/V4I9lhgNKEUqFwWhNRN2PPI1lpacygmJgYrFixoneNGUROfiwz46l/Hsbambc7TbrYnRigNGEw1UDrWLObMZFnsOeRy7qilqPxEP0bN26UhuhfsmQJ0tPTOUR/Lxbk643k+HAE+XouTOBAbU0UH9djwEeTUfyr7RgQz7l4iHqVrhy4zoOvjrqilkO281ZRj8aB2jrBMZtl41ktiaiX6OqeR+f0XfNqqo3ama6q5di7dy8KCwuxYcMGp+AEALy8vJCVlYUxY8Zg7969mDBhQkdKRTJWU2/FuctVGBjqD18fzwSgDFCI6MbSFa+PPNSw12q14rnnnkNKSopTLcfo0aOxdetWpKam4vnnn8f06dNdruUoLS0FAAwfPrzF4479jnQ3ihulwfDp8souGereFQxQmjh9oRJxjjXboBBRe3RHw94Wamf27j/UvlqOLe9hwpg7ml+7jZqZiIgIAEB+fj5Gjx7d7Hh+fr5TuhuBTqfD7373OxQXF0v7oqKisGrVql7XFie2XwA+njvGoz1a2QaliYoz3yLkn8momPklQgbf6dZrExG5rI12Mxvy6vFrXTXMZjMCAwObHTebzdBoNFif5oeHE1oYHbuNdjM9vQ2Ku2s6HK/Smj4yFVd7fLLBcPuwDUonhPj5OK2JiDyqjdqZiP2HAN3s69dyPPwXoGkNynXazSgBrPjveUif8wJSU6cjK+tFqX1LdnY2cnJysPntN6Asy2s53x7s1eTumg6r1YpnnnmmxclFhRBQKBRYsGBBh16lyVW5qQb/+rYID94ZjTCNZ0aSZQ1KE5WFhxC47j5UPrYTgTEtVIkSEclEp2o52tmjSXeiHpk7GnD2Sr20LzbUB8uTvZE2rI3/yLWjV1NXdo12Z01Hbm4u7r33+qOq7tq1q9c0GD5RasKj7x7EB7+9y62TBrIGpRMMxhrENVoTEcmVUqnEihUrkJ6ejtTUVGRlZTWv5di8ueWHfjvbzaQBmG61Yu+BIygtv4CIsP4YN+pnbQcS7ejVpNu2E7/7n2UoNpRL+6IiwrFq8QtIm3Jf69duo2amq2o62tsQuDc1GB4WocG3/53s0TwwQGliUN8ApzURkZylpaVh8+bNeO655zBmzBhpf2xs7PVrC9rZo0kJYEL07e3P1HV6NelO1CP9o2o0DSOKS8uQPvt5bP6VX+u1M23UzOzduxfnz59vNVtCCBQVFbncNbq9DYHl2mC4p/Y8YoDShI+XwmlNRCR3aWlpmD59unweQm3UzlitVjwzaioEqpsdE7C/ilmwT4Ppy//dPP/XqZkpPa5vV/ZKj+uBW0KaH2ildmbcuHGIiopCcXFxi7UzCoUCUVFRGDduXLs+vzvpdDo888wzToFbe9rjnC4345mNR7HqoZGIC+NQ97JQZq5BeKM1EVFPoFQq5dX+oZXamb25uThfWtbqaUIIFJWUYe8Zc/PyXKdmJqKwoV1Zizj4R6B8afMDPv7Ag/8E/Ps57VYCWPXKAqTPeQEKBdA4RnG0bVn58jOyazDcWnuc4uLi6w7i56fyxm0D+8BP5bkwgQFKE3VW4bQmIiL36VR7juu0mxlntSLqi6koNpS3XtMREYZxr/0baFo7U3UR+NdM4P9mtHjtNACbf+mLZ7bX4Lzp2rWjgoCVk32Rdn4x8PbilgvTzmkQ3PkqprPtcQaE+OG11JYH6esuDFCaiL46xH00h7onInK7TrfnaKPdjBLAqv/9K9LT06FQKJwezlJNx+q/Qtlae5rrNBpOAzB9ufsbDAP2RsPPvPyGU+1SZxoNd7Y9Tm2DFeWmWoRp1FB7c6h7IiLq5bq6PYej0XBL7S5WrlzZ6UbD7m4wDLih0XALr6U62x6n6EIlHt1wBm/PT/XYUPccB6WJn77/GjfppuCntG24KfFut16biIiutY0A0GIthztGZZVVz5WKolZrT6xWK2JGTW21XY7jtVTBNy00Gna8lmphLJvcwgbc+/71Z+3eNcsfE2JarquwKv1QPUePwPDY616nvTgOSif08Vc5rYmIyL06VcvRTrJqNNxGzUynGg0Drb6W6lR7HAC4+COUutkItBpbzVtXY4DSRB9/H6c1ERG5n+y6RntIpweBayX46Wx7nCtV9ejTaO0JXtdPcmOpqrc6rYmIqGs4ajkefvhhTJgw4YYLToCuHQTOUVM1YMAAp/1RUVHXfY12uarWae0JrEFpoqSiGnGO9SBP54aIiHqz7mg03JGaqsH9Ap3WnsAApYnoPv5OayIioq6iVCqxatWqtl/FrFzZqdolWbXHcQFf8TSh9vZyWhMREXWlzryK6SpFFdVOa09gDUoTFypr0b/RmoiIqKvJrdGwHOal82g1wZo1axATEwNfX1+MGjUKBw8e9GR2AADVdVanNRERUXeQU6NhrcbXae0JHgtQ/vWvfyEzMxOvvPIKvvvuO4wYMQKTJk1CeXm5p7IEABgY6u+0JiIiutHU24TT2hM8FqD8+c9/xuzZs/H4448jPj4ea9euhb+/P959911PZYmIiIgAnL1kcVp7gkfaoNTV1eHw4cPIysqS9nl5eSE5ORl6ffP5A2pra1Fbe60vttFoH9nOZDK5PW+FZ8sRUyvs60D3X5+IiEju/BQNMNUK+9qNz1rHtdozy45HApSLFy/CarUiPDzcaX94eDh++OGHZumzs7OxaNGiZvujo9ue1KlTlk7qumsTERH1BEvv7ZLLms1mBAe3PQlhj+jFk5WVhczMTGnbZrPh8uXL6Nu3r9RP3F1MJhOio6NRVFTk9okI5YDl6/l6exlZvp6vt5ext5cP6LoyCiFgNpsRGRl53bQeCVD69esHpVKJsjLnCZLKysqg1WqbpVer1VCr1U77QkJCujKL0Gg0vfaLB7B8vUFvLyPL1/P19jL29vIBXVPG69WcOHikkaxKpcLtt9+OnTt3SvtsNht27tyJpKQkT2SJiIiIZMRjr3gyMzMxa9Ys3HHHHbjrrruwcuVKWCwWPP74457KEhEREcmExwKUBx98EBcuXMDLL78Mg8GAkSNHYvv27c0aznY3tVqNV155pdkrpd6C5ev5ensZWb6er7eXsbeXD5BHGRWiPX19iIiIiLoRZ8QjIiIi2WGAQkRERLLDAIWIiIhkhwEKERERyU6vD1DWrFmDmJgY+Pr6YtSoUTh48GCb6Tdt2oShQ4fC19cXCQkJ2LZtm9NxIQRefvllREREwM/PD8nJyTh16lRXFuG6XCnj3//+d4wbNw59+vRBnz59kJyc3Cz9Y489BoVC4bRMnjy5q4vRKlfKt27dumZ59/V1ni5cbvfQlfJNmDChWfkUCgWmTp0qpZHT/duzZw+mTZuGyMhIKBQKbN269brn5Obm4rbbboNarUZcXBzWrVvXLI2rf9ddydUy6nQ63H///ejfvz80Gg2SkpLw+eefO6V59dVXm93DoUOHdmEpWudq+XJzc1v8jhoMBqd0crmHrpavpb8vhUKBW2+9VUojp/uXnZ2NO++8E0FBQQgLC0NqaipOnjx53fPk8Czs1QHKv/71L2RmZuKVV17Bd999hxEjRmDSpEkoLy9vMf3+/fvx8MMP44knnsCRI0eQmpqK1NRU5OfnS2mWLVuGv/zlL1i7di0OHDiAgIAATJo0CTU1Nd1VLCeuljE3NxcPP/wwdu3aBb1ej+joaEycOBHFxcVO6SZPnozS0lJp2bBhQ3cUpxlXywfYRz5snPezZ886HZfTPXS1fDqdzqls+fn5UCqV+OUvf+mUTi73z2KxYMSIEVizZk270hcUFGDq1Km49957cfToUSxYsABPPvmk0wO8I9+JruRqGffs2YP7778f27Ztw+HDh3Hvvfdi2rRpOHLkiFO6W2+91eke7tu3ryuyf12uls/h5MmTTvkPCwuTjsnpHrpavlWrVjmVq6ioCKGhoc3+BuVy/3bv3o2MjAx888032LFjB+rr6zFx4kRYLK3PUiybZ6Hoxe666y6RkZEhbVutVhEZGSmys7NbTP+rX/1KTJ061WnfqFGjxH/9138JIYSw2WxCq9WKN954QzpeUVEh1Gq12LBhQxeU4PpcLWNTDQ0NIigoSLz//vvSvlmzZonp06e7O6sd4mr53nvvPREcHNzq9eR2Dzt7/958800RFBQkKisrpX1yun+NARBbtmxpM83vf/97ceuttzrte/DBB8WkSZOk7c7+zrpSe8rYkvj4eLFo0SJp+5VXXhEjRoxwX8bcpD3l27VrlwAgrly50moaud7Djty/LVu2CIVCIQoLC6V9cr1/QghRXl4uAIjdu3e3mkYuz8JeW4NSV1eHw4cPIzk5Wdrn5eWF5ORk6PX6Fs/R6/VO6QFg0qRJUvqCggIYDAanNMHBwRg1alSr1+xKHSljU1VVVaivr0doaKjT/tzcXISFhWHIkCGYO3cuLl265Na8t0dHy1dZWYlBgwYhOjoa06dPx7Fjx6RjcrqH7rh///jHP/DQQw8hICDAab8c7l9HXO9v0B2/M7mx2Wwwm83N/gZPnTqFyMhI3HTTTXjkkUdw7tw5D+WwY0aOHImIiAjcf//9+Prrr6X9ve0e/uMf/0BycjIGDRrktF+u989oNAJAs+9bY3J5FvbaAOXixYuwWq3NRqYNDw9v9i7UwWAwtJnesXblml2pI2VsauHChYiMjHT6ok2ePBkffPABdu7ciT/96U/YvXs3HnjgAVitVrfm/3o6Ur4hQ4bg3XffxSeffIL/+7//g81mw5gxY3D+/HkA8rqHnb1/Bw8eRH5+Pp588kmn/XK5fx3R2t+gyWRCdXW1W77zcrN8+XJUVlbiV7/6lbRv1KhRWLduHbZv34633noLBQUFGDduHMxmswdz2j4RERFYu3YtPv74Y3z88ceIjo7GhAkT8N133wFwz79bclFSUoLPPvus2d+gXO+fzWbDggULcPfdd2P48OGtppPLs9BjQ92T5y1duhQbN25Ebm6uU0PShx56SPo5ISEBiYmJGDx4MHJzc3Hfffd5IqvtlpSU5DTh5JgxYzBs2DD87W9/w2uvvebBnLnfP/7xDyQkJOCuu+5y2t+T79+NZv369Vi0aBE++eQTpzYaDzzwgPRzYmIiRo0ahUGDBuGjjz7CE0884YmsttuQIUMwZMgQaXvMmDE4c+YM3nzzTfzzn//0YM7c7/3330dISAhSU1Od9sv1/mVkZCA/P99j7WFc1WtrUPr16welUomysjKn/WVlZdBqtS2eo9Vq20zvWLtyza7UkTI6LF++HEuXLsUXX3yBxMTENtPedNNN6NevH06fPt3pPLuiM+Vz8PHxwc9+9jMp73K6h50pn8ViwcaNG9v1j52n7l9HtPY3qNFo4Ofn55bvhFxs3LgRTz75JD766KNm1elNhYSE4JZbbukR97Ald911l5T33nIPhRB49913MXPmTKhUqjbTyuH+zZs3Dzk5Odi1axeioqLaTCuXZ2GvDVBUKhVuv/127Ny5U9pns9mwc+dOp/9hN5aUlOSUHgB27NghpY+NjYVWq3VKYzKZcODAgVav2ZU6UkbA3vr6tddew/bt23HHHXdc93POnz+PS5cuISIiwi35bq+Olq8xq9WKvLw8Ke9yuoedKd+mTZtQW1uL3/zmN9f9HE/dv4643t+gO74TcrBhwwY8/vjj2LBhg1MX8dZUVlbizJkzPeIetuTo0aNS3nvLPdy9ezdOnz7drv8kePL+CSEwb948bNmyBV999RViY2Ove45snoVua24rQxs3bhRqtVqsW7dOHD9+XMyZM0eEhIQIg8EghBBi5syZ4g9/+IOU/uuvvxbe3t5i+fLl4sSJE+KVV14RPj4+Ii8vT0qzdOlSERISIj755BPx/fffi+nTp4vY2FhRXV3d7eUTwvUyLl26VKhUKrF582ZRWloqLWazWQghhNlsFs8//7zQ6/WioKBAfPnll+K2224TN998s6ipqZF9+RYtWiQ+//xzcebMGXH48GHx0EMPCV9fX3Hs2DEpjZzuoavlcxg7dqx48MEHm+2X2/0zm83iyJEj4siRIwKA+POf/yyOHDkizp49K4QQ4g9/+IOYOXOmlP6nn34S/v7+4oUXXhAnTpwQa9asEUqlUmzfvl1Kc73fWXdztYwffvih8Pb2FmvWrHH6G6yoqJDSPPfccyI3N1cUFBSIr7/+WiQnJ4t+/fqJ8vJy2ZfvzTffFFu3bhWnTp0SeXl54plnnhFeXl7iyy+/lNLI6R66Wj6H3/zmN2LUqFEtXlNO92/u3LkiODhY5ObmOn3fqqqqpDRyfRb26gBFCCFWr14tBg4cKFQqlbjrrrvEN998Ix275557xKxZs5zSf/TRR+KWW24RKpVK3HrrreLf//6303GbzSb+53/+R4SHhwu1Wi3uu+8+cfLkye4oSqtcKeOgQYMEgGbLK6+8IoQQoqqqSkycOFH0799f+Pj4iEGDBonZs2d77B9/IVwr34IFC6S04eHhYsqUKeK7775zup7c7qGr39EffvhBABBffPFFs2vJ7f45upw2XRxlmjVrlrjnnnuanTNy5EihUqnETTfdJN57771m123rd9bdXC3jPffc02Z6IexdqyMiIoRKpRIDBgwQDz74oDh9+nT3FuwqV8v3pz/9SQwePFj4+vqK0NBQMWHCBPHVV181u65c7mFHvqMVFRXCz89PvP322y1eU073r6WyAXD6u5Lrs1BxtQBEREREstFr26AQERFRz8UAhYiIiGSHAQoRERHJDgMUIiIikh0GKERERCQ7DFCIiIhIdhigEBERkewwQCEiIiLZYYBCREREssMAhYiIiGSHAQoRERHJDgMUIiIikp3/D4u6UNMcMhavAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for ma, co in ((c.mask, \"k\"), (~c.mask, \"w\")):\n", " plt.errorbar(cx[ma], n[ma], n[ma] ** 0.5, fmt=\"o\", color=co, mec=\"k\", ecolor=\"k\")\n", "plt.stairs(np.diff(integral(xe, *[p.value for p in m.init_params])), xe,\n", " ls=\":\", label=\"init\")\n", "plt.stairs(np.diff(integral(xe, *m.values)), xe, label=\"fit\")\n", "plt.legend();" ] }, { "cell_type": "markdown", "id": "heard-jurisdiction", "metadata": {}, "source": [ "Now we fix the background and fit only the signal parameters." ] }, { "cell_type": "code", "execution_count": null, "id": "accredited-dispute", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 15.03 (χ²/ndof = 0.9) Nfcn = 252
EDM = 6.92e-09 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 s 1.017e3 0.035e3 0
1 b 870 40 0 yes
2 mu 0.995 0.004
3 sigma 0.100 0.004 0
4 tau 1.05 0.07 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
s b mu sigma tau
s 1.2e+03 0 -4.088e-3 (-0.030) 27.177e-3 (0.218) -0.485 (-0.196)
b 0 0 0 0 0.000
mu -4.088e-3 (-0.030) 0 1.55e-05 -0.001e-3 (-0.059) -0.013e-3 (-0.047)
sigma 27.177e-3 (0.218) 0 -0.001e-3 (-0.059) 1.3e-05 -0.032e-3 (-0.126)
tau -0.485 (-0.196) 0.000 -0.013e-3 (-0.047) -0.032e-3 (-0.126) 0.00509
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:12.521177\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 15.03 (χ²/ndof = 0.9) │ Nfcn = 252 │\n", "│ EDM = 6.92e-09 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ s │ 1.017e3 │ 0.035e3 │ │ │ 0 │ │ │\n", "│ 1 │ b │ 870 │ 40 │ │ │ 0 │ │ yes │\n", "│ 2 │ mu │ 0.995 │ 0.004 │ │ │ │ │ │\n", "│ 3 │ sigma │ 0.100 │ 0.004 │ │ │ 0 │ │ │\n", "│ 4 │ tau │ 1.05 │ 0.07 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬───────────────────────────────────────────────────┐\n", "│ │ s b mu sigma tau │\n", "├───────┼───────────────────────────────────────────────────┤\n", "│ s │ 1.2e+03 0 -4.088e-3 27.177e-3 -0.485 │\n", "│ b │ 0 0 0 0 0.000 │\n", "│ mu │ -4.088e-3 0 1.55e-05 -0.001e-3 -0.013e-3 │\n", "│ sigma │ 27.177e-3 0 -0.001e-3 1.3e-05 -0.032e-3 │\n", "│ tau │ -0.485 0.000 -0.013e-3 -0.032e-3 0.00509 │\n", "└───────┴───────────────────────────────────────────────────┘" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c.mask = None # remove mask\n", "m.fixed = False # release all parameters\n", "m.fixed[\"b\"] = True # fix background amplitude\n", "m.values[\"s\"] = 100 # do not start at the limit\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "timely-afternoon", "metadata": {}, "source": [ "Finally, we release all parameters and fit again to get the correct uncertainty estimates." ] }, { "cell_type": "code", "execution_count": null, "id": "recreational-pride", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 15.03 (χ²/ndof = 1.0) Nfcn = 323
EDM = 3.22e-07 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 s 1.02e3 0.04e3 0
1 b 867 35 0
2 mu 0.995 0.004
3 sigma 0.100 0.004 0
4 tau 1.05 0.08 0
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
s b mu sigma tau
s 1.38e+03 -0.4e3 (-0.280) -7.764e-3 (-0.052) 38.617e-3 (0.275) -0.452 (-0.162)
b -0.4e3 (-0.280) 1.23e+03 7.764e-3 (0.055) -38.616e-3 (-0.291) 0.452 (0.172)
mu -7.764e-3 (-0.052) 7.764e-3 (0.055) 1.63e-05 -0.001e-3 (-0.090) -0.015e-3 (-0.050)
sigma 38.617e-3 (0.275) -38.616e-3 (-0.291) -0.001e-3 (-0.090) 1.43e-05 -0.045e-3 (-0.160)
tau -0.452 (-0.162) 0.452 (0.172) -0.015e-3 (-0.050) -0.045e-3 (-0.160) 0.00564
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:12.849460\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 15.03 (χ²/ndof = 1.0) │ Nfcn = 323 │\n", "│ EDM = 3.22e-07 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬───────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼───────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ s │ 1.02e3 │ 0.04e3 │ │ │ 0 │ │ │\n", "│ 1 │ b │ 867 │ 35 │ │ │ 0 │ │ │\n", "│ 2 │ mu │ 0.995 │ 0.004 │ │ │ │ │ │\n", "│ 3 │ sigma │ 0.100 │ 0.004 │ │ │ 0 │ │ │\n", "│ 4 │ tau │ 1.05 │ 0.08 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬────────────────────────────────────────────────────────┐\n", "│ │ s b mu sigma tau │\n", "├───────┼────────────────────────────────────────────────────────┤\n", "│ s │ 1.38e+03 -0.4e3 -7.764e-3 38.617e-3 -0.452 │\n", "│ b │ -0.4e3 1.23e+03 7.764e-3 -38.616e-3 0.452 │\n", "│ mu │ -7.764e-3 7.764e-3 1.63e-05 -0.001e-3 -0.015e-3 │\n", "│ sigma │ 38.617e-3 -38.616e-3 -0.001e-3 1.43e-05 -0.045e-3 │\n", "│ tau │ -0.452 0.452 -0.015e-3 -0.045e-3 0.00564 │\n", "└───────┴────────────────────────────────────────────────────────┘" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m.fixed = None\n", "m.migrad()" ] }, { "cell_type": "markdown", "id": "correct-notice", "metadata": {}, "source": [ "We get the same result as before. Since this was an easy problem, we did not need these extra steps, but doing this can be helpful to fit lots of histograms without adjusting each fit manually." ] }, { "cell_type": "markdown", "id": "tough-europe", "metadata": {}, "source": [ "### Weighted histograms\n", "\n", "The cost functions for binned data also support weighted histograms. Just pass an array with the shape `(n, 2)` instead of `(n,)` as the first argument, where the first number of each pair is the sum of weights and the second is the sum of weights squared (an estimate of the variance of that bin value)." ] }, { "cell_type": "markdown", "id": "gothic-regular", "metadata": {}, "source": [ "## Least-squares fits\n", "\n", "A cost function for a general weighted least-squares fit (aka chi-square fit) is also included. In statistics this is called non-linear regression.\n", "\n", "In this case you need to provide a model that predicts the y-values as a function of the x-values and the parameters. The fit needs estimates of the y-errors. If those are wrong, the fit may be biased. If your data has errors on the x-values as well, checkout the tutorial about automatic differentiation, which includes an application of that to such fits." ] }, { "cell_type": "code", "execution_count": null, "id": "packed-penguin", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def model(x, a, b):\n", " return a + b * x ** 2\n", "\n", "rng = np.random.default_rng(4)\n", "\n", "truth = 1, 2\n", "x = np.linspace(0, 1, 20)\n", "yt = model(x, *truth)\n", "ye = 0.4 * x**5 + 0.1\n", "y = rng.normal(yt, ye)\n", "\n", "plt.plot(x, yt, ls=\"--\", label=\"truth\")\n", "plt.errorbar(x, y, ye, fmt=\"ok\", label=\"data\")\n", "plt.legend(loc=\"upper left\");" ] }, { "cell_type": "code", "execution_count": null, "id": "arabic-plant", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 25.29 (χ²/ndof = 1.4) Nfcn = 29
EDM = 2.27e-22 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 a 0.99 0.04
1 b 2.04 0.15
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
a b
a 0.00139 -0.0037 (-0.658)
b -0.0037 (-0.658) 0.0226
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:13.384447\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 25.29 (χ²/ndof = 1.4) │ Nfcn = 29 │\n", "│ EDM = 2.27e-22 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬──────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼──────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ a │ 0.99 │ 0.04 │ │ │ │ │ │\n", "│ 1 │ b │ 2.04 │ 0.15 │ │ │ │ │ │\n", "└───┴──────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───┬─────────────────┐\n", "│ │ a b │\n", "├───┼─────────────────┤\n", "│ a │ 0.00139 -0.0037 │\n", "│ b │ -0.0037 0.0226 │\n", "└───┴─────────────────┘" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = cost.LeastSquares(x, y, ye, model)\n", "m1 = Minuit(c, a=0, b=0)\n", "m1.migrad()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "7ad47416", "metadata": {}, "source": [ "We can also plot the standard visualization manually and add further graphs to the figure." ] }, { "cell_type": "code", "execution_count": null, "id": "former-dominant", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABIm0lEQVR4nO3deVxU9f7H8ddhWGVzRUFQ3Mu1zBY11Mq0bNEIs02tbNebZr9bedtXu2Wlt73MbNHMCK2ULLMMUnO33EtFBQR3WUbZZs7vD5IiQQEZzgy8n4/HPOIsM/PhOPfOm+/5LoZpmiYiIiIiFvGyugARERGp2xRGRERExFIKIyIiImIphRERERGxlMKIiIiIWEphRERERCylMCIiIiKWUhgRERERS3lbXUBFOJ1O9uzZQ3BwMIZhWF2OiIiIVIBpmuTk5BAREYGXV/ntHx4RRvbs2UNUVJTVZYiIiEgVpKamEhkZWe5xjwgjwcHBQPEvExISYnE1IiIiUhHZ2dlERUWVfI+XxyPCyPFbMyEhIQojIiIiHuZUXSzUgVVEREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIKIyIiIqfBbrdjGAaGYWC3260uxyMpjIiIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIKIyIiImIphRERERGxlMKIiIiIWEphRERERCylMCIiIiKWUhgRERERSymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYSmFERERELKUwIiIi4qbsdjuGYWAYBna73epyXEZhREREpI5yl7CjMCIiIiKW8ra6ABEREbGO4eOHl289S2tQGBEREamjnKZJoyvG4xfRgU0ZOZzbNtCSOip1m+att96ia9euhISEEBISQs+ePfnmm29O+pzPP/+cM844A39/f7p06UJiYuJpFSwiIiLV47UfUwjs0BtbQCh5RU7L6qhUGImMjOSFF15g9erVrFq1iosvvpjB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hHAiIuKxKvr9XacmpHA4HIwdO7bsobd/7hs3btxp37KJjY1l06ZNJduJiYmkpKQoiOC6VikREfFcdSqMJCcnk5aWVu5x0zRJTU0lOTn5tN/r73/p9+nTR3/581er1N9bjADS09OJi4tTIBERqaPqVBjJyChvwrKqnScVV1OtUiIi4nnqVBip6JBaDb2tfjXZKiUiIp6lToURDb21jlqlRESkPHUqjGjorXXUKiUiIuWpU2EEike6xMfHExERUWp/ZGRktQzrlbKpVUpERMpT58IIaOitFdQqJSIi5amTYQQ09NYKapUSEZGyuHyhvLoqMDCwzGGsdV1sbCz9+/fXDKwiIlKizraMiHXUKiUiIn+nMCIiIiKWUhgRERERSymMiIiIiKUURkRERMRSCiMiIiJiqTo7tFdDb0VERNxDnQ0jYh0FQRER+TvdphERERFLKYyIiIiIpRRGRERExFIKIyIiImIphRERERGxlMKIiIiIWEphRERERCylMCIiIiKWUhgRERERSymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQs5W11ARVhmiYA2dnZFlciIiIiFXX8e/v493h5PCKM5OTkABAVFWVxJSIiIlJZOTk5hIaGlnvcME8VV9yA0+lkz549BAcHYxhGtb1udnY2UVFRpKamEhISUm2vK6XpOtccXeuaoetcM3Sda4Yrr7NpmuTk5BAREYGXV/k9QzyiZcTLy4vIyEiXvX5ISIg+6DVA17nm6FrXDF3nmqHrXDNcdZ1P1iJynDqwioiIiKUURkRERMRSdTqM+Pn58cQTT+Dn52d1KbWarnPN0bWuGbrONUPXuWa4w3X2iA6sIiIiUnvV6ZYRERERsZ7CiIiIiFhKYUREREQspTAiIiIilqr1YeSNN94gOjoaf39/zj//fFasWHHS8z///HPOOOMM/P396dKlC4mJiTVUqWerzHV+7733iImJoUGDBjRo0ID+/fuf8t9F/lLZz/Rxs2bNwjAMhgwZ4toCa4nKXucjR44wevRowsPD8fPzo3379vr/jwqo7HWePHkyHTp0ICAggKioKO6//37y8vJqqFrPlJSUxFVXXUVERASGYTB37txTPmfx4sV0794dPz8/2rZty/Tp011bpFmLzZo1y/T19TWnTZtmbty40bzjjjvM+vXrm3v37i3z/CVLlpg2m8188cUXzU2bNpmPPvqo6ePjY65fv76GK/cslb3ON954o/nGG2+Ya9euNTdv3mzecsstZmhoqJmWllbDlXueyl7r41JSUszmzZubMTEx5uDBg2umWA9W2eucn59v9ujRwxw0aJD5888/mykpKebixYvNdevW1XDlnqWy13nGjBmmn5+fOWPGDDMlJcX89ttvzfDwcPP++++v4co9S2JiovnII4+YCQkJJmDOmTPnpOfv2LHDrFevnjl+/Hhz06ZN5muvvWbabDZzwYIFLquxVoeR8847zxw9enTJtsPhMCMiIsyJEyeWef51111nXnHFFaX2nX/++eZdd93l0jo9XWWv8z8VFRWZwcHB5ocffuiqEmuNqlzroqIis1evXubUqVPNkSNHKoxUQGWv81tvvWW2bt3aLCgoqKkSa4XKXufRo0ebF198cal948ePN3v37u3SOmuTioSRBx980OzUqVOpfcOGDTMHDhzosrpq7W2agoICVq9eTf/+/Uv2eXl50b9/f5YtW1bmc5YtW1bqfICBAweWe75U7Tr/09GjRyksLKRhw4auKrNWqOq1fvrppwkLC2PUqFE1UabHq8p1/uqrr+jZsyejR4+madOmdO7cmeeffx6Hw1FTZXucqlznXr16sXr16pJbOTt27CAxMZFBgwbVSM11hRXfhR6xUF5VHDhwAIfDQdOmTUvtb9q0KVu2bCnzOZmZmWWen5mZ6bI6PV1VrvM/PfTQQ0RERJzw4ZfSqnKtf/75Z95//33WrVtXAxXWDlW5zjt27OCHH37gpptuIjExkW3btnHvvfdSWFjIE088URNle5yqXOcbb7yRAwcOcOGFF2KaJkVFRdx999385z//qYmS64zyvguzs7M5duwYAQEB1f6etbZlRDzDCy+8wKxZs5gzZw7+/v5Wl1Or5OTkMHz4cN577z0aN25sdTm1mtPpJCwsjHfffZdzzjmHYcOG8cgjj/D2229bXVqtsnjxYp5//nnefPNN1qxZQ0JCAvPnz+eZZ56xujQ5TbW2ZaRx48bYbDb27t1bav/evXtp1qxZmc9p1qxZpc6Xql3n4yZNmsQLL7zA999/T9euXV1ZZq1Q2Wu9fft2du7cyVVXXVWyz+l0AuDt7c3WrVtp06aNa4v2QFX5TIeHh+Pj44PNZivZd+aZZ5KZmUlBQQG+vr4urdkTVeU6P/bYYwwfPpzbb78dgC5dumC327nzzjt55JFH8PLS39fVobzvwpCQEJe0ikAtbhnx9fXlnHPOYdGiRSX7nE4nixYtomfPnmU+p2fPnqXOB1i4cGG550vVrjPAiy++yDPPPMOCBQvo0aNHTZTq8Sp7rc844wzWr1/PunXrSh5XX301F110EevWrSMqKqomy/cYVflM9+7dm23btpWEPYDff/+d8PBwBZFyVOU6Hz169ITAcTwAmlpmrdpY8l3osq6xbmDWrFmmn5+fOX36dHPTpk3mnXfeadavX9/MzMw0TdM0hw8fbj788MMl5y9ZssT09vY2J02aZG7evNl84oknNLS3Aip7nV944QXT19fXjI+PNzMyMkoeOTk5Vv0KHqOy1/qfNJqmYip7nXfv3m0GBwebY8aMMbdu3WrOmzfPDAsLM5999lmrfgWPUNnr/MQTT5jBwcHmp59+au7YscP87rvvzDZt2pjXXXedVb+CR8jJyTHXrl1rrl271gTMV155xVy7dq25a9cu0zRN8+GHHzaHDx9ecv7xob3//ve/zc2bN5tvvPGGhvaertdee81s0aKF6evra5533nnmL7/8UnKsb9++5siRI0udP3v2bLN9+/amr6+v2alTJ3P+/Pk1XLFnqsx1btmypQmc8HjiiSdqvnAPVNnP9N8pjFRcZa/z0qVLzfPPP9/08/MzW7dubT733HNmUVFRDVfteSpznQsLC80nn3zSbNOmjenv729GRUWZ9957r3n48OGaL9yD/Pjjj2X+f+7xazty5Eizb9++JzznrLPOMn19fc3WrVubH3zwgUtrNExTbVsiIiJinVrbZ0REREQ8g8KIiIiIWEphRERERCylMCIiIiKWUhgRERERSymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIilvp/1t8uAJJM2poAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m1.visualize()\n", "plt.plot(c.x, model(c.x, *truth), ls=\"--\", label=\"truth\");" ] }, { "cell_type": "markdown", "id": "fa93b807", "metadata": {}, "source": [ "We can also fit a multivariate model, in this case we fit a plane in 2D." ] }, { "cell_type": "code", "execution_count": null, "id": "c253cfa6", "metadata": {}, "outputs": [ { "data": { "image/png": "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PQaLxeLOl0IIIYRIoqG7pT3T5cCtXS2zZ89GYWEhtmzZArPZjHnz5mHBggX46quvnN5v/vz5eOGFF2z/9/Hxsf1bEARMnz4dERER2L17NwoLCzFnzhyoVCq88sorbnsthBBCiNsxZp1cub+Hc1vhcfz4cWzatAn79u3D8OHDAQDvvPMOrr76arz55puIiopyeF8fHx9EREQ0e9vmzZtx7NgxbN26FeHh4Rg8eDBefPFFPPHEE3juueegVqvd8noIIYQQ4jq3dbWkpKQgICDAVnQAQFJSEniex969e53e98svv0RISAj69++PxYsXo7a21u5xBwwYgPDwcNu8qVOnwmAw4OjRo80+ntFohMFgsJsIIYQQT+NKN8vl0t3ithYPvV6PsLAw+ydTKhEUFAS9Xu/wfrfffjtiYmIQFRWFw4cP44knnkBmZibWrVtne9yLiw4Atv87etylS5fi+eefd+XlEEIIIe7XCc5qaXPh8eSTT+K1115zuszx48fbHWjBggW2fw8YMACRkZGYPHkyTp8+je7du7frMRcvXoxFixbZ/m8wGBAdHd3ujIQQQghpnzYXHo8++ijmzp3rdJn4+HhERESguLjYbr7FYkFZWZnD4zeak5iYCADIyspC9+7dERERgdTUVLtlioqKAMDh42o0Gmg0mlY/JyGEECIHTrROrtzf07W58AgNDUVoaGiLy40ePRoVFRVIS0vDsGHDAAC///47RFG0FROtkZ6eDgCIjIy0Pe7LL7+M4uJiW1fOli1boNVq0bdv3za+GkIIIcSDdIKuFrcdXNqnTx8kJydj/vz5SE1Nxa5du7Bw4ULMmjXLdkZLfn4+evfubWvBOH36NF588UWkpaUhOzsbGzduxJw5czB+/HgMHDgQADBlyhT07dsX//jHP3Do0CH89ttvePrpp/HAAw9I3qohWASYTJ47foggiDAZzXLHcEgUGYxmC5iHnv4ligz1Js/NxxiDsc7k2fnqzR6dr95kgSh6bj6j2XPzAYDRYoEgeu5PbKNggcWD83VWbh3H48svv8TChQsxefJk8DyPmTNnYtmyZbbbzWYzMjMzbWetqNVqbN26FW+//TZqamoQHR2NmTNn4umnn7bdR6FQ4KeffsJ9992H0aNHw9fXF3feeafduB/udmBPFr5d8RfS954GY0B0XAhmzB6D5JnDoVDIPxjsscO5WLvqL6T+dRKiyBAeGYDrZyXiultHQqWSf5T8zNxirNi8D78fzIJFFBGq88Ut4wdh9qSh8Nao5I6H7KIyrNi6D7+mZcJkERDg64Wbxw7EnEnDoPXxkjseinJK8e3bv2LL17tgrDXBR+uNaXPG46Z/JSMwTCd3PJSdr8a3X+zGpo0HUVNjhMZLhSnTB+HWf4xFWIT8+Qy19Vi1PQ3f7T6Mitp6qJUKTBvSC/+cPAJxYUFyx0OtyYzP/zqANbsPoaSqBkqex1UDEnDXxJHoHdVya7O7GS0WfH4oHZ8dSkeewQCe4zApLh73Dh+BoU6GSZCKIIr46sQhrDyShjOV5eAAjOsSg3sHJ2Jslxi547WoM1yrhWOe+nPEjQwGA3Q6HSorK6HVatt035+/ScU7L20Ez3O2XyIcZx2z5Yop/fHka7fIWnz8uTkDS//zHTiOgyg0Vvocx2HQiDi8tGy2rMVHyrFzeOiDDWCMQbjolxzPcegdHYqPH74ZPl7yjcVyOLsQ89/9DmaL0CRfdIgOqx+ZhUA/b9nynTuRj0envoraqjq795dX8AgM0+LtrU8jtKt8O89ifSX+dfcKlJdXQxQa159CwcPHV43/fTgP3eLk23mWVddizrK1yDtfCfGiTZ+C56BWKvHJfTdhQEzrj0HraDX1Jsz78FucKChpko/nOLw3bwbG9JRv52m0WDBvw3rszcu1a9FXcBwYgGXTpuPqnj3ligdBFLFw24/YdPYkgMZeBwXHQWAMr1wxBbf3GdTmx3Vln9HW5xh53YtQqtr/A8dirkfqxmfcmtVV8v88v4zo88rw7ss/AoBd82fD9uGvzRnY9uNBOaIBAAwVtXhjyTowxux2SoC12fbQvrPY8PUemdIBRrMFT6z4GYIo2u3UAUBkDCdyS/DRL/LlE0QRj6/8GSaz0Gy+vPOVeGvDDpnSWb0+/+MmRQcAiIKIimID/u/h1TIls3r71Z+aFB2AtduvpsaI157fIE+wC978YQfyy+yLDgAQLnT7Pfb5z7J2bby/dU+TogOw5rOIIh778mcYzfJ17648eACp+XlNDiMQGANjDI/+9isq6+tlyQYA3588il/PnmxymIRwYX0+vXML8qoqZcnWWp1hHA8qPNrg1+/3g+Mc387xHH74Sr4d59af02Exiw4PLmKM4Yc1e2Xrc9964BSqao0OR/QVGcP3O4/AJNOGdc+JHBSWVzXZ6DcQRIZf007AUCvPhvXUwWycPpzTpOhoIAgi9m89gqKcUomTWekLKrB/z+kmRUcDUWA4daIQWZmFEiezqqypx6aDmU2KygYiYygoM2DPqRyJk1kZzRZ8t/eIw88fY0BlnRFbjpySOFnD8zOsTk93nA+ASRDw/bFj0ga7yKqjB+BkEw0AWHPisCRZiGNUeLTB6cxCp7+GmMiQnVUkYSJ7Z04WgeOdf+1KigyorTFKlMjeyfwSKFvohqquN6GowvmFBN0lM78EihbWn1kQkV1cLlEie2cyclteiAHZx/LcH6YZZ0+37rN/+pQ835HskrIWDzTkOQ6Z+SUSJbJXVFmNGqPJ6TJKBY/MQnnyVZlMKKpx/t3kOQ7HS+XJBwCZZSVOT+oQGcOx88VOlvAArAMmDyf/kYaXEY1GBY7jnLYYqFQKCRNd8twaZYvVPiBfRrVK2arWFo1Mx6BoVAqHv+bsl5Mnn9qrdQfeqmQ6QFetbt16ae1yHU2tbPl5GRg0cn0/lC0/L2MMmla8DndQt+LYNQ4cNAoZt4G8AoLguMWUBwcvhWfv9jrDwaXU4tEGiRN6O91x8goeoyfJN5bIqCt6QXDQDA8AvILDkMR4qGXaMV05IN5hMzdgPUi3Z5dQhOp8JUzV6Ip+8S1e2DE8wA8JkcHSBLrEkIl9oVA6/8r6+Huh36geEiWy129QN3j7OD8wWKnkMSwxXqJE9npGhSBU28JniwHj+8ZJE+gS4To/9IgIdtqdK4gME/rKs/68lCqMiY4G7ySghYlIim/fCNMdYUpsAhSc4++ICIakmAQJE5HmUOHRBldOHYCQcC345ir/C9/FmXPGShvqIsPHJCCme1jz+WDtY5819wqJUzXqFxOOoQldHHZnMAbcPW0kOGdbXjfqFhqAqwb3cLphvfuqkVDw8nxtAkK0mDb3SqfdaTMfTIbGW56zgry8VLjp9tEOb+c4DlfPGAatzkfCVI0UPI/5SSMd3s5zHKYM6omuwQHShboIx3G4Z3Kiw+JXwXMYEd8V/aPlO+vmvhGJDn98KTgOPYNDMD42VtpQF5k/cAQYWLMtvwqOQ5SfP66O7yV5rjZhzPXJw1Hh0QYaLxVe++SfCAmznqLEK3jwPAeO46BWKfGfN2choY9857ErFDxeefcf6BoTbPs/z3PgeA4KBY9FS2Zg8Eh5fi0B1g3rfxdciz7drBf1U/A8eM56miDHAY/cOB5XDZXvVDwAeGH2FCT2jLbL11Ao3T1lJG4eN1DOeLhn6W0Yd511JGCFkre+txdaQa7+5wTc9tg1csbD7fOuwNUzhgKwfv4aPnsAMH5SH9zzrylyxsOtYwfhrskjADSeotpQSCb2iMbzs+TNlzyoFx6dfgU4DrbvRkO+fl3D8faca2XNN7ZbNyy9agoUF7LxHAfFhUI9PjAIq264wWnh7m4DQiPwftJ1UCsU4AC7fJG+/vhy+q3wkqmrqrU6w1ktNI5HO85zNpst2L3tOPb9lQmzWUDPfl1w1fVDoQ2Q55fcpQRBROrOk9i9/QRMRjNiE8Ix9bohCArxlzsaAOupyKmZOdh84CRq6k2IDQ/EjDH9ERnkGeecM8Zw8Ew+ftmficraenQN1uGG0f3RLTRA7mg2mWlnsW3tblQUGxDSJRBTZo9DbN+ucseyOZtVhM0/H0JpsQEBQX646uqB6CljUX6pcyXlWL83A/llBmh9vDB9aG8MiYuSrbXtUoXlBnyfmoHs0nL4adSYMrAnRiV0A9/Cwc9SKampwTdHM5BZWgovpRJTExIwITZOttbAS5XX1+G7kxk4XKKHildgUrd4TI3rARXfvuNPpBzHY/S0F1wexyPl12c9ehwPKjw89I0hhBDiGSQtPJI7oPDY5NmFh2e3ORFCCCGdCJ3VQgghhBDSgajFgxBCCPEUIrNOrtzfw1HhQQghhHgKV0cf9fy6gwoPQgghxFNwcPEYjw5L4j50jAchhBBCJEMtHoQQQoincHX00ctghAwqPAghhBAPQafTEkIIIYR0IGrxIIQQQjxFJzirhVo8CCGEEA/BMeby5A7Z2dm46667EBcXB29vb3Tv3h1LliyByWRq82NRiwchhBBCnDpx4gREUcSHH36IhIQEZGRkYP78+aipqcGbb77ZpseiwoMQQgjxFOKFyZX7u0FycjKSk5Nt/4+Pj0dmZiY++OADKjwIIYSQy5Wr3SXu6mppTmVlJYKCgtp8Pyo8CCGEkL8Zg8Fg93+NRgONRtNhj5+VlYV33nmnza0dAB1cSgghhHgO1gETgOjoaOh0Otu0dOnSZp/uySefBMdxTqcTJ07Y3Sc/Px/Jycm4+eabMX/+/Da/RGrxIIQQQjxFB41cmpubC61Wa5vtqLXj0Ucfxdy5c50+ZHx8vO3fBQUFmDhxIsaMGYOPPvqoXRGp8CCEEEI8REeNXKrVau0KD0dCQ0MRGhraqsfOz8/HxIkTMWzYMKxcuRI8375OEyo8CCGEEOJUfn4+JkyYgJiYGLz55psoKSmx3RYREdGmx6LCgxBCCPEUHnqRuC1btiArKwtZWVno2rXrJU/Ztuekg0sJIYQQD8GJrk/uMHfuXDDGmp3aigoPQgghhEjGrYVHWVkZZs+eDa1Wi4CAANx1112orq52uHx2drbD03m+/fZb23LN3b5mzRp3vhRCCCHE/Rq6WlyZPJxbj/GYPXs2CgsLsWXLFpjNZsybNw8LFizAV1991ezy0dHRKCwstJv30Ucf4Y033sC0adPs5q9cudJu+NaAgIAOz08IIYRIqhNcndZthcfx48exadMm7Nu3D8OHDwcAvPPOO7j66qvx5ptvIioqqsl9FApFk6Nj169fj1tuuQV+fn528wMCAtp8JC0hhBBC5OW2rpaUlBQEBATYig4ASEpKAs/z2Lt3b6seIy0tDenp6bjrrrua3PbAAw8gJCQEI0eOxIoVK5we4GI0GmEwGOwmQgghxNO05rL3LU2ezm0tHnq9HmFhYfZPplQiKCgIer2+VY/x6aefok+fPhgzZozd/BdeeAGTJk2Cj48PNm/ejPvvvx/V1dV46KGHmn2cpUuX4vnnn2/fC2lGfa0Jf27Yj32/H4XFZEGPwTFIvn0MgiMCOuw5XGEyWbDzj+PYvSMTxnoz4hLCMO36oYiMCpQ7GgBAsAjYsyUDO39OR211Pbp2D8e020eja/dwuaMBAESRYf/e0/hj6zEYDHWIjArAtGsGo3sPz8jHGEN6eg62bs5AeXkNQsO0SE4egN59osBxnNzxwBjDkbN6bEw5iuKKagRrfTA9sQ+G9ejqEfkAIDO3GBt2HkV+aSV0fl5IHtELo/vGguc9I99ZfRnW7zyCc0Xl8PVSI2lYT4wfEA+lwjPOB8gvrcS6nUeQlVcKL40KEwd3x6TBCVCrPGOEhiJDNb5NO4KjBcVQKXlc2SMOV/fvBW+1Su5oLfPQ02k7EsfaeC7Mk08+iddee83pMsePH8e6deuwevVqZGZm2t0WFhaG559/Hvfdd5/Tx6irq0NkZCSeeeYZPProo06XffbZZ7Fy5Urk5uY2e7vRaITRaLT932AwIDo6GpWVla0a2e1i2ScK8NSt76C82ACO48AYA89z4HgOj/7fHEy8cUSbHq+j6Qsq8MSDn6Mwvxw8z0EUrfkYAx54NBnX3SRvvvISA566/X1knygEr+AhCqLt7z8evRq3PzxV1nw11fV46t9rcSwjz7b+FAoegiDihptH4L6HrpJ152k0mvHckvVI3XsaCgUHQWjMl5TUD48/eQ0UMu6cLIKIJat/w6/7TkDBcxBEZvs7rn8c3lhwDTQy7pwYY3hj7Xas+SO9Sb7B3aPwfw/OgL93x11Iqz0++nkPlv+UYsvFcxxExtCjSwg+eGgmgrQ+suZb80c63vjmD3Dche3LhXxdQnT48OGZiArRyZrvx8PH8eT638AYIDIGjrPui0P8fLDyzpnoERbS5sc0GAzQ6XTt2me09TkmDlsMpdKr3Y9jsdTjj7Slbs3qqjZvoR599FEcP37c6RQfH4+IiAgUFxfb3ddisaCsrKxVx2Z89913qK2txZw5c1pcNjExEXl5eXbFxcU0Go1t+NjWDiPbnPpaI5669R1UnreemdNQs4kig2AR8caDq5F5MLtdj90RBIuIxf/6AsX6Sluuhr+MMbz75q/Yl5IlWz7GGJ7/5yfIOVVkzSWIdn8//+8v+H39ftnyAcCrL2zEiWP5ABrXn3Ah3/pv92H9t/tkywYA7/zfZuzbdwYAIAj2+bZtO4pVK/+SLRsAfPDjbmzaZ72glNCw/i783X00G6+v/UO2bADw5dYDWPNHOoCm+Q6fLcSzKzfJFQ0A8NPeY1j+UwqAxlzihe3MmcLzeGT5xnaNm9BRdmWcxetr/7Du1C/Jpy8z4IFl6yGIbhpIohXScwvx+PebIIjMlqthdZXX1OGfq9ehzmSWLV+rMACiC5PnN3i0vfAIDQ1F7969nU5qtRqjR49GRUUF0tLSbPf9/fffIYoiEhMTW3yeTz/9FNddd12rxpBPT09HYGBgh17ytzl/rNuP8mKDbUd5KY7j8P0H29yawZk9u04iP7fMtiO6FM9zWPvZLolTNTq2/ywy0885WX/A2nc2y7ZhzTlXij27T9k2qM1Z88VuCBZ5NqxlZdX47bcjYA7yMQas+34f6upMEiezqq034es/Djrc7omMYWPKUZQZaiXN1cAsCFj1m+PCURQZ/jx0BueKyiVM1Ygxhk9/TYWj9jRBZDhythCHzxY6WML9VmzaB95Bi58gMpwrLsfOI2clTtVo5e40h91lAmMoqa7BLxmZzd7uKTrDMR5ua5Pt06cPkpOTMX/+fKSmpmLXrl1YuHAhZs2aZTujJT8/H71790ZqaqrdfbOysrBjxw7cfffdTR73xx9/xCeffIKMjAxkZWXhgw8+wCuvvIIHH3zQXS/FZt+2DHBO+oBFQUTqliNuz+FI6u4sp83soshw+OA5GOvlqfj3/X4MCqXjfIwBOaeKUHqhxUZq+/acbrEbpbysBmfPFDtdxl3S0rKdFkUAUF9vxtGMPIkS2Us/U4B6k8XpMoLIsPdEjkSJ7J3KK0VZVZ3TZTjO+qteDvryKpwrKnf6g1XBc7Lt2OtMZhzMyre1JDRHwfP4S6b1BwB/nDxjaylqDscB20/Kl69VGFwcx0PuF9Ayt3a2fvnll1i4cCEmT54Mnucxc+ZMLFu2zHa72WxGZmYmamvtfwGtWLECXbt2xZQpU5o8pkqlwnvvvYdHHnkEjDEkJCTgrbfewvz58935Uqx5TRaHvzYbWCyC23M4fG6zANaKT51FECFHL7bFLLTq+Aiz0fnOy13MZsHWH9zScnKwtPJ5zTJ9Blv7vCYPzseBg1mmFq3WPC/HcTALMn3+HLRU2mOyff4AOGztbcAYZFt/pJFbC4+goCCHg4UBQGxsbLPN6q+88gpeeeWVZu+TnJxsN3CYlHoMisGB7ccd/urkeA7d+0dLnKpRj96R2PrrIccLcEBEZAB8fNTShbpIwoDoFneefjofhEYFSBPoEj17RbbYoqBSK9AtJliiRPZ69mz52CiOAxIS5Dn7plfXsFYVbn1j5MkXHxkElVLhdMcoMoY+MWEOb3enyCB/+HtrUFXX/LFqgHXn36ebPOvPz0uNyCB/FJZVOVxGFJls+QCgT2QYjhUWO2yV4TkO/aI84+w0hzrBWS2ecW7WZWLa7LHWLbsDTGS4/u4J0gW6RNK0gVCrlQ4jcgBuuDVRtrMyxiQPhDbI12F3Fc9zuGbOOKjU8pz1MHhYLKK6BDjsI+Z5DlclD4CvX/uPOHdF94Rw9OkT5TTf6DE9EBoqz5HsEUH+GD8gHgoH+RQ8h4HxkejRpe1nFXQEfx8vTE/s4zAfz3PoFhaAEb3k+fGgUipw0/iBDo+h4DkOgX7emDQ4QeJkVhzH4bZJQ51uXzRqJaaP6iNprovNGTXEaVcQxwG3DBsgYaJ2cOXA0obJw1Hh0QahXQLxyFt3gOM4u2MpGnakSbeOkvV0Wj9/Lzz10kzwPG+f78KGInFsT1w3U758ao0ST3/4T6hUSvAXH4vCWTP2GRaHWQ9eJVs+nufwzEsz4e2thkJhv3XlOA4xcaGYf99kmdJZLf7PtdDqvJsUHzzPISxci0cWydMa2OCp2ycjPNC/yc6T5zkE+Hrjxbny5nvkpisQFxHUJJ+C5+CjUeH1BdfIerr0/KtHYUB8JDgOdgeZKngOKqUCbyy4BiqlQrZ8t04chHH94wDY/wZT8Bx4nserd0+X9XTkawb0xvWDrIXPxe+xgufAAXhlxhSEa/0c3JtIpc3jePwduHpO9rF9Z/D9B1uxb9tRCBYB3ftH4/q7J2DSTSM9YoCkrMxCfPfVHuzafhxms4BusSG47uaRmHbtEKcHd0olN6sI33/4O/788SCMtSZExobgmjnjMP2OsVB7yT/Aj76wAt+v3Ystm46gtsaE0DB/XDNjKGbMHAFvmbqpLnb+fDW++zYVm349jKqqOgQG+uKaa4fghhuHQ6v1ljseKqrr8PUfB7F+ZwbOG2qg8/PG9WP64fZJQxCqk3+jX1Nvwto/0vHdn4dRVF4FX28NrhnVB3ckDZV9DAoAMJot+G7HYXzzZzrySivhrVZh6vBe+EfSMMRGBMkdDxZBxIZdGVjzRzqy9WVQKRWYNCQBc64ahl7R8nRTXUwUGTYePo7P9x7E8cISKHkeE3rGYd7YYRgS3fRSHa0h5Tgek/s/DqWi/cWbRTBiW8brHj2OBxUeLr4xjDGPKDYcoXyuoXyuoXyuoXyu6ah8khYe/R5zvfA4+oZHFx7y//y9zHnylw6gfK6ifK6hfK6hfK7x9HydlWcMrE8IIYSQTnFWCxUehBBCiKfoBIUHdbUQQgghRDLU4kEIIYR4ChFweMGe1t7fw1HhQQghhHgIVy/0djlcJI4KD0IIIcRT0DEehBBCCCEdh1o8CCGEEE8hMoBzodWihQtdegIqPAghhBBPQV0thBBCCCEdh1o8CCGEEI/hYosHPL/FgwoPQgghxFNQVwshhBBCSMehFg9CCCHEU4gMLnWX0FkthBBCCGk1JlonV+7v4airhRBCCCGSoRYPQgghxFN0goNLqfAghBBCPAUd40EIIYQQyXSCFg86xoMQQgghkqEWD0IIIcRTMLjY4tFhSdyGCg9CCCHEU1BXCyGEEEJIx6EWD0IIIcRTiCIAFwYBEz1/ADEqPAghhBBP0Qm6WqjwaKeKEgPS/zwOi9mCnkPi0K13lNyR7FQb6nAgJQumegvieoajex/PyldXY8SBlCzU1RjRNTYUvQZ2BcdxcseyMdWbkLblMKrKqhEZH47+43p7VD6LRcC+w+dQbqhFWJA/hvSLhkLhOT2ngiDiwNFclJRVIUjni+EDukGpVMgdy0YUGY5k5KFQXwGtvzeGD4uFWu05m0PGGI5k63GupBw+GjVG9+4GH41a7lh2jucV45S+FF4qJUb17Aatt5fckexkFZ/HsfwiqJQKJMZHI8jXR+5I5AK3fdNefvll/Pzzz0hPT4darUZFRUWL92GMYcmSJfj4449RUVGBsWPH4oMPPkCPHj1sy5SVleHBBx/Ejz/+CJ7nMXPmTPzf//0f/Pz83PVS7JjqTfjg8S/x22d/QbAItvkDxvXCvz+cj4iYUElyOCJYBKx8ezN++DIFZlNjvh79uuDfr9yEmIQwGdMBoihizYfb8e0nf6K+zmybH5MQhkdevgm9BnSVMZ31M7jhnV+xesla1FTW2uZHdg/HIx/egyGTBsiYzuqX7Rl4d/WfqKyqs80LDfbDo3cl4YqRCTIms/pz7yn879NtKCmrts0L0Hpj4ZwJmDahn4zJrNIOZuO/b29CYWGlbZ6vrwb/vPMK3HD9UNkLzCPn9Hj2y99wRl9mm+etVuGuq0bg7ikjZc+XpS/Ff77+Dcfyim3z1EoFZl8xBA9NGwulzAVwXlklnlr3G/Zn59vmKXkeNw7rh8VXT4BG5TkFZrM6QYuH2z4hJpMJN998M+67775W3+f111/HsmXLsHz5cuzduxe+vr6YOnUq6uvrbcvMnj0bR48exZYtW/DTTz9hx44dWLBggTteQhOMMbx4x7v4ddWfdkUHABxLOYVFSS+hotggSRZH/u+5Dfh+1U67ogMATp8owKP/+BD6vDIH95TGyv9txufvbLUrOgAg90wJnrjzY5zNLJQpmdV3//0R7z+80q7oAAD92WIsTn4ZGTuPy5TM6uc/MvDyu5vsig4AKDlfjSdf34Cd+0/LlMxq5/7TeOqNH+yKDgCoMNThpXd/xS/bM2RKZnX4SC6eeOob6PX239OaGiPeeX8rvv1+n0zJrE7ml+CuZd8gu6jcbn6dyYx3f96NZT/ukimZVd75Ssx55xtkFpTYzTdZBKz6Yz9e+G6rTMmsSqtrMPvjtTiYU2A33yKK+G5/Bh5Z8zOYp++YReb65OHcVng8//zzeOSRRzBgQOt+ITLG8Pbbb+Ppp5/G9ddfj4EDB+Kzzz5DQUEBNmzYAAA4fvw4Nm3ahE8++QSJiYkYN24c3nnnHaxZswYFBQXOn6ADHNpxAqmbDoE188YKgojyYgM2fLDZ7TkcOXtSj83rDzRb8IoCQ12NCWs/2SF9sAtK9JX4fuVfzd4migxmswWfv7tN4lSNaiprsPLZNc3exkQGJor4+IkvJE7VyGwW8O7q7Q5v5zjgnVV/yLZhZYzh/1b+Dmc/yN9d/ScslxTtUlr+8R8QRThcRytW/4WaGqPEqRq9+/NuWAQRooN8q7btR3FldbO3SeHjbamoNZkgNLMNZADWpx5Flr5U+mAXfL77IMqqa5vNJzKG7ZlnkHZRSwiRh8d0Cp89exZ6vR5JSUm2eTqdDomJiUhJSQEApKSkICAgAMOHD7ctk5SUBJ7nsXfvXoePbTQaYTAY7Kb22Pr1TiiUjleZKIjY9Jl8O/ZtG9Od9vMLgoitPxxs0lojlT9/PgRnjcSiwLDnj+OoqqxzspT7/LUuFWaj2eHtoshwLOUkCs8WSZiqUeqhbBiq6x3ezhiQp6/A8Sy9hKkaHTulR0FRpdOW3sqqOqQePiddqIvk55fj+IlCp4WZ0WjBX7tOSpiqUWVNPXYcPdPsTvNiv+4/IVEie2ZBwE9px53mU/AcNu6Xr1Xw+7QMCE7eXwXPYcPBYxImajvGRJcnT+cxhYdeb91YhoeH280PDw+33abX6xEWZn+MglKpRFBQkG2Z5ixduhQ6nc42RUdHtytjmb4CgsX5m1pZWtWux+4I5eerwFoYts5ssqCu1iRRInvlpdXgeecfOSYyGMprJEpkr1xf0aoDNMv1Fe4P04zzFa1bL61drqOVtTafTO9va/IpFBzK5fr81dS12D3P8xxKq2qdL+QmtUYzTK340XK+Sp71BwDltc5/tAgiQ4mM+VqFudjN4uldSWhj4fHkk0+C4zin04kT8lTjzixevBiVlZW2KTc3t12PExIV5LTFAwACw3TteuyOEByqBZy2KQAaLxW8fTXSBLpEUJg/hBbOMed5DgHB0hwofKngqMAWC0vrckESpGkqJKh16yW0lct1tJAg31YtJ1++lp9XEBhCgv0lSNNUkJ83+BYOHBVFhjCdPOvPV6OGVysOzJQrHwCE+Dr/DCp4DhEy5muVhoNLXZk8XJsKj0cffRTHjx93OsXHx7crSEREBACgqMi+GbuoqMh2W0REBIqLi+1ut1gsKCsrsy3THI1GA61Waze1x5Q7rnC6Y+J5DtPmXtmux+4ISdcPgSg4yafgMeWGobKddjnxmkFOyyJewWPsVf3g6y/PaXnjbkyExsdxUcYreAwY3wfhMp25NHJgDAK03g5v5zggpksQesWHO1zGnXp3j0B0ZKDTYzyCdD4YPjBGulAXiYwMwIB+XcDzjgN6eakwbmwPh7e7k9bHCxMHdIfCST6OA6YN6yVhqkZKBY/rhvd1mk8QGa4b3lfCVPZuGt7fafEmiAwzhsp/ZlVn16Y9UGhoKHr37u10Uqvbd655XFwcIiIisG1b48GFBoMBe/fuxejRowEAo0ePRkVFBdLS0mzL/P777xBFEYmJie163rboN7oHrrhhRLOns/EKHqHRwbj+3qvcnsORbt3DcM2s5tcDr+Dhr/PGLXfLVxgFhWpx270Tm72N5zlovFT4x4NJzd4uBR9/b9z96uxmb+N4DgoljwWv/0PiVI2USgUe+efkZm/jOIADh4f/OUm20y05jsMjd00GB85h8fGvf06S9XTLexdMAs/zDouPe+6eAG9v+cbLWHjNGGhUSof5FkxNRIi2dS1L7jB/8khovb0cFh+3jR2EuDB5WgQB4B9jhiBC59dsPg5Acv+eGBwdKX2wthBF1ycP57YtQE5ODtLT05GTkwNBEJCeno709HRUVzcekd27d2+sX78egHWj9fDDD+Oll17Cxo0bceTIEcyZMwdRUVGYMWMGAKBPnz5ITk7G/PnzkZqail27dmHhwoWYNWsWoqLcP0AWx3F4csW9uPHBqVB7qS66ARh+1QD8b+vT0MrUTdDg/v9cg388MBnePvYbz/5DY/C/L+9BaIR8XUEAMPuByVjwxNXwu+SXe4/+XfDfL+9BdLy844zMWDgNj35yHwLD7ddTbL9ovPn7c+g9Up5fww2SxvXGS49ei7BLugO6RgTiv0/PxMhBsfIEuyBxcCze/M+N6BIRaDc/PMQfL/37OiSN7S1TMqu+faLwvzdmITYmxG5+YKAPHn90GmZcN1SmZFbxEcFY/fCt6Bdt32ql9dHg8RuvxD3Jo2RKZhUR6I8vHpqFoXFd7Ob7aFS4f+poPDmj+R8WUgnw8cZXC2ZhbEKMXeuql1KJueOG4bWbk2UfB6VFnaCrhWNuOvdu7ty5WL16dZP5f/zxByZMmGB9co7DypUrMXfuXACNA4h99NFHqKiowLhx4/D++++jZ8+etvuXlZVh4cKFdgOILVu2rE0DiBkMBuh0OlRWVra726XGUIeM3ZmwmCxIGByL8G4hLd9JQvV1JmTsz4bRaEZsj3B0ifGsfCaTBRn7z9pGLo3pIU/3gCOCRcCRv47bRi7tPjjWozZYoshw+ES+beTSvj0iPCofYwzHTulRXFaFIJ0PBvRy3sUhNcYYTmUVoVBfCa2/FwYO8KyRXwHgVEEpzpWUw89LjaHxXaD2sIGvskvKcVp/HhqVEsPiu8BbrWr5ThLKL6/E8cISqBQ8hsV0gZ9X+49t64h9RmufY7Lf7VBy7W91szATtlV/5dasrnJb4eHJpPgQEUII+XuQsvCY5DPL5cLj99o1Hr1/86wSmhBCCOnMGANaGBah5ft7Ns9qWySEEELI3xq1eBBCCCGeQmQA9/du8aDCgxBCCPEUjAFw4ZTYy6DwoK4WQgghhEiGWjwIIYQQD8FEBuZCV8vlcKIqFR6EEEKIp2AiXOtq8fyRS6nwIIQQQjxEZ2jxoGM8CCGEECKZTtni0VARGgwGmZMQQgjxdA37CilaEyzM6FJ3iQXmDkzjHp2y8KiqqgIAREdHy5yEEELI5aKqqgo6nXsutKlWqxEREYGd+l9cfqyIiIh2XyleCp3yWi2iKKKgoAD+/v4uXVjLYDAgOjoaubm5Hjsm/qUoszQos3Qux9yUWRodlZkxhqqqKkRFRYHn3XeEQn19PUwmk8uPo1ar4eXl1QGJ3KNTtnjwPI+uXbt22ONptdrL5ovYgDJLgzJL53LMTZml0RGZ3dXScTEvLy+PLhg6Ch1cSgghhBDJUOFBCCGEEMlQ4eECjUaDJUuWQKPRyB2l1SizNCizdC7H3JRZGpdj5s6gUx5cSgghhBB5UIsHIYQQQiRDhQchhBBCJEOFByGEEEIkQ4UHIYQQQiRDhYcTL7/8MsaMGQMfHx8EBAS06j6MMTz77LOIjIyEt7c3kpKScOrUKbtlysrKMHv2bGi1WgQEBOCuu+5CdXV1h+Vu6+NnZ2eD47hmp2+//da2XHO3r1mzRpbMADBhwoQmee699167ZXJycjB9+nT4+PggLCwMjz32GCwWiyyZy8rK8OCDD6JXr17w9vZGt27d8NBDD6GystJuuY5cz++99x5iY2Ph5eWFxMREpKamOl3+22+/Re/eveHl5YUBAwbgl1/sh29uzefbVW3J/PHHH+OKK65AYGAgAgMDkZSU1GT5uXPnNlmfycnJsmVetWpVkzyXDhrlaeu5ue8ax3GYPn26bRl3r+cdO3bg2muvRVRUFDiOw4YNG1q8z/bt2zF06FBoNBokJCRg1apVTZZp63eEdABGHHr22WfZW2+9xRYtWsR0Ol2r7vPqq68ynU7HNmzYwA4dOsSuu+46FhcXx+rq6mzLJCcns0GDBrE9e/awv/76iyUkJLDbbrutw3K39fEtFgsrLCy0m55//nnm5+fHqqqqbMsBYCtXrrRb7uLXJWVmxhi78sor2fz58+3yVFZW2r2u/v37s6SkJHbw4EH2yy+/sJCQELZ48WJZMh85coTdeOONbOPGjSwrK4tt27aN9ejRg82cOdNuuY5az2vWrGFqtZqtWLGCHT16lM2fP58FBASwoqKiZpfftWsXUygU7PXXX2fHjh1jTz/9NFOpVOzIkSO2ZVrz+XZFWzPffvvt7L333mMHDx5kx48fZ3PnzmU6nY7l5eXZlrnzzjtZcnKy3fosKyvrkLztybxy5Uqm1Wrt8uj1ertlPG09nz9/3i5vRkYGUygUbOXKlbZl3L2ef/nlF/af//yHrVu3jgFg69evd7r8mTNnmI+PD1u0aBE7duwYe+edd5hCoWCbNm36//buPaSp948D+MfbVprLZOali6TVspppxEyJBimmFQj9URaUXcgoowtmamCWBhlJ/RHdCK3+qESiMChLhPyjWFZmN7Vwsq6gYZd5K/Py/v7Rb+fnaVPnzpxGnxcEnc959uxzPnu284DPswlthloHZh888bDChQsXrJp49Pb2ws/PD8eOHRNi379/h1wux9WrVwEAtbW1ICI8fvxYaFNaWgonJyd8+vRJcq726j8sLAybNm0Sxax5s9vC1py1Wi127drV7/nbt2/D2dlZ9KF+5swZKBQKdHZ2jkjOfyouLoZMJkNXV5cQs1edNRoNUlJShOOenh4EBATgyJEjFtuvWrUKy5cvF8UiIiKwdetWANaNb0fn/Kfu7m54enri0qVLQiwpKQkJCQl2yc+SoeY82OfJ31DnEydOwNPTE21tbUJsuOvclzXvkX379mHOnDmi2OrVq7F06VLhWGodmG34Ty12ZDAYqLGxkWJiYoTY+PHjKSIignQ6HRER6XQ68vLyogULFghtYmJiyNnZmSorKyXnYI/+q6qq6NmzZ7R582azcykpKaRUKkmj0VBhYaFdfiZaSs6XL18mpVJJc+fOpczMTOro6BD1q1arydfXV4gtXbqUWlpaqKamZsRy7stoNJJCoSBXV/HPJkmt869fv6iqqko0Fp2dnSkmJkYYi5auqW97ot/1MrW3ZnxLYUvOf+ro6KCuri7y9vYWxSsqKmjixImkUqlo27Zt9OXLF8n5Ssm5ra2NAgMDacqUKZSQkCAaj39DnQsKCigxMZE8PDxE8eGqsy0GG8/2qAOzzT/5I3HDpbGxkYhIdKMzHZvONTY20sSJE0XnXV1dydvbW2gjNQep/RcUFFBISAhFRUWJ4jk5ObRkyRJyd3ensrIy2r59O7W1tdHOnTtHJOe1a9dSYGAgBQQE0IsXLyg9PZ3evHlD169fF/q19FqYzo1Ezn01NzdTbm4uJScni+L2qHNzczP19PRYvP7Xr1/3e02DjV1TrL82UtiS85/S09MpICBAdDOJi4ujlStX0rRp06ihoYH2799P8fHxpNPpyMXFxeE5q1QqKiwspNDQUDIajZSfn09RUVFUU1NDkydPHvV1fvToEb169YoKCgpE8eGssy36G88tLS3048cP+vbtm+Txxmzzz008MjIy6OjRowO2qauro1mzZjkoI+tYm7dUP378oCtXrlBWVpbZub6x8PBwam9vp2PHjvV7QxzunPvesNVqNfn7+1N0dDQ1NDRQcHCwTX06qs4tLS20fPlymj17Nh08eFB0bqh1Zr/l5eVRUVERVVRUiBZrJiYmCv9Xq9UUGhpKwcHBVFFRQdHR0Q7PMzIykiIjI4XjqKgoCgkJoXPnzlFubq7D8xmqgoICUqvVpNFoRPHRVmc2ev1zE4/U1FTasGHDgG2CgoJs6tvPz4+IiJqamsjf31+INzU1UVhYmNDm8+fPosd1d3fT169fhcdLydvW/k2uXbtGHR0dtH79+kHbRkREUG5uLnV2dlr8LQRH5dw3HyIivV5PwcHB5OfnZ7ZCvampiYio334dkXNrayvFxcWRp6cn3bhxg9zc3AZsP1idLVEqleTi4iJcr0lTU1O/+fn5+Q3Y3prxLYUtOZvk5+dTXl4elZeXU2ho6IBtg4KCSKlUkl6vl3xDlJKziZubG4WHh5Neryei0V3n9vZ2KioqopycnEGfx551tkV/41mhUNDYsWPJxcVF8mvHbDTSi0z+BkNdXJqfny/EjEajxcWlT548EdrcvXvX7otLbe1fq9Wa7bLoz+HDhzFhwgSbczWxV03u378PIsLz588B/H9xad8V6ufOnYNCocDPnz9HJGej0YiFCxdCq9Wivb3dqueytc4ajQY7duwQjnt6ejBp0qQBF5euWLFCFIuMjDRbXDrQ+JZqqDkDwNGjR6FQKKDT6ax6jg8fPsDJyQklJSWS8wVsy7mv7u5uqFQq7NmzB8DorTPw+7NQLpejubl50Oewd537IisXl86dO1cUW7NmjdniUimvHbMNTzwG8O7dO1RXVwtbS6urq1FdXS3aYqpSqXD9+nXhOC8vD15eXigpKcGLFy+QkJBgcTtteHg4Kisrcf/+fcyYMcPu22kH6v/jx49QqVSorKwUPa6+vh5OTk4oLS016/PmzZs4f/48Xr58ifr6epw+fRru7u44cODAiOSs1+uRk5ODJ0+ewGAwoKSkBEFBQVi8eLHwGNN22tjYWDx79gx37tyBj4+PXbfTDiVno9GIiIgIqNVq6PV60bbD7u5uAPatc1FREeRyOS5evIja2lokJyfDy8tL2OWzbt06ZGRkCO0fPHgAV1dX5Ofno66uDtnZ2Ra30w42vqUYas55eXmQyWS4du2aqJ6m92hrayv27t0LnU4Hg8GA8vJyzJ8/HzNmzJA8+bQ150OHDuHu3btoaGhAVVUVEhMTMWbMGNTU1IiuazTV2WTRokVYvXq1WdwRdW5tbRU+g4kIx48fR3V1Nd69ewcAyMjIwLp164T2pu20aWlpqKurw6lTpyxupx2oDmx48MRjAElJSSAis3/37t0T2tD/vnPBpLe3F1lZWfD19YVcLkd0dDTevHkj6vfLly9Ys2YNxo0bB4VCgY0bN4omM1IN1r/BYDC7DgDIzMzElClT0NPTY9ZnaWkpwsLCMG7cOHh4eGDevHk4e/asxbaOyPn9+/dYvHgxvL29IZfLMX36dKSlpYm+xwMA3r59i/j4eIwdOxZKpRKpqamirauOzPnevXsWxxMRwWAwALB/nU+ePImpU6dCJpNBo9Hg4cOHwjmtVoukpCRR++LiYsycORMymQxz5szBrVu3ROetGd9SDSXnwMBAi/XMzs4GAHR0dCA2NhY+Pj5wc3NDYGAgtmzZYvcby1By3r17t9DW19cXy5Ytw9OnT0X9jbY6A8Dr169BRCgrKzPryxF17u/9Y8ozKSkJWq3W7DFhYWGQyWQICgoSfVabDFQHNjycADvsh2SMMcYYswJ/jwdjjDHGHIYnHowxxhhzGJ54MMYYY8xheOLBGGOMMYfhiQdjjDHGHIYnHowxxhhzGJ54MMYYY8xheOLBGGOMMYfhiQdjjDHGHIYnHowxxhhzGJ54MMYYY8xheOLBGGOMMYf5D8xDL3FU7v3iAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def model2(x_y, a, bx, by):\n", " x, y = x_y\n", " return a + bx * x + by * y\n", "\n", "# generate a regular grid in x and y\n", "x = np.linspace(-1, 1, 10)\n", "y = np.linspace(-1, 1, 10)\n", "X, Y = np.meshgrid(x, y)\n", "x = X.flatten()\n", "y = Y.flatten()\n", "\n", "# model truth\n", "Z = model2((x, y), 1, 2, 3)\n", "\n", "# add some noise\n", "rng = np.random.default_rng(1)\n", "Zerr = 1\n", "Z = rng.normal(Z, Zerr)\n", "\n", "plt.scatter(x, y, c=Z)\n", "plt.colorbar();" ] }, { "cell_type": "code", "execution_count": null, "id": "766174be", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 71.61 (χ²/ndof = 0.7) Nfcn = 34
EDM = 5.66e-16 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 a 0.93 0.10
1 bx 1.87 0.16
2 by 2.93 0.16
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
a bx by
a 0.01 0.000 0.000
bx 0.000 0.0245 0.000
by 0.000 0.000 0.0245
" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 71.61 (χ²/ndof = 0.7) │ Nfcn = 34 │\n", "│ EDM = 5.66e-16 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬──────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼──────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ a │ 0.93 │ 0.10 │ │ │ │ │ │\n", "│ 1 │ bx │ 1.87 │ 0.16 │ │ │ │ │ │\n", "│ 2 │ by │ 2.93 │ 0.16 │ │ │ │ │ │\n", "└───┴──────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌────┬──────────────────────┐\n", "│ │ a bx by │\n", "├────┼──────────────────────┤\n", "│ a │ 0.01 0.000 0.000 │\n", "│ bx │ 0.000 0.0245 0.000 │\n", "│ by │ 0.000 0.000 0.0245 │\n", "└────┴──────────────────────┘" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c2 = cost.LeastSquares((x, y), Z, Zerr, model2)\n", "m2 = Minuit(c2, 0, 0, 0)\n", "m2.migrad()" ] }, { "cell_type": "markdown", "id": "2f3f181e", "metadata": {}, "source": [ "Multivariate fits are difficult to check by eye. Here we use color to indicate the function value.\n", "\n", "To guarantee that plot of the function and the plot of the data use the same color scale, we use the same normalising function for pyplot.pcolormesh and pyplot.scatter." ] }, { "cell_type": "code", "execution_count": null, "id": "bdf44a64", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xm = np.linspace(-1, 1, 100)\n", "ym = np.linspace(-1, 1, 100)\n", "Xm, Ym = np.meshgrid(xm, ym)\n", "xm = Xm.flatten()\n", "ym = Ym.flatten()\n", "\n", "qm = plt.pcolormesh(Xm, Ym, model2((xm, ym), *m2.values).reshape(Xm.shape))\n", "plt.scatter(c2.x[0], c2.x[1], c=c2.y, edgecolors=\"w\", norm=qm.norm)\n", "plt.colorbar();" ] }, { "cell_type": "markdown", "id": "complete-howard", "metadata": {}, "source": [ "### Robust least-squares\n", "\n", "The built-in least-squares function also supports robust fitting with an alternative loss functions. See the documentation of `iminuit.cost.LeastSquares` for details. Users can pass their own loss functions. Builtin loss functions are:\n", "\n", "* `linear` (default): gives ordinary weighted least-squares\n", "* `soft_l1`: quadratic ordinary loss for small deviations ($\\ll 1\\sigma$), linear loss for large deviations ($\\gg 1\\sigma$), and smooth interpolation in between\n", "\n", "Let's create one outlier and see what happens with ordinary loss." ] }, { "cell_type": "code", "execution_count": null, "id": "seasonal-singles", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 364.9 (χ²/ndof = 20.3) Nfcn = 29
EDM = 9.85e-22 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 a 1.23 0.04
1 b 1.45 0.15
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
a b
a 0.00139 -0.0037 (-0.658)
b -0.0037 (-0.658) 0.0226
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:14.860788\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 364.9 (χ²/ndof = 20.3) │ Nfcn = 29 │\n", "│ EDM = 9.85e-22 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬──────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼──────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ a │ 1.23 │ 0.04 │ │ │ │ │ │\n", "│ 1 │ b │ 1.45 │ 0.15 │ │ │ │ │ │\n", "└───┴──────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───┬─────────────────┐\n", "│ │ a b │\n", "├───┼─────────────────┤\n", "│ a │ 0.00139 -0.0037 │\n", "│ b │ -0.0037 0.0226 │\n", "└───┴─────────────────┘" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c.y[3] = 3 # generate an outlier\n", "\n", "m3 = Minuit(c, a=0, b=0)\n", "m3.migrad()" ] }, { "cell_type": "code", "execution_count": null, "id": "available-organic", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABRtUlEQVR4nO3dd3RUdf7/8edkUkmDAGlM6Ehv0gSkqBEUCxgDVtS1rLogIK6uqGtZV/G3rgpf17JWbIgYA7oaUUSBqFhAonQEAoSQ0Eklbeb+/hhIiCSQMjM3k7we5+SYe+fOve9cIvPicz/FYhiGgYiIiIhJfMwuQERERJo2hRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUvmYXUBMOh4O9e/cSGhqKxWIxuxwRERGpAcMwyMvLIzY2Fh+f6ts/vCKM7N27l7i4OLPLEBERkTrIyMjAZrNV+7pXhJHQ0FDA+cOEhYWZXI2IiIjURG5uLnFxceWf49XxijBy4tFMWFiYwoiIiIiXOVMXC3VgFREREVMpjIiIiIipFEZERETEVAojIiIiYiqFERERETGVwoiIiIiYSmFERERETKUwIiIiIqZSGBERERFTKYyIiIiIqRRGRERExFQKIyIiImIqhRERERExlcKIiIhIPRQUFGCxWLBYLBQUFJhdjldSGBERERFTKYyIiIiIqRRGRERExFQKIyIiImIqhRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUCiMiIiJiKoURERERMZXCiIiIiJhKYURERERMpTAiIiIiplIYEREREVMpjIiIiIipFEZERETEVAojIiIiYiqFERERETGVwoiIiIiYSmFERERETKUwIiIiIqZSGBERERFTKYyIiIiIqRRG5BQFBQVYLBYsFgsFBQVmlyMiIo2cwoiIiIiYSmFERERETKUwIiIiIqZSGBEREWmgmkofPoURERGRJqqhhB2FERERETGVwoiIiIiYSmFETmG328u/X7lyZaVtERERV6tVGHnppZfo06cPYWFhhIWFMXToUD7//PPTvufDDz+kW7duBAYG0rt3b1JSUupVsLhXcnIyPXr0KN8eN24c7du3Jzk52cSqRESkMatVGLHZbDz11FOsWbOG1atXc/755zN+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hRERERExlcKIiIiImEphREREREylMCIiIiKmUhgRERERUymMiIiIiKkURkRERMRUCiMiIiJiKoURERERMZWv2QXUhGEYAOTm5ppciYiIiNTUic/tE5/j1fGKMJKXlwdAXFycyZWIiIhIbeXl5REeHl7t6xbjTHGlAXA4HOzdu5fQ0FAsFovLzpubm0tcXBwZGRmEhYW57LxSme6z5+hee4bus2foPnuGO++zYRjk5eURGxuLj0/1PUO8omXEx8cHm83mtvOHhYXpF90DdJ89R/faM3SfPUP32TPcdZ9P1yJygjqwioiIiKkURkRERMRUTTqMBAQE8MgjjxAQEGB2KY2a7rPn6F57hu6zZ+g+e0ZDuM9e0YFVREREGq8m3TIiIiIi5lMYEREREVMpjIiIiIipFEZERETEVI0+jLzwwgu0b9+ewMBAhgwZwk8//XTa4z/88EO6detGYGAgvXv3JiUlxUOVerfa3OdXX32VESNG0KJFC1q0aEF8fPwZ/1ykQm1/p09YsGABFouFCRMmuLfARqK29/no0aNMmTKFmJgYAgICOOuss/T3Rw3U9j7PmTOHrl27EhQURFxcHHfffTdFRUUeqtY7rVy5kssuu4zY2FgsFguLFy8+43uWL1/O2WefTUBAAJ07d2bevHnuLdJoxBYsWGD4+/sbb7zxhrFhwwbjtttuM5o3b27s27evyuO/++47w2q1Gv/617+MjRs3Gg899JDh5+dnrFu3zsOVe5fa3udrr73WeOGFF4y1a9camzZtMm666SYjPDzc2LNnj4cr9z61vdcnpKenG23atDFGjBhhjB8/3jPFerHa3ufi4mJj4MCBxrhx44xvv/3WSE9PN5YvX26kpaV5uHLvUtv7/N577xkBAQHGe++9Z6SnpxtffPGFERMTY9x9990erty7pKSkGA8++KCRnJxsAMaiRYtOe/yOHTuMZs2aGTNnzjQ2btxoPP/884bVajWWLFnithobdRgZPHiwMWXKlPJtu91uxMbGGrNnz67y+EmTJhmXXHJJpX1Dhgwxbr/9drfW6e1qe5//qKyszAgNDTXeeustd5XYaNTlXpeVlRnDhg0zXnvtNePGG29UGKmB2t7nl156yejYsaNRUlLiqRIbhdre5ylTphjnn39+pX0zZ840hg8f7tY6G5OahJH77rvP6NmzZ6V9V111lTF27Fi31dVoH9OUlJSwZs0a4uPjy/f5+PgQHx/PqlWrqnzPqlWrKh0PMHbs2GqPl7rd5z8qLCyktLSUiIgId5XZKNT1Xv/jH/8gMjKSW265xRNler263OdPPvmEoUOHMmXKFKKioujVqxdPPvkkdrvdU2V7nbrc52HDhrFmzZryRzk7duwgJSWFcePGeaTmpsKMz0KvWCivLg4ePIjdbicqKqrS/qioKDZv3lzle7Kzs6s8Pjs72211eru63Oc/+tvf/kZsbOwpv/xSWV3u9bfffsvrr79OWlqaBypsHOpyn3fs2MHXX3/NddddR0pKCtu2beMvf/kLpaWlPPLII54o2+vU5T5fe+21HDx4kHPPPRfDMCgrK+OOO+7ggQce8ETJTUZ1n4W5ubkcO3aMoKAgl1+z0baMiHd46qmnWLBgAYsWLSIwMNDschqVvLw8Jk+ezKuvvkqrVq3MLqdRczgcREZG8sorrzBgwACuuuoqHnzwQV5++WWzS2tUli9fzpNPPsmLL77IL7/8QnJyMp999hmPP/642aVJPTXalpFWrVphtVrZt29fpf379u0jOjq6yvdER0fX6nip230+4d///jdPPfUUX331FX369HFnmY1Cbe/19u3b2blzJ5dddln5PofDAYCvry9btmyhU6dO7i3aC9XldzomJgY/Pz+sVmv5vu7du5OdnU1JSQn+/v5urdkb1eU+//3vf2fy5MnceuutAPTu3ZuCggL+/Oc/8+CDD+Ljo39fu0J1n4VhYWFuaRWBRtwy4u/vz4ABA1i2bFn5PofDwbJlyxg6dGiV7xk6dGil4wGWLl1a7fFSt/sM8K9//YvHH3+cJUuWMHDgQE+U6vVqe6+7devGunXrSEtLK/+6/PLLOe+880hLSyMuLs6T5XuNuvxODx8+nG3btpWHPYCtW7cSExOjIFKNutznwsLCUwLHiQBoaJk1lzHls9BtXWMbgAULFhgBAQHGvHnzjI0bNxp//vOfjebNmxvZ2dmGYRjG5MmTjfvvv7/8+O+++87w9fU1/v3vfxubNm0yHnnkEQ3trYHa3uennnrK8Pf3N5KSkoysrKzyr7y8PLN+BK9R23v9RxpNUzO1vc+7d+82QkNDjalTpxpbtmwxPv30UyMyMtL45z//adaP4BVqe58feeQRIzQ01Hj//feNHTt2GF9++aXRqVMnY9KkSWb9CF4hLy/PWLt2rbF27VoDMJ599llj7dq1xq5duwzDMIz777/fmDx5cvnxJ4b23nvvvcamTZuMF154QUN76+v555832rZta/j7+xuDBw82fvjhh/LXRo0aZdx4442Vjl+4cKFx1llnGf7+/kbPnj2Nzz77zMMVe6fa3Od27doZwClfjzzyiOcL90K1/Z0+mcJIzdX2Pn///ffGkCFDjICAAKNjx47GE088YZSVlXm4au9Tm/tcWlpqPProo0anTp2MwMBAIy4uzvjLX/5iHDlyxPOFe5Fvvvmmyr9zT9zbG2+80Rg1atQp7+nXr5/h7+9vdOzY0XjzzTfdWqPFMNS2JSIiIuZptH1GRERExDsojIiIiIipFEZERETEVAojIiIiYiqFERERETGVwoiIiIiYSmFERERETKUwIiIiIqZSGBERERFTKYyIiIiIqRRGRERExFQKIyIiImKq/w9Zyr48uxX4rgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m3.visualize()\n", "plt.plot(c.x, model(c.x, 1, 2), ls=\"--\", label=\"truth\");" ] }, { "cell_type": "markdown", "id": "helpful-train", "metadata": {}, "source": [ "The result is distorted by the outlier. Note that the error did not increase! The size of the error computed by Minuit does **not** include mismodelling.\n", "\n", "We can repair this with by switching to \"soft_l1\" loss." ] }, { "cell_type": "code", "execution_count": null, "id": "cheap-truth", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 54.09 (χ²/ndof = 3.0) Nfcn = 69
EDM = 4.31e-06 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 a 1.00 0.05
1 b 2.04 0.23
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
a b
a 0.00285 -0.0086 (-0.707)
b -0.0086 (-0.707) 0.0524
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:15.437584\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 54.09 (χ²/ndof = 3.0) │ Nfcn = 69 │\n", "│ EDM = 4.31e-06 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬──────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼──────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ a │ 1.00 │ 0.05 │ │ │ │ │ │\n", "│ 1 │ b │ 2.04 │ 0.23 │ │ │ │ │ │\n", "└───┴──────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───┬─────────────────┐\n", "│ │ a b │\n", "├───┼─────────────────┤\n", "│ a │ 0.00285 -0.0086 │\n", "│ b │ -0.0086 0.0524 │\n", "└───┴─────────────────┘" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c.loss = \"soft_l1\"\n", "m3.migrad()" ] }, { "cell_type": "code", "execution_count": null, "id": "regulated-default", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABKBklEQVR4nO3deVxU9f7H8deZAQZkc0cQFDVzz7xqpYZaebXsVkZY2WJ7t9LS6tdidbPdbt3u1dteVpZlpojWLdJMM3FfktwtFRUQcGfYl5nz+4MkSTFA4DDwfj4e87ieZWY+c5rrvP2e72KYpmkiIiIiYhGb1QWIiIhIw6YwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIKIyIiImIphRERERGxlMKIiIiIWMrL6gIqwu12s3//fgIDAzEMw+pyREREpAJM0yQrK4uwsDBstvLbPzwijOzfv5+IiAiryxAREZEqSE5OJjw8vNzjHhFGAgMDgZIPExQUZHE1IiIiUhFOp5OIiIjS3/HyeEQYOX5rJigoSGFERETEw/xZFwt1YBURERFLKYyIiIiIpRRGRERExFIKIyIiImIphRERERGxlMKIiIiIWEphRERERCylMCIiIiKWUhgRERERSymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIyBnIycnBMAwMwyAnJ8fqcjySwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIKIyIiImIphRERERGxlMKIiIiIWEphRERERCylMCIiIiKWUhgRERERSymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYSmFERERELKUwIifJycnBMAwMwyAnJ8fqckREpJ5TGBERERFLKYyIiIiIpRRGRERExFIKIyIiInVUQ+nDpzAiIiLSQNWVsKMwIiIi0uAZlr67l6XvLiIiIpYK7H0FvhE9yC104e9vTQ1qGZGTuFyu0j8vXbq0zLaIiNQfCTsP0+TiO2nUqT8Lth6wrI5KhZG3336bc845h6CgIIKCgujXrx/ffvvtaZ8ze/ZsOnfujK+vLz169CA+Pv6MCpaaFRcXR9euXUu3hw8fTmRk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AZgwYQIPPfRQ6bbT6SQiIuKU556JIwve4F/AMxXuRHn6Gg4fPFCh901LS6vQeSIiIg1BjYeRfv36ER8fX2bfwoUL6dev/KGkDocDh8NR7vG6KjQ0tFrPExERaQgq3UkhOzubxMREEhMTgZKhu4mJiezbtw8oadUYPXp06fn33HMPu3fv5tFHH2X79u289dZbzJo1iwcffLB6PkEV/XHo7YnbVRUVFUV4eHi5w2cNwyAiIoKoqKgzfi8REZH6otJhZN26dfTq1YtevUqmBH/ooYfo1asXTz/9NFByC+J4MAFo164d33zzDQsXLqRnz5689tprTJ061dJhvXFxcXTt2rV0e/jw4URGRhIXF3dGr2u325kyZQrASYHk+PbkyZPLnW9ERESkITJMD5hK0ul0EhwcTGZmJkFBQWf0WnFxccTExJw0g+bxsBAbG1uhydz+7D0eeOABUlNTS/dFREQwefLkM37t+uD4f0+A+Pj4004IJyIinquiv98Naiypy+Vi3Lhxp5zK+/i+8ePHn/Etm+joaLZu3Vq6HR8fT1JSkoIINdcqJSIinqtBhZGEhARSUlLKPW6aJsnJySQkJJzxe534L/2BAwfqX/783ip1YosRQGpqKjExMQokIiINVIMKIxUdUquht9WvtlqlRETE8zSoMKKht9apzVYpERHxLA0qjGjorXXUKiUiIuVpUGFEQ2+to1YpEREpT4MKI1Ay0iU2NpawsLAy+8PDw6tlWK+cmlqlRESkPA0ujICG3lpBrVIiIlKeBhlGQENvraBWKREROZUaXyivofL39z/lMNaGLjo6miFDhmgGVhERKdVgW0bEOmqVEhGREymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFiqwQ7t1dBbERGRuqHBhhGxjoKgiIicSLdpRERExFIKIyIiImIphRERERGxlMKIiIiIWEphRERERCylMCIiIiKWUhgRERERSymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIillIYEREREUt5WV1ARZimCYDT6bS4EhEREamo47/bx3/Hy+MRYSQrKwuAiIgIiysRERGRysrKyiI4OLjc44b5Z3GlDnC73ezfv5/AwEAMw6i213U6nURERJCcnExQUFC1va6Upetce3Sta4euc+3Qda4dNXmdTdMkKyuLsLAwbLbye4Z4RMuIzWYjPDy8xl4/KChIX/RaoOtce3Sta4euc+3Qda4dNXWdT9cicpw6sIqIiIilFEZERETEUg06jDgcDiZOnIjD4bC6lHpN17n26FrXDl3n2qHrXDvqwnX2iA6sIiIiUn816JYRERERsZ7CiIiIiFhKYUREREQspTAiIiIilqr3YeTNN98kMjISX19fzj//fNasWXPa82fPnk3nzp3x9fWlR48exMfH11Klnq0y1/n9998nKiqKJk2a0KRJE4YMGfKn/13kd5X9Th83c+ZMDMNgxIgRNVtgPVHZ63zs2DHGjBlDaGgoDoeDs88+W39/VEBlr/PkyZPp1KkTfn5+RERE8OCDD5Kfn19L1XqmpUuXcsUVVxAWFoZhGMybN+9Pn7NkyRL+8pe/4HA4OOuss5g2bVrNFmnWYzNnzjR9fHzMDz/80NyyZYt51113mY0bNzYzMjJOef7y5ctNu91uvvLKK+bWrVvNp556yvT29jY3bdpUy5V7lspe5xtuuMF88803zQ0bNpjbtm0zb731VjM4ONhMSUmp5co9T2Wv9XFJSUlm69atzaioKPOqq66qnWI9WGWvc0FBgdmnTx9z+PDh5rJly8ykpCRzyZIlZmJiYi1X7lkqe50/++wz0+FwmJ999pmZlJRkLliwwAwNDTUffPDBWq7cs8THx5tPPvmkGRcXZwLm3LlzT3v+7t27zUaNGpkPPfSQuXXrVvP111837Xa7OX/+/BqrsV6HkfPOO88cM2ZM6bbL5TLDwsLMSZMmnfL8a6+91rz88svL7Dv//PPNv//97zVap6er7HX+o+LiYjMwMND8+OOPa6rEeqMq17q4uNjs37+/OXXqVPOWW25RGKmAyl7nt99+22zfvr1ZWFhYWyXWC5W9zmPGjDEvvvjiMvseeughc8CAATVaZ31SkTDy6KOPmt26dSuz77rrrjOHDRtWY3XV29s0hYWFrF+/niFDhpTus9lsDBkyhJUrV57yOStXrixzPsCwYcPKPV+qdp3/KDc3l6KiIpo2bVpTZdYLVb3Wzz33HC1btuSOO+6ojTI9XlWu81dffUW/fv0YM2YMISEhdO/enZdeegmXy1VbZXucqlzn/v37s379+tJbObt37yY+Pp7hw4fXSs0NhRW/hR6xUF5VHDp0CJfLRUhISJn9ISEhbN++/ZTPSU9PP+X56enpNVanp6vKdf6jxx57jLCwsJO+/FJWVa71smXL+OCDD0hMTKyFCuuHqlzn3bt3s3jxYm688Ubi4+PZuXMn9913H0VFRUycOLE2yvY4VbnON9xwA4cOHeLCCy/ENE2Ki4u55557eOKJJ2qj5AajvN9Cp9NJXl4efn5+1f6e9bZlRDzDyy+/zMyZM5k7dy6+vr5Wl1OvZGVlcfPNN/P+++/TvHlzq8up19xuNy1btuS9996jd+/eXHfddTz55JO88847VpdWryxZsoSXXnqJt956i59++om4uDi++eYbnn/+eatLkzNUb1tGmjdvjt1uJyMjo8z+jIwMWrVqdcrntGrVqlLnS9Wu83H/+te/ePnll/n+++8555xzarLMeqGy13rXrl3s2bOHK664onSf2+0GwMvLix07dtChQ4eaLdoDVeU7HRoaire3N3a7vXRfly5dSE9Pp7CwEB8fnxqt2RNV5Tr/4x//4Oabb+bOO+8EoEePHuTk5HD33Xfz5JNPYrPp39fVobzfwqCgoBppFYF63DLi4+ND7969WbRoUek+t9vNokWL6Nev3ymf069fvzLnAyxcuLDc86Vq1xnglVde4fnnn2f+/Pn06dOnNkr1eJW91p07d2bTpk0kJiaWPq688kouuugiEhMTiYiIqM3yPUZVvtMDBgxg586dpWEP4JdffiE0NFRBpBxVuc65ubknBY7jAdDUMmvVxpLfwhrrGlsHzJw503Q4HOa0adPMrVu3mnfffbfZuHFjMz093TRN07z55pvNxx9/vPT85cuXm15eXua//vUvc9u2bebEiRM1tLcCKnudX375ZdPHx8eMjY0109LSSh9ZWVlWfQSPUdlr/UcaTVMxlb3O+/btMwMDA82xY8eaO3bsML/++muzZcuW5gsvvGDVR/AIlb3OEydONAMDA83PP//c3L17t/ndd9+ZHTp0MK+99lqrPoJHyMrKMjds2GBu2LDBBMx///vf5oYNG8y9e/eapmmajz/+uHnzzTeXnn98aO8jjzxibtu2zXzzzTc1tPdMvf7662abNm1MHx8f87zzzjNXrVpVemzQoEHmLbfcUub8WbNmmWeffbbp4+NjduvWzfzmm29quWLPVJnr3LZtWxM46TFx4sTaL9wDVfY7fSKFkYqr7HVesWKFef7555sOh8Ns3769+eKLL5rFxcW1XLXnqcx1LioqMp955hmzQ4cOpq+vrxkREWHed9995tGjR2u/cA/yww8/nPLv3OPX9pZbbjEHDRp00nPOPfdc08fHx2zfvr350Ucf1WiNhmmqbUtERESsU2/7jIiIiIhnUBgRERERSymMiIiIiKUURkRERMRSCiMiIiJiKYURERERsZTCiIiIiFhKYUREREQspTAiIiIillIYEREREUspjIiIiIilFEZERETEUv8P2sCTDrtO3HEAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m3.visualize()\n", "plt.plot(c.x, model(c.x, *truth), ls=\"--\", label=\"truth\");" ] }, { "cell_type": "markdown", "id": "attractive-porcelain", "metadata": {}, "source": [ "The result is almost identical as in the previous case without an outlier.\n", "\n", "Robust fitting is very useful if the data are contaminated with small amounts of outliers. It comes with a price, however, the uncertainties are in general larger and the errors computed by Minuit are not correct anymore.\n", "\n", "Calculating the parameter uncertainty properly for this case requires a so-called sandwich estimator, which is currently not implemented. As an alternative, one can use the bootstrap to compute parameter uncertainties. We use the `resample` library to do this." ] }, { "cell_type": "code", "execution_count": null, "id": "1e9732ca", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1UAAAFfCAYAAACm++aJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA7cUlEQVR4nO3de1xVdb7/8ffGywYVSFRAFAUvk5iKmFrkTOLEkdAc7UxlMxaGkzMalESTRb9S04qcE6RjpqmPxExHa7zUyQYPUejRMBKlyTCt8QJDgNkFEhPRvX5/eNy1FZDtAjaX1/PxWI+Ha63vd+3PgsX++t7rsi2GYRgCAAAAAFwVN1cXAAAAAADNGaEKAAAAAEwgVAEAAACACYQqAAAAADCBUAUAAAAAJhCqAAAAAMAEQhUAAAAAmNDW1QXUF5vNpq+++kqenp6yWCyuLgcAWg3DMPTDDz8oICBAbm58VncR4xIAuE5jj00tJlR99dVXCgwMdHUZANBqFRYWqmfPnq4uo8lgXAIA12ussanFhCpPT09JF35wXl5eLq4GAFqP8vJyBQYG2t+HcQHjEgC4TmOPTS0mVF28tMLLy4vBCwBcgEvcHDEuAYDrNdbYxMXvAAAAAGACoQoAAAAATCBUAQAAAIAJhCoAAAAAMIFQBQAAAAAmEKoAAC1ecnKyRowYIU9PT/n6+mrSpEk6dOhQrX02b96s4cOH65prrlHHjh01dOhQrV27tpEqBgA0J4QqAECLt2PHDsXFxWnPnj3KyMhQVVWVxo4dq4qKihr7+Pj46P/9v/+n7Oxs/fOf/1RsbKxiY2O1ffv2RqwcANAcOB2qdu7cqQkTJiggIEAWi0Vbt269Yp+srCwNGzZMVqtV/fr1U1pa2mVtioqKdM8996hLly7y8PDQ4MGDtXfvXmfLAwDgMunp6brvvvt03XXXKTQ0VGlpaSooKFBubm6NfSIiInT77bcrJCREffv21axZszRkyBDt2rWr2vaVlZUqLy93mAAArYPToaqiokKhoaFaunRpndofPXpU48eP15gxY5SXl6eEhATdf//9Dp/0fffddxo1apTatWunf/zjH8rPz1dKSoo6d+7sbHkAAFxRWVmZpAtno+rCMAxlZmbq0KFDuvnmm6ttk5ycLG9vb/sUGBhYb/UCAJo2i2EYxlV3tli0ZcsWTZo0qcY2jz32mLZt26YDBw7Yl9199936/vvvlZ6eLkl6/PHHtXv3bv3v//7v1Zai8vJyeXt7q6ysjG+uB4BG1Nzef202m37zm9/o+++/r/Gs00VlZWXq0aOHKisr1aZNG7388suaNm1atW0rKytVWVlpny8vL1dgYGCz+bkAQEvS2GNTg99TlZ2drcjISIdlUVFRys7Ots+//fbbGj58uO688075+voqLCxMK1eurHW7XGYBALgacXFxOnDggDZs2HDFtp6ensrLy9PHH3+sZ599VomJicrKyqq2rdVqlZeXl8MEAGgdGjxUlZSUyM/Pz2GZn5+fysvL9eOPP0qSjhw5omXLlql///7avn27Zs6cqYceekhr1qypcbtcZgEA5p2uOq3BawZr8JrBOl112tXlNLj4+Hi98847+uCDD9SzZ88rtndzc1O/fv00dOhQPfLII7rjjjuUnJzcCJUCQOvVHMemJvH0P5vNpmHDhum5555TWFiY/vjHP2r69Olavnx5jX2SkpJUVlZmnwoLCxuxYgBAc2IYhuLj47Vlyxa9//77Cg4Ovqrt2Gw2h0v8AACQpLYN/QL+/v4qLS11WFZaWiovLy95eHhIkrp3766BAwc6tAkJCdGmTZtq3K7VapXVaq3/ggEALU5cXJzWr1+vt956S56eniopKZEkeXt728eimJgY9ejRw34mKjk5WcOHD1ffvn1VWVmpd999V2vXrtWyZctcth8AgKapwUNVeHi43n33XYdlGRkZCg8Pt8+PGjXqsi9hPHz4sHr37t3Q5QEAWoGLQSgiIsJh+erVq3XfffdJkgoKCuTm9tMFHBUVFXrggQf073//Wx4eHhowYIBef/11TZ48ubHKBgA0E06HqlOnTunLL7+0zx89elR5eXny8fFRr169lJSUpKKiIr322muSpBkzZuill17S7NmzNW3aNL3//vt64403tG3bNvs2Hn74Yd1000167rnndNdddyknJ0crVqzQihUr6mEXAQCtXV0edHvpAyieeeYZPfPMMw1UEQCgJXH6nqq9e/cqLCxMYWFhkqTExESFhYVpzpw5kqTi4mIVFBTY2wcHB2vbtm3KyMhQaGioUlJStGrVKkVFRdnbjBgxQlu2bNHf/vY3DRo0SAsWLNCiRYs0ZcoUs/sHAAAAAA3K6TNVERERtX7il5aWVm2f/fv317rd2267Tbfddpuz5QAA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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from resample.bootstrap import variance as bvar\n", "\n", "def fit(x, y, ye):\n", " c = cost.LeastSquares(x, y, ye, model, loss=\"soft_l1\")\n", " m = Minuit(c, a=0, b=0)\n", " m.migrad()\n", " return m.values\n", "\n", "berr = bvar(fit, c.x, c.y, c.yerror, size=1000, random_state=1) ** 0.5\n", "\n", "fig, ax = plt.subplots(1, 2, figsize=(10, 4))\n", "for i, axi in enumerate(ax):\n", " axi.errorbar(0, m1.values[i], m1.errors[i], fmt=\"o\")\n", " axi.errorbar(1, m3.values[i], m3.errors[i], fmt=\"o\")\n", " axi.errorbar(2, m3.values[i], berr[i], fmt=\"o\")\n", " axi.set_xticks(np.arange(3), (\"no outlier\", \"Minuit, soft_l1\", \"bootstrap\"));" ] }, { "cell_type": "markdown", "id": "e4dad3f9", "metadata": {}, "source": [ "In this case, Minuit's estimate is similar to the bootstrap estimate, but that is not generally true when the \"soft_l1\" loss is used.\n", "\n", "Robust fits are very powerful when the outliers cannot be removed by other means. If one can identify outliers by other means, it is better to remove them. We manually remove the point (using the mask attribute) and switch back to ordinary loss." ] }, { "cell_type": "code", "execution_count": null, "id": "indoor-wallet", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Migrad
FCN = 24.67 (χ²/ndof = 1.5) Nfcn = 29
EDM = 1.37e-22 (Goal: 0.0002)
Valid Minimum Below EDM threshold (goal x 10)
No parameters at limit Below call limit
Hesse ok Covariance accurate
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 a 0.98 0.04
1 b 2.07 0.15
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
a b
a 0.00158 -0.0041 (-0.678)
b -0.0041 (-0.678) 0.0238
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-01-31T17:31:17.444846\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.8.2, https://matplotlib.org/\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 24.67 (χ²/ndof = 1.5) │ Nfcn = 29 │\n", "│ EDM = 1.37e-22 (Goal: 0.0002) │ │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Valid Minimum │ Below EDM threshold (goal x 10) │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ No parameters at limit │ Below call limit │\n", "├──────────────────────────────────┼──────────────────────────────────────┤\n", "│ Hesse ok │ Covariance accurate │\n", "└──────────────────────────────────┴──────────────────────────────────────┘\n", "┌───┬──────┬───────────┬───────────┬────────────┬────────────┬─────────┬─────────┬───────┐\n", "│ │ Name │ Value │ Hesse Err │ Minos Err- │ Minos Err+ │ Limit- │ Limit+ │ Fixed │\n", "├───┼──────┼───────────┼───────────┼────────────┼────────────┼─────────┼─────────┼───────┤\n", "│ 0 │ a │ 0.98 │ 0.04 │ │ │ │ │ │\n", "│ 1 │ b │ 2.07 │ 0.15 │ │ │ │ │ │\n", "└───┴──────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───┬─────────────────┐\n", "│ │ a b │\n", "├───┼─────────────────┤\n", "│ a │ 0.00158 -0.0041 │\n", "│ b │ -0.0041 0.0238 │\n", "└───┴─────────────────┘" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c.mask = np.arange(len(c.x)) != 3\n", "c.loss = \"linear\"\n", "m4 = Minuit(c, a=0, b=0)\n", "m4.migrad()" ] }, { "cell_type": "markdown", "id": "varied-rhythm", "metadata": {}, "source": [ "Now the uncertainties are essentially the same as before adding the outlier." ] }, { "cell_type": "code", "execution_count": null, "id": "abaee0b1", "metadata": {}, "outputs": [ { "data": { "image/png": "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JqhJ0tq1a9WmTRvt3btXf/7zn7VgwQIlJydLksrKyjR+/Hh98803ev/995WcnKxjx45p4sSJFW6vqKhIERERateunfbt26fXX39d7777rqKjo6tc05YtW9S1a1ctWLBAubm5ys3NrVK/9evXa+7cuVq4cKEOHz6sRYsW6cknn9TatWsd2j322GOaNWuWDh8+XOGbty7de++9Dm/el19+WZGRkVXqGx8fr8GDB+vgwYN68MEHNWPGDB05cqRGdUycOFF//OMfdf3115v7ubLX9qeefPJJZWVl6Z///KcOHz6s5cuXq0OHDpKu/R7405/+ZD7/y49b09fcqtauXasWLVooPT1dS5cuVUJCglavXi3p0hfc/v379fe//11paWkyDEOjR482f0HPyMjQXXfdpd/97nf65JNPNH/+fD355JPmF3hF+yoqKkrFxcXatWuXPvnkEy1evFhubm7y8/PT5s2bJUlHjhxRbm6uli5d6lBrq1attGfPHq1YsULSpf+k/PWvf9Wnn36qtWvXaufOnZozZ47Dczx37pwWLlyoV155RXv27NF3332n3/3ud7W+L+fMmaPNmzdr7dq1OnDggHr16qWIiAh98803Vepf0/f5d999p1tuuUXBwcHav3+/kpKSlJ+fr7vuusuhXXn7rzwpKSk6cuSIkpOT9dZbb6mkpEQRERFyd3fXBx98oD179sjNzU233Xabw6+aO3fu1FdffaVdu3YpISFB8+bN09ixY9WuXTvt3btX06dP1wMPPKB///vfkq79+bv11lvVtm1b8z0hSaWlpdq0aZMmTZok6dJRhdtuu02//e1v9a9//UubNm3S7t27Hb7Hp06dqpycHL333nt644039OKLL+r06dNVeEWqhrGJsYmxqXYxLtUuxqYmPDYZFjF8+HDjV7/6lcOyIUOGGI8++qhhGIbxzjvvGM7OzkZ2dra5/tNPPzUkGenp6eVuc+XKlUa7du2Ms2fPmsu2b99uODk5GXl5eebjzpo1y6Hf+PHjjSlTppjz3bt3N/7yl784tFmzZo3h6elpzs+bN88ICgoy53v27Gls2LDBoc/TTz9thISEGIZhGMePHzckGUuWLCm39ro2ZcoUY/z48cbp06cNu91unDhxwjhx4oTh4uJifP3111ftgyv3U/fu3Y27777bnC8rKzO8vb2N5cuXG4ZhGO+9954hyfj222/NNgcPHjQkGcePHzcM49r7sKrGjRtnREZGlruuKu+BrVu3Gld+FMp7zStz5XP5qfLeY/Vl+PDhRmBgoFFWVmYue/TRR43AwEDj6NGjhiRjz5495rozZ84Yrq6uxmuvvWYYhmH87//+r/HrX//aYZuPPPKI0bdvX3O+vH3Vv39/Y/78+eXWVN5743KtwcHB13xOr7/+utG+fXtzfs2aNYYk46OPPjKXHT582JBk7N2795rbq6qzZ88aLVu2NNavX28uu3DhgtG5c2fjz3/+s1nLle+DK99fFb3PJRlbt241DOPH74eDBw8ahnHpu2PkyJEO7XNycgxJxpEjRwzDqPr+mzJliuHj42MUFxeby9atW2dcd911Du+T4uJiw9XV1dixY4fZr3v37kZpaanZ5rrrrjNuuukmc/7ixYtGmzZtjL/97W+GYVTt8zdr1izjlltuMdfv2LHDsNvt5vvjvvvuM/7whz84PIcPPvjAcHJyMn744QfjyJEjV40Dl1//6nyGK8LYVL8Ym5r+2MS4VHvjkmEwNjX1sclSR9RuuOEGh/lOnTqZyfPw4cPy8/OTn5+fub5v375q27atDh8+XO72Dh8+rKCgILVp08ZcFhoaqrKyshr/ulYVRUVF+vLLL3XffffJzc3NnJ555hnznPPLBg8eXGd1VEXHjh01ZswYJSYmas2aNRozZoz5i9+1/PT1stls8vX1rdVfsatqxowZ2rhxowYMGKA5c+boww8/NNc11HvASn75y186nCITEhKizz//XFlZWWrRooWGDRtmrmvfvr2uu+468zN1+PBhhYaGOmwvNDRUn3/+uUpLSyt8zJkzZ+qZZ55RaGio5s2bp3/9619VqnXQoEFXLXv33Xd16623qkuXLnJ3d9c999yj//znPzp37pzZpkWLFhoyZIg536dPn0q/G2riyy+/VElJicP+aNmypYYOHVqrj1Oejz/+WO+9957D90mfPn3Mui4rb/+Vp3///mrVqpXD9r/44gu5u7ub2/fy8tL58+cdtn/99dfLyenHYcPHx0f9+/c3552dndW+fXuH7+1rff4mTZqk1NRUffXVV5IuHfEZM2aMeZrOxx9/rMTERIfnHhERobKyMh0/flyHDx9WixYtHJ775de/tjA21T/GpqaNcan2MDY17bGp5lcD1oGWLVs6zNtsNpWVldXpYzo5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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 2, figsize=(10, 4))\n", "for i, axi in enumerate(ax):\n", " axi.errorbar(0, m1.values[i], m1.errors[i], fmt=\"o\")\n", " axi.errorbar(1, m3.values[i], m3.errors[i], fmt=\"o\")\n", " axi.errorbar(2, m3.values[i], berr[i], fmt=\"o\")\n", " axi.errorbar(3, m4.values[i], m4.errors[i], fmt=\"o\")\n", " axi.set_xticks(np.arange(4), (\"no outlier\", \"Minuit, soft_l1\", \"bootstrap\", \"outlier removed\"));" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.18" }, "vscode": { "interpreter": { "hash": "bdbf20ff2e92a3ae3002db8b02bd1dd1b287e934c884beb29a73dced9dbd0fa3" } } }, "nbformat": 4, "nbformat_minor": 5 }