{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Extracting ellipse parmeters from rings\n", "\n", "During a powder diffraction experiment, the scattering occures 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 patern 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.3289093591009165), center_2=np.float64(2.193729937946624), angle=2.9760644265625085, half_long_axis=1.3054421036825834, half_short_axis=0.6455514224353401)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_4049806/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": [ "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_4049806/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_4049806/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_4049806/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": [ "# 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_4049806/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, 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_4049806/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_4049806/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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6upqffHFF5o8ebIaGhqcLi0uMjIytHjxYu3du1d79uzRzTffrGnTpundd991urS4qa2t1YoVKzRy5EinS4mr4cOHq76+vqnt2rXL6ZLi4syZM5owYYIuu+wybdmyRe+9955+97vfqVevXk6XFrPa2tqof7Pq6mpJ0owZMxyuLHZPPPGEli9frmXLlun999/XE088od/85jd6+umnnS4tLu655x5VV1drzZo1OnDggCZPnqxJkyaprq6u7Sux/ei2drrhhhuskpKSps/hcNhKT0+3KioqOqqEDiGp2VNxu4rTp09bkqwdO3Y4XYoxvXr1sv74xz86XUZcnDt3zrryyiut6upq66abbrJKS0udLikuFi5caI0aNcrpMox48MEHrRtvvNHpMjpEaWmpNWTIEKuxsdHpUmI2ZcoUq7i4OKrP5/NZhYWFDlUUP59++qnldrutzZs3R/WPHj3aeuihh9q8ng45svH5559r7969mjRpUlNft27dNGnSJL311lsdUQLiIBAISFK7nvjX2YXDYa1fv14NDQ1d5tb7JSUlmjJlStT/d13FkSNHlJ6ersGDB6uwsFAnTpxwuqS4eOWVVzRmzBjNmDFD/fr107XXXqtnn33W6bLi7vPPP9fatWtVXFwsl8vldDkxGz9+vLZt26bDhw9Lkt555x3t2rVLBQUFDlcWuy+//FLhcFg9evSI6k9JSbF1RNH4U1+l9j2aHp1LY2OjysrKNGHCBI0YMcLpcuLmwIEDGjdunP73v//p8ssv18aNG3X11Vc7XVbM1q9fr3379tk+r5oIxo4dq+eff17Dhg1TfX29Hn30UeXl5engwYNKTU11uryYfPjhh1q+fLnmz5+vX/7yl6qtrdW8efOUlJSkoqIip8uLm02bNuns2bO66667nC4lLhYsWKBgMKjc3Fy53W6Fw2EtWrRIhYWFTpcWs9TUVI0bN06PPfaYrrrqKvXv319/+tOf9NZbb+m73/1um9fTIWEDia+kpEQHDx7sMufGLxg2bJj279+vQCCgDRs2qKioSDt27EjowOH3+1VaWqrq6upmf410BV//a3HkyJEaO3assrOz9dJLL+nuu+92sLLYNTY2asyYMXr88cclSddee60OHjyoP/zhD10qbDz33HMqKChQenq606XExUsvvaQXXnhB69at0/Dhw7V//36VlZUpPT29S/y7rVmzRsXFxRo4cKDcbrdGjx6tWbNmae/evW1eR4eEDR5Nn9jmzp2rzZs3a+fOncrIyHC6nLhKSkpqSufXXXedamtrtXTpUq1YscLhytpv7969On36tEaPHt3UFw6HtXPnTi1btkyhUEhut9vBCuPriiuu0NChQ3X06FGnS4mZ1+ttFnSvuuoq/fnPf3aoovj7+OOPtXXrVlVWVjpdStw88MADWrBggX76059Kkq655hp9/PHHqqio6BJhY8iQIdqxY4caGhoUDAbl9Xo1c+ZMDR48uM3r6JA5GzyaPjFZlqW5c+dq48aNev311zVo0CCnSzKusbFRoVDI6TJicsstt+jAgQPav39/UxszZowKCwu1f//+LhU0JOn8+fM6duyYvF6v06XEbMKECc0uLz98+LCys7Mdqij+Vq1apX79+mnKlClOlxI3n376qbp1i96dut1uNTY2OlSRGT179pTX69WZM2dUVVWladOmtXnZDjuNEuuj6Tuz8+fPR/1Vdfz4ce3fv1+9e/dWVlaWg5XFpqSkROvWrdPLL7+s1NRUnTp1SpLk8XiUkpLicHWxKy8vV0FBgbKysnTu3DmtW7dO27dvV1VVldOlxSQ1NbXZvJqePXuqT58+XWK+zf3336+pU6cqOztb//znP7Vw4UK53W7NmjXL6dJidt9992n8+PF6/PHH9ZOf/ERvv/22Vq5cqZUrVzpdWlw0NjZq1apVKioqUvfuXecs/tSpU7Vo0SJlZWVp+PDh+sc//qGnnnpKxcXFTpcWF1VVVbIsS8OGDdPRo0f1wAMPKDc3197+O74XyVzc008/bWVlZVlJSUnWDTfcYO3evbsjN2/MG2+8YUlq1oqKipwuLSYt/SZJ1qpVq5wuLS6Ki4ut7OxsKykpyerbt691yy23WH/961+dLsuIrnTp68yZMy2v12slJSVZAwcOtGbOnGkdPXrU6bLi5i9/+Ys1YsQIKzk52crNzbVWrlzpdElxU1VVZUmyDh065HQpcRUMBq3S0lIrKyvL6tGjhzV48GDroYceskKhkNOlxcWLL75oDR482EpKSrIGDBhglZSUWGfPnrW1Dh4xDwAAjOLZKAAAwCjCBgAAMIqwAQAAjCJsAAAAowgbAADAKMIGAAAwirABAACMImwAAACjCBsAAMAowgYAADCKsAEAAIz6P0A9tzLL6TApAAAAAElFTkSuQmCC", "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.14" } }, "nbformat": 4, "nbformat_minor": 4 }