{ "cells": [ { "cell_type": "markdown", "metadata": { "editable": true, "slideshow": { "slide_type": "" }, "tags": [] }, "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": [ "The history saving thread hit an unexpected error (OperationalError('database is locked')).History will not be written to the database.\n", "Ellipse(center_1=np.float64(1.3518344235731752), center_2=np.float64(2.175430327171707), angle=2.9759228950631575, half_long_axis=1.2931588150135165, half_short_axis=0.6351407156576673)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2827619/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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wN/+9je0bdsWixcvhpeXF5YsWWJwH5VKhUaNGpVfgoODq9VoIiIichxmhZGSkhIcPnwYDz300N0HcHLCQw89hP379xvcLz8/H02bNoVarcbQoUNx8uRJo89TXFyM3NzcShciIiJyTGaFkRs3bkCj0dzTsxEcHIyMjAy9+0RERGDJkiXYtGkTVqxYAa1Wi169euHq1asGn2fu3Lnw9fUtv6jVanOaSURERHbE5rNpevbsiTFjxqBTp07o168fYmNjERgYiC+//NLgPjNmzEBOTk755cqVK7ZuJhERESnExZyNGzZsCGdnZ2RmZla6PTMzE40aNZL1GK6urujcuTNSUlIMbuPu7g53d3dzmkZERER2yqyeETc3N3Tp0gXx8fHlt2m1WsTHx6Nnz56yHkOj0SApKQkhISHmtZSIiIgcklk9IwAwbdo0jB07Fl27dkW3bt2wcOFCFBQU4G9/+xsAYMyYMQgNDcXcuXMBAO+++y569OiBFi1a4Pbt2/joo49w6dIljB8/3rq/CREREdkls8PIs88+i+vXr+Odd95BRkYGOnXqhK1bt5YPar18+TKcnO52uNy6dQsTJkxARkYG/Pz80KVLF/z2229o27at9X4LIiIislsqIYRQuhGm5ObmwtfXFzk5OfDx8VG6OURERCSD3M9vrk1DREREimIYISIiIkUxjBAREZGiGEaIiIhIUQwjREREpCiGESIiIlIUwwgREREpimGEiIiIFMUwQkRERIpiGCEiIiJFMYwQERGRohhGiIiISFEMI0RERKQohhEiIiJSFMMIERERKYphhIiIiBTFMEJERESKYhghIiIiRTGMEBERkaIYRoiIiEhRDCNERESkKIYRIiIiUhTDCBERESmKYYSIiIgUxTBCREREimIYISIiIkUxjBAREZGiGEaIiIhIUQwjREREpCiGESIiIlIUwwgREREpimGEiIiIFMUwQkRERIpiGCEiIiJFMYwQERGRohhGiIiISFEMI0RERKQohhEiIiJSFMMIERERKYphhIiIiBTFMEJERESKYhghIiIiRTGMEBERkaIYRoiIiEhRDCNERESkKIYRIiIiUhTDCBERESmKYYSIiIgUxTBCREREimIYISIiIkUxjBAREZGiGEaIiIhIUQwjREREpCiGESIiIlIUwwgREREpykXpBsghhAAA5ObmKtwSIiIikkv3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", "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.000000000332909), center_2=np.float64(10.000000000325038), angle=2.3689992424085746, half_long_axis=19.999999999804693, half_short_axis=19.999999999532037)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2827619/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(50.000000000000576), center_2=np.float64(100.0000000000018), angle=3.141592653589068, half_long_axis=19.999999999994646, half_short_axis=10.000000000002697)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2827619/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(-5.030642569181509e-12), center_2=np.float64(-8.540723683836404e-12), angle=1.6532775148903056e-11, half_long_axis=19.999999999815742, half_short_axis=10.00000000009243)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2827619/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": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAGiCAYAAAASgEe5AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+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.00000000000121), center_2=np.float64(100.00000000000088), angle=0.5535743588955828, half_long_axis=18.09016994372895, half_short_axis=6.909830056258535)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_2827619/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": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+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//v3qaelVyaUQV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nz5wdHTExo0bX9qWnZ0NPT09HD9+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_2827619/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_2827619/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": "iVBORw0KGgoAAAANSUhEUgAAAhsAAAGiCAYAAABOCgSdAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIptJREFUeJzt3X9wFPX9x/HXcZiQweQEyo8L+QVUiIJQEWUAU4lSOhmk6BVKIY6RaGfqhJLI6EjqWHQsBmvrQMWhYB1kQIoODWhxMA0oEKrUAMUBf/BLlCMN0h9wB9GeetnvH/cleibBbO4+2Vx4PmY+c3ef++zu+wadfWX3s7suy7IsAQAAGNLN6QIAAEDXRtgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARtkOG+fOnVNZWZmys7OVkpKi8ePHq7a21kRtAACgC7AdNu655x5VV1drzZo1OnDggCZPnqxJkyaprq7ORH0AACDBuew8iO2zzz5TamqqXn75ZU2ZMqWp/7rrrlNBQYF+/etfGykSAAAkru52Bn/55ZcKh8Pq0aNHVH9KSop27drV4jKhUEihUKjpc2Njo/773/+qT58+crlc7SgZAAB0NMuydO7cOaWnp6tbN5snRiybxo0bZ910001WXV2d9eWXX1pr1qyxunXrZg0dOrTF8QsXLrQk0Wg0Go1G6wLN7/fbjQ6WrdMoknTs2DEVFxdr586dcrvdGj16tIYOHaq9e/fq/fffbzb+m0c2AoGAsrKy5Pf7lZaWZmfTAACgg9TUSLfe+vWeoKRMnT17Vh6Px9a6bIeNCxoaGhQMBuX1ejVz5kydP39er7766rcuFwwG5fF4FAgECBsAAHRS4bCUkyPV1UmRpBCU1L79d7vvs9GzZ095vV6dOXNGVVVVmjZtWntXBQAAOhm3W1q6NPI+1imWtsNGVVWVXnvtNR0/flzV1dXKz89Xbm6u5syZE1slAACgU/H5pA0bpIEDY1uP7bARCARUUlKi3Nxc3XnnnbrxxhtVVVWlyy67LLZKAABAp+PzSR99JG3e3P51tHvORnsxZwMAgMQTy/6bZ6MAAACjCBsAAMAowgYAADCKsAEAAIwibAAAAKMIGwAAwCjCBgAAMIqwAQAAjCJsAAAAowgbAADAKMIGAAAwirABAACMImwAAACjCBsAAMAowgYAADCKsAEAAIwibAAAAKMIGwAAwCjCBgAAMIqwAQAAjCJsAAAAowgbAADAKMIGAAAwirABAACMImwAAACjCBsAAMAowgYAADCKsAEAAIwibAAAAKO6O10AAACJLhyWamqk+nrJ65Xy8iS32+mqOg9bRzbC4bAefvhhDRo0SCkpKRoyZIgee+wxWZZlqj4AADq1ykopJ0fKz5dmz4685uRE+hFh68jGE088oeXLl2v16tUaPny49uzZozlz5sjj8WjevHmmagQAoFOqrJSmT5e++Td3XV2kf8MGyedzprbOxGXZOCxx6623qn///nruueea+n784x8rJSVFa9eubdM6gsGgPB6PAoGA0tLS7FcMAEAnEA5HjmCcPNny9y6XlJEhHT/eNU6pxLL/tnUaZfz48dq2bZsOHz4sSXrnnXe0a9cuFRQUtLpMKBRSMBiMagAAJLqamtaDhhQ52uH3R8Zd6mydRlmwYIGCwaByc3PldrsVDoe1aNEiFRYWtrpMRUWFHn300ZgLBQCgM6mvj++4rszWkY2XXnpJL7zwgtatW6d9+/Zp9erV+u1vf6vVq1e3ukx5ebkCgUBT8/v9MRcNAIDTvN74juvKbM3ZyMzM1IIFC1RSUtLU9+tf/1pr167VBx980KZ1MGcDANAVXJizUVfXfIKoxJyNr7N1ZOPTTz9Vt27Ri7jdbjU2NtraKAAAic7tlpYujbx3uaK/u/B5yZKuETRiZStsTJ06VYsWLdKrr76qjz76SBs3btRTTz2l22+/3VR9AAB0Wj5f5PLWgQOj+zMyuOz162ydRjl37pwefvhhbdy4UadPn1Z6erpmzZqlX/3qV0pKSmrTOjiNAgDoai6FO4jGsv+2FTbigbABAEDi6bA5GwAAAHYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARnV3ugAAwKUhHJZqaqT6esnrlfLyJLfb6arQEWwd2cjJyZHL5WrWSkpKTNUHAOgCKiulnBwpP1+aPTvympMT6UfXZyts1NbWqr6+vqlVV1dLkmbMmGGkOABA4quslKZPl06ejO6vq4v0Ezi6Pltho2/fvhowYEBT27x5s4YMGaKbbrrJVH0AgAQWDkulpZJlNf/uQl9ZWWQcuq52TxD9/PPPtXbtWhUXF8vlcrU6LhQKKRgMRjUAwKWhpqb5EY2vsyzJ74+MQ9fV7rCxadMmnT17VnfddddFx1VUVMjj8TS1zMzM9m4SAJBg6uvjOw6Jqd1h47nnnlNBQYHS09MvOq68vFyBQKCp+f3+9m4SAJBgvN74jkNiatelrx9//LG2bt2qyjbM6klOTlZycnJ7NgMASHB5eVJGRmQyaEvzNlyuyPd5eR1fGzpOu45srFq1Sv369dOUKVPiXQ8AoAtxu6WlSyPvvzm978LnJUu430ZXZztsNDY2atWqVSoqKlL37twTDABwcT6ftGGDNHBgdH9GRqTf53OmLnQc22lh69atOnHihIqLi03UAwDognw+ado07iB6qbIdNiZPniyrpRNvAABchNstTZzodBVwAg9iAwAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGdXe6AADAV8JhqaZGqq+XvF4pL09yu52uCoiN7SMbdXV1uuOOO9SnTx+lpKTommuu0Z49e0zUBgCXlMpKKSdHys+XZs+OvObkRPqBRGbryMaZM2c0YcIE5efna8uWLerbt6+OHDmiXr16maoPAC4JlZXS9OmSZUX319VF+jdskHw+Z2oDYuWyrG/+p926BQsW6G9/+5tqamravcFgMCiPx6NAIKC0tLR2rwcAuopwOHIE4+TJlr93uaSMDOn4cU6pwDmx7L9tnUZ55ZVXNGbMGM2YMUP9+vXTtddeq2efffaiy4RCIQWDwagGAPhKTU3rQUOKHO3w+yPjgERkK2x8+OGHWr58ua688kpVVVXp3nvv1bx587R69epWl6moqJDH42lqmZmZMRcNAF1JfX18xwGdja3TKElJSRozZozefPPNpr558+aptrZWb731VovLhEIhhUKhps/BYFCZmZmcRgGA/7d9e2Qy6Ld54w1p4kTT1QAt67DTKF6vV1dffXVU31VXXaUTJ060ukxycrLS0tKiGgDgK3l5kTkZLlfL37tcUmZmZByQiGyFjQkTJujQoUNRfYcPH1Z2dnZciwKAS4nbLS1dGnn/zcBx4fOSJUwOReKyFTbuu+8+7d69W48//riOHj2qdevWaeXKlSopKTFVHwBcEny+yOWtAwdG92dkcNkrEp+tORuStHnzZpWXl+vIkSMaNGiQ5s+fr5/97GdtXp5LXwGgddxBFJ1VLPtv22EjVoQNAAAST4dNEAUAALCLsAEAAIwibAAAAKMIGwAAwCjCBgAAMIqwAQAAjCJsAAAAowgbAADAKMIGAAAwirABAACMImwAAACjCBsAAMAowgYAADCKsAEAAIwibAAAAKMIGwAAwCjCBgAAMIqwAQAAjCJsAAAAowgbAADAKMIGAAAwirABAACMImwAAACjCBsAAMAowgYAADCKsAEAAIwibAAAAKMIGwAAwCjCBgAAMKq70wUAgF3hsFRTI9XXS16vlJcnud1OVwWgNbaObDzyyCNyuVxRLTc311RtANBMZaWUkyPl50uzZ0dec3Ii/QA6J9tHNoYPH66tW7d+tYLuHBwB0DEqK6Xp0yXLiu6vq4v0b9gg+XzO1AagdbaTQvfu3TVgwAATtQBAq8JhqbS0edCQIn0ul1RWJk2bxikVoLOxPUH0yJEjSk9P1+DBg1VYWKgTJ05cdHwoFFIwGIxqAGBXTY108mTr31uW5PdHxgHoXGyFjbFjx+r555/Xa6+9puXLl+v48ePKy8vTuXPnWl2moqJCHo+nqWVmZsZcNIBLT319fMcB6Dguy2rpoGTbnD17VtnZ2Xrqqad09913tzgmFAopFAo1fQ4Gg8rMzFQgEFBaWlp7Nw3gErN9e2Qy6Ld54w1p4kTT1QCXnmAwKI/H0679d0yzO6+44goNHTpUR48ebXVMcnKykpOTY9kMACgvT8rIiEwGbelPJJcr8n1eXsfXBuDiYrqp1/nz53Xs2DF5vd541QMALXK7paVLI+9drujvLnxesoTJoUBnZCts3H///dqxY4c++ugjvfnmm7r99tvldrs1a9YsU/UBQBOfL3J568CB0f0ZGVz2CnRmtk6jnDx5UrNmzdJ//vMf9e3bVzfeeKN2796tvn37mqoPAKL4fJHLW7mDKJA4Ypog2h6xTDABAADOiGX/zYPYAACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBR3Z0uAIAZ4bBUUyPV10ter5SXJ7ndTlcF4FIU05GNxYsXy+VyqaysLE7lAIiHykopJ0fKz5dmz4685uRE+gGgo7U7bNTW1mrFihUaOXJkPOsBEKPKSmn6dOnkyej+urpIP4EDQEdrV9g4f/68CgsL9eyzz6pXr17xrglAO4XDUmmpZFnNv7vQV1YWGQcAHaVdYaOkpERTpkzRpEmTvnVsKBRSMBiMagDMqKlpfkTj6yxL8vsj4wCgo9ieILp+/Xrt27dPtbW1bRpfUVGhRx991HZhAOyrr4/vOACIB1tHNvx+v0pLS/XCCy+oR48ebVqmvLxcgUCgqfn9/nYVCuDbeb3xHQcA8eCyrJbO7rZs06ZNuv322+X+2vVz4XBYLpdL3bp1UygUivquJcFgUB6PR4FAQGlpae2vHEAz4XDkqpO6upbnbbhcUkaGdPw4l8ECsCeW/bet0yi33HKLDhw4ENU3Z84c5ebm6sEHH/zWoAHALLdbWro0ctWJyxUdOFyuyOuSJQQNAB3LVthITU3ViBEjovp69uypPn36NOsH4AyfT9qwIXJVytcni2ZkRIKGz+dYaQAuUdxBFOiCfD5p2jTuIAqgc4g5bGzfvj0OZQCIN7dbmjjR6SoAgAexAQAAwwgbAADAKMIGAAAwirABAACMImwAAACjCBsAAMAowgYAADCKsAEAAIwibAAAAKMIGwAAwCjCBgAAMIqwAQAAjCJsAAAAowgbAADAKMIGAAAwirABAACMImwAAACjCBsAAMAowgYAADCKsAEAAIwibAAAAKMIGwAAwCjCBgAAMIqwAQAAjCJsAAAAowgbAADAKMIGAAAwirABAACMImwAAACjujtdAOCkcFiqqZHq6yWvV8rLk9xup6sCgK7F1pGN5cuXa+TIkUpLS1NaWprGjRunLVu2mKoNMKqyUsrJkfLzpdmzI685OZF+AED82AobGRkZWrx4sfbu3as9e/bo5ptv1rRp0/Tuu++aqg8worJSmj5dOnkyur+uLtJP4ACA+HFZlmXFsoLevXvrySef1N13392m8cFgUB6PR4FAQGlpabFsGmiXcDhyBOObQeMCl0vKyJCOH+eUCgBcEMv+u90TRMPhsNavX6+GhgaNGzeu1XGhUEjBYDCqAU6qqWk9aEiSZUl+f2QcACB2tsPGgQMHdPnllys5OVk///nPtXHjRl199dWtjq+oqJDH42lqmZmZMRUMxKq+Pr7jAAAXZztsDBs2TPv379ff//533XvvvSoqKtJ7773X6vjy8nIFAoGm5vf7YyoYiJXXG99xAICLi3nOxqRJkzRkyBCtWLGiTeOZswGnXZizUVcXOWXyTczZAIDmHJmzcUFjY6NCoVCsqwE6jNstLV0aee9yRX934fOSJQQNAIgXW2GjvLxcO3fu1EcffaQDBw6ovLxc27dvV2Fhoan6ACN8PmnDBmngwOj+jIxIv8/nTF0A0BXZuoPo6dOndeedd6q+vl4ej0cjR45UVVWVfvCDH5iqDzDG55OmTeMOogBgWsxzNuxizgYAAInH0TkbAAAAF0PYAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAY1d3pAtD5hcNSTY1UXy95vVJenuR2O10VACBR2DqyUVFRoeuvv16pqanq16+fbrvtNh06dMhUbegEKiulnBwpP1+aPTvympMT6QcAoC1shY0dO3aopKREu3fvVnV1tb744gtNnjxZDQ0NpuqDgyorpenTpZMno/vr6iL9BA4AQFu4LMuy2rvwv/71L/Xr1087duzQ97///TYtEwwG5fF4FAgElJaW1t5Nw7BwOHIE45tB4wKXS8rIkI4f55QKAFwKYtl/xzRBNBAISJJ69+7d6phQKKRgMBjV0PnV1LQeNCTJsiS/PzIOAICLaXfYaGxsVFlZmSZMmKARI0a0Oq6iokIej6epZWZmtneT6ED19fEdBwC4dLU7bJSUlOjgwYNav379RceVl5crEAg0Nb/f395NogN5vfEdBwC4dLXr0te5c+dq8+bN2rlzpzIyMi46Njk5WcnJye0qDs7Jy4vMyairi5wy+aYLczby8jq+NgBAYrF1ZMOyLM2dO1cbN27U66+/rkGDBpmqCw5zu6WlSyPvXa7o7y58XrKEyaEAgG9nK2yUlJRo7dq1WrdunVJTU3Xq1CmdOnVKn332man64CCfT9qwQRo4MLo/IyPS7/M5UxcAILHYuvTV9c0/cf/fqlWrdNddd7VpHVz6mni4gygAIJb9t605GzHckgMJzO2WJk50ugoAQKLiQWwAAMAowgYAADCKsAEAAIwibAAAAKMIGwAAwCjCBgAAMIqwAQAAjCJsAAAAowgbAADAKMIGAAAwirABAACMImwAAACjCBsAAMAowgYAADCKsAEAAIwibAAAAKMIGwAAwCjCBgAAMIqwAQAAjCJsAAAAowgbAADAKMIGAAAwirABAACMImwAAACjCBsAAMAowgYAADCKsAEAAIwibAAAAKMIGwAAwKjuThfQVYTDUk2NVF8veb1SXp7kdjtdFQAAziNsxEFlpVRaKp08+VVfRoa0dKnk8zlXFwAAnYHt0yg7d+7U1KlTlZ6eLpfLpU2bNhkoK3FUVkrTp0cHDUmqq4v0V1Y6UxcAAJ2F7bDR0NCgUaNG6ZlnnjFRT0IJhyNHNCyr+XcX+srKIuMAALhU2T6NUlBQoIKCgjaPD4VCCoVCTZ+DwaDdTXZaNTXNj2h8nWVJfn9k3MSJHVYWAACdivGrUSoqKuTxeJpaZmam6U12mPr6+I4DAKArMh42ysvLFQgEmprf7ze9yQ7j9cZ3HAAAXZHxq1GSk5OVnJxsejOOyMuLXHVSV9fyvA2XK/J9Xl7H1wYAQGfBTb1i4HZHLm+VIsHi6y58XrKE+20AAC5thI0Y+XzShg3SwIHR/RkZkX7uswEAuNTZPo1y/vx5HT16tOnz8ePHtX//fvXu3VtZWVlxLS5R+HzStGncQRQAgJa4LKul2Qat2759u/Lz85v1FxUV6fnnn//W5YPBoDwejwKBgNLS0uxsGgAAOCSW/bftIxsTJ06UzXwCAAAuYczZAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAYRdgAAABGETYAAIBRhA0AAGAUYQMAABhF2AAAAEYRNgAAgFGEDQAAYBRhAwAAGEXYAAAARhE2AACAUYQNAABgFGEDAAAY5VjYqKmRwmGntg4AADqKY2Hj1lulnBypstKpCgAAQEdoV9h45plnlJOTox49emjs2LF6++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/e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", "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.11.2" } }, "nbformat": 4, "nbformat_minor": 4 }