--- /srv/reproducible-results/rbuild-debian/r-b-build.gOPnh4aH/b1/pyfai_0.21.3+dfsg1-4_armhf.changes +++ /srv/reproducible-results/rbuild-debian/r-b-build.gOPnh4aH/b2/pyfai_0.21.3+dfsg1-4_armhf.changes ├── Files │ @@ -1,5 +1,5 @@ │ │ - 863acfb59c5724d058809831fe72d9c4 14636 science optional pyfai_0.21.3+dfsg1-4_all.deb │ - fd9058ddaddb930678e6884db17086f8 72886592 doc optional python-pyfai-doc_0.21.3+dfsg1-4_all.deb │ + 3533ed540fdb7780675d961160dcf1a9 14632 science optional pyfai_0.21.3+dfsg1-4_all.deb │ + 5c2adf567132efaeea06653cd6224829 72886060 doc optional python-pyfai-doc_0.21.3+dfsg1-4_all.deb │ 57c7b3db76c801e397ca322b7340f3d8 13103868 debug optional python3-pyfai-dbgsym_0.21.3+dfsg1-4_armhf.deb │ 0699ec33cfdb40c17c741401efca758f 2071064 python optional python3-pyfai_0.21.3+dfsg1-4_armhf.deb ├── pyfai_0.21.3+dfsg1-4_all.deb │ ├── file list │ │ @@ -1,3 +1,3 @@ │ │ -rw-r--r-- 0 0 0 4 2023-02-22 12:27:09.000000 debian-binary │ │ -rw-r--r-- 0 0 0 1760 2023-02-22 12:27:09.000000 control.tar.xz │ │ --rw-r--r-- 0 0 0 12684 2023-02-22 12:27:09.000000 data.tar.xz │ │ +-rw-r--r-- 0 0 0 12680 2023-02-22 12:27:09.000000 data.tar.xz │ ├── control.tar.xz │ │ ├── control.tar │ │ │ ├── ./md5sums │ │ │ │ ├── ./md5sums │ │ │ │ │┄ Files differ │ ├── data.tar.xz │ │ ├── data.tar │ │ │ ├── file list │ │ │ │ @@ -25,12 +25,12 @@ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1913 2023-02-22 12:27:09.000000 ./usr/share/doc/pyfai/changelog.Debian.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 55 2022-03-24 14:24:27.000000 ./usr/share/doc/pyfai/changelog.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 3790 2023-02-19 12:38:42.000000 ./usr/share/doc/pyfai/copyright │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2023-02-22 12:27:09.000000 ./usr/share/man/ │ │ │ │ drwxr-xr-x 0 root (0) root (0) 0 2023-02-22 12:27:09.000000 ./usr/share/man/man1/ │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1708 2023-02-22 12:27:09.000000 ./usr/share/man/man1/MX-calibrate.1.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 797 2023-02-22 12:27:09.000000 ./usr/share/man/man1/check_calib.1.gz │ │ │ │ --rw-r--r-- 0 root (0) root (0) 839 2023-02-22 12:27:09.000000 ./usr/share/man/man1/detector2nexus.1.gz │ │ │ │ +-rw-r--r-- 0 root (0) root (0) 838 2023-02-22 12:27:09.000000 ./usr/share/man/man1/detector2nexus.1.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1350 2023-02-22 12:27:09.000000 ./usr/share/man/man1/diff_map.1.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1211 2023-02-22 12:27:09.000000 ./usr/share/man/man1/diff_tomo.1.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 411 2023-02-22 12:27:09.000000 ./usr/share/man/man1/eiger-mask.1.gz │ │ │ │ -rw-r--r-- 0 root (0) root (0) 1148 2023-02-22 12:27:09.000000 ./usr/share/man/man1/pyFAI-average.1.gz │ │ │ ├── ./usr/share/man/man1/detector2nexus.1.gz │ │ │ │ ├── detector2nexus.1 │ │ │ │ │ @@ -1,13 +1,13 @@ │ │ │ │ │ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. │ │ │ │ │ .TH DETECTOR2NEXUS', "1" "February 2023" "detector2nexus', '--version']" "User Commands" │ │ │ │ │ .SH NAME │ │ │ │ │ detector2nexus', \- Converts a detector description into a NeXus detector usable by other pyFAI utilities │ │ │ │ │ .SH DESCRIPTION │ │ │ │ │ -['/tmp/tmpdc7zxf4d/detector2nexus', '\-\-help'] │ │ │ │ │ +['/tmp/tmpyqd3dg4r/detector2nexus', '\-\-help'] │ │ │ │ │ usage: detector2nexus [options] [options] \fB\-o\fR nxs.h5 │ │ │ │ │ .PP │ │ │ │ │ Convert a complex detector definition (multiple modules, possibly in 3D) into │ │ │ │ │ a single NeXus detector definition together with the mask (and much more in │ │ │ │ │ the future) │ │ │ │ │ .SS "options:" │ │ │ │ │ .TP ├── python-pyfai-doc_0.21.3+dfsg1-4_all.deb │ ├── file list │ │ @@ -1,3 +1,3 @@ │ │ -rw-r--r-- 0 0 0 4 2023-02-22 12:27:09.000000 debian-binary │ │ -rw-r--r-- 0 0 0 11672 2023-02-22 12:27:09.000000 control.tar.xz │ │ --rw-r--r-- 0 0 0 72874728 2023-02-22 12:27:09.000000 data.tar.xz │ │ +-rw-r--r-- 0 0 0 72874196 2023-02-22 12:27:09.000000 data.tar.xz │ ├── control.tar.xz │ │ ├── control.tar │ │ │ ├── ./md5sums │ │ │ │ ├── ./md5sums │ │ │ │ │┄ Files differ │ ├── data.tar.xz │ │ ├── data.tar │ │ │ ├── ./usr/share/doc/python-pyfai-doc/html/api/pyFAI.html │ │ │ │ @@ -5652,15 +5652,15 @@ │ │ │ │

