{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Variance of SAXS data\n", "\n", "There has been a long discussion about the validity (or not) of pixel splitting regarding the propagation of errors [#520](https://github.com/silx-kit/pyFAI/issues/520) [#882](https://github.com/silx-kit/pyFAI/issues/882) [#883](https://github.com/silx-kit/pyFAI/issues/883).\n", "So we will develop a mathematical model for a SAXS experiment and validate it in the case of a SAXS approximation (i.e. no solid-angle correction, no polarisation effect, and of course small angled $\\theta = sin(\\theta) = tan(\\theta)$)\n", "\n", "## System under study\n", "\n", "Let's do a numerical experiment, simulating the following experiment:\n", "\n", "* Detector: 1024x1024 square pixels of 100µm each, assumed to be poissonian. \n", "* Geometry: The detector is placed at 1m from the sample, the beam center is in the corner of the detector\n", "* Intensity: the maximum signal on the detector is 10 000 photons per pixel, each pixel having a minimum count of a hundreed.\n", "* Wavelength: 1 Angstrom\n", "* During the first part of the studdy, the solid-angle correction will be discarded, same for polarisation corrections.\n", "* Since pixel splitting is disabled, many rebinning engines are available and will be benchmarked:\n", " - numpy: the slowest available in pyFAI\n", " - histogram: implemented in cython\n", " - nosplit_csr: using a look-up table\n", " - nosplit_csr_ocl_gpu: which offloads the calculation on the GPU.\n", " \n", " We will check they all provide the same numerical result\n", " \n", "Now we define some constants for the studdy. The dictionary *kwarg* contains the parameters used for azimuthal integration. This ensures the number of bins for the regrouping or correction like $\\Omega$ and polarization are always the same." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/usr/bin/python3 3.9.1 (default, Dec 8 2020, 07:51:42) \n", "[GCC 10.2.0]\n" ] } ], "source": [ "%matplotlib inline\n", "import time\n", "start_time = time.perf_counter()\n", "import sys\n", "print(sys.executable, sys.version)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "pix = 100e-6\n", "shape = (1024, 1024)\n", "npt = 1400 #Roughly 1024*sqrt(2)\n", "nimg = 1000\n", "wl = 1e-10\n", "I0 = 1e4\n", "kwarg = {\"npt\":npt, \n", " \"correctSolidAngle\":False, \n", " \"polarization_factor\":None,\n", " \"safe\":False}\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pyFAI version: 0.20.0-beta1\n", "Detector Detector\t Spline= None\t PixelSize= 1.000e-04, 1.000e-04 m\n" ] } ], "source": [ "import numpy\n", "from scipy.stats import chi2 as chi2_dist\n", "from matplotlib.pyplot import subplots\n", "from matplotlib.colors import LogNorm\n", "import logging\n", "logging.basicConfig(level=logging.ERROR)\n", "import pyFAI\n", "print(f\"pyFAI version: {pyFAI.version}\")\n", "from pyFAI.detectors import Detector\n", "from pyFAI.azimuthalIntegrator import AzimuthalIntegrator\n", "from pyFAI.method_registry import IntegrationMethod\n", "from pyFAI.gui import jupyter\n", "detector = Detector(pix, pix)\n", "detector.shape = detector.max_shape = shape\n", "print(detector)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We define in *ai_init* the geometry, the detector and the wavelength. " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Detector Detector\t Spline= None\t PixelSize= 1.000e-04, 1.000e-04 m\n", "Wavelength= 1.000000e-10m\n", "SampleDetDist= 1.000000e+00m\tPONI= 0.000000e+00, 0.000000e+00m\trot1=0.000000 rot2= 0.000000 rot3= 0.000000 rad\n", "DirectBeamDist= 1000.000mm\tCenter: x=0.000, y=0.000 pix\tTilt=0.000 deg tiltPlanRotation= 0.000 deg\n", "Solid angle: maxi= 9.999999925000007e-09 mini= 9.693768051738431e-09, ratio= 0.9693768124441685\n" ] } ], "source": [ "ai_init = {\"dist\":1.0, \n", " \"poni1\":0.0, \n", " \"poni2\":0.0, \n", " \"rot1\":0.0,\n", " \"rot2\":0.0,\n", " \"rot3\":0.0,\n", " \"detector\":detector, \n", " \"wavelength\":wl}\n", "ai = AzimuthalIntegrator(**ai_init)\n", "print(ai) \n", "\n", "#Solid consideration:\n", "Ω = ai.solidAngleArray(detector.shape, absolute=True)\n", "\n", "print(\"Solid angle: maxi= {} mini= {}, ratio= {}\".format(Ω.max(), Ω.min(), Ω.min()/Ω.max()))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Validation of the flatness of a flat image integrated\n", "flat = numpy.ones(detector.shape)\n", "res_flat = ai.integrate1d(flat, **kwarg)\n", "crv = jupyter.plot1d(res_flat)\n", "crv.axes.set_ylim(0.9,1.1)\n", "pass" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "| Method | error | time(ms)|\n", "+------------------------------------------------------------------------+----------+---------+\n", "| no split, histogram, python | 0.00e+00 | 40.020 |\n", "| no split, histogram, cython | 0.00e+00 | 12.485 |\n", "| bbox split, histogram, cython | 0.00e+00 | 28.940 |\n", "| full split, histogram, cython | 0.00e+00 | 118.238 |\n", "| no split, CSR, cython | 0.00e+00 | 7.779 |\n", "| bbox split, CSR, cython | 0.00e+00 | 8.097 |\n", "| no split, CSR, python | 0.00e+00 | 16.910 |\n", "| bbox split, LUT, cython | 0.00e+00 | 9.221 |\n", "| no split, LUT, cython | 0.00e+00 | 8.911 |\n", "| pseudo split, LUT, cython | 0.00e+00 | 9.154 |\n", "| full split, CSR, cython | 0.00e+00 | 8.139 |\n", "| no split, histogram, OpenCL, NVIDIA CUDA / GeForce GT 1030 | 1.19e-07 | 4.990 |\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/usr/lib/python3/dist-packages/pyopencl/__init__.py:267: CompilerWarning: Non-empty compiler output encountered. Set the environment variable PYOPENCL_COMPILER_OUTPUT=1 to see more.\n", " warn(\"Non-empty compiler output encountered. Set the \"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "| no split, histogram, OpenCL, Intel(R OpenCL / AMD EPYC 7262 8-Core Pro | 0.00e+00 | 11.785 |\n", "| no split, histogram, OpenCL, AMD Accelerated Parallel Processing / gfx | 5.96e-08 | 9.594 |\n", "| no split, histogram, OpenCL, NVIDIA CUDA / GeForce GTX 750 Ti | 1.19e-07 | 9.075 |\n", "| bbox split, CSR, OpenCL, NVIDIA CUDA / GeForce GT 1030 | 1.19e-07 | 3.622 |\n", "| no split, CSR, OpenCL, NVIDIA CUDA / GeForce GT 1030 | 1.19e-07 | 3.336 |\n", "| bbox split, CSR, OpenCL, Intel(R OpenCL / AMD EPYC 7262 8-Core Process | 0.00e+00 | 7.875 |\n", "| no split, CSR, OpenCL, Intel(R OpenCL / AMD EPYC 7262 8-Core Processor | 0.00e+00 | 6.515 |\n", "| bbox split, CSR, OpenCL, AMD Accelerated Parallel Processing / gfx900 | 1.19e-07 | 2.697 |\n", "| no split, CSR, OpenCL, AMD Accelerated Parallel Processing / gfx900 | 5.96e-08 | 3.458 |\n", "| bbox split, CSR, OpenCL, NVIDIA CUDA / GeForce GTX 750 Ti | 1.19e-07 | 1.913 |\n", "| no split, CSR, OpenCL, NVIDIA CUDA / GeForce GTX 750 Ti | 1.19e-07 | 1.777 |\n", "| full split, CSR, OpenCL, NVIDIA CUDA / GeForce GT 1030 | 1.19e-07 | 3.640 |\n", "| full split, CSR, OpenCL, Intel(R OpenCL / AMD EPYC 7262 8-Core Process | 0.00e+00 | 8.274 |\n", "| full split, CSR, OpenCL, AMD Accelerated Parallel Processing / gfx900 | 1.19e-07 | 2.854 |\n", "| full split, CSR, OpenCL, NVIDIA CUDA / GeForce GTX 750 Ti | 1.19e-07 | 1.937 |\n", "| bbox split, LUT, OpenCL, NVIDIA CUDA / GeForce GT 1030 | 1.19e-07 | 5.306 |\n", "| no split, LUT, OpenCL, NVIDIA CUDA / GeForce GT 1030 | 1.19e-07 | 4.300 |\n", "| bbox split, LUT, OpenCL, Intel(R OpenCL / AMD EPYC 7262 8-Core Process | 0.00e+00 | 10.931 |\n", "| no split, LUT, OpenCL, Intel(R OpenCL / AMD EPYC 7262 8-Core Processor | 0.00e+00 | 7.705 |\n", "| bbox split, LUT, OpenCL, AMD Accelerated Parallel Processing / gfx900 | 1.19e-07 | 7.764 |\n", "| no split, LUT, OpenCL, AMD Accelerated Parallel Processing / gfx900 | 5.96e-08 | 5.796 |\n", "| bbox split, LUT, OpenCL, NVIDIA CUDA / GeForce GTX 750 Ti | 1.19e-07 | 3.959 |\n", "| no split, LUT, OpenCL, NVIDIA CUDA / GeForce GTX 750 Ti | 1.19e-07 | 2.804 |\n", "| full split, LUT, OpenCL, NVIDIA CUDA / GeForce GT 1030 | 1.19e-07 | 5.302 |\n", "| full split, LUT, OpenCL, Intel(R OpenCL / AMD EPYC 7262 8-Core Process | 0.00e+00 | 9.552 |\n", "| full split, LUT, OpenCL, AMD Accelerated Parallel Processing / gfx900 | 1.19e-07 | 6.396 |\n", "| full split, LUT, OpenCL, NVIDIA CUDA / GeForce GTX 750 Ti | 1.19e-07 | 3.971 |\n", "+------------------------------------------------------------------------+----------+---------+\n", "\n", "The fastest method is IntegrationMethod(1d int, no split, CSR, OpenCL, NVIDIA CUDA / GeForce GTX 750 Ti) in 1.777 ms/1Mpix frame\n" ] } ], "source": [ "#Equivalence of different rebinning engines ... looking for the fastest:\n", "fastest = sys.maxsize\n", "best = None\n", "print(f\"| {'Method':70s} | {'error':8s} | {'time(ms)':7s}|\")\n", "print(\"+\"+\"-\"*72+\"+\"+\"-\"*10+\"+\"+\"-\"*9+\"+\")\n", "for method in IntegrationMethod.select_method(dim=1):\n", " res_flat = ai.integrate1d(flat, method=method, **kwarg)\n", " #print(f\"timeit for {method} max error: {abs(res_flat.intensity-1).max()}\")\n", " m = str(method).replace(\")\",\"\")[26:96]\n", " err = abs(res_flat.intensity-1).max()\n", " tm = %timeit -o -q ai.integrate1d(flat, method=method, **kwarg)\n", " print(f\"| {m:70s} | {err:6.2e} | {tm.best*1000:7.3f} |\")\n", " if tm.best" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Generation of a \"SAXS-like\" curve with the shape of a lorentzian curve\n", "\n", "q = numpy.linspace(0, res_flat.radial.max(), npt)\n", "I = I0/(1+q**2)\n", "fig, ax = subplots()\n", "ax.semilogy(q, I, label=\"Simulated signal\")\n", "ax.set_xlabel(\"q ($nm^{-1}$)\")\n", "ax.set_ylabel(\"I (count)\")\n", "fig.legend()\n", "pass" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#Reconstruction of diffusion image:\n", "\n", "img_theo = ai.calcfrom1d(q, I, dim1_unit=\"q_nm^-1\", \n", " correctSolidAngle=False, \n", " polarization_factor=None)\n", "fig, ax = subplots()\n", "ax.imshow(img_theo, norm=LogNorm())" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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hy729VWoUCFl+fLl6/v27Vvh9ttvr7xw4cL1SUlJrpiYmOjHHnvsQHBwsHf8+PGbixYt6t27d69fw4YNI7t37350zpw5wWPHji2yatWqtampqaZ27dpRderUOSFJ/fr1qzR48ODtNWvWTJ42bVqBu+++u+KCBQs2nvm406dPL1irVq0TGR/fddddFZs3b5747LPPbklLS1N8fLx79uzZwd9++22xJUuWrLPWKi4ursbVV1+dWLx48fRt27YFDhkyZNuIESN2bNiwIeDMj3/++edCmzdvDly5cuU6a61atWpVfcKECQVLlCiR9tZbb5WZP3/++jJlyqT99ddf7lKlSqW3atXqaIcOHeL79OlzRJIaN24cfq7999xzT8V+/fodGDBgwKFXX321xPm+pzt37gwcNWrU1ri4uO21atWq8c033xRbvHjx+m+//bbwyy+/XKZly5Zb/vOf/5Rp2bJlwg8//LDt4MGD7nr16tW47rrrEp588sk9ixcvLvD111/vkKSHHnooaPPmzYHz5s3bcPToUXeNGjViHn300QOLFi0KOtf3xuv1ml9++aXo6b8Xnfn3Ikk1a9Y8MW3atIK9e/c+erGfDUIcAAAAgCNq1qx5vFq1aqmSFB0dfWLLli0BZ19nxowZBbZs2RLYoEGDSElKTU01cXFxx5YvXx5YoUKF5MjIyBRJ6tq16+HPP//874Br27bt0YIFC1pJSklJMX379q20du3aIJfLpe3bt3vOfhxJmjp1aqH169cHjxkzpogkJSYmuteuXRs4c+bMkJtvvvmwn5+fKleunNq4ceNMPf385ptvPnr66zxx/PhxV5EiRbxFihTxejwe78GDB90hISHeBx54oPyCBQsKulwu7d+/P2DXrl1+M2bMKNiuXbuM/bZ169ZHpVNH0JctW1awS5cu1TIeIyUlxZz9uHv37vUvUaJEWsbH8+bNC/nxxx//lCQ/Pz8VK1YsfcaMGQWvvfbao4UKFfJKUvv27Y9Mnz49pEuXLkfLlCmTcvXVVx/PuP2ZH0+cOLHQrFmzCkVFRUVJ0okTJ1zr168PXLp0qatjx45HMo7ClypV6h/PYb/Q/qVLlxacMGHCFkm68847D7344ovlz/U9LVeuXHKDBg2SJCk8PDzpqquuSnC5XKpbt+6Jl156qawkzZgxo9CkSZMKv//++6UlKTk52WzevPkf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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = subplots(figsize=(15,8))\n", "ax.semilogy(q, I, label=\"Simulated signal\")\n", "ax.set_xlabel(\"q ($nm^{-1}$)\")\n", "ax.set_ylabel(\"I (count)\")\n", "res_ng = ai.integrate1d_ng(img_theo, **kwarg)\n", "res_legacy = ai.integrate1d_legacy(img_theo, **kwarg)\n", "ax.plot(*res_legacy, label=\"Integrated image (legacy method)\")\n", "ax.plot(*res_ng, label=\"Integrated image (corrected method)\")\n", "\n", "#Display the error: commented as it makes the graph less readable\n", "#I_bins = I0/(1+res.radial**2)\n", "#ax.plot(res.radial, abs(res.intensity-I_bins), label=\"error\")\n", "fig.legend()\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Construction of a synthetic dataset\n", "\n", "We construct now a synthetic dataset of thousand images of this reference image with a statistical distribution which is common for photon-counting detectors (like Pilatus or Eiger): The Poisson distribution. The signal is between 100 and 10000, so every pixel should see photons and there is should be no \"rare-events\" bias (which sometimes occures in SAXS).\n", "\n", "### Poisson distribution:\n", "The Poisson distribution has the peculiarity of having its variance equal to the signal, hence the standard deviation equals to the square root of the signal. \n", "\n", "\n", "**Nota:** the generation of the images is slow and takes about 1Gbyte of memory !\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "8000.0 MBytes (1000, 1024, 1024)\n", "CPU times: user 56.6 s, sys: 5.89 s, total: 1min 2s\n", "Wall time: 1min 2s\n" ] } ], "source": [ "%%time\n", "\n", "if \"dataset\" not in dir():\n", " dataset = numpy.random.poisson(img_theo, (nimg,) + img_theo.shape)\n", "# else avoid wasting time\n", "print(dataset.nbytes/(1<<20), \"MBytes\", dataset.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Validation of the Poisson distribution.\n", "\n", "We have now thousand images of one magapixel. It is interesting to validate if the distribution actually follows the Poisson distribution. For this we will check if the *signal* and its *variance* follow a $\\chi^2$ distribution. \n", "\n", "For every pair of images I and J we calculate the numerical value of $\\chi ^2$:\n", "\n", "$$\n", "\\chi^2 = \\frac{1}{nbpixel-1}\\sum_{pix}\\frac{(I_{pix} - J_{pix})^2}{\\sigma(I_{pix})^2 + \\sigma(J_{pix})^2)}\n", "$$\n", "\n", "The distibution is obtained by calculating the histogram of $\\chi^2$ values for every pair of images, here almost half a milion. \n", "\n", "The calculation of the $\\chi^2$ value is likely to be critical in time, so we will shortly investigate 3 implementation: *numpy* (fail-safe but not that fast), *numexp* and *numba*\n", "Do not worry if any of the two later method fail: they are faster but provide the same numerical result as numpy." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of paires of images: 499500\n" ] } ], "source": [ "print(\"Number of paires of images: \", nimg*(nimg-1)//2)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.9984076345991684\n", "5.49 ms ± 16.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], "source": [ "#Numpy implementation of Chi^2 measurement for a pair of images. Fail-safe implementation\n", "\n", "def chi2_images_np(I, J):\n", " \"\"\"Calculate the Chi2 value for a pair of images with poissonnian noise \n", " Numpy implementation\"\"\"\n", " return ((I-J)**2/(I+J)).sum()/(I.size - 1)\n", "\n", "img0 = dataset[0]\n", "img1 = dataset[1]\n", "print(chi2_images_np(img0, img1))\n", "%timeit chi2_images_np(img0, img1)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.9984076345991684\n", "1 threads\n", "5.07 ms ± 27.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", "2 threads\n", "4.74 ms ± 10.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", "4 threads\n", "3.25 ms ± 395 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", "8 threads\n", "1.97 ms ± 119 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n", "16 threads\n", "1.48 ms ± 15.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n", "32 threads\n", "1.52 ms ± 18.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)\n" ] } ], "source": [ "#Numexp implementation of Chi^2 measurement for a pair of images. \n", "import numexpr\n", "from numexpr import NumExpr\n", "expr = NumExpr(\"((I-J)**2/(I+J))\", signature=[(\"I\", numpy.float64),(\"J\", numpy.float64)])\n", "\n", "def chi2_images_ne(I, J):\n", " \"\"\"Calculate the Chi2 value for a pair of images with poissonnian noise\n", " NumExpr implementation\"\"\"\n", " return expr(I, J).sum()/(I.size-1)\n", "\n", "img0 = dataset[0]\n", "img1 = dataset[1]\n", "print(chi2_images_ne(img0, img1))\n", "for i in range(6):\n", " j = 1<" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = subplots()\n", "h,b,_ = ax.hist(c2i, 100, label=\"measured distibution\")\n", "ax.plot()\n", "size = numpy.prod(shape)\n", "y_sim = chi2_dist.pdf(b*(size-1), size)\n", "y_sim *= h.sum()/y_sim.sum()\n", "ax.plot(b, y_sim, label=r\"$\\chi^2$ distribution\")\n", "ax.set_title(\"Is the set of images Poissonian?\")\n", "ax.legend()\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This validates the fact that our set of image is actually a Poissonian distribution around the target image displayed in figure 3.\n", "\n", "# Integration of images in the SAXS appoximation:\n", "\n", "We can now integrate all images and check wheather all pairs of curves (with their associated error) fit or not the $\\chi^2$ distribution. \n", "\n", "It is important to remind that we stay in SAXS approximation, i.e. no solid angle correction or other position-dependent normalization. The pixel splitting is also disabled. So the azimuthal integration is simply:\n", "\n", "$$\n", "I_{bin} = \\frac{1}{count(pix\\in bin)} \\sum_{pix \\in bin} I_{pix}\n", "$$\n", "\n", "The number of bins in the curve being much smaller than the number of pixel in the input image, this calculation is less time-critical. So we simply define the same kind of $\\chi^2$ function using numpy." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def chi2_curves(res1, res2):\n", " \"\"\"Calculate the Chi2 value for a pair of integrated data\"\"\"\n", " I = res1.intensity\n", " J = res2.intensity\n", " l = len(I)\n", " assert len(J) == l\n", " sigma_I = res1.sigma\n", " sigma_J = res2.sigma\n", " return ((I-J)**2/(sigma_I**2+sigma_J**2)).sum()/(l-1)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 3.74 s, sys: 12.2 ms, total: 3.75 s\n", "Wall time: 3.75 s\n" ] } ], "source": [ "%%time\n", "#Perform the azimuthal integration of every single image\n", "\n", "integrated = []\n", "for i in range(nimg):\n", " data = dataset[i, :, :]\n", " integrated.append(ai.integrate1d_legacy(data, variance=data, **kwarg))\n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "14.9 µs ± 103 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)\n" ] } ], "source": [ "#Check if chi^2 calculation is time-critical:\n", "%timeit chi2_curves(integrated[0], integrated[1])" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "c2 = []\n", "for i in range(nimg):\n", " res1 = integrated[i]\n", " for res2 in integrated[:i]:\n", " c2.append(chi2_curves(res1, res2))\n", "c2 = numpy.array(c2)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = subplots()\n", "h,b,_ = ax.hist(c2, 100, label=\"Measured distibution\")\n", "y_sim = chi2_dist.pdf(b*(npt-1), npt)\n", "y_sim *= h.sum()/y_sim.sum()\n", "ax.plot(b, y_sim, label=r\"Chi^2 distribution\")\n", "ax.set_title(\"Integrated curves in SAXS approximation\")\n", "ax.legend()\n", "pass" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.889452976157626 1.1200681344576493\n", "Expected outliers: 2497.5 got 558 below and 516 above\n" ] } ], "source": [ "low_lim, up_lim = chi2_dist.ppf([0.005, 0.995], nimg) / (nimg - 1)\n", "print(low_lim, up_lim)\n", "print(\"Expected outliers: \", nimg*(nimg-1)*0.005/2, \"got\", \n", "(c2up_lim).sum(), \"above\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Integration of images with solid angle correction/polarization correction\n", "\n", "PyFAI applies by default solid-angle correction which is needed for powder diffraction. \n", "On synchrotron sources, the beam is highly polarized and one would like to correct for this effect as well. How does it influence the error propagation ? \n", "\n", "If we enable the solid angle normalisation (noted $\\Omega$) and the polarisation correction (noted $P$), this leads us to:\n", "\n", "$$\n", "I_{bin} = \\frac{1}{count(pix\\in bin)} \\sum_{pix \\in bin} \\frac{I_{pix}}{\\Omega_{pix} P_{pix}}\n", "$$\n", "\n", "Flatfield correction and any other normalization like pixel efficiency related to sensor thickness should be accounted in the same way.\n", "\n", "**Nota:** The pixel splitting remains disabled. " ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IntegrationMethod(1d int, no split, CSR, OpenCL, NVIDIA CUDA / GeForce GTX 750 Ti)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "kwarg = {\"npt\":npt, \n", " \"correctSolidAngle\":True, \n", " \"polarization_factor\":0.95,\n", " \"safe\":False}\n", "kwarg[\"method\"] = IntegrationMethod.select_method(dim=1, \n", " split=\"no\", \n", " algo=\"csr\", \n", " impl=\"opencl\",\n", " target_type=\"gpu\")[-1]\n", "print(kwarg[\"method\"])\n", "#As we use \"safe\"=False, we need to reset the integrator manually:\n", "ai.reset()\n", "\n", "def plot_distribution(ai, kwargs, nbins=100, integrate=None, ax=None):\n", " ai.reset()\n", " results = []\n", " c2 = []\n", " if integrate is None:\n", " integrate = ai._integrate1d_legacy\n", " for i in range(nimg):\n", " data = dataset[i, :, :]\n", " r = integrate(data, variance=data, **kwarg)\n", " results.append(r) \n", " for j in results[:i]:\n", " c2.append(chi2_curves(r, j))\n", " c2 = numpy.array(c2)\n", " if ax is None:\n", " fig, ax = subplots()\n", " h,b,_ = ax.hist(c2, nbins, label=\"Measured distibution\")\n", " y_sim = chi2_dist.pdf(b*(npt-1), npt)\n", " y_sim *= h.sum()/y_sim.sum()\n", " ax.plot(b, y_sim, label=r\"Chi^2 distribution\")\n", " ax.set_title(\"Integrated curves\")\n", " ax.legend()\n", " return ax\n", "\n", "a=plot_distribution(ai, kwarg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The normalisation of the raw signal distorts the distribution of error, even at a level of a few percent correction ! (Thanks Daniel Franke for the demonstration)\n", "\n", "## Introducing the *new generation* of azimuthal integrator ... in production since 0.20\n", "\n", "As any normalization introduces some distortion into the error propagation, the error propagation should properly account for this. Alessandro Mirone suggested to treat normalization within azimuthal integration like this :\n", "\n", "$$\n", "I_{bin} = \\frac{\\sum_{pix \\in bin} I_{pix}}{\\sum_{pix \\in bin} \\Omega_{pix}P_{pix}}\n", "$$\n", "\n", "This is under investigation since begining 2017 https://github.com/silx-kit/pyFAI/issues/520 and is now available in production.\n", "\n", "**Nota:**\n", "This is a major issue as almost any commercial detector comes with flatfield correction already applied on raw images; making impossible to properly propagate the error (I am especially thinking at photon counting detectors manufactured by Dectris!). The detector should then provide the actual raw-signal and the flatfield normalization to allow proper signal and error propagation.\n", "\n", "Here is a comparison between the *legacy* integrators and the *new generation* ones:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#The new implementation provides almost the same result as the former one:\n", "ai.reset()\n", "fig, ax = subplots()\n", "data = dataset[0]\n", "ax.set_yscale(\"log\")\n", "jupyter.plot1d(ai.integrate1d_legacy(data, variance=data, **kwarg), ax=ax, label=\"version<=0.19\")\n", "jupyter.plot1d(ai.integrate1d_ng(data, variance=data, **kwarg), ax=ax, label=\"verision>=0.20\")\n", "ax.legend()\n", "pass\n", "# If you zoom in enough, you will see the difference !" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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SbEEe/311xk3bhwAl1122SndHLx//35effXVkt+3b9/OTTfdFPL20cAGvY0pz9G9/HX041wTu4iuMUFfXi07Q6cr4bJR0KCJf/HVIFXlxhtv5Pbbb2fChAkAZGRksGvXrnK3e+utt477/dlnn2Xfvn189913DBs2jIkTJ5KSkgJAz549SU9Pp2HDhrz22mv8+te/ZuLEiSHH+Mwzz5S7fvLkyQwZMoSuXbuetK6oqIj77rsv5GOdqDhhPPDAAwC0bduWjz/+uNL7i0TWwjCmLPs2w9greSTuE47QgD8W/oxh+U/xp8IRzNnVAP7zGoy9yq1XB8yaNYt69eod96WamppKv379ADh8+DA33XQTXbp04ac//SnFM2EH/6X+7rvvsnLlSsaPH0/37t2ZMmUKd999N1u3ug81HDBgAA0buo8u79u3Lzk5OaXGMnr0aDp37swVV1zBunXrSsrvuOOOki/pUaNGlbRWHnvsMebPn8+UKVN4/PHHSU1NJTMzk8suu4wnn3ySSy+9lJdffvm41grAe++9xw9/+EO6d+/OwoULAU6q0717d7Kzsxk1ahSZmZmkpqby+OOPk52dTffu3QH3goWf//zn9OjRg549ezJr1iwA3nnnHX784x8zaNAgOnXqxK9//evK/vPUCGthGFOanSvhvaFQdIyfFPyedO1SsmpRoAtvBH5E9h0N4aPb4c3LGbrvQRar+4TT7Oeurf74po6CnSvCu88f9IBrnitz9cqVKzn//PPLXL906VJWrVpF27Ztufjii/n222+55JJLjqtz++23c/vt/33YYadOnfjuu+9K3d/YsWO55pprTipfvHgxEyZMYOnSpRQVFdGrV6+T4tq7dy+TJk1i7dq1iAj79++nWbNmXHfddQwZMuS4rqL9+/czZ84cwE0GwY4cOcL8+fOZO3cuI0eOZOXKlWW+/+eee46VK1eSkZEBQHZ2dsm6f/zjHwCsWLGCtWvXctVVV7F+/XrAbaUtXbqUBg0a0LlzZ37xi1/Qvn37Mo/jJ2thGHOinHT452CQGBj59XHJ4jhnDYC7ZkB8U8bXH01P2VCzcUaYPn36kJSURExMDKmpqcd9YZ6q9957j/T0dB5//PGT1qWlpXHjjTfSsGFDEhISuO66606qk5CQQHx8PHfddReffvppSaulNDfffHOZ60aMGAFA//79OXjwIPv37z/1NwPMmzePW2+9FYAuXbpw5plnliSMgQMH0rRpU+Lj4+natWtI4zZ+sRaGMcHyD8HHI+G0pnDHl9CsPbCp1KrJo/4NQDN+zRcNfsvL9f7OtQV/rpk4y2kJVJdu3bqV2yffoEGDkuXY2FiKiooqdZzp06czevRo5syZc9w+g1V0yWhcXBwLFy5kxowZTJgwgb///e8nDbAXa9SoUZn7OfE4IkJcXByO45SUhXKvQ3kPqgvXeasJ1sIwJtg3v4P9W+DGN7xkUbH9NOF/Ch6irezhj/Xehlr6FMvLL7+c/Px83nzzzZKyRYsWlXTnhMPSpUu59957mTJlCq1atSq1Tv/+/Zk0aRLHjh3j0KFDfP755yfVOXz4MAcOHGDw4MG89NJLJd1ETZo04dChQyHHUzzgPm/ePJo2bUrTpk1JTk5myZIlACxZsoSsrKwK992/f3/ef/99ANavX8+WLVvo3LlzyHFECksYxnjueHI0LH6H14uuJfm1vSSP+ndJK6IiS/QcXi76MTfEzodlE6o5Un+ICJMmTWLatGmcddZZdOvWjaeffpq2bduG7RiPP/44hw8fZtiwYaSmppba3dSrVy9uvvlmUlNTGTp0aMmge7BDhw4xZMgQUlJSuPTSSxkzZgwAw4cP54UXXqBnz55kZmZWGE/z5s354Q9/yH333cfYsWMBGDp0KHv37iU1NZXXXnuNc845B4AWLVpw8cUX071795O60h544AECgQA9evTg5ptv5p133imz9RTJovaZ3r1791Z7gJIJm6N72fV8T/ZrY64reJZ86p/yLmJw+KD+s1wYnwMPLIBmZ4Q1xDVr1nDuueeGdZ+mdivtMyMii1W1d2X2Zy0MYwBmPsvpHOLRwvsrlSwAHGJ4tOB+8vPz+ejFB0+phWJMNKgwYYjI2yKyW0RWBpVNFJEM75UtIhleebKIHAta93rQNueLyAoR2Sgir4g3miQiDbz9bRSR70QkOfxv05hy7N8KS8YxITCAVVq1mT23kci4wJX8ODaNs6X0ewiMiVahtDDeAQYFF6jqzaqaqqqpwCfAp0GrM4vXqWrwbZOvAfcAnbxX8T7vBPap6tnAGOD5yrwRYyot7a8AvFp0fVh292rRdRwlnsfiPgrL/oyJFBUmDFWdC+wtbZ3XSvgJ8EF5+xCRNkCCqi5Qd9BkHHCDt/p64F1v+WNgoJx4LZsx1WX/Flj6HvS6jR20CMsu95HAm0XXMih2EefJxrDs05hIUNUxjH7ALlUNvmOpg4gsFZE5IlJ8+UI7ILh9nuOVFa/bCqCqRcABKP1/rojcIyLpIpKem5tbxdCNgfEv/pL8gHLRvNSw7nds4Bq+1wQejwt9HiRjIl1VE8YIjm9d7ADOUNWewKPAeBFJAEprMRRfnlXeuuMLVd9Q1d6q2jsxMbEKYRsD7N/CsNg5TAwMCFvrotgRTuPVouu5JHYVZH8b1n0b45dK3+ktInHAj4GSSVxUNR/I95YXi0gmcA5uiyIpaPMkYLu3nAO0B3K8fTaljC4wY8Lq21dwEF4tOvla/3B4PzCQX8RNYsHYp3mg8GEgvPNMhfsKrFBiExF+9rOf8a9//QtwZ3ht06YNF154IV988UVY4wmnxo0bc/jw4XLrPP300zRu3JjHHnuMp556iv79+3PFFVeUWnfy5Mmcc845JbPeBtdPTk4mPT2dli1bhhRbdnY28+fP55ZbbgEgPT2dcePG8corr5zCO6wZVWlhXAGsVdWSriYRSRSRWG+5I+7g9iZV3QEcEpG+3vjEbcBn3mZTgOLZyG4CZmq03hxiokf+YVg2gS+cvuwMc+ui5BDUZ2JgAFfFpNOGPdVyjJrWqFEjVq5cybFjxwCYNm0a7dq1q2Cr6lGdU2g888wzZSYLOPm5GhXVL092djbjx48v+b13794RmSwgtMtqPwAWAJ1FJEdE7vRWDefkwe7+wHIRWYY7gH2fqha3Fu4H3gI2ApnAVK98LNBCRDbidmONqsL7MSY0Kz+GgkO8X1S5/+Sh+lfRFQjKz+KmVetxatI111zDv//ttm4++OCDkgn6wJ3ddeTIkVxwwQX07NmTzz5z/y7Mzs6mX79+9OrVi169ejF//nwAduzYQf/+/UlNTaV79+6kpaUBboug2Mcff8wdd9wBuNOXP/roowwYMIAnnniCzMxMBg0axPnnn0+/fv1Yu3YtAFlZWVx00UVccMEF/P73vy/zvYRrmvTg+gAvvPACffr0oU+fPmzcuPGkfQa/x1GjRpGWlkZqaipjxow57mFUe/fu5YYbbiAlJYW+ffuyfPlywG0NjRw5kssuu4yOHTvWWIKpsEtKVUeUUX5HKWWf4F5mW1r9dKB7KeV5wLCK4jAmrNL/Ca26smRLp2o9zDYSme6cz/DYWbxS9ONqPVZNGT58OM888wxDhgxh+fLljBw5suSLfvTo0Vx++eW8/fbb7N+/nz59+nDFFVfQqlUrpk2bRnx8PBs2bGDEiBGkp6czfvx4rr76an77298SCAQ4evRohcdfv34906dPJzY2loEDB/L666+XTJP+wAMPMHPmTH75y19y//33c9ttt5VMLX6icE+THiwhIYGFCxcybtw4Hn744XK765577jlefPHFkjqzZ88uWfeHP/yBnj17MnnyZGbOnMltt91WMi/W2rVrmTVrFocOHaJz587cf//91KtXr8LzVxU2W62pe7YtgR0ZMPhF2FL9V3C/G7iKq2PT+VHsAuDGaj9edUtJSSE7O5sPPviAwYMHH7fum2++YcqUKSUPGMrLy2PLli20bduWhx56iIyMDGJjY0um9r7gggsYOXIkhYWF3HDDDaSmplZ4/GHDhhEbG8vhw4eZP38+w4b99+/N/Px8AL799ls++cT92/XWW2/liSeeOGk/wdOkAxVOk37ttdeW+RjaExW3ukaMGMEjjzwS0jalmTdvXsn7uPzyy9mzZw8HDhwA4Nprr6VBgwY0aNCAVq1asWvXLpKSksrbXZXZ1CCmzvngtWc4qg3o8WmzGjnefKcb65123B77da2Zyfa6667jscceO647CtxpvD/55BMyMjLIyMhgy5YtnHvuuYwZM4bWrVuzbNky0tPTKSgoANxZXOfOnUu7du249dZbS56nHXwr1onThxdPR+44Ds2aNSs5VkZGBmvWrCmpF8rtXKFOkz506FAmT57MoEGDyq1f2n6Ll4OnRVfVknNQntKGc4v358e06JYwTN2Sd4DrYuczJXARhyj7oTrhJYwLXEWPmGxufPLlWjHH1MiRI3nqqafo0aPHceVXX301//u//1vyRbd06VIADhw4QJs2bYiJieFf//oXgUAAgM2bN9OqVSvuvvtu7rzzzpJpw1u3bs2aNWtwHIdJkyaVGkNCQgIdOnTgo4/cO+pVlWXLlgFw8cUXlzx3vHha8RNV5zTpxdOiT5w4kYsuugiA5ORkFi9eDMBnn31GYWFhhfsKnhZ99uzZtGzZkoSEhDKPW92sS8rULcs/pJHkMz4wsEYPOylwCb+Ne5+hsXNZWhSecZMaeRRsGZKSkvjlL395Uvnvf/97Hn74YVJSUlBVkpOT+eKLL3jggQcYOnQoH330EQMG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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#Validation of the error propagation without pixel splitting but with normalization:\n", "a=plot_distribution(ai, kwarg, integrate = ai.integrate1d_ng)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Azimuthal integration with pixel splitting\n", "\n", "Pixels splitting is implemented in pyFAI in calculating the fraction of area every pixel spends in any bin. This is noted $c^{pix}_{bin}$. The calculation of those coeficient is done with some simple geometry but it is rather tedious, this is why two implementation exists: a simple one which assues pixels boundary are paralle to the radial and azimuthal axes called ```bbox``` for bounding box and a more precise one calculating the intersection of polygons (called ```full```. The calculation of those coefficient is what lasts during the initialization of the integrator as this piece of code is not (yet) parallelized. The total number of (complete) pixel in a bin is then simply the sum of all those coeficients: $\\sum_{pix \\in bin} c^{pix}_{bin}$.\n", "\n", "The azimuthal integration used to be implemented as (pyFAI <=0.15):\n", "\n", "$$\n", "I_{bin} = \\frac{ \\sum_{pix \\in bin} c^{pix}_{bin} \\frac{I_{pix}}{\\Omega_{pix} P_{pix}}}{\\sum_{pix \\in bin}c^{pix}_{bin}}\n", "$$\n", "\n", "With the associated error propagation (with the error!):\n", "\n", "$$\n", "\\sigma_{bin} = \\frac{\\sqrt{\\sum_{pix \\in bin} c^{pix}_{bin} \\sigma^2_{pix}}}{\\sum_{pix \\in bin}c^{pix}_{bin}}\n", "$$\n", "\n", "\n", "The *new generation* of integrator in production since version 0.20 (in 1D at least) are implemented like this:\n", "\n", "$$\n", "I_{bin} = \\frac{\\sum_{pix \\in bin} c^{pix}_{bin}I_{pix}}{\\sum_{pix \\in bin} c^{pix}_{bin}\\Omega_{pix}P_{pix}}\n", "$$\n", "\n", "the associated variance propagation should look like this: \n", "\n", "$$\n", "\\sigma_{bin} = \\frac{\\sqrt{\\sum_{pix \\in bin} (c^{pix}_{bin})^2 \\sigma^2_{pix}}}\n", " {\\sum_{pix \\in bin}c^{pix}_{bin}\\Omega_{pix}P_{pix}}\n", "$$\n", "\n", "Since we have now tools to validate the error propagation for every single rebinning engine. Let's see if pixel splitting induces some error, with coarse or fine pixel splitting:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IntegrationMethod(1d int, bbox split, CSR, OpenCL, NVIDIA CUDA / GeForce GTX 750 Ti)\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEICAYAAABfz4NwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAA1j0lEQVR4nO3dd3hUZdr48e89kxBq6D1AAJEWQmgBQSmiAoooCyq6i1ixYdldWdGfhXdf8WVXXVbdVV8VX0BFxIJgW0EREFAgQOgdAkQQkA6SkJnz/P44JzGEdCY5U+7Pdc01M89p9xzC3POU8xwxxqCUUkp53A5AKaVUcNCEoJRSCtCEoJRSyqEJQSmlFKAJQSmllEMTglJKKUATglLlSkTiRcSISJTbsSiVlyYE5ToRSRORK4q57gIRuausYyrk+ONF5F23jq9UWdKEoJQjXH61i03/b6sS0z8aFVRE5DYRWSwiL4jIURHZJSKDnGUTgMuAf4nIKRH5l1PeRkTmicgREdkiIjfm2l9tEflMRE6IyAoReVZEFudabkTkARHZBmxzyl4Skb3ONitF5DKnfCDwBHCTc/w1Tnl1EZksIvtF5CfnGF5nmdf5LL+IyE7gmiI+fxMR+UREDonI4Vyf8ZyaSd6mJ6fmNEFElgC/Ak+ISEqeff9RROY4r2OcuPaIyAEReV1EKjnL6ojI5yJyzDmn32uCiQz6j6yCUXdgC1AH+DswWUTEGPP/gO+BMcaYqsaYMSJSBZgHTAfqATcDr4pIe2df/wZOAw2AUc4jr+udY7Zz3q8AkoBazn4/FJGKxpj/AM8BHzjH7+isPxXwARcBnYCrgOxmrbuBwU55V2B4QR/aSSKfA7uBeKAxMKOIc5XbSGA0UA14BWgtIq1yLb/F+TwAfwMudj7nRc6xnnaW/RlIB+oC9bGToM5xEwE0IahgtNsY86Yxxo/9ZdsQ+4spP4OBNGPM/xljfMaYVcDHwHDnC3YY8Iwx5ldjzEZnf3n9jzHmiDHmDIAx5l1jzGFnfy8CMUDr/A4uIvWBQcAjxpjTxpiDwCRghLPKjcA/jTF7jTFHgP8p5HMnA42Asc6+MowxiwtZP68pxpgNTtzHgdnYCRInMbQB5oiIYCeqPzqf+yR2osuOOQv7nDczxmQZY743OulZRNCEoILRz9kvjDG/Oi+rFrBuM6C707xxTESOAb/HrhHUBaKAvbnW33v+Ls4tE5E/i8gmETnu7K86dm2loONHA/tzHf9/sWsrYH/B597/7gL2A9AEOxn6ClmnMHk/23SchIBdO/jUOZ91gcrAylwx/8cpB3ge2A7MFZGdIjKulPGoEBMWnWgqouT9pboXWGiMuTLvik4NwQfEAVud4iaF7dPpL3gM6A9sMMZYInIUkEKOnwnUKeCLfH+eYzbN70Pl2ldTEYnKZ1+nsb/EszUo7HM45gJ1RCQJOzH80Sn/BTgDtDfG/HTeTuwaw5+BPztNb9+JyApjzLeFxK7CgNYQVKg5ALTI9f5z4GIRGSki0c6jm4i0dZqcPgHGi0hlEWkD3FrE/qthJ5FDQJSIPA3E5jl+fHYnqzFmP/YX74siEisiHhFpKSJ9nPVnAg+JSJyI1AQK+7W9HDuBTBSRKiJSUUR6OctSgd4i0lREqgOPF/E5cJLKR9i/+Gth97VgjLGAN4FJIlIPQEQai8gA5/VgEbnIaVo6AfidhwpzmhBUqHkJu3/gqIi87PyavQq7/XsfdnPT37Db/QHGYDf5/Ay8A7yP/Yu+IF8DX2HXKHYDGZzbFPOh83xYRFY5r28FKgAbgaPYX8INnWVvOvtcA6zCTlD5chLYtdidvHuwO3ZvcpbNAz4A1gIrsRNhcUwHrgA+zFPreAy7WehHETkBfMNv/SStnPengB+AV40xC4p5PBXCRPuKVCQRkb8BDYwx+Y02UiqiaQ1BhTXnGoVEsSUDdwKz3I5LqWCkncoq3FXDbiZqBBwEXsQejqmUykObjJRSSgHaZKSUUsoRsk1GderUMfHx8W6HoZRSIWXlypW/GGPq5rcsZBNCfHw8KSkpRa+olFIqh4gUeLW8NhkppZQCNCEopZRyaEJQSikFhHAfglKRJisri/T0dDIyMtwORYWAihUrEhcXR3R0dLG30YSgVIhIT0+nWrVqxMfHY887p1T+jDEcPnyY9PR0mjdvXuzttMlIqRCRkZFB7dq1NRmoIokItWvXLnFtUhOCUiFEk4EqrtL8rWhCUCrQLMvtCJQqFU0ISl2on1bCtOvhlS7wXBxMaACLngcr/O4p8/PPPzNixAhatmxJu3btuPrqq9m6dSsLFixg8ODB+W5z1113sXHjxnPK7rnnHqpUqcL8+fPPKf/HP/5Bu3btSExMpH///uzeXdgdR23jx4/nhRdeAODpp5/mm2++KXDdTz/99LxYcnv99deZNm0aAH379i3Rxa/Hjh3j1VdfzXm/b98+hg8fXuztg4EmBKUuxI75MOVaOLQZGnSATn+AVlfC/Gdh6rVwLL9bOIcmYwxDhw6lb9++7Nixg40bN/Lcc89x4MCBQrd76623aNeuXc77Z599lqNHj7Js2TIeeOAB1q5dm7OsU6dOpKSksHbtWoYPH85f/vKXEsX417/+lSuuuKLA5YUlBJ/Px7333suttxZ1U7385U0IjRo14qOPPirVvtyiCUGp0lr3Ebx3I9RqDqMXwA1TYNBEuOldGPq/sH8tvN4Lfl7ndqQB8d133xEdHc29996bU5aUlMRll10GwKlTpxg+fDht2rTh97//PdkzKef+pT116lTWr1/P9OnTSUhIYM6cOdx9993s3Wsnzn79+lG5sn3r6B49epCenp5vLBMmTKB169ZcccUVbNmyJaf8tttuy/kSHjduXE5t49FHH2Xp0qXMmTOHsWPHkpSUxI4dO+jbty9PPPEEffr04aWXXjqntgHw7rvv0rNnTxISEli+fDnAeeskJCSQlpbGuHHj2LFjB0lJSYwdO5a0tDQSEhIAe0DA7bffTocOHejUqRPfffcdAFOmTOF3v/sdAwcOpFWrViVOgIGmw06VKo0t/4GP74JmPWHEdKhU47dlItBxBDTpDm8PgFn3wd3zIapC4I7/1bjAJ5oGHeyEVoD169fTpUuXApevXr2aDRs20KhRI3r16sWSJUu49NJLz1ln1KhRjBr1283qWrVqxbJly/Ld3+TJkxk0aNB55StXrmTGjBmsXr0an89H586dz4vryJEjzJo1i82bNyMiHDt2jBo1ajBkyBAGDx58TlPOsWPHWLhwIWB/2ed2+vRpli5dyqJFi7jjjjtYv359gZ9/4sSJrF+/ntTUVADS0tJylv373/8GYN26dWzevJmrrrqKrVu3ApCamsrq1auJiYmhdevWPPjggzRp0qTA45QlrSEoVVJZZ+CrsVCvLfzh43OTQW61msPgf8KBdfD9C/mvE0aSk5OJi4vD4/GQlJR0zhdiSb377rukpKQwduzY85Z9//33DB06lMqVKxMbG8uQIUPOWyc2NpaKFSty11138cknn+TUOvJz0003Fbjs5ptvBqB3796cOHGCY8eOlfzDAIsXL2bkyJEAtGnThmbNmuUkhP79+1O9enUqVqxIu3btitVvUla0hqBUSS15GY7tgVGfQ3SlwtdtczUkjoBFL0Drq6FRUmBiKOSXfFlp3759oW3iMTExOa+9Xi8+n69Ux/nmm2+YMGECCxcuPGefuRU1pDIqKorly5fz7bffMmPGDP71r3+d14GdrUqVKgXuJ+9xRISoqCisXCPJijPWv7AbkQXqvAWC1hCUKolje2DxP6D9UGh+WfG2GTQRqtSFT+8HX2bZxleGLr/8cjIzM3nzzTdzylasWJHT3BIIq1ev5p577mHOnDnUq1cv33V69+7NrFmzOHPmDCdPnuSzzz47b51Tp05x/Phxrr76av75z3/mNONUq1aNkydPFjueDz74ALB/4VevXp3q1asTHx/PqlWrAFi1ahW7du0qct+9e/fmvffeA2Dr1q3s2bOH1q1bFzuO8qIJQamSmPskIHDlfxd/m0o14dqX4OAGWDm1zEIrayLCrFmzmDdvHi1btqR9+/aMHz+eRo0aBewYY8eO5dSpU9xwww0kJSXl2xzUuXNnbrrpJpKSkhg2bFhOp3ZuJ0+eZPDgwSQmJtKnTx8mTZoEwIgRI3j++efp1KkTO3bsKDKemjVr0rNnT+69914mT54MwLBhwzhy5AhJSUm89tprXHzxxQDUrl2bXr16kZCQcF5T1/3334/f76dDhw7cdNNNTJkypcDaj5tC9p7KXbt2NXqDHFWu0hbDlGug35PQ5/y27SK9dSWcPggPrgKPt8Sbb9q0ibZt25b8uCpi5fc3IyIrjTFd81tfawhKFdcP/7abfno+WLrte46Bo2mw+fOAhqVUoGhCUKo4ju2Frf+BzrdCdMXS7aPNYKgZb3dKh2jNXIU3TQhKFceqqfaXeJfbSr8PjxcuGQM/pcDe/MfeK+UmTQhKFcWfBaumwcUDoEbTC9tX0i12J/PSVwITm1IBpAlBqaJs/hxOHYCud174vipUsfez+Qs4XPQoF6XKkyYEpYqyYjLUaAYX9Q/M/pJHg3hg9buB2Z9SAVLklcoi0gSYBjQALOANY8xLIlIL+ACIB9KAG40xR51tHgfuBPzAQ8aYr53yLsAUoBLwJfCwMcaISIxzjC7AYeAmY0xawD6lUqV1aAukfQ9XjC/VUNF8VasPLfrC+o+g/9P23EelED/ui8DE40ibeE2R64gIf/jDH3jnnXcAe4bQhg0b0r17dz7/PHhHT1WtWpVTp04Vus748eOpWrUqjz76KE8//TS9e/cucObUTz/9lIsvvjhnFtfc68fHx5OSkkKdOnWKFVtaWhpLly7llltuASAlJYVp06bx8ssvl+ATBkZxagg+4M/GmLZAD+ABEWkHjAO+Nca0Ar513uMsGwG0BwYCr4pI9v+k14DRQCvnMdApvxM4aoy5CJgE/C0An02pC5c6HTxR0GlkYPfb4Qb7quf0FYHdbxmrUqUK69ev58yZMwDMmzePxo0buxJLWU7xUNJptItavzBpaWlMnz49533Xrl1dSQZQjIRgjNlvjFnlvD4JbAIaA9cB2ZddTgWud15fB8wwxmQaY3YB24FkEWkIxBpjfjD21XDT8myTva+PgP6i9wpUbjMGNs2B5n2gSvF+7RVbm2sgqiKs+zCw+y0HgwYN4osv7NrJ+++/nzMBHNizg95xxx1069aNTp06MXv2bMD+0rvsssvo3LkznTt3ZunSpQDs37+f3r17k5SUREJCAt9//z1g/6LP9tFHH3HbbbcB9vTWf/rTn+jXrx+PPfYYO3bsYODAgXTp0oXLLruMzZs3A7Br1y4uueQSunXrxlNPPVXgZwnUNNq51wd4/vnnSU5OJjk5me3bt5+3z9yfcdy4cXz//fckJSUxadKkc242dOTIEa6//noSExPp0aNHzr0jxo8fzx133EHfvn1p0aJFwBJIifoQRCQe6AQsA+obY/aDnTSA7IlHGgO57wqS7pQ1dl7nLT9nG2OMDzgO1M7n+KNFJEVEUg4dOlSS0JUquQMb4MhOaHtt4PddMdYetbRhFvjdm8ysNEaMGMGMGTPIyMhg7dq1dO/ePWfZhAkTuPzyy1mxYgXfffcdY8eO5fTp09SrV4958+axatUqPvjgAx566CEApk+fzoABA0hNTWXNmjUkJSUVefytW7fyzTff8OKLLzJ69GheeeUVVq5cyQsvvMD9998PwMMPP8x9993HihUraNCgQb77yT2N9ieffMKKFefX1rKn0d6wYQNr167lySefpGfPngwZMoTnn3+e1NRUWrZsed52sbGxLF++nDFjxvDII48U+nkmTpzIZZddRmpqKn/84x/PWfbMM8/QqVMn1q5dy3PPPXfOzXs2b97M119/zfLly/mv//ovsrKyijp1RSr2bKciUhX4GHjEGHOikB/w+S0whZQXts25Bca8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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#With coarse pixel-splitting, new integrator:\n", "kwarg[\"method\"] = IntegrationMethod.select_method(dim=1, \n", " split=\"bbox\", \n", " algo=\"csr\", \n", " impl=\"opencl\",\n", " target_type=\"gpu\")[-1]\n", "print(kwarg[\"method\"])\n", "a = plot_distribution(ai, kwarg, integrate = ai.integrate1d_ng)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "IntegrationMethod(1d int, full split, CSR, OpenCL, NVIDIA CUDA / GeForce GTX 750 Ti)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#With fine pixel-splitting, new integrator:\n", "# so we chose the nosplit_csr_ocl_gpu, other methods may be faster depending on the computer\n", "kwarg[\"method\"] = IntegrationMethod.select_method(dim=1, \n", " split=\"full\", \n", " algo=\"csr\", \n", " impl=\"opencl\",\n", " target_type=\"gpu\")[-1]\n", "print(kwarg[\"method\"])\n", "a = plot_distribution(ai, kwarg, integrate = ai.integrate1d_ng)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With those modification available, we are now able to estimate the error propagated from one curve and compare it with the \"usual\" result from pyFAI:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The integrated curves are now following the $\\chi^2$ distribution, which means that the errors provided are in accordance with the data." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "image/png": "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nmLo0KEsW7aMUaNGFX3Rjxkzhosuuog333yTvXv30rt3by6++GJatmzJtGnTqF+/PmvXruXaa68lNTWV999/n0GDBvH444/j9/s5dOhQuftfs2YN06dPx+fzMXDgQF599dWiYdLvueceZs6cye9+9zvuvvtubrzxxqKhxYsL9zDpweLi4li4cCETJkzg/vvvL7O5buzYsTz77LNFy8yePbto3p///GeSk5OZMmUKM2fO5MYbbywaF2vVqlXMmjWL/fv307lzZ+6++27q1KlT7vmrDBut1tQ+25bClkUweCxkVf0V3BP8l3KJbzGXx/zAf68mj16JiYlkZmbywQcfMGTIkKPmfffdd0ydOrXoAUO5ubls2rSJNm3acN9995GWlobP5ysa2rtXr16MGjWK/Px8rrzySpKSksrd/4gRI/D5fBw4cID58+czYsR/f2/m5eUB8P333/PJJ85v1xtuuIFHH330mO0ED5MOlDtM+uWXX17qY2iLK6x1XXvttTzwwAMhrVOSefPmFR3HRRddxK5du8jJyQHg8ssvp169etSrV4+WLVuyY8cO4uPjy9pcpdnQIKbWee+l/0eu1iFxyknVsr95gW5kBFpzU+y31bK/6nDFFVfw0EMPHdUcBc4w3p988glpaWmkpaWxadMmzjzzTMaNG0erVq1YunQpqampHDlyBHBGcZ07dy5t27blhhtuKHqedvCtWMWHDy8cjjwQCHDiiScW7SstLY2VK1cWLRfK7VyhDpM+fPhwpkyZwuDBg8tcvqTtFk4HD4uuqkXnoCwldecWbs+LYdEtYZjaJW8/w3zf80XgHPbRqPzlw0CJ4W3/pSTFrGfYY8/XiDGmRo0axRNPPEH37t2PKh80aBD//ve/i77olixZAkBOTg6tW7cmJiaGd955B7/fD8DGjRtp2bIlt99+O7feemvRsOGtWrVi5cqVBAIBJk+eXGIMcXFxtG/fno8+cu6oV1WWLl0KwHnnnVf03PHCYcWLq8ph0guHRZ80aRLnnHMOAAkJCSxatAiAzz77jPz8/HK3FTws+uzZs2nevDlxcXGl7reqWZOUqV2Wf0QjyeW9goHVuttP/f34Q+z7DPelsLSgcuNVFaqWR8GWIj4+nt/97nfHlP/pT3/i/vvvJzExEVUlISGBL774gnvuuYfhw4fz0UcfMWDAgKJawuzZs3nmmWeo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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Python histogramming without pixels splitting.\n", "\n", "kwarg = {\"npt\":npt, \n", " \"method\": (\"no\", \"histogram\", \"python\"),\n", " \"correctSolidAngle\":True, \n", " \"polarization_factor\":0.95,\n", " \"safe\":False}\n", "a = plot_distribution(ai, kwarg, integrate=ai._integrate1d_ng)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "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qiiDBg3i6aefpn///ixdupS77747/4t+2LBhXHbZZbzxxhvs37+f7t27c/nll9OoUSMmTZpE9erVWbNmDbfccgvp6emMGTOGq666iieffJJgMMjRo0dLPP7q1auZPHky8fHx9O3bl1deeSV/mvSHH36YqVOn8utf/5qHHnqIO+64I39q8YIiPU16qKSkJBYsWMDo0aN59NFHi+2uGz58OM8991x+nenTp+ev+8tf/kJaWhoTJkxg6tSp3HHHHfnzYq1cuZJp06Zx6NAh2rZty0MPPURiYmKJ568s7E5vU/VsWwpb0qHrXRR+zUVkvR28koZykGviKsfgd6dOncjMzOT999/nmmuuOWHdt99+y/Dhw0lNTaV3795kZ2ezadMmcnNzue++++jYsSMDBw7M7845//zzefPNNxk6dCjLli2jTp06JR5/4MCBxMfHc/jwYebOnZs/79QDDzzAtm3uzZJz5szJb/nkTSteUKSnSQ+Vd+xbbrmFefPmhbVNYUKnRb/sssvYs2cPBw4cAOAnP/kJ1apVo0GDBjRq1KjEJx9GgiUMU+W8++JQsjWRzp8WevV2xM1yOrLOacLghG8r5HgV4brrruOxxx47oTsK3Gm8P/74YxYvXszixYvZtGkT5513HiNGjKBx48YsWbKE9PR0jh8/DrizuM6cOZNmzZpx++235z9PO/RWrILTh+dNR+44Dqeffnr+sRYvXsyKFSvy64VzO1e406QPGDCACRMm0K9fv2LrF7bfvOXQadFVNf8cFKew4dy8/fkxLbolDFO15Bzihvg5fOH04AC1S64fAUoco4NXkha3lmuf+E+lmGPq7rvv5qmnnqJjxxMfLnXVVVfxn//8J/+LbtGiRQAcOHCAJk2aEBcXxzvvvEMwGARg48aNNGrUiPvuu4977rknf9rwxo0bs2LFChzHYfz48YXGkJSURIsWLfjoI/eOelVlyZIlAFx88cX5zx3Pm1a8oPKcJj1vWvSxY8dy4YUXApCSksLChQsB+PTTT8nNzS1xX6HTok+fPp0GDRqQlJRU5HHLmz1AyVQty8ZRW7J5r5wHuwv6JNiTJxLGcFP8DJYFWkZknxXyKNgiJCcn8+tf//qk8j//+c88+uijdOrUCVUlJSWFzz//nIcffpgBAwbw0Ucf0adPn/xWwvTp03n22WdJTEykdu3a+S2M4cOH079/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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Cython histogramming without pixels splitting.\n", "\n", "kwarg = {\"npt\":npt, \n", " \"method\": (\"no\", \"histogram\", \"cython\"),\n", " \"correctSolidAngle\":True, \n", " \"polarization_factor\":0.95,\n", " \"safe\":False}\n", "a = plot_distribution(ai, kwarg, integrate=ai._integrate1d_ng)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# OpenCL histogramming without pixels splitting.\n", "\n", "kwarg = {\"npt\":npt, \n", " \"method\": (\"no\", \"histogram\", \"opencl\"),\n", " \"correctSolidAngle\":True, \n", " \"polarization_factor\":0.95,\n", " \"safe\":False}\n", "a = plot_distribution(ai, kwarg, integrate=ai._integrate1d_ng)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "\n", "PyFAI's historical version (version <=0.16) has been providing proper error propagation ONLY in the case where any normalization (solid angle, flatfield, polarization, ...) and pixel splitting was DISABLED. \n", "This notebook demonstrates the correctness of the new integrator.\n", "Moreover the fact the normalization is performed as part of the integration is a major issue as almost any commercial detector comes with flatfield correction already applied." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total execution time: 1313.869 s\n" ] } ], "source": [ "print(f\"Total execution time: {time.perf_counter()-start_time:.3f} s\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.1" } }, "nbformat": 4, "nbformat_minor": 1 }