{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Extracting ellipse parameters from rings\n", "\n", "During a powder diffraction experiment, the scattering occurs along concentric cones, originating from the sample position and named after 2 famous scientists: Debye and Scherrer. \n", "\n", "![Debye-Scherrer rings](Debye-Scherrer_rings.png)\n", "\n", "Those cones are intersected by the detector and all the calibration step in pyFAI comes down is fitting the \"ring\" seen on the detector into a meaningful experimental geometry.\n", "\n", "In the most common case, a flat detector is mounted orthogonal to the incident beam and all pixel have the same size. \n", "The diffraction pattern is then a set of concentric circles.\n", "When the detector is still flat and all the pixels are the same but the mounting may be a bit *off*, or maybe for other technical reason one gets a set of concentric ellipses. \n", "This procedures explains how to extract the center coordinates, axis lengths and orientation. \n", "\n", "The code in pyFAI is heavily inspired from:\n", "https://github.com/ndvanforeest/fit_ellipse\n", "It uses a SVD decomposition in a similar way to the Wolfgang Kabsch's algorithm (1976) to retrieve the best ellipse fitting all point without actually performing a fit.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "#For documentation purpose, `inline` is used to enforce the storage of the image in the notebook\n", "# %matplotlib widget" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "def fit_ellipse(pty, ptx, _allow_delta=True):\n", " \"\"\"Fit an ellipse\n", "\n", " Math from\n", " https://mathworld.wolfram.com/Ellipse.html #15\n", "\n", " inspired from\n", " http://nicky.vanforeest.com/misc/fitEllipse/fitEllipse.html\n", "\n", " :param pty: point coordinates in the slow dimension (y)\n", " :param ptx: point coordinates in the fast dimension (x)\n", " :raise ValueError: If the ellipse can't be fitted\n", " \"\"\"\n", " x = ptx[:, numpy.newaxis]\n", " y = pty[:, numpy.newaxis]\n", " D = numpy.hstack((x * x, x * y, y * y, x, y, numpy.ones_like(x)))\n", " S = numpy.dot(D.T, D)\n", " try:\n", " inv = numpy.linalg.inv(S)\n", " except numpy.linalg.LinAlgError:\n", " if not _allow_delta:\n", " raise ValueError(\"Ellipse can't be fitted: singular matrix\")\n", " # Try to do the same with a delta\n", " delta = 100\n", " ellipse = fit_ellipse(pty + delta, ptx + delta, _allow_delta=False)\n", " y0, x0, angle, wlong, wshort = ellipse\n", " return Ellipse(y0 - delta, x0 - delta, angle, wlong, wshort)\n", "\n", " C = numpy.zeros([6, 6], dtype=numpy.float64)\n", " C[0, 2] = C[2, 0] = 2.0\n", " C[1, 1] = -1.0\n", " E, V = numpy.linalg.eig(numpy.dot(inv, C))\n", "\n", " # First of all, sieve out all infinite and complex eigenvalues and come back to the Real world\n", " m = numpy.logical_and(numpy.isfinite(E), numpy.isreal(E))\n", " E, V = E[m].real, V[:, m].real\n", "\n", " # Ensures a>0, invert eigenvectors concerned\n", " V[:, V[0] < 0] = -V[:, V[0] < 0]\n", " # See https://mathworld.wolfram.com/Ellipse.html #15\n", " # Eigenvector must meet constraint (ac - b^2)>0 to be valid.\n", " A = V[0]\n", " B = V[1] / 2.0\n", " C = V[2]\n", " D = V[3] / 2.0\n", " F = V[4] / 2.0\n", " G = V[5]\n", "\n", " # Condition 1: Delta = det((a b d)(b c f)(d f g)) !=0\n", " Delta = A * (C * G - F * F) - G * B * B + D * (2 * B * F - C * D)\n", " # Condition 2: J>0\n", " J = (A * C - B * B)\n", "\n", " # Condition 3: Delta/(A+C)<0, replaces by Delta*(A+C)<0, less warnings\n", " m = numpy.logical_and(J > 0, Delta != 0)\n", " m = numpy.logical_and(m, Delta * (A + C) < 0)\n", "\n", " n = numpy.where(m)[0]\n", " if len(n) == 0:\n", " raise ValueError(\"Ellipse can't be fitted: No Eigenvalue match all 3 criteria\")\n", " else:\n", " n = n[0]\n", " a = A[n]\n", " b = B[n]\n", " c = C[n]\n", " d = D[n]\n", " f = F[n]\n", " g = G[n]\n", "\n", " # Calculation of the center:\n", " denom = b * b - a * c\n", " x0 = (c * d - b * f) / denom\n", " y0 = (a * f - b * d) / denom\n", "\n", " up = 2 * (a * f * f + c * d * d + g * b * b - 2 * b * d * f - a * c * g)\n", " down1 = (b * b - a * c) * ((c - a) * sqrt(1 + 4 * b * b / ((a - c) * (a - c))) - (c + a))\n", " down2 = (b * b - a * c) * ((a - c) * sqrt(1 + 4 * b * b / ((a - c) * (a - c))) - (c + a))\n", " a2 = up / down1\n", " b2 = up / down2\n", " if a2 <= 0 or b2 <= 0:\n", " raise ValueError(\"Ellipse can't be fitted, negative sqrt\")\n", "\n", " res1 = sqrt(a2)\n", " res2 = sqrt(b2)\n", "\n", " if a == c:\n", " angle = 0 # we have a circle\n", " elif res2 > res1:\n", " res1, res2 = res2, res1\n", " angle = 0.5 * (pi + atan2(2 * b, (a - c)))\n", " else:\n", " angle = 0.5 * (pi + atan2(2 * b, (a - c)))\n", " return Ellipse(y0, x0, angle, res1, res2)\n", "\n" ] } ], "source": [ "import sys\n", "from matplotlib import pyplot\n", "from pyFAI.utils.ellipse import fit_ellipse\n", "import inspect\n", "print(inspect.getsource(fit_ellipse))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from matplotlib import patches\n", "from numpy import rad2deg\n", "\n", "def display(ptx, pty, ellipse=None):\n", " \"\"\"A function to overlay a set of points and the calculated ellipse\n", " \"\"\"\n", " fig = pyplot.figure()\n", " ax = fig.add_subplot(111)\n", " if ellipse is not None:\n", " error = False\n", " y0, x0, angle, wlong, wshort = ellipse\n", " if wshort == 0:\n", " error = True\n", " wshort = 0.0001\n", " if wlong == 0:\n", " error = True\n", " wlong = 0.0001\n", " patch = patches.Arc((x0, y0), width=wlong*2, height=wshort*2, angle=rad2deg(angle))\n", " if error:\n", " patch.set_color(\"red\")\n", " else:\n", " patch.set_color(\"green\")\n", " ax.add_patch(patch)\n", "\n", " bbox = patch.get_window_extent()\n", " ylim = min(y0 - wlong, pty.min()), max(y0 + wlong, pty.max())\n", " xlim = min(x0 - wlong, ptx.min()), max(x0 - wlong, ptx.max())\n", " else:\n", " ylim = pty.min(), pty.max()\n", " xlim = ptx.min(), ptx.max()\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n", " ax.set_xlim(*xlim)\n", " ax.set_ylim(*ylim)\n", " pyplot.show()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse(center_1=np.float64(1.3983022267119876), center_2=np.float64(2.182583491593691), angle=2.997497873220066, half_long_axis=1.2985427103567342, half_short_axis=0.56937272751234)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2768454/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAATtpJREFUeJzt3Xd4FOXaBvB7sulAQnpCshRp0iQIAgnSBGmKICAKKqDisYAa8cixAzY+jwo2FBsiIhxBknAORQUhdESB0KQbIIEk9IQUUnbf749xU7fMbnZ3djf377r2SnZ2ZufdyWTnmbc8rySEECAiIiJSiZfaBSAiIqL6jcEIERERqYrBCBEREamKwQgRERGpisEIERERqYrBCBEREamKwQgRERGpisEIERERqcpb7QIoodfrce7cOTRq1AiSJKldHCIiIlJACIFr166hSZMm8PIyXf/hFsHIuXPnoNVq1S4GERER2SAzMxNxcXEmX3eLYKRRo0YA5A8TFBSkcmmIiIhIifz8fGi12orruCluEYwYmmaCgoIYjBAREbkZS10s2IGViIiIVMVghIiIiFTFYISIiIhUxWCEiIiIVMVghIiIiFTFYISIiIhUxWCEiIiIVMVghIiIiFTFYISIiIhUxWCEiIiIVMVghIiIiFTFYISIiIhUxWCEiIiIVMVghIiIiFTFYISIiIhUxWCEiIiIVMVghIiIiFTFYISIiIhUxWCEiIiIVMVghIiIiFTFYISIiIhUZVUwMnv2bNxyyy1o1KgRIiMjMXLkSBw9etTsNgsXLoQkSdUe/v7+dSo0EREReQ6rgpFNmzZhypQp2LlzJ9atW4eysjIMGjQIhYWFZrcLCgpCdnZ2xeP06dN1KjQRERF5Dm9rVv7pp5+qPV+4cCEiIyOxe/du9OnTx+R2kiQhOjrathISERGRR6tTn5G8vDwAQGhoqNn1CgoK0KxZM2i1WowYMQKHDh0yu35JSQny8/OrPYiIiMgz2RyM6PV6JCUloVevXujYsaPJ9dq2bYsFCxZg5cqVWLx4MfR6PRITE5GVlWVym9mzZyM4OLjiodVqbS0mERERuThJCCFs2fCJJ57A2rVrsXXrVsTFxSnerqysDO3atcO4cePwxhtvGF2npKQEJSUlFc/z8/Oh1WqRl5eHoKAgW4pLRERETpafn4/g4GCL12+r+owYTJ06FatWrcLmzZutCkQAwMfHB126dMGJEydMruPn5wc/Pz9bikZERERuxqpmGiEEpk6dipSUFGzYsAEtWrSweoc6nQ4HDhxATEyM1dsSERGR57GqZmTKlClYsmQJVq5ciUaNGiEnJwcAEBwcjICAAADAhAkTEBsbi9mzZwMAXn/9dfTs2ROtWrXC1atX8e677+L06dOYPHmynT8KERERuSOrgpHPPvsMANCvX79qy7/55htMmjQJAHDmzBl4eVVWuFy5cgWPPvoocnJyEBISgq5du2L79u1o37593UpOREREHsHmDqzOpLQDDBEREbkOpddvzk1DREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKryVrsARFT/6HTAli1AdjYQEwP07g1oNGqXiojUwmCEiJwqORl45hkgK6tyWVwc8OGHwKhR6pWLiNTDZhoicprkZGDMmOqBCACcPSsvT05Wp1xEpC4GI0TkFDqdXCMiRO3XDMuSkuT1iKh+YTBCRE6xZUvtGpGqhAAyM+X1iKh+YTBCRE6RnW3f9YjIc7ADKxGZZa+RLzEx9l2PiDwHa0aIyKTkZKB5c6B/f2D8ePln8+a2dTTt3VseNSNJxl+XJECrldcjovqFwQgRGWXvkS8ajTx8F6gdkBief/AB840Q1UcMRoioFkeNfBk1CvjxRyA2tvryuDh5OfOMENVP7DNCRLVYM/KlXz/r3nvUKGDECGZgJaJKDEaIqBZHj3zRaKwPYojIc7GZhohq4cgXInImBiNEVAtHvhCRM7GZhuoFV5wl1hXLZGAY+TJmjBx4VO3I6siRL446Jq58rImINSNUD9gz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iYiIyCNZVTMCANOmTcPEiRPRrVs3dO/eHR988AEKCwvx0EMPAQAmTJiA2NhYzJ49GwDw+uuvo2fPnmjVqhWuXr2Kd999F6dPn8bkyZPt+0mIiIjILVkdjNx77724cOECXnvtNeTk5CA+Ph4//fRTRafWM2fOwMurssLlypUrePTRR5GTk4OQkBB07doV27dvR/v27e33KYiIiMhtSUIIoXYhLMnPz0dwcDDy8vIQFBSkdnGIiIhIAaXXb85NQ0RERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKpiMEJERESqYjBCREREqmIwQkRERKryVrsASgghAAD5+fkql4SIiIiUMly3DddxU9wiGLl27RoAQKvVqlwSIiIista1a9cQHBxs8nVJWApXXIBer8e5c+fQqFEjSJKkdnGMys/Ph1arRWZmJoKCgtQujkfiMXYsHl/H4zF2PB5jx7PmGAshcO3aNTRp0gReXqZ7hrhFzYiXlxfi4uLULoYiQUFB/AdwMB5jx+LxdTweY8fjMXY8pcfYXI2IATuwEhERkaoYjBAREZGqGIzYiZ+fH2bMmAE/Pz+1i+KxeIwdi8fX8XiMHY/H2PEccYzdogMrEREReS7WjBAREZGqGIwQERGRqhiMEBERkaoYjBAREZGqGIwosHnzZgwfPhxNmjSBJElITU21uE1aWhpuvvlm+Pn5oVWrVli4cKHDy+nOrD3GaWlpkCSp1iMnJ8c5BXZDs2fPxi233IJGjRohMjISI0eOxNGjRy1ut3z5ctx4443w9/dHp06dsGbNGieU1v3YcnwXLlxY6xz29/d3Uondz2effYabbrqpItlWQkIC1q5da3Ybnr/WsfYY2+scZjCiQGFhITp37ox58+YpWj8jIwN33HEH+vfvj/T0dCQlJWHy5Mn4+eefHVxS92XtMTY4evQosrOzKx6RkZEOKqH727RpE6ZMmYKdO3di3bp1KCsrw6BBg1BYWGhym+3bt2PcuHF45JFHsHfvXowcORIjR47EwYMHnVhy92DL8QXkLJZVz+HTp087qcTuJy4uDv/3f/+H3bt3448//sBtt92GESNG4NChQ0bX5/lrPWuPMWCnc1iQVQCIlJQUs+tMnz5ddOjQodqye++9VwwePNiBJfMcSo7xxo0bBQBx5coVp5TJE50/f14AEJs2bTK5ztixY8Udd9xRbVmPHj3EY4895ujiuT0lx/ebb74RwcHBziuUBwoJCRFfffWV0dd4/tqHuWNsr3OYNSMOsGPHDgwcOLDassGDB2PHjh0qlchzxcfHIyYmBrfffju2bdumdnHcSl5eHgAgNDTU5Do8l22n5PgCQEFBAZo1awatVmvxDpQq6XQ6/Oc//0FhYSESEhKMrsPzt26UHGPAPucwgxEHyMnJQVRUVLVlUVFRyM/PR3FxsUql8iwxMTGYP38+VqxYgRUrVkCr1aJfv37Ys2eP2kVzC3q9HklJSejVqxc6duxocj1T5zL75pin9Pi2bdsWCxYswMqVK7F48WLo9XokJiYiKyvLiaV1LwcOHEDDhg3h5+eHxx9/HCkpKWjfvr3RdXn+2saaY2yvc9gtZu0lqqlt27Zo27ZtxfPExEScPHkSc+fOxXfffadiydzDlClTcPDgQWzdulXtongkpcc3ISGh2h1nYmIi2rVrh88//xxvvPGGo4vpltq2bYv09HTk5eXhxx9/xMSJE7Fp0yaTF0uynjXH2F7nMIMRB4iOjkZubm61Zbm5uQgKCkJAQIBKpfJ83bt358VVgalTp2LVqlXYvHkz4uLizK5r6lyOjo52ZBHdmjXHtyYfHx906dIFJ06ccFDp3J+vry9atWoFAOjatSt+//13fPjhh/j8889rrcvz1zbWHOOabD2H2UzjAAkJCfj111+rLVu3bp3ZNjequ/T0dMTExKhdDJclhMDUqVORkpKCDRs2oEWLFha34bmsnC3HtyadTocDBw7wPLaCXq9HSUmJ0dd4/tqHuWNck83ncJ27wNYD165dE3v37hV79+4VAMScOXPE3r17xenTp4UQQrzwwgviwQcfrFj/r7/+EoGBgeL5558Xhw8fFvPmzRMajUb89NNPan0El2ftMZ47d65ITU0Vx48fFwcOHBDPPPOM8PLyEuvXr1frI7i8J554QgQHB4u0tDSRnZ1d8SgqKqpY58EHHxQvvPBCxfNt27YJb29v8d5774nDhw+LGTNmCB8fH3HgwAE1PoJLs+X4zpo1S/z888/i5MmTYvfu3eK+++4T/v7+4tChQ2p8BJf3wgsviE2bNomMjAyxf/9+8cILLwhJksQvv/wihOD5aw/WHmN7ncMMRhQwDCOt+Zg4caIQQoiJEyeKvn371tomPj5e+Pr6ihtuuEF88803Ti+3O7H2GL/zzjuiZcuWwt/fX4SGhop+/fqJDRs2qFN4N2Hs+AKodm727du34pgbLFu2TLRp00b4+vqKDh06iNWrVzu34G7CluOblJQkmjZtKnx9fUVUVJQYNmyY2LNnj/ML7yYefvhh0axZM+Hr6ysiIiLEgAEDKi6SQvD8tQdrj7G9zmFJCCGsq0shIiIish/2GSEiIiJVMRghIiIiVTEYISIiIlUxGCEiIiJVMRghIiIiVTEYISIiIlUxGCEiIiJVMRghIiIiVTEYISIiIlUxGCEiIiJVMRghIiIiVTEYISIiIlX9P4SN06FWJHRHAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from numpy import sin, cos, random, pi, linspace\n", "arc = 0.8\n", "npt = 100\n", "R = linspace(0, arc * pi, npt)\n", "ptx = 1.5 * cos(R) + 2 + random.normal(scale=0.05, size=npt)\n", "pty = sin(R) + 1. + random.normal(scale=0.05, size=npt)\n", "\n", "ellipse = fit_ellipse(pty, ptx)\n", "print(ellipse)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse(center_1=np.float64(10.000000000412387), center_2=np.float64(10.000000000404514), angle=2.366505287951317, half_long_axis=19.99999999975752, half_short_axis=19.99999999941901)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2768454/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "angles = linspace(0, pi / 2, 10)\n", "pty = sin(angles) * 20 + 10\n", "ptx = cos(angles) * 20 + 10\n", "ellipse = fit_ellipse(pty, ptx)\n", "print(ellipse)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse(center_1=np.float64(49.9999999999871), center_2=np.float64(100.000000000006), angle=1.134958793613805e-11, half_long_axis=19.999999999251695, half_short_axis=10.000000000376154)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2768454/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "angles = linspace(0, pi * 2, 6, endpoint=False)\n", "pty = sin(angles) * 10 + 50\n", "ptx = cos(angles) * 20 + 100\n", "ellipse = fit_ellipse(pty, ptx)\n", "print(ellipse)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse(center_1=np.float64(-2.3732127374387346e-12), center_2=np.float64(-1.0516032489249483e-11), angle=1.698841067820922e-11, half_long_axis=19.999999999925645, half_short_axis=10.000000000036747)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2768454/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAGiCAYAAAASgEe5AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAS+1JREFUeJzt3XlcVOX+B/DPsA37IDvIsLmA+0JqaCakuWQuaaZZ5vbTcs2lW3q7aVZqtml1zaUr6r2mlmWKWqapoCVqkYgYoqissigIwzrAzPn9QY6MoELOcDjD5/16zWtmDs+c8z0MzPnMc55zjkwQBAFEREREEmUmdgFERERED4NhhoiIiCSNYYaIiIgkjWGGiIiIJI1hhoiIiCSNYYaIiIgkjWGGiIiIJI1hhoiIiCSNYYaIiIgkjWGGiIiIJM2oYWblypXo0aMHHBwc4O7ujpEjRyIpKUmvTXl5OWbNmgUXFxfY29tj9OjRyMnJMWZZREREZEKMGmaio6Mxa9YsnDp1CocPH0ZlZSUGDhyIkpISXZv58+dj37592LVrF6Kjo3H9+nWMGjXKmGURERGRCZE15oUmb9y4AXd3d0RHR+Pxxx9HYWEh3NzcsH37djz77LMAgIsXL6Jdu3aIiYnBo48+2lilERERkURZNObCCgsLAQDOzs4AgNjYWFRWVmLAgAG6NsHBwfD19b1nmFGr1VCr1brnWq0W+fn5cHFxgUwmM/IaEBERkSEIgoCioiJ4e3vDzOzhdhQ1WpjRarWYN28e+vTpg44dOwIAsrOzYWVlBScnJ722Hh4eyM7OrnM+K1euxLJly4xdLhERETWC9PR0+Pj4PNQ8Gi3MzJo1CwkJCfjll18eaj6LFy/GggULdM8LCwvh6+uL9PR0ODo6PmyZRERE1AhUKhWUSiUcHBweel6NEmZmz56N/fv34/jx43rpy9PTExUVFSgoKNDrncnJyYGnp2ed85LL5ZDL5bWmOzo6MswQERFJjCGGiBj1aCZBEDB79mx8//33OHr0KAICAvR+HhISAktLSxw5ckQ3LSkpCWlpaQgNDTVmaURERGQijNozM2vWLGzfvh179+6Fg4ODbhyMQqGAjY0NFAoFpk6digULFsDZ2RmOjo6YM2cOQkNDeSQTERER1YtRD82+V9fR5s2bMWnSJADVJ81buHAhduzYAbVajUGDBuGLL764526mu6lUKigUChQWFnI3ExERkUQYcvvdqOeZMQaGGSIiIukx5Pab12YiIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkkzapg5fvw4hg0bBm9vb8hkMuzZs0fv55MmTYJMJtO7DR482JglERERkYkxapgpKSlBly5dsHbt2nu2GTx4MLKysnS3HTt2GLMkIiIiMjEWxpz5kCFDMGTIkPu2kcvl8PT0NGYZREREZMJEHzMTFRUFd3d3BAUFYcaMGcjLy7tve7VaDZVKpXcjIiKi5kvUMDN48GD897//xZEjR7Bq1SpER0djyJAh0Gg093zNypUroVAodDelUtmIFRMREVFTIxMEQWiUBclk+P777zFy5Mh7trl69SpatWqFn3/+Gf3796+zjVqthlqt1j1XqVRQKpUoLCyEo6OjocsmIiIiI1CpVFAoFAbZfou+m6mmwMBAuLq6Ijk5+Z5t5HI5HB0d9W5ERETUfDWpMJORkYG8vDx4eXmJXQoRERFJhFGPZiouLtbrZbl27Rri4uLg7OwMZ2dnLFu2DKNHj4anpyeuXLmC119/Ha1bt8agQYOMWRYRERGZEKOGmd9//x3h4eG65wsWLAAATJw4EevWrUN8fDy2bt2KgoICeHt7Y+DAgXj33Xchl8uNWRYRERGZkEYbAGwshhxARERERI3DZAcAExERETUUwwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBER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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Center to zero\n", "angles = linspace(0, 2*pi, 9, endpoint=False)\n", "pty = sin(angles+0) * 10 + 0\n", "ptx = cos(angles+0) * 20 + 0\n", "ellipse = fit_ellipse(pty, ptx)\n", "print(ellipse)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse(center_1=np.float64(50.00000000000123), center_2=np.float64(100.00000000000085), angle=0.5535743588955828, half_long_axis=18.090169943728814, half_short_axis=6.9098300562584765)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2768454/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUPBJREFUeJzt3XdUFNffBvBnQUA6gkhvgogF7CK2gCX2BpqoaGIJxhJjSaIxzZbEkvyiJsYSk9hbFDSxoqIYCyBWrAhY6KAoLHWB3Xn/4JWEiMJSdijP55w5sjOzs9+dbNiHO/fekQiCIICIiIhIJGpiF0BERET1G8MIERERiYphhIiIiETFMEJERESiYhghIiIiUTGMEBERkagYRoiIiEhUDCNEREQkqgZiF/BfCoUCiYmJ0NfXh0QiEbscIiIiKgdBEJCZmQlLS0uoqSnX1lHjwkhiYiJsbGzELoOIiIgqIC4uDtbW1ko9p8aFEX19fQBFb8bAwEDkaoiIiKg8pFIpbGxsir/HlVHjwsiLSzMGBgYMI0RERLVMRbpYsAMrERERiYphhIiIiETFMEJERESiYhghIiIiUTGMEBERkagYRoiIiEhUDCNEREQkKoYRIiIiEhXDCBEREYmKYYSIiIhExTBCREREomIYISIiIlExjBAREZGoGEaIiIhIVAwjREREJCqGESIiIhIVwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiISldJhJCEhAePGjYOJiQm0tbXh6uqKy5cvF2+fMGECJBJJiaV///5VWjQRERHVHQ2U2fn58+fo1q0bvLy8cOzYMZiamiIqKgqNGjUqsV///v2xefPm4sdaWlpVUy0RERHVOUqFkRUrVsDGxqZE0HBwcHhpPy0tLZibm1e+OiIiIqrzlLpM89dff6Fjx44YNWoUmjRpgnbt2mHTpk0v7RccHIwmTZqgefPmmDZtGtLS0l55TJlMBqlUWmIhIiKi+kOpMPLgwQOsX78ezZo1Q2BgIKZNm4YPP/wQW7duLd6nf//+2LZtG4KCgrBixQqcPXsWAwYMgFwuL/WYy5Ytg6GhYfFiY2NTuXdEREREtYpEEAShvDtramqiY8eOuHjxYvG6Dz/8EOHh4QgJCSn1OQ8ePICjoyNOnTqF3r17v7RdJpNBJpMVP5ZKpbCxsUFGRgYMDAyUeS9EREQkEqlUCkNDwwp9fyvVMmJhYYGWLVuWWNeiRQvExsa+8jlNmzZF48aNER0dXep2LS0tGBgYlFiIiIio/lAqjHTr1g2RkZEl1t2/fx92dnavfE58fDzS0tJgYWFRsQqJiIioTlMqjMyZMwehoaH49ttvER0djV27duGXX37BjBkzAABZWVn45JNPEBoaikePHiEoKAjDhg2Dk5MT+vXrVy1vgIiIiGo3pcJIp06dcODAAezevRutW7fG0qVLsXr1avj6+gIA1NXVERERgaFDh8LZ2RmTJ09Ghw4dcO7cOc41QkRERKVSqgOrKlSmAwwRERGJQ2UdWImIiIiqGsMIERERiYphhIiIiETFMEJERESiYhghIiIiUTGMEBERkagYRoiIiEhUDCNEREQkKoYRIiIiEhXDCBEREYmKYYSIiIhExTBCREREomIYISIiIlExjBAREZGoGEaIiIhIVAwjREREJCqGESIiIhIVwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiISFcMIERERiYphhIiIiETFMEJERESiYhghIiIiUTGMEBERkagaiF0AERERVY5cDpw7ByQlARYWQI8egLq62FWVH8MIERERALlCjgxZBmSFMuTL81+5yOSv364mUYOeph70NPWgq6Fb/PN/F011TUgkkkrXHRAAzJoFxMf/s87aGlizBvD2rvThVYJhhIiI6qQCeQGe5jzFk5wneJL9pPR///VzWk4aBAgVei11iTo01TWhqa4JuSBHdn52mcdqoNbgpcBirG0MW0Pb4sXO0A62hrawNrCGVgOtl44REACMHAkI/3mphISi9fv3145AIhGE/74FcUmlUhgaGiIjIwMGBgZil0NERDWMXCFHQmYCHqU/Kl7ipfElgkVqdirS89Jfeq6WuhZMdU1hqmP6z7//+tlY2xgNGzQsDhYvFq0GWi+te7FoqGlAXa3kNRFBEJBbmIus/KwSS3Z+9kvr/r08zX2K2IxYxGbEIjU7tcQxrQ2s0dykedHSuDmcjJpjcq/eSE5UB/ByC4tEUtRC8vChai7ZVOb7m2GEiIhqFEEQkJqdipjnMYh+Fl0idDxKf4Q4aRwKFYXF+5vpmsHawBpNdJuUCBglHv//v3qaelVyaUQVcgtyESeNQ2xGLB6nP0bM8xhEpkXiftp9RKVFQRbdBdgaXOZxzpwBPD2rvdxKfX/zMg0REamcQlAgKTMJ0c+i/1me//NzVn5W8b7meuawM7SDvZE9Olt1hr2RffFia2gLHQ0dEd9J9dHW0IaziTOcTZxf2iZXyLH29zTM3lr2ce4/yoQn9KuhwqrDMEJERNUqLScNN1NvIiIlAjdTbiIiNQK3U28juyAbACCBBLaGtnAydoK7lTt8XX3hZOwEJ2MnNG3UtM6GjcpQV1NHG6cm5dr3/eAh+DnvOUa4jIBPCx+0btK6xrUO8TINERFVCVmhDHef3i0OHS8CSFJWEgBAU10TrUxbwdXMFa5NXOHS2AVOxk5wMHIotXMmvZ5cDtjbF3VWLe2bXCIBzC0LsfzQXpx8dByHIg8hQ5aBZsbN4NPCByNbjkR7i/ZVFkzYZ4SIiFRGEAQ8znhc1MqREoGbqUXBI/JpJOSCHABgb2QPNzM3uDYpCh5uZm5oZtIMDdTYIF+VXoymAUoGkhf54t+jafLl+Qh6EIT9d/bjz8g/kZabhnbm7TC903SMaT0Gupq6laqFYYSIiEqoqkmw8uX5uJ58HZcTLxcHj1uptyCVSQEARg2NisPGi39bNWkFAy3+/laV0uYZsbEBVq9+9bDeQkUhTsScwIbLG3D4/mEYaBng3TbvYkbnGaX2USkPlYaRhIQEzJ8/H8eOHUNOTg6cnJywefNmdOzYEUBRYl64cCE2bdqE9PR0dOvWDevXr0ezZs2q/c0QEVHFJ8F60eIRFh+G0PhQhCaE4lrSNcjkMmioacClsQtczVzh1sSt+FKLtYF1jet/UB9VJnw+Sn+EX678gl+v/oq03DSMdxuPRZ6LYG9kr1QNKgsjz58/R7t27eDl5YVp06bB1NQUUVFRcHR0hKOjIwBgxYoVWLZsGbZu3QoHBwd8+eWXuHnzJu7cuYOGDRtW65shIqrvXjUJVmnN9ln5WbiceLkoePz/kpKdAgBo2qgp3K3c0cW6C7pYd0Ebszbs11HHyQpl+PXqr1j691I8y32GKR2m4PMen8NC36Jcz1dZGPn0009x4cIFnDt3rtTtgiDA0tISH330ET7++GMAQEZGBszMzLBlyxaMHj26zNdgGCEiqpgXHRr/3SLybxKJgEZNsuG94WNcSg7BrdRbUAgK6Gvqo7NV5+Lw4W7tjia65RupQXVPdn421l5aixUXVkAml2F57+WY0XkG1CSvv7euysJIy5Yt0a9fP8THx+Ps2bOwsrLC9OnT4efnBwB48OABHB0dce3aNbRt27b4eW+88Qbatm2LNWvWvHRMmUwGmUxW4s3Y2NgwjBARKSk4GPDyKns/+9kT0cerAdyti8JHi8YtXppBlCg9Lx1fnP4CP4f/jJ52PfH70N/haOz4yv0rE0ZeH3P+48GDB8X9PwIDAzFt2jR8+OGH2Lq1aNaV5ORkAICZmVmJ55mZmRVv+69ly5bB0NCweLGxsVHqDRAREfA4/TH2hJwt177fdt6MTUM34b3276F1k9YMIlQqo4ZGWDtwLU6/cxpxGXFw2+CGDZc3oDrGvSg1xkqhUKBjx4749ttvAQDt2rXDrVu3sGHDBrz77rsVKmDBggWYO3du8eMXLSNERPRqSZlJOPPoDE4/PI0zj87gwfMHwENPAGfKfK5F+boAEAEAvBy8EDEtAvNOzsO0I9NwO/U2VvVfVaXDtJU6koWFBVq2bFliXYsWLeDv7w8AMDc3BwCkpKTA4l+f9pSUlBKXbf5NS0sLWlrsFEVE9DpPsp8g+FFwcfiITIsEALQybYVBzQbBy94L3W3eQPug10+CZW1dNNKCSBl6mnpYN2gd2pq3xfQj0/Eg/QH2+OyBvlbVTDOvVBjp1q0bIiMjS6y7f/8+7OzsAAAODg4wNzdHUFBQcfiQSqUICwvDtGnTqqRgIqL64Hnuc5x9fBZnHp7B6UencSv1FgDA2cQZXvZeWOK1BJ72ni91NF2zpmg0jURS+iRYq1er5g6uVDdN6TAF9kb2GLVvFHpu6Ymgd4JgrG1c6eMq1YE1PDwcXbt2xeLFi/HWW2/h0qVL8PPzwy+//AJfX18ARUN7ly9fXmJob0REBIf2EhG9hlQmxbnH53Dm0RmceXQG15KuQYAAByMHeNl7wcvBC172XrAysCrzWBWZBItIGTdTbsJrqxecjJ1w+t3T0NHQUe2kZ4cPH8aCBQsQFRUFBwcHzJ07t3g0DfDPpGe//PIL0tPT0b17d6xbtw7OzuWb0Y1hhIjqg5yCHFyIvVB82eVy4mXIBTms9K3Qy6FXcQBRduKpF6pqBlaiV7mceBleW73Qy6EXAt4KQHZWNqeDJyKqyQRBQGRaJI5FHcOx6GP4+/HfkMllaKLbBF72XsUBxMnYiTOaUq1xLOoYBu8ejAXdF2Bex3kV/v7mHYuIiKpJdn42Tj88jWPRRQHkUfojaKlr4Q37N7C8z3L0bdoXLU1bMnxQrTWg2QAs8VyChcEL0deqb4WPw5YRIqIqIggC7j29Vxw+/n78N/Ll+WjaqCkGOA3AAKcB8LT3rPTdUYlqkgJ5ATr/2hkFOQW4Pfc2W0aIiFQtrzAPwY+Ccfj+YRyJOlLc+uFp74mVfVZiQLMBaGbcjK0fVGdpqGvg96G/o+NPHSt8DIYRIiIlJWYm4mjUURy+fxgnH5xETkEO7AztMKjZIAxsNhBeDl7Q0dARu0wilWln0Q5+HfywERsr9HxepiEiKoNCUOBq0lUcvn8Yh+8fxpWkK1CTqMHD2gODnQdjsPNgtDJtxdYPqtduxt6Em50bL9MQEVUVWaEMJx+cxMF7B3Ek6giSs5JhqGWIAc0GYE6XOejv1B8mOiZil0lUY9gZ2VX4uQwjRET/L6cgB8ejj8P/rj8ORR5CZn4mnE2cMc51HAY7D0ZXm67QUNcQu0yiOodhhIjqtUxZJo5EHYH/XX8cjTqKnIIcuJm54eOuH8OnhQ+H3hKpAMMIEdU7z3Of49D9Q/C/64/A6EDI5DJ0tOyIL3t+CZ8WPmhm0kzsEonqFYYRIqoXnuY8xcF7B+F/1x+nHpxCoaIQHtYe+Lb3t/Bu4V3hadeJqPIYRoiozkrKTMKBewfgf9cfZx+dhQABPe16YlW/VRjhMqJcN50jourHMEJEdUpcRhz87/rD/64/LsRegJpEDb2b9sa6Qesw3GU4mug2EbtEIvoPhhEiqvUePH8A/zv+2H93Py4lXIKmuib6Nu2L34f9jqHNh8JY21jsEonoNRhGiKhWepL9BHtv78WOiB0ISwiDdgNt9Hfqj53eOzGo2SAYNjQUu0QiKieGESKqNXIKcvBX5F/YEbEDgTGBAIABTgOwx2cPBjsP5g3oiGophhEiqtHkCjmCHwVjx80d8L/jj8z8THhYe2BN/zV4q9VbaKzTWOwSiaiSGEaIqMYRBAERKRHYEbEDu27tQmJmIpyMnfBx148x1nUsnIydxC6RiKoQwwgR1RhxGXHYdXMXdtzcgVupt9BYpzFGtxqNcW7j0NmqM2dCJaqjGEaISFQZeRnwv+uPHRE7EPwoGFoNtDDcZTiW916ONx3f5L1giOoBhhEiUrl8eT6ORx/Hjogd+CvyL+TL89HLoRc2D9uMES1GwEBLuduPE1HtxjBCRCohCAJC4kOwI2IH9t7ei2e5z9DGrA2+7vU1xrQew9lQieoxhhEiqlZJmUnYcn0Lfrv2G2Kex8DawBp+7f3g6+oLVzNXscsjohqAYYSIqpxcIcfx6OPYdHUTDt8/DA11DbzV6i38OvRX9LTrCTWJmtglElEVksuBc+cq/nyGESKqMo/TH+P3a7/j9+u/I14ajzZmbbCm/xr4uvnCqKGR2OURUTUICABmzQLi4yt+DIYRIqqUAnkBDt0/hE1XNyEwOhC6mroY23os/Dr4oYNFBw7HJarDAgKAkSMBQajccRhGiKhCotKi8OvVX7HlxhakZqfC3codm4Zswtut34aepp7Y5RFRNZPLi1pEKhtEAIYRIlJCXmEeAu4GYNPVTQh+FAyjhkYY7zYefu392BmVqJ45d65yl2b+jWGEiMp0O/U2Nl3dhO0R2/Es9xnesHsDO0bsgHcLb2hraItdHhGJICmp6o7FMEJEpcrOz8be23ux6eomhMaHwlTHFJPbTcZ77d+Ds4mz2OURkcgsLKruWAwjRFTClcQr2HR1E3bd3IWs/Cz0deyLfaP2YWjzodBU1xS7PCKqIXr0AKytgYQEdmAloiqQV5iHvbf2Ym34WlxOvAwrfSvM7jIbk9pNgr2RvdjlEVENpK4OrFlTNJoGUFTqWAwjRPVYbEYsNlzegE1XN+FpzlP0d+qPv0b/hQHNBqCBGn89ENHreXsDq3+Px6xZAiA1rPBx+NuGqJ4RBAHBj4Lx06Wf8Gfkn9DT1MPEthMxvdN09gUhIqWF6s+D9VcX8WOzy/AeVrFjMIwQ1RNZ+VnYfmM71oavxZ0nd9DStCXWDliL8W3Gc14QIqqQO0/uYM+tPVg3aB16O1e8TxnDCFEdF5UWhZ/Df8bm65uRlZ+FYc2HYe2AtfC09+TsqERUKYvPLoaNoQ0mtZuEvOy8Ch+HYYSoDhIEAUEPg7A6dDWORh2FiY4JZnSagakdp8LW0Fbs8oioDriadBX7bu/DxsEboamuiTwwjBARgJyCHOyM2Ik1YWtw+8ltuJm54behv2GM6xg0bNBQ7PKIqI6QK+R4//D7aN2kNSa0nVDp4zGMENUB8dJ4rAtfh41XNuJ57nMMbT4UaweuxRt2b/BSDBFVuQ2XN+By4mVcnHQRGuoalT4ewwhRLRYaH4o1YWuw/85+aDfQxuR2kzHTfSaaNmoqdmlEVEclZibis9OfYUr7KfCw8aiSYzKMENUyhYpC+N/xx6rQVQhLCINjI0f88OYPmNB2AvS19MUuj4jquLmBc6GlroXlfZZX2THVlNl50aJFkEgkJRYXF5fi7Z6eni9tnzp1apUVS1Sf5RbkYn34ejRf2xyj/UdDV1MXh8Ycwv2Z9zHTfSaDCBFVu8DoQOy9vRc/9PsBjbQbVdlxlW4ZadWqFU6dOvXPARqUPISfnx+WLFlS/FhHR6cS5RHR89znWBe+Dj9e+hFPc55iVMtR2DdqH9pbtBe7NCKqR3ILcjH96HT0cugFX1ffKj220mGkQYMGMDc3f+V2HR2d124novJJkCZgVegqbLyyEQXyAkxsOxEfd/0YjsaOYpdGRPXQkrNLEC+Nx9GxR6u8Y7xSl2kAICoqCpaWlmjatCl8fX0RGxtbYvvOnTvRuHFjtG7dGgsWLEBOTs5rjyeTySCVSkssRPXZvaf3MPnPyXBY44Bfr/6KmZ1n4vHsx1g/eD2DCBGJ4mjUUay4sAIL31iI5o2bV/nxJYJQ/hv/Hjt2DFlZWWjevDmSkpKwePFiJCQk4NatW9DX18cvv/wCOzs7WFpaIiIiAvPnz0fnzp0REBDwymMuWrQIixcvfml9RkYGDAwMKvauiGqhsPgwrLiwAgfvHYS5njnmeszFlA5TYKDF/w+ISDwPnj9Ah186oLttd/w5+k+oSUpvx5BKpTA0NKzQ97dSYeS/0tPTYWdnhx9++AGTJ09+afvp06fRu3dvREdHw9Gx9L/oZDIZZDJZ8WOpVAobGxuGEaoT5HLg3DkgKQmwsAB69Ci67fYLgiAgMCYQy88vx9nHZ+Fs4ox5XedhnNs4aDXQEq9wIiIUTaTY9beuyMrPwuUpl2HU0OiV+1YmjFRqaK+RkRGcnZ0RHR1d6nZ3d3cAeG0Y0dLSgpYWf+lS3RMQAMyaBcTH/7PO2hpYswYYOrwQ+27vw4oLK3Aj5QY6W3WG/1v+GNZ8GNTV1F99UCIiFREEAdOOTMP9tPsIfS/0tUGksioVRrKyshATE4Px48eXuv369esAAAsLi8q8DFGtExAAjBwJ/LfdMSFBgI8P0GTiTKTabUA/x35Y1W8Vb1pHRDXOhssbsO3GNmwfsR1uZm7V+lpKXab5+OOPMWTIENjZ2SExMRELFy7E9evXcefOHUilUuzatQsDBw6EiYkJIiIiMGfOHFhbW+Ps2bPlLqgyzTxENYFcDtjbl2wRKUkBHZNnOHs9Dh2t26mwMiKi8gmND0XPzT3xfof38dPAn8r1HJVdpomPj8eYMWOQlpYGU1NTdO/eHaGhoTA1NUVeXh5OnTqF1atXIzs7GzY2NvDx8cEXX3yhVEFEtd25c68LIgCghpy0xsiKbgxYq6oqIqLySclKwcg/RqKTVSf8r9//VPKaSoWRPXv2vHKbjY2NUi0gRHVVUlLV7kdEpCqFikKM9h+NQkUh9o3aB011TZW8rtLzjBDRq6VkpeBA3Lpy7cuuVERU03wW9BnOPT6HvSP3wlLfUmWvyzBCVAWeZD/BvJPz0PTHpjhe+DkMTDMgkZTeHUsiAWxsiob5EhHVFPtu78N3F7/Dd32/wxv2b6j0tXnXXqJKSMtJw/cXv8dPl36CRCLBnC5zMNdjLoJdDDFyZFHw+HcX8RcDZlavLjnfCBGRmE49OIVxB8ZhTOsxmN1ltspfn2GEqAKe5T7DDyE/YE3YGgiCgJmdZ+Kjrh+hsU5jAIC3N7B/f+nzjKxeXbSdiKgmuBh3EcP2DEMvh17YMnyLKNMMMIwQKSE9Lx2rQlZhddhqFCoKMaPTDHzS9ROY6pq+tK+3NzBs2OtnYCUiEtP15OsYuHMgOlp2hP9b/irrsPpfDCNE5ZCRl4E1YWvwQ8gPkMllmN5xOuZ1mwczPbPXPk9dHfD0VE2NRETKuPf0Ht7c/iaamTTDoTGHoKOhI1otDCNEr5Epy8SPYT/ifyH/Q05BDqZ2nIr53ebDQp9DYYio9nr4/CH6bOsDMz0zHPc9LvoNORlGiEqRlZ+FtZfW4vuL3yMzPxNT2k/Bp90/hZWBldilERFVSmJmIvps7wNtDW2cGHcCJjomYpfEMEL0b9n52VgXvg4rL65ERl4G/Nr7YUGPBbA24FSpRFT7Pc15ir7b+yJfno/zE8/XmFZehhEiAAXyAvx69VcsPrsYablpmNR2Ej7v+TlsDW3FLo2IqEpk5GWg/47+eJrzFOcmnoOdkZ3YJRVjGKF6TRAE/Bn5J+afmo+otCi80+YdLPJcBHsje7FLIyKqMjkFORi8ezBinsfg7ISzcDZxFrukEhhGqN4KjQ/FJyc/wfnY8+jn2A9/jPwDbczbiF0WEVGVkhXKMGLvCFxLuoagd4LgZuYmdkkvYRiheif6WTQWBC3A/jv70casDU6MO4G+jn3FLouIqMrlFebhrX1v4eyjszjmewzu1u5il1QqhhGqN57mPMXSs0ux/vJ6mOmZYevwrfB19YW6GmchI6K6J1OWiWF7hiE0PhQHRx+El4OX2CW9EsMI1Xm5BblYHboayy8sBwAs8VqCWe6zoK2hLXJlRETV42nOUwzYOQBRaVE4Mf4Eutt2F7uk12IYoTpLrpBjR8QOfHHmCyRnJWN6x+n48o0vi+8fQ0RUF8VL4/Hm9jeRlpuG4AnBaGveVuySysQwQnXSiZgTmHdyHm6k3MColqPwbe9v4WTsJHZZRETVKiotCn2394UAAecmnqtxo2ZehWGE6pQbyTcw79Q8nIgpapYMmRyCLtZdxC6LiKjaXU++jn47+sFY2xgnx5+sVZM1MoxQnRCXEYcvz3yJbTe2wdnEGQffPoihzYeKcitsIiJVC3oQhBF7R8DZxBnHxx2vdZejGUaoVsvIy8Dy88uxOmw1DLQM8PPAn/Fe+/egoa4hdmlERCqxM2InJv45Eb2b9sa+Ufugp6kndklKYxihWkmukGPz9c1YELQAOQU5+KTrJ/ik6yfQ19IXuzQiIpUQBAHfXfwO80/Nx4S2E/DL4F9q7R9iDCNU64TGh+KDox/gStIVjHcbj+V9lsNS31LssoiIVEaukGNO4Bz8dOknfNnzSyz2XFyrL0szjFCtkZyVjE9PfYqtN7ainXk7XJh0AV1tuopdFhGRSuUW5GLcgXE4eO8gNgzagPc7vi92SZXGMEI1XoG8AD9d+gmLghdBU10TGwdvxOR2kzlzKhHVO0mZSfD5wwfXk6/jwNsHMLT5ULFLqhIMI1SjnYw5iQ+Pf4j7afcxreM0LPFaAmNtY7HLIiJSudD4UHjv9YZEIkHwhGB0tuosdklVRk3sAohK8zj9Mbz3euPNHW+iiW4TXJ1yFWsHrmUQIaJ66derv+KNLW/AoZEDrky5UqeCCMCWEaphZIUy/C/kf/j676/RSLsRdvvsxtut3q7VHbOIiCoqX56P2cdnY/3l9ZjaYSrWDFgDTXVNscuqcgwjVGMEPQjCjKMzEP0sGrO7zMbCNxZyqC4R1VvJWckYtW8UwuLD8MvgX+DXwU/skqoNwwiJLjEzEXMD52Lv7b3oYdsD+0btg6uZq9hlERGJ5lLCJXjv9YZckCN4QnCdHznIMEKiKVQU4qewn7AweCG0NbSxdfhWjHcbz0syRFSvbb62GdOOTEM7i3bwf8u/XsyjxDBCojgfex7Tj0zHrdRbmN5pOr7u9TWMGhqJXRYRkWgK5AWYGzgXa8PXYnK7yfh54M/QaqAldlkqwTBCKpWRl4GPT3yMX6/9is5WnRHuF44Olh3ELouISFSp2akYtW8ULsZdxLqB6zC149R61UrMMEIqc/j+Ybx/+H1kyjKxbuA6vN/xfahJOLqciOq3K4lXMGLvCMjkMpx+5zR62PUQuySV4zcBVbunOU/hG+CLIbuHoI1ZG9yefhvTOk1jECGiem/bjW3o9ns3mOuZ48qUK/UyiABsGaFqJAgC9t3Zhw+OfoBCRSG2Dd+GcW7j6lXTIxFRaXILcvHJyU/wc/jPmNB2AtYPWo+GDRqKXZZoGEaoWiRlJmH60ek4eO8gfFr4YO3AtTDXMxe7LCIi0d1KvYUx/mMQlRaFnwf+jGkdp9X7P9IYRqhKCYKArTe2Yk7gHGiqa2LfqH0Y2XKk2GUREYlOEASsv7weH534CI6NHBHuF845lf4fwwhVmdiMWEw5NAWBMYEY7zYeq/qtgomOidhlERGJ7mnOU0z+azL+ivwLMzrNwHd9v4O2hrbYZdUYDCNUaQpBgY2XN2LeqXkwamiEI2OPYGCzgWKXRURUIwQ9CML4A+ORL8/Hn6P/xNDmQ8UuqcZhGKFKiUqLwnuH3sPfj//G+x3ex8q+K2GgZSB2WUREosuX5+OrM19h5YWV6OXQC9tGbKsXs6lWhFJjKxctWgSJRFJicXFxKd6el5eHGTNmwMTEBHp6evDx8UFKSkqVF03ikyvk+N/F/8FtgxvipfE4/c5pbBi8gUGEiAhFf6h1+70b/hfyP6zoswInxp9gEHkNpVtGWrVqhVOnTv1zgAb/HGLOnDk4cuQI9u3bB0NDQ3zwwQfw9vbGhQsXqqZaqhFup97GpL8mITwhHLO7zMZSr6XQ1dQVuywiItEJgoBtN7ZhxtEZsNC3QMjkEHS07Ch2WTWe0mGkQYMGMDd/eYhmRkYGfvvtN+zatQu9evUCAGzevBktWrRAaGgounTpUvlqSVRyhRwrL6zEwuCFcDJ2woVJF+Bh4yF2WURENUJ6XjqmHZmGPbf2YGLbifhxwI/Q09QTu6xaQekwEhUVBUtLSzRs2BAeHh5YtmwZbG1tceXKFRQUFKBPnz7F+7q4uMDW1hYhISGvDCMymQwymaz4sVQqrcDboOoWL43HOwfeQfCjYMzrNg+LPBfV6wl6iIj+7WLcRYz1H4vnec+x22c3RrceLXZJtYpSfUbc3d2xZcsWHD9+HOvXr8fDhw/Ro0cPZGZmIjk5GZqamjAyMirxHDMzMyQnJ7/ymMuWLYOhoWHxYmNjU6E3QtXn4L2DaLOhDe6n3cfpd09jeZ/lDCJERChqMV5ydgl6bu4JKwMr3Jh6g0GkApRqGRkwYEDxz25ubnB3d4ednR3++OMPaGtXbLz0ggULMHfu3OLHUqmUgaSGyCnIwdzAudh4ZSNGuIzApiGbOG8IEdH/i3kWg4l/TsSFuAv4sueX+KLnF2igxkGqFVGps2ZkZARnZ2dER0ejb9++yM/PR3p6eonWkZSUlFL7mLygpaUFLS2typRB1eBG8g2M8R+DR+mPsHHwRvi196v30xUTUf0ilwPnzgFJSYCFBdCjB6CuXtQa8mPYj/j89Ocw0zND8LvB9fYGd1WlUrdNzcrKQkxMDCwsLNChQwdoaGggKCioeHtkZCRiY2Ph4cFOjrWFIAhYE7oGnX/tDE11TVyZcgVTOkxhECGieiUgALC3B7y8gLFji/61twfWbI5D983d8dGJjzClwxTcmnaLQaQKKNUy8vHHH2PIkCGws7NDYmIiFi5cCHV1dYwZMwaGhoaYPHky5s6dC2NjYxgYGGDmzJnw8PDgSJpaIjU7FRMOTsCx6GOY7T4by/osY98QIqp3AgKAkSMBQSi5Pj5ewOxJVrCc3BHnF/4PXW26ilNgHaRUGImPj8eYMWOQlpYGU1NTdO/eHaGhoTA1NQUArFq1CmpqavDx8YFMJkO/fv2wbt26aimcqlZgdCDePfguBAg4OvYoBjQbUPaTiIjqGLkcmDXr5SBSpKiFWC3wR7hvZGtxVZIIQumnXCxSqRSGhobIyMiAgQFn86xuskIZPgv6DD+E/oB+jv2wdfhWmOmZiV0WEZEogoOLLsmU5cwZwNOzuqupXSrz/c1uv/XYvaf3MMZ/DO48uYNV/VbhQ/cPoSapVDciIqJaLSmpavej8mEYqYcEQcBv137DrOOzYGNgg9DJoWhn0U7ssoiIRGfUOBdA2VNVWFhUfy31Cf8MrmekMine2v8W/A75YZzrOFyZcoVBhIgIQNCDIEy/5QoYxAMovQeDRALY2BQN86WqwzBSj0Q+jYT7r+44EXMC+0ftx8YhG3mDOyKq9zLyMjDl0BT02d4Hdo2ssfZH9f+/M33J/V48Xr26aL4Rqjq8TFNPHIo8hHEHxsFK3wrhfuFwNnEWuyQiItEdvn8YUw9PRYYsA+sHrceUDlOgJlGDhX7RqJr4+H/2tbYuCiLe3qKVW2cxjNRxCkGBb/7+Bl8Ff4XhLsOxdfhWGGhxlBIR1W+p2amYGzgXO2/uRH+n/tg4eCNsDW2Lt3t7A8OGlT4DK1U9hpE6LFOWiXcOvoOD9w5isedifNHzC46WIaJ6Ta6Q45crv+Cz059BAgm2DNuCd9q8U+os0+rqHL6rKgwjdVRUWhSG7x2OuIw4/Dn6TwxtPlTskoiIRHU58TKmHZmGy4mXMantJCzvsxymuqZil0VgGKmTjkYdxVj/sTDXM8clv0twaewidklERKJ5nvscnwV9ho1XNsLVzBUXJl3gVO41DMNIHSIIApadX4YvTn+BQc6DsGPEDhg2NBS7LCIiUSgEBbbd2IZ5J+chrzAPq/qtwozOM9BAjV99NQ3/i9QRWflZmHBwAvzv+uOrnl9hoedC9g8honorIiUC049Mx4W4CxjrOhbf9/0eFvqcqaymYhipA6KfRWPE3hF4lP4IB94+gOEuw8UuiYhIFOl56VgUvAhrL61FM5NmCHonCL0ceoldFpWBYaSWOx59HGP8x8BUxxRh74WhpWlLsUsiIlI5haDA5mubsSBoAXIKcvBNr28wx2MONNU1xS6NyoFhpJYSBAHfXfwOn576FAOaDcBO750wamgkdllERCp3KeESPjj6AcITw+Hr6ouVfVfCUt9S7LJICQwjtVChohAfHP0AG69sxGfdP8MSryVQV+NMPERUv6RkpWBB0AJsvr4Zbc3b4tzEc+hu213ssqgCGEZqmZyCHIzxH4Mj94/g1yG/YnL7yWKXRESkUgXyAvwc/jMWBi9EA7UGWDdwHaZ0mMI/ymoxhpFa5GnOUwzZPQQRKRH4a8xfGNhsoNglERGp1KkHpzDr+Czce3oP73d4H0u9lsJEx0TssqiSGEZqiYfPH6L/zv54nvscwe8Go5NVJ7FLIiJSmZspNzHv1Dwcjz6ObjbdcNnvMtpZtBO7LKoiDCO1wNWkqxi4cyD0tfQRMjkEjsaOYpdERKQSCdIEfHXmK2y5sQVNGzXF/lH74d3Cu9R7yVDtxTBSwwU9CMLwvcPR0rQlDo85zPsoEFG9IJVJsfLCSvwQ8gN0NXWxpv8avN/hfWioa4hdGlUDhpEa7MDdAxjtPxpe9l7wf8sfupq6YpdERFStCuQF+OXKL1h8djEy8zMxt8tczOs2j7e2qOMYRmoAuRw4dw5ISgIsLIAePYDtN7dg8l+TMbLlSGwfsZ0T9xBRnSYIAg7cO4BPT32K6GfReLftu1jqtRTWBtZil0YqwDAisoAAYNYsID7+n3WGTTKR4fkXpox7D+sGreNwNSKq0y7GXcQnJz/BxbiL6O/UH/vf2g83MzexyyIVYhgRUUAAMHIkIAgl12ek6gJ/+OPNtwB1NXbSIqK6KSotCguCFsD/rj/amrfFyfEn0adpH7HLIhHwtq4ikcuLWkT+G0SKqEEikWDOHAnkclVXRkRUvZ5kP8HMozPRcl1LXEq4hG3Dt+HKlCsMIvUYW0ZEcu5cyUsz/yUIQFxc0X6eniori4io2uQU5GB16GosP78cahI1fNPrG8zsPBPaGtpil0YiYxgRSVJS1e5HRFRTyRVybLuxDV+e+RKp2amY0WkGPu/5ORrrNBa7NKohGEZEYmFRtfsREdU0giDgSNQRfBb0GW6m3sTbrd7GN72+4cSN9BKGEZH06AE0apKF56k6KK3rjkQCWFsX7UdEVJsIgoDj0cexMHghwhPD0dOuJ0Inh8Ld2l3s0qiGYgdWkey7uwfPPd8FIIFEUrIX64tZjlevBtQ5qpeIaglBEHAi5gQ8fvPAwF0DoaGugVPjTyH43WAGEXothhERHIo8hPEHxuOdMXrYt1+AlVXJ4bvW1sD+/YC3t0gFEhEpQRAEBD0IQvfN3dFvRz8AQOC4QJyfeB69m/bmfWSoTLxMo2KnH57GqH2jMLT5UPw29Dc0UFPDiOEvz8DKFhEiqg2CHwVjYfBC/P34b3S07IijY4+iv1N/BhBSCsOICoXGh2Lo7qHwcvDCLu9daKBWdPrV1Tl8l4hql3OPz2Fh8EKceXQG7czb4dCYQxjUbBBDCFUIw4iKXE++jgE7B6C9RXv4v+UPrQZaYpdERKS0i3EXsTB4IU49OIU2Zm1w8O2DGNp8KEMIVQrDiApEPo3Em9vfhJOxEw6PPQwdDR2xSyIiUkpYfBgWBi9EYEwgWjdpDf+3/DHcZTjUJOx6SJXHMFLNUrJS0Hd7XzTRbYLjvsdhoGUgdklEROV2OfEyFgYvxNGoo2hp2hJ7R+7FyJYjGUKoSjGMVKNCRSHe3v82ChQFCBwXCBMdE7FLIiIql6tJV7EoeBEO3T+E5ibNsct7F95q9RbvIk7VgmGkGi04tQAX4i7g9DunYWVgJXY5RERlupF8A4vOLsLBewfRzLgZto/YjjGtxzCEULViGKkm+27vw/ch32N1v9XoYcdpVImoZrsQewErLqzAofuH0LRRU2wZtgW+br7Fo/6IqhM/ZdXg7pO7mPjnRIxuPRofun8odjlERKVSCAocjTqK5eeX40LcBbRo3AKbh22Gr6svNNQ1xC6P6pFK9UBavnw5JBIJZs+eXbzO09MTEomkxDJ16tTK1llrSGVSjNg7AvZG9tg0ZBOHuxFRjVMgL8C2G9vgtt4NQ3YPgUJQ4M/Rf+LW9FuY0HYCgwipXIVbRsLDw7Fx40a4ubm9tM3Pzw9LliwpfqyjUz+GsgqCgIl/TkRSVhLC/cKhp6kndklERMWy87Px69Vf8UPoD4jNiMWgZoOwftB6dLftzj+cSFQVCiNZWVnw9fXFpk2b8PXXX7+0XUdHB+bm5pUurrb5/uL3CLgbgINvH4SzibPY5RARAQCe5jzF2ktr8dOln5CRl4ExrmMwr+s8uJq5il0aEYAKXqaZMWMGBg0ahD59+pS6fefOnWjcuDFat26NBQsWICcnp1JF1ganH57Gp0GfYkH3BRjmMkzscoiI8Dj9MWYdmwW71XZYeWElfF19Ef1hNLaP2M4gQjWK0i0je/bswdWrVxEeHl7q9rFjx8LOzg6WlpaIiIjA/PnzERkZiYCAgFL3l8lkkMlkxY+lUqmyJYkuLiMOo/ePRi+HXljqtVTscoionruZchMrL67E7pu7YdjQEB97fIyZ7jPRWKex2KURlUqpMBIXF4dZs2bh5MmTaNiwYan7TJkypfhnV1dXWFhYoHfv3oiJiYGjo+NL+y9btgyLFy9Wsuyao1BRiLf2vwVtDW3s9tnNsfhEJJrzseex/PxyHIk6AhsDG/zvzf9hcvvJ7L9GNZ5EEAShvDsfPHgQI0aMgPq/7m8vl8shkUigpqYGmUxWYhsAZGdnQ09PD8ePH0e/fv1eOmZpLSM2NjbIyMiAgUHNnzp9TegazAmcgwuTLsDDxkPscoionlEIChy5fwTLLyzHxbiLaGXaCvO6zcOY1mM4KoZUSiqVwtDQsELf30q1jPTu3Rs3b94ssW7ixIlwcXHB/PnzXwoiAHD9+nUAgIWFRanH1NLSgpZW7byDbbw0Hl+c+QLTOk5jECEilSqQF2DXzV1YeXEl7jy5g2423fDX6L8wyHkQ7xtDtY5SYURfXx+tW7cusU5XVxcmJiZo3bo1YmJisGvXLgwcOBAmJiaIiIjAnDlz0LNnz1KHANd2s4/Php6mHr7t/a3YpRBRPZGWk4ZNVzfh5/CfES+Nx2Dnwdg4eCO623YXuzSiCqvSGVg1NTVx6tQprF69GtnZ2bCxsYGPjw+++OKLqnyZGuHI/SPwv+uP3T5FHcSIiKrT7dTb+DHsR2yP2A6FoMA4t3GY3WU2WjdpXfaTiWo4pfqMqEJlrjmpSk5BDlqtawVnE2cc9z3OyYKIqFooBAWORR3DmrA1OPngJCz0LDCj0wxM6TAFprqmYpdHVILK+oxQkaVnlyIpMwknx59kECGiKpeVn4Ut17fgx7AfEfUsCp0sO2Gn906MbDkSmuqaYpdHVOUYRpR0O/U2vg/5Hl/1/ApOxk5il0NEdcjD5w+x9tJa/HbtN2TlZ2Fky5HYOnwrulh34R8+VKcxjCjp06BP4WDkgHnd5oldChHVAYIg4NSDU1gbvhaHIg/BqKERpnWchumdpsPG0Ebs8ohUgmFECZcSLuHw/cPY6b0TWg1q53BkIqoZpDIptt3YhrWX1iIyLRJuZm74ZcgvGOs6Fjoa9ePmokQvMIwoYVHwIrRo3AJvt3pb7FKIqJa69/Qefr70M7bc2ILcglz4tPTBpiGbeOdcqtcYRsopJC4Ex6KPYY/PHk75TkRKkSvkOHz/MNaGr8WpB6fQRLcJ5nSZg/c7vA8rAyuxyyMSHcNIOS0+uxitTFthVKtRYpdCRLVEanYqtlzfgnXh6/A44zHcrdyxY8QOjGw5kpd6if6FYaQc7jy5g8CYQOwYsYPTLBPRaykEBU49OIVNVzfhz3t/QiKRYHTr0fig0wfoZNVJ7PKIaiSGkXJYF74OZrpmbBUholdKkCZg8/XN+O3ab3iU/gitTFvhu77fYZzbOJjomIhdHlGNxjBShpyCHGyP2I6ZnWdysiEiKqFQUYijUUex6eomHI06ioYNGuLtVm/Dr70f5wYhUgLDSBn87/hDKpNiUrtJYpdCRDXEw+cP8du137D5+mYkZiaig0UHrBu4DmNcx8BAq2bexoKoJmMYKcP2iO3wtPdE00ZNxS6FiESUL8/Hn/f+xKarm3DywUkYaBnA19UXfu390M6indjlEdVqDCOvkSnLRPCjYHz/5vdil0JEIol8GolNVzdh642teJrzFF1tumLzsM0Y1XIUdDV1xS6PqE5gGHmNoIdBKFAUYGCzgWKXQkQqlFuQi/139mPT1U04F3sOJtomeKfNO5jcbjJaNWkldnlEdQ7DyGscjToKZxNn3hCPqJ6ISInApiubsOPmDqTnpaOXQy/s9tmNES4jOC8IUTViGHkFQRBwNOooRrXkcF6iuux57nP8cfsP/H79d1xKuAQzXTNM7TAVk9tP5h8iRCrCMPIKKdkpSMhMQA+7HmKXQkTlJJcD584BSUmAhQXQowegXsrdG2SFMhyJOoIdETtwJOoIChWF6OfYDwFvBWCw82BoqGuovniieoxh5BVup94GALQy5fVhotogIACYNQuIj/9nnbU1sGYN4O1dNDPq+djz2BGxA/vu7EN6Xjo6WHTAij4rMLr1aJjrmYtXPFE9xzDyCrdSb0FLXQuOxo5il0JEZQgIAEaOBASh5PqEBGDkSAEjvtqFy0afITYjFnaGdpjRaQZ8XX3RwrSFOAUTUQkMI69w+8ltuDR2QQM1niKimkwuL2oR+W8QAV6sE3Bg9Rt4b+tAvNPOF11tuvIeU0Q1DL9pXyFeGg97I3uxyyCiMpw7V/LSzMvUIGRYY6zhenS3VVVVRKQM/nnwCjkFOdDT1BO7DCJ6jUJFIY5eu1aufZOSqrkYIqowtoy8Qk5BDrQbaItdBhH9hyAIuJx4GTsidmD3rd14crslgOAyn2dhUe2lEVEFMYy8Qm5hLnQ0dMQug4j+X1RaFPbc2oMdN3fgftp9mOuZY7zbeIwZMw4jggQkJEhK7TcikRSNqunBUfpENRbDyCuoS9RRoCgQuwyieksQBNx5cgf77+yH/11/3Ey9CV0NXXi38MbaAWvRy6EX1NWKJhFZs6ZoNI1EUrIjq0RS9O/q1aXPN0JENQPDyCtY6lsiITNB7DKI6hVBEHA9+XpxAIlMi4S+pj6GNB+CRZ6L0N+pf6ktlt7ewP79pc8zsnp10XYiqrkYRl7B2sAaV5Ouil0GUZ0nCAIuJVwqDiAP0x+iUcNGGOYyDN+/+T36Nu1brvvCeHsDw4aVbwZWIqpZGEZewUrfCn9F/iV2GUR1klwhx8W4i/C/6w//u/6Il8bDVMcUI1xGwKelD7zsvSo0Jbu6OuDpWfX1ElH1Yhh5BVczV6Rkp+Bx+mPYGdmJXQ5RrVeoKMTZR2fhf9cfAXcDkJKdAkt9S3i7eMOnpQ962PYo7gNCRPULw8greNl7QQIJgh4GYVK7SWKXQ1Qr5cvzEfQgCP53/XHw3kGk5abBztAOvq6+GNlyJNyt3TkbKhExjLxKI+1G6GjZEScfnGQYIVJCbkEuTsScgP9df/wV+RcyZBloZtwMfu394NPSBx0sOkDyYpgLEREYRl6rb9O+WH95PXILcqGtwQnQiF4lJSsFR6OO4nDUYZyIOYGs/Cy0Mm2FWe6zMLLlSLRu0poBhIheiWHkNSa2m4hl55dhR8QO+HXwE7scohrjxRDcw/cP43DUYVxKuAQJJPCw8cCC7gvg3cIbLo1dxC6TiGoJhpHXcDJ2wnCX4fgh9AdMaDMZF86rccgg1Vs5BTkIehBUHEASMxNhoGWA/k798UGnD9DfqT9MdU3FLpOIaiGGkTLM9ZiLHp/8AIuvZUhL/udSjbV10ayPnEyJ6rIHzx/gWNQxHI0+itMPTyOvMA/OJs4Y3Wo0BjsPRnfb7hUagktE9G8MI2VICe8G/NENaSh504uEhKLpp/fvZyChuiOvMA9nH53FsehjOBZ9DPfT7kNDTQPdbbvj217fYpDzIDibOItdJhHVMRJBKO3WUuKRSqUwNDRERkYGDAwMRK1FLgfs7YH4eAHAy53vXtyA6+FDXrKh2ivmWUxx+Djz8AxyC3NhY2CDAU4DMKDZAPR26A19LX2xyySiGq4y399sGXmNc+de3Oei9FEAggDExRXtx1kfqbbIlGXiXOw5BEYH4lj0MUQ9i4KGmgZ62PXAEq8lGOA0AC1NW3L0CxGpDMPIayQlVe1+RGLIKcjBxbiLOP3wNM48OoPwhHDIBTlsDW0xwGkAvuv7HXo59GLrBxGJhmHkNSwsqnY/IlWQFcoQGh+KM4/O4PTD0whLCEO+PB+mOqbwcvDChDYT4OXghWbGzdj6QUQ1QqXCyPLly7FgwQLMmjULq1evBgDk5eXho48+wp49eyCTydCvXz+sW7cOZmZmVVGvSvXoUdQnJCGh6JLMf0kkAqytJejRQ/W1Eb1QIC/A5cTLxS0fF+IuIK8wD40aNoKnvSe+7/s9ejn04qUXIqqxKhxGwsPDsXHjRri5uZVYP2fOHBw5cgT79u2DoaEhPvjgA3h7e+PChQuVLlbV1NWLhu+OHFnUWbVkIFFAEIBPl6ZAXd1crBKpHpIr5LiWfA1nHp7B6UencT72PLLys6CvqY837N/AN72+gZe9F9qYt+F9X4ioVqhQGMnKyoKvry82bdqEr7/+unh9RkYGfvvtN+zatQu9evUCAGzevBktWrRAaGgounTpUjVVq5C3d9Hw3VmzXnRmLWJhJQf6z8FXKXvQJvZPdLPtJl6RVKcpBAVuptzEmUdncObRGZx9dBYZsgzoaOigu213fN7jc/Ry6IX2Fu3RQI1XXomo9qnQb64ZM2Zg0KBB6NOnT4kwcuXKFRQUFKBPnz7F61xcXGBra4uQkJBaGUaAokAybFjRqJl/ZmDVQEb+EozYexO9tvXCij4r8KH7h/xLlCotpyAHVxKvIDQ+FCHxIfj78d9Iy02DlroWutp0xUceH8HLwQudrTpDU11T7HKJiCpN6TCyZ88eXL16FeHh4S9tS05OhqamJoyMjEqsNzMzQ3JycqnHk8lkkMlkxY+lUqmyJamEuvrLw3eNtY1xYtwJzDs5D3MC58D/rj9+H/o7mpk0E6VGqn0UggJRaVEISwhDaHwoQuNDEZESAbkgh66GLjpadsS0jtPQy6EXPGw80LBBQ7FLJiKqckqFkbi4OMyaNQsnT55Ew4ZV80tx2bJlWLx4cZUcSwxaDbSwZsAaeLfwxqS/JqHNhjb4utfX+KDzB/yrlV7yLPcZLiVcQlh8GEITQhEWH4bnec8BAC0at0AX6y6Y2nEq3K3c0apJK152IaJ6QakZWA8ePIgRI0ZA/V/TjcrlckgkEqipqSEwMBB9+vTB8+fPS7SO2NnZYfbs2ZgzZ85LxyytZcTGxqZGzMCqrOz8bCwIWoC1l9bC3sgeiz0XY6zrWKircXrW+qhQUYibKTcRGh9a3PIRmRYJADDRNoG7tTu6WHVBF+su6GTVCUYNjcQtmIioEiozA6tSYSQzMxOPHz8usW7ixIlwcXHB/PnzYWNjA1NTU+zevRs+Pj4AgMjISLi4uJS7z0hNmg6+om6n3saXZ77EgXsH0NK0JZZ6LcVwl+HsT1KHCYKAxMzE4tARlhCGy4mXkVOQgwZqDdDWvC26WHUpCiDWXeDYyJHDbImoTlFZGCmNp6cn2rZtWzzPyLRp03D06FFs2bIFBgYGmDlzJgDg4sWL5TpeXQgjL4QnhOPz05/j5IOTcGzkiKkdp2Ji24kw0TERuzSqhOz8bNx+chs3U27iZupNRKRE4GbqTTzNeQoAsDGwQRfrohYPdyt3tLdoD20N7TKOSkRUu9Woe9OsWrUKampq8PHxKTHpWX3UyaoTTow/gZC4EKy7vA6fn/4cX5z+Am+3fhvvd3gfHtYe/Ou4BpMr5Ih5HvNS6Ih5FgMBAtQkanAydoKbmRtmdp4JNzM3dLbqDEt9S7FLJyKqVXjXXhV6kv0Ev1/7HRuubMCj9EewNrCGt4s3fFr6oJtNN/YtEVFqdupLoeN26m3kFuYCAEx1TOFm5gY3Mze4NnGFq5krWpq2hI6GjsiVExHVDKJepqlqdTmMvCBXyHEu9hz87/gj4F4AEjMTYaZrhmHNh6F3097oYdsDFvp194Y3cvl/52wpGjpd3RSCAkmZSYh+Fo3oZ9G48+QOIlIjcDPlJlKyUwAADRs0RCvTVnA1c4VrE9fi8GGmV/tuZ0BEpEoMI7WYQlAgLD4M/nf98VfkX4h6FgUAcGzkiJ52PdHDtgd62PWoMx0eAwJens3W2rpo2n1v78ofX66QI14aXxw4op9FI/p50b8xz2KKWzokkMChkUOJwOFm5gYnYye2UBERVQDDSB2SnJWMc4/P4Vxs0XIj+QYECLDQs0APux7oYtUFLo1d0Lxxc9gZ2tWqL86AgKL7/Pz3E/ciY+3fX3YgkSvkSMhMwKP0R6UucdI4FCoKAQDqEnXYG9nD0dgRTo2c4GT8z+LQyIETiBERVSGGkTosPS8dF+Mu4tzjc/g79m9cTbqKvMI8AICWuhacjJ3gbOKM5ibN4dDIAXaGdrA1tIWtoS10NXVFrv4fcjlgb1+yReTfJBIBTSzysSkoCM/ynuBJzhM8yf7/f3OeIDU7FanZqYiXxheHDQBootsE9kb2RYuhffHPzUyawc7QDhrqGqp5g0RE9RzDSD2iEBSIy4hDZFokIp9GIjItEvfT7iMyLRLx0ngoBEXxvibaJrA1tIWNoQ2MGhpBT0MPupq60NPUK3PR1SjaT1NdExKJBIWKQuTL85VaZIUy5MvzkVuYi9DzDbHpw7Flv8F3PQGHs9DX1Ieprima6DaBqY5p0aJrCjtDu+LAYWdkxw6kREQ1RI0a2kvVS02iBjsjO9gZ2eFNxzdLbCuQFyAxMxGxGbF4nPEYsRmxiM2IRZw0Dg+eP0BWflaJJTs/GwJen0XVJeoQIJQIORWhc28ygLLDyE89/eH3jh60GmhV6vWIiKj2YBipQzTUNYqDSg/0KHN/QRCQW5j7Ukj5b2BRV1OHprpmmYuWulbp6xto4fzfDeC1p+z30LqpCbT4qSQiqlf4a78ek0gk0NHQgY6GDproNqnW1+rRo2jUTELCyx1Yi2op2t6j7AxFRER1DG+WQiqhrl40fBf4Z/TMCy8er16tmvlGiIioZmEYIZXx9i4avmtlVXK9tXX5hvUSEVHdxMs0pFLe3sCwYeLMwEpERDUTwwipnLo64OkpdhVERFRT8DINERERiYphhIiIiETFMEJERESiYhghIiIiUTGMEBERkagYRoiIiEhUDCNEREQkKoYRIiIiEhXDCBEREYmKYYSIiIhExTBCREREomIYISIiIlExjBAREZGoGEaIiIhIVAwjREREJCqGESIiIhIVwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiISFcMIERERiYphhIiIiETFMEJERESiYhghIiIiUTGMEBERkaiUCiPr16+Hm5sbDAwMYGBgAA8PDxw7dqx4u6enJyQSSYll6tSpVV40ERER1R0NlNnZ2toay5cvR7NmzSAIArZu3Yphw4bh2rVraNWqFQDAz88PS5YsKX6Ojo5O1VZMREREdYpSYWTIkCElHn/zzTdYv349QkNDi8OIjo4OzM3Nq65CIiIiqtMq3GdELpdjz549yM7OhoeHR/H6nTt3onHjxmjdujUWLFiAnJyc1x5HJpNBKpWWWIiIiKj+UKplBABu3rwJDw8P5OXlQU9PDwcOHEDLli0BAGPHjoWdnR0sLS0RERGB+fPnIzIyEgEBAa883rJly7B48eKKvwMiIiKq1SSCIAjKPCE/Px+xsbHIyMjA/v378euvv+Ls2bPFgeTfTp8+jd69eyM6OhqOjo6lHk8mk0EmkxU/lkqlsLGxQUZGBgwMDJR8O0RERCQGqVQKQ0PDCn1/Kx1G/qtPnz5wdHTExo0bX9qWnZ0NPT09HD9+HP369SvX8SrzZoiIiEgclfn+rvQ8IwqFokTLxr9dv34dAGBhYVHZlyEiIqI6Sqk+IwsWLMCAAQNga2uLzMxM7Nq1C8HBwQgMDERMTAx27dqFgQMHwsTEBBEREZgzZw569uwJNze36qqfiIiIajmlwkhqaireeecdJCUlwdDQEG5ubggMDETfvn0RFxeHU6dOYfXq1cjOzoaNjQ18fHzwxRdfVFftREREVAdUus9IVWOfESIiotpH1D4jRERERJXBMEJERESiYhghIiIiUTGMEBERkagYRoiIiEhUDCNEREQkKoYRIiIiEhXDCBEREYmKYYSIiIhExTBCREREomIYISIiIlExjBAREZGoGEaIiIhIVAwjREREJCqGESIiIhIVwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiISVQOxC/gvQRAAAFKpVORKiIiIqLxefG+/+B5XRo0LI5mZmQAAGxsbkSshIiIiZWVmZsLQ0FCp50iEikSYaqRQKJCYmAh9fX1IJBKxyyk3qVQKGxsbxMXFwcDAQOxyaiSeo/LheSobz1H58DyVjeeofMpzngRBQGZmJiwtLaGmplwvkBrXMqKmpgZra2uxy6gwAwMDfqDLwHNUPjxPZeM5Kh+ep7LxHJVPWedJ2RaRF9iBlYiIiETFMEJERESiYhipIlpaWli4cCG0tLTELqXG4jkqH56nsvEclQ/PU9l4jsqnus9TjevASkRERPULW0aIiIhIVAwjREREJCqGESIiIhIVwwgRERGJimFECXK5HF9++SUcHBygra0NR0dHLF26tMQ8/BMmTIBEIimx9O/fX8SqVS8zMxOzZ8+GnZ0dtLW10bVrV4SHhxdvFwQBX331FSwsLKCtrY0+ffogKipKxIrFUdZ5qo+fpb///htDhgyBpaUlJBIJDh48WGJ7eT47z549g6+vLwwMDGBkZITJkycjKytLhe+ielXFObK3t3/ps7V8+XIVvovqV9Z5CggIwJtvvgkTExNIJBJcv379pWPk5eVhxowZMDExgZ6eHnx8fJCSkqKaN6ACVXGOPD09X/osTZ06VelaGEaUsGLFCqxfvx5r167F3bt3sWLFCqxcuRI//fRTif369++PpKSk4mX37t0iVSyO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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "angles = linspace(0, 2 * pi, 9, endpoint=False)\n", "pty = 50 + 10 * cos(angles) + 5 * sin(angles)\n", "ptx = 100 + 5 * cos(angles) + 15 * sin(angles)\n", "ellipse = fit_ellipse(pty, ptx)\n", "print(ellipse)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2768454/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Points from real peaking\n", "from numpy import array\n", "pty = array([0.06599215, 0.06105629, 0.06963708, 0.06900191, 0.06496001, 0.06352082, 0.05923421, 0.07080027, 0.07276284, 0.07170048])\n", "ptx = array([0.05836343, 0.05866434, 0.05883284, 0.05872581, 0.05823667, 0.05839846, 0.0591999, 0.05907079, 0.05945377, 0.05909428])\n", "try:\n", " ellipse = fit_ellipse(pty, ptx)\n", "except Exception as e:\n", " ellipse = None\n", " print(e)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse can't be fitted: singular matrix\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2768454/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "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gFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAY5VjYqKmRwmGntg4AADqKY2Hj1lulnBypstKpCgAAQEdoV9h45plnlJOTox49emjs2LF6++2327Xxujpp+nQCBwAAXZntsPHiiy9q/vz5Wrhwofbt26dRo0bphz/8oU6fPm1745YVeS0r45QKAABdlcuyLuzy22bs2LG6/vrrtWzZMklSY2OjMjMz9Ytf/EILFixoNj4UCikUCjV9DgQCysrKkuSXlNbUv3mzlJfXvh8BAADMCgaDyszM1NmzZ+XxeOwtbNkQCoUst9ttbdy4Mar/zjvvtH70ox+1uMzChQstSTQajUaj0bpAO3bsmJ3oYFmWZXWXDf/+978VDofVv3//qP7+/fvrgw8+aHGZ8vJyzZ8/v+nz2bNnlZ2drRMnTthPRp3chdTn9/uVlpb27QskEH5bYuK3JSZ+W2Lqyr9N+urMRO/evW0vaytstEdycrKSk5Ob9Xs8ni75jyFJaWlp/LYExG9LTPy2xMRvS1zdutm/tsTWEt/5znfkdrv1ySefRPV/8sknGjBggO2NAwCArs9W2EhKStJ1112nbdu2NfU1NjZq27ZtGjduXNyLAwAAic/2aZT58+erqKhIY8aM0Q033KAlS5aooaFBc+bMadPyycnJWrhwYYunVhIdvy0x8dsSE78tMfHbElcsv8/2pa+StGzZMj355JM6deqUvve97+n3v/+9xo4da3vjAACg62tX2AAAAGgrnvoKAACMImwAAACjCBsAAMAowgYAADCqQ8NGvB5N39ns3LlTU6dOVXp6ulwulzZt2uR0SXFRUVGh66+/XqmpqerXr59uu+02HTp0yOmy4mb58uUaOXJk093+xo0bpy1btjhdVtwtXrxYLpdLZWVlTpcSF4888ohcLldUy83NdbqsuKmrq9Mdd9yhPn36KCUlRddcc4327NnjdFkxy8nJafbv5nK5VFJS4nRpMQuHw3r44Yc1aNAgpaSkaMiQIXrsscfUVa6/OHfunMrKypSdna2UlBSNHz9etbW1ttbRYWEjno+m72waGho0atQoPfPMM06XElc7duxQSUmJdu/ererqan3xxReaPHmyGhoanC4tLjIyMrR48WLt3btXe/bs0c0336xp06bp3Xffdbq0uKmtrdWKFSs0cuRIp0uJq+HDh6u+vr6p7dq1y+mS4uLMmTOaMGGCLrvsMm3ZskXvvfeefve736lXr15Olxaz2traqH+z6upqSdKMGTMcrix2TzzxhJYvX65ly5bp/fff1xNPPKHf/OY3evrpp50uLS7uueceVVdXa82aNTpw4IAmT56sSZMmqa6uru0rsf3otna64YYbrJKSkqbP4XDYSk9PtyoqKjqqhA4hqdlTcbuK06dPW5KsHTt2OF2KMb169bL++Mc/Ol1GXJw7d8668sorrerqauumm26ySktLnS4pLhYuXGiNGjXK6TKMePDBB60bb7zR6TI6RGlpqTVkyBCrsbHR6VJiNmXKFKu4uDiqz+fzWYWFhQ5VFD+ffvqp5Xa7rc2bN0f1jx492nrooYfavJ4OObLx+eefa+/evZo0aVJTX7du3TRp0iS99dZbHVEC4iAQCEhSu57419mFw2GtX79eDQ0NXebW+yUlJZoyZUrU/3ddxZEjR5Senq7BgwersLBQJ06ccLqkuHjllVc0ZswYzZgxQ/369dO1116rZ5991umy4u7zzz/X2rVrVVxcLJfL5XQ5MRs/fry2bdumw4cPS5Leeecd7dq1SwUFBQ5XFrsvv/xS4XBYPXr0iOpPSUmxdUTR+FNfpfY9mh6dS2Njo8rKyjRhwgSNGDHC6XLi5sCBAxo3bpz+97//6fLLL9fGjRt19dVXO11WzNavX699+/bZPq+aCMaOHavnn39ew4YNU319vR599FHl5eXp4MGDSk1Ndbq8mHz44Ydavny55s+fr1/+8peqra3VvHnzlJSUpKKiIqfLi5tNmzbp7Nmzuuuuu5wuJS4WLFigYDCo3Nxcud1uhcNhLVq0SIWFhU6XFrPU1FSNGzdOjz32mK666ir1799ff/rTn/TWW2/pu9/9bpvX0yFhA4mvpKREBw8e7DLnxi8YNmyY9u/fr0AgoA0bNqioqEg7duxI6MDh9/tVWlqq6urqZn+NdAVf/2tx5MiRGjt2rLKzs/XSSy/p7rvvdrCy2DU2NmrMmDF6/PHHJUnXXnutDh48qD/84Q9dKmw899xzKigoUHp6utOlxMVLL72kF154QevWrdPw4cO1f/9+lZWVKT09vUv8u61Zs0bFxcUaOHCg3G63Ro8erVmzZmnv3r1tXkeHhA0eTZ/Y5s6dq82bN2vnzp3KyMhwupy4SkpKakrn1113nWpra7V06VKtWLHC4crab+/evTp9+rRGjx7d1BcOh7Vz504tW7ZMoVBIbrfbwQrj64orrtDQoUN19OhRp0uJmdfrbRZ0r7rqKv35z392qKL4+/jjj7V161ZVVlY6XUrcPPDAA1qwYIF++tOfSpKuueYaffzxx6qoqOgSYWPIkCHasWOHGhoaFAwG5fV6NXPmTA0ePLjN6+iQORs8mj4xWZaluXPnauPGjXr99dc1aNAgp0syrrGxUaFQyOkyYnLLLbfowIED2r9/f1MbM2aMCgsLtX///i4VNCTp/PnzOnbsmLxer9OlxGzChAnNLi8/fPiwsrOzHaoo/latWqV+/fppypQpTpcSN59++qm6dYvenbrdbjU2NjpUkRk9e/aU1+vVmTNnVFVVpWnTprV52Q47jRLro+k7s/Pnz0f9VXX8+HHt379fvXv3VlZWloOVxaakpETr1q3Tyy+/rNTUVJ06dUqS5PF4lJKS4nB1sSsvL1dBQYGysrJ07tw5rVu3Ttu3b1dVVZXTpcUkNTW12byanj17qk+fPl1ivs3999+vqVOnKjs7W//85z+1cOFCud1uzZo1y+nSYnbfffdp/Pjxevzxx/WTn/xEb7/9tlauXKmVK1c6XVpcNDY2atWqVSoqKlL37l3nLP7UqVO1aNEiZWVlafjw4frHP/6hp556SsXFxU6XFhdVVVWyLEvDhg3T0aNH9cADDyg3N9fe/ju+F8lc3NNPP21lZWVZSUlJ1g033GDt3r27IzdvzBtvvGFJataKioqcLi0mLf0mSdaqVaucLi0uiouLrezsbCspKcnq27evdcstt1h//etfnS7LiK506evMmTMtr9drJSUlWQMHDrRmzpxpHT161Omy4uYvf/mLNWLECCs5OdnKzc21Vq5c6XRJcVNVVWVJsg4dOuR0KXEVDAat0tJSKysry+rRo4c1ePBg66GHHrJCoZDTpcXFiy++aA0ePNhKSkqyBgwYYJWUlFhnz561tQ4eMQ8AAIzi2SgAAMAowgYAADCKsAEAAIwibAAAAKMIGwAAwCjCBgAAMIqwAQAAjCJsAAAAowgbAADAKMIGAAAwirABAACM+j9APbcyy+kwKQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Line\n", "from numpy import arange\n", "pty = arange(10)\n", "ptx = arange(10)\n", "try:\n", " ellipse = fit_ellipse(pty, ptx)\n", "except Exception as e:\n", " ellipse = None\n", " print(e)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "Within pyFAI's calibration process, the parameters of the ellipse are used in first instance as input guess for starting the fit procedure, which uses *slsqp* from scipy.optimize." ] } ], "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.10.12" } }, "nbformat": 4, "nbformat_minor": 4 }