{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "

Fitting and model building

\n", "\n", "#### **Quick intro to the following packages**\n", "- The core package `iminuit`.\n", "- Model building and a word on the Scikit-HEP affiliated project/package `zfit`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " \n", "
\n", " \n", "

Python wrapper to Minuit2 minimization and error computation package

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `iminuit` package provides Python bindings for the [C++ Minuit2 library](https://root.cern.ch/guides/minuit2-manual) maintained at CERN, which is effectively the only fitting engine used in HEP. The package has no external dependency apart from NumPy.\n", "\n", "`iminuit` gives the user full power of the engine internals. That can be really useful, but it often demands a certain level of expertise. It is hence no wonder that many fitting libraries around build atop it. That's in particular the case for Astronomy.\n", "\n", "Note: feel free to complement the introduction below with the several *great tutorials* available from the [GitHub repository](https://github.com/scikit-hep/iminuit). Indeed what is shown here is just an appetiser." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **1. A very simple example**\n", "\n", "Minimisation of a function:" ] }, { "cell_type": "code", "execution_count": 1, "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.731e-18 Nfcn = 36
EDM = 6.73e-18 (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 x 2 1
1 y 3 1
2 z 4 1
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x y z
x 1 0 0
y 0 1 0
z 0 0 1
" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 6.731e-18 │ Nfcn = 36 │\n", "│ EDM = 6.73e-18 (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 │ x │ 2 │ 1 │ │ │ │ │ │\n", "│ 1 │ y │ 3 │ 1 │ │ │ │ │ │\n", "│ 2 │ z │ 4 │ 1 │ │ │ │ │ │\n", "└───┴──────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───┬───────┐\n", "│ │ x y z │\n", "├───┼───────┤\n", "│ x │ 1 0 0 │\n", "│ y │ 0 1 0 │\n", "│ z │ 0 0 1 │\n", "└───┴───────┘" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from iminuit import Minuit\n", "\n", "def fcn(x, y, z):\n", " return (x - 2) ** 2 + (y - 3) ** 2 + (z - 4) ** 2\n", "\n", "fcn.errordef = Minuit.LEAST_SQUARES\n", "\n", "m = Minuit(fcn, x=0, y=0, z=0)\n", "\n", "m.migrad() # run optimiser" ] }, { "cell_type": "code", "execution_count": 2, "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.731e-18 Nfcn = 52
EDM = 6.73e-18 (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 x 2 1
1 y 3 1
2 z 4 1
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
x y z
x 1 0 0
y 0 1 0
z 0 0 1
" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 6.731e-18 │ Nfcn = 52 │\n", "│ EDM = 6.73e-18 (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 │ x │ 2 │ 1 │ │ │ │ │ │\n", "│ 1 │ y │ 3 │ 1 │ │ │ │ │ │\n", "│ 2 │ z │ 4 │ 1 │ │ │ │ │ │\n", "└───┴──────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───┬───────┐\n", "│ │ x y z │\n", "├───┼───────┤\n", "│ x │ 1 0 0 │\n", "│ y │ 0 1 0 │\n", "│ z │ 0 0 1 │\n", "└───┴───────┘" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m.hesse() # run covariance estimator" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **2. A more evolved example**\n", "\n", "Let's look at a little sample of track information generated with a toy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Acknowledgements\n", "\n", "This mini-tutorial is kindly provided by Hans Dembinski (TU Dortmund), with minor modifications.\n", "
" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import uproot\n", "\n", "f = uproot.open(\"data/sample_tracks.root\")\n", "\n", "event = f[\"event\"]" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "name | typename | interpretation \n", "---------------------+--------------------------+-------------------------------\n", "trk_len | int32_t | AsDtype('>i4')\n", "mc_trk_len | int32_t | AsDtype('>i4')\n", "trk_imc | int32_t[] | AsJagged(AsDtype('>i4'))\n", "trk_px | float[] | AsJagged(AsDtype('>f4'))\n", "trk_py | float[] | AsJagged(AsDtype('>f4'))\n", "trk_pz | float[] | AsJagged(AsDtype('>f4'))\n", "mc_trk_px | float[] | AsJagged(AsDtype('>f4'))\n", "mc_trk_py | float[] | AsJagged(AsDtype('>f4'))\n", "mc_trk_pz | float[] | AsJagged(AsDtype('>f4'))\n", "mc_trk_pid | int32_t[] | AsJagged(AsDtype('>i4'))\n" ] } ], "source": [ "event.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Legend :-):\n", "* mc_trk_len: number of true tracks in event\n", "* mc_trk_px: x-component of true momentum of particle (variable-length array)\n", "* mc_trk_py: y-component of true momentum of particle (variable-length array)\n", "* mc_trk_pz: z-component of true momentum of particle (variable-length array)\n", "* trk_len: number of reconstructed tracks in event\n", "* trk_px: x-component of momentum of reconstructed track (variable-length array)\n", "* trk_py: y-component of momentum of reconstructed track (variable-length array)\n", "* trk_pz: z-component of momentum of reconstructed track (variable-length array)\n", "* trk_imc: index of matched true particle or -1 (variable-length array)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get the content of branches as arrays (don't use this in large trees - you will exhaust the computer memory):" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "trk_len = event[\"trk_len\"].array()\n", "mc_trk_len = event[\"mc_trk_len\"].array()\n", "#trk_mom = event.arrays([\"trk_px\", \"trk_py\", \"trk_pz\"], library=\"pd\")\n", "trk_px = event[\"trk_px\"].array(library=\"pd\")" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
[7,\n",
       " 6,\n",
       " 3,\n",
       " 6,\n",
       " 4,\n",
       " 7,\n",
       " 4,\n",
       " 5,\n",
       " 4,\n",
       " 3]\n",
       "----------------\n",
       "type: 10 * int32
" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# first ten entries, this is a normal numpy array\n", "trk_len[:10]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "63 events with zero tracks\n" ] } ], "source": [ "import numpy as np\n", "\n", "print(f\"{np.sum(trk_len == 0)} events with zero tracks\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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7rvvPr3yyiuhbqtTDRs2TP/1X/+ljz76SJL0hz/8QXv37tXf//3fh7izzldTU6O6urqA55zo6GgNHz48bJ9zpK+ed1wuV9jMIF6+fFler1dPP/20Bg8eHOp2OtXly5e1fft23X333Ro7dqwSExOVlZV1zbfUOhsh5gZ99tlnamtra/fhk0lJSe0+pDIc2LatBQsWaNiwYUpPTw91O51m8+bNOnz4sEpKSkLdSqf705/+pDVr1igtLU2/+93vNHv2bM2fP1+vv/56qFvrNIsXL9ajjz6qe+65Rz169NB9992noqIiPfroo6FurdN9/bxyuzznSNKf//xnLVmyRIWFhWHzoYkrVqxQZGSk5s+fH+pWOl19fb2am5u1fPlyjRs3Tjt37tTDDz+syZMnq6Ki4pb00K0/dqA7crlcAeu2bbfbFg7mzp2rDz74QHv37g11K53m9OnTevLJJ7Vz585b937tLXT58mUNHTpUxcXFkqT77rtPx44d05o1a/TjH/84xN11ji1btuiNN97Qpk2bNHjwYFVXV6uoqEgej0fTpk0LdXtd4nZ5zrl06ZIeeeQRXb58WS+99FKo2+kUVVVV+tWvfqXDhw+H5e/s6xPqf/CDH+ipp56SJH33u9/Vvn379PLLL2v48OFd3gMzMTcoISFBERER7f4Cqq+vb/eXkunmzZunt99+W7t371bfvn1D3U6nqaqqUn19vTIzMxUZGanIyEhVVFToX//1XxUZGam2trZQt3hTkpOTNWjQoIBtAwcODJsTzyXp6aef1pIlS/TII48oIyNDXq9XTz31VFjOrLndbkm6LZ5zLl26pClTpqimpkbl5eVhMwvz+9//XvX19erXr5/znPPJJ59o4cKFuuuuu0Ld3k1LSEhQZGRkSJ93CDE3KCoqSpmZmSovLw/YXl5ertzc3BB11bls29bcuXP15ptvateuXUpNTQ11S51q1KhROnLkiKqrq51l6NCh+qd/+idVV1crIiIi1C3elO9///vtLon/6KOPQv6BqZ3piy++0Le+Ffi0FRERYewl1teSmpoqt9sd8JzT2tqqioqKsHnOkf5/gDl58qTeeecdxcfHh7qlTuP1evXBBx8EPOd4PB49/fTT+t3vfhfq9m5aVFSU7r///pA+7/B2UhAWLFggr9eroUOHKicnR+vWrdOnn36q2bNnh7q1TjFnzhxt2rRJb731lmJiYpy/AC3LUs+ePUPc3c2LiYlpd35P7969FR8fHxbn/Tz11FPKzc1VcXGxpkyZooMHD2rdunVat25dqFvrNBMnTtQvf/lL9evXT4MHD9b777+vVatW6fHHHw91ax3S3Nysjz/+2FmvqalRdXW14uLi1K9fPxUVFam4uFhpaWlKS0tTcXGxevXqpcLCwhB2HZxrjdHj8egf/uEfdPjwYf3nf/6n2tranOeduLg4RUVFhartG3a93+GVoaxHjx5yu90aMGDArW61Q643vqefflpTp07Vgw8+qJEjR6qsrEy/+c1vtGfPnlvTYMiuizLUv//7v9v9+/e3o6Ki7O9973thdfmxpKsur732Wqhb6zLhdIm1bdv2b37zGzs9Pd2Ojo6277nnHnvdunWhbqlTNTY22k8++aTdr18/+4477rC//e1v288995zt9/tD3VqH7N69+6r/56ZNm2bb9leXWf/0pz+13W63HR0dbT/44IP2kSNHQtt0kK41xpqamm983tm9e3eoW78h1/sdXsm0S6xvZHyvvvqq/Z3vfMe+44477CFDhtjbtm27Zf25bNu2uz4qAQAAdC7OiQEAAEYixAAAACMRYgAAgJEIMQAAwEiEGAAAYCRCDAAAMBIhBgAAGIkQAwAAjESIAQAARiLEAAAAIxFiAACAkQgxAADASP8Pq9wj/A70k5sAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.hist(trk_len);" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 [-0.6920520067214966, 0.47761717438697815, -0....\n", "1 [0.07138693332672119, -0.12577307224273682, 0....\n", "2 [0.15179944038391113, 0.18735994398593903, -0....\n", "3 [-0.09476272761821747, -0.23816564679145813, 1...\n", "4 [0.3027496337890625, 1.2473642826080322, -0.87...\n", "5 [0.6755227446556091, -0.45894306898117065, 0.5...\n", "6 [0.5256932973861694, -0.9807479381561279, -0.3...\n", "7 [-0.5512446165084839, -0.1379464566707611, -0....\n", "8 [0.793757438659668, -0.24584700167179108, -0.2...\n", "9 [0.30341583490371704, 0.17404547333717346, -0....\n", "dtype: awkward" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# first ten entries, trk_px is a special jagged array\n", "trk_px[:10]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import awkward as ak\n", "plt.hist(ak.flatten(trk_px));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### **Fits**\n", "\n", "* Typical analysis work flow:\n", " 1. Pre-select data and make compact data trees\n", " 2. Make histograms and profiles from tree data\n", " 3. Fit histograms and profiles to extract physical parameters\n", "* Many specialized fitting tools for individual purposes, e.g.:\n", " - [scipy.optimize.curve_fit](https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html#scipy.optimize.curve_fit)\n", " - [RooFit](https://root.cern.ch/roofit)\n", "* Generic method\n", " - Select mathematical model (PDF) which describes data\n", " - Use maximum-likelihood method to adapt model to data\n", "* Specialised methods give fast results for some types of problems\n", "* Generic method allows one to do advanced things not implemented in specialised methods" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's fit the $p_x$ distribution with a normal distribution to extract the parameters $\\mu$ and $\\sigma$.\n", "\n", "- To apply a maximum-likelihood method, we need a statistical model that describes the data\n", "- Assumption 1: original data before histogramming is normal distributed; pdf is $\\mathcal{N}(\\mu, \\sigma)$ with parameters $\\mu$ and $\\sigma$\n", "- Assumption 2: count in histogram cell is Poisson distributed $P(n_i, \\lambda_i)$\n", "- Expected content in a histogram cell is $\\lambda_i = N \\int_{x_i}^{x_{i+1}} \\mathcal{N}(\\mu, \\sigma) \\, \\text{d}x$, where $N$ is total number of events\n", "- Likelihood is joint probability of data under model\n", " $L = \\prod_i P(n_i, \\lambda_i)$, need to maximize this by varying model parameters $\\mu$ and $\\sigma$\n", "- Technical step to achieve this: Minimize score $S(\\mu,\\sigma) = -2\\ln L(\\mu, \\sigma) = -2\\sum_i \\ln P(n_i; \\lambda_i)$" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 [-0.6920520067214966, 0.47761717438697815, -0....\n", "1 [0.07138693332672119, -0.12577307224273682, 0....\n", "2 [0.15179944038391113, 0.18735994398593903, -0....\n", "3 [-0.09476272761821747, -0.23816564679145813, 1...\n", "4 [0.3027496337890625, 1.2473642826080322, -0.87...\n", " ... \n", "9995 [0.6323919892311096, -0.4815252721309662, 0.30...\n", "9996 [-0.26708662509918213, -0.24033644795417786, 0...\n", "9997 [-0.3860778510570526, 0.5450289845466614, 0.19...\n", "9998 [0.5447519421577454, -0.19548873603343964]\n", "9999 [0.2291567623615265, 0.224922314286232, -0.214...\n", "Length: 10000, dtype: awkward" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "trk_px" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Histogram(Regular(50, -2, 2), storage=Double()) # Sum: 49792.0 (49797.0 with flow)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import boost_histogram as bh\n", "\n", "xaxis = bh.axis.Regular(50, -2, 2)\n", "h_px = bh.Histogram(xaxis)\n", "\n", "h_px.fill(ak.flatten(trk_px))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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QAiCmHvvvdf775ycHN14440aNWqUdu/erW9/+9tXPc80TdlsX9x87f99tTTtrV27Vk8++WQfcg4A1kJgi4Eu5DP2OhwOjRo1Sh9++KEkyW63q6mpSXV1dT7pamtrlZaW5k1z9uzZTt/16aefetN0tHr1arlcLu926tSpIJcEAABEkpAHMefOndOpU6fkcLS10U6cOFGDBw9WWVmZN01NTY0qKys1bdo0SVJubq5cLpcOHTrkTfP222/L5XJ503QUHx+vpKQknw0AAESvgJuTLly4oL/85S/e/erqalVUVCg5OVnJyckqLi7Wd77zHTkcDp08eVKPP/64UlJS9K1vfUuSZBiG7rvvPj366KMaMWKEkpOTtXLlSo0fP947Wum6665TXl6eli5dqi1btkiS7r//fs2dO5dOvQAAQFIvgph33nlHt99+u3d/xYoVkqRFixZp8+bNeu+99/Tb3/5W58+fl8Ph0O23364XXnhBiYmJ3nM2btyoQYMGaf78+bp8+bJmzJihkpISxcbGetNs375djzzyiHcU07x587qdmwYAAAwsNtM0u1pHzPLcbrcMw5DL5aJpCQAAiwjk/R3yPjEAAAChQBADAAAsiSAGAABYEkEMAACwJIIYAABgSQQxAADAkghiAACAJRHEAAAASyKIAQAAlkQQAwAALIkgBgAAWFLAC0ACCL6WVlOHqj9XbX2DUhMTNDkzWbExtnBnCwAiGkEMEGallTV68tUq1bgavMccRoKK8rOVl+MIY84AILLRnASEUWlljZZtO+oTwEiS09WgZduOqrSyJkw5A4DIR00M0E8uNV3x2W9pNVW067jMLtKakmySindV6aaxKT5NS0PjuG0BQCKIAfpN9hOvB5TelOR0N2h88R6f4yfX3RXEXAGAddGcBAAALImaGKCfVD0122f/UPXnWrz1cI/nlSyZpMmZyaHKFgBYFkEM0E869mWZnjVSDiNBTldDl/1ibJLsRoKmZ41kuDUAdIHmJCBMYmNsKsrPltQWsLTn2S/KzyaAAYCrIIgBwigvx6HNCyfIbiT4HLcbCdq8cALzxKBPWlpNHfjonF6p+EQHPjqnltau6vwA66I5CQizvByHZmbbmbEXQcUkihgIbKZpRmVo7na7ZRiGXC6XkpKSwp0dAOg3nkkUOz7cPWExtXyIZIG8v6mJAQCLaz+RIpMoYiDh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ARmGoSlTpniPTZ06VYZh9JjXSLp2TU1NOnLkiM//uSTNmjXrquU4cOBAp/SzZ8/WO++8o+bm5pDlNVC9KZvHDTfcIIfDoRkzZujNN98MZTb7jVWuW19Y8bq5XC5J6vadFinXjiAmCD766CP9x3/8h374wx9eNY3T6ZQkpaWl+RxPS0vzfmZlc+bM0fbt2/XGG2/o5z//uQ4fPqw77rhDjY2N4c5an1jpujmdTqWmpnY6npqa2m1eI+3affbZZ2ppaQno/9zpdHaZ/sqVK/rss89CltdA9aZsDodDv/rVr/Tiiy/qpZde0rhx4zRjxgy99dZb/ZHlkLLKdesNq1430zS1YsUK3XzzzcrJyblquki5dgQx7RQXF3fZEav99s477/icc+bMGeXl5em73/2u/vmf/7nHn2Gz2Xz2TdPsdCwUelO2QNx777266667lJOTo/z8fP3xj3/Un//8Z+3evTuIpehaqMsmhe+6SYGVr6s89ZTXcF677gT6f95V+q6OR4JAyjZu3DgtXbpUEyZMUG5urp555hnddddd+vd///f+yGrIWem6BcKq1+3hhx/Wu+++q9///vc9po2Eazeo336SBTz88MP63ve+122a0aNHe/995swZ3X777crNzdWvfvWrbs+z2+2S2qJXh8PhPV5bW9spmg2FQMvWVw6HQ6NGjdKHH34YtO+8mlCWLdzXTfK/fO+++67Onj3b6bNPP/00oLz257XrSkpKimJjYzvVTHT3f26327tMP2jQII0YMSJkeQ1Ub8rWlalTp2rbtm3Bzl6/s8p1C5ZIv27Lly/Xrl279NZbb+maa67pNm2kXDuCmHZSUlKUkpLiV9pPPvlEt99+uyZOnKitW7cqJqb7Sq3MzEzZ7XaVlZXphhtukNTWPl5eXq6nn366z3nvSSBlC4Zz587p1KlTPi/+UAll2cJ93ST/y5ebmyuXy6VDhw5p8uTJkqS3335bLpdL06ZN8/vn9ee160pcXJwmTpyosrIyfetb3/IeLysr0913393lObm5uXr11Vd9ju3Zs0c33nijBg8eHNL8BqI3ZevKsWPHwnZ9gskq1y1YIvW6maap5cuXa+fOndq7d68yMzN7PCdirl2/diOOEp988ok5duxY84477jBPnz5t1tTUeLf2xo0bZ7700kve/XXr1pmGYZgvvfSS+d5775nf//73TYfDYbrd7v4uQrc+/vhj89ixY+aTTz5pfulLXzKPHTtmHjt2zKyvr/emaV+2+vp689FHHzX3799vVldXm2+++aaZm5trfuUrX7F82UzTOtfNNE0zLy/P/MY3vmEeOHDAPHDggDl+/Hhz7ty5PmmscO127NhhDh482HzuuefMqqoqs7Cw0Bw2bJh58uRJ0zRNc9WqVWZBQYE3/V//+ldz6NCh5r/+67+aVVVV5nPPPWcOHjzY/O///u9wFeGqAi3bxo0bzZ07d5p//vOfzcrKSnPVqlWmJPPFF18MVxGuqr6+3ntPSTI3bNhgHjt2zPz4449N07T2dQu0bFa6bsuWLTMNwzD37t3r8z67dOmSN02kXjuCmF7YunWrKanLrT1J5tatW737ra2tZlFRkWm32834+HjzlltuMd97771+zn3PFi1a1GXZ3nzzTW+a9mW7dOmSOWvWLHPkyJHm4MGDzWuvvdZctGiR+be//S08BehGoGUzTetcN9M0zXPnzpk/+MEPzMTERDMxMdH8wQ9+0GmIp1Wu3X/+53+ao0aNMuPi4swJEyb4DPdctGiReeutt/qk37t3r3nDDTeYcXFx5ujRo83Nmzf3c479F0jZnn76aXPMmDFmQkKCOXz4cPPmm282d+/eHYZc98wzrLjjtmjRItM0rX3dAi2bla7b1d5n7Z+DkXrtbKb59544AAAAFsLoJAAAYEkEMQAAwJIIYgAAgCURxAAAAEsiiAEAAJZEEAMAACyJIAYAAFgSQQwAALAkghgAAGBJBDEAAMCSCGIAAIAlEcQAAABL+v8B+JkMT+g1gQgAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# get data from before\n", "px_axis = h_px.axes[0]\n", "cx = px_axis.centers\n", "dx = px_axis.widths\n", "xe = px_axis.edges\n", "n = h_px.view()\n", "\n", "plt.errorbar(cx, n, n**0.5, dx, fmt=\"o\", label=\"data\");" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "# scipy has efficient and correct implementations for most statistical distributions\n", "from scipy.stats import norm, poisson\n", "\n", "n_total = np.sum(n)\n", "\n", "def score(mu, sigma):\n", " cdf = norm(mu, sigma).cdf\n", " lambdas = n_total * (cdf(xe[1:]) - cdf(xe[:-1]))\n", " probs = poisson.pmf(n, lambdas)\n", " return -2 * np.sum(np.log(probs + 1e-100)) # avoid taking log of zero" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "image/png": "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ERUVBY1GgzfffBO//vorli1bhszMTLNGrxw64rNx40bodDpMnDgRoaGh4m3Xrl1iTX19PWpqasT7w4cPx759+3D48GHcc889eO2117Bu3To8/PDDYs24ceOQn5+Pjz/+GHfffTfy8vKwa9cuydHiRERE1DNT+mlTrFmzBnPmzEFaWhqSkpLQv39/fPHFF/Dw8BBrtm/fjpiYGCQnJyM5ORl33303tm3bJj7u4eGBvXv3wsfHB0lJSUhLS8OcOXPw1ltvmbUsCqHjyGAS6fV6qFQqvFyezGN8iIioRy3NbfhzwgHodDqzRh7M0dEvfft9SJ+O8Wm+ehNjR12y6bI6O/5WFxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJBoMPERERyQaDDxEREckGgw8RERHJhkODz9GjRzFz5kyEhYVBoVDg888/77F+3rx5UCgURrdRo0aJNXl5eV3WtLS02Lg1RERE7mXVqlW49957MWDAAAQHB2POnDk4d+6cpOazzz5DSkoKgoKCoFAoUFVVZTQfg8GARYsWISgoCH5+fpg1axYuXLggqWlsbIRGo4FKpYJKpYJGo0FTU5OkpqamBjNnzoSfnx+CgoKwePFitLa2mtUmhwafa9euYfTo0Vi/fr1J9WvXrkV9fb14q62tRWBgIB555BFJnb+/v6Suvr4ePj4+tmgCERGR2zpy5AiefvpplJeXo7i4GDdu3EBycjKuXbsm1ly7dg1JSUl44403up1PVlYWCgsLkZ+fj5KSEjQ3NyM1NRXt7e1iTUZGBqqqqlBUVISioiJUVVVBo9GIj7e3t2PGjBm4du0aSkpKkJ+fj4KCAixdutSsNnmaVW1l06dPx/Tp002u70iBHT7//HM0NjbiiSeekNQpFAqo1WqrLScREZEcFRUVSe5//PHHCA4ORmVlJcaPHw8AYjj5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wMBAwdfXV0hNTRVqamps1o5ffvlFeOyxx4QBAwYIAwYMEB577DGj01s7t0MQBGHTpk2Cr69vl9eDqampEcaPHy8EBgYK3t7ewl133SUsXrzY6Bo5jmzH//zP/wjJycnC4MGDBS8vL2HYsGHC3Llzjd5re34e5rahurq6y+/g7d9De3wWGzZsEMLDwwVvb29hzJgxkpGkuXPnChMmTJDUHz58WIiNjRW8vb2FO++8s8vw/OmnnwqRkZGCl5eXMGLECElnbCvmtGPChAldvu9z584Va7KysoRhw4YJ3t7ewuDBg4Xk5GShtLTUadqwevVq4a677hJ8fHyEgIAA4f777xf27t1rNE9n/ywE4dborK+vr7B58+Yu52fvz6Jj9Km774crrRfUNYUg/L+jsIiIiIjcHK/jQ0RERLLB4ENERESyweBDREREssHgQ0RERLLB4ENERESyweBDREREssHgQ0RERLLB4ENERESyweBDREREssHgQ0Q9KikpgZeXFwwGgzituroaCoUCP//8swOXjIjIfAw+RNSjqqoqjBw5EkqlUjJt4MCBCA8Pd+CSERGZj8GHiHp08uRJxMbGSqZVVVVh9OjRDloiIiLLMfgQUY+qqqpwzz33SKadOHGCwYeIXBKDDxF1q729Hd9//73RiM/x48eNwhARkStg8CGibp07dw7Xr19HWFiYOK2srAx1dXUc8SEil8TgQ0TdqqqqAgC89957OH/+PPbv34/HH38cACRneRERuQoGHyLqVlVVFaZOnYrq6mpER0fjxRdfxBtvvAF/f39s2LDB0YtHRGQ2hSAIgqMXgoicU0pKCsaMGYNVq1Y5elGIiKyCIz5E1K2TJ0/i7rvvdvRiEBFZDYMPEXVJq9Xi0qVLDD5E5Fa4q4uIiIhkgyM+REREJBsMPkRERCQbDD5EREQkGww+REREJBsMPkRERCQbDD5EREQkGww+REREJBsMPkRERCQbDD5EREQkGww+REREJBsMPkRERCQb/z94gotzQ/AsDgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib.ticker import LogLocator\n", "\n", "mus = np.linspace(-1, 1, 20)\n", "sigmas = np.linspace(1e-10, 2, 20)\n", "\n", "g_mu, g_sigma = np.meshgrid(mus, sigmas)\n", "g_score = np.vectorize(score)(g_mu, g_sigma)\n", "\n", "plt.contourf(g_mu, g_sigma, g_score)\n", "plt.xlabel(r\"$\\mu$\")\n", "plt.ylabel(r\"$\\sigma$\")\n", "plt.colorbar();" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "<>:10: SyntaxWarning: invalid escape sequence '\\m'\n", "<>:10: SyntaxWarning: invalid escape sequence '\\p'\n", "<>:10: SyntaxWarning: invalid escape sequence '\\q'\n", "<>:10: SyntaxWarning: invalid escape sequence '\\p'\n", "<>:10: SyntaxWarning: invalid escape sequence '\\m'\n", "<>:10: SyntaxWarning: invalid escape sequence '\\p'\n", "<>:10: SyntaxWarning: invalid escape sequence '\\q'\n", "<>:10: SyntaxWarning: invalid escape sequence '\\p'\n", "C:\\Users\\Eduardo Rodrigues\\AppData\\Local\\Temp\\ipykernel_17752\\920814338.py:10: SyntaxWarning: invalid escape sequence '\\m'\n", " plt.title(f\"$\\mu = {mu:.3f} \\pm {s_mu:.3f}, \\quad \\sigma = {sigma:.3f} \\pm {s_sigma:.3f}$\")\n", "C:\\Users\\Eduardo Rodrigues\\AppData\\Local\\Temp\\ipykernel_17752\\920814338.py:10: SyntaxWarning: invalid escape sequence '\\p'\n", " plt.title(f\"$\\mu = {mu:.3f} \\pm {s_mu:.3f}, \\quad \\sigma = {sigma:.3f} \\pm {s_sigma:.3f}$\")\n", "C:\\Users\\Eduardo Rodrigues\\AppData\\Local\\Temp\\ipykernel_17752\\920814338.py:10: SyntaxWarning: invalid escape sequence '\\q'\n", " plt.title(f\"$\\mu = {mu:.3f} \\pm {s_mu:.3f}, \\quad \\sigma = {sigma:.3f} \\pm {s_sigma:.3f}$\")\n", "C:\\Users\\Eduardo Rodrigues\\AppData\\Local\\Temp\\ipykernel_17752\\920814338.py:10: SyntaxWarning: invalid escape sequence '\\p'\n", " plt.title(f\"$\\mu = {mu:.3f} \\pm {s_mu:.3f}, \\quad \\sigma = {sigma:.3f} \\pm {s_sigma:.3f}$\")\n" ] }, { "data": { "image/png": "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ja5duxqvvPKKsXz5cmPmzJkGYCxcuNBTZuXKlYbVajXmzJnTrP19KWcYrg/Nd9991/jLX/5iAMa1115rvPvuu8a7775rHDt2rM7jcDqdtSYxq+9SWlraor9HQ38Tf/89fve73xmAkZGRUeex1AQYI0eOrPf4WuLSSy81wsPDjccff9xYtmyZ8fjjjxudOnUyJkyYYFRVVbXKc56uJefmhhtuMB544AHj3XffNVasWGG88sorRt++fY3w8HBj2bJltZ7Ll9egL69tw/Dfa7Wpz92W719fX69iHiUx0mKPPvqoER4ebrz77rtGr169jOjoaGPUqFHGl19+afTp08dwOBzGmjVrWjWGkpIS46677jLsdrsRGRlpnH/++cY777zjVcY9UVhdv0absr8v5QzDMHr27GkAdV7y8vLq3McdY1Mu9T2GL3HW9zfx999j5MiRDR5LzccEjOuvv77e42uJ/fv3GzfccIPRpUsXIzIy0khLSzN+97vfGRUVFa3yfDW15NzMnTvXuPDCCw2bzWZYrVYjPj7euPrqq41169bV+Vy+vAZ9eW2fHl9LX6tNfe62fP/68noVc1kM42RjqkgzXXHFFRQUFLBp0yazQ5EQ8PHHHzNx4kT+/e9/079/f7PDEZEApo690mIbN25k8ODBZochIWLFihVcf/31SmBEpFEaYi0t8sMPP1BYWKgkRvzmmWeeMTsEEQkSak4SERGRoKTmJBEREQlKSmJEREQkKCmJERERkaAUsh17q6ur+emnn4iJifHLwnwiIiLS+gzDoKSkhKSkpHqXrHEL2STmp59+okePHmaHISIiIs2wd+/eehdkdQvZJCYmJgZw/RFiY2NNjkZERESaori4mB49eni+xxsSskmMuwkpNjZWSYyIiEiQaUpXEHXsFRERkaCkJEZERESCkpIYERERCUoh2ydGRESkNVVVVVFRUWF2GEHHarUSHh7ul+lPlMSIiIj46OjRo+zbtw8tP9g8HTt2xOFwEBkZ2aLHURIjIiLig6qqKvbt20fHjh2Jj4/XhKo+MAyD8vJyDhw4QF5eHikpKY1OaNcQJTEiIiI+qKiowDAM4uPj6dChg9nhBJ0OHToQERHBnj17KC8vJzo6utmPpY69IiIizaAamOZrSe2L1+P45VFERERE2piSGBEREQlKSmJERETaAcMwuOWWW4iLi8NisdCl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s1m8eDGLFi1i9erVHD16lIkTJ3r9EadOncrmzZvJzs4mOzubzZs3M23aND8dsoiYyRrmmr8F3PO5nOJObJo7v4u7yr451fbui0hr2PbYeLY9Np4FN13cpPILbrqYbY+N92sMu3btory8nPT0dM+2uLg4+vbt67n91VdfMWXKFHr27ElMTAyjRo0C4Icffmj0sadOncrZZ59NbGwsycnJTdqvpXz6eTNp0iSv248//jjz5s1j7dq1pKam8vzzz/PII4/ws5/9DIDXX3+dxMRE3n77bW699VacTievvfYab775JmPGjAFc7W89evTg888/Z/z48Wzfvp3s7GzWrl3LkCFDAHj11VdJT09nx44dXn9sEQlOGWkO5l1yjDn/KiWfbp7t9hY28/jSibiuBSJBi0RK63DXJrprIgucpXUm2K0503RjvUeOHTvGuHHjGDduHAsXLiQ+Pp4ffviB8ePHU15e3uC+kyZNokePHrz66qskJSVRXV1NWlpao/u1VLM79lZVVbFo0SKOHTtGeno6eXl5FBQUMG7cOE+ZqKgoRo4cyZo1awDYuHEjFRUVXmWSkpJIS0vzlMnJycFms3kSGIChQ4dis9k8ZepSVlZGcXGx10VEAlRpMRk7/ofVUXfxztB9/OH6C3ln5lBWP3C5+qlISPOuifTW0prIxvTp04eIiAjWrl3r2VZUVMS3334LwDfffMPBgwd58sknGTFiBOeee66nU69bZGQkgFfryaFDh9i+fTv/8z//w+jRo+nXrx9FRUV+j78uPjc0b9myhfT0dEpLS+ncuTOLFy8mNTXVk2AkJiZ6lU9MTGTPnj0AFBQUEBkZSdeuXWuVKSgo8JRJSEio9bwJCQmeMnWZO3cuc+bM8fVwRMQMXzwDR/dj7dab9IkzILzmykjNc3r1e3M7EIu0tow0B/NuHFh7pulW7nDeuXNnbr75Zv77v/+bbt26kZiYyCOPPOLpeHvWWWcRGRnJn/70J37961+Tm5vL//t//8/rMXr27InFYuHvf/87V1xxBR06dKBr165069aNV155BYfDwQ8//MCDDz7YKsdQk881MX379mXz5s2sXbuWWbNmMX36dK+OOxaLd/ZoGEatbTXVLFNX+cYe56GHHsLpdHoue/fubeohiUhbOvgdrJ3nup4x128JDOBjB+JqHNZiRvTu1uIOxCK+On2maXAl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guW8tUQwnjen0wnQ4HdaoJw7JTF+sGvXLv70pz/x61//ut4yBQUFACQmJnptT0xM9NwXzCZMmMBbb73F8uXL+f3vf8/69eu5/PLLKSsrMzu0Fgmm81ZQUEBCQkKt7QkJCQ3GGmjn7uDBg1RVVfn0Ny8oKKizfGVlJQcPHmy1WH3VnGNzOBy88sorvPfee7z//vv07duX0aNH88UXX7RFyK0qWM5bcwTreTMMg3vuuYfhw4eTlpZWb7lAOXdKYk6TlZVVZ0es0y8bNmzw2uenn34iIyODa6+9ll/96leNPofFYvG6bRhGrW2toTnH5ouf//znXHnllaSlpTFp0iQ++eQTvv32W5YuXerHo6hbax8bmHfewLfjqyumxmI189w1xNe/eV3l69oeCHw5tr59+zJz5kwGDhxIeno6L774IldeeSW/+93v2iLUVhdM580XwXre7rjjDr7++mveeeedRssGwrkLb7NnCgJ33HEH119/fYNlevXq5bn+008/cdlll5Gens4rr7zS4H52ux1wZa8Oh8OzvbCwsFY22xp8PbaWcjgc9OzZk507d/rtMevTmsdm9nmDph/f119/zf79+2vdd+DAAZ9ibctzV5fu3btjtVpr1Uw09De32+11lg8PD6dbt26tFquvmnNsdRk6dCgLFy70d3htLljOm78E+nm78847WbJkCV988QVnnnlmg2UD5dwpiTlN9+7d6d69e5PK/vjjj1x22WUMGjSI+fPnExbWcKVWcnIydrudZcuWMWDAAMDVPr5q1SqeeuqpFsfeGF+OzR8OHTrE3r17vb74W0trHpvZ5w2afnzp6ek4nU7WrVvH4MGDAfjyyy9xOp0MGzasyc/XlueuLpGRkQwaNIhly5Zx9dVXe7YvW7aMKVOm1LlPeno6H330kde2zz77jIsuuoiIiIhWjdcXzTm2unz11VemnR9/Cpbz5i+Bet4Mw+DOO+9k8eLFrFy5kuTk5Eb3CZhz16bdiEPEjz/+aPTp08e4/PLLjX379hn5+fmey+n69u1rvP/++57bTz75pGGz2Yz333/f2LJli3HDDTcYDofDKC4ubutDaNCePXuMr776ypgzZ47RuXNn46uvvjK++uoro6SkxFPm9GMrKSkx7r33XmPNmjVGXl6esWLFCiM9Pd0444wzgv7YDCN4zpthGEZGRoZx/vnnGzk5OUZOTo7Rv39/Y+LEiV5lguHcLVq0yIiIiDBee+01Y9u2bcbs2bONTp06Gbt37zYMwzAefPBBY9q0aZ7y33//vdGxY0fj7rvvNrZt22a89tprRkREhPG3v/3NrEOol6/H9txzzxmLFy82vv32WyM3N9d48MEHDcB47733zDqEepWUlHjeU4Dx7LPPGl999ZWxZ88ewzCC+7z5emzBdN5mzZpl2Gw2Y+XKlV7fZ8ePH/eUCdRzpySmGebPn28AdV5OBxjz58/33K6urjYyMzMNu91uREVFGZdeeqmxZcuWNo6+cdOnT6/z2FasWOEpc/qxHT9+3Bg3bpwRHx9vREREGGeddZYxffp044cffjDnABrg67EZRvCcN8MwjEOHDhm/+MUvjJiYGCMmJsb4xS9+UWuIZ7Ccuz//+c9Gz549jcjISGPgwIFewz2nT59ujBw50qv8ypUrjQEDBhiRkZFGr169jHnz5rVxxE3ny7E99dRTRu/evY3o6Gija9euxvDhw42lS5eaEHXj3MOKa16mT59uGEZwnzdfjy2Yzlt932enfw4G6rmzGMbJnjgiIiIiQUSjk0RERCQoKYkRERGRoKQkRkRERIKSkhgREREJSkpiREREJCgpiREREZGgpCRGREREgpKSGBEREQlKSmJEREQkKCmJERERkaCkJEZERESC0v8HBz6FofKNsGIAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m = Minuit(score, mu=0, sigma=1)\n", "m.errordef = Minuit.LEAST_SQUARES\n", "m.migrad()\n", "\n", "mu, sigma = m.values\n", "s_mu, s_sigma = m.errors\n", "\n", "plt.errorbar(cx, n, n ** 0.5, dx, fmt=\"o\", label=\"data\");\n", "plt.plot(cx, norm(mu, sigma).pdf(cx) * n_total * dx, label=\"fit\")\n", "plt.title(f\"$\\mu = {mu:.3f} \\pm {s_mu:.3f}, \\quad \\sigma = {sigma:.3f} \\pm {s_sigma:.3f}$\")\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check whether the fit is good:\n", "- by looking at *pull distribution*\n", " - $(n_i - \\lambda_i) / \\lambda_i$ for Poisson distribute data\n", "- by checking the $\\chi^2$ value against the degrees of freedom\n", " - Simple check: $\\chi^2/n_\\text{dof}$ should be about 1\n", " - Better check: chance probability $\\int_{\\chi^2_\\text{observed}}^{-\\infty} P(\\chi^2; n_\\text{dof}) \\, \\text{d}\\chi^2$ to obtain a higher value than the observed should not be too small" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "chi2/ndof = 56.45016984961358 / 48 = 1.176045205200283\n", "0.18844721801206454\n" ] }, { "data": { "image/png": "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1/bl559/rmnTpikSiSgSiWjatGn685//nPF7vLAvH3/8cVVUVKiwsFDDhw/X66+/nrH9hg0bNHz4cBUWFurcc8/VE088YVNPuyaX7Vy/fn27/RYKhfTuu+/a2OPcbNy4UVOmTFHfvn0VCoX0wgsvdPg9XtuXuW6jF/fjwoULNWLECBUVFal379667rrrtHfv3g6/z+p96csg8u6776q1tVVPPvmkdu/erUceeURPPPGE5s6dm/H7HnzwQT388MN67LHHtHXrVpWWlmrChAnxe964TVNTk66//nrNmDEjp++rqqpSXV1d/PHyyy9b1ENzdGY7vbYvv/Wtb6mmpkarV6/W6tWrVVNTo2nTpnX4fW7el88995zuuusu/ehHP9KOHTs0ZswYTZo0SQcOHEjZft++ffra176mMWPGaMeOHZo7d67++Z//Wc8//7zNPc9NrtsZs3fv3qR9d/7559vU49wdO3ZMl112mR577LGs2ntxX+a6jTFe2o8bNmzQHXfcoc2bN2vt2rVqbm7WxIkTdezYsbTfY8u+NALiwQcfNCoqKtJ+vbW11SgtLTUWLVoUf+3EiRNGJBIxnnjiCTu62GlLliwxIpFIVm2nT59uTJ061dL+WCXb7fTavtyzZ48hydi8eXP8tU2bNhmSjHfffTft97l9X44cOdK4/fbbk1678MILjdmzZ6ds/8Mf/tC48MILk1773ve+Z4waNcqyPpoh1+1ct26dIcn4/PPPbeid+SQZK1asyNjGq/syJptt9Pp+NAzDOHLkiCHJ2LBhQ9o2duxLX1ZEUolGo+rVq1far+/bt0+HDx/WxIkT46+Fw2FdddVVevPNN+3oom3Wr1+v3r1764ILLtBtt92mI0eOON0lU3ltX27atEmRSERf/vKX46+NGjVKkUikw/66dV82NTVp+/btSftAkiZOnJh2mzZt2tSu/TXXXKNt27bp5MmTlvW1KzqznTFDhw5VWVmZrr76aq1bt87KbtrOi/uys7y8H6PRqCRlPDfasS8DEUQ++OAD/exnP9Ptt9+ets3hw4clSX369El6vU+fPvGv+cGkSZP0y1/+Uq+99pp++tOfauvWrRo/frwaGxud7pppvLYvDx8+rN69e7d7vXfv3hn76+Z9+emnn6qlpSWnfXD48OGU7Zubm/Xpp59a1teu6Mx2lpWV6amnntLzzz+v5cuXa9CgQbr66qu1ceNGO7psCy/uy1x5fT8ahqFZs2Zp9OjRGjJkSNp2duxLTwWR+fPnp5wclPjYtm1b0vfU1taqqqpK119/vW699dYO3yMUCiU9Nwyj3WtW6sw25uKb3/ymJk+erCFDhmjKlCl65ZVX9N5772nVqlUmbkXHrN5OyVv7MlW/OuqvW/ZlJrnug1TtU73uNrls56BBg3Tbbbdp2LBhqqys1OOPP67JkyfroYcesqOrtvHqvsyW1/fjzJkztXPnTj3zzDMdtrV6X+ab8lNsMnPmTN1www0Z2wwYMCD+79raWo0bN06VlZV66qmnMn5faWmppFPpr6ysLP76kSNH2qVBK+W6jV1VVlam/v37649//KNpPzMbVm6n1/blzp079fHHH7f72ieffJJTf53al6mUlJSoW7du7aoCmfZBaWlpyvb5+fk666yzLOtrV3RmO1MZNWqUli1bZnb3HOPFfWkGr+zHO++8UytXrtTGjRvVr1+/jG3t2JeeCiIlJSUqKSnJqu2hQ4c0btw4DR8+XEuWLFFeXubiT0VFhUpLS7V27VoNHTpU0qnx3w0bNuiBBx7oct+zlcs2muGzzz7TwYMHk07YdrByO722LysrKxWNRrVlyxaNHDlSkvSHP/xB0WhUV1xxRdbv59S+TKWgoEDDhw/X2rVr9fWvfz3++tq1azV16tSU31NZWamXXnop6bU1a9bo8ssvV/fu3S3tb2d1ZjtT2bFjhyv2m1m8uC/N4Pb9aBiG7rzzTq1YsULr169XRUVFh99jy740bdqrixw6dMg477zzjPHjxxt/+tOfjLq6uvgj0aBBg4zly5fHny9atMiIRCLG8uXLjbffftv4x3/8R6OsrMyor6+3exOy8tFHHxk7duwwFixYYJx++unGjh07jB07dhgNDQ3xNonb2NDQYPzLv/yL8eabbxr79u0z1q1bZ1RWVhp/93d/59ptNIzct9MwvLcvq6qqjEsvvdTYtGmTsWnTJuOSSy4x/v7v/z6pjdf25bPPPmt0797dePrpp409e/YYd911l3HaaacZ+/fvNwzDMGbPnm1MmzYt3v7DDz80evbsadx9993Gnj17jKefftro3r278dvf/tapTchKrtv5yCOPGCtWrDDee+89Y9euXcbs2bMNScbzzz/v1CZ0qKGhIf53J8l4+OGHjR07dhgfffSRYRj+2Je5bqMX9+OMGTOMSCRirF+/Pum8ePz48XgbJ/alL4PIkiVLDEkpH4kkGUuWLIk/b21tNaqrq43S0lIjHA4bV155pfH222/b3PvsTZ8+PeU2rlu3Lt4mcRuPHz9uTJw40Tj77LON7t27G+ecc44xffp048CBA85sQJZy3U7D8N6+/Oyzz4xvf/vbRlFRkVFUVGR8+9vfbvexQC/uy5///OdG//79jYKCAmPYsGFJHxOcPn26cdVVVyW1X79+vTF06FCjoKDAGDBggLF48WKbe9w5uWznAw88YAwcONAoLCw0zjzzTGP06NHGqlWrHOh19mIfVW37mD59umEY/tiXuW6jF/djuvNi4rHTiX0Z+lvnAAAAbOepT80AAAB/IYgAAADHEEQAAIBjCCIAAMAxBBEAAOAYgggAAHAMQQQAADiGIAIAABxDEAEAAI4hiAAAAMcQRAAAgGMIIgAAwDH/H7uH1L7qJDJfAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "cdf = norm(mu, sigma).cdf\n", "\n", "n_pred = (cdf(xe[1:]) - cdf(xe[:-1])) * n_total\n", "n_sigma = n_pred ** 0.5 # for Poisson-distributed data\n", "\n", "pull = (n - n_pred) / n_sigma\n", "\n", "plt.errorbar(cx, pull, np.ones_like(pull), fmt=\"o\")\n", "plt.axhline(0, ls=\"--\")\n", "\n", "# degrees of freedom: number of fitted bins minus number of fitted parameters\n", "n_dof = len(n) - 2 # need to subtract two fitted parameters\n", "\n", "chi2_obs = np.sum(pull ** 2)\n", "\n", "print(f\"chi2/ndof = {chi2_obs} / {n_dof} = {chi2_obs / n_dof}\")\n", "\n", "from scipy.stats import chi2\n", "\n", "chance_prob = 1 - chi2(n_dof).cdf(chi2_obs)\n", "\n", "print(f\"{chance_prob}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **3. Towards realistic HEP data use-cases**\n", "\n", "HEP analyses typically involve far more sophisticated fitting work. It is often about **data model building** and performing **(un)binned maximum likelihood fits** to describe experimental distributions. Also, fitting is often performed to extract decay mode yields atop the model parameters.\n", "\n", "The `iminuit` package has functionality to performed so-called *simultaneous fits*,\n", "where the models being fitted to two or more datasets share at least a parameter.\n", "But it is not meant as a package providing commonly-used goodies and a \"framework\" for (complex) model building. Imagine how cumbersome it would be to verbosely describe the model below for an amplitude analysis ...!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### **A simple binned extended maximum-likelihood fit example**\n", "\n", "(Taken straight from one of the excellent `iminuit` tutorials.)\n", "\n", "The binned extended maximum-likelihood fit is strictly the binned equivalent of the corresponding unbinned fit. One sums the logarithm of Poisson probabilities for the observed counts as a function of the predicted counts in this case (times -1 to turn maximization into minimization).\n", "\n", "Instead of a density, you need to provide a cdf of the density in this case (which must be vectorized). There is no need to separately return the total integral like the unbinned case. The parameters are the same as in the unbinned extended fit." ] }, { "cell_type": "code", "execution_count": 18, "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 = 1504 Nfcn = 83
EDM = 3.42e-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", "
Name Value Hesse Error Minos Error- Minos Error+ Limit- Limit+ Fixed
0 z 0.275 0.017 0 1
1 mu -0.009 0.006 -1 1
2 sigma 0.084 0.006 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", "
z mu sigma
z 0.000298 -0 (-0.034) 0.037e-3 (0.381)
mu -0 (-0.034) 3.79e-05 -0.002e-3 (-0.066)
sigma 0.037e-3 (0.381) -0.002e-3 (-0.066) 3.22e-05
\n", "\n", "\n", " \n", " \n", " \n", " \n", " 2024-07-17T01:43:05.199697\n", " image/svg+xml\n", " \n", " \n", " Matplotlib v3.9.1, 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" ], "text/plain": [ "┌─────────────────────────────────────────────────────────────────────────┐\n", "│ Migrad │\n", "├──────────────────────────────────┬──────────────────────────────────────┤\n", "│ FCN = 1504 │ Nfcn = 83 │\n", "│ EDM = 3.42e-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.275 │ 0.017 │ │ │ 0 │ 1 │ │\n", "│ 1 │ mu │ -0.009 │ 0.006 │ │ │ -1 │ 1 │ │\n", "│ 2 │ sigma │ 0.084 │ 0.006 │ │ │ 0 │ │ │\n", "└───┴───────┴───────────┴───────────┴────────────┴────────────┴─────────┴─────────┴───────┘\n", "┌───────┬───────────────────────────────┐\n", "│ │ z mu sigma │\n", "├───────┼───────────────────────────────┤\n", "│ z │ 0.000298 -0 0.037e-3 │\n", "│ mu │ -0 3.79e-05 -0.002e-3 │\n", "│ sigma │ 0.037e-3 -0.002e-3 3.22e-05 │\n", "└───────┴───────────────────────────────┘" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from iminuit import cost\n", "from scipy.stats import norm, uniform\n", "\n", "xrange = -1, 1\n", "\n", "rng = np.random.default_rng(1)\n", "\n", "xdata = rng.normal(0, 0.1, size=400)\n", "xdata = np.append(xdata, rng.uniform(*xrange, size=1000))\n", "\n", "def model_pdf(x, z, mu, sigma):\n", " return (z * norm.pdf(x, mu, sigma) + \n", " (1 - z) * uniform.pdf(x, xrange[0], xrange[1] - xrange[0]))\n", "\n", "c = cost.UnbinnedNLL(xdata, model_pdf)\n", "\n", "m = Minuit(c, z=0.4, mu=0, sigma=0.2)\n", "m.limits[\"sigma\"] = (0, None)\n", "m.limits[\"z\"] = (0, 1)\n", "m.limits[\"mu\"] = (-1, 1)\n", "\n", "m.migrad()" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGdCAYAAAA44ojeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABgb0lEQVR4nO3deXwTdf4/8Nckva+UttCDlBawgAgogqJgoShWwfNXq+uNrl9WxYO6h8i6KrjKpWLxXlwVXEVdS3U9QEC5iqDcyn0W6Ek52vS+ks/vjzRpQ6+kmUkm6ev5ePTRZPLJzHs6mcm7n2skIYQAERERkYpo3B0AERER0fmYoBAREZHqMEEhIiIi1WGCQkRERKrDBIWIiIhUhwkKERERqQ4TFCIiIlIdJihERESkOj7uDqArTCYTCgsLERoaCkmS3B0OERER2UEIgYqKCsTFxUGj6biOxCMTlMLCQsTHx7s7DCIiIuqCvLw86PX6Dst4ZIISGhoKwLyDYWFhbo6GiIiI7FFeXo74+Hjr93hHPDJBsTTrhIWFMUEhIiLyMPZ0z2AnWSIiIlIdJihERESkOkxQiIiISHU8sg8KERGRuwkh0NjYCKPR6O5QVMXX1xdardbp9TBBISIiclB9fT2KiopQXV3t7lBUR5Ik6PV6hISEOLUeJihEREQOMJlMyM3NhVarRVxcHPz8/DhpaBMhBE6fPo38/HwkJSU5VZPCBIWIiMgB9fX1MJlMiI+PR1BQkLvDUZ2ePXvi+PHjaGhocCpBYSdZIiKiLuhsqvbuSq7aJP51iYiISHWYoBAREZHqMEEhIiLqJlJSUpCRkWFX2ePHj0OSJOzatUvRmNrDTrJERETdRHZ2Nnx9fe0qGx8fj6KiIkRFRQEA1q1bh/Hjx6O0tBTh4eEKRmnGBIWIiKibiIiIsLusVqtFTEyMgtF0jE08ROQ2VVVVkCQJkiShqqrK3eEQOa26vhHV9Y0QQliX1TeaUF3fiLpGY5tlTabmsg1Gc9naBvvKOqplE09iYiJmz56NP/7xjwgNDUWfPn2waNEia9mWTTzHjx/H+PHjAQA9evSAJEl44IEHHN6+I5igEBERyWTw8ysx+PmVOFdVb122aMNRDH5+JV74316bsiP++SMGP78SBWU11mUfbz6Bwc+vxPRlv9uUvWreWgx+fiWOnK60Lsvanu90vK+99hpGjhyJnTt3YurUqXj00Udx4MCBVuXi4+OxbNkyAMDBgwdRVFSEhQsXOr39jjicoGzYsAE33XQT4uLiIEkSvv76a5vXhRCYOXMm4uLiEBgYiJSUFOzda3tQ6urq8MQTTyAqKgrBwcG4+eabkZ/v/B+aiIiI7Ddp0iRMnToVF1xwAaZPn46oqCisW7euVTmtVmttHurVqxdiYmKg0+kUjc3hPihVVVW4+OKL8eCDD+K2225r9fr8+fOxYMECLF68GAMGDMBLL72Ea6+9FgcPHkRoaCgAICMjA99++y0+//xzREZG4i9/+QtuvPFGbN++XZYbDBEREbnDvhevAwAE+jZ/l/1pbH/88aq+0GpsJzDb/twEAECAT3PZ+69MwF2Xx0Nz3mRnG6ePb1U2fYTe6XiHDRtmfSxJEmJiYlBSUuL0euXgcIIyceJETJw4sc3XhBDIzMzEs88+i7S0NADAkiVLEB0djaVLl+Lhhx+GwWDABx98gP/85z+YMMF8cD755BPEx8fjxx9/xHXXXefE7hAREblPkF/rr1U/Hw382miwaKusr1YDX639ZZ11/ogeSZJgMjnet0UJsvZByc3NRXFxMVJTU63L/P39MW7cOGzatAkAsH37djQ0NNiUiYuLw5AhQ6xlzldXV4fy8nKbHyIiInIdPz8/AIDRaOykpDxkTVCKi4sBANHR0TbLo6Ojra8VFxfDz88PPXr0aLfM+ebMmQOdTmf9iY+PlzNsIiIi6kRCQgIkScJ3332H06dPo7KysvM3OUGRUTzn3yhICNHpzYM6KjNjxgwYDAbrT15enmyxEhERUed69+6NWbNm4ZlnnkF0dDQef/xxRbcn60RtlgldiouLERsba11eUlJirVWJiYlBfX09SktLbWpRSkpKMHr06DbX6+/vD39/fzlDJSIi6nZajtA5fvx4q9dbTmufmJhoM58LADz33HN47rnnFIrOlqw1KH379kVMTAxWr15tXVZfX4/169dbk48RI0bA19fXpkxRURH27NnTboJCRERE3YvDNSiVlZU4cuSI9Xlubi527dqFiIgI9OnTBxkZGZg9ezaSkpKQlJSE2bNnIygoCHfffTcAQKfT4aGHHsJf/vIXREZGIiIiAn/9618xdOhQ66geIiIi6t4cTlC2bdtmne4WAP785z8DACZPnozFixfj6aefRk1NDaZOnYrS0lKMGjUKq1atss6BAgCvv/46fHx8cMcdd6CmpgbXXHMNFi9ezDlQiIiICAAgifMbmDxAeXk5dDodDAYDwsLC3B0OEXVRVVUVQkJCAJhrZ4ODg90cEVHnamtrkZubi759+yIgIMDd4ahOR38fR76/eS8eIiIiUh0mKERERKQ6TFCIiIhIdZigEBERkeowQSEiIuomhBD405/+hIiICEiShPDwcGRkZLg7rDbJOpMsERERqdcPP/yAxYsXY926dejXrx80Gg0CAwOtrycmJiIjI0MVSQsTFCIiom7i6NGjiI2N9YiZ29nEQ0SqVlVVBUmSIEkSqqqq3B0Okcd64IEH8MQTT+DkyZOQJAmJiYlISUmx1pakpKTgxIkTeOqpp6znnDuxBoWIiMhZQgAN1e7Ztm8QYEcysXDhQvTv3x+LFi3C1q1bodVqcfvtt1tfz87OxsUXX4w//elPmDJlipIR24UJChERkbMaqoHZce7Z9t8LAb/OZ2HW6XQIDQ2FVqtFTExMq9cjIiKg1WoRGhra5uuuxiYeIiIiUh3WoBARETnLN8hck+GubXshJihERETOkiS7mlnUzs/PD0aj0d1hAGATDxERETVJTEzEhg0bUFBQgDNnzrg1FiYoREREBAB48cUXcfz4cfTv3x89e/Z0ayySEEK4NYIuKC8vh06ng8FgQFhYmLvDIaIuqqqqQkhICACgsrISwcGtq8jtKUPkSrW1tcjNzUXfvn0REBDg7nBUp6O/jyPf36xBISIiItVhgkJEbmM0Gq0XoQ0bNqimcx4RuR8TFCJyi+zsbAweNACmpueTJk1CYmIisrOz3RoXEakDExQicrns7Gykp6ejoOiUzfKCggKkp6czSSEiJihE5FpGoxHTpk1DW/3zLcsyMjLY3EPUzTFBISKXysnJQX5+fruvCyGQl5eHnJwcF0ZF5DgPHATrEnL9XZigEJFLFRUVyVqOyNV8fX0BANXVbrp7scrV19cDALRarVPr4VT3RORSsbGxspYjcjWtVovw8HCUlJQAAIKCgiBJkpujUgeTyYTTp08jKCgIPj7OpRhMUIjIpZKTk6HX61GQn4+2KoIlAPoe/kgefaWrQyOyW0xMDABYkxRqptFo0KdPH6eTNiYoRORSWq0WCxcuRPptt0ECbJIUSZIAIZB5rQbaX98Ckv/irjCJOiRJEmJjY9GrVy80NDS4OxxV8fPzg0bjfA8SJihEpIiOpqhPS0tD1gPxmJadj/zy5hRFr9cjc9ptSKv4EFg7B0hKBUL7uTx2IntptVqn+1pQ29hJlohcr+oM0hIMOD4tBIFN/yYtX74cubm5SPvzAmDgDYCpAfjqEcBY795YicgtmKAQkesV7gQASFEXoKbRvGjs2LHm/0QlCbhpIRAUCZzaA99NC9wYKBG5CxMUInK9gh0AAFPMJW2/HtITuDETAOD761u4vDer0Im6GyYoROR6heYExRhzcftlBt8MDL0DkjDh41sDrE1BRNQ9MEEhItcSovMaFItJ82EKicXAKC1mX+OvfGxEpBpMUIjItcoLgaoSQNLC1Gtwx2UDe6D++lcBAFMv8wMa61wQIBGpARMUInKtpuYd9BoM+AZ1WtyYmIKKOgE/rQTJcFLh4IhILZigEJFrNTXvoPdw+8pLEg6fMwEANKW5CgVFRGrDBIWIXKtpiDHi7ExQABw+a05QpNJjSkRERCrEBIWIXEeIFgnKpXa9xWg0YtXRRny2uwE5ORthNBoVDJCI1IIJChG5zrljQG0ZoPUHoi/qtHh2djYGDx6MD3c14O7sGlz7/NdITExEdna28rESkVsxQSEi17HUnsQMBbS+HRbNzs5Geno6CgoKbJYXFBQgPT2dSQqRl2OCQkSuY2f/E6PRiGnTpkEI0eo1y7KMjAw29xB5MSYoROQ61hE8Hfc/ycnJQX5+fruvCyGQl5eHnJwcOaMjIhVhgkJErmEyAkW/mR930kG2qKjIrlXaW46IPA8TFCJyjdMHgYYqwDcYiErqsGhsbKxdq7S3HBF5HiYoROQa1v4nlwCaju9OnJycDL1eD0mS2nxdkiTEx8cjOTlZ5iCJSC2YoBCRa1imuLdjgjatVouFCxcCQKskxfIsMzMTWm3HiQ4ReS4mKETkGnZ2kLVIS0tDVlYW4uLibJbrdT7IyspCWlqa3BESkYr4uDsAIuoGjPXAqT3mxw5McZ+WloYJEyZAp9Mh0AdYfk8QkvtooZ00QaFAiUgtWINCRIrTnD5gTlICewA9+jr0XkszTk0jMG5wNLQayTwjLRF5NSYoRKQ4TfEu84O44UA7HV/tYerRz/zg7BHngyIiVWOCQkSKs0lQnGCy1L6wBoXI6zFBISLFaYp/Nz+w8w7G7RHWGpSjTkZERGrHBIWIFBXoA2jOHDQ/sXMET3usTTznmKAQeTsmKESkqOGxWkjCCITEAGFxnb+hA8LSxMM+KERejwkKESnqsrimydSc7H8CAKbwpgSlphSoPuf0+ohIvZigEJEijEYjAKDBKLDueCOMMZc4v1K/ICC0qRaGHWWJvBoTFCKSXXZ2NgYPHgwAeGdbA8YvqUbiPa8hOzvb+ZVH9jf/ZjMPkVdjgkJEssrOzkZ6ejoKCgpslhecOov09HTnk5QIjuQh6g6YoBCRbIxGI6ZNmwYhRKvXLMsyMjKszT/BwcEQQkAIgeDgYPs2YqlB4UgeIq/GBIWIZJOTk4P8/Px2XxdCIC8vDzk5OV3fSOQF5t9s4iHyakxQiEg2RUVFspZrU4SlD8oxoI2aGiLyDkxQiEg2sbGxspZrU49EABJQXwFUne76eohI1ZigEJFskpOTodfrIbVzQ0BJkhAfH4/k5OSub8Q3AAiPNz9u6ihbVVUFSZIgSRKqqqq6vm4iUg3ZE5TGxkb84x//QN++fREYGIh+/frhxRdfhMlkspYRQmDmzJmIi4tDYGAgUlJSsHfvXrlDISIX02q1WLhwIYDWNy22JC2ZmZnQarXObSiCQ42JvJ3sCcq8efPw3nvv4a233sL+/fsxf/58vPLKK3jzzTetZebPn48FCxbgrbfewtatWxETE4Nrr70WFRUVcodDRC6WlpaGrKwsxEWG2SzX6/XIyspCWlqa8xvhSB4ir+cj9wo3b96MW265BTfccAMAIDExEZ999hm2bdsGwFx7kpmZiWeffdZ6oVqyZAmio6OxdOlSPPzww3KHREQulpaWhkmNK/DL8qVY+Gsd/rTgW6Smpjpfc2JhHcnDBIXIW8leg3LVVVfhp59+wqFDhwAAv/32GzZu3IhJkyYBAHJzc1FcXIzU1FTre/z9/TFu3Dhs2rSpzXXW1dWhvLzc5oeI1M23shApiT4I9dNg7Nix8iUnQIsmHiYoRN5K9hqU6dOnw2AwYNCgQdBqtTAajXj55Zdx1113AQCKi4sBANHR0Tbvi46OxokTJ9pc55w5czBr1iy5QyUiBUnl5plkTxhMnZTsAmsTzzHApMD6icjtZK9B+eKLL/DJJ59g6dKl2LFjB5YsWYJXX30VS5YssSl3fi9/IUS7Pf9nzJgBg8Fg/cnLy5M7bCKSk8kEqaIpQSlTIIEI7wNIWqCxBqhwYk4VIlIt2WtQ/va3v+GZZ57BnXfeCQAYOnQoTpw4gTlz5mDy5MmIiYkBYK5JaTkXQklJSataFQt/f3/4+/vLHSoRKaXyFCRjPYwmgYIKBSZT0/qa50M5d9Q8kid6pPzbICK3kr0Gpbq6GhqN7Wq1Wq11mHHfvn0RExOD1atXW1+vr6/H+vXrMXr0aLnDISJ3MJhrOQsqBBqVaoHhSB4iryZ7DcpNN92El19+GX369MFFF12EnTt3YsGCBfjjH/8IwNy0k5GRgdmzZyMpKQlJSUmYPXs2goKCcPfdd8sdDhG5Q9lJAMBxJZp3LNhRlsiryZ6gvPnmm3juuecwdepUlJSUIC4uDg8//DCef/55a5mnn34aNTU1mDp1KkpLSzFq1CisWrUKoaGhcodDRO7QVIOiSP8Ti5YdZYnI68ieoISGhiIzMxOZmZntlpEkCTNnzsTMmTPl3jwRqUFZU4JiUPBmfpGcTZbIm/FePEQkP0sNihJDjC0sTTylxwGTUbntEJFbMEEhIvmVuaCJR6cHtP6Asd465woReQ8mKEQkLyFa1KA438QTHBwMIQSEEAgODm5+QaMFIvqaH5ayHwqRt2GCQkTyqikF6isBACeVbOIBrM08EhMUIq/DBIWI5NVUeyKColDbqPC2IvsBADSluQpviIhcjQkKEcmraQ4UU5he+W013dWYNShE3ocJChHJq6mDrHBFgtLUxMMaFCLvwwSFiORlaeIJ6638tprmQpEMefDl1YzIq/CUJiJ5WZp4dPHKbys0FvANgiSM6NuDlzMib8IzmojkZXBhE48kWZt5kiJ4OSPyJjyjiUheTX1QXNJJFrCO5EmK5OWMyJvwjCYi+dRXATXnAABC56oExTyShzUoRN6FZzQRyaep9gT+OsA/zDXbbGriGcAaFCKvwjOaiOTT1P8E4S7oIGsRyT4oRN6IZzQRyadpBA9cMYLHIqI/jCaBo6VG+GqADRs2wGjk3Y2JPB0TFCKSjyVBcWENSvbKDUhcWI1rPq5BgwmYNGkSEhMTkZ2d7bIYiEh+TFCISD6WJh4X1aBkZ2cj/fbbkV9uW2NSUFCA9PR0JilEHowJChHJp8x1fVCMRiOmTZsGIUSr1yzLMjIy2NxD5KGYoBCRfKydZPsovqmcnBzk5+e3+7oQAnl5ecjJyVE8FiKSn4+7AyAiL9FYD1QUmx/r+iA4OLjN2g25FBUVyVqOiNSFNShEJI/yfAAC8AkEgqMU31xsbKys5YhIXZigEJE8LP1PdHrzPXIUlpycDL1eD6mdbUmShPj4eCQnJyseCxHJjwkKEcnDxZO0abVaLFy4EABaJSmW55mZmdBqtS6Jh4jkxQSFiORR5tohxgCQlpaGrKwsxMXF2SzX6/XIyspCWlqay2IhInmxkywRycMd09zDnKRMmDABr9/cEwMitYgc+0dc8/hC1pwQeTgmKEQkD+s098oPMT6fVqtFqL+Eu4b6oqF/EJMTIi/AJh4ikocbprlv6YTBPKRZKi9wy/aJSF5MUIjIeSYjYEkMXHmjwBZOGkwAAKmCCQqRN2CCQkTOqygGTI2AxgcIdc+8IyfKmhIUQ/uzyxKR52CCQkTOs3SQDYsDtO7p2mZp4tFUnwYaat0SAxHJhwkKETnPOsTY9R1kLc7VCFTVN02tz34oRB6PCQoROc/g3g6yFiea+qFYO+wSkcdigkJEznPDJG1tOdnUzAP2QyHyeExQiMh5bpqk7XzWGhRLPETksZigEJHzVFODYklQWINC5OmYoBCRc4RoUYPivk6yAHCirKmJh31QiDweExQick71WaCh2vw4rLdbQ2ETD5H3YIJCRM6x1FaERAO+AW4NpbmJpwAwmdwaCxE5hwkKETlHJc07AFBQLiAkDWBqACpPuTscInICExQico5KOsgCgFEAIiTG/IQdZYk8GhMUInKOSoYYW4gwvfmBgR1liTwZExQico6KalCAFglKGTvKEnkyJihE5BzrNPfu74MCACbLSCI28RB5NCYoROQctdagcKgxkUdjgkJEXVdXAdSWmR+rpg8Ka1CIvAETFCLqOkvtSUA44B/q1lAsTOyDQuQVmKAQUdepbAQP0KIGpc4A1Bqsy6uqqiBJEiRJQlVVlZuiIyJ7MUEhoq6zzCKrU0cHWQCAXzAQ2MP8mM08RB6LCQoRdV2ZukbwWFk67LKZh8hjMUEhIodZmku+WPSaeYGKmngANCcoHMlD5LF83B0AEXmuhHDJ/MDNQ4yDg4MhhGheEM4EhcjTsQaFiLosQdd0CVFdDQpH8hB5OiYoRNQl/logNrTpEqKmTrJAiyYedpIl8lRMUIioS+Kbak+EbyAQFOHmaM7DJh4ij8cEhYi6JEFn7n8iwvSAJLk5mvNYalAqioHGevfGQkRdwgSFiLokIdx8+bDO3KomwT0BrT8AAZQXuDsaIuoCJihE1CWWDrJCjQmKJDV3lGUzD5FHYoJCRF2SGN6iiUeNwtlRlsiTMUEhoi6x1KCYdCpNUDibLJFHY4JCRF1i6YOi2hoUziZL5NGYoBCR40yN0Ic538RjM/srgF15ZZi9fD/+u9U2qXhn3REs313UqnyHONSYyKMxQSEih0mVxfDRSKg3CoiQ6C6tY0+BAf/vnU0oKKuxLjtUXIFFG45h5d5im7Kfb8nD1E934JvfCu3fgLWTLPugEHkiRRKUgoIC3HvvvYiMjERQUBAuueQSbN++3fq6EAIzZ85EXFwcAgMDkZKSgr179yoRChEpQGoauptnEIDk+GVECIEXv92HXXllmLN8v3X5wJhQPDy2H64bEmNT/trB0bg8MQKThsbav5GWs8k6UvNCRKog+80CS0tLMWbMGIwfPx4rVqxAr169cPToUYSHh1vLzJ8/HwsWLMDixYsxYMAAvPTSS7j22mtx8OBBhIaGyh0SEclMaqqVOGEwIaaTsm2+X5Lw6u0X4/UfD+GFmwZbl18cH46L48NblX/uxsEwmgS0mqZmJSHw1c4C3HRxHHy17SRIYb0BSEBjLVB1GpCCuxApEbmL7DUo8+bNQ3x8PD766CNcfvnlSExMxDXXXIP+/fsDMF9YMjMz8eyzzyItLQ1DhgzBkiVLUF1djaVLl8odDhEpQFPelKCUmex+z+p9p5C1vbm5pU9kEF7/wyUID/Kz6/2W5AQAPv31JP78399wz79/hcnUTu2Ijx8Q2pQ+sR8KkceRPUH55ptvMHLkSNx+++3o1asXhg8fjvfff9/6em5uLoqLi5Gammpd5u/vj3HjxmHTpk1trrOurg7l5eU2P0TkPpIlQTHY13Sy6cgZTPl4G579ajeOlFQ6vf3IYD+EBfjguotioNF0MM0+hxoTeSzZE5Rjx47h3XffRVJSElauXIlHHnkETz75JD7++GMAQHGxufNbdLRtx7ro6Gjra+ebM2cOdDqd9Sc+XmW3difqZjRNNRInDPbVoFzRLxIpA3vi/isTEB8R6PT2Jw6NxY9/HocHRydal5WU16K8tsG2IDvKEnks2fugmEwmjBw5ErNnzwYADB8+HHv37sW7776L+++/31pOOu/mYkKIVsssZsyYgT//+c/W5+Xl5UxSiNxIakpQjpW2n6CcrqhDz1B/AIBGI+Hf94+ET3v9RbqgV1iA9bHRJPD40p0oLq9F1qNXoldo02scakzksWSvQYmNjcXgwYNtll144YU4efIkACAmxtwmfH5tSUlJSataFQt/f3+EhYXZ/BCRm5iMkMo7TlDyS6sxYcF6PPf1HtQ1GgFA1uTkfEWGGhSU1aC0qt62CalFE4/RaLQu3rBhg81zIlIf2a8YY8aMwcGDB22WHTp0CAkJCQCAvn37IiYmBqtXr7a+Xl9fj/Xr12P06NFyh0NEcisvgGRqRF2jQGFF231Qcg6fgaGmAb8XGCChgz4iMtH3CMJ/Hroc3z15FUb3j2p+oSlByV630+Yfp0mTJiExMRHZ2dmKx0ZEXSN7E89TTz2F0aNHY/bs2bjjjjuwZcsWLFq0CIsWLQJgbtrJyMjA7NmzkZSUhKSkJMyePRtBQUG4++675Q6HiORWehwAcLzMhPYG0Nx1eR/E6gLQLyoEfj6umQ+yX8+Q1gvD45G9vwHp/z2A80MtKChAeno6srKykJaW5pIYich+sl85LrvsMnz11Vf47LPPMGTIEPzzn/9EZmYm7rnnHmuZp59+GhkZGZg6dSpGjhyJgoICrFq1inOgEHmCpgTlWGnHI3hSBvZCn8ggFwTU2qFTFbjvg19xRhOFaT/UtkpOgOZp9jMyMtjcQ6RCknDo5hbqUF5eDp1OB4PBwP4oRK7204swrn8Vf1lVi4W/NmD58uVITU3F2aoGLFh9CDMmXQhdoK/bwhNC4IY3NmJfUTlGBRThv7OmdPqetWvXIiUlRfngiLo5R76/ZW/iISLvlv3DekxbVIn8cvP/NpMmTYJer0f/mx/H8dAhOFNZj39PHum2+CRJwiu3D0Pmj4dxmfEs/mvHe4qKihSPi4gcw5sFEpHdsrOzkf7qGmtyYlFQUIAN785Aj5KdmDFpkJuia3ZRnA7v3z8SA/r2sat8bKwD9/ghIpdgEw8R2cVoNCIxMRH5+W1PeiZJEvR6PXJzc6HVal0cXduMRiMSY8JRcKayzX4oaoyZyJs58v3NGhQisktOTk67yQlg7vuRl5eHnJwcF0bVMa1Wi2n3TmzzNcvEkJmZmUxOiFSICQoR2cXefhpq68+RfutNyLojEDE625sS6vV6DjEmUjF2kiUiu9jbT0Nt/TkS+w1E4oW+uGlkH/g9bZ5E0jLyiDUnROrFGhQisktycjL0vcLbnRdWkiTEx8cjOTnZpXF1qmk2WZ/qU9A2BT927FgmJ0QqxwSFiOyi1Wqx8P/GAkCrJEXV/TlCogGNLyRhQnzPEPQY/xDeXp/r7qiIqBNMUIjIbmmD/ZB1RyB6Ruhslqu6P4dGA+h6AwD690tE2OX/Dx9sysPpijo3B0ZEHWGCQkR2M53LRdqFvhg/ZToC+l4KwNyfIzc3V53JiUVTM09M1UFU7FqBhbdfhKgQv07eRETuxASFiOxjMkEy5AEA/Hv2Re3J3wF4SH+OpgQlIVzCuZVvI/mCSGuzFBGpExMUIrJP5SlIjbWApMVb/3cdYGx0d0T2CzcnKH10tpe8BqPJHdEQkR2YoBCRfZruYgydHhofD2sesdSgtEhQvvu9EONfXYeNh8+4Kyoi6gATFCLqVO6ZKnzw7Vrzkx6Jbo2lS3R6AEAfXXOzzvYTpcgvrcG/Nx5zV1RE1AFO1EZEnXp11UEkFR82XzE8MUEJN980sGUNyhNXJyEqxB8Pjkl0U1BE1BEmKETUqb+mDsSpokqgAkCPBHeH47gw8zDjYD8JEYHmWpSIYD88Nv4Cd0ZFRB1gEw8RdapvVDCu6FFhfuKJNSi+ATAF9QQAJOjaHr1TUl7ryoiIqBNMUIioXSaTaH5i6STriQkKANFUi5IQbnvZK6uux/8t2YoJC9ajtKreHaERURuYoBBRmxqMJtz89kYsWHUQ1VUVQEXTXYp79HVvYF0kwiwdZW0ve6EBvsgvrUFVvRG/HDvrjtCIqA3sg0JEbVq5txh7CspRVFaLhwc3zXniHwYE9gCqq90bXBdYa1DOa+LRaiTMTx+GYH8f9O8Z4o7QiKgNTFCIqE03DI2Fz70S6o0CwdW7zQt7JAAeOgOrqSlBOb8GBQCG6cNdHA0RdYYJChG1SZIkXD8k1vzk1+/Mv8M9cARPE0sTT0IbCUpLJRW1qK4zIjEq2BVhEVE72AeFiGxU1Dag8fwp4D28gyzQspNs+zVAq/YWI+WVdXgm+3cIIdotR0TKY4JCRDZmL9+P6zI34NeWHUa9IEExNdWg9ArWAA01bZa5qLcOjSaB2gYTyms96F5DRF6ITTxEZFVd34iVe0/hXFU9tJoWNQ3WBMUzR/AAAALCUVEnEOovQaooAMKjWhXpHR6Ibx4fg4HRobzbMZGbMUEhIqsgPx+s+1sK1h4owcjECPNCIbyiBgWShJMGEy7qpYVUXgDg4jaLDYoJc21cRNQmNvEQkY2wAF/ccknv5gXVZ4GGKgASEB7vtrjkcMJg7lujMeR1WrbRaMKGQ6eVDomI2sEEhYgAAIbqhrZfsNSehMUBPv4ui0cJh881JSjnjnZYrsFowvULc3D/h1uw/USpK0IjovMwQSEiGGoacNX8NXj4P9tgqDkvUfGG5h0AwcHBmPbiWwAAX8PxDsv6ajW4tE84IoL9UGzgPXqI3IF9UIgIGw+fQUVtI46fqUao/3mXhdJc828PT1AAAFEDzL/PHu606PTrB2HmzRchyI+XSSJ34JlHRLhhWCwGxoyFoaYBGs15o1e8pAYFQHOCUnocaKzrsMkqMsSzm7OIPB2beIgIAHBBr1CMSIhAVVUVJEmCJEmoqqoCSk+YC3jwLLJWIdGAXyggTMC5Y3a/bU+BAQVlbc+dQkTKYIJC1I3VN5pQXttO51gLS4LSogYlODgYQggIIRAc7EFTwksSEJVkfnym82YeAHh99SHc+OZGvL32iIKBEdH5mKAQdWNf7yrAmDlr8O+cdmoTjPVAeb75sTc08QDNzTxnDtlVfMwFUdBIQEOjidPfE7kQ+6AQdWOr951CRV0jTO188UrlBebmEJ9AIKSXi6NTSNQF5t921qBc3jcCG6dfjbjwQAWDIqLzMUEh6sb+de8IrN5/CmMuaD3tOwBoylo073jL1O8OjOSxYHJC5Hps4iHqxjQaCdddFIOQ84cWN5EsM6728IIOshbWJp7D5mn8HVBaVY/NR892XpCInMYEhagbOltZB5Op8y9nydC6g6zHi+gHSBqgrhyoPGX32/YXlWPMvDV45JPtqKzjnY6JlMYEhagbevTTHbh+4Qb8nl/WYTlN2UnzA29KUHz8m4dM29kPBQAGRIciOiwA+h6BOFXO2WWJlMY+KETdTJGhBvsLy1HbaESv0IAOy3plDQpgbuYpzTWP5OmbbNdbtBoJX/zpCvQM9YfkLf1xiFSMCQpRNxOrC8TPM67G9uOliNF1nKB4ZQ0KYJ4L5fBKh2pQAKBXWMd/LyKSD5t4iLqhsABfjB/U8bDh8ABAqjM0PfGiTrJA82RtDozkacloEvhhTzEajSYZgyKilpigEHUjJRX2953oG950eQjuBfgFKRSRmzg4WVtLQgjc/t4mPPLJdny/u0jmwIjIggkKUTdx/EwVRs9Zg6mfbkeDHf/59+vRdHnwtuYdoDlBKcsD6qsdeqskSRg/sBfCg3xRXW9UIDgiAtgHhajbyDl8Go0mgep6I3y1nf9v4tUJSlAkEBAO1JYB544CMUMdevsfr+qLh5L7IsiPl1AipfDsIuom7rsyEaP6Rdo9N5lXJyiSZK5Fyd9i7ijrYIIS3M7EdkQkHzbxEHUjA6JDMTAm1K6yXp2gALYzyjphf1E5cs9UyRAQEbXEBIXIy9U2GFHVhZlP+4Y3zfXhTdPct2S9aaDjHWUt3lt/FBMX5mDB6q6vg4jaxgSFyMv9d1seRs9dg8U/59r9Ho0EJIZ3kxqULg41BoDkpChoNRI0Euy6dQAR2Y8NqURe7sf9JTDUNECjsX/2U32YBF+tBKH1gxQaq2B0btSyicdkAjSO/792UZwOm5+5mhO4ESmACQqRl/vogcuwet8pjBvQ067yRqMRPQIkfLa7AdGxPTFOAFqFY3SLHomAxgdoqAYqCgGdvkurYXJCpAw28RB5Oa1GwvVDYhDo13makZ2djcGDB+O3UybcnV2Da94+isTERGRnZ7sgUhfT+gI9+pofO9lRFgAM1Q3Ydvyc0+shIjMmKEReylDdAGHvmGKYk5P09HQUFBTYLC8oKEB6erp3JikyjeTZU2DAlXN/wsP/2Y7aBk7eRiQHJihEXurJz3di4sIc7DxZ2mlZo9GIadOmtZnQWJZlZGTAaPSyL1/LPXmcGMkDAANjQtEjyA89Q/1RZLD/dgJE1D72QSHyQmcr67D9RCmq6xsREezXafmcnBzk5+e3+7oQAnl5ecjJyUFKSoqMkbqZkzcNtPDVapD16JWICQuAJNnfGZmI2scEhcgLRYb44+fpV2PzsTNIiAzutHxRkX03vbO3nMeQqYkHAGJ1gU6vg4iasYmHyEvpgnxx/RD7hgjHxspbzmNENk3WVl4A1FXKskqjSWDj4TMO9f8hotaYoBB5mYraBoffk5ycDL1e327zhCRJiI+PR3JysrPhqUtQBBAUZX589ojTqzOaBG54Iwf3fvArth7vvO8PEbWPCQqRFymvbcCYuWsw9dPtKHcgUdFqtVi4cCEA8330WrIkLZmZmdBqvXBGFBmbebQaCcP7hEMX6IvCshqn10fUnTFBIfIi6w+eRnltI46UVCLUwTvupqWlISsrC3FROpvler0eWVlZSEtLkzNU9ZBpJI/FX1MHYtMzV+PW4b1lWR9Rd8VOskRe5KaL45AUHYLymsYujSZJS0vDJKzDL998gPe21WPyK98gNTXVO2tOLGS4J09LkSH+sqyHqLtjDQqRlxkUE4bL+0Z0+f0+lflISfRBqL+EsWPHendyArSoQZEnQWnp0KkKnKmsk329RN2B4gnKnDlzIEkSMjIyrMuEEJg5cybi4uIQGBiIlJQU7N27V+lQiLyWySRQXd8oy7o0ZScAAMdKTbKsT/Wsc6EcMd80UCbzfziA1Nc34ION9t9FmoiaKZqgbN26FYsWLcKwYcNsls+fPx8LFizAW2+9ha1btyImJgbXXnstKioqlAyHyGutOVCC0XPX4L31R51bUX01pFLzF+qhs90kQQlPALR+QGMtYMiTbbWXxIdDkoCy6nrZ1knUnSiWoFRWVuKee+7B+++/jx49eliXCyGQmZmJZ599FmlpaRgyZAiWLFmC6upqLF26VKlwiLzaN78Voqy6AaXOfhkW74YkjCiqMCG/vJvM46HRAhH9zY9lbOaZcGE01vwlBXPShnVemIhaUSxBeeyxx3DDDTdgwoQJNstzc3NRXFyM1NRU6zJ/f3+MGzcOmzZtanNddXV1KC8vt/khomav/+ESvHX3cPzfVf2cW1HhDgDA1kIvu+dOZ2QeyQMAGo2EvlGdz+JLRG1TZBTP559/jh07dmDr1q2tXisuLgYAREdH2yyPjo7GiRMn2lzfnDlzMGvWLPkDJfISWo2EG4fFOb+igu6aoFjmQpEvQWnJUNOA3DNVuCQ+XJH1E3kj2WtQ8vLyMG3aNHzyyScICAhot9z5QyCFEO0Oi5wxYwYMBoP1Jy9PvnZiIk9mqGmQd0r1gu0AgK0F3S1BMdegGEsOQpIkSJKEqqoqWVa9K68MY+auwaOfbEd9Yzfp10MkA9kTlO3bt6OkpAQjRoyAj48PfHx8sH79erzxxhvw8fGx1pxYalIsSkpKWtWqWPj7+yMsLMzmh4iAP3+xCze8sRG78sqcX1lNGXDO3Ml2a2E3+yJtSlCkc85Pd3++QTGhCPLTIizAF0UGzi5LZC/Zm3iuueYa7N6922bZgw8+iEGDBmH69Ono168fYmJisHr1agwfPhwAUF9fj/Xr12PevHlyh0Pktc5W1uGXY2dR02BEWIAMp3LhTgCASZeAczW7OynsZSLNCYqmqgRh/kC5jFOXBPhqsezR0egdHgiNxvHJ84i6K9kTlNDQUAwZMsRmWXBwMCIjI63LMzIyMHv2bCQlJSEpKQmzZ89GUFAQ7r77brnDIfJakSH+2Dj9avx89Az69QxxfoVNzTum2IsBdLMEJSAMCI0FKoowMFIjew1SfESQrOsj6g7cMtX9008/jZqaGkydOhWlpaUYNWoUVq1ahdDQUHeEQ+SxegT7ydM5FrDWoBhjhgP4RJ51epLIC4CKIgyK0irWxGUyCaw/dBrjBvRkbQpRJ1ySoKxbt87muSRJmDlzJmbOnOmKzRN5nXNV9YgI9pN3pU0jeEyxl8i7Xk8RNQA4noNBUcrMviCEwG3vbcLOk2VYdN8IpF4Uo8h2iLwF78VD5GHyS6txxZyf8MRnO1HXKNNom/IioKIQkDQw9Roqzzo9TdNQ44GRylwWJUnCFf0iERrg4/yEekTdAO9mTORh1h48jfpGE85W1sHfR6Yb+TVN0IaeFwJ+3bS/RNQFAKBYDQoAPJrSH1NT+iM0wFexbRB5CyYoRB7mvisScGmfcHlX2tS8g97D5V2vJ2mqQUmK1ECrUPeQMCYmRHZjgkLkgS6K08m7QksNStyl8q7Xk4TpIXwC4IdaJIYr34H10KkKSACSojk4gKgt7INC5CGq6hpRXd8o/4qFaFGD0o0TFI0Gph7mexkNipKp6awd//nlBFJf34DZy/cruh0iT8YEhchDvJ9zDGPmrsF/t8l8q4dzx4DaMkDrD/S6SN51exgRqXw/FABIviAKPhoJAb5aTn9P1A428RB5ACEE1h08jdLqBgT5yfzffdP8J4gZCvj4IdjHT977+3gQU4Q5QRmocIKSGBWMn5+5GtFh7d+vjKi7Y4JC5AEkSULWI1fix/2ncO1gmefPaJpBtls37zSxJCiDFBpq3BKTE6KOsYmHyEP4aDW4fkgstHLPQGrtfzJC3vV6IBHRH4DyTTwtldc24Md9p1y2PSJPwQSFSOVOnq1WrsnF2AgU/WZ+3J1H8DQx9TAnKD2DNUDNOcW3d7qiDmPmrsHDn2zHibNVim+PyJMwQSFSscq6RqS9+zNueftnFJbVyL+B0weAxhrAP8x8L5puzqj1x+d76vHZ7gZsXLEMRqNMM/W2o2eoPy7t0wP9ooJRWt2g6LaIPA0TFCIV21NgQE29EeU1DegZ6i//Biz9T+IuATTd+3KQnZ2NwYMH465ltbg7uwbX3/8UEhMTkZ2dreh2F9xxMVZMS8Yl8eGKbofI07CTLJGKXdEvEuufHo/Cshr4ahVIIDhBGwBzcpKent6qKa2goADp6enIyspCWlqaItuODFEg8STyAt37XyYiDxAV4o9h+nBZ1lVVVQVJkiBJEqqqqjhBGwCj0Yhp06a12c/HsiwjI0Px5h4hBL7/vQhbjyvf94XIEzBBIVKhgrIaHCmpVHYjDTXAqb3mx924BiUnJwf5+fntvi6EQF5eHnJychSNY9GGY3hs6Q68+O0+mEzdcx4aopaYoBCp0LwVB3Bd5gYs2XRcsW1oSvYCwggE9wJ0esW2o3ZFRUWyluuq9BF69Ar1xzUX9kIjExQi9kEhUptGowm1DUaYhMDIxB6KbUdTvMv8oPelgKT8zfHUKjY2VtZyXRUZ4o+N06+Gnw//byQCmKCQSlRVVSEkJAQAUFlZieDgYDdH5D4+Wg0W3T8Sx05Xol/PEMW2oy3aZX7QjZt3ACA5ORl6vR4FBQVt9kORJAl6vR7JycmKx8LkhKgZzwYilVIyOQFa1qB07xlktVotFi5cCMCcjLRkeZaZmQmtVtk7HLd09HQl/vblb6iqU+Du1UQeggkKkUqYTAKf/HIC1fXKfynp/AFN6THzk7jhim9P7dLS0pCVlYW4uDib5fowCVkv3q/YEOO2CCHw8H+248vt+fh3Tq7LtkukNkxQiFTiu91F+MfXe3DjGxthVLiT5Ii4ptqA8AQgOFLRbXmKtLQ07Nu3z/p85RvTkDstBGm9S1wahyRJeGrCAEy4MBoTh8p8Y0giD8IEhTxGqzk8vEyovw/6RATh/w3v3eqGgHLv++W9mxKUbt68c76WzThXpf3JfBzyfgVqDS6N44Zhsfj35JEYEB3q0u2SOnj7tc5e7CRLpBLjB/XCmAuiYFLqxoAtXGapQenGE7R1RoQnmO9PdPYIkLsBuPAmd4dE1K2wBoVIRfx8NAjwVb4zpjVB6eYjeDp1wQTz7yM/umXz1fWNeGvNYfz9q91u2T6ROzFBIXKzz7ecxJoDp9oc4qqEmBAJ8ToNhKQBYi92yTY9ljVB+Qlw0fFpKfdMFV5ddQhLfz2JA8XlLt8+kTuxiYfIjU5X1OGf3+1DVb0R/3nociQn9VR8m5baExE5AJK/skOZPV7CGEDrDxjygDOHgJ4DXbr5i+J0eGRcf1wYG4oBvdgfxZ04V5PrMUEhciM/Hw3uvTIBO0+U4aoLolyyzcuaOsgaYy5mFWpn/IKAxDHA0TXmZh4XJygA8MzEQS7fJpEa8PpE5Ea6QF/MmHghPv/TFa0mCVPK5U01KKaYS1yyPY/n5n4oLdU1GlHboOxdlYnUggkKkRucf7dajcY1yYmxsRG1jSZ8trsB604IGI38suuUJUE5/jNQX+22MHacLMWkhTl4ZeVBt8VA5EpMUIjcIPPHQ3j0k+0oqah12Tazs7Mx+MKBuPWLWtydXYPr730ciYmJyM7OdlkMHilqABCmB4x1wImf3RaGoaYBR09X4bvfC1Gp4inw1TaHh9riIfsxQSFysdKqeizKOYYVe4qx7XipS7aZnZ2N9PR0FBSdslleUFCA9PR0JikdkSTggmvMj93YzDN+YC/MTRuKlRljEeLP7oPk/ZigELlYj2A/ZD86BlNT+mPiEOWnMjcajZg2bVqbw5gtyzIyMtjc0xGV9EO58/I+CA/yc2sMRK7CBIVUoeWX44YNG7z+y3JwXBievn6QSzrG5uTkID8/v93XhRDIy8tDTk6O4rF4rH7jAElrnlX2nDpu4Lcl9xyOlFS6OwwixTBBIbfLzs7G4MGDrc8nTZrklX0jigw1OFXeus+JXG3k7a2nqKjIvvjsLNctBeiA+FHmx0d/ctlm2zumn/56Anf8azOeWfZ7qw7XRN6CCQq5lbVvREGBzXJv6xshhMDTWb9jwoL1+Gn/qc7fIKPY2FhZy3Vb1n4oa9wbB4CUgb0Q4u+DC3qFoN5ocnc4RIpggkJu42jfCE9uBiqvaUR5TQPqGk3oG+X4DJTO7HtycjL0ej3aa0ySJAnx8fFITk52OK5uxdIPJXc90Fjv1lB6hwdizV/HYe5tw1xy7yZyLU++1smJCQq5jSN9Izy9GUgX5IvsqWPw5cNXol9Px6aXd3bftVotFj4/DQBaJSmWPjCZmZnQavlFFxwcDCEEhBCtpzKPGQYE9wTqK4G8X90TYAu9QgPcHQIpwNOvdXJigkJuY2+fh//973+qbAayp+9IyzK1NdW4OD7coW3I1QSWFnEAWXcEondEkM1yvV6PrKwspKWlORRXt6TRAP3dP9z4fOW1Dfj7V7vxzW+Fim+Lc4ooy5HzvTscCyYo5Db29nn49NNPPXaIbM6Rswi5ZCJa1110TrbhwYZ8YO9XSLvQF/t/WWldvHz5cuTm5jI5cUTLuxurxGe/nsTSX0/ixW/3oqZenecBdY7TAbTGBIXcxto3op2htpIkoWfPnjh9+nS761DzENmK2gbM/P4QIq97DCHDJzr8ftmGB29ZBJgagcRkSHHDrYvHjh3LZh1H9R8PQAJO7QbK1THq6cExfZE6OBpv3X0pAv14PJWidL8QTgfQGhMUchutVouFCxcCQKskxfL8nnvusWtdahwiG+TngweuiEf9qWOo2u34f9yyDA+uqwS2LTY/vvIxh2Og8wRHAZYk76j7R/MA5jtiL7p/JK7oF+nuULyWK/qFcDqA1pigOKk7tAMqKS0tDVlZWYiLi7NZbukbccstt9i1HjUOkdVqJNw3So+iJRkQjXUOv1+W4cG7PgXqDEBEfyDpOodjoNbqE8YCAD5/eYpdfY9cfV0oNtQi75zjNzVU27VMLfG4aioETgfQGhMUcru0tDTs27fP+rxl3wh7moHUNkQ290wV6hpbVP+Krs1T4fS+m4zAL++YH1851dzJk5xm7DseAJDa38f8N1aRPQUG3PTWRkz5eBuqVHxDQU/hyn4hnnitUxqvWKQKLftCtOwbYU8zkJqGyJaU1+LORZtx16JfcKbS8VqTlpze94PLgdLjQGAP4OK7nIqFmplih6OsViAiUIKmeJe7w7ERFeIPABDCfPdjd1DbHB7OxOPKfiGedq1zBSYopHqdNQOpaRTKiXPVqK43oqK2Ef4+zp9eTu375rfNv0f+EfBzfHI4aofGB6uPmmsntLlr3RyMrRhdAD79v1HInjoaceGBLt++2ubwcDYeV/cL8aRrnUsID2QwGAQAYTAY3B2KqKysFAAEAFFZWenucDyWPX9Hy3EHIJYvXy4aGxtdHKWt9mI+drpS5J6u7LCMPetpyZ59b7me6sM5QrwQJsSsSCEMhQ5tizpWWVkp/jjcV4gXwoTx9WFC1Fe3WUaOv7Mc66mus+88cfazumzZMiFJkvV1y48kSUKSJLFs2TKH4nZ23+WIZ+3ata3e39bP2rVrHY6vI46e7550Ljvy/c0aFPIY7TUDqUFDi/uh9I0KRqID09nbUwVtz763fN+mj1+E0SSAoelAWPfpVOcqy/Y1oLDCBE3ZceCnfyq2HWebS777vRDJ89fgQHG53KHZUNscHnLF465+IWq+1rkSExQiJwUkXIxb39uKg8UVDr9Xrirx89cz4Z+rkbiwEtnnBjgcE3XOUAf83zdNd6b+5R3g+EbZt+HsZ0MIgc+2nMSZynos2XRc9vhaUtscHnLFw34h7sUEhchJ4eMm4/i5Gny8+bhD75Nr+GK76ykXSJ/y1255Dw9XWHGkEQ3D7gYggK8fBeocT1DbI8dnQ5IkvHXXpfjbdQPx0q1DZYutLWqbw0POeNgvxH2YoBA5qeS/L+C+UXo8d+Pgzgs3kasKusP1NP3ubtNju1J9yguArg9QdhJY9Q9Z1ilnc0mPYD88Nv4CaDWO32rBEWqbw0PueDqaCoGUwwTFy6hlcqPuwPIFYaqtwOiAQvi2cTa114dAripotVWtdzv+ocCtTXPNbF8MHF7t9CqVOqZCCLyz7gj+uy2vy7G193lW2xweSsRjT78QR28g6sw12p7+Sa6MRwlMUIi64JF/voP+AwZZn7fVP6CjPgRyVUGrrWq9W+qbDIx61Pz4f48D1eecWp1Sx3TFnmLM/+Eg/vHVHpw46/gXUUefZ7X11VBbPHJT23BupTBBIXLQrDc/wr+efwxnTtl+QbTsH9BZH4LDhw/bta3OqqDVVrXebV3zPBB5AVBZDKyY7tSqlDqm118UgxuHxeL5mwYjIdKxeXHs6ROjtr4aaotHLq6ael8VFBjmrDjOg+I58dhLrvlClNbY2Cj0en278yFIkiT0er3dZdqap8FSJj4+3jr/QXv7bonH3vWQ89r9HJ7cIsTMcCFeCBM127/o8mdVyWNqMpnafd7ZZ6yjz3PLeOSar0iu892V8ShdxtFjocbrKudBcSG1TetM8ji/XdZoEhBC2NU/ID8/364yU6ZMAeBcFbRWq8XCzExACJzf2u4NVdlq1O45H38ZcNVTAACflU8jPKCNMnZQsnmi5frqGo344+KtyN5h/qzK1V9Krjk85Lq2etOcIt2tzxkTFCd0l3bA7q6mwYgpH2/Dm2uOyNqXIykpyfkq6IYapGl+RNYdgegdZvtl5ulV2WrU6Tk/bjqyC2PRd+5JlNW2U8YOrmie+HJbPtYePI3nvt6DJZ9+oXh/KUfw2tq2btfnTNnKHGWooYlH7mmd5aKGZhCluHLfWm5r2ZZjImH6d2LgP5aL/377g11TX9vzY5keu8vTWpeeFOK9seYp7WeGi6of58tSlU1ts+ecl/u6oOTtHYxGk3j5+33in29+2GHMs2bNcujzrIYp6lty5W0HlC7j6NT7nt7EwwSlCxxtB3QlJijKbOudtUfEltyzdvUPkKt/SYf7fmy9EPP6mpOTuYlCHF3r1cfe3eTqe+TodUHpY+rIfsn5eXYmHnf9DdWQoDjaP8nTExQ28XSgvfHhSrQDqnEsuqePoW+PPTEXGmoBrY/1+aMp/XFZYoRd/QMWLlyo6BBHn22LgI9vBarPAjHDgD+tA/qldGldZB+5+h61vC648txx5lomV38pe3S3PhaO8vbh0+djgtIF3a4dUCWCg4MhzLV+CA52bJikI/YVluPOD7Yj6oY/A1LrU8Se/gFy9yEIDg6GqKuCyHoI/mtnAsIIDLsTeGgV0CPB4X0kx8h5LhcVFsq2LmfZu1+y9JeSMR5vv7Z2dK3z1uHTbfHpvAidj3NPeLdzVfUw1DTCNzIeGv+gNsukpaVhwoQJ0Ol0AMxTX6emptr852JPGbuVHgc+vxc4tRuQtMB1s4FRDwPtzJRJ8pLzXI7dOhsY4gMkpsq2zi7H4sC1LCUlRb7PswzxdGeyXltUjDUoXaC2aZ1b4rDnrmkwmqyPr0qKwrt3DUXx0mdgqq1s9z32DF/s8hBHkwk4fQjYtRT47ilgUYo5OQmKAiZ/A1zxCJMTF7LnnNfr9R2XARCv0yA59CSQPQWB/x6NJy73Q5CvgoF3orP9giQhvGcsRl05BoDyQ3bVfG21hz3XX1cOn3ZlPEqQPUGZM2cOLrvsMoSGhqJXr1649dZbcfDgQZsyQgjMnDkTcXFxCAwMREpKCvbu3St3KIpxVztgZ23WjgzN88S+I0oQQuCLrSeR8so6FBlqrMtH94uAqHPd3yUiUMLEC3zgu/EV4D//D5ifCLx9mfkuuds+BGpKgbhLgYfXA4lXuSwuMpOl75EkIfPdj6Cd8DwQ3BOa8gK8MTEAJzNC4LfmBWDL+8DBFUDR7+bp8tu4WaDL90sI+I55EF/uKGjr7a6PB7bXVjVdx+y5/rpy+LTa4ukK2Zt41q9fj8ceewyXXXYZGhsb8eyzzyI1NRX79u2ztqXNnz8fCxYswOLFizFgwAC89NJLuPbaa3Hw4EGEhobKHZL96quA4z9bn2rrajHxAvOfSHvsJ8A/wPpa2pAQZL3xDzz50jsoOHXWulwfHYXMZx9B2pAQ4NAquzfd0bbsKZO9aiPSn/xnq2taQUE+0tNvQ9YbzyEt9Sq71iV3GbVpGbPm6E84lJOLpPJKbPg+F38YGQ9AQFtbi0lJPpAAaI+ubtqvFn9cIaCtrcEtA32gkQDtwe8AP19AmMxfLMIEQMCnugJPjvJDiB/gu2E2IBrMn7P6SvPvhmoEGgpx9ummz/3m15u34RMAxF4C6EcC8ZcDA64HfPxd80eiVixt/08++aTNNON6vR6ZmZnWtn97yuDKx1C3ZQnyvvgbLojQANvfb71Bn0AEhsbix/uCkFdugu+GOUBgCKDxAbR+gNb3vMe+5o7dkgaA1KKGTYK2rg43DfCBQNPnOSCweb+GBCPrjWfx5EvvtrqWTf2/e6DpFY27ehwADh1yyTXBkWurK69RwQDEwZXmJwU/27xmz/UXgEPX6M44+31gVzw3prr1HyJJCGXT9NOnT6NXr15Yv349xo4dCyEE4uLikJGRgenTzfesqKurQ3R0NObNm4eHH36403WWl5dDp9PBYDAgLCxMvmDPHAHeGuHQW4wmgZyTRhRVCMSGSkjuo1X81uZtxZC4sBL55W0fSgmAPkxC7rQQl8fmqdxxXA+eMaLfuDvhmzAK0F8GRF9k/uKxU1VVFUJCQgAAlZWVinYk7s4s1x+g/bZ/e8pUVVUhLDQEtw7ywedzHoNvdQlQng+UFwJVp12zMy2o4Vqm5njaY8/1t3eo+VF+hfLXaFnjeXE4tNO2OxXP+Rz5/la8k6zBYAAAREREAAByc3NRXFyM1NTmDmL+/v4YN24cNm3a1GaCUldXh7q6Ouvz8vJyZYL18QPihlufGk0m7Ni+AwBw6YhLodW00SJmMiG4aAcuiJDaL2MHe7bVXpmcg2XIL/+t3XULAHnlAjlV/ZAyMNzp7TlaRk1qG03IP1cNw+kimKoNbcacveM0pn1xBPll9dZl+h7+WPiHJKRd2tO6zGgCfvn1VwgAV44eA63W1/xfq6Sx/jRCwpdfr0Blg8ADUx6Db5AO8AsG/EIAvyDALxg1UiB6j5iI0lqgct5C+DKxUDU5+x6ZBJC9vxH1E162Pe4NtUBFIWpOHcWf7rwB+jAJL/7tMfhqBGCsB4yNgKmh+bGxvul5Y1PtHQCIpmYiAaPRhK1bf4UECSNHjmj3WhZUtB39IySMaOdcPldVh7zSWkCYcGFMGPx82+j3INc1wY5rqxquUfZcf/MrLI/aL3P+Nbozznwf2B3P2Qik2BWNQhSZiaWJyWQSN910k7jqqqusy37++WcBQBQUFNiUnTJlikhNTW1zPS+88EKbk9IoPVGbKye5cWZbS5cubXdio5Y/S5culX3f1DgRUEc+2mieFbb31CUCWt9W8Tgyi6Xa/j5q+jt7M088d+TaVsHpUhE58UkRdsXtNmVq6uWflFJtf5/22Hv9dfQa3dWY3RWPvVQzUdvjjz+O33//HZ999lmr187vACWEaLfn9owZM2AwGKw/eXl5isTrqTg0r21CCGzJPYdfjzW3Y99/ZSIevDIexZ/8FTA22JQ3Go2YNm0aRButnpZlGRkZqurlTuRKukBfnF3xBsp/+dK67GBxBS57+UfMWbG/zXPH28k6BF2GdaktHmcolqA88cQT+Oabb7B27Vro9Xrr8piYGABAcXGxTfmSkhJER0e3uS5/f3+EhYXZ/LiCK4dfObMtpYbmefoQtaVbTuKOf23Gy8ubL5wajYSnxifCWG5u43fmrq1EzvCU60tnvt5VgIraRpw8W93+cGUvJssQdBmHT6stHqfIXX1jMpnEY489JuLi4sShQ4fafD0mJkbMmzfPuqyurk7odDrx3nvv2bUNV9yLZ9myZaJ379421V16vb7VjarkqGKUY1uWponzmyfau8FWZ3HbE5Mr/0b2KK2qE4Vl1dbnZyvrxLCZK8Uzy363VkF3FLOjTWWe1rxF8pDjuNt77shBzvO0rTJGo0n8tL9Y7C1ovh6XVdeLe97/RXz/e6EwGk1dittTmniEsO/66+g12pmY3RGPvdx6s8BHH31U6HQ6sW7dOlFUVGT9qa5u/uKYO3eu0Ol0Ijs7W+zevVvcddddIjY2VpSXl9u1DaUTFFf2Q5BzW21diOLj49v8oDkbk9x/I2d9/3uhGPSPFWLaZztslrdsG+8sZiXu2soExfu48px3Nh539KkSQoj31h0RCdO/E6kL1guTqTlBaWxKVjyxj05n7Ln+OnKNdjZmV8djL7cmKO1d1D/66CNrGZPJJF544QURExMj/P39xdixY8Xu3bvt3oaSCYqjd9OU486Ucm7L3tuzOxOTo3dtlftL+re8UvHaygNiX2Hz8d95slQkTP9O3PRmjmhoNLZ6j7vu2soExfu48px3Jh5XXsvOd6q8Rry28oD49rfmwRD1jUYx8qXV4oEPfxV5Jee8LkERwr7rr73XaDlidmU89nJrguIKSiYoa9eubfeEbvkjx3/Rjm7Lng+SvSdae+uyNya5/0btMZlM4pShxmbZo59sEwnTvxOvrTpoXWY0msS24+ds/ltryd79mjVrlluqPclzuPKcdyYeJa5lztiSe1YkTP9ODH9xlTCUV1i3tWLXCbH2wClRUdtg13615Move7nW48p/WtQWjxAqGsXjiVx5N01HtiXnlMQdrUvWu7Y6uK6y6noUljVPN1/XaMSwWatw5dw1MNQ0j7iZOCQWNwyLxfD4cOsyjUbCiIQe7Xb6UttdW6l7Uuv1xRVGJvTADxnJmH/bMJvJyN5efxwPfLQV6w82T05XZKjB/34rhm9UQrvrU/s07eQ8JijnceWQXXvXcfjwYaSnp9tMnQ0ABQUFSE9Pd+iEzM7O7nBdhw8ftntdnWlv/7YeP4evdxagrLp5IrSPfs7FJS+uxpwVB6zL/H20iAj2g0YCfssrsy6/6eI4vH33pRg/qJfTsbRVLi0tDfv27bMuW758OXJzc5mckNPUeH1x1VBSSZIwKCYMEwa3HK0pYVBMCOIjAjEotvk2J78cO4u/f3MAEalTbdbx75xjWPxzLhZ/+oVs10RSMcXrcxTgij4oruiHYM+25OzvIVc/jLi43iIurnenf6NNh0vE3e9vFs98sc2mGjZ57mqRMP07sSX3rDW2NftPiYTp34l7//2LTcwFpdWivo0+JWo4rtQ9KX3Oy90HRY2f+c62tXJPkbjt7RwRPnayTZmLZ60Uff72PxETG9fpNfFfaw+JReuPijMVtdb1nqusE4dPVYizlXU223NlU5Ga/s6ujkcI9kFxSll1vbhzRqYAWvdDACSBFv0QqusaxYvf7hUvfrvX2jtdCCFW7S0Ws77ZK1btLRZCNH0AJI3occ0U8eyynTYjS2a+8aF5vWhjW5DE35973q525D/MfF+crqi1ftgC+l4qHv14i/gg55h1W472w2jrxIckiZ63/l2Mmzq3zb4aaNFX44c9RaLnrX8XAeE9bcqERESLMQ/PEdtPnLPGVlPfKMpr6mU/ni05MqyOCQopRW3DTd2hK+eXyWQSM7/ZI27++3t2Xcf6Tp4nEqZ/Jw6fqrCu45NfjouE6d+Jhz/eZl22bNky4aeLsnmvXq8Xz73+b3F95gbxwv/22MTx1Bc7xX0f/CoOFTePOt2ae1ZM/WS7eGX5Hpv9enXlAfHX/+4Sh081l912pFhEXPeYCBt1m82+/2v9EfHc17vF/qLm77WjJRXihf/tEW+vPWwTw5JNuWLmN3vE7vwy67KTZ6vErG/2ijd+bJ7eo7KyUoQMSxU9rv4/selgoXV5saFGvPjtXvHaqoM2x+LTn4+IF7/dK349dlYohX1QnFBd34jNpgsQkzajVT8EbWgkHnzuDWtVf32jCR9szMUHG3NtZlDcknsWH/6ci23HzzW/WdIgbOQt+GRLAeqNJuvi0EFj0PPWGQiNbL7Hi2VbPW+dgfjEfnbF/dP2Q6isbbQ+9+0Rh+V7S7D9RKl1maP9MPx0tjHp9Xr8/bX3ETRwNHoNG9tmX42Y2DhrX42TO9bi9P/moLbM9sZnVaUl2LTo7zi+ba11WYCvFqEB9t8Yryssd6Nl/xJyJ1d+Dr3pMy9JEl646SLcOcS+iTqHR0m49ZI4RAb7WZcJYZ4NN8jffA8hS5N3veGMzXsLCgrwz6emYPu6H5BfWm3z2pbcc9hw6DQq65qvtwVlNfh+dxG2nSyzKbtybzG+3J6PkvLme8kVGmoReslEBA240qbs97uL8fHmE8g/19wPr8hQi8WbjuObXYU2ZVfsLsZHPx/HsTNV1mWnK+vw4c+5+HK77WSTgUlXIOyyW3HkdHPZc1X1+GBjLpb+etKmbM6Rs/hgYy72FRqgCoqlSQpSsgbFUFMv5izfL+b/sN+m2u+l9z4TL3+7R+QcOm0tW1PfKOau2C/mrthvU4OyZv8pMXfFfrHmwCkhRHMNSvjY+8VL3/xuU4Oy8fBp8coPB8TXW4/aVDG+smKfeG3lAbF85Y92/bfw5IJPRGlVnTUb9u3ZV7z70wGxZv8p67Yc7dW/62iR0IRGCWi01mpPo9FkM/FSe1WjSgyntIdcPf9Zg0JKU9twU1dy5vySaySUPdeoXrFxYtcJ29qElXuKRNa2PJtmoqMlFWLxz7ni6225Nvv1+ZYT4q01h8XJs1XWsruPlwjd6DtF8NBrbfb9019OiNdWHRRHSpprfI6fqRSv/HBAfLSxuSZcCCE++/WEmLdiv83kePml1WLuiv3ivXVHrMsqKytF8JCrRfjYyeKXQ801KKcMNWLO8v3ijR8P2RyLzzcfFXOW7xfbjqujBoUJSgdcOTbeFe3Iruxfo8RwSnvI1ebKBIWUpobri7s4kzDJ1Y/HlUO+HS0jF7XFIwSbeFTF2aFwWq0WCxcuBND6BouW55mZme3ezl2pdXVGbUMcibyRJw61Vcs1kdco9WOCoqDOhvTae0LK2Y7sqjZptQ1xJPI2cl1fXElN10ReozyA4vU5CvCEJh53TmNvD7mqhV05nNIebOIhT6G264vSlOiXpoamInIMm3hUICcnB/n5+e2+LoRAXl4ecnJy7F5nyyrLsWPHOtUUI+e62lu/q5qTiLobJa4vSlPbNZHXKPVjgqIQtm961xBHIjXxxOuLGmPmNUrdfNwdgLdi+6ZZWloaJkyYAJ1OB8A8bXxqaqrq/ysJDg62mduGSE088fqi1pg99RrVHbAGRSHJycnQ6/Xt3rxOkiTEx8cjOTnZxZG5ntLNSS0ZjUbr4w0bNtg8J/IWnnh9UXPMrrxGkf2YoCiE7Zuu54lDLom6whOvL54YM7kXExQFsX3TdTxxyCWRMzzx+uKJMZP7SMIDG9rLy8uh0+lgMBgQFmbffRncyRIv4Fz7ZlVVFUJCQgAAlZWVCA4O7nJMcq7L3dsyGo1ITExsd4SAJEnQ6/XIzc3lf2fkdeS6vriS2q6JrrwedneOfH+zBsUF2L6pLE8cckkkF0+8vnhizOR6TFDI46lx+CIRETmHw4w9iJxDX71pGK1ahy8SkbK86TpGrbEGhTyemocvEhFR1zBBIY/H4YtERN6HCQopzlINK4RQrHc8hy8SUVe54hpFjmMfFPIanLKaiMh7sAaFvAqHLxIReQfWoLgAe5oTkVI88friiTGT67EGhYiIiFSHCQoRERGpDhMUIiIiUh0mKERERKQ6TFCIiIhIdTiKh7wKRwcQEXkH1qAQERGR6jBBISIiItVhgkJERESqwwSFiIiIVIcJChEREakOExQiIiJSHSYoREREpDpMUIiIiEh1mKAQERGR6jBBISIiItVhgkJERESqwwSFiIiIVIcJChEREakOExQiIiJSHSYoREREpDo+7g6gK4QQAIDy8nI3R0JERET2snxvW77HO+KRCUpFRQUAID4+3s2REBERkaMqKiqg0+k6LCMJe9IYlTGZTCgsLERoaCgkSZJ13eXl5YiPj0deXh7CwsJkXbcaePv+Ad6/j9w/z+ft+8j983xK7aMQAhUVFYiLi4NG03EvE4+sQdFoNNDr9YpuIywszGs/eID37x/g/fvI/fN83r6P3D/Pp8Q+dlZzYsFOskRERKQ6TFCIiIhIdZignMff3x8vvPAC/P393R2KIrx9/wDv30fun+fz9n3k/nk+NeyjR3aSJSIiIu/GGhQiIiJSHSYoREREpDpMUIiIiEh1mKAQERGR6nS7BOXll1/G6NGjERQUhPDwcLveI4TAzJkzERcXh8DAQKSkpGDv3r02Zerq6vDEE08gKioKwcHBuPnmm5Gfn6/AHnSstLQU9913H3Q6HXQ6He677z6UlZV1+B5Jktr8eeWVV6xlUlJSWr1+5513Krw3bevKPj7wwAOt4r/iiitsynjqMWxoaMD06dMxdOhQBAcHIy4uDvfffz8KCwttyrnzGL7zzjvo27cvAgICMGLECOTk5HRYfv369RgxYgQCAgLQr18/vPfee63KLFu2DIMHD4a/vz8GDx6Mr776SqnwO+XI/mVnZ+Paa69Fz549ERYWhiuvvBIrV660KbN48eI2z8na2lqld6VNjuzfunXr2oz9wIEDNuXUdPwAx/axreuJJEm46KKLrGXUdAw3bNiAm266CXFxcZAkCV9//XWn71HFOSi6meeff14sWLBA/PnPfxY6nc6u98ydO1eEhoaKZcuWid27d4s//OEPIjY2VpSXl1vLPPLII6J3795i9erVYseOHWL8+PHi4osvFo2NjQrtSduuv/56MWTIELFp0yaxadMmMWTIEHHjjTd2+J6ioiKbnw8//FBIkiSOHj1qLTNu3DgxZcoUm3JlZWVK706burKPkydPFtdff71N/GfPnrUp46nHsKysTEyYMEF88cUX4sCBA2Lz5s1i1KhRYsSIETbl3HUMP//8c+Hr6yvef/99sW/fPjFt2jQRHBwsTpw40Wb5Y8eOiaCgIDFt2jSxb98+8f777wtfX1+RlZVlLbNp0yah1WrF7Nmzxf79+8Xs2bOFj4+P+OWXXxTfn/M5un/Tpk0T8+bNE1u2bBGHDh0SM2bMEL6+vmLHjh3WMh999JEICwtrdW66g6P7t3btWgFAHDx40Cb2lueRmo6fEI7vY1lZmc2+5eXliYiICPHCCy9Yy6jpGC5fvlw8++yzYtmyZQKA+Oqrrzosr5ZzsNslKBYfffSRXQmKyWQSMTExYu7cudZltbW1QqfTiffee08IYf6w+vr6is8//9xapqCgQGg0GvHDDz/IHnt79u3bJwDYfEA2b94sAIgDBw7YvZ5bbrlFXH311TbLxo0bJ6ZNmyZXqF3W1X2cPHmyuOWWW9p93duO4ZYtWwQAmwusu47h5ZdfLh555BGbZYMGDRLPPPNMm+WffvppMWjQIJtlDz/8sLjiiiusz++44w5x/fXX25S57rrrxJ133ilT1PZzdP/aMnjwYDFr1izrc3uvT67g6P5ZEpTS0tJ216mm4yeE88fwq6++EpIkiePHj1uXqekYtmRPgqKWc7DbNfE4Kjc3F8XFxUhNTbUu8/f3x7hx47Bp0yYAwPbt29HQ0GBTJi4uDkOGDLGWcYXNmzdDp9Nh1KhR1mVXXHEFdDqd3XGcOnUK33//PR566KFWr3366aeIiorCRRddhL/+9a/Wu0q7kjP7uG7dOvTq1QsDBgzAlClTUFJSYn3Nm44hABgMBkiS1KoZ09XHsL6+Htu3b7f5uwJAampqu/uzefPmVuWvu+46bNu2DQ0NDR2WceWxArq2f+czmUyoqKhARESEzfLKykokJCRAr9fjxhtvxM6dO2WL217O7N/w4cMRGxuLa665BmvXrrV5TS3HD5DnGH7wwQeYMGECEhISbJar4Rh2hVrOQY+8WaArFRcXAwCio6NtlkdHR+PEiRPWMn5+fujRo0erMpb3u0JxcTF69erVanmvXr3sjmPJkiUIDQ1FWlqazfJ77rkHffv2RUxMDPbs2YMZM2bgt99+w+rVq2WJ3V5d3ceJEyfi9ttvR0JCAnJzc/Hcc8/h6quvxvbt2+Hv7+9Vx7C2thbPPPMM7r77bpubfLnjGJ45cwZGo7HN86e9/SkuLm6zfGNjI86cOYPY2Nh2y7jyWAFd27/zvfbaa6iqqsIdd9xhXTZo0CAsXrwYQ4cORXl5ORYuXIgxY8bgt99+Q1JSkqz70JGu7F9sbCwWLVqEESNGoK6uDv/5z39wzTXXYN26dRg7diyA9o+xq48f4PwxLCoqwooVK7B06VKb5Wo5hl2hlnPQKxKUmTNnYtasWR2W2bp1K0aOHNnlbUiSZPNcCNFq2fnsKWMPe/cPaB2no3F8+OGHuOeeexAQEGCzfMqUKdbHQ4YMQVJSEkaOHIkdO3bg0ksvtWvdHVF6H//whz9YHw8ZMgQjR45EQkICvv/++1bJmCPrtZerjmFDQwPuvPNOmEwmvPPOOzavKX0MO+Lo+dNW+fOXd+WcVEpXY/nss88wc+ZM/O9//7NJTK+44gqbTtxjxozBpZdeijfffBNvvPGGfIHbyZH9GzhwIAYOHGh9fuWVVyIvLw+vvvqqNUFxdJ2u0NV4Fi9ejPDwcNx66602y9V2DB2lhnPQKxKUxx9/vNPRCImJiV1ad0xMDABzRhkbG2tdXlJSYs0eY2JiUF9fj9LSUpv/wEtKSjB69Ogubbcle/fv999/x6lTp1q9dvr06VaZbltycnJw8OBBfPHFF52WvfTSS+Hr64vDhw/L8uXmqn20iI2NRUJCAg4fPgzAO45hQ0MD7rjjDuTm5mLNmjWd3iJd7mPYlqioKGi12lb/VbU8f84XExPTZnkfHx9ERkZ2WMaRz4AcurJ/Fl988QUeeughfPnll5gwYUKHZTUaDS677DLr59VVnNm/lq644gp88skn1udqOX6Ac/sohMCHH36I++67D35+fh2Wddcx7ArVnIOy9WbxMI52kp03b551WV1dXZudZL/44gtrmcLCQrd1sPz111+ty3755Re7O1hOnjy51ciP9uzevVsAEOvXr+9yvF3h7D5anDlzRvj7+4slS5YIITz/GNbX14tbb71VXHTRRaKkpMSubbnqGF5++eXi0UcftVl24YUXdthJ9sILL7RZ9sgjj7TqoDdx4kSbMtdff73bOsk6sn9CCLF06VIREBDQaWdFC5PJJEaOHCkefPBBZ0Ltkq7s3/luu+02MX78eOtzNR0/Ibq+j5YOwbt37+50G+48hi3Bzk6yajgHu12CcuLECbFz504xa9YsERISInbu3Cl27twpKioqrGUGDhwosrOzrc/nzp0rdDqdyM7OFrt37xZ33XVXm8OM9Xq9+PHHH8WOHTvE1Vdf7bYhqsOGDRObN28WmzdvFkOHDm01RPX8/RNCCIPBIIKCgsS7777bap1HjhwRs2bNElu3bhW5ubni+++/F4MGDRLDhw93+f4J4fg+VlRUiL/85S9i06ZNIjc3V6xdu1ZceeWVonfv3l5xDBsaGsTNN98s9Hq92LVrl82Qxrq6OiGEe4+hZQjnBx98IPbt2ycyMjJEcHCwdcTDM888I+677z5recsQx6eeekrs27dPfPDBB62GOP78889Cq9WKuXPniv3794u5c+e6fZixvfu3dOlS4ePjI95+++12h3zPnDlT/PDDD+Lo0aNi586d4sEHHxQ+Pj42iata9+/1118XX331lTh06JDYs2ePeOaZZwQAsWzZMmsZNR0/IRzfR4t7771XjBo1qs11qukYVlRUWL/rAIgFCxaInTt3Wkf5qfUc7HYJyuTJkwWAVj9r1661lgEgPvroI+tzk8kkXnjhBRETEyP8/f3F2LFjW2XMNTU14vHHHxcREREiMDBQ3HjjjeLkyZMu2qtmZ8+eFffcc48IDQ0VoaGh4p577mk13O/8/RNCiH/9618iMDCwzXkxTp48KcaOHSsiIiKEn5+f6N+/v3jyySdbzSPiKo7uY3V1tUhNTRU9e/YUvr6+ok+fPmLy5Mmtjo+nHsPc3Nw2P9MtP9fuPoZvv/22SEhIEH5+fuLSSy+1qbWZPHmyGDdunE35devWieHDhws/Pz+RmJjYZuL85ZdfioEDBwpfX18xaNAgmy9AV3Nk/8aNG9fmsZo8ebK1TEZGhujTp4/w8/MTPXv2FKmpqWLTpk0u3CNbjuzfvHnzRP/+/UVAQIDo0aOHuOqqq8T333/fap1qOn5COP4ZLSsrE4GBgWLRokVtrk9Nx9BS09PeZ06t56AkRFPPFyIiIiKV4DwoREREpDpMUIiIiEh1mKAQERGR6jBBISIiItVhgkJERESqwwSFiIiIVIcJChEREakOExQiIiJSHSYoREREpDpMUIiIiEh1mKAQERGR6jBBISIiItX5/9Ka+ix06ybfAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n, xe = np.histogram(xdata, bins=50, range=xrange)\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", "xm = np.linspace(xe[0], xe[-1])\n", "plt.plot(xm, model_pdf(xm, *[p.value for p in m.init_params]) * len(xdata) * dx[0],\n", " ls=\":\", label=\"init\")\n", "plt.plot(xm, model_pdf(xm, *m.values) * len(xdata) * dx[0], label=\"fit\")\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### **Scaling up in complexity**\n", "\n", "In spite of the example above being a *simple* example of an extended maximum-likelihood fit to binned data, the code is, honestly, very verbose.\n", "Clearly much of the above could be simplified for the general user. And now imagine that the (realistic example!) function to fit is not a uniform+normal distribution but rather this:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "[Example taken from a presentation by Anton Poluektov.]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ROOT framework provides `RooFit` as a model fitting library. The PyHEP ecosystem in particular has the `zfit` package, a model fitting library based on TensorFlow and optimised for simple and direct manipulation of probability density functions ..." ] } ], "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.12.3" } }, "nbformat": 4, "nbformat_minor": 4 }