{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Minimization with MinKit\n",
"The main purpose of the MinKit package is to do minimizations of PDFs to data sets, finding the set of parameter values that reproduce better the data. The user must be aware about the type of PDF is trying to fit, and select a proper minimization cuantity (FCN) accordingly. For example, if we are dealing with an unbinned dataset, we need an FCN defined for binned data sets. The same stands for extended and non-extended PDFs. The user must know whether an unbinned extended maximum likelihood FCN is needed or not. To give an idea of how the minimization is done with MinKit, let's create a simple model, generate some data, and fit it."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
" \n",
" FCN = 28288.575555243537 \n",
" TOTAL NCALL = 74 \n",
" NCALLS = 74 \n",
" \n",
" \n",
" EDM = 2.456083689719908e-05 \n",
" GOAL EDM = 1e-05 \n",
" \n",
" UP = 1.0 \n",
" \n",
"
\n",
"\n",
" \n",
" Valid \n",
" Valid Param \n",
" Accurate Covar \n",
" PosDef \n",
" Made PosDef \n",
" \n",
" \n",
" True \n",
" True \n",
" True \n",
" True \n",
" False \n",
" \n",
" \n",
" Hesse Fail \n",
" HasCov \n",
" Above EDM \n",
" \n",
" Reach calllim \n",
" \n",
" \n",
" False \n",
" True \n",
" False \n",
" \n",
" False \n",
" \n",
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
" \n",
" + \n",
" Name \n",
" Value \n",
" Hesse Error \n",
" Minos Error- \n",
" Minos Error+ \n",
" Limit- \n",
" Limit+ \n",
" Fixed? \n",
" \n",
" \n",
" 0 \n",
" c \n",
" 14.987 \n",
" 0.00995622 \n",
" \n",
" \n",
" 10 \n",
" 20 \n",
" No \n",
" \n",
" \n",
" 1 \n",
" s \n",
" 0.995523 \n",
" 0.00704013 \n",
" \n",
" \n",
" 0.1 \n",
" 2 \n",
" No \n",
" \n",
"
\n",
"\n",
"\n",
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import minkit\n",
"\n",
"# Build the PDF\n",
"x = minkit.Parameter('x', bounds=(10, 20))\n",
"c = minkit.Parameter('c', 15, bounds=(10, 20))\n",
"s = minkit.Parameter('s', 1, bounds=(0.1, 2))\n",
"\n",
"g = minkit.Gaussian('g', x, c, s)\n",
"\n",
"# Keep the initial values\n",
"initials = g.get_values()\n",
"\n",
"# Generate data and do the fit\n",
"data = g.generate(10000)\n",
"\n",
"with minkit.minimizer('uml', g, data) as minimizer:\n",
" minimizer.migrad()\n",
" \n",
"# Plot the results\n",
"values, edges = minkit.data_plotting_arrays(data, bins=100)\n",
"\n",
"centers = 0.5 * (edges[1:] + edges[:-1])\n",
"\n",
"plt.hist(centers, bins=edges, weights=values, histtype='step', color='k', label='data');\n",
"\n",
"gx, pdf_values = minkit.pdf_plotting_arrays(g, values, edges)\n",
"plt.plot(gx, pdf_values, color='blue', label='PDF')\n",
"plt.legend();\n",
"\n",
"# Reset values\n",
"g.set_values(**initials)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that we have called *minkit.minimizer* in order to create a context and do the minimization. The first argument is the FCN to use, an unbinned maximum likelihood in this case. It is very important that we do not change the properties of the PDF inside the *with* statement. This is because the PDF has enabled a cache. This means that, if the parameters have been set to constant, the evaluation of the PDF over the data values might have been kept in the cache, to reduce the execution time.\n",
"\n",
"Let's create a more complex model, adding a background-like contribution, using an exponential."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
" \n",
" FCN = 41568.87190680871 \n",
" TOTAL NCALL = 99 \n",
" NCALLS = 99 \n",
" \n",
" \n",
" EDM = 5.483245260122549e-06 \n",
" GOAL EDM = 1e-05 \n",
" \n",
" UP = 1.0 \n",
" \n",
"
\n",
"\n",
" \n",
" Valid \n",
" Valid Param \n",
" Accurate Covar \n",
" PosDef \n",
" Made PosDef \n",
" \n",
" \n",
" True \n",
" True \n",
" True \n",
" True \n",
" False \n",
" \n",
" \n",
" Hesse Fail \n",
" HasCov \n",
" Above EDM \n",
" \n",
" Reach calllim \n",
" \n",
" \n",
" False \n",
" True \n",
" False \n",
" \n",
" False \n",
" \n",
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
" \n",
" + \n",
" Name \n",
" Value \n",
" Hesse Error \n",
" Minos Error- \n",
" Minos Error+ \n",
" Limit- \n",
" Limit+ \n",
" Fixed? \n",
" \n",
" \n",
" 0 \n",
" y \n",
" 0.526921 \n",
" 0.00950927 \n",
" \n",
" \n",
" 0 \n",
" 1 \n",
" No \n",
" \n",
" \n",
" 1 \n",
" c \n",
" 14.9758 \n",
" 0.0202446 \n",
" \n",
" \n",
" 10 \n",
" 20 \n",
" No \n",
" \n",
" \n",
" 2 \n",
" s \n",
" 1.02638 \n",
" 0.020045 \n",
" \n",
" \n",
" 0.1 \n",
" 2 \n",
" No \n",
" \n",
" \n",
" 3 \n",
" k \n",
" -0.10163 \n",
" 0.0057237 \n",
" \n",
" \n",
" -1 \n",
" 0 \n",
" No \n",
" \n",
"
\n",
"\n",
"\n",
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Make the exponential PDF\n",
"k = minkit.Parameter('k', -0.1, bounds=(-1, 0))\n",
"\n",
"e = minkit.Exponential('e', x, k)\n",
"\n",
"# Add the two PDFs\n",
"y = minkit.Parameter('y', 0.5, bounds=(0, 1))\n",
"\n",
"pdf = minkit.AddPDFs.two_components('pdf', g, e, y)\n",
"\n",
"data = pdf.generate(10000)\n",
"\n",
"# Keep the initial values\n",
"initials = pdf.get_values()\n",
"\n",
"# Minimize the PDF\n",
"with minkit.minimizer('uml', pdf, data) as minimizer:\n",
" minimizer.migrad()\n",
"\n",
"values, edges = minkit.data_plotting_arrays(data, bins=100)\n",
"\n",
"centers = 0.5 * (edges[1:] + edges[:-1])\n",
"\n",
"plt.hist(centers, bins=edges, weights=values, histtype='step', color='k', label='data');\n",
"\n",
"pdf_centers, pdf_values = minkit.pdf_plotting_arrays(pdf, values, edges)\n",
"_, g_values = minkit.pdf_plotting_arrays(pdf, values, edges, component='g')\n",
"_, e_values = minkit.pdf_plotting_arrays(pdf, values, edges, component='e')\n",
"\n",
"plt.plot(pdf_centers, e_values, color='orange', linestyle=':', label='Exponential')\n",
"plt.plot(pdf_centers, g_values, color='green', linestyle='--', label='Gaussian')\n",
"plt.plot(pdf_centers, pdf_values, color='blue', label='PDF')\n",
"\n",
"plt.legend();\n",
"\n",
"# Reset values\n",
"pdf.set_values(**initials)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's now assume we want to know the two yields of the PDFs. To do this we need to modify the model, and do and use an extended likelihood during the minimization."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
" \n",
" FCN = -122354.9230188445 \n",
" TOTAL NCALL = 124 \n",
" NCALLS = 124 \n",
" \n",
" \n",
" EDM = 2.1664581983657007e-05 \n",
" GOAL EDM = 1e-05 \n",
" \n",
" UP = 1.0 \n",
" \n",
"
\n",
"\n",
" \n",
" Valid \n",
" Valid Param \n",
" Accurate Covar \n",
" PosDef \n",
" Made PosDef \n",
" \n",
" \n",
" True \n",
" True \n",
" True \n",
" True \n",
" False \n",
" \n",
" \n",
" Hesse Fail \n",
" HasCov \n",
" Above EDM \n",
" \n",
" Reach calllim \n",
" \n",
" \n",
" False \n",
" True \n",
" False \n",
" \n",
" False \n",
" \n",
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
" \n",
" + \n",
" Name \n",
" Value \n",
" Hesse Error \n",
" Minos Error- \n",
" Minos Error+ \n",
" Limit- \n",
" Limit+ \n",
" Fixed? \n",
" \n",
" \n",
" 0 \n",
" ng \n",
" 5052.31 \n",
" 107.283 \n",
" \n",
" \n",
" 0 \n",
" 10000 \n",
" No \n",
" \n",
" \n",
" 1 \n",
" ne \n",
" 4947.74 \n",
" 106.773 \n",
" \n",
" \n",
" 0 \n",
" 10000 \n",
" No \n",
" \n",
" \n",
" 2 \n",
" c \n",
" 15.0023 \n",
" 0.0206492 \n",
" \n",
" \n",
" 10 \n",
" 20 \n",
" No \n",
" \n",
" \n",
" 3 \n",
" s \n",
" 1.01169 \n",
" 0.0203878 \n",
" \n",
" \n",
" 0.1 \n",
" 2 \n",
" No \n",
" \n",
" \n",
" 4 \n",
" k \n",
" -0.0963174 \n",
" 0.00560069 \n",
" \n",
" \n",
" -1 \n",
" 0 \n",
" No \n",
" \n",
"
\n",
"\n",
"\n",
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Build the extended PDF\n",
"ng = minkit.Parameter('ng', 5000, bounds=(0, 10000))\n",
"ne = minkit.Parameter('ne', 5000, bounds=(0, 10000))\n",
"\n",
"pdf = minkit.AddPDFs.two_components('pdf', g, e, ng, ne)\n",
"\n",
"initials = pdf.get_values()\n",
"\n",
"# Generate and fit\n",
"data = pdf.generate(int(ng.value + ne.value))\n",
"\n",
"ng.value = 6000 # vary the yields to flee from the minimum\n",
"ne.value = len(data) - ng.value\n",
"\n",
"with minkit.minimizer('ueml', pdf, data) as minimizer:\n",
" minimizer.migrad()\n",
"\n",
"values, edges = minkit.data_plotting_arrays(data, bins=100)\n",
"\n",
"centers = 0.5 * (edges[1:] + edges[:-1])\n",
"\n",
"plt.hist(centers, bins=edges, weights=values, histtype='step', color='k', label='data');\n",
"\n",
"pdf_centers, pdf_values = minkit.pdf_plotting_arrays(pdf, values, edges)\n",
"_, g_values = minkit.pdf_plotting_arrays(pdf, values, edges, component='g')\n",
"_, e_values = minkit.pdf_plotting_arrays(pdf, values, edges, component='e')\n",
"\n",
"plt.plot(pdf_centers, e_values, color='orange', linestyle=':', label='Exponential')\n",
"plt.plot(pdf_centers, g_values, color='green', linestyle='--', label='Gaussian')\n",
"plt.plot(pdf_centers, pdf_values, color='blue', label='PDF')\n",
"\n",
"plt.legend();\n",
"\n",
"# Reset the values\n",
"pdf.set_values(**initials)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that we have specified the *ueml* (unbinned extended maximum likelihood) FCN. If we set it to *uml*, we would get wrong values. Let's now see what happens with binned data sets. In this case, we will use the *bml* FCN."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
" \n",
" FCN = 85.809988390516 \n",
" TOTAL NCALL = 100 \n",
" NCALLS = 100 \n",
" \n",
" \n",
" EDM = 2.6451594374739883e-07 \n",
" GOAL EDM = 1e-05 \n",
" \n",
" UP = 1.0 \n",
" \n",
"
\n",
"\n",
" \n",
" Valid \n",
" Valid Param \n",
" Accurate Covar \n",
" PosDef \n",
" Made PosDef \n",
" \n",
" \n",
" True \n",
" True \n",
" True \n",
" True \n",
" False \n",
" \n",
" \n",
" Hesse Fail \n",
" HasCov \n",
" Above EDM \n",
" \n",
" Reach calllim \n",
" \n",
" \n",
" False \n",
" True \n",
" False \n",
" \n",
" False \n",
" \n",
"
"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
" \n",
" + \n",
" Name \n",
" Value \n",
" Hesse Error \n",
" Minos Error- \n",
" Minos Error+ \n",
" Limit- \n",
" Limit+ \n",
" Fixed? \n",
" \n",
" \n",
" 0 \n",
" ng \n",
" 5053.04 \n",
" 7422.08 \n",
" \n",
" \n",
" 0 \n",
" 10000 \n",
" No \n",
" \n",
" \n",
" 1 \n",
" ne \n",
" 4945.67 \n",
" 7381.12 \n",
" \n",
" \n",
" 0 \n",
" 10000 \n",
" No \n",
" \n",
" \n",
" 2 \n",
" c \n",
" 15.0018 \n",
" 0.0206669 \n",
" \n",
" \n",
" 10 \n",
" 20 \n",
" No \n",
" \n",
" \n",
" 3 \n",
" s \n",
" 1.01206 \n",
" 0.0204419 \n",
" \n",
" \n",
" 0.1 \n",
" 2 \n",
" No \n",
" \n",
" \n",
" 4 \n",
" k \n",
" -0.096293 \n",
" 0.00560712 \n",
" \n",
" \n",
" -1 \n",
" 0 \n",
" No \n",
" \n",
"
\n",
"\n",
"\n",
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD4CAYAAAAXUaZHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3RUxdvA8e+kE4IQUuhsACkhSAIERHrvAqEjIGBFwYa9vWLBig2xAOJPilKkN5UuICKChB4IJYEghCSQkN523j/upgApm2Q3u9mdzzl72Ls7995nc8iT2blznxFSShRFURTb4mDpABRFURTTU8ldURTFBqnkriiKYoNUclcURbFBKrkriqLYICdLBwDg7e0t/fz8LB2GoihKhXLo0KFYKaVPQe9ZRXL38/Pj4MGDlg5DURSlQhFCRBb2nhqWURRFsUEquSuKotggldwVRVFskFWMuSuKUjFkZmYSFRVFWlqapUOxK25ubtStWxdnZ2ej91HJXVEUo0VFRVGlShX8/PwQQlg6HLsgpSQuLo6oqCgaNGhg9H5qWEZRFKOlpaXh5eWlEns5EkLg5eVV4m9LKrkrilIiKrGXv9L8zFVyVxRFsUEquSuKUqE4OjoSFBSU+/jwww8tHVKhvvjiC1JSUnK3BwwYQHx8fJH7+Pn5ERsbW+ZzqwuqilIMPz8/IiO1GwF1Oh0RERGWDcjOVapUidDQUEuHYZQvvviC8ePH4+7uDsDmzZvL7dyq564oxYiMjERKiZQyN8kr1iUhIYGmTZty+vRpAMaOHcv8+fMB8PDw4LnnniMgIICePXsSExMDQGhoKO3bt6dly5aEhIRw48YNALp168bLL79Mu3btaNKkCXv27AEgOzubF198kbZt29KyZUvmzp0LwK5du+jWrRsjRoygWbNmjBs3Dikls2fP5r///qN79+50794duLVXPnToUNq0aUNAQADz5s0z/Q8l5z+tJR9t2rSRimKttF+TO5/bo5MnT976wtauUp77n/Y8O0PbPr9Y285M1rYjlmnb6fHa9sVV2nZqjLZ9ab22nXLFqBgcHBxkYGBg7mPZMu34W7Zske3bt5dLly6Vffv2zW0PyCVLlkgppXz77bfl1KlTpZRS3nPPPXLXrl1SSinffPNN+cwzz0gppezataucPn26lFLKTZs2yZ49e0oppZw7d6589913pZRSpqWlyTZt2sjz58/LnTt3yrvuukteunRJZmdny/bt28s9e/ZIKaXU6XQyJiYmN5b823FxcdrHTkmRAQEBMjY2tsB9ctzxs9c+20FZSF5VwzKKolQohQ3L9O7dm19++YWpU6dy5MiR3NcdHBwYPXo0AOPHj2fYsGEkJCQQHx9P165dAZg4cSIjR47M3WfYsGEAtGnTJncYbsuWLRw9epSVK1cC2reF8PBwXFxcaNeuHXXr1gUgKCiIiIgIOnXqVOTnmD17NmvWrAHg0qVLhIeH4+XlVZofSYFUclcUpfR67cp77uB867aT+63bLlVv3XbzvnW7Us0yhaLX6zl16hTu7u7cuHEjN9nezphpha6uroB28TYrKwvQRjm++uor+vbte0vbXbt25ba/fZ/C7Nq1i23btvHXX3/h7u5Ot27dTH7Xb7Fj7kKIekKInUKIk0KIE0KIZwyvzxBCXBZChBoeA/Lt86oQ4qwQ4rQQom/hR1eU8pVzZ6UQArWGgG35/PPP8ff35+eff2by5MlkZmYCWtLP6W3//PPPdOrUiapVq+Lp6Zk7nr548eLcXnxh+vbty7fffpt73DNnzpCcnFzkPlWqVCExMfGO1xMSEvD09MTd3Z2wsDD2799f4s9bHGN67lnA81LKf4UQVYBDQoithvc+l1LOyt9YCNEcGAMEALWBbUKIJlLKbFMGriilkXNxFNTNOBVVamoqQUFBudv9+vVj8uTJfP/99xw4cIAqVarQpUsX3nvvPd5++20qV67MgQMHeO+99/D19WX58uUALFy4kClTppCSkkLDhg353//+V+R5H3nkESIiImjdujVSSnx8fFi7dm2R+zz22GP069eP2rVrs3Pnzlti/u677/D396dp06a0b9++DD+Rgomc/+hG7yDEOmAO0BFIKiC5vwogpfzAsP07MENK+VdhxwwODpZqsQ6lPAghbknuxvz/L80+turUqVP4+/tbOowS8fDwICkpydJhlFlBP3shxCEpZXBB7Us0FVII4Qe0Av42vDRNCHFUCPGDEMLT8Fod4FK+3aIMr91+rMeEEAeFEAdzpiYpiqIopmF0chdCeACrgGellDeBb4FGQBBwBfi0JCeWUs6TUgZLKYN9fApcAlBRzEqn0+WOv+cfg4+Kgu+/h5dfhtdeAxjHtWuWjFQpC1votZeGUbNlhBDOaIn9JynlagApZXS+9+cDGw2bl4F6+Xava3hNUazK7XeaCtGQESNg9WqQElxcQK8HWEK9ejBpEkD1co9TUUrDmNkyAlgAnJJSfpbv9Vr5moUAxw3P1wNjhBCuQogGQGPggOlCVhTT+/lngGP89hu8+iqcOgWpqaDNTmvNww/DDz8AnGT3bktGqijGMWZYpiMwAehx27THj4UQx4QQR4HuwHMAUsoTwArgJPAbMFXNlFGs2WefwbhxAP8SFgYzZ0KzZuDgAI6OAIf55hs4dAjgBr16ab17RbFmxQ7LSCn3AgXNGSu0Ao6UciYwswxxKUq5+PJLeP55GDECVq7sQd26mYW2bdkS4D6Cg28wZgysXw/9+pVbqIpSIqpwmGK3Nm+G556DYcNg6VLQbukoTjybN0NAgPYH4dQpMwep3CE6OpoHHniAhg0b0qZNG+67777c2/jN5eDBgzz99NNmPYepqfIDil06fx7GjIGgIFi8GJyM/E3Q6XR4egqgNg4ORxg+3JsDB8DDw6zhKgZSSoYOHcrEiRP5WbtQQmRkJOvXrzfreYODgwkOLnA6udVSPXfF5uUvOaDT6cjOhokTtTH1NWvAUGrbKBEREYaqe5fR60dx+rQ2rKOUjx07duDi4sKUKVNyX9PpdDz11FNERETQuXNnWrduTevWrdm3bx+g1XEZNGhQbvtp06bx448/AvDKK6/QvHlzWrZsyQsvvADAL7/8QosWLQgMDKRLly53HOPAgQPcd999tGrVig4dOuSWGf7xxx8ZNmwY/fr1o3Hjxrz00ktm/3kURfXcFZuXv+QAwCefwN69sGgR6HRlOfJOpk+HWbO0bwGGkt12pduP3e54bVTAKJ5s+yQpmSkM+GnAHe9PCprEpKBJxKbEMmLFiFve2zVpV5HnO3HiBK1bty7wPV9fX7Zu3Yqbmxvh4eGMHTuWou58j4uLY82aNYSFhSGEyF0h6Z133uH333+nTp06Ba6a1KxZM/bs2YOTkxPbtm3jtddeY9WqVYBWI/7w4cO4urrStGlTnnrqKerVq3fHMcqDSu6KXTl/Ht58E0JCYPz4sh1Lp9Mxa5Y7cIQ+fVxITNTh5maSMBUjTZ06lb179+Li4sK2bduYNm0aoaGhODo6cubMmSL3rVq1Km5ubjz88MMMGjQot2fesWNHJk2axKhRo3JL/+aXkJDAxIkTCQ8PRwiRW0gMoGfPnlStWhWA5s2bExkZqZK7opSH6dO18fU5c6CsdcNyboLatg1694bZs8HC38TLXVE9bXdn9yLf93b3LranfruAgIDcXjLA119/TWxsLMHBwXz++efUqFGDI0eOoNfrcTP8pXVyckKv3Y0GkFta18nJiQMHDrB9+3ZWrlzJnDlz2LFjB9999x1///03mzZtok2bNhzS5sDmevPNN+nevTtr1qwhIiKCbt265b5X0tK/5qTG3BW78fvvsG6d1nOvXdt0x+3VC2AD770H0dGqrLA59ejRg7S0NL799tvc13IWoE5ISKBWrVo4ODiwePFisrO122t0Oh0nT54kPT2d+Ph4tm/fDmhlCRISEhgwYACff/557gIf586d49577+Wdd97Bx8eHS5cu3RJDQkICdepo5bJyxu6tkUruil3IztZ67XffDc8+a44zvEBqKrz1llpz1ZyEEKxdu5Y//viDBg0a0K5dOyZOnMhHH33Ek08+ycKFCwkMDCQsLIzKlSsDUK9ePUaNGkWLFi0YNWoUrVq1AiAxMZFBgwbRsmVLOnXqxGefaTfgv/jii9xzzz20aNGCDh06EBgYeEsML730Eq+++iqtWrWyaM+8OCUu+WsOquSvYk5CCH76STJuHCxfDqNGFd4u5/fBz88vNzHrdLo76tAUtO/UqZK5cyEryw8pI+44pi2oiCV/bYVZS/4qSsXkyIwZ2h2mI0YU2xi4tfddXGLP8cor2vRKeK2UcSqK6agLqoodGE94uDan3cFM3RmdTke9egL4CnicyMiyTrNUlLJRPXfFpmlDom/SujUMGWK+8+Tc3HTp0jRcXJz56CPznUtRjKGSu2LTtJIjjXjjjbJPfTRG3bowYQL8+CPExZn/fIpSGJXcFZslpXb3KIQzeHDx7fOvzKQrw5jKs89qteDnzSv1IRSlzFRyVyq0ouaU//knHDgA8JmhLnvR8urGGH8RtSAtWmg3NX31FYBzqY+jKGWhkrtSoRU1p3zWLPDyAlhY7nFNnw5XrgAUMu9SKTVHR0eCgoJo0aIFI0eOzL2JKef1gIAAAgMD+fTTT3PvTN21axdVq1YlKCiIoKAgeml3ntk0ldwVm3TmjLaYxpNPAqSW+/n79gVtSvIz5X5uW1epUiVCQ0M5fvw4Li4ufPfdd7e8fuLECbZu3cqvv/7K22+/nbtf586dCQ0NJTQ0lG3btlkq/HKjkrtiM/KPmQcH/4CTE0ydaplYhIAnngBoy+HDlonBHnTu3JmzZ8/e8bqvry/z5s1jzpw5NnUTWUmoee6KzcgZJ09NBQ+PBPT6pdSs+UCZLo6Wxfjx8PTTqcyfX4lvvrFICGb17LMQGmraYwYFwRdfGNc2KyuLX3/9lX6FrHXYsGFDsrOzuXbtGgB79uwhKCgIgJEjR/L666+bJGZrpZK7YnNWrAC9vio7d46lW7exFovD0xNgBUuWTOTjj9VqTaaSmpqam6Q7d+7Mww8/bNR+nTt3ZuPGjeYMzaqo5K7YnO++g6ZNoWtXS0cCMI/ExIksXw5G5qAKw9getqnljK0X5/z58zg6OuLr68spO1zsVo25KzYlNBT274cpU8rnpqXi7aN5czXnvbzFxMQwZcoUpk2bhrCO/wjlTvXcFZsydy64ucGDD1o6kjyPPaaNTx89qhUvU8wjZ7gmMzMTJycnJkyYwPTp0y0dlsWo5K7YjKQk+OknraRv9eqWjibPuHHwwguweLG2fqtSNklJSQW+nrM4R0G6det2y4pJ9kANyyg2Y9UqSEyERx+1dCS38vaGAQPg55+1RUMUpTyo5K7YjIULoVEj6NjR0pHcacIE+O8/2LHD0pEo9kIld8UmRETAzp0wcaK1XEi91aBBULWqNjSjKOVBJXfFJuQkzQkTLBtHYdzctGsBq1dDcrKlo1HsgUruSoUnJSxaBN26wW2FIa3KhAlaYtdqzCuKeankrlR4+/bB2bPakIw169hR++OjhmaU8lBschdC1BNC7BRCnBRCnBBCPGN4vboQYqsQItzwr6fhdSGEmC2EOCuEOCqEaG3uD6HYt4ULoXJl4xe/thQHB21a5LZtYCh3UuHlr6dvisftNfmLM2PGDGZpK7IUaO3atZw8ebKMn7JiMqbnngU8L6VsDrQHpgohmgOvANullI2B7YZtgP5AY8PjMeBbk0etKLncWL4chg+vGLVbRo8GvV4be7cF+evpm+Jxe03+slLJvQhSyitSyn8NzxOBU0AdYAh5qyAsBIYang8BFknNfqCaEKKWySNXFAAGcvOm9V5IzV+G2M/PjxYtoFkzrbiZUjozZ86kSZMmdOrUidOnTwMwf/582rZtS2BgIMOHDyclJYV9+/axfv16XnzxRYKCgjh37lyB7WxVicbchRB+QCvgb6CGlPKK4a2rQA3D8zrApXy7RRleUxQzGI2vr3Yx1VT0Us++S/v4YM8HPLX5KV7f/jonrp0o1bHyL90XGRmJENqsmZ07sxGiZqmGIuzZoUOHWLZsGaGhoWzevJl//vkHgGHDhvHPP/9w5MgR/P39WbBgAR06dGDw4MF88sknhIaG0qhRowLb2Sqjyw8IITyAVcCzUsqb+YvxSCmlEKJEFfGFEI+hDdtQv379kuyqKIBWbgAGMmIEOJmokEZ4XDghy0M4EaMl82pu1UjKSKJ3o97aOTOScHV0xdmx9GujjhoF77zjyJw5V5k6FbstbFUae/bsISQkBHd3dwAGG1Y+P378OG+88Qbx8fEkJSXRt2/fAvc3tp0tMKrnLoRwRkvsP0kpc0YLo3OGWwz/5lwiugzUy7d7XcNrt5BSzpNSBkspg318fEobv2LHNmwAcGf0aNMds+5ddanhUYP/DfkfN16+wY2Xb5D8WjKd63cGYOrmqbRf0J5LCZeKOVLhAgIAjhc4NFPUgt9K4SZNmsScOXM4duwYb731FmlpaWVqZwuMmS0jgAXAKSnlZ/neWg/kTD6bCKzL9/qDhlkz7YGEfMM3imIyy5cDXKZTp7IdJy0rjde2v0ZieiKVnCux/cHtTAqaRDW3agC4OLrg6OAIwJCmQzh7/SztF7TnVExZaoSvYM8erSRBfkUt+K1Aly5dWLt2LampqSQmJrJB+wtPYmIitWrVIjMzk59++im3fZUqVUhMTMzdLqydLTKm594RmAD0EEKEGh4DgA+B3kKIcKCXYRtgM3AeOAvMB540fdiKvUtIgF9/BfgFhzLcrZGtz2bkLyP5YO8HbDtf/KLJw/yH8edDf5Ktz6bPkj5cTLhYyjP/gpSwcmUpd7cS+S8Ym+JR3JKIrVu3ZvTo0QQGBtK/f3/atm0LwLvvvsu9995Lx44dadasWW77MWPG8Mknn9CqVSvOnTtXaDtbJKxh8djg4GB58OBBS4ehVBB+fn5ERnYBFlGzZghXrpT+ls/nf3+ez/Z/xtcDvubJtsb3Q45cPULXH7vS2KsxBx45YNS4uRAid7FmIQT33CO56y74889bXy/oubU4deoU/v7+lg7DLhX0sxdCHJJSBhfUXtVzVyqcyMhIBgxYxIkTcOFC6RP7ihMr+Gz/ZzzV7qkSJXaAwJqBrBuzjmpu1Up9QXT0aHjjDdAuSymKaanyA0oFVJ0tW7RZJ6WdaJKtz+atXW9xb517+bTPp6U6Rle/rgTWDAQgOim6xPuPHJnzLKRU51eUoqjkrlRAIWRlUaZZMo4OjuyetJvlI5aXaVojwPt73qf5N825llyymgJNmkDz5lDRkru1DRXZg9L8zFVyVyqg0TRqBK1LWbXo3PVzZOuz8ansg65a0RfwjBHSLISkjCSe+e2Zku8bAtCF2Ngyh1Eu3NzciIuLUwm+HEkpiYuLw83NrUT7qTF3pULRCm71YPTo0g3JJGck031hd7r5dWNRyCKTxOTv489rnV5jxh8zmNp2Kp3qGz83c9gwmDnTkQ0bYPJkk4RjVnXr1iUqKoqYmBhLh2JX3NzcqFu3ZNdmVHJXKpRVqwAcSz0k8+HeD7l08xKPt3nclGHxYscXmf/vfKb/Pp39j+zHQRj3pbhVK4AIVq/2qxDJ3dnZmQYNGlg6DMUIalhGqVC0G5dOcc89Jd83Oimaz/Z/xuiA0XSsb9qFVt2d3fmg5weEXw8nPC68wDb554TnzOfWvn2sZetWbXFvRTEVldyVCuO//2D3boDlpRqSeX/P+6RnpfNO93dMHRoA41qO49zT52jq3bTA9/MXEYuIiMj3zhrS0+G338wSlmKnVHJXKoyVK7Ul9WB5iffN0mexK3IXk4Mm08SricljA3AQDlSvVB291JfwztW9+Pio5fcU01Jj7kqFsXw53HMPHDsWVuJ9nRycOPTYIVIyzV+/+8E1D/JX1F+ETQ0zcpqlnsGDc2q8u5g5OsVeqJ67UiFcvKitlTpmTMn3vZl+k5TMFJwcnLjL9S7TB3eb0QGjOX/jPD8f+9mo9jqdjgULBpKYCL6+Y80cnWIvVHJXKoSc8rilmSUza98s/L7wIyEtwbRBFWJQk0EE1ghk1l+zjJoPHhERQWrqJjw8YMiQH80foGIXVHJXKoTly6FNG2jUqGT7JWUkMefAHDrW70hVt6rmCe42Qgim3zed49eOG1VpEsDNDQYOhHXrIDvbzAEqdkEld8XqnTsHBw+Wrte+4N8F3Ei7wcsdXzZ9YEUY02IMtTxqsfjoYqP3CQnRbtLat8+MgSl2Q11QVaxezpDMqFEl208v9cz5Zw731b2P9nXbmz6wIrg4urD9we009mps9D4DBoCLizZrpnNnMwan2AXVc1es3vLl0L49FLOOwx3+vPgnZ6+fZWrbqeYJrBj+Pv44OTgZXYelShXo1QvWrs2Z8qkopaeSu2LVTp+GI0dKNyTTqX4n9j20jxHNR5g+MCOtC1tH0zlNuZl+06j2ISFw4QIcO2bmwBSbp5K7YtWWL9du0c+rfW48IQT31bsPVydX0wdmpNpVahN+PZyfjhq3Xuf992ufV93QpJSVSu6KVVu+HDp1go4d/YxeZxNg5u6ZPLHxCYuXpg2uHUyrmq347tB3RsVSowZ06KANzShKWajkrlit48fh5EltSCYyMrKQuix3ysjOYPaB2VxJulLqJfBMRQjB420e52j0Uf6+/LdR+4SEQGgogJ85Q1NsnEruitVatgwcHGBECYfMN53ZxLXkazza+lHzBFZCD9zzAB4uHsw9NNeo9kOH5jwbYraYFNunpkIqVklKbUime3dtqKIkfjzyI7U8atH37r7mCa6EqrhW4bM+n3F39buNat+oUU4NnYq1/J5iXVTPXbFKhw/D2bMlnyUTnRTNpjObmNByAk4O1tN3ebTNo3Rv0N3o9lrvvRNqwSOltFRyV6zS8uXg5KQtQ1cS2TKbJ4KfYHIr61vW6HTsab755xuj2mprq2rL7ylKaajkrlidnCGZ3r3By6tk+9auUpuvBnxFM+9m5gmuDFafWs3UzVM5f+N8sW2DggAi1KwZpdRUcleszt9/Q2Rkycv7hseFsztyt8WnPxZmfMvxCASLjxRfbyZn+b0tWyApyeyhKTZIJXfF6ixbBq6uMKSEk0W+2P8FfZf0Nfpu0PJWr2o9ejTowaKji4z8A7SW9HT4/Xezh6bYIJXcFauSna0VChswAKqWoEJvZnYmy08sZ0jTIeVW2rc0JgZO5PyN8/x56U8jWu/Fy0vd0KSUjkruilXZsweuXNGGZPz8jL8rdev5rcSlxjHunnHlFGnphPiH4OPuw6mYU0a0zub++2HjRsjMNHtoio1RyV2xKsuWQeXK2sIVJbkrdenxpXi6eVrN3PbCeLh4EDU9ikfbGHeD1dChEB8Pf/xh5sAUm6OSu2I1MjNh5UoYPFhL8MbSSz17L+5luP9wXBytf4HpnBjTs9KLbKfT6Rg6tBKQTEjIonKITLElxSZ3IcQPQohrQojj+V6bIYS4LIQINTwG5HvvVSHEWSHEaSGEdXejFKuyfTvExZV8loyDcODMtDN82OtD8wRmBn2X9GXyuqLn4kdERCBlKiEhlUlK6oFeX07BKTbBmJ77j0C/Al7/XEoZZHhsBhBCNAfGAAGGfb4RQjiaKljFti1bpl1E7VuKLoGzozNe7iWcFG9BflX9WHd6HckZycW21W5oqsvBg2YPS7EhxSZ3KeVu4LqRxxsCLJNSpkspLwBngXZliE+xE2lpWg3zYcO0aZDGik+Lp/nXzdkcvtl8wZnBmBZjSMlMYVP4pmLbDhwIkKVmzSglUpYx92lCiKOGYRtPw2t1gEv52kQZXruDEOIxIcRBIcTBGFVAw+799hvcvAmbNk0oUd321adWcyr2FN7u3uUQpel00XWhpkdNlh1fVmzb6tUBdqkFPJQSKW1y/xZoBAQBV4BPS3oAKeU8KWWwlDLYx8enlGEotsDPz4+QkGVADG5u+4yeIQPaLJlGno1oW7ut2eM0JUcHR0Y1H8Xm8M1G3nS1lrAwCAsze2iKjShVcpdSRksps6WUemA+eUMvl4F6+ZrWNbymKIWKjIzB3X0MTzzhQ2TkOaP3i06KZseFHYxpMcbii3KUxqNtHuXbgd8aWb1yHaBuaFKMV6rkLoSolW8zBMiZSbMeGCOEcBVCNAAaAwfKFqJi+0JISYGxY0u219qwteilnlEBo8wTlpm18G3B5FaTcXd2N6J1FMHBKrkrxjNmKuRS4C+gqRAiSgjxMPCxEOKYEOIo0B14DkBKeQJYAZwEfgOmSimzzRa9YiMm4OcHHTuWbK/mPs15ut3T3ON7j1miKg9xKXF89fdXxKXEFds2JEQrqnZZfRdWjFDs90EpZUH9qQVFtJ8JzCxLUIr9+O8/gF6MH68tqVcSnXWd6azrbI6wyk1EfARP//Y0lV0q81Crh4psO3QovP46rF8PTzxRTgEqFZa6Q1WxqJ9/BnBkwoSS7Xfk6hFOx542R0jlqnWt1vhV82PVqVVFttPpdAQECOA006fvLp/glApNJXfFohYvBvibJk1Ktt9rO16j30/9rLZ2u7GEEAz3H87Wc1uJT4svtJ12t6rkpZeakpZ2H/GFN1UUQCV3xYKOHtUeUPziFfnFp8Wz9dxWRviPqJCzZG43ovkIMvWZbDyzsdi22tqqzmyuWPdsKRagkrtiMYsXa+ukQvE38uS34fQGMvWZjGg+wixxlbd2ddpR7656nIw5WWzbe+8FR8drjBv3C0II/Pz8zB+gUiFZz/Lwil3JztbG2wcMgPXri58pkt/KUyupd1c92tWxjcoWDsKBsGlhRk2JdHCARx7xZcmSkcTGSipVqvjfXBTzUD13xSJ27NBmypT0Qmp6Vjo7L+xkmP8wmxiSyZGT2I25hhASAsnJsG2buaNSKjLVc1csYvFirQLkoEEl28/VyZWLz10kLSvNPIFZ0MS1E9FLPYtDir4G0b073HWXuqFJKZrquStmlX+pvJzx4YQEbVGOMWPAza3kx6zmVo2aHjVNG6gVqORUiTWn1pCamVpkOxcXrVLk+vWgfoWVwqj/GYpZ5V8qLzIyEoClS7r9wPwAACAASURBVCE1FR55pGTHSs5IpsfCHuy4sMMMkVrecP/hJGcm8/u534ttO3QoaMVUK/ZNXIr5qOSulLvvv4fAQGjTpmT7/Xr2V3ZG7ERgO2Pt+XXz64anm2exNzSB1nOvVAmgYtbVUcxPJXelXB0+DIcOab32kl4PXXlyJT7uPhW+5EBhnB2dGdpsKOtPry92fdXKlXOuV4wgK6tcwlMqGJXclXK1YIG20tK4cSXbLzUzlY1nNhLSLMTIErkV00OtHuKVjq+QkZ1RbNvRowF8+eMPs4elVEC2+1uiWCE3liyB4cPB07P41vltObeF5Mxkhjcfbp7QrESn+p3oVL+TUW0HDABIZPnyKvTsadawlApI9dyVcuPl9TgJCfDzz91LfGelu7M7g5oMortfd/MEZ0WSM5JZdXIVmdmZRbbTxtzXs2oVZBbdVLFDKrkr5SYg4AsaNYLs7J25M2eM1btRbzaM3YCzo7OZorMeW85tYcQvI/gj0pjxluVcvw7bt5s9LKWCUcldKRfHj8Pu3fDYY9ot9DqdzuiFsKNuRhm1mIWt6Ht3X9yd3Vl1svhZM/A7d90FK1aYPSylglHJXSkXX3+t3bD08MPadk4JW2MWwn7nj3do/FVjsvT2MS3E3dmdAY0HsCZsDdn64hYyy2DoUFizBjKKvwar2BGV3BWzS0jQyg2MHQteXiXbN1ufzdqwtfS9u69Nz5K53XD/4UQnR7Pv0r5i244eDfHxsGVLOQSmVBgquStmt3ChVuhq6tSS77v34l5iUmIY1myY6QOzYgMbD8TV0ZVt54uvDtarlzb7aPnycghMqTDspyukWIjg66+hffuS35EKsPrUatyc3OjfuL/pQ7NiVVyrEDYtDF3Voq9HgFZrZvhwWLYMUlLAvfjKwYodUD13xcx6cuYMTJtW8j2llKwJW0PfRn3xcPEwfWhWzq+an9FljcePh6SkvEqRBRVsU+yL6rkrJuHn55c7vVGn0+W7SPocvr4wohSLJgkh2DVpV7FVEm2VlJIpG6egq6bjtc6vFdgmZ9YRCBwdL7J4cV0eeCCvYBtgU3XvFeOpnrtiEgVVfzx+HGAATz2llRwojYaeDQnwDTBZnBWJEILIhEh+OPxDoYt45M060pOdvZAtW+Dq1XIOVLFKKrkrZjNrFkAyTzxR8n2llDy56Ul2Xthp6rAqlOH+wzl34xxHo48a0Xoxer1WUllRVHJXzCIqSlsjFRaUePojwNHoo3x78FvCr4ebOrQKZWizoTgIB1aeXGlE69MEB2vTThVFJXfFLL78UlsEGz4v1f6rT61GIBjabKhJ46pofCr70EXXxaga76CtSXv4MIB9DmUpeVRyV8zgLubOhZEjASJKdYRVp1bRWdcZ38q+pgysQnqk1SP0btjbqDLAY8aAoyNACVceV2yOSu6KGUwjMRFefLF0e5+OPc2JmBMM97ft8r7GGtdyHF/2/xIXR5di2/r6Qr9+AOMM35wUe6WSu2JSCQkAzzNoUOluWgKITo7G39ufkGYhpgytQsvWZ3Pwv4NGtX3wQYC6qlKknVPJXTGpr74CqM7GjW2MqvhYkC66LpycepJ6VeuZPL6K6tuD39J2flvOXT9XbNshQwBi+f57s4elWDGV3BWTSUiAzz6D++8HKQ8ZVfHxdskZycWuH2qPBjUZBFDkhdWcG5rc3ARVqqxl7VqIiSmvCBVrU2xyF0L8IIS4JoQ4nu+16kKIrUKIcMO/nobXhRBithDirBDiqBCitTmDV6zL7Nlw4wa89VbpjzH/3/n4zvIlJlllpfz8qvnRplabIpN7/jLKf//9CJmZWtE2xT4Z03P/Eeh322uvANullI2B7YZtgP5AY8PjMeBb04SpWD9vPvlEGxIo7Vg7aFMgdVV1+FT2MV1oNmK4/3AOXD7ApYRLxbb194eOHVFDM3as2OQupdwNXL/t5SFATp9gITA03+uLpGY/UE0IUctUwSrW7C1SUuDDD0t/hCuJV9h7ca+aJVOInMXB14atNar9o4/C6dMAnc0XlGK1SjvmXkNKecXw/CpQw/C8DpC/WxFleO0OQojHhBAHhRAHY9TAYIV25gzA4zz2GDRrVvrjrDq1ColkZMBIU4VmU5p4NeGPSX/wePDjRrUfORKqVgV41KxxKdapzBdUpVbRqOCqRkXvN09KGSylDPbxUV/BK7JXXgFIK9NYO8CKEyto4duC5j7NTRGWTeqi62LUfHfQ6rqPGwcwkuu3f/dWbF5pk3t0znCL4d9rhtcvA/nnr9U1vKbYqJ07tfU74SNq1CiuddE+7v0xn/b51BRh2ayM7Axe3fYqv5z4xaj2jz0G4MaPP5ozKsUalTa5rwcmGp5PBNble/1Bw6yZ9kBCvuEbxcakp8MTT0DDhgBlT8rt67anT6M+ZT6OLXN2cGZ12Grm/TvPqPaBgQB/8NVXqDtW7YwxUyGXAn8BTYUQUUKIh4EPgd5CiHCgl2EbYDNwHjgLzAeeNEvUilX49FPtgt2cOQBpZTrWJ39+wj+X/zFJXLZMCMFw/+HsvLCTuJQ4I/eaTUQEbNxozsgUa2PMbJmxUspaUkpnKWVdKeUCKWWclLKnlLKxlLKXlPK6oa2UUk6VUjaSUt4jpTTufmmlwrlwAd59V1u7s38Zlze9lHCJl7a9xNbzW00TnI0b0XwE2TKb1adWG7nHOurV0+5DUOyHukNVKTG9XhvLdXSEz0tX0fcWObXKRzZXs2SM0apmKxpXb8yyE8uM3CObqVNhx46c1bEUe6CSu1Iifn5+ODpOY9s2cHV9jXomKP+y4uQKLWF5NS77weyAEIKHWz1Mjco1yNYbN5D+yCNQqZLqvdsTldyVEomMdKVSpTn06wfXr39Q9uPFR7I/aj+jAkaZIDr78XKnl/l5+M84Ojga1d7LC8aP11ZpUreV2AeV3BWjZWYCLMLNDRYsMM0xT8edxtvdWw3JlFJkfKTRbadP12Y4qd67fbD75O7n54cQAiEEfn5+lg7HqmmLb9zL3LlQu7ZpjtmnUR+uPn+VRtUbmeaAdmTBvwvw+9KPCzcuGNW+WTMICdFmN928aebgFIuz++QeGRmZW0kvMtL4XlB5s/QfoeXLtXVR4QvD8nlll5aVhpTS6KEF5Va9GvYCYNnxoi+s5pQCFkKwb99g4uNh7tzyiFCxJLtP7hWFJf8IHTkCDz8MHToAvGSy43609yOazGlCamaqyY5pT3TVdHSo14Glx5cW2S5/KeCrVzfQs6dWdz+tbLcmKFZOJXelSFFRMHAgVKsGK1YAZOa+l79HWNIVl6SULDm2hPpV61PJuZJpg7YjY1uM5di1Y5y4dsLofV59Fa5ehUWLzBiYYnF2k9wtPaxRESUkaIn95k3YvBnq3FbfM3+PsKQrLv3z3z+cvX6W8feMN13Admhk85E4CIdih2by69ED2raFJ5+8hBAu6nfCRtlNcq8oY+vW4uZN6NcPTp6EVaugZUvTHn/J0SW4OroyzH+YaQ9sZ2p41GDj2I083+F5o/cRAt55B7Kz6/H11xnqd8JG2U1yV4yXmKiVFDh4EH75BXr3Nu3xM7MzWXZ8GYObDqaqW1XTHtwO9W/cn2pu1Uq0T9++AHt47z1ISTFLWIqFVejkfuUKrF12jYiTl5H6EpeULxVbH965cgW6doW//4Zly2Do0OL3KSkhBPPun8cLHV4w/cHt1PxD8/l0n/GVOYUAeI0rV+Drr80WlmJBFTq5b98OIWN9aRBQBwfHeNzc9vPcI+dZ+OnfHDkCGRmlP3ZhSbykwzsV6Y/BiRNw333aykpeXpMYMcI8cTs5ODG02VDa1Wln0uPas50RO5m5ZybpWekl2GsvffvmLI1YxUyRKZZSoZP78OHQyPdevnv/MFOmeJKeLpn3U20mvXAvQUHg4QGtml1m8pDDwNP88QfExxmX8U01Rl9Rxvp/+gnatdOmx/3xB1y7ttAscSdlJPH2rreJuhllsmMqMDFwIjfSbrDhzIYS7TdzJoZVmkw3xVWxEjm/wJZ8tGnTRpYWuZWGtedZGZkyLPSaXLZMyldekbLvvUekb/UECTL34eVxXoaESPn221L617lfRp6+JvX6O49VkufGxmeqz2kq169LOXmy9nPp0kXKy5eLPl9Zz70wdKFkBnJ3xO4yHUe5VVZ2lqz9aW056OdBRbbT6XQ5y2JKnU4npZTygQekhFR5/nw5BKqYFHBQFpJXLZ7YpYmTe+Htashff5Xyg2d3ynrVl8qmTaUUQp+b8D09pXR13Sfb3z1b+vk8JmvUCJHx8UWfoyInd71eypUrpaxZU0pHRylff13KzMziz1fWc3f9X1d59+y7pV6vL9NxlDu9vPVl6fi2o7yaeLVE+126JCUkyeHDzRSYYjYquRfSLulmlmxZ7175zadX5KOPStm+Xbr0cLt5Sy+/vs9l6XPXRvnSS1IuXpgha3sGyrTU7CLPV1DvqLj4Svs5858r/yP/eW9Xo8YICXskSOniclT++6/x5yvLZwiPC5fMQL6/+/1SH0Mp3MlrJ2XnHzrLY9HHSrwvvCFByh07zBCYYjZFJXehvW9ZwcHB8uDB0i3aJIQg5zPkf25su9v3kdlZREZkc/yUK8cPXefY3mOs3V2NTBloqIoIjo56Gjd24OL5Fbz8eH1adPCnWcuqNGoErq6Fx1FUfKX9nIUd08/PL3esXKfTcfZsBOvXw1dfwa5dWuGv//s/mDLFCSmzynw+Y7y+/XU+/PNDLj57kTp31Sl+B6XcCFEJnS6VKlXg5s27uXjxXO57Op2uxDepKeVDCHFIShlc4JuFZf3yfJiq5357L7awXnNhPeuizpGRIeWJQ9dkj4CR8o1XkuTQoVJ6uIVLIbJze/kODnrZqPZl6eq0UT73nJTffZ0qd2xNl5cvyzvG9MvyOQt7frvsbCn37JESPpd16mgx6nRSwnSZnFz0/mX5eRVm6qapcuiyoaXeXzHOtaRr8r+b/5VoH0CuXZvzjfXVO95TrBP20nMv6j1z9ZqTrv3HqQu+9BvwPN4u1anv1ZTdZ1rg4BhAar56WFWqQHbGYXp38UbXrC46P4FOB/Xrg04H3t7gUMTcpeJ60lJq9UJOnYLDh2H3btizB27cAEhjyBA3Jk2C++8HJ6eCj3V7b98cvTW91OMgKvQkLauWkplCjVk1mBQ4ia8GfGX0fjn/D0aOhJUr0wgLc6Np01vfU6xPUT13p/IOxpbodDo8fGvnPg/Llwz1eog6cojTB8M5nT6G06dh78ZrnD7uzLqt1bh9XrGjI3h5ZePjI/D2dsDHB6pWBTc37QHv8tZbOQtmfMJTT+Uk7i0EBsLFixAfn3e8u+/Wanf36gUPPODL2rXFF/DOmbZpDtFJ0dTwqKESu5m5O7tzf5P7WXx0MR/1/gh3Z3ej9sspAgc1cHAI49FH3di1S+tw5L2nhmgqEtVzL+E5ytSLyc6A1MvIyg1wcKjO4RUfEHkuiUj357l2DWKObCbmuhsxDj2IiYGkhGTS0p1Jy3AhOTkbcMTZGTIzE/H0rEK1anDhwl8MGXIftWuDv7/2aNECatbMO23+Hjnc+gtaHr312JRY6nxWh497fcwz7Z8x+fGVW/0R8QfdFnbjf0P+x6SgSSXe/3//g4ce0ur3P/30re+pXrx1sZsx99uZaqwYE80Wya/A2C5vljJyZV6jjc2l3D0897z6HQOlPPp2XgzXD8tq7tY/Hjrrz1mSGcijV49aOhS7oNfrZbM5zeS98+8t5f5SDhokpaurlEeO3Pqeqf7/K6ZBEWPuNv0duSwlac0tf2y5vera/aH+8LxG/UOhXd6SOcK1Ojjflfs1OWlNKz6bbBjekRL+mQZXt+Xtr88uh09SNL3U8+3Bb+lUvxP31LjH0uHYBSEEj7d5nAOXD3D+xvlS7A8//ACenjB2rCosVlHZdHI3lbIsSlEmDs7g6pW33WERNHtW+8OQnYVH301MfneP9l7mTbj0CySc1LbTr8MKdzhnWMk6KwXOL4KU8r3tf+u5rZy7cY4ng58s1/Pau8lBkzn79FkaejYs1f4+PtpiHidPwnPP5b2e/3fB2msl2TuV3I1gld8AHByhzgDwDNS2XarCsGhoMk3blnpo9hxUMxRivxkG+ydC3AFtOyEMtnWHOMO1jsxESDwL+jvnvJfF/H/n41vZl+HNhxffWDGZqm5VS53Yc/TuDS+/DPPmwfz52msFfuNUrJJK7rYmZzaKmzcEfQhebbXtai1hUBjU6KltZyWBPgMcXbXt6B2woTFc/1fbjvsHDj0LqdHadnZ6qYZ55t8/n9WjVuPi6FKGD6WURmJ6IoOXDmbBvwtKfYyZM7Xa71Onwp9/mjA4xexUcrcyZisR7OAEdzXVevgAXsHQ50+oZhgH92wN9/4AVf217ZthcHZ+3h+Lc99rwzxp17TtmL8gfK42A6gInpU86Vi/o+k+h2I0DxcPLiZc5Mu/vyz1DBdHR1i6VLsXY/hwUJ31ikMldytjsRLBletBo8ngbLhA22ACjEoCV29t27M1NJsOrj7adtQa+PdZ7Y8GwLG34dc22oVdID3mL/r9cC/bz28vv8+g3EIIwTP3PsOxa8fYcWFHqY/j6Qnr1kF6OvTpAzExJgxSMRuV3JXCCZGzZA/43AdBH+RtB30Ig8/n9ewr+4FXu9z3f9r5NL9fOoDE0GMMfQUOPJ537BtHIDGvfoliHmPvGYtvZV8+3/95mY7TvDls2KDdLNe/v7YUY2Eq0gI1tkwld6V0hANUqpW33XAitPsW0KY/zrqWQKB3E3o26Fnw/v88CX8/krd98Gk4+XHedsIpbcaPUiZuTm48Gfwkm8I3cTr2dJmO1akTrFwJoaEwcCAUtnpTRVmgxtaVqfyAECICSASygSwpZbAQojqwHPADIoBRUsobZQtTqUh+O/sbp+LCWRyyOPe2dYI+vLVR8GzQZ+Ztp14Gh3wXXXf2Bd9u2vRPgANTtG2/Mdp28kXtj4uDs7k+hs14ou0TCCHwdvcu87EGDtRW7Ro/HmAr169D9eplPqxiBqbouXeXUgbJvFtgXwG2SykbA9sN20oRLDaP3kxm7ZtFnSp1GB0wuvBG1duAd/u87c6roPWsvO2230ATw9x4qYeYvZBkGMbRZ8H6hnBshmE7G/ZPhqvb89onXbj1j4cd863sy/91/T+83L2Kb2yE0aNh1SqAILy8jiBEXTX8YoXMUThsCNDN8HwhsAt42QznsRlWM3feBKSUTGg5AScHJ5wdy9CrrjMo77lwgIHH850kG9rNy5vDnxGn3ZnrbZiVk3JZS/5tv4PGj2szfA6/pN0D4BUM2WmQehXc6+ZdELYDa06t4Wb6TSYGTSzzsQYPhi1bXBk+PBAPjygiI9uaIELFlMrac5fAFiHEISHEY4bXakgprxieXwVqFLSjEOIxIcRBIcTBGHX53WYIIZjcajITAieY7ySOrtDoIS1RA7j5wtBLcLdhDN+5Cty7AGp017ZTr0L0dkiP07avH4b1DeDKFm074aTW8795RtvOvAlJEVZRvsGUfgj9gee3PE9SRpJJjte7N+zbpy1QA7tZtKjsx1QXY02nrMm9k5SyNdAfmCqE6JL/TUNhmwIn2Eop50kpg6WUwT4+PmUMQ7EGZ6+f5dN9n5KSaeFiJC7VtOR/VxNt27Ollvxr99W2Pfyg3Xyo3lrbTv0PrmzNG8b57zct+d80lHK4ugP2jsm7oSvlP+0PhInv5jW31zu/TlxqHHMPzi2+sZFatIADBwAOMHEiPPgggEepj6cuxppOmZK7lPKy4d9rwBqgHRAthKgFYPj3WlmDtFcVbSx+5p6ZvLHzDW6mF1873qIq1dJ6+ZUMdZFr9oKQKKgWoG17tdWGfTwMt++nx8D1Q3l380Yuhd9aa3f5ApxfCDv6aMM9APEntPF/qS+/z2SE9nXb06thL2b9NYvUzNTidzCS1jfryYwZ2sVWCGXbtiJ3UcpBqZO7EKKyEKJKznOgD3AcWA/kDOpNBNaVNUh7ZZU1bQpx7vo5Fh9ZzJQ2U6jpUbP4HayZRwO4+1Fwqqxt60bD4HDtGwFA/RHQeTU4G+72ldlaKQcHQ/I/Nx92DwUMM4WOvgXbuuUdP3oXROX7tSjH+uhvdH6Dq0lXWXC49CUJCpbNW29p6/NCNr1758yo8TXxeRRjlaXnXgPYK4Q4AhwANkkpfwM+BHoLIcKBXoZtxcZ9sPcDnByceLHji5YOxfwq66BeSN4NXY0egl678rb9X4Ie2/K2K9WCKk3y9j/zFYS+mrf952jY1jVv++z3cO6HvO3UK5CVbJLQu+i6ML7leHzczTMU2rkzQEv+7/9gxQqAs8yYATdvqvH08mbTKzEp5ePCjQs0mdOEJ4KfYHb/2ZYOx/plJEDGde0bAmjJPDMB/J/Xtrf3BOEEPX7Xtn9rBy6eedsHn9H2bfasth3zJ7jVhCqNyvdz5FPQamWnT0OzZiuBEXh7Q2zs68TGzsTLq/DfW5OtemYnilqJSd2hqpRZSmYKXXRdeLmjmvFqFJeqeYkdtPH/nMQO0HM7dNuYtx3wCjTNt95dYvitdfn3joQT7+dtb+lw692+4XPzSjsDZKWSlpXGnANzSEwvoo5AGTVtCjrdC0BbYmN/BWZSrx48+SSAWrjF3Oxnkq9iNgG+AWx/UBUIM6n8d97WG3bre90337rdeQ04GWaoSKldCM4p8KbPhH+mQIu3DHP8M2CFO0frTeGpHd9xPfka/+dyTisaV7OX1j7mT6jaQisbXUb5rxUdPw5ffKGt8gRHCQqCCRO01Z5q1y76OGVZ67c81gm2RqrnrpTJl/u/JDop2tJh2Dfve/Nm+ggBHZZoyRq04Z3hsdDMsDC5zIbAD2jXbAIhzUL45K/PiLn6pza9E7QbwLZ3h8vrte3kSFjfGC4b/qCkxWjfCnKKvmVnQEa8UWG2aAHffw9RUQBTcXODF16AOnUgOBhmzABog76ASUZlmSJpr9MrVXJXSm3LuS08+/uzLDu+zNKhKIURQluq0cVT23aqpA3z+HRgZo+ZpGSl8k6l+6Hhg9r7br7QYzvUMtwTIKXW488p/Zx4BkJf1lbtAojbDys96dXCcL7r/7LmOeCmoUhZShRcXKVdZwCQery9JPAN+/dDWBh88AG4ucG77wIcxMsLBg0CeIl9+yDVdLM27YpK7kqpZGZn8vyW52lQrQFTgqdYOhylFPx9/JnSZgrfHvyWY9HHtBed3KFmD3Cvo217+EHHpeDdTtv26Qgjb0KNbtp2ZT9o9Snx1EEIQffObWhaJ9+Q0rXdsHeEdqMYQMTPsKIyDQ0zJJtW28Ur3R9j744bREeDl8d4Rgy8wtmzEviIjh2hShWAY4wfD7NmAfTi0iXQ6y07A8fqZ//kfF2x5KNNmzaytLSPoJS3z/Z9JpmBXHtqraVDUcogLiVO9lncRx6+ctg8J8i4KeX1UCmz0rTt2H+kPPS8rOxq+L09+4OUq3y1dlLKlwYh5U9ImZkkwUeunr1WvjHySylYL+vWlVL7KqE9KlWS0tnxiBw+OEG+8oqUMFlu3SplWJiUycl5IeTPEabMF/mPpdPpcu7GlzqdzmTnMCKGg7KQvKqmQiol9l/ifzSb04zOus5sHLsxr6yvohipsN/bOtUFl09sgVq98fPzI9A7kkGtYOZW7UJo7M532bN+J9FNd3DmDGz9ZQOZ+macu9aYrNuqQXh5Qb0a10mM3UO/kUOoUwdmfzSZHxa8S82GdalZU7u71um2aSXGXoA1ZjqnuRU1FVIld6XEriZd5YUtL/B2t7dpVN1yc6sV04lLiePjPz/mtc6vUdWtqtnPV5bE2KCBjoiIiwD0bleLLavnk1VjIM7ODfjjpy+5eC6BS04TuHgRLh09zJnzjlxLbUlCQkFx6PGumkjNelWpWRNqup/iyL8bmfD0i/j4wDsvDWDpsrl46+rh4wMeHnn3pqnkbgSV3BXFsg5cPsB9C+7jkVaPMPd+0xUWK4w5EmP+ffP3vv386nPhQiQpKTCoUztuXHckNLIm1as356kxA7gaU4mrGa2JjoarEVf4L6YaGdmVCjyHi2Ma7q6xxKfE4uaWyNCuVfCp6YZ3w2b4+IC3QyjPv/4sm3ftwscHvDyzcXJxLNXnMfIzq+SulF18WjyPrH+ED3p+QGOvxpYORzGxF7e8yKy/ZrFtwjZ6NixkeUQTKSwRl2Ueeknvbi3qD0xCgiQ2FgZ3vZePPllCTFpjJk9+gZcmDSY2qQYx6U2JjYWYyIvEJnoTn+he6HmqVUnFu0YlvLzASxzEu7YXXroGeFWXeDn8S9u+bWjTplQfWSV3xTQmr5vM4iOL+evhv2hbRy3OYGtSM1MJ/C6QTH0mx544hodL6Uv3FsccZQZK+keipCUQioozMxPi4iDmXBh9Bj7Bl/N2EhsjiTnxBzGpDYlLq8+6dbvReVYm6ro3yeneSKkVpnv1VXj//QIPW6yikrvFZ8pINVumQlgftl4yA/n69tctHYpiRnsi90gxQ8inNz9t1vNYanZJfoXlDgqZXWNsrinss3HH7BoXWbVSLVm3blAJI78l1kJny6jyA0qxLiVcYtK6SQTWCOTNLm9aOhzFjDrV78T3g7+nT6M+Zj2PNZQAyFkvoaDXyyL/ZytsJpkxbcpKJXelWP+36//IzM5kxcgVuDq5WjocxcweavUQAHqp53rqdbzdy15jxhoZ8wcm/x+A0iT9su5fFmrMXSlWckYyR6OPcl+9+ywdilKOxq0ex8mYk+ydvJfKLpUtHY7NKuMMIVXyVym5bee3kZSRRGWXyiqx26Hx94znaPRRHlz7IHorWzJQKZ5K7kqBdkXsYsBPA3hl2yuWDkWxkP6N+zOr9yxWn1rNmzvUtZaKRo25K3cIiw1j2PJh3F39bt7r8Z6lw1Es6Nn2z3Iq9hTv732fhp4Nebj1w5YOSTGSFJfaMgAACZVJREFUSu7KLcLjwumxsAcuji5semAT1dyqWTokxYKEEMwZMIfUrFQCawZaOhylBFRyV3JJKZm4diKZ+kx2TdxFA88Gxe+k2DwXRxcWhyzO3T4Td4YmXk2K2EOxBmrMXcklhGDJsCVsf3A7Ab4Blg5HsUI/hv6I/9f+fP/v95YORSmGSu4Kf0T8wfTfpyOlpKFnQ1rWaGnpkBQrNbL5SHo37M2jGx7l/T3vq2nIVkwldzsmpWTBvwvos6QPv539jfg049bCVOxXZZfKrB+7nnH3jOP1Ha/z4NoHSclMsXRYSgFUcrdTKZkpTF43mUc2PEIXXRf2PrQXz0qelg5LqQBcHF1YFLKId7u/y9JjS9l3aZ+lQ1IKoJK7HZJS0v+n/iw6soi3ur7Fb+N+o3ql6pYOS6lAHIQDb3R5g9PTTtOrYS8A9kftVzc7WRGV3O1IQloC6VnpCCF4qcNLbJmwhRndZuDoYL7FBBTblrMS18mYk3T8oSM9FvbIW2xbsSiV3O1ARnYGX+7/kkazG/H1P18DMLDJwNwel6KUlb+3P/MGzeNo9FGC5gbx5KYniU6KtnRYdk0ldxuWlJHE7L9n03ROU579/VmCagbRo0EPS4el2CAhBA+3fpjwp8KZ2nYq8w7NI+CbANKy0iwdmt1SNzHZsAdWPcCGMxvoWK8j3wz4hn539zNb7WhFAfBy92J2/9k81e4p/r3yL25Obkgpefa3Z+nTqA/97u6nhgHLiSr5awOklIReDeXXs7/yy8lf2DB2A3Xvqss/l/8hS5+lKjoqFvVf4n8EfRdETEoMtTxqMaTpEEL8Q+jm1w0XRxdLh2dxquSvcofI+Egmrp1I7c9q03pea17f8Tqujq5cS74GQNs6bVViVyyudpXaRE2PYtWoVXSo14HFRxfTd0lf1oWtA7SVvvZe3EtyRrKFI7UtZhuWEUL0A74EHIHvpZQfmutctkov9RyLPsbZ62c5HXea03GnCYsNY0LLCUxrNw1XJ1c2h2+mR4Me9L+7P/3u7kdNj5qWDltR7uDi6MIw/2EM8x9GamYq2y9sp6uuKwBLjy/l5W0vIxDcXf1uAmsGEuATwAsdXsDDxYOUzBTcnNxwEKovWhJmGZYRQjgCZ4DeQBTwDzBWSnmyoPaWHJbRS33u/hKZ+9zZ0RnQZppk67Nz35NIHIQD7s7ugHbRMkuflXusjOwMHIQDvpV9AThx7QQ302+SkZ1BenY6GdkZeFXyyu1Rf7T3I64kXSEhPYH4tHiuJl2lm64bH/T6AL3U4/qea+7x61SpQ1PvpkxoOYFJQZO0mKVU4+hKhXY99Tp7Iv+/vfsPraoO4zj+/qi7TndxMr1mzNFMXKZZVrQCjbCBlVQLtEgq+iWFaKhEUQZB/0RkVH+lGMayJCk0jWBZSfRDcKbmlrpiosPlj02xVagNR09/nNPY3XYJc+eedva8YJwf37t7n2fn3ufe73fnfO+31LfW09DaQH1rPYd/PcyZFWcYPmw4S2uXsmrXKjJFGTIjM2SKMoxPj2fdPeuQRG1TLc3tzRSlikin0qRTaUYXjqaytBKAI78d4dz5c6SGpigYWkDBkAIKhxVSXFgMQEdnB4YhxBANQQqW+XoziWpYJqpP7pXAQTM7FAawAagG+izuF+U2KHq5qKvwmhmFwwppfy64lP7RLY/yXv17WcU5MzJD2zPB0MW8D+ex+afNWXc5cfREDi09BMDc9XPZdnhbVvv0cdNpWNQAQNW6KnYe3ZnVPrNsJt899h0A9350L42nGrPa50yaw9YHtwKwevdqTp87TfHwYooLixmfHk+mKAMEF4psum8TpaNKqRhTQTqV7pW+F3Y30JWMKKF6SjXVU6q79nV0dnR9X+8dk+9gRMEI2s60cfLsSU6eOUn7n+1dz/21P6xlY+PGrPucMGoCLctbAHjy0yf57OBnWe1Xjr2SA4uDclS1rortLduz2itLK6lbWAfAjNUzaGhtQFLXG0DV5VXUPlALwLS3ptHc3pz1+3dV3MWG+RsAKH+znFNnT2W1L7hqAW/f/faF/aEuUFSf3OcDt5vZwnD7IeBGM1vS7TZPAE+Em1cAP//HhxsLnPrXWyWL5zw4eM6Dw8XkfJmZZfpqiO1USDNbA6y52PuRtCtXtySpPOfBwXMeHKLKOapBpaNAWbftCeE+55xzeRBVcf8emCxpoqQUcD/wSUSP5ZxzrodIhmXMrFPSEmArwamQ75jZ/igei34Y2hmAPOfBwXMeHCLJ+X9xhapzzrn+5VcFOOdcAnlxd865BBpQxV3SO5LaJO3rtq9E0heSmsJlor4rLkfOKyX9JKlB0seSRscZY3/rK+dubU9LMklj44gtKrlylvRUeKz3S3o1rviikOO5PUPSDkl7Je2SVBlnjP1JUpmkryQdCI/n0nB/JDVsQBV3oAa4vce+54BtZjYZ2BZuJ0kNvXP+ArjKzK4mmObh+XwHFbEaeueMpDJgDnAk3wHlQQ09cpY0m+DK7mvMbBrwWgxxRamG3sf5VeAlM5sBvBhuJ0Un8LSZTQVuAhZLmkpENWxAFXcz+wY43WN3NfBuuP4ucE9eg4pYXzmb2edm1hlu7iC4jiAxchxngDeAZ4HEnQWQI+dFwCtm1hHepi3vgUUoR84GjArXi4FjeQ0qQmZ23Mz2hOt/AI1AKRHVsAFV3HO4xMyOh+sngEviDCYGjwG1cQcRNUnVwFEzq487ljyqAG6WVCfpa0k3xB1QHiwDVkpqIeipJK1XCoCkcuBaoI6IalgSinsXC87rTNynulwkvUDQ1VsfdyxRkjQSWEHQTR9MhgElBF34Z4APlfyZ4hYBy82sDFgOrI05nn4nKQ1sBJaZ2e/d2/qzhiWhuLdKuhQgXCaq65qLpEeAO4EHLPkXK0wCJgL1kpoJhqH2SEr65PW/AJsssBP4i2CSqSR7GNgUrn9EMMNsYkgqICjs683snzwjqWFJKO6fEDwhCJdbYowlL8IvQnkWuNvMzsYdT9TM7EczG2dm5WZWTlD0rjOzEzGHFrXNwGwASRVAiuTPmHgMuCVcvxVoijGWfhX2utYCjWb2eremaGqYmQ2YH+AD4DhwnuAF/jgwhuA/zE3Al0BJ3HHmIeeDQAuwN/xZHXecUefco70ZGBt3nHk4zingfWAfsAe4Ne4485DzLGA3UE8wHn193HH2Y76zCIZcGrq9dudGVcN8+gHnnEugJAzLOOec68GLu3POJZAXd+ecSyAv7s45l0Be3J1zLoG8uDvnXAJ5cXfOuQT6G2buDQeuZ+WtAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"\n",
"values, edges = np.histogram(data['x'].as_ndarray(), bins=100, range=x.bounds)\n",
"\n",
"binned_data = minkit.BinnedDataSet.from_ndarray(edges, x, values)\n",
"\n",
"with minkit.minimizer('bml', pdf, binned_data) as minimizer:\n",
" minimizer.migrad()\n",
"\n",
"values, edges = minkit.data_plotting_arrays(data, bins=100)\n",
"\n",
"centers = 0.5 * (edges[1:] + edges[:-1])\n",
"\n",
"plt.hist(centers, bins=edges, weights=values, histtype='step', color='k', label='data');\n",
"\n",
"pdf_centers, pdf_values = minkit.pdf_plotting_arrays(pdf, values, edges)\n",
"_, g_values = minkit.pdf_plotting_arrays(pdf, values, edges, component='g')\n",
"_, e_values = minkit.pdf_plotting_arrays(pdf, values, edges, component='e')\n",
"\n",
"plt.plot(pdf_centers, e_values, color='orange', linestyle=':', label='Exponential')\n",
"plt.plot(pdf_centers, g_values, color='green', linestyle='--', label='Gaussian')\n",
"plt.plot(pdf_centers, pdf_values, color='blue', label='PDF')\n",
"\n",
"plt.legend();\n",
"\n",
"# Reset the values\n",
"pdf.set_values(**initials)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Similarly, with the FCN *chi2* we would be doing a fit to the chi-square, that is, we would be assuming that the input values, instead of following a Poisson distribution, they follow a Gaussian."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}