calibrant Module

│ │ │ │

Calibrant

│ │ │ │

A module containing classical calibrant and also tools to generate d-spacing.

│ │ │ │

Interesting formula: │ │ │ │ http://geoweb3.princeton.edu/research/MineralPhy/xtalgeometry.pdf

│ │ │ │
│ │ │ │
│ │ │ │ -pyFAI.calibrant.CALIBRANT_FACTORY = Calibrants available: alpha_Al2O3, Si_SRM640e, cristobaltite, Si_SRM640b, CrOx, mock, TiO2, NaCl, Si_SRM640a, quartz, Si, Ni, Al, C14H30O, CuO, LaB6, Si_SRM640, ZnO, Au, AgBh, LaB6_SRM660a, Pt, Si_SRM640c, hydrocerussite, PBBA, LaB6_SRM660c, Si_SRM640d, CeO2, LaB6_SRM660b, Cr2O3
│ │ │ │ +pyFAI.calibrant.CALIBRANT_FACTORY = Calibrants available: LaB6_SRM660c, Si_SRM640, LaB6, Si_SRM640b, PBBA, LaB6_SRM660b, TiO2, CuO, Al, CeO2, Cr2O3, mock, CrOx, ZnO, AgBh, LaB6_SRM660a, cristobaltite, Au, Si_SRM640d, Si_SRM640a, quartz, Pt, Si, hydrocerussite, alpha_Al2O3, C14H30O, Si_SRM640c, NaCl, Ni, Si_SRM640e │ │ │ │

Default calibration factory provided by the library.

│ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │
│ │ │ │ class pyFAI.calibrant.Calibrant(filename=None, dSpacing=None, wavelength=None)
│ │ │ │

Bases: object

