--- /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"