│ │ │ │ ├── html2text {} │ │ │ │ │ @@ -3488,19 +3488,19 @@ │ │ │ │ │ pyFAI.blob_detection.make_gaussian(im, sigma, xc, yc) │ │ │ │ │ │ │ │ │ │ ***** calibrant Module ***** │ │ │ │ │ Calibrant │ │ │ │ │ A module containing classical calibrant and also tools to generate d-spacing. │ │ │ │ │ Interesting formula: http://geoweb3.princeton.edu/research/MineralPhy/ │ │ │ │ │ xtalgeometry.pdf │ │ │ │ │ - pyFAI.calibrant.CALIBRANT_FACTORY= Calibrants available: alpha_Al2O3, │ │ │ │ │ - Si_SRM640e, cristobaltite, Si_SRM640b, CrOx, mock, TiO2, NaCl, Si_SRM640a, │ │ │ │ │ - quartz, Si, Ni, Al, C14H30O, CuO, LaB6, Si_SRM640, ZnO, Au, AgBh, │ │ │ │ │ - LaB6_SRM660a, Pt, Si_SRM640c, hydrocerussite, PBBA, LaB6_SRM660c, Si_SRM640d, │ │ │ │ │ - CeO2, LaB6_SRM660b, Cr2O3 │ │ │ │ │ + pyFAI.calibrant.CALIBRANT_FACTORY= Calibrants available: LaB6_SRM660c, │ │ │ │ │ + Si_SRM640, LaB6, Si_SRM640b, PBBA, LaB6_SRM660b, TiO2, CuO, Al, CeO2, Cr2O3, │ │ │ │ │ + mock, CrOx, ZnO, AgBh, LaB6_SRM660a, cristobaltite, Au, Si_SRM640d, │ │ │ │ │ + Si_SRM640a, quartz, Pt, Si, hydrocerussite, alpha_Al2O3, C14H30O, Si_SRM640c, │ │ │ │ │ + NaCl, Ni, Si_SRM640e │ │ │ │ │ Default calibration factory provided by the library. │ │ │ │ │ classpyFAI.calibrant.Calibrant(filename=None, dSpacing=None, │ │ │ │ │ wavelength=None) │ │ │ │ │ Bases: object │ │ │ │ │ A calibrant is a reference compound where the d-spacing (interplanar │ │ │ │ │ distances) are known. They are expressed in Angstrom (in the file) │ │ │ │ │ __init__(filename=None, dSpacing=None, wavelength=None) │ │ │ ├── ./usr/share/doc/python-pyfai-doc/html/searchindex.js │ │ │ │ ├── js-beautify {} │ │ │ │ │ @@ -3797,41 +3797,41 @@ │ │ │ │ │ "interest": [14, 16, 21, 32, 51, 53, 61, 71, 100, 102], │ │ │ │ │ "geoweb3": [14, 67], │ │ │ │ │ "princeton": [14, 67], │ │ │ │ │ "edu": [14, 17, 38, 43, 65, 67, 100], │ │ │ │ │ "mineralphi": [14, 67], │ │ │ │ │ "xtalgeometri": [14, 67], │ │ │ │ │ "calibrant_factori": [14, 58, 78, 87], │ │ │ │ │ - "alpha_al2o3": [14, 38, 39, 43, 57, 64, 85], │ │ │ │ │ + "lab6_srm660c": [14, 38, 39, 43, 64, 85], │ │ │ │ │ "si_srm640": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "cristobaltit": [14, 38, 39, 43, 64, 85], │ │ │ │ │ + "lab6": [14, 38, 39, 43, 56, 64, 77, 78, 79, 82, 85, 92, 97, 98], │ │ │ │ │ "si_srm640b": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "crox": [14, 38, 39, 43, 64, 68, 85], │ │ │ │ │ - "mock": [14, 38, 39, 43, 64, 85], │ │ │ │ │ + "pbba": [14, 38, 39, 43, 64, 85], │ │ │ │ │ + "lab6_srm660b": [14, 38, 39, 43, 64, 85], │ │ │ │ │ "tio2": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "nacl": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "si_srm640a": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "quartz": [14, 38, 39, 43, 64, 85, 94], │ │ │ │ │ - "si": [14, 38, 39, 43, 64, 67, 85, 94, 96], │ │ │ │ │ - "ni": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "c14h30o": [14, 38, 39, 43, 64, 85], │ │ │ │ │ "cuo": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "lab6": [14, 38, 39, 43, 56, 64, 77, 78, 79, 82, 85, 92, 97, 98], │ │ │ │ │ + "ceo2": [14, 19, 29, 38, 39, 43, 64, 73, 80, 85, 93, 94], │ │ │ │ │ + "cr2o3": [14, 38, 39, 43, 64, 68, 85], │ │ │ │ │ + "mock": [14, 38, 39, 43, 64, 85], │ │ │ │ │ + "crox": [14, 38, 39, 43, 64, 68, 85], │ │ │ │ │ "zno": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "au": [14, 38, 39, 43, 64, 78, 85, 97], │ │ │ │ │ "agbh": [14, 18, 38, 39, 43, 58, 64, 67, 76, 85, 87], │ │ │ │ │ "lab6_srm660a": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "si_srm640c": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "hydrocerussit": [14, 38, 39, 43, 65], │ │ │ │ │ - "pbba": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "lab6_srm660c": [14, 38, 39, 43, 64, 85], │ │ │ │ │ + "cristobaltit": [14, 38, 39, 43, 64, 85], │ │ │ │ │ + "au": [14, 38, 39, 43, 64, 78, 85, 97], │ │ │ │ │ "si_srm640d": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "ceo2": [14, 19, 29, 38, 39, 43, 64, 73, 80, 85, 93, 94], │ │ │ │ │ - "lab6_srm660b": [14, 38, 39, 43, 64, 85], │ │ │ │ │ - "cr2o3": [14, 38, 39, 43, 64, 68, 85], │ │ │ │ │ + "si_srm640a": [14, 38, 39, 43, 64, 85], │ │ │ │ │ + "quartz": [14, 38, 39, 43, 64, 85, 94], │ │ │ │ │ + "si": [14, 38, 39, 43, 64, 67, 85, 94, 96], │ │ │ │ │ + "hydrocerussit": [14, 38, 39, 43, 65], │ │ │ │ │ + "alpha_al2o3": [14, 38, 39, 43, 57, 64, 85], │ │ │ │ │ + "c14h30o": [14, 38, 39, 43, 64, 85], │ │ │ │ │ + "si_srm640c": [14, 38, 39, 43, 64, 85], │ │ │ │ │ + "nacl": [14, 38, 39, 43, 64, 85], │ │ │ │ │ + "ni": [14, 38, 39, 43, 64, 85], │ │ │ │ │ "compound": [14, 18, 46, 55, 57, 67, 68, 71, 72, 73], │ │ │ │ │ "interplanar": 14, │ │ │ │ │ "append_2th": 14, │ │ │ │ │ "append_dspac": 14, │ │ │ │ │ "count_registered_dspac": 14, │ │ │ │ │ "positon": 14, │ │ │ │ │ "fake_calibration_imag": [14, 64, 76, 82, 85], │ │ │ ├── ./usr/share/doc/python-pyfai-doc/html/usage/tutorial/Separation/Separate.ipynb.gz │ │ │ │ ├── Separate.ipynb │ │ │ │ │ ├── Pretty-printed │ │ │ │ │ │┄ Similarity: 0.9879166666666667% │ │ │ │ │ │┄ Differences: {"'cells'": "{0: {'id': '6d4fdc7d'}, 1: {'id': 'e9ad284b'}, 2: {'id': '86e4bb18'}, 3: {'id': " │ │ │ │ │ │┄ "'c420c604'}, 4: {'id': '9df6785f'}, 5: {'id': '0e3f9bd2'}, 6: {'id': 'df9e4144'}, 7: " │ │ │ │ │ │┄ "{'id': 'dd2a7019'}, 8: {'id': '4b0881d2'}, 9: {'id': 'f7cf55bb'}, 10: {'id': " │ │ │ │ │ │┄ "'686b1b3a'}, 11: {'id': 'aa7d1a73'}, 12: {'id': '2aed5ddc'}, 13: {'id': '66bf3381'}, " │ │ │ │ │ │┄ "14: {'id': 'bd594c98'}, 15: {'id': 'c0d35463'}, 16: {'id': 'a94d48af'}, 17: {'id': " │ │ │ │ │ │┄ "'9671843c'}, 1 […] │ │ │ │ │ │ @@ -1,32 +1,32 @@ │ │ │ │ │ │ { │ │ │ │ │ │ "cells": [ │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "markdown", │ │ │ │ │ │ - "id": "786528a7", │ │ │ │ │ │ + "id": "6d4fdc7d", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "# Signal separation between amorphous and crystalline phases\n", │ │ │ │ │ │ "\n" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 1, │ │ │ │ │ │ - "id": "c56c2994", │ │ │ │ │ │ + "id": "e9ad284b", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "%matplotlib nbagg" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 2, │ │ │ │ │ │ - "id": "ae41aaf8", │ │ │ │ │ │ + "id": "86e4bb18", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "name": "stdout", │ │ │ │ │ │ "output_type": "stream", │ │ │ │ │ │ "text": [ │ │ │ │ │ │ "Using pyFAI version 0.21.0-dev0\n" │ │ │ │ │ │ @@ -54,15 +54,15 @@ │ │ │ │ │ │ "print(f\"Using pyFAI version {pyFAI.version}\")\n", │ │ │ │ │ │ "#print(fabio.open(image_file).header[\"_array_data.header_contents\"])" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 3, │ │ │ │ │ │ - "id": "df42a046", │ │ │ │ │ │ + "id": "c420c604", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "text/plain": [ │ │ │ │ │ │ "Detector Pilatus 6M\t PixelSize= 1.720e-04, 1.720e-04 m\n", │ │ │ │ │ │ "Wavelength= 1.033200e-10m\n", │ │ │ │ │ │ @@ -84,15 +84,15 @@ │ │ │ │ │ │ "ai.detector = pyFAI.detector_factory(\"Pilatus6M\")\n", │ │ │ │ │ │ "ai" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 4, │ │ │ │ │ │ - "id": "e73a30bd", │ │ │ │ │ │ + "id": "9df6785f", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "application/javascript": [ │ │ │ │ │ │ "/* Put everything inside the global mpl namespace */\n", │ │ │ │ │ │ "/* global mpl */\n", │ │ │ │ │ │ @@ -1069,24 +1069,24 @@ │ │ │ │ │ │ "fig,ax = subplots(figsize=(9,9))\n", │ │ │ │ │ │ "jupyter.display(img, ax=ax)\n", │ │ │ │ │ │ "pass" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "markdown", │ │ │ │ │ │ - "id": "9df98d2a", │ │ │ │ │ │ + "id": "0e3f9bd2", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "## 0. 1D and 2D integration" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 5, │ │ │ │ │ │ - "id": "07967a68", │ │ │ │ │ │ + "id": "df9e4144", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "application/javascript": [ │ │ │ │ │ │ "/* Put everything inside the global mpl namespace */\n", │ │ │ │ │ │ "/* global mpl */\n", │ │ │ │ │ │ @@ -2078,30 +2078,30 @@ │ │ │ │ │ │ "jupyter.plot2d(int2, ax=ax[1])\n", │ │ │ │ │ │ "ax[0].set_xlim(int2.radial.min(), int2.radial.max())\n", │ │ │ │ │ │ "pass" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "markdown", │ │ │ │ │ │ - "id": "41c38244", │ │ │ │ │ │ + "id": "dd2a7019", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "## 1. Separation based on 2D integration\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "Two methods are readily available in pyFAI, they perform filtering the 2D regrouped image along a vertical axis:\n", │ │ │ │ │ │ "* median filtering: simple median along azimuthal angle\n", │ │ │ │ │ │ "* sigma clipping: iterative removal of all pixels above n standard deviation\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "The drawback is in the 2D integration: costly in time and smears pixel together." │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 6, │ │ │ │ │ │ - "id": "d949029f", │ │ │ │ │ │ + "id": "4b0881d2", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "application/javascript": [ │ │ │ │ │ │ "/* Put everything inside the global mpl namespace */\n", │ │ │ │ │ │ "/* global mpl */\n", │ │ │ │ │ │ @@ -3108,29 +3108,29 @@ │ │ │ │ │ │ "ax.plot(sc2.radial, sc2.intensity, label=\"sigma-clip (legacy)\")\n", │ │ │ │ │ │ "ax.legend()\n", │ │ │ │ │ │ "pass" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "markdown", │ │ │ │ │ │ - "id": "110ba98f", │ │ │ │ │ │ + "id": "f7cf55bb", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "## 2. Separation based on 1D integration:\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "1D CSR integrator contain all the information to perform the sigma-clipping. This has been implemented in OpenCL and can be performed up to thousands of times per second.\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "* Available using OpenCL (no cython yet)\n", │ │ │ │ │ │ "* Presentation of how it can be implemented is explained later in the demonstration" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 7, │ │ │ │ │ │ - "id": "9237cd07", │ │ │ │ │ │ + "id": "686b1b3a", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "application/javascript": [ │ │ │ │ │ │ "/* Put everything inside the global mpl namespace */\n", │ │ │ │ │ │ "/* global mpl */\n", │ │ │ │ │ │ @@ -4131,26 +4131,26 @@ │ │ │ │ │ │ "ax.plot(sc100.radial, sc100.intensity, label=\"sigma-clip 100pts\")\n", │ │ │ │ │ │ "ax.legend()\n", │ │ │ │ │ │ "pass" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "markdown", │ │ │ │ │ │ - "id": "4be7d96f", │ │ │ │ │ │ + "id": "aa7d1a73", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "## 3. Rebuild the isotropic and anisotropic contribution\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "Isotropic images are simply obtained from bilinear interpolation from 1D curves." │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 8, │ │ │ │ │ │ - "id": "8485dae7", │ │ │ │ │ │ + "id": "2aed5ddc", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "application/javascript": [ │ │ │ │ │ │ "/* Put everything inside the global mpl namespace */\n", │ │ │ │ │ │ "/* global mpl */\n", │ │ │ │ │ │ @@ -5129,15 +5129,15 @@ │ │ │ │ │ │ "jupyter.display(isotropic, label=\"Anisotropic contribution\")\n", │ │ │ │ │ │ "pass" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 9, │ │ │ │ │ │ - "id": "b4055f18", │ │ │ │ │ │ + "id": "66bf3381", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "application/javascript": [ │ │ │ │ │ │ "/* Put everything inside the global mpl namespace */\n", │ │ │ │ │ │ "/* global mpl */\n", │ │ │ │ │ │ @@ -6115,15 +6115,15 @@ │ │ │ │ │ │ "jupyter.display(aniso, label=\"Anisotropic contribution\")\n", │ │ │ │ │ │ "pass" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 10, │ │ │ │ │ │ - "id": "90e9324c", │ │ │ │ │ │ + "id": "bd594c98", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "application/javascript": [ │ │ │ │ │ │ "/* Put everything inside the global mpl namespace */\n", │ │ │ │ │ │ "/* global mpl */\n", │ │ │ │ │ │ @@ -7104,26 +7104,26 @@ │ │ │ │ │ │ "jupyter.display(bragg, label=\"Bragg\", ax=ax[0])\n", │ │ │ │ │ │ "jupyter.display(amorphous, label=\"Amorphous\", ax=ax[1])\n", │ │ │ │ │ │ "pass" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "markdown", │ │ │ │ │ │ - "id": "bb9068a4", │ │ │ │ │ │ + "id": "c0d35463", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "## 4. Implementation of sigma-clipping using pure 1D integrators.\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "This is a workaround until it is implemented in pyFAI. The procedure mimics what is running in OpenCL." │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 11, │ │ │ │ │ │ - "id": "974b651e", │ │ │ │ │ │ + "id": "a94d48af", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [], │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "def sigma_clip_ng(ai, img, npt, method, unit=\"q_nm^-1\", error_model=None, thres=5, max_iter=5):\n", │ │ │ │ │ │ " img = img.astype(numpy.float32) #also explicit copy\n", │ │ │ │ │ │ " if error_model!=\"poisson\":\n", │ │ │ │ │ │ " raise RuntimeError(\"Only Poissonian detector are supported for now\")\n", │ │ │ │ │ │ @@ -7137,15 +7137,15 @@ │ │ │ │ │ │ " img[discard] = numpy.NaN\n", │ │ │ │ │ │ " return res1d" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 12, │ │ │ │ │ │ - "id": "d3b128a6", │ │ │ │ │ │ + "id": "9671843c", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "application/javascript": [ │ │ │ │ │ │ "/* Put everything inside the global mpl namespace */\n", │ │ │ │ │ │ "/* global mpl */\n", │ │ │ │ │ │ @@ -8147,15 +8147,15 @@ │ │ │ │ │ │ "ax.plot(sc100.radial, sc100.intensity, label=\"sigma-clip 100pts\")\n", │ │ │ │ │ │ "ax.legend()\n", │ │ │ │ │ │ "pass" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "markdown", │ │ │ │ │ │ - "id": "277a374d", │ │ │ │ │ │ + "id": "beb72b13", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "## 5. Towards lossy compression of single crystal diffraction data\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "For now only available as OpenCL code. \n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "Also available as command line tool, see `man sparsify-Bragg`:\n", │ │ │ │ │ │ @@ -8164,15 +8164,15 @@ │ │ │ │ │ │ "* 2000 pixels with signal above the background\n", │ │ │ │ │ │ "* 100 radial bins with intensity and associated deviation" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 13, │ │ │ │ │ │ - "id": "3f4dc264", │ │ │ │ │ │ + "id": "a0f5e6c1", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "name": "stdout", │ │ │ │ │ │ "output_type": "stream", │ │ │ │ │ │ "text": [ │ │ │ │ │ │ "IntegrationMethod(1d int, no split, CSR, cython)\n", │ │ │ │ │ │ @@ -8198,15 +8198,15 @@ │ │ │ │ │ │ "%time sep = peak_finder(img, error_model=\"poisson\")\n", │ │ │ │ │ │ "print(f\"Number of Bragg pixels found: {len(sep.index)}\")" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 14, │ │ │ │ │ │ - "id": "035462aa", │ │ │ │ │ │ + "id": "28c61ced", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "name": "stdout", │ │ │ │ │ │ "output_type": "stream", │ │ │ │ │ │ "text": [ │ │ │ │ │ │ "CPU times: user 349 ms, sys: 27.6 ms, total: 377 ms\n", │ │ │ │ │ │ @@ -8225,15 +8225,15 @@ │ │ │ │ │ │ "restored_flat[sep.index] = sep.intensity\n", │ │ │ │ │ │ "restored = numpy.round(restored).astype(numpy.int32)" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 15, │ │ │ │ │ │ - "id": "dc981b81", │ │ │ │ │ │ + "id": "31061779", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "data": { │ │ │ │ │ │ "application/javascript": [ │ │ │ │ │ │ "/* Put everything inside the global mpl namespace */\n", │ │ │ │ │ │ "/* global mpl */\n", │ │ │ │ │ │ @@ -9212,15 +9212,15 @@ │ │ │ │ │ │ "jupyter.display(restored, label=\"Restored\", ax=ax[1])\n", │ │ │ │ │ │ "pass" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 16, │ │ │ │ │ │ - "id": "16a9e8dc", │ │ │ │ │ │ + "id": "7d92ad70", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "name": "stdout", │ │ │ │ │ │ "output_type": "stream", │ │ │ │ │ │ "text": [ │ │ │ │ │ │ "The compression ratio would be : 160.968x\n" │ │ │ │ │ │ @@ -9231,30 +9231,30 @@ │ │ │ │ │ │ "raw_size = img.nbytes\n", │ │ │ │ │ │ "cmp_size = sep.index.nbytes + sep.intensity.nbytes + sep.background_avg.nbytes + sep.background_std.nbytes\n", │ │ │ │ │ │ "print(f\"The compression ratio would be : {raw_size/cmp_size:.3f}x\")" │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "markdown", │ │ │ │ │ │ - "id": "0aabac00", │ │ │ │ │ │ + "id": "06af60ce", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "source": [ │ │ │ │ │ │ "## 6. Conclusion\n", │ │ │ │ │ │ "\n", │ │ │ │ │ │ "This tutorial explains how single crystal diffraction images can be treated to separate the amorphous content from Bragg peaks.\n", │ │ │ │ │ │ "The first method has extensively been described in `J Kieffer & J.P. Wright; Powder Diffraction (2013) 28 (S2), pp339-350`\n", │ │ │ │ │ │ "Subsequent ones have been developed with Gavin Vaughan (ESRF ID15) and Daniele De Sanctis (ESRF ID29).\n", │ │ │ │ │ │ "Those methods open the door to lossy compression in the world of single crystal diffraction with compression rates above 100x which makes them appealing for serial-crystallography applications where bandwidth is critical. \n", │ │ │ │ │ │ "First experimentation shows a limited degradation of " │ │ │ │ │ │ ] │ │ │ │ │ │ }, │ │ │ │ │ │ { │ │ │ │ │ │ "cell_type": "code", │ │ │ │ │ │ "execution_count": 17, │ │ │ │ │ │ - "id": "dc24ad42", │ │ │ │ │ │ + "id": "58234d2d", │ │ │ │ │ │ "metadata": {}, │ │ │ │ │ │ "outputs": [ │ │ │ │ │ │ { │ │ │ │ │ │ "name": "stdout", │ │ │ │ │ │ "output_type": "stream", │ │ │ │ │ │ "text": [ │ │ │ │ │ │ "Total execution time: 9.682s \n"