LiberTEM/LiberTEM

View on GitHub
examples/sparse_udf.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "7eca3226",
   "metadata": {},
   "source": [
    "# Sparse processing with LiberTEM\n",
    "\n",
    "This notebook demonstrates support for sparse data in LiberTEM, both the generation of sparse data from such formats, and the processing of these data using both sparse-compatible and -incompatible UDFs.\n",
    "\n",
    "Additionally, the notebook demonstrates sparse-GPU-array support, which requires a working CUDA/CuPy installation to run correctly.\n",
    "\n",
    "Some preliminaries:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e1d5bcbf",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:22.050991Z",
     "iopub.status.busy": "2023-06-29T12:46:22.050856Z",
     "iopub.status.idle": "2023-06-29T12:46:22.351403Z",
     "shell.execute_reply": "2023-06-29T12:46:22.350806Z"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import pathlib\n",
    "import tempfile"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "db764011",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:22.354215Z",
     "iopub.status.busy": "2023-06-29T12:46:22.353823Z",
     "iopub.status.idle": "2023-06-29T12:46:22.356572Z",
     "shell.execute_reply": "2023-06-29T12:46:22.356151Z"
    }
   },
   "outputs": [],
   "source": [
    "# Write files in a temporary directory\n",
    "# Not guaranteed to be cleaned up in a Notebook in *all* circumstances\n",
    "td = tempfile.TemporaryDirectory()\n",
    "workdir = pathlib.Path(td.name)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "769c267a",
   "metadata": {},
   "source": [
    "## Create some example data\n",
    "\n",
    "For our sparse input data we'll mock some diffraction data of the type you might acquire with a direct electron camera (low count, many zeros):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d09613a4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:22.358370Z",
     "iopub.status.busy": "2023-06-29T12:46:22.358239Z",
     "iopub.status.idle": "2023-06-29T12:46:22.398654Z",
     "shell.execute_reply": "2023-06-29T12:46:22.398087Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import skimage.draw as skdraw\n",
    "\n",
    "nav_shape = (8, 32)\n",
    "sig_shape = (64, 64)\n",
    "# For a bit of interest we will mock a quantum well-like structure\n",
    "# with a different brightfield intensity and a beam shift\n",
    "qw_region = (14, 19)\n",
    "radius = 8\n",
    "qw_shift = {qw_region[0]: (0, -1), qw_region[1] - 1: (0, 1)}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "bc28547c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:22.401402Z",
     "iopub.status.busy": "2023-06-29T12:46:22.400943Z",
     "iopub.status.idle": "2023-06-29T12:46:22.404971Z",
     "shell.execute_reply": "2023-06-29T12:46:22.404544Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_diff_frame(dim, radius, shift_yx=(0, 0), intensity=3, bkg_sparsity=0.9):\n",
    "    \"\"\"Return a single diffraction spot with Poisson-esque noise characteristics\"\"\"\n",
    "    bkg = np.random.poisson(lam=1, size=(dim, dim))\n",
    "    bkg_mask = np.random.choice([0, 1], p=(bkg_sparsity, 1-bkg_sparsity), size=(dim, dim))\n",
    "    disk = np.random.poisson(lam=intensity, size=(dim, dim))\n",
    "    rr, cc = skdraw.disk((dim // 2 + shift_yx[0], dim // 2 + shift_yx[1]), int(radius))\n",
    "    disk_mask = np.zeros((dim, dim))\n",
    "    disk_mask[rr, cc] = 1\n",
    "    return np.minimum(bkg * bkg_mask + disk * disk_mask, 255).astype(np.uint8)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c23e929",
   "metadata": {},
   "source": [
    "Build the data cube frame-by-frame:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "78a0d9ad",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:22.406714Z",
     "iopub.status.busy": "2023-06-29T12:46:22.406586Z",
     "iopub.status.idle": "2023-06-29T12:46:22.558132Z",
     "shell.execute_reply": "2023-06-29T12:46:22.557523Z"
    }
   },
   "outputs": [],
   "source": [
    "dense_data = np.zeros(nav_shape + sig_shape, dtype=np.uint8)\n",
    "\n",
    "for y in range(nav_shape[0]):\n",
    "    for x in range(nav_shape[1]):\n",
    "        dense_data[y, x] = get_diff_frame(\n",
    "            sig_shape[0],\n",
    "            radius,\n",
    "            shift_yx=qw_shift.get(x, (0, 0)),\n",
    "            intensity=4 if x in range(*qw_region) else 3,\n",
    "        )"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ff3236f",
   "metadata": {},
   "source": [
    "Plot the first frame to see how it looks:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "ef35f583",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:22.560434Z",
     "iopub.status.busy": "2023-06-29T12:46:22.560302Z",
     "iopub.status.idle": "2023-06-29T12:46:22.765469Z",
     "shell.execute_reply": "2023-06-29T12:46:22.764949Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Example frame')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd4AAAGzCAYAAACB9HZHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABBp0lEQVR4nO3de3gTVf4/8HdaaFqBpBRo2kpbys1SkIsFagEXxQL2CzwgeFkX1wooCuW+66X+VlBZCLor1kstomxBhO2KX8HVXWGhSvmq5VZhFy8LBQp0gbai9EKFtiTn9weSNWQCmc5kkkner+eZR3oylzPJJB/Pmc+cYxBCCBAREZEmQnxdASIiomDCwEtERKQhBl4iIiINMfASERFpiIGXiIhIQwy8REREGmLgJSIi0hADLxERkYYYeImIiDTEwEvkZdu3b4fBYMD27dtV22dVVRXuuusudOjQAQaDAbm5uartm4i8i4GXfGr16tUwGAxul507d/q6in5p/vz52LJlC3JycrB27Vrccccdvq4SEXmola8rQAQAzz33HJKSklzKu3fv7oPa+L9PPvkE48ePx29/+1tfV4WIZGLgJb+QmZmJgQMH+roaulFdXY3IyMhrrtfQ0IA2bdp4v0JE5DF2NZMuLFq0CCEhISgqKnIqnz59OsLCwvDPf/4TANDU1ISFCxciNTUVZrMZbdq0wS233IJPP/3Uabtjx47BYDDgj3/8I/Ly8tC1a1dcd911GDVqFCoqKiCEwOLFi9G5c2dERERg/Pjx+OGHH5z20aVLF4wdOxb/+Mc/0L9/f4SHhyMlJQXvv/++R+e0a9cu3HHHHTCbzbjuuuswfPhwfP7551fd5nLXvBACeXl5ji75n79WXFyMmTNnIjo6Gp07dwYAHD9+HDNnzsQNN9yAiIgIdOjQAXfffTeOHTsmuf/PPvsMc+bMQadOnRAZGYlHHnkETU1NqKmpwQMPPID27dujffv2ePzxx3HlBGd2ux25ubno3bs3wsPDYbFY8Mgjj+Ds2bMevS9EAU8Q+VBBQYEAILZt2ya+++47p+XMmTOO9ZqamsSAAQNEYmKiqKurE0IIsXnzZgFALF682LHed999J2JjY8WCBQtEfn6+eOGFF8QNN9wgWrduLfbt2+dYr7y8XAAQ/fv3FykpKWL58uXid7/7nQgLCxM333yzeOqpp8SQIUPEK6+8IubMmSMMBoOYMmWKU90TExNFz549RWRkpHjyySfF8uXLxY033ihCQkLEP/7xD8d6n376qQAgPv30U0dZUVGRCAsLE+np6eLFF18UL730kujbt68ICwsTu3btcvt+HTlyRKxdu1YAECNHjhRr164Va9eudXovU1JSxPDhw8Wrr74qli1bJoQQYsOGDaJfv35i4cKFYuXKleKpp54S7du3F4mJiaKhocHl8+jfv7+44447RF5envj1r38tAIjHH39cDBs2TPzqV78Sr7/+uhg7dqwAINasWeNUx4ceeki0atVKPPzww2LFihXiiSeeEG3atBGDBg0STU1N17okiAIeAy/51OUfeqnFaDQ6rXvgwAERFhYmHnroIXH27Flx/fXXi4EDB4rm5mbHOhcvXhSNjY1O2509e1ZYLBYxdepUR9nlwNupUydRU1PjKM/JyREARL9+/Zz2e99994mwsDBx4cIFR1liYqIAIP73f//XUVZbWytiY2PFgAEDHGVXBl673S569OghRo8eLex2u2O9H3/8USQlJYmRI0de830DILKzsyXfy2HDhomLFy86vfbjjz+67KOkpEQAEG+//bbLPq6sW3p6ujAYDOLRRx91lF28eFF07txZDB8+3FH2f//3fwKAWLdundOxLv9P0pXlRMGIXc3kF/Ly8rB161an5eOPP3Zap0+fPnj22Wfx1ltvYfTo0Thz5gzWrFmDVq3+m6oQGhqKsLAwAJe6PH/44QdcvHgRAwcOxJdffuly3Lvvvhtms9nxd1paGgDg/vvvd9pvWloampqacPLkSaft4+LicOeddzr+NplMeOCBB7Bv3z5UVlZKnuv+/ftRVlaGX/3qV/j+++9x5swZnDlzBg0NDbj99tuxY8cO2O12T986Fw8//DBCQ0OdyiIiIhz/bm5uxvfff4/u3bsjMjJS8n2ZNm2aowsbuHT+QghMmzbNURYaGoqBAwfi6NGjjrINGzbAbDZj5MiRjvM6c+YMUlNT0bZtW5cuf6JgxOQq8guDBw/2KLnqscceQ2FhIXbv3o2lS5ciJSXFZZ01a9bgxRdfxL///W80Nzc7yqWyphMSEpz+vhyE4+PjJcuvvE/ZvXt3pwAFAD179gRw6T5yTEyMyzHLysoAAFlZWdInCaC2thbt27d3+/rVSJ3n+fPnYbVaUVBQgJMnTzrdl62trXVZ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dXU1brrpJrRq1QqtWrVCcXExXnnlFbRq1QoWiyUgzvNKkZGR6NmzJw4fPhwwnyUAxMbGIiUlxamsV69ejm71QPsN8md+GXjVmO9Qb5KSkhATE+N0znV1ddi1a5euzlkIgVmzZmHjxo345JNPkJSU5PR6amoqWrdu7XSeBw8exIkTJ3R1nlLsdjsaGxsD5hxvv/12HDhwAPv373csAwcOxOTJkx3/DoTzvNK5c+dw5MgRxMbGBsxnCQBDhw51ebTv0KFDSExMBBA4v0G64OvsLncKCwuF0WgUq1evFt98842YPn26iIyMFJWVlb6uWovV19eLffv2iX379gkAYvny5WLfvn3i+PHjQgghli1bJiIjI8UHH3wg/vWvf4nx48eLpKQkcf78eR/X3HMzZswQZrNZbN++XZw+fdqx/Pjjj451Hn30UZGQkCA++eQTsXfvXpGeni7S09N9WGv5nnzySVFcXCzKy8vFv/71L/Hkk08Kg8Eg/vGPfwghAuMcpfw8q1mIwDjP3/zmN2L79u2ivLxcfP755yIjI0N07NhRVFdXCyEC4xyFEGL37t2iVatWYsmSJaKsrEysW7dOXHfddeKdd95xrBMIv0F64LeBVwghXn31VZGQkCDCwsLE4MGDxc6dO31dJUU+/fRTAcBlycrKEkJcSud/+umnhcViEUajUdx+++3i4MGDvq20TFLnB0AUFBQ41jl//ryYOXOmaN++vbjuuuvEnXfeKU6fPu27SrfA1KlTRWJioggLCxOdOnUSt99+uyPoChEY5yjlysAbCOd57733itjYWBEWFiauv/56ce+994rDhw87Xg+Ec7zsww8/FH369BFGo1EkJyeLlStXOr0eCL9BesD5eImIiDTkl/d4iYiIAhUDLxERkYYYeImIiDTEwEtERKQhBl4iIiINMfASERFpiIGXiIhIQwy8REREGmLgJSIi0hADLxERkYYYeImIiDT0/wFzJCcikPS9/wAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(dense_data[0, 0])\n",
    "plt.colorbar()\n",
    "plt.title('Example frame')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7277030c",
   "metadata": {},
   "source": [
    "Here are some stats about this data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "1e0068d4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:22.767355Z",
     "iopub.status.busy": "2023-06-29T12:46:22.767206Z",
     "iopub.status.idle": "2023-06-29T12:46:22.770355Z",
     "shell.execute_reply": "2023-06-29T12:46:22.769894Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Density: 0.105\n",
      "Byte-size: 1.0 MB\n"
     ]
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "print(f'Density: {np.count_nonzero(dense_data) / dense_data.size:.3f}')\n",
    "print(f'Byte-size: {dense_data.size * dense_data.dtype.itemsize / 2**20} MB')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d8a10b6d",
   "metadata": {},
   "source": [
    "## Storage of raw sparse data on disk (CSR-format)\n",
    "\n",
    "We can use `sparseconverter` to get a sparse representation of this data in Scipy CSR format. At time of writing, the data must be in the form of a 2D array, so we roll the `nav_shape` and `sig_shape` into two flat dimensions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "adc9b046",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:22.772094Z",
     "iopub.status.busy": "2023-06-29T12:46:22.771959Z",
     "iopub.status.idle": "2023-06-29T12:46:23.003288Z",
     "shell.execute_reply": "2023-06-29T12:46:23.002764Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<256x4096 sparse matrix of type '<class 'numpy.uint8'>'\n",
       "\twith 110435 stored elements in Compressed Sparse Row format>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "from sparseconverter import SCIPY_CSR, for_backend\n",
    "\n",
    "# Convert to 2D for scipy.csr_matrix compatibility\n",
    "data_2d = dense_data.reshape(np.prod(nav_shape), np.prod(sig_shape))\n",
    "data_sparse = for_backend(data_2d, SCIPY_CSR)\n",
    "data_sparse"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b090a73",
   "metadata": {},
   "source": [
    "`sparseconverter` provides a unified API for conversion between many sparse array formats in major Python libraries. For this part of the example we will use Scipy CSR as it supports a storage on disk in a raw format directly compatible with LiberTEM.\n",
    "\n",
    "The format is composed of three binary files:\n",
    "\n",
    "- `data`: containing the flattened, nonzero array values, available as `data_sparse.data`\n",
    "- `indices`: containing column indices corresponding to values in `data`, available as `data_sparse.indices`\n",
    "- `indptr`: containing the per-row slices into `data` and `indices`, available as `data_sparse.indptr`\n",
    "\n",
    "(see https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html#scipy.sparse.csr_matrix for more information).\n",
    "\n",
    "We can save these three arrays to disk for processing with LiberTEM's `RawCSRDataSet`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "c784e622",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:23.005209Z",
     "iopub.status.busy": "2023-06-29T12:46:23.004866Z",
     "iopub.status.idle": "2023-06-29T12:46:23.008656Z",
     "shell.execute_reply": "2023-06-29T12:46:23.008221Z"
    }
   },
   "outputs": [],
   "source": [
    "data_sparse.data.tofile(workdir / 'values.raw')\n",
    "data_sparse.indices.tofile(workdir / 'coords.raw')\n",
    "data_sparse.indptr.tofile(workdir / 'indptr.raw')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "504b73bc",
   "metadata": {},
   "source": [
    "The total size of data on disk is:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "64a8c70e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:23.010435Z",
     "iopub.status.busy": "2023-06-29T12:46:23.010053Z",
     "iopub.status.idle": "2023-06-29T12:46:23.012853Z",
     "shell.execute_reply": "2023-06-29T12:46:23.012402Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Size on disk: 0.53 MB\n"
     ]
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "import os\n",
    "print(f\"Size on disk: {sum(os.path.getsize(workdir / f) for f in ('indptr.raw', 'coords.raw', 'values.raw')) / 2**20:.2f} MB\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "aa37a336",
   "metadata": {},
   "source": [
    "which is not a huge saving compared to the dense form, but this will depend on the overall sparsity.\n",
    "\n",
    "To allow LiberTEM to read the data, we also need to create a parameter file containing the metadata for the format, which tells the dataset where to find `indptr`, `coords` and `values`. Here we do this in the code, but normally this would be created in a text editor or by the software generating the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "cbb45874",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:23.014405Z",
     "iopub.status.busy": "2023-06-29T12:46:23.014274Z",
     "iopub.status.idle": "2023-06-29T12:46:23.017166Z",
     "shell.execute_reply": "2023-06-29T12:46:23.016742Z"
    }
   },
   "outputs": [],
   "source": [
    "metadata = f\"\"\"\n",
    "[params]\n",
    "filetype = \"raw_csr\"\n",
    "nav_shape = {list(nav_shape)}\n",
    "sig_shape = {list(sig_shape)}\n",
    "\n",
    "[raw_csr]\n",
    "indptr_file = \"indptr.raw\"\n",
    "indptr_dtype = \"{str(data_sparse.indptr.dtype)}\"\n",
    "\n",
    "indices_file = \"coords.raw\"\n",
    "indices_dtype = \"{str(data_sparse.indices.dtype)}\"\n",
    "\n",
    "data_file = \"values.raw\"\n",
    "data_dtype = \"{str(data_sparse.data.dtype)}\"\n",
    "\"\"\"\n",
    "\n",
    "param_file = workdir / 'sparse.toml'\n",
    "\n",
    "with param_file.open('w') as f:\n",
    "    f.write(metadata)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26fd91fa",
   "metadata": {},
   "source": [
    "The format of the metadata file is TOML (https://toml.io/en/)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f9e7a6a",
   "metadata": {},
   "source": [
    "## Processing with LiberTEM - Standard analyses\n",
    "\n",
    "First we load the dataset using the `raw_csr` format keyword and the path to our sparse CSR parameter file:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "00717c35",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:23.018919Z",
     "iopub.status.busy": "2023-06-29T12:46:23.018601Z",
     "iopub.status.idle": "2023-06-29T12:46:23.362749Z",
     "shell.execute_reply": "2023-06-29T12:46:23.362131Z"
    }
   },
   "outputs": [],
   "source": [
    "import libertem.api as lt\n",
    "\n",
    "ctx = lt.Context.make_with('inline')\n",
    "dataset_csr = ctx.load(\"raw_csr\", path=param_file)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71d530f0",
   "metadata": {},
   "source": [
    "We can get a brightfield-like view of the data using a disk-sum analysis:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "f410f914",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:23.365233Z",
     "iopub.status.busy": "2023-06-29T12:46:23.365084Z",
     "iopub.status.idle": "2023-06-29T12:46:23.618988Z",
     "shell.execute_reply": "2023-06-29T12:46:23.618402Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Brightfield (counts)')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhYAAAEOCAYAAADVKl64AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyiUlEQVR4nO3deXhTdboH8G+aJmkLXehGW6ClRWSxZZda2aWXZWAGxVFUnAFBEC2j4DKC8yBuCKP3etUZBlxGOqMgildEFFQECoMWpFVEVGqBQstSytYN6Jr3/lFzStKmTc45NCl8P8+Tp+S3nN+bt6cnL8lJjkFEBEREREQ68PF0AERERHTlYGFBREREumFhQURERLphYUFERES6YWFBREREumFhQURERLphYUFERES6YWFBREREumFhQURERLphYUF0GR0+fBgGgwHp6emq5/73f/+3phjKy8tx7733IioqCgaDAXPmzNEUV0ZGBgwGAzIyMpodO3z4cAwfPtzlOCMjI7Fy5Uq3Y2qNzpw5gzZt2mDDhg2eDoVIVywsiBqRnp4Og8Fgd4uMjMSIESOwceNGT4fXwIYNG/DUU0812vf8888jPT0d999/P95++2384Q9/aNngXPTKK68gMDAQd9xxh6dDcdlPP/2Ep556CocPH3Z7blhYGO69914sWLBA/8CIPMjX0wEQebNnnnkG8fHxEBGcPHkS6enp+M1vfoP169dj/Pjxzc6Pi4vDxYsXYTKZLmucGzZswNKlSxstLrZs2YIbbrgBCxcuVNpEpEXiclV1dTVeeeUVzJ07F0aj0dPhuOynn37C008/jeHDh6Nz585uz581axZeffVVbNmyBTfddJP+ARJ5AAsLoiaMHTsWAwYMUO5Pnz4d7du3x7vvvttkYVFTUwOr1Qqz2Qw/P7+WCNWpoqIi9OzZ067NYDB4PK5LffLJJzh16hRuv/12T4fSonr06IHExESkp6ezsKArBt8KIXJDSEgI/P394etbX5Nfei7Eyy+/jC5dusBiseCnn35yei7DmjVr0LNnT/j5+SExMRFr167F1KlTnf6v9/XXX1e2e/3112P37t1K39SpU7F06VIAsHvrxnYuRF5eHj799FOl/fDhw07j2r9/P37/+98jNDQUfn5+GDBgAD7++GOXcmOL0d/fHwMHDsR//vMfl+YBwEcffYTOnTujS5cu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h7///e9ITExU9SoIUPeRRQB48MEHMXr0aBiNRre/Gnvp0qUYPHgwkpKSMGPGDCQkJODkyZPIzMzE0aNH8f333zc6z2Qy4bnnnsN9992Hm266CZMmTUJeXh5WrFjh8jkWEyZMwNtvv41ffvkF1157rdL+6quvYvDgwejXrx9mzpyJ+Ph4HD58GJ9++in27NkDAHjuueewadMmDB48GA888AB8fX3x2muvobKyEi+88IKyrVGjRiE2NhbTp0/HY489BqPRiLfeegsRERENChdX9enTB0ajEX/9619RUlICi8WCm266CatWrcI//vEP3HLLLejSpQvKysrwxhtvICgoCL/5zW/strFp0yb89re/5TkWdOXw3AdSiLxXYx839fPzkz59+siyZcvsPu5o++jmiy++2GA7jX2sU0Rk9erV0r17d7FYLJKYmCgff/yx3HrrrdK9e3eXtgtAFi5cqNyvqamRP/3pTxIRESEGg8HuY5WuftxUROTgwYPyxz/+UaKiosRkMkmHDh1k/Pjx8sEHHyhjHD9uavOPf/xD4uPjxWKxyIABA2T79u0ybNiwZj9uKiJSWVkp4eHh8uyzzzbo27dvn9xyyy0SEhIifn5+0q1bN1mwYIHdmG+//VZGjx4tbdu2lYCAABkxYoR8/fXXDbaVnZ0tycnJYjabJTY2Vl566SWnHzd1zJmINPp43njjDUlISBCj0ajk5dtvv5U777xTYmNjxWKxSGRkpIwfP16ysrLs5v78888CQL788stmc0TUWhhE+HVvRN6gT58+iIiIwKZNmzwdikc8++yzWLFiBXJzc1vV9UK0mDNnDrZv347s7Gy+YkFXDJ5jQdTCqqurlRNAbTIyMvD999+7fInxK9HcuXNRXl6O1atXezqUFnHmzBm8+eabeO6551hU0BWFr1gQtbDDhw8jNTUVd999N2JiYrB//34sX74cwcHB2LdvH8LCwjwdIhGRajx5k6iFtWvXDv3798ebb76JU6dOoU2bNhg3bhyWLFnCooKIWj2+YkFERES64TkWREREpBsWFkRERKSbFj/Hwmq14vjx4wgMDOSZ0ERERK2EiKCsrAwxMTHw8XH+ukSLFxbHjx9XvrufiIiIWpeCggJ07NjRaX+LFxaBgYEAgBsGz4Ovr8Xt+VZfba9yGGrVn6tqLq1qflATLkaov/rlxXBtXxgU9kHjX8fsiorB2q5hUBqnfjcLOGXVtLa5pKb5QU4YNJ7XfDHMpHpuyDfHNK39xGefqJ67u6L5y7835Vpzw2uNuOqFvLGa1h4Qru6ruQHgy5XJmtYOPNr4VVJd0eboeU1ri6/6d7V9T5VqWru4b3vVc03l2v6+K0PVHxfNJdrWNljVHx8C9hRoWvvoXa59VX5jgg+q309rqyuQ/dki5XncmRYvLGxvf/j6WuDr6+f2fM2FhUH9zuBr1HZKiq/J/cdrYzRrKyx8DWb1czXEDQBGs/rdzNek7Y/f19dzhYWvSX1h4evjftF9qbaB6vdVf19th4U2FvX7qm8bbY/b0lZ9zo0Wbfu5r0n9AdvXqH4/BQDx1ZBzn8rmBzU1X8PxQevfd42G46LWtbUUFr4+6o/HgLZ9Vct+atPcaQw8eZOIiIh0o6qwWLp0KTp37gw/Pz8kJyfjm2++0TsuIiIiaoXcLizee+89PPzww1i4cCG+/fZb9O7dG6NHj0ZRUdHliI+IiIhaEbcLi5deegkzZszAPffcg549e2L58uUICAjAW2+9dTniIyIiolbErcKiqqoK2dnZSE1Nrd+Ajw9SU1ORmZnZ6JzKykqUlpba3YiIiOjK5FZhcfr0adTW1qJ9e/uPF7Vv3x6FhYWNzlm8eDGCg4OVG7/DgoiI6Mp12T8VMn/+fJSUlCi3ggJtn98lIiIi7+XWB9bDw8NhNBpx8uRJu/aTJ08iKiqq0TkWiwUWi7bPphMREVHr4NYrFmazGf3798fmzZuVNqvVis2bNyMlJUX34IiIiKh1cfsr9h5++GFMmTIFAwYMwMCBA/Hyyy/j/PnzuOeeey5HfERERNSKuF1YTJo0CadOncKTTz6JwsJC9OnTB5999lmDEzqJiIjo6qPqogCzZ8/G7Nmz9Y6FiIiIWrkWvwiZjelcJdRcN6cqTNuFgkrj1V/8JbBA24dozCXVqueKtmuQoWqQ+iuU+h0v07S2/wH1FzmyhrTRtHalhv3F/3CJprWtphDVc6vjIjStfbBa/fycC42fiO2q/Mow1XP/p+v7mtZeXjRC9VxLibaLztX4q79Aos/RU5rWLh2i/oq0NV0CNK3tW6k+b35b9mpaO+Cazqrnnhimfj8FAP+z6i9iVnujtisIh+1T/1xirFAft0+NaxfL40XIiIiISDcsLIiIiEg3LCyIiIhINywsiIiISDcsLIiIiEg3LCyIiIhINywsiIiISDcsLIiIiEg3LCyIiIhINywsiIiISDcsLIiIiEg3LCyIiIhINywsiIiISDcsLIiIiEg3HrtsemWEP2pN7l/S2ve8a5dtdSbim2LVcy90CtS0tsGq4fLCReovPQ4AFZEW1XNLOrfTtHZEVrHquRc6aLuks1HDJZ3Le4RqWttcrH5fFR/1l+AGgD3n41TP3XzkWk1r/1fnHNVz3z57o6a1tWi3/7ym+bX+Gg6nIUGa1g44VqF6blWoWdPa1QHq/39a9rs+mtY2Vqn/+4766pymtVGrfu0LnbX9vss7qN/XwrNKVc811Lr2PMRXLIiIiEg3LCyIiIhINywsiIiISDcsLIiIiEg3bhUWixcvxvXXX4/AwEBERkbi5ptvRk6O+hO1iIiI6MriVmGxbds2pKWlYefOndi0aROqq6sxatQonD+v7WxqIiIiujK49ZmVzz77zO5+eno6IiMjkZ2djaFDh+oaGBEREbU+mr7HoqSkBAAQGur88/6VlZWorKz/7GtpqfrP0BIREZF3U33yptVqxZw5czBo0CAkJiY6Hbd48WIEBwcrt06dOqldkoiIiLyc6sIiLS0N+/btw+rVq5scN3/+fJSUlCi3goICtUsSERGRl1P1Vsjs2bPxySefYPv27ejYsWOTYy0WCywW9V8nTURERK2HW4WFiOBPf/oT1q5di4yMDMTHx1+uuIiIiKgVcquwSEtLw6pVq7Bu3ToEBgaisLAQABAcHAx/f//LEiARERG1Hm6dY7Fs2TKUlJRg+PDhiI6OVm7vvffe5YqPiIiIWhG33wohIiIickbT91hoca6rCUaLye15HTac0bRuVccQ1XMNtRoLKw2F2dnEAE1LW43q54bmVDY/qAmGQvW/M39/9/eRS4mPQfXcmgA/TWvXBKhPesARbd/3sutMZ9VzH+q5VdPax6raqZ5rMdRoWntrcbTquQYN+woAGC+qj71oSISmtQOPasibxsNa4IFy1XMLxgRrWrvtMfXBnxutfj8FgMhs9cdF/8ILmtYOyFf/+z480fn3TjWntqIC+L75cbwIGREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemG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Qz0cuWfNmzdPtm3bJnl5ebJ3716ZN2+eGAwG+eKLL0TE8/uZ1xQWIiJ/+9vfJDY2VsxmswwcOFB27tzp6ZC82qRJkyQ6OlrMZrN06NBBJk2aJAcOHPB0WF5l69atAqDBbcqUKSJS95HTBQsWSPv27cViscjIkSMlJyfHs0F7gabyduHCBRk1apRERESIyWSSuLg4mTFjxlX/n4DG8gVAVqxYoYy5ePGiPPDAA9KuXTsJCAiQW265RU6cOOG5oD2suZzl5+fL0KFDJTQ0VCwWi1xzzTXy2GOPSUlJiWcD97Bp06ZJXFycmM1miYiIkJEjRypFhYjn9zNeNp2IiIh04xXnWBAREdGVgYUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6cbXE4tWVFSgqqrKE0sTERGRSmazGX5+fk2OafHCoqKiAsH+7VCFipZemoiIiDSIiopCXl5ek8VFixcWVVVVqEIFBuM38DVYYPAx1HUYfH79Ybv/60+H+wYfH4d+h/u2cb9uz3G+3TylDU2uCWfbQtOxitLusH2DwYUxsO93iNFpu4/juIbbdVzTcVuOcwT2D9f2OMUhDQ3mNdbvrM+nkbGXxg1n/a7eNzjtc3ubzcXi0F+X86bnaI3NprF2Z9tsfm1RFasy79LAGsyRZmISl+YZmtye41i7iOrvO9mWQfnpbG2xX/KS8fWHBMdt2W/Tsd8HzrYpjY93nGeQ+jYnP+v/jJseZ9tmfbvVYTuO46wwNphrm1O3plGJ035b9fMc2h3v/zrPtrZR2Y4VRuVxWe3WUmJwsm1lG47btI0H7MbXb982X5SxDefab9PokDPHdoNjbA6/A9v9+vZLcm2LU8m1waHddr/xn/X9Pg7t9fdLy6yI638YVVVV3lVY1C9sgq/BBIPDk7fjfacFg7NxPg7jXCosHPsc25vZ1mUpLJrub9HCwvGg74HCwv1CwvG+Qb/CorlxaDjushcWzto1bVNjYXFJDF5VWDi9b78txyLA2fz6XbV+nubCwlm/DoVFw4JBXWHRWL/zwsLxCVFbYdGgCDBYG2y74X11hYVRGW/4db7B7n5dYWH7t31f/TZt7faPs74IcCwgnLU3LCyMKguL+n6DQ7+zwsL1UzJ58iYRERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREemGhQURERHphoUFERER6YaFBREREenG11ML16AaEB8YxPBrS12NU3//158O9w3i49DvcN/66ziDQ7vB4Sd8LmmDQ5/jHCfbcrwv9vdFaXfYvsHgwhjY91vt+8VJ7PXpsI1ruF1lro/DGg1SbrALTVnLx3HbTuY11u+sz/HX2uB34qzf1fsGp31ub7O5WBz663Le9Bytsdk01u5sm82vLapiVeZdGliDOdJMTOLSPEOT23McaxdR/X0n2zIoP52tLfZLXjK+/pDguC37bTr2C+y3aXXo93Fy3wf17T6OfY5zf912c+Ns26xvtzpsx3GcFcYGc21z6tY0KnHab6t+nkO74/1f59nWNirbscKoPC6r3VpKDE62rWzDcZu28YDd+Prt2+aLMrbhXPttGh1y5thucIzN4Xdgu1/ffkmubXEquTY4tNvuN/6zvh8O7bb7gtIy2xNR01q8sDCbzYiKisKOwg11f/e1LR0BERERqREVFQWz2dzkGIOISJMjLoOKigpUVVXptr3S0lJ06tQJBQUFCAoK0m27VxrmyXXMleuYK9cwT65jrlzX0rkym83w8/NrcoxH3grx8/NrNjA1goKCuBO6gHlyHXPlOubKNcyT65gr13lTrnjyJhEREemGhQURERHp5oooLCwWCxYuXAiLxeLpULwa8+Q65sp1zJVrmCfXMVeu88ZceeTkTSIiIroyXRGvWBAREZF3YGFBREREumFhQURERLphYUFERES68crC4qmnnoLBYLC7de/eXekfPnx4g/5Zs2bZbSM/Px/jxo1DQEAAIiMj8dhjj6GmpqalH0qLOHbsGO6++26EhYXB398fSUlJyMrKUvpFBE8++SSio6Ph7++P1NRU5Obm2m3j7NmzmDx5MoKCghASEoLp06ejvLy8pR/KZddcrqZOndpg3xozZozdNq6GXHXu3LlBHgwGA9LS0gDUfXtuWloawsLC0LZtW9x66604efKk3Tauhr/B5vLEY1W92tpaLFiwAPHx8fD390eXLl3w7LPP4tLPD/BYVceVXHn1sUq80MKFC+W6666TEydOKLdTp04p/cOGDZMZM2bY9ZeUlCj9NTU1kpiYKKmpqfLdd9/Jhg0bJDw8XObPn++Jh3NZnT17VuLi4mTq1Kmya9cuOXTokHz++edy4MABZcySJUskODhYPvroI/n+++/ld7/7ncTHx8vFixeVMWPGjJHevXvLzp075T//+Y9cc801cuedd3riIV02ruRqypQpMmbMGLt96+zZs3bbuRpyVVRUZJeDTZs2CQDZunWriIjMmjVLOnXqJJs3b5asrCy54YYb5MYbb1TmXy1/g83liceqeosWLZKwsDD55JNPJC8vT9asWSNt27aVV155RRnDY1UdV3Llzccqry0sevfu7bR/2LBh8tBDDznt37Bhg/j4+EhhYaHStmzZMgkKCpLKykodI/W8xx9/XAYPHuy032q1SlRUlLz44otKW3FxsVgsFnn33XdFROSnn34SALJ7925lzMaNG8VgMMixY8cuX/AtrLlcidT9sU6YMMFp/9WSK0cPPfSQdOnSRaxWqxQXF4vJZJI1a9Yo/T///LMAkMzMTBG5uv4GL3VpnkR4rLrUuHHjZNq0aXZtEydOlMmTJ4sIj1WXai5XIt59rPLKt0IAIDc3FzExMUhISMDkyZORn59v179y5UqEh4cjMTER8+fPx4ULF5S+zMxMJCUloX379krb6NGjUVpaih9//LHFHkNL+PjjjzFgwADcdtttiIyMRN++ffHGG28o/Xl5eSgsLERqaqrSFhwcjOTkZGRmZgKoy1dISAgGDBigjElNTYWPjw927drVcg/mMmsuVzYZGRmIjIxEt27dcP/99+PMmTNK39WSq0tVVVXhnXfewbRp02AwGJCdnY3q6mq7fap79+6IjY2126eulr9BG8c82fBYVefGG2/E5s2b8csvvwAAvv/+e+zYsQNjx44FwGPVpZrLlY23Hqs8chGy5iQnJyM9PR3dunXDiRMn8PTTT2PIkCHYt28fAgMDcddddyEuLg4xMTHYu3cvHn/8ceTk5ODDDz8EABQWFtr9oQJQ7hcWFrb447mcDh06hGXLluHhhx/GE088gd27d+PBBx+E2WzGlClTlMfbWD5sfYWFhYiMjLTr9/X1RWho6BWVr+ZyBQBjxozBxIkTER8fj4MHD+KJJ57A2LFjkZmZCaPReNXk6lIfffQRiouLMXXqVAB1+4vZbEZISIjdOMd96mr5G7RxzBMAHqsuMW/ePJSWlqJ79+4wGo2ora3FokWLMHnyZADgseoSzeUK8O5jlVcWFpdWZb169UJycjLi4uLw/vvvY/r06Zg5c6bSn5SUhOjoaIwcORIHDx5Ely5dPBGyx1itVgwYMADPP/88AKBv377Yt28fli9frjxZUh1XcnXHHXco45OSktCrVy906dIFGRkZGDlypEfi9rR//vOfGDt2LGJiYjwdildrLE88VtV7//33sXLlSqxatQrXXXcd9uzZgzlz5iAmJobHKgeu5Mqbj1Ve+1bIpUJCQnDttdfiwIEDjfYnJycDgNIfFRXV4Ax12/2oqKjLGGnLi46ORs+ePe3aevToobx1ZHu8jeXD1hcVFYWioiK7/pqaGpw9e/aKyldzuWpMQkICwsPD7fatqyFXNkeOHMGXX36Je++9V2mLiopCVVUViouL7cY67lNXy98g0HieGnM1H6see+wxzJs3D3fccQeSkpLwhz/8AXPnzsXixYsB8Fh1qeZy1RhvOla1isKivLwcBw8eRHR0dKP9e/bsAQClPyUlBT/88INdUjdt2oSgoKAGTyyt3aBBg5CTk2PX9ssvvyAuLg4AEB8fj6ioKGzevFnpLy0txa5du5CSkgKgLl/FxcXIzs5WxmzZsgVWq1U5EF4JmstVY44ePYozZ87Y7VtXQ65sVqxYgcjISIwbN05p69+/P0wmk90+lZOTg/z8fLt96mr5GwQaz1NjruZj1YULF+DjY/+UYzQaYbVaAfBYdanmctUYrzpWXdZTQ1V65JFHJCMjQ/Ly8uSrr76S1NRUCQ8Pl6KiIjlw4IA888wzkpWVJXl5ebJu3TpJSEiQoUOHKvNtH+EaNWqU7NmzRz777DOJiIi4Ij/C9c0334ivr68sWrRIcnNzZeXKlRIQECDvvPOOMmbJkiUSEhIi69atk71798qECRMa/QhX3759ZdeuXbJjxw7p2rXrFfcRruZyVVZWJo8++qhkZmZKXl6efPnll9KvXz/p2rWrVFRUKNu5GnIlIlJbWyuxsbHy+OOPN+ibNWuWxMbGypYtWyQrK0tSUlIkJSVF6b+a/gad5YnHKntTpkyRDh06KB+h/PDDDyU8PFz+/Oc/K2N4rKrTXK68/VjllYXFpEmTJDo6Wsxms3To0EEmTZqkfNdAfn6+DB06VEJDQ8Viscg111wjjz32mN1nw0VEDh8+LGPHjhV/f38JDw+XRx55RKqrqz3xcC679evXS2JiolgsFunevbu8/vrrdv1Wq1UWLFgg7du3F4vFIiNHjpScnBy7MWfOnJE777xT2rZtK0FBQXLPPfdIWVlZSz6MFtFUri5cuCCjRo2SiIgIMZlMEhcXJzNmzLD7KKDI1ZOrzz//XAA02FdERC5evCgPPPCAtGvXTgICAuSWW26REydO2I25Wv4GneWJxyp7paWl8tBDD0lsbKz4+flJQkKC/OUvf7H7WC2PVXWay5W3H6t42XQiIiLSTas4x4KIiIhaBxYWREREpBsWFkRERKQbFhZERESkGxYWREREpBsWFkRERKQbFhZERESkGxYWREREpBsWFkRERKQbFhZERESkGxYWREREpBsWFkRERKSb/wdXghp9ps7KOQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "disk_a = ctx.create_disk_analysis(dataset_csr)\n",
    "disk_r = ctx.run(disk_a)\n",
    "\n",
    "plt.imshow(disk_r.intensity.raw_data)\n",
    "plt.colorbar(orientation=\"horizontal\")\n",
    "plt.title('Brightfield (counts)')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "12a49449",
   "metadata": {},
   "source": [
    "The log-sum of all frames in the dataset:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5c94631b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:23.620887Z",
     "iopub.status.busy": "2023-06-29T12:46:23.620743Z",
     "iopub.status.idle": "2023-06-29T12:46:26.274576Z",
     "shell.execute_reply": "2023-06-29T12:46:26.273980Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Logsum frame')"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfAAAAGzCAYAAADQYEUkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABsWUlEQVR4nO29e3wV9Z3//5pzSEJISGK4JFAui4pcVLyghVRrVRCK1tWVb72UKlarD1mgAlqVXRVFMRZ319siXpYFWmFp9Sd2xQoiCqwVvFBZrVhWLJa0kNCquRBICGc+vz8opx7O+5VkOAdyhryej8d5PGDOnM98ZuYz88nMPD+v8ZxzDkIIIYQIFZG2roAQQgghgqMOXAghhAgh6sCFEEKIEKIOXAghhAgh6sCFEEKIEKIOXAghhAgh6sCFEEKIEKIOXAghhAgh6sCFEEKIEKIOXIgQsGvXLvzwhz9EaWkpPM/DlClT2rpKQog2Rh24yBgWLFgAz/Pw3nvvtXVVMo4HHngACxYswIQJE/Czn/0MV199dVtXSQjRxnRo6woIIVrm9ddfx/DhwzFjxoy2rooQIkPQFbgQIWDnzp0oKipqcb6Ghgb4vn/4KySEaHPUgYvQ8f7772PMmDEoKChAfn4+RowYgfXr1yfN98EHH+Bb3/oWcnNz0atXL9x///2YP38+PM/DZ599Fp/vvffew+jRo9G1a1fk5uaiX79+uO666+Lfr169Gp7nYfXq1Qnlf/bZZ/A8DwsWLIhPu/baa5Gfn49t27bhO9/5DvLz8/G1r30Nc+bMAQB8+OGHOP/885GXl4e+ffti8eLFza7rgWVv3boVL7/8MjzPi9f/wHdLlizBnXfeia997Wvo1KkTamtr8cUXX+DWW2/FySefjPz8fBQUFGDMmDH43//9X7P8X/ziF7j33nvxta99DZ07d8b/+3//DzU1NWhsbMSUKVPQvXt35Ofn4wc/+AEaGxuT6vnss89i6NChyM3NRXFxMa688kpUVFQ0u25CiNTQLXQRKj766CN885vfREFBAW677TZkZWXhqaeewrnnnos1a9Zg2LBhAIA//elPOO+88+B5HqZPn468vDz8x3/8B3JychLK27lzJ0aNGoVu3brhjjvuQFFRET777DO88MILh1zHWCyGMWPG4JxzzsHs2bOxaNEiTJo0CXl5efjnf/5njBs3DpdddhmefPJJXHPNNSgrK0O/fv3MsgYNGoSf/exnmDp1Knr16oVbbrkFANCtW7f4HyH33XcfsrOzceutt6KxsRHZ2dnYtGkTXnzxRXz3u99Fv379UFVVhaeeegrf+ta3sGnTJvTs2TNhOeXl5cjNzcUdd9yBLVu24PHHH0dWVhYikQi+/PJL3HPPPVi/fj0WLFiAfv364e67747/dtasWbjrrrtw+eWX44c//CH+/Oc/4/HHH8c555yD999/v1V3DoQQh4ATIkOYP3++A+DeffddOs+ll17qsrOz3aeffhqftn37dte5c2d3zjnnxKdNnjzZeZ7n3n///fi0zz//3BUXFzsAbuvWrc4555YuXdriMt944w0HwL3xxhsJ07du3eoAuPnz58enjR8/3gFwDzzwQHzal19+6XJzc53neW7JkiXx6b/73e8cADdjxgy67AP07dvXXXTRRWa9jj32WLd79+6E7xoaGlwsFkuqb05Ojps5c2ZSGSeddJLbu3dvfPpVV13lPM9zY8aMSSijrKzM9e3bN/7/zz77zEWjUTdr1qyE+T788EPXoUOHpOlCiPShW+giNMRiMbz66qu49NJLceyxx8an9+jRA9/73vfw5ptvora2FgCwfPlylJWV4dRTT43PV1xcjHHjxiWUeeDqcNmyZWhqakpbXX/4wx8mLGPAgAHIy8vD5ZdfHp8+YMAAFBUV4fe//31Kyxo/fjxyc3MTpuXk5CAS2X94x2IxfP7558jPz8eAAQPwm9/8JqmMa665BllZWfH/Dxs2DM65hEcJB6ZXVFRg3759AIAXXngBvu/j8ssvx1/+8pf4p7S0FP3798cbb7yR0roJITjqwEVo+POf/4zdu3djwIABSd8NGjQIvu/Hn7v+4Q9/wPHHH58038HTvvWtb2Hs2LG499570bVrV1xyySWYP3+++Zy3tXTs2BHdunVLmFZYWIhevXrB87yk6V9++eUhLwuAefvd9308/PDD6N+/P3JyctC1a1d069YNH3zwAWpqapLm79OnT1K9AKB3795J033fj5fxySefwDmH/v37o1u3bgmfjz/+GDt37kxp3YQQHD0DF+0az/Pw/PPPY/369XjppZewYsUKXHfddfjXf/1XrF+/Hvn5+Umd7gFisZg5PRqNBprunDu0yv+Vg6++gf3jxu+66y5cd911uO+++1BcXIxIJIIpU6aYlvqh1tn3fXieh1deecWcNz8/P8iqCCECoA5chIZu3bqhU6dO2Lx5c9J3v/vd7xCJROJXjH379sWWLVuS5rOmAcDw4cMxfPhwzJo1C4sXL8a4ceOwZMkS/PCHP8QxxxwDAKiurk74zR/+8IcU1+jw8fzzz+O8887DvHnzEqZXV1eja9euaVvOcccdB+cc+vXrhxNOOCFt5QohWka30EVoiEajGDVqFH75y18mDAOrqqrC4sWLcfbZZ6OgoAAAMHr0aKxbtw4bN26Mz/fFF19g0aJFCWV++eWXSVfAB56bH7iN3rdvX0SjUaxduzZhvieeeCJNa5Z+otFo0no999xz+NOf/pTW5Vx22WWIRqO49957k5bnnMPnn3+e1uUJIf6GrsBFxvGf//mfWL58edL0m2++Gffffz9WrlyJs88+G//4j/+IDh064KmnnkJjYyNmz54dn/e2227Ds88+iwsuuACTJ0+ODyPr06cPvvjii/ht8YULF+KJJ57AP/zDP+C4445DXV0dnnnmGRQUFODCCy8EsP+573e/+108/vjj8DwPxx13HJYtW5bRz3e/853vYObMmfjBD36Ab3zjG/jwww+xaNGiBPkvHRx33HG4//77MX36dHz22We49NJL0blzZ2zduhVLly7FjTfeiFtvvTWtyxRC7EcduMg45s6da06/9tprceKJJ+J//ud/MH36dJSXl8P3fQwbNgzPPvtsfAw4sF++euONN/CjH/0IDzzwALp164aJEyciLy8PP/rRj9CxY0cA+yW2d955B0uWLEFVVRUKCwvx9a9/HYsWLUqQwx5//HE0NTXhySefRE5ODi6//HI89NBDOOmkkw7vxjhE/umf/gn19fVYvHgxfv7zn+P000/Hyy+/jDvuuCPty7rjjjtwwgkn4OGHH8a9994LYP/2HzVqFP7+7/8+7csTQuzHc6kaNEKEiClTpuCpp57Crl27qKAlhBBhQM/AxVHLnj17Ev7/+eef42c/+xnOPvtsdd5CiNCjW+jiqKWsrAznnnsuBg0ahKqqKsybNw+1tbW466672rpqQgiRMurAxVHLhRdeiOeffx5PP/00PM/D6aefjnnz5uGcc85p66oJIUTK6Bm4EEIIEUL0DFwIIYQIIerAhRBCiBBy2J6Bz5kzBw899BAqKytxyimn4PHHH8fXv/71Fn/n+z62b9+O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anV4ObBeR8s6T5o0CcuWLcMbb7wRf787sH899+7di+rq6oT5w7ie2dnZOP744zF06FCUl5fjlFNOwaOPPnrUrOOGDRuwc+dOnH766ejQoQM6dOiANWvW4LHHHkOHDh1QUlJyVKznwRQVFeGEE07Ali1bjpp9CQA9evTA4MGDE6YNGjQo/rjgaDsHtQcysgPPzs7G0KFDsWrVqvg03/exatUqlJWVtWHNDh/9+vVDaWlpwjrX1tbi7bffDtU6O+cwadIkLF26FK+//jr69euX8P3QoUORlZWVsJ6bN2/Gtm3bQrWeFr7vo7Gx8ahZxxEjRuDDDz/Exo0b458zzjgD48aNi//7aFjPg9m1axc+/fRT9OjR46jZlwBw1llnJQ3p/L//+z/07dsXwNFzDmpXtLVFx1iyZInLyclxCxYscJs2bXI33nijKyoqcpWVlW1dtUOmrq7Ovf/+++799993ANy//du/uffff9/94Q9/cM459+CDD7qioiL3y1/+0n3wwQfukksucf369XN79uxp45q3ngkTJrjCwkK3evVqt2PHjvhn9+7d8Xluuukm16dPH/f666+79957z5WVlbmysrI2rHVw7rjjDrdmzRq3detW98EHH7g77rjDeZ7nXn31Vefc0bGOFl+10J07OtbzlltucatXr3Zbt251v/71r93IkSNd165d3c6dO51zR8c6OufcO++84zp06OBmzZrlPvnkE7do0SLXqVMn9+yzz8bnORrOQe2JjO3AnXPu8ccfd3369HHZ2dnu61//ulu/fn1bVykl3njjDQcg6TN+/Hjn3P5hHHfddZcrKSlxOTk5bsSIEW7z5s1tW+mAWOsHwM2fPz8+z549e9w//uM/umOOOcZ16tTJ/cM//IPbsWNH21X6ELjuuutc3759XXZ2tuvWrZsbMWJEvPN27uhYR4uDO/CjYT2vuOIK16NHD5edne2+9rWvuSuuuMJt2bIl/v3RsI4HeOmll9xJJ53kcnJy3MCBA93TTz+d8P3RcA5qT+h94EIIIUQIychn4EIIIYRoHnXgQgghRAhRBy6EEEKEEHXgQgghRAhRBy6EEEKEEHXgQgghRAhRBy6EEEKEEHXgQgghRAhRBy6EEEKEEHXgQgghRAhRBy6EEEKEkP8fl7HBebOK5zoAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from libertem.udf.logsum import LogsumUDF\n",
    "logsum_r = ctx.run_udf(dataset=dataset_csr, udf=LogsumUDF())\n",
    "\n",
    "plt.imshow(logsum_r['logsum'].data)\n",
    "plt.colorbar()\n",
    "plt.title('Logsum frame')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a1abc1e2",
   "metadata": {},
   "source": [
    "And we can measure the shift of the central disk in the x-direction using a centre-of-mass analysis:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "7eb934cc",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:26.276484Z",
     "iopub.status.busy": "2023-06-29T12:46:26.276332Z",
     "iopub.status.idle": "2023-06-29T12:46:26.610525Z",
     "shell.execute_reply": "2023-06-29T12:46:26.609948Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'CoM-X-shift (px)')"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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s2ZNs+MWLlyI8vJy8624uFhpSiIiInJwij4KSUtLw+bNm7Fz506EhIQ0O9ZgMMBgMCgqjoiIiNoXmxoLEcGzzz6LjRs3Yvv27YiIiGituoiIiKgdsqmxSE1NxaeffopNmzbB09MTJSUlAAAvLy+4ubm1SoFERETUfth0jsV7772H8vJyDB8+HEFBQebb2rVrW6s+IiIiakds/iiEiIiIqCmqrmOhRpcL+TBe7Wxz3LBhfdQlvhqmPPbcOVWpT129Q3Fsaamq1Lh2zUtx7KjBP6nKnf9DF8Wxvc5lq8odNGCA4tiqiGh1uevKFcfmHVK+vwCgtlZ5bI278v0FAEYVsYYylQf61auKQ+uM6h73tWvKY5v5xr5VXAqOK46dbDyrLvm5vopDE+4OVJf7mK/i0PP+MapSB7nXtDyoCYdPqvtCQ3S48ie4btc/lcdaeZVtTkJGREREmmFjQURERJphY0FERESaYWNBREREmmFjQURERJphY0FERESaYWNBREREmmFjQURERJphY0FERESaYWNBREREmmFjQURERJphY0FERESaYWNBREREmmFjQURERJqx27TpVXf0gpPR9gmWv1c+OzAAIKq7iod844aq3D19lU8/XlOjbkrnMBWzxZc7qcvdK1z59MLwVj4lMwDgwAHFoZd6jFSV+miJ8qnP46Ksm564KTdueKiKV+OHH5THdu+qV5c8PFxxqIoZ1wEAnldVTPleo/JPcbduikOvhfdRldrtRqXi2DonF1W5nU+cUBx7skzltOn+pxXHRkPda8kX26MVx44efY/i2JqKCqvG8R0LIiIi0gwbCyIiItIMGwsiIiLSDBsLIiIi0oyqxmLJkiXQ6XSYN2+eRuUQERFRe6a4sfj222/x5z//Gf3799eyHiIiImrHFDUWVVVVmD59Oj788EN06aLuq4hERETUcShqLFJTUzFu3DgkJia2OLampgYVFRUWNyIiIuqYbL4qy5o1a3DgwAF8++23Vo3PyMjAokWLbC6MiIiI2h+b3rEoLi7G3Llz8cknn8DV1dWqmIULF6K8vNx8Ky4uVlQoEREROT6b3rHIzc3FhQsXMGjQIPOyuro67Ny5E++++y5qamrg7OxsEWMwGGAwGLSploiIiByaTY3FyJEjcfjwYYtlTzzxBHr37o2XX365QVNBREREtxebGgtPT09ERUVZLPPw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IzY2FllZWeZlJpMJWVlZiI+Pt2Nl7UtVVRUKCwsRFBRk71LahYiICAQGBlocdxUVFdi7dy+POxv98MMPuHTp0m197IkI0tLSsHHjRnzzzTeIiIiwuD82NhYuLi4Wx1t+fj7Onj172x5vLW2zxhw8eBAAbutjrTEmkwk1NTWOcZy1ySmiVlizZo0YDAZZsWKFHDt2TGbNmiXe3t5SUlJi79Ic1vPPPy/bt2+XoqIi+de//iWJiYni6+srFy5csHdpDqOyslLy8vIkLy9PAMhbb70leXl5cubMGRERWbJkiXh7e8umTZvk0KFDMnHiRImIiJBr167ZuXL7am67VVZWygsvvCA5OTlSVFQk//jHP2TQoEHSs2dPqa6utnfpdjN79mzx8vKS7du3y/nz5823q1evmsc8/fTT0q1bN/nmm29k//79Eh8fL/Hx8Xas2r5a2mYFBQXym9/8Rvbv3y9FRUWyadMmiYyMlGHDhtm5cvtasGCB7NixQ4qKiuTQoUOyYMEC0el08vXXX4uI/Y8zh2ksRESWLVsm3bp1E71eL0OGDJE9e/bYuySHNmXKFAkKChK9Xi933HGHTJkyRQoKCuxdlkPJzs4WAA1uycnJInLzK6evvPKKBAQEiMFgkJEjR0p+fr59i3YAzW23q1evyujRo8XPz09cXFwkLCxMUlJSbvv/BDS2vQDI8uXLzWOuXbsmzzzzjHTp0kXc3d3lgQcekPPnz9uvaDtraZudPXtWhg0bJl27dhWDwSA9evSQF198UcrLy+1buJ398pe/lLCwMNHr9eLn5ycjR440NxUi9j/OOG06ERERacYhzrEgIiKijoGNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmmkz2SVldXo7a21h6piYiISCG9Xg9XV9dmx7R5Y1FdXQ03twgAJW2dmoiIiFQIDAxEUVFRs81FmzcWN9+pKAFQDJ3OCKf/fBij9KdOpzxei3UoraU1Ho+162mLbdvUeuyxn+t/avV4uL9bWA/k5j9Mppu3+n/b8lNEWdzPf2qxDqW1tMbjsXZ9bbmNb10P97d2j8fa9bThfq4AEFpSgtraWsdqLP7LCJ3OaP5jpvSnmj+CWr3AMDdzM7fGjYUWP5mbue2dW+0LXP161NCqlvoGxQpOCkslIiIiaoCNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpho0FERERaYaNBREREWmGjQURERFpppP9UldABBC5+ZvSnyaT+krU1nBrLU5OLf9s6j6dzvp1NPezufVosQ6ltbTG47H2p1aPR0lNt9X+xs+eEPVPClt/3vqkUvJTi3UoraU1Ho+162vLbXzreri/tXs81q7H2nWo/QmgAtZp88ZCr9cjMDAQJSWhEAHq6m4ur/9JREREjikwMBB6vb7ZMTqRn7UjbaS6uhq1tbVtnVYTFRUVCA0NRXFxMYxGo73Lue1xfzgW7g/HwX3hWDrK/tDr9XB1dW12jF0+CnF1dW2xMEdnNBrb9cHR0XB/OBbuD8fBfeFYbof9wZM3iYiISDNsLIiIiEgzbCxsZDAYkJ6eDoPBYO9SCNwfjob7w3FwXziW22l/2OXkTSIiIuqY+I4FERERaYaNBREREWmGjQURERFpho0FERERaYaNhRVef/113H333XB3d4e3t7dVMSKCV199FUFBQXBzc0NiYiJOnTrVuoXeJi5fvozp06fDaDTC29sbTz75JKqqqpqNGT58OHQ6ncXt6aefbqOKO5bMzEyEh4fD1dUVcXFx2LdvX7Pj161bh969e8PV1RXR0dH48ssv26jSjs+WfbFixYoGz4H2fqFCR7Jz505MmDABwcHB0Ol0+Oyzz1qM2b59OwYNGgSDwYAePXpgxYoVrV5nW2BjYYXa2lpMnjwZs2fPtjpm6dKl+OMf/4j3338fe/fuhYeHB5KSklBdXd2Kld4epk+fjqNHj2Lbtm3YvHkzdu7ciVmzZrUYl5KSgvPnz5tvS5cubYNqO5a1a9di/vz5SE9Px4EDBxATE4OkpCRcuHCh0fG7d+/GI488gieffBJ5eXmYNGkSJk2ahCNHjrRx5R2PrfsCuHnVx58/B86cOdOGFXdsV65cQUxMDDIzM60aX1RUhHHjxmHEiBE4ePAg5s2bh5kzZ+Krr75q5UrbgJDVli9fLl5eXi2OM5lMEhgYKL/73e/My8rKysRgMMjq1atbscKO79ixYwJAvv32W/OyLVu2iE6nk3//+99NxiUkJMjcuXPboMKObciQIZKammr+va6uToKDgyUjI6PR8Q8//LCMGzfOYllcXJw89dRTrVrn7cDWfWHt3y9SD4Bs3Lix2TEvvfSS9OvXz2LZlClTJCkpqRUraxt8x6IVFBUVoaSkBImJieZlXl5eiIuLQ05Ojh0ra/9ycnLg7e2NwYMHm5clJibCyckJe/fubTb2k08+ga+vL6KiorBw4UJcvXq1tcvtUGpra5Gbm2txXDs5OSExMbHJ4zonJ8diPAAkJSXxeaCSkn0BAFVVVQgLC0NoaCgmTpyIo0ePtkW51IiO/NywyyRkHV1JSQkAICAgwGJ5QECA+T5SpqSkBP7+/hbLOnXqhK5duza7badNm4awsDAEBwfj0KFDePnll5Gfn48NGza0dskdxo8//oi6urpGj+sTJ040GlNSUsLnQStQsi969eqFjz/+GP3790d5eTl+//vf4+6778bRo0cREhLSFmXTzzT13KioqMC1a9fg5uZmp8rUu23fsViwYEGDE5luvTX1BCXttfb+mDVrFpKSkhAdHY3p06fjL3/5CzZu3IjCwkINHwWR44qPj8fjjz+OAQMGICEhARs2bICfnx/+/Oc/27s06mBu23csnn/+ecyYMaPZMZGRkYrWHRgYCAAoLS1FUFCQeXlpaSkGDBigaJ0dnbX7IzAwsMHJaTdu3MDly5fN290acXFxAICCggJ0797d5npvR76+vnB2dkZpaanF8tLS0ia3fWBgoE3jyTpK9sWtXFxcMHDgQBQUFLRGidSCpp4bRqOxXb9bAdzGjYWfnx/8/PxaZd0REREIDAxEVlaWuZGoqKjA3r17bfpmye3E2v0RHx+PsrIy5ObmIjY2FgDwzTffwGQymZsFaxw8eBAALBo/ap5er0dsbCyysrIwadIkAIDJZEJWVhbS0tIajYmPj0dWVhbmzZtnXrZt2zbEx8e3QcUdl5J9cau6ujocPnwY9913XytWSk2Jj49v8NXrDvPcsPfZo+3BmTNnJC8vTxYtWiSdO3eWvLw8ycvLk8rKSvOYXr16yYYNG8y/L1myRLy9vWXTpk1y6NAhmThxokRERMi1a9fs8RA6lDFjxsjAgQNl7969smvXLunZs6c88sgj5vt/+OEH6dWrl+zdu1dERAoKCuQ3v/mN7N+/X4qKimTTpk0SGRkpw4YNs9dDaLfWrFkjBoNBVqxYIceOHZNZs2aJt7e3lJSUiIjIY489JgsWLDCP/9e//iWdOnWS3//+93L8+HFJT08XFxcXOXz4sL0eQodh675YtGiRfPXVV1JYWCi5ubkydepUcXV1laNHj9rrIXQolZWV5tcGAPLWW29JXl6enDlzRkREFixYII899ph5/OnTp8Xd3V1efPFFOX78uGRmZoqzs7Ns3brVXg9BM2wsrJCcnCwAGtyys7PNYwDI8uXLzb+bTCZ55ZVXJCAgQAwGg4wcOVLy8/PbvvgO6NKlS/LII49I586dxWg0yhNPPGHR5BUVFVnsn7Nnz8qwYcOka9euYjAYpEePHvLiiy9KeXm5nR5B+7Zs2TLp1q2b6PV6GTJkiOzZs8d8X0JCgiQnJ1uM/9vf/iZ33nmn6PV66devn/z9739v44o7Llv2xbx588xjAwIC5L777pMDBw7YoeqOKTs7u9HXifp9kJycLAkJCQ1iBgwYIHq9XiIjIy1eQ9ozTptOREREmrltvxVCRERE2mNjQURERJphY0FERESaYWNBREREmmFjQURERJphY0FERESaYWNBREREmmFjQURERJphY0FERESaYWNBREREmmFjQURERJphY0FERESa+f9Vc0TlNNp0NwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "com_a = ctx.create_com_analysis(dataset_csr, cx=sig_shape[1] // 2, cy=sig_shape[0] // 2, mask_radius=radius * 1.2)\n",
    "com_r = ctx.run(com_a)\n",
    "\n",
    "from matplotlib.colors import CenteredNorm\n",
    "plt.imshow(com_r.x.raw_data, cmap='bwr', norm=CenteredNorm())\n",
    "plt.colorbar(orientation=\"horizontal\")\n",
    "plt.title('CoM-X-shift (px)')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d95debf",
   "metadata": {},
   "source": [
    "As expected, the `raw_csr` dataset is transparently compatible with standard LiberTEM UDFs and analyses, despite the data being stored in a sparse form.\n",
    "\n",
    "## Other sparse formats\n",
    "\n",
    "As of time of writing, the only LiberTEM support for reading sparse data from disk is in the 2D-CSR format used above. However, in-memory sparse data of almost any format can be processed using the existing `MemoryDataSet`. This is thanks to the `sparseconverter` library which finds an efficient conversion from the source data to the formats supported by a given UDF. (If a UDF supports the format already in-memory, no conversion is carried out).\n",
    "\n",
    "GCXS is a sparse array format which is a generalisation of the CSR / CSC format described above, notably supporting multi-dimensional arrays beyond 2D. It is provided by the `pydata.sparse` library (https://sparse.pydata.org/en/stable/generated/sparse.GCXS.html), and supported in `sparseconverter`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "fe956ee0",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:26.612379Z",
     "iopub.status.busy": "2023-06-29T12:46:26.612226Z",
     "iopub.status.idle": "2023-06-29T12:46:26.626630Z",
     "shell.execute_reply": "2023-06-29T12:46:26.626089Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table><tbody><tr><th style=\"text-align: left\">Format</th><td style=\"text-align: left\">gcxs</td></tr><tr><th style=\"text-align: left\">Data Type</th><td style=\"text-align: left\">uint8</td></tr><tr><th style=\"text-align: left\">Shape</th><td style=\"text-align: left\">(8, 32, 64, 64)</td></tr><tr><th style=\"text-align: left\">nnz</th><td style=\"text-align: left\">110435</td></tr><tr><th style=\"text-align: left\">Density</th><td style=\"text-align: left\">0.10531902313232422</td></tr><tr><th style=\"text-align: left\">Read-only</th><td style=\"text-align: left\">True</td></tr><tr><th style=\"text-align: left\">Size</th><td style=\"text-align: left\">970.7K</td></tr><tr><th style=\"text-align: left\">Storage ratio</th><td style=\"text-align: left\">0.9</td></tr><tr><th style=\"text-align: left\">Compressed Axes</th><td style=\"text-align: left\">(0,)</td></tr></tbody></table>"
      ],
      "text/plain": [
       "<GCXS: shape=(8, 32, 64, 64), dtype=uint8, nnz=110435, fill_value=0, compressed_axes=(0,)>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "from sparseconverter import SPARSE_GCXS\n",
    "data_gcxs = for_backend(dense_data, SPARSE_GCXS)\n",
    "data_gcxs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "fa7c323a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:26.628523Z",
     "iopub.status.busy": "2023-06-29T12:46:26.628285Z",
     "iopub.status.idle": "2023-06-29T12:46:26.632039Z",
     "shell.execute_reply": "2023-06-29T12:46:26.631613Z"
    }
   },
   "outputs": [],
   "source": [
    "dataset_gcxs = ctx.load('memory', data=data_gcxs, num_partitions=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7630a3df",
   "metadata": {},
   "source": [
    "By default this dataset will first try to provide data to the analysis in GCXS format, but supports ingestion from and conversion to the following formats:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "86ff0c36",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:26.634447Z",
     "iopub.status.busy": "2023-06-29T12:46:26.634114Z",
     "iopub.status.idle": "2023-06-29T12:46:26.637230Z",
     "shell.execute_reply": "2023-06-29T12:46:26.636810Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('sparse.GCXS',\n",
       " 'sparse.COO',\n",
       " 'scipy.sparse.csr_matrix',\n",
       " 'scipy.sparse.csc_matrix',\n",
       " 'scipy.sparse.coo_matrix',\n",
       " 'sparse.DOK',\n",
       " 'cupyx.scipy.sparse.csc_matrix',\n",
       " 'cupyx.scipy.sparse.csr_matrix',\n",
       " 'cupyx.scipy.sparse.coo_matrix',\n",
       " 'numpy.matrix',\n",
       " 'numpy',\n",
       " 'cuda',\n",
       " 'cupy')"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "dataset_gcxs.array_backends"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0ae339e7",
   "metadata": {},
   "source": [
    "Of course, at the high-level the underlying format and any conversion is transparent, and standard analyses will run correctly:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "87eeb962",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:26.638899Z",
     "iopub.status.busy": "2023-06-29T12:46:26.638765Z",
     "iopub.status.idle": "2023-06-29T12:46:32.895999Z",
     "shell.execute_reply": "2023-06-29T12:46:32.895366Z"
    }
   },
   "outputs": [],
   "source": [
    "disk_a_gcxs = ctx.create_disk_analysis(dataset_gcxs)\n",
    "disk_r_gcxs = ctx.run(disk_a_gcxs)\n",
    "assert np.allclose(disk_r_gcxs.intensity.raw_data, disk_r.intensity.raw_data)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee88a591",
   "metadata": {},
   "source": [
    "The `MemoryDataSet` can also be used to perform conversion on-the-fly for a particular analysis using the `array_backends` argument. In this case the compatibility is explicit and the analysis must be compatible with at least one of the backends.\n",
    "\n",
    "The following will explicitly convert from GCXS to `scipy` COO format, and will automatically handle reshaping the data from the 4D data cube to a 2D flat-sig, flat-nav format during processing. Normally this kind of explicit conversion is not advised as it is the analysis itself which determines which inputs it supports; the dataset uses the analysis declaration to choose the most efficient conversion to carry out."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "dc15e586",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:32.898687Z",
     "iopub.status.busy": "2023-06-29T12:46:32.898541Z",
     "iopub.status.idle": "2023-06-29T12:46:32.902514Z",
     "shell.execute_reply": "2023-06-29T12:46:32.902095Z"
    }
   },
   "outputs": [],
   "source": [
    "from sparseconverter import SCIPY_COO\n",
    "dataset_coo = ctx.load('memory', data=data_gcxs, array_backends=(SCIPY_COO,))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "78acd16f",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:32.904288Z",
     "iopub.status.busy": "2023-06-29T12:46:32.904016Z",
     "iopub.status.idle": "2023-06-29T12:46:33.155197Z",
     "shell.execute_reply": "2023-06-29T12:46:33.154598Z"
    }
   },
   "outputs": [],
   "source": [
    "disk_a_coo = ctx.create_disk_analysis(dataset_coo)\n",
    "disk_r_coo = ctx.run(disk_a_coo)\n",
    "assert np.allclose(disk_r_gcxs.intensity.raw_data, disk_r_coo.intensity.raw_data)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "898300e0",
   "metadata": {},
   "source": [
    "## Defining sparse-compatible UDFs\n",
    "\n",
    "We will now define some custom analyses (UDFs) which are sparse-compatible.\n",
    "\n",
    "### Maximum compatibility\n",
    "\n",
    "Naturally, if our UDF is sufficiently simple it can automatically support the majority of array-like usage, for example getting the mean value for each frame:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "39fab2f4",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:33.157685Z",
     "iopub.status.busy": "2023-06-29T12:46:33.157543Z",
     "iopub.status.idle": "2023-06-29T12:46:33.162018Z",
     "shell.execute_reply": "2023-06-29T12:46:33.161557Z"
    }
   },
   "outputs": [],
   "source": [
    "from sparseconverter import get_backend\n",
    "from libertem.udf.base import UDF\n",
    "\n",
    "class MeanFrameUDF(UDF):\n",
    "    \"\"\"\n",
    "    Compute the mean value of each frame and return a nav-shape array of means\n",
    "    \n",
    "    Supports the vast majority of sparse and GPU backends\n",
    "    \n",
    "    As a side effect prints the array type of frame (once-per-partition)\n",
    "    \"\"\"\n",
    "    def get_backends(self):\n",
    "        # Support all recommended array backends\n",
    "        # This is possible because we are only calling xp.mean on the array\n",
    "        # and most frameworks implement a mean(array)\n",
    "        return self.BACKEND_ALL\n",
    "    \n",
    "    def process_frame(self, frame):\n",
    "        # frame.mean() and assign the result\n",
    "        # self.xp can also be used to get numpy or\n",
    "        # cupy as appropriate to the worker\n",
    "        # see note below for self.forbuf\n",
    "        self.results.means[:] = self.forbuf(\n",
    "            frame.mean(),\n",
    "            self.results.means\n",
    "        )\n",
    "        # One-time print to print array type (only on)\n",
    "        if getattr(self, '_new_part', True):\n",
    "            print(f'Frame format: {get_backend(frame)}')\n",
    "            self._new_part = False        \n",
    "\n",
    "    def get_result_buffers(self):\n",
    "        # Declare the result array and its dtype\n",
    "        # np.result_type helps choose a compatible dtype\n",
    "        # for computation on the input dtype\n",
    "        # where='device' means result data will be accumulated\n",
    "        # in the GPU when running in this context, rather than\n",
    "        # transferring to the CPU each time\n",
    "        dtype = np.result_type(self.meta.input_dtype, np.float32)\n",
    "        return {\n",
    "            'means': self.buffer(\n",
    "                kind=\"nav\", dtype=dtype, where='device'\n",
    "            ),\n",
    "        }"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "297c8f6f",
   "metadata": {},
   "source": [
    "Some notes:\n",
    "\n",
    "- The value `self.BACKEND_ALL` contains a list of 'standard' sparse / GPU backends which implement the majority of the numpy array interface and so can be used in this style of UDF. That said, there is no guarantee that each implementation will give identical results (or even run) without proper testing. The number of possible combinations is large, and the features of each API subtly different, and so it is not feasible to guarantee full compatability in all cases."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "ebbcb697",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:33.163960Z",
     "iopub.status.busy": "2023-06-29T12:46:33.163600Z",
     "iopub.status.idle": "2023-06-29T12:46:33.166684Z",
     "shell.execute_reply": "2023-06-29T12:46:33.166269Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('cupyx.scipy.sparse.csr_matrix',\n",
       " 'cupyx.scipy.sparse.csc_matrix',\n",
       " 'cupyx.scipy.sparse.coo_matrix',\n",
       " 'scipy.sparse.csr_matrix',\n",
       " 'scipy.sparse.csc_matrix',\n",
       " 'scipy.sparse.coo_matrix',\n",
       " 'cupy',\n",
       " 'numpy',\n",
       " 'sparse.COO',\n",
       " 'sparse.GCXS')"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "UDF.BACKEND_ALL"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8f8c8de1",
   "metadata": {},
   "source": [
    "- The `self.forbuf(array, result_buffer)` helper method is used when assigning a result as it ensures that the data is densified or reshaped (if necessary) to support assignment into the result buffer. This abstracts away the details of handling multiple sparse frameworks with different APIs (2D vs nD, auto-densify vs. raise on assignment, etc).\n",
    "\n",
    "Let's test our UDF on a range of input formats, including the directly on the dense data for comparison:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "f592f2ac",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:33.168336Z",
     "iopub.status.busy": "2023-06-29T12:46:33.168206Z",
     "iopub.status.idle": "2023-06-29T12:46:33.170648Z",
     "shell.execute_reply": "2023-06-29T12:46:33.170223Z"
    }
   },
   "outputs": [],
   "source": [
    "dataset_dense = ctx.load('memory', data=dense_data, sig_dims=2, num_partitions=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "709e755c",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:33.172245Z",
     "iopub.status.busy": "2023-06-29T12:46:33.172114Z",
     "iopub.status.idle": "2023-06-29T12:46:35.694949Z",
     "shell.execute_reply": "2023-06-29T12:46:35.694313Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Frame format: numpy\n",
      "RESULT => 63.592041015625\n",
      "Frame format: scipy.sparse.csr_matrix\n",
      "RESULT => 63.592041015625\n",
      "Frame format: sparse.GCXS\n",
      "RESULT => 63.592041015625\n"
     ]
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "print(f\"RESULT => {ctx.run_udf(dataset_dense, MeanFrameUDF())['means'].data.sum()}\")\n",
    "print(f\"RESULT => {ctx.run_udf(dataset_csr, MeanFrameUDF())['means'].data.sum()}\")\n",
    "res = ctx.run_udf(dataset_gcxs, MeanFrameUDF())\n",
    "print(f\"RESULT => {res['means'].data.sum()}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "d9a65145",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:35.696933Z",
     "iopub.status.busy": "2023-06-29T12:46:35.696785Z",
     "iopub.status.idle": "2023-06-29T12:46:35.867985Z",
     "shell.execute_reply": "2023-06-29T12:46:35.867461Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Mean counts per-pixel')"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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5cRi9OjR+OWXXzBt2jTk5uaiV69e2Lx5c5UbOomIiKj5UfWF45MmTcKkSZP0joWIiIiauAZfhKxS+H+K4eXl+uI3xWZtCwX9dH9L1XUrArUt1hO+Xf3iLz7ntS2Ykz1L/T0wvr9oW7Sm67xfVdfNjw3W1Ld3sfo5a3VU23yf76n+pmXTr9rm+3tL9TdT10Uf35809b38wq2q694b/r2mvs9aAlXX9dC24CSM+ep/Tjw0LgRWHKL+A36lrbQtiOV7Xn3s4V+qXwkXAErbB6mue+JebS9/PmfVj9v5OG0rZYftVn+xlrRSf95WS92el7gIGREREemGiQURERHphokFERER6YaJBREREemGiQURERHphokFERER6YaJBREREemGiQURERHphokFERER6YaJBREREemGiQURERHphokFERER6YaJBREREemGiQURERHpxm3Lpv8a6wtPo+tLoBu0rS6MmDX5quuevDtIU9/+p4pU1zVE+GrqG8fV55DFZm1dF3ZRv/S5JUBb7qtl2fTzPdQvew4AVqP6ul6l2pZNTyvoorruDxe1Tfi4iP+orutp0HbeR4rDVddtdURb3zYNq4+bLlZo6luLktbafsbyb1BfP2+w+mXuAaD9GvV9h+9Qv8w9AFi91T+3lAVpG/PzPdQvu972gEV13YqKui3XzncsiIiISDdMLIiIiEg3TCyIiIhIN0wsiIiISDcuJRYpKSno06cPAgICEBISgnvvvRcZGRn1FRsRERE1MS4lFtu3b0dycjJ27dqFr776CuXl5Rg8eDAuX75cX/ERERFRE+LSx003b95st71s2TKEhIRg3759GDBggK6BERERUdOj6Xss8vOvfCdEq1atnJYpKytDWVmZsl1QUKClSyIiImrEVN+8abPZ8Mwzz6B///7o3r2703IpKSkIDAxUHpGRkWq7JCIiokZOdWKRnJyMQ4cOYdWqVTWWmzp1KvLz85VHTk6O2i6JiIiokVP1p5BJkyZh06ZN2LFjByIiImosazKZYDJp+2pkIiIiahpcSixEBH/605+wfv16pKWlITo6ur7iIiIioibIpcQiOTkZK1aswMaNGxEQEIDc3FwAQGBgIHx9NS6SRURERE2eS/dYLFy4EPn5+Rg4cCDCw8OVx+rVq+srPiIiImpCXP5TCBEREZEzmr7HQouiSMDDx/V60RuLNfX7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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(res['means'].data)\n",
    "plt.colorbar(orientation=\"horizontal\")\n",
    "plt.title('Mean counts per-pixel')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4106e565",
   "metadata": {},
   "source": [
    "#### CuPy support\n",
    "\n",
    "This UDF will also run on GPU through CuPy, on both `cupy` dense and `cupyx.scipy.sparse` arrays. The following section verifies if CuPy is available:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "f0c08e15",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:35.869813Z",
     "iopub.status.busy": "2023-06-29T12:46:35.869666Z",
     "iopub.status.idle": "2023-06-29T12:46:35.873001Z",
     "shell.execute_reply": "2023-06-29T12:46:35.872570Z"
    }
   },
   "outputs": [],
   "source": [
    "has_cupy = True\n",
    "try:\n",
    "    import cupy as cp\n",
    "except ImportError:\n",
    "    has_cupy = False\n",
    "if has_cupy:\n",
    "    from cupy_backends.cuda.api.runtime import CUDARuntimeError\n",
    "    try:\n",
    "        array = cp.zeros((1,))\n",
    "    except CUDARuntimeError:\n",
    "        has_cupy = False"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2b1f17f7",
   "metadata": {},
   "source": [
    "We can again use the `MemoryDataSet` to perform on-the-fly conversion from the dense data we generated into a `cupyx.scipy.sparse.csr_matrix` format, to supply to our 'wide-support' UDF. To ensure that the computation actually happens on the GPU we create a LiberTEM context with one `CUDA` worker and zero cpu-workers.\n",
    "\n",
    "The following cell will only run if CuPy is available:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "e27cc4fb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:35.874837Z",
     "iopub.status.busy": "2023-06-29T12:46:35.874543Z",
     "iopub.status.idle": "2023-06-29T12:46:35.877201Z",
     "shell.execute_reply": "2023-06-29T12:46:35.876778Z"
    }
   },
   "outputs": [],
   "source": [
    "if has_cupy:\n",
    "    from libertem.executor.dask import DaskJobExecutor, cluster_spec\n",
    "    ctx_cupy = lt.Context(\n",
    "        # FIXME NEEDS TO BE SIMPLIFIED!!!\n",
    "        DaskJobExecutor.make_local(\n",
    "            cluster_spec(\n",
    "                cpus=0,\n",
    "                cudas=1,\n",
    "                has_cupy=True\n",
    "            )\n",
    "        )\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "f1111bf7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:35.879034Z",
     "iopub.status.busy": "2023-06-29T12:46:35.878709Z",
     "iopub.status.idle": "2023-06-29T12:46:35.881405Z",
     "shell.execute_reply": "2023-06-29T12:46:35.880983Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\weber\\miniconda3\\envs\\libertem311\\Lib\\site-packages\\distributed\\worker.py:3034: UserWarning: Large object of size 1.01 MiB detected in task graph: \n",
      "  (<UDFTask [<class '__main__.MeanFrameUDF'>]>, 'UDF ... -77ca26297e2a')\n",
      "Consider scattering large objects ahead of time\n",
      "with client.scatter to reduce scheduler burden and \n",
      "keep data on workers\n",
      "\n",
      "    future = client.submit(func, big_data)    # bad\n",
      "\n",
      "    big_future = client.scatter(big_data)     # good\n",
      "    future = client.submit(func, big_future)  # good\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RESULT => 63.592041015625\n"
     ]
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "if has_cupy:\n",
    "    from sparseconverter import CUPY_SCIPY_CSR\n",
    "    \n",
    "    dataset_cupy_csr = ctx_cupy.load('memory', data=dense_data, array_backends=(CUPY_SCIPY_CSR,))\n",
    "    print(f\"RESULT => {ctx_cupy.run_udf(dataset_cupy_csr, MeanFrameUDF())['means'].data.sum()}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "50cded2a",
   "metadata": {},
   "source": [
    "With this particular CUDA-only `Context`, dense datasets will be automatically be moved to the GPU, as long as the UDF supports it (if not then this strange `Context` will raise an error):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "e974ad43",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:35.883047Z",
     "iopub.status.busy": "2023-06-29T12:46:35.882913Z",
     "iopub.status.idle": "2023-06-29T12:46:35.885321Z",
     "shell.execute_reply": "2023-06-29T12:46:35.884895Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RESULT => 63.592041015625 (on GPU)\n"
     ]
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "if has_cupy:\n",
    "    print(f\"RESULT => {ctx_cupy.run_udf(dataset_dense, MeanFrameUDF())['means'].data.sum()} (on GPU)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7ea23307",
   "metadata": {},
   "source": [
    "### Declaring Specific API compatibility\n",
    "\n",
    "We can also rely on a specific library's API in our UDFs, by declaring compatibility with a subset of the available backends. For example a `scipy.sparse` matrix does not support the `np.where` function, which we could use for value thresholding:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "1c08851d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:35.886986Z",
     "iopub.status.busy": "2023-06-29T12:46:35.886791Z",
     "iopub.status.idle": "2023-06-29T12:46:35.890403Z",
     "shell.execute_reply": "2023-06-29T12:46:35.889963Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ValueError: setting an array element with a sequence.\n"
     ]
    }
   ],
   "source": [
    "import scipy.sparse\n",
    "# raises ValueError\n",
    "rand_data = np.random.randint(0, 5, size=(10, 10))\n",
    "sparse_d = scipy.sparse.csr_matrix(rand_data)\n",
    "try:\n",
    "    np.where(sparse_d > 2, sparse_d, 0)\n",
    "except ValueError as e:\n",
    "    print(f'ValueError: {e}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "042f0f97",
   "metadata": {},
   "source": [
    "However there is a sparse-supporting `where` function of `pydata.sparse`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "4c397fce",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:35.892278Z",
     "iopub.status.busy": "2023-06-29T12:46:35.891911Z",
     "iopub.status.idle": "2023-06-29T12:46:36.210478Z",
     "shell.execute_reply": "2023-06-29T12:46:36.209568Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<GCXS: shape=(10, 10), dtype=int32, nnz=44, fill_value=0, compressed_axes=(0,)>\n"
     ]
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "import sparse\n",
    "sparse_d = sparse.GCXS.from_numpy(rand_data)\n",
    "print(sparse.where(sparse_d > 2, sparse_d, 0))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "61b8cee5",
   "metadata": {},
   "source": [
    "The example is a bit contrived, but if we wanted to take advantage of `sparse.where` for processing sparse data, we can do this by declaring specific backends:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "f659d655",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:36.212507Z",
     "iopub.status.busy": "2023-06-29T12:46:36.212262Z",
     "iopub.status.idle": "2023-06-29T12:46:36.216350Z",
     "shell.execute_reply": "2023-06-29T12:46:36.215919Z"
    }
   },
   "outputs": [],
   "source": [
    "from libertem.udf.sum import SumUDF\n",
    "from sparseconverter import SPARSE_COO, SPARSE_GCXS\n",
    "\n",
    "class ThresholdSumSparse(SumUDF):\n",
    "    \"\"\"\n",
    "    Sum the values of pixels with a value > threshold\n",
    "    \n",
    "    Uses sparse.where for thresholding, which is compatible\n",
    "    with pydata.sparse arrays (declared in get_backends)\n",
    "    \"\"\"\n",
    "    def __init__(self, threshold=0, dtype='float32'):\n",
    "        UDF.__init__(self, threshold=threshold, dtype=dtype)\n",
    "    \n",
    "    def get_backends(self):\n",
    "        # process_tile is compatible with pydata.sparse arrays only\n",
    "        # it would be possible to adapt this UDF to also run on\n",
    "        # dense numpy and cupy arrays via np.where (not done here)\n",
    "        return (SPARSE_COO, SPARSE_GCXS,)\n",
    "    \n",
    "    def process_tile(self, tile):\n",
    "        more_than_t = sparse.where(tile > self.params.threshold, tile, 0)\n",
    "        sum_per_tile = more_than_t.sum(axis=0)\n",
    "        \n",
    "        self.results.intensity[:] += self.forbuf(\n",
    "            sum_per_tile,\n",
    "            self.results.intensity\n",
    "        )"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c7328b9b",
   "metadata": {},
   "source": [
    "We can run this in parallel with the normal SumUDF maintaining the sparse-compatibility of ThresholdSumSparse. Firstly we run on the dense dataset (for example purposes):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "5b9276c0",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:36.218375Z",
     "iopub.status.busy": "2023-06-29T12:46:36.218239Z",
     "iopub.status.idle": "2023-06-29T12:46:36.252692Z",
     "shell.execute_reply": "2023-06-29T12:46:36.252105Z"
    }
   },
   "outputs": [],
   "source": [
    "threshold_level = 3\n",
    "sum_results = ctx.run_udf(dataset_dense, udf=(SumUDF(), ThresholdSumSparse(threshold=threshold_level)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f830035d",
   "metadata": {},
   "source": [
    "We can see the difference in background noise level between the two UDFs:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "4a39b167",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:36.254886Z",
     "iopub.status.busy": "2023-06-29T12:46:36.254742Z",
     "iopub.status.idle": "2023-06-29T12:46:36.508606Z",
     "shell.execute_reply": "2023-06-29T12:46:36.508051Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0.98, 'Dense input data')"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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jkBZWRkqKipw3HHH4d133+19AggZZHDP6f89J5VK4ZlnnsHkyZON+/vssw/+4z/+w0pfKBQwcuRInHrqqT33fvKTn+DQQw9FbW0tSkpKMH78eDz66KOudW+cK8m9996LUCiEpUuX9rmPjY2NOPfcczFq1CgkEgkMHz4cJ554olWW5G9/+xtGjBiBr33ta3jhhResP3cXg5122gmdnZ3IZDLG/WOOOQYdHR149tlni15nf8PDJrEYO3YsFi5c6Pqbux/OOOMMFAoF3HzzzZg4cSJ++MMf4rbbbsMxxxyDkSNH4pZbbsGuu+6KK6+8Ei+//PIWy6mrq8P999+PPffcE6NGjcL999+P+++/H3vttVdPmjlz5uCOO+7AhRdeiFtvvRU1NTVoa2vDr371Kxx55JG45ZZbcO2112LNmjWYMmUK3n77baue3/3ud7jzzjtx6aWX4oorrsBLL72E008/Hf/zP/+DZ555Bt///vdx4YUX4sknn8SVV15p5L3//vtx3HHHoby8HLfccguuvvpqvPfeezj88MNdNzxCBhPcczbRX3vOwoULkclkcOCBB1rj9/LLL6OxsdG4/49//AMrV67EmWee2XPv5z//OQ444ABcf/31uOmmmxCNRnHaaafhqaee6rXuvuC1j1OnTsXjjz+Oc889F3feeSe+853voL29HcuWLeu1/GOPPRaXXnopnn/+eRx11FHYddddceONN2LFihW+29zV1YW1a9di6dKluO+++zBnzhxMmjQJJSUlRrq9994bJSUleOWVV3zXNWBxCBH89a9/dSKRiBOJRJxJkyY53/ve95x58+Y5mUzGSLdkyRIHgDNnzhyrDADOzJkze65nzpzpAHAuvPDCnnu5XM4ZNWqUEwqFnJtvvrnnfnNzs1NSUuKcffbZrm394he/6Hzuc59T21VZWemsXr3a+CyXyznpdNq419zc7NTX1zvnnXeeVUZdXZ3T0tLSc3/GjBkOAOfzn/+8k81me+6fddZZTjwed1KplOM4jtPe3u5UV1c73/rWt4y6GhsbnaqqKus+IYMZ7jn9v+f86le/cgA477zzjnF/0aJFDgDnjjvuMO5ffPHFTnl5udPZ2dlzb/P/dxzHyWQyzj777OMcddRRxv2xY8caY71xriRz5sxxADhLlizpUx+bm5sdAM6Pf/zjXvvcG9ls1nniiSeck046yYnFYk4kEnH+8z//03nsscesdenGrFmzHAA9P0cffbSzbNkyNe3uu+/ufPnLX/bd7oEKv9kkFscccwzmz5+PE044Af/85z/xox/9CFOmTMHIkSPxpz/9aavKvuCCC3r+PxKJYMKECXAcB+eff37P/erqauyxxx74+OOPt6quqVOnoq6uzrgXiUR6NFSFQgHr169HLpfDhAkT8NZbb1llnHbaaaiqquq5njhxIgDg61//OqLRqHE/k8n0/Pb77LPPoqWlBWeddRbWrl3b8xOJRDBx4kTrT2iEDGa452yiv/acdevWAYClVdx9992x//774+GHH+65l8/n8eijj+IrX/mK8e3c5v/f3NyM1tZWHHHEEWo//eC1jyUlJYjH43jxxRfR3Nzsq65oNIoTTjgBjz/+OD799FPccsst+OSTT3DKKadg1KhRuOqqq5DNZj2VddZZZ+HZZ5/Fgw8+iK9+9asAur/t1BgyZAjWrl3rq80DGR42icpBBx2Exx57DM3NzXj99dcxY8YMtLe349RTT8V7773nu9wxY8YY11VVVUgmkxg6dKh13+8msZFx48ap9++77z7st99+SCaTqK2tRV1dHZ566im0trZ6ai8AjB49Wr2/sc2LFy8G0B1MUFdXZ/z89a9/xerVq7eqb4TsaHDP2XJ7gW235ziKRvGMM87AK6+80nOwffHFF7F69WqcccYZRro///nPOOSQQ5BMJlFTU4O6ujrcddddaj/94LWPiUQCt9xyC55++mnU19fjC1/4An70ox9ZUgCvDBs2DFdccQVeffVVXHDBBVi9ejV+8pOfoKOjw1P+sWPHYvLkyTjrrLPwu9/9DjvvvDMmT56sHjgdx1H1q9s7UfckZDATj8dx0EEH4aCDDsLuu++Oc889F3PnzsXMmTO3+EDk8/ktlrd55F1v9wB90+sLUg8DAA888ADOOeccnHTSSbjqqqswbNgwRCIRzJo1Cx999JHntrm1uVAoAOjWFzU0NFjpNv+GghCyCe45/bPn1NbWAug+vI4aNcr47IwzzsCMGTMwd+5cTJ8+HY888giqqqrwpS99qSfN3//+d5xwwgn4whe+gDvvvBPDhw9HLBbDnDlz8OCDD/Zat9d57Usfp0+fjq985Sv44x//iHnz5uHqq6/GrFmz8Pzzz+OAAw7otT2b4zgOXnzxRfzmN7/BH/7wB6RSKRx99NG44IILUFlZ6bmczTn11FPxy1/+Ei+//DKmTJlifNbc3IzddtvNV7kDGf6LRzwzYcIEAMCqVasAbPpzS0tLi5Huk08+2abt6guPPvoodt55Zzz22GPGBjdz5syi1rPLLrsA6P6NWEZ3EkK8wT3HO1u75+y5554AgCVLlmDfffc1Phs3bhwOPvhgPPzww7jkkkvw2GOP4aSTTkIikehJ84c//AHJZBLz5s0z7s+ZM8e17s3ndXNHAjmvfe3jLrvsgiuuuAJXXHEFFi9ejP333x+33norHnjgAde8G4N57r33XixduhSjRo3CFVdcgfPPPx877bSTa/7e2PiNpvzGN5fLYfny5TjhhBO2qvyBCP+MTiy2ZPfwl7/8BQCwxx57AAAqKysxdOhQK4LzzjvvDL6RPtn47cDm/Xvttdcwf/78otYzZcoUVFZW4qabblJ1PWvWrClqfYRsz3DP2Xq2ds8ZP3484vE43nzzTfXzM844AwsWLMBvfvMbrF271voTeiQSQSgUMr6NXLp0Kf74xz+6tn3jIXLzee3o6MB9991npPPax87OTqRSKauOiooKpNPpXtvyzjvvYPLkydh5551x44034oADDsBTTz2FpUuX4oYbbujTQXNLY/7rX/8aoVDIivx/7733kEqlcOihh3quY3uB32wSi0svvRSdnZ04+eSTseeeeyKTyeDVV1/Fww8/jJ122gnnnntuT9oLLrgAN998My644AJMmDABL7/8Mj744IN+bH3vHH/88Xjsscdw8skn47jjjsOSJUtw9913Y++99y7qu4ArKytx11134Rvf+AYOPPBAnHnmmairq8OyZcvw1FNP4bDDDsP//u//Fq0+QrZnuOdsPVu75ySTSRx77LH429/+huuvv976/PTTT8eVV16JK6+8EjU1NdY3i8cddxx++tOf4ktf+hK++tWvYvXq1Zg9ezZ23XVX/Otf/+q17cceeyzGjBmD888/H1dddRUikQh+85vf9LS/r3384IMPcPTRR+P000/H3nvvjWg0iscffxxNTU2GVZPGwoULewKCzj777K16ocCNN96IV155BV/60pcwZswYrF+/Hn/4wx/wxhtv4NJLL8Wuu+5qpH/22WdRWlqKY445xnedAxUeNonFT37yE8ydOxd/+ctfcM899yCTyWDMmDG4+OKL8T//8z/GnzmuueYa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",
      "text/plain": [
       "<Figure size 800x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib.colors import LogNorm\n",
    "fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(8, 5))\n",
    "ax0.imshow(sum_results[0]['intensity'].data + 1, norm=LogNorm(vmin=1, vmax=1000))\n",
    "ax0.set_title('Sum frame')\n",
    "ax1.imshow(sum_results[1]['intensity'].data + 1, norm=LogNorm(vmin=1, vmax=1000))\n",
    "ax1.set_title(f'Sum frame (values > {threshold_level})')\n",
    "fig.suptitle('Dense input data')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f24e7e7b",
   "metadata": {},
   "source": [
    "Even if we supply data in a different format, the UDF definition is used to convert to a compatible form. Here we use the on-disk raw CSR (`scipy`) data, and LiberTEM handles conversion to `sparse.GCXS` to take advantage of `sparse.where`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "5d2f685d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:36.510512Z",
     "iopub.status.busy": "2023-06-29T12:46:36.510368Z",
     "iopub.status.idle": "2023-06-29T12:46:36.533138Z",
     "shell.execute_reply": "2023-06-29T12:46:36.532540Z"
    }
   },
   "outputs": [],
   "source": [
    "sum_results_sparse = ctx.run_udf(dataset_csr, udf=(SumUDF(), ThresholdSumSparse(threshold=threshold_level)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "f16be26d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:36.535297Z",
     "iopub.status.busy": "2023-06-29T12:46:36.535156Z",
     "iopub.status.idle": "2023-06-29T12:46:36.785799Z",
     "shell.execute_reply": "2023-06-29T12:46:36.785256Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0.98, 'RawCSR input data')"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAApsAAAGrCAYAAACPAFxUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACRIUlEQVR4nO2deXhV1b3+3zOfzCEhJMzgiNZSFRTBoV6Lpb22Tjh2Uqu1VbTFoe3l1+tYFbWT1aLW1oK1dcJq1Vql1jpWcMCnrcMVJxAEEqZMJDnz/v0RCazv+pK9szkbAnk/z5NH9z5rXmsvVk7e77tDjuM4IIQQQgghJADCO7oBhBBCCCFk14WHTUIIIYQQEhg8bBJCCCGEkMDgYZMQQgghhAQGD5uEEEIIISQweNgkhBBCCCGBwcMmIYQQQggJDB42CSGEEEJIYPCwSQghhBBCAoOHTUII6QNXXnklQqHQjm5G0TnyyCNx5JFH7uhmEEJ2QXjYJIQAAObNm4dQKNTzE41GMXz4cJx55plYuXLlDmnTBx98gG9/+9vYbbfdkEwmUVlZiUMPPRS//OUv0dXV1ZMuk8ngl7/8JQ444ABUVlaiuroan/rUp3DuuefinXfe6UnXH/u4rbz00ku48sor0dLSskPq7+zsxJVXXolnn312h9RPCOn/RHd0Awgh/Yurr74aY8eORSqVwqJFizBv3jy8+OKLePPNN5FMJrdbOx5//HGcfPLJSCQS+MY3voH99tsPmUwGL774Ir7//e/jrbfewh133AEAmD59Op544gmcfvrp+Na3voVsNot33nkHf/nLXzBlyhSMGzeuaH383//9X/zP//xPYP3uKy+99BKuuuoqnHnmmaiurt7u9Xd2duKqq64CAH4zSghR4WGTEGLwxS9+ERMnTgQAnHPOORg8eDBuuOEGPProozjllFO2SxuWLl2K0047DaNHj8Y//vEPDB06tOezGTNm4P3338fjjz8OAHj11Vfxl7/8Bddeey3+3//7f0Y5v/rVr9Rv/Lalj9FoFNEot05CCPEK/4xOCOmVww8/HED3n7Q3kclkcPnll2PChAmoqqpCWVkZDj/8cDzzzDNG3gMPPBAnnniice/Tn/40QqEQ/vOf//Tcu//++xEKhfB///d/AIAbb7wRGzduxJ133mkcNDexxx574Hvf+57RrkMPPdRKF4lEUFtb66uPW0PTbIZCIVxwwQX485//jP322w+JRAKf+tSn8OSTT6p533nnHZxyyimorKxEbW0tvve97yGVSvWkW7ZsGUKhEObNm2fVHwqFcOWVV/aU9/3vfx8AMHbs2B55wLJly3rtwx133IHdd98dJSUlOPjgg/HCCy9YabzM8bJly1BXVwcAuOqqq3rq39S+//znPzjzzDN7ZBANDQ345je/ifXr1/faPkLIrgV/PSeE9Mqmg8ugQYN67rW1teG3v/1tz5+t29vbceedd2LatGl45ZVXsP/++wPoPsTde++9Pfk2bNiAt956C+FwGC+88ALGjx8PAHjhhRdQV1eHffbZBwDw2GOPYbfddsOUKVNc2zd69GgAwB//+Ecceuihvr511PrYV1588UU89NBDOP/881FRUYGbb74Z06dPx/Lly60D7ymnnIIxY8Zg9uzZWLRoEW6++WY0Nzfj97//fZ/qPPHEE/Huu+/i3nvvxS9+8QsMHjwYAHoOgBp33nknvv3tb2PKlCmYOXMmPvzwQxx77LGoqanByJEje9J5meO6ujrcdtttOO+883DCCSf0/GKxaV6feuopfPjhhzjrrLPQ0NDQI3146623sGjRol0y0IoQouAQQojjOHPnznUAOH//+9+dtWvXOitWrHAefPBBp66uzkkkEs6KFSt60uZyOSedThv5m5ubnfr6eueb3/xmz7358+c7AJy3337bcRzHefTRR51EIuEce+yxzqmnntqTbvz48c4JJ5zgOI7jtLa2OgCc4447zlO7C4WC89nPftYB4NTX1zunn366M2fOHOejjz7apj5ujSuuuMKRWycAJx6PO++//37PvX//+98OAOeWW26x8h577LFG/vPPP98B4Pz73/92HMdxli5d6gBw5s6da9UPwLniiit6rn/yk584AJylS5e6tj2TyThDhgxx9t9/f2P+7rjjDgeA89nPfrbnntc5Xrt2rdWmTXR2dlr37r33XgeA8/zzz7u2lxCya8A/oxNCDKZOnYq6ujqMHDkSJ510EsrKyvDoo49ixIgRPWkikQji8TgAoFAoYMOGDcjlcpg4cSJef/31nnSb/jz9/PPPA+j+BvOggw7C0Ucf3fOn25aWFrz55ps9adva2gAAFRUVntobCoWwYMECXHPNNRg0aBDuvfdezJgxA6NHj8app56qaja99LGvTJ06FbvvvnvP9fjx41FZWYkPP/zQSjtjxgzj+sILLwQA/PWvf/Vdvxdee+01rFmzBt/5znd65g8AzjzzTFRVVRlpvc5xb5SUlPT8fyqVwrp163DIIYcAgOcyCCE7PzxsEkIM5syZg6eeegoPPvgg/vu//xvr1q1DIpGw0t11110YP348kskkamtrUVdXh8cffxytra09aerr67Hnnnv2HCxfeOEFHH744TjiiCOwatUqfPjhh/jnP/+JQqHQc9isrKwEALS3t3tucyKRwI9+9CP83//9H1atWoV7770XhxxyCB544AFccMEFvvvYF0aNGmXdGzRoEJqbm637e+65p3G9++67IxwOu2ott5WPPvpIrT8Wi2G33Xaz0nuZ497YsGEDvve976G+vh4lJSWoq6vD2LFjAcBzGYSQnR8eNgkhBgcffDCmTp2K6dOn49FHH8V+++2Hr3zlK9i4cWNPmj/84Q8488wzsfvuu+POO+/Ek08+iaeeegpHHXUUCoWCUd5hhx2GF154AV1dXVi8eDEOP/xw7LfffqiursYLL7yAF154AeXl5TjggAMAdB82hw0bhjfffNNX+4cOHYrTTjsNzz//PPbcc0888MADyOVyfe5jX4lEIup9x3Fc82oBRxr5fL7vDfNJX+Z4a5xyyin4zW9+g+985zt46KGH8Le//a0naMprGYSQnR8eNgkhWyUSiWD27NlYtWoVfvWrX/Xcf/DBB7HbbrvhoYcewte//nVMmzYNU6dONSKqN3H44Ydj+fLluO+++5DP5zFlyhSEw+GeQ+gLL7yAKVOmGIe1L33pS/jggw+wcOFC322PxWIYP348stks1q1b1+c+Bsl7771nXL///vsoFAoYM2YMgM2BSlICsOmbyS3pS5DNpmAqWX82m8XSpUuNe17neGv1Nzc34+mnn8b//M//4KqrrsIJJ5yAo48+Wv0GlRCya8PDJiGkV4488kgcfPDBuOmmm3oOGpsOhlt+a/fyyy+rh8NNfx6/4YYbMH78+B5t4OGHH46nn34ar732Wk+aTfzgBz9AWVkZzjnnHDQ1NVllfvDBB/jlL38JoPvgtHz5citNS0sLFi5ciEGDBvUanb21PgbJnDlzjOtbbrkFQLf/J9D97e7gwYN7tK6buPXWW62yysrKANgHU42JEyeirq4Ot99+OzKZTM/9efPmWfm9znFpaalav5YfAG666SbXdhJCdi1ofUQIceX73/8+Tj75ZMybNw/f+c538KUvfQkPPfQQTjjhBBxzzDFYunQpbr/9duy7777Wn6L32GMPNDQ0YMmSJT2BMABwxBFH4Ic//CEAWIfN3XffHffccw9OPfVU7LPPPsYbhF566SXMnz8fZ555JgDg3//+N77yla/gi1/8Ig4//HDU1NRg5cqVuOuuu7Bq1SrcdNNNW/0Td299DJKlS5fi2GOPxRe+8AUsXLgQf/jDH/CVr3wFn/nMZ3rSnHPOObj++utxzjnnYOLEiXj++efx7rvvWmVNmDABAPCjH/0Ip512GmKxGL785S/3HEK3JBaL4ZprrsG3v/1tHHXUUTj11FOxdOlSzJ071/rG0escl5SUYN9998X999+PvfbaCzU1Ndhvv/2w33774YgjjsCNN96IbDaL4cOH429/+5v1DSohZACwY4PhCSH9hU22QK+++qr1WT6fd3bffXdn9913d3K5nFMoFJzrrrvOGT16tJNIJJwDDjjA+ctf/uKcccYZzujRo638J598sgPAuf/++3vuZTIZp7S01InH405XV5fapnfffdf51re+5YwZM8aJx+NORUWFc+ihhzq33HKLk0qlHMdxnKamJuf66693PvvZzzpDhw51otGoM2jQIOeoo45yHnzwQd993Bpbsz6aMWOGlXb06NHOGWecYeV9++23nZNOOsmpqKhwBg0a5FxwwQXWGHR2djpnn322U1VV5VRUVDinnHKKs2bNGtVm6Mc//rEzfPhwJxwOe7JBuvXWW52xY8c6iUTCmThxovP88887n/3sZw3ro77M8UsvveRMmDDBicfjRvs+/vhj54QTTnCqq6udqqoq5+STT3ZWrVq1VaskQsiuSchxPKjXCSGEbDNXXnklrrrqKqxdu7bHgJ0QQnZ1qNkkhBBCCCGBwcMmIYQQQggJDB42CSGEEEJIYFCzSQghhBBCAoPfbBJCCCGEkMDgYZMQQgghhAQGD5uEEEIIISQweNgkhBBCCCGBwcMmIYQQQggJDB42CSGEEEJIYPCwSQghhBBCAoOHTUIIIYQQEhg8bBJCCCGEkMDgYZMQQgghhAQGD5uEEEIIISQweNgkhBBCCCGBwcMmIYQQQggJDB42CSGEEEJIYPCwSQghhBBCAoOHTUIIIYQQEhg8bBJCCCGEkMDgYZMQQgghhAQGD5uEEEIIISQweNgkhBBCCCGBwcMmIYQQQggJDB42CSGEEEJIYPCwSQghhBBCAoOHTUIIIYQQEhg8bBJCCCGEkMDgYZMQQgghhAQGD5uEEEIIISQweNgkhBBCCCGBwcMmIYQQQggJDB42CSGEEEJIYPCwSQghhBBCAoOHTUIIIYQQEhg8bBJCCCGEkMDgYZMQQgghhAQGD5uEEEIIISQweNgkhBBCCCGBwcMmIYQQQggJDB42CSGEEEJIYPCwSQghhBBCAoOHTUIIIYQQEhg8bBJCCCGEkMDgYZMQQgghhAQGD5uEEEIIISQweNgkhBBCCCGBwcMmIYQQQggJDB42CSGEEEJIYPCwSQghhBBCAoOHTUIIIYQQEhg8bBJCCCGEkMDgYZMQQgghhAQGD5uEEEIIISQweNgkhBBCCCGBwcMmIYQQQggJDB42CSGEEEJIYPCwSQghhBBCAoOHTUIIIYQQEhg8bBJCCCGEkMDgYZMQQgghhAQGD5uEEEIIISQweNgkhBBCCCGBwcMm2anJ5XL4wQ9+gJEjRyIcDuP444/f0U0ihOzC7Op7zgMPPICamhps3LgxsDrGjBmDM888M7Dyd0ZOO+00nHLKKTu6GYHBwyZReeONN3DSSSdh9OjRSCaTGD58OI4++mjccsstO7ppBr/73e/wk5/8BCeddBLuuusuXHTRRTu6SYQQH3DP2fHk83lcccUVuPDCC1FeXr6jm7PTs2rVKnzta1/D3nvvjYqKClRXV+Pggw/GXXfdBcdxjLQ//OEP8ac//Qn//ve/d1BrgyXkyB6TAc9LL72E//qv/8KoUaNwxhlnoKGhAStWrMCiRYvwwQcf4P3339/RTezhtNNOw4svvoiPP/54RzeFEOIT7jn9gz//+c848cQTsWLFCgwfPjywesaMGYMjjzwS8+bNC6yO/sB//vMffPe738Whhx6KUaNGIZvN4qmnnsKjjz6KWbNm4brrrjPST5o0CXvvvTd+//vf76AWBwcPm8TimGOOwauvvop3330X1dXVxmdr1qzBkCFDdkzDFI466iisWbMGb775Zq/pcrkcCoUC4vH4dmoZIcQr3HP6B8cddxw2bNiAF154IdB6+vNh8+OPP0ZZWRkGDRoUWB1f/vKX8cwzz6C1tRWRSKTn/s9+9jNcccUVaGxs3OW+Weaf0YnFBx98gE996lPWpg/A2PSXLVuGUCikbhihUAhXXnllz/WVV16JUCiEd999F1/72tdQVVWFuro6XHbZZXAcBytWrMBxxx2HyspKNDQ04Gc/+1mvbdxU9zPPPIO33noLoVAIoVAIzz77bM9nP/3pT3HTTTdh9913RyKRwNtvv41MJoPLL78cEyZMQFVVFcrKynD44YfjmWeeUcv/6U9/ijlz5mC33XZDaWkpPv/5z2PFihVwHAc//vGPMWLECJSUlPRs0pInnngChx9+OMrKylBRUYFjjjkGb731Vu8TQMgAg3vOjt9zUqkUnnzySUydOtW4v99+++G//uu/rPSFQgHDhw/HSSed1HPvpz/9KaZMmYLa2lqUlJRgwoQJePDBB13r3jRXknnz5iEUCmHZsmV97mNjYyPOOussjBgxAolEAkOHDsVxxx1nlSX5+9//jmHDhuGrX/0qnnnmGevP3cVgzJgx6OzsRCaTMe4fffTR6OjowFNPPVX0Onc0PGwSi9GjR2Px4sWuv7n74dRTT0WhUMD111+PSZMm4ZprrsFNN92Eo48+GsOHD8cNN9yAPfbYA5deeimef/75rZZTV1eHu+++G+PGjcOIESNw99134+6778Y+++zTk2bu3Lm45ZZbcO655+JnP/sZampq0NbWht/+9rc48sgjccMNN+DKK6/E2rVrMW3aNPzrX/+y6vnjH/+IW2+9FRdeeCEuueQSPPfcczjllFPwv//7v3jyySfxwx/+EOeeey4ee+wxXHrppUbeu+++G8cccwzKy8txww034LLLLsPbb7+Nww47zHXDI2QgwT1nMztqz1m8eDEymQwOPPBAa/yef/55NDY2GvdffPFFrFq1CqeddlrPvV/+8pc44IADcPXVV+O6665DNBrFySefjMcff7zXuvuC1z5Onz4dDz/8MM466yzceuut+O53v4v29nYsX7681/I///nP48ILL8Q//vEPHHXUUdhjjz1w7bXXYuXKlb7b3NXVhXXr1mHZsmW46667MHfuXEyePBklJSVGun333RclJSX45z//6buufotDiOBvf/ubE4lEnEgk4kyePNn5wQ9+4CxYsMDJZDJGuqVLlzoAnLlz51plAHCuuOKKnusrrrjCAeCce+65PfdyuZwzYsQIJxQKOddff33P/ebmZqekpMQ544wzXNv62c9+1vnUpz6ltquystJZs2aN8Vkul3PS6bRxr7m52amvr3e++c1vWmXU1dU5LS0tPfdnzZrlAHA+85nPONlstuf+6aef7sTjcSeVSjmO4zjt7e1OdXW1861vfcuoq7Gx0amqqrLuEzKQ4Z6z4/ec3/72tw4A54033jDuL1myxAHg3HLLLcb9888/3ykvL3c6Ozt77m35/47jOJlMxtlvv/2co446yrg/evRoY6w3zZVk7ty5DgBn6dKlfepjc3OzA8D5yU9+0mufeyObzTqPPPKIc/zxxzuxWMyJRCLOf//3fzsPPfSQtS7dmD17tgOg5+dzn/ucs3z5cjXtXnvt5Xzxi1/03e7+Cr/ZJBZHH300Fi5ciGOPPRb//ve/ceONN2LatGkYPnw4Hn300W0q+5xzzun5/0gkgokTJ8JxHJx99tk996urq7H33nvjww8/3Ka6pk+fjrq6OuNeJBLp0VAVCgVs2LABuVwOEydOxOuvv26VcfLJJ6OqqqrnetKkSQCAr33ta4hGo8b9TCbT89vvU089hZaWFpx++ulYt25dz08kEsGkSZOsP6ERMpDhnrOZHbXnrF+/HgAsreJee+2F/fffH/fff3/PvXw+jwcffBBf/vKXjW/ntvz/5uZmtLa24vDDD1f76QevfSwpKUE8Hsezzz6L5uZmX3VFo1Ece+yxePjhh/Hxxx/jhhtuwEcffYQTTzwRI0aMwPe//31ks1lPZZ1++ul46qmncM899+ArX/kKgO5vOzUGDRqEdevW+Wpzf4aHTaJy0EEH4aGHHkJzczNeeeUVzJo1C+3t7TjppJPw9ttv+y531KhRxnVVVRWSySQGDx5s3fe7SWxi7Nix6v277roL48ePRzKZRG1tLerq6vD444+jtbXVU3sBYOTIker9TW1+7733AHQHE9TV1Rk/f/vb37BmzZpt6hshuxrcc7beXmD77TmOolE89dRT8c9//rPnYPvss89izZo1OPXUU410f/nLX3DIIYcgmUyipqYGdXV1uO2229R++sFrHxOJBG644QY88cQTqK+vxxFHHIEbb7zRkgJ4ZciQIbjkkkvw0ksv4ZxzzsGaNWvw05/+FB0dHZ7yjx49GlOnTsXpp5+OP/7xj9htt90wdepU9cDpOI6qX93ZibonIQOZeDyOgw46CAcddBD22msvnHXWWZg/fz6uuOKKrT4Q+Xx+q+VtGXnX2z1A3/T6gtTDAMAf/vAHnHnmmTj++OPx/e9/H0OGDEEkEsHs2bPxwQcfeG6bW5sLhQKAbn1RQ0ODlW7LbygIIZvhnrNj9pza2loA3YfXESNGGJ+deuqpmDVrFubPn4+ZM2figQceQFVVFb7whS/0pHnhhRdw7LHH4ogjjsCtt96KoUOHIhaLYe7cubjnnnt6rdvrvPaljzNnzsSXv/xl/PnPf8aCBQtw2WWXYfbs2fjHP/6BAw44oNf2bInjOHj22Wfxu9/9Dn/605+QSqXwuc99Dueccw4qKys9l7MlJ510En7zm9/g+eefx7Rp04zPmpubseeee/oqtz/Df/GIZyZOnAgAWL16NYDNf25paWkx0n300UfbtV194cEHH8Ruu+2Ghx56yNjgrrjiiqLWs/vuuwPo/o1YRncSQrzBPcc727rnjBs3DgCwdOlSfPrTnzY+Gzt2LA4++GDcf//9uOCCC/DQQw/h+OOPRyKR6Enzpz/9CclkEgsWLDDuz50717XuLed1S0cCOa997ePuu++OSy65BJdccgnee+897L///vjZz36GP/zhD655NwXzzJs3D8uWLcOIESNwySWX4Oyzz8aYMWNc8/fGpm805Te+uVwOK1aswLHHHrtN5fdH+Gd0YrE1u4e//vWvAIC9994bAFBZWYnBgwdbEZy33npr8I30yaZvB7bs38svv4yFCxcWtZ5p06ahsrIS1113narrWbt2bVHrI2RnhnvOtrOte86ECRMQj8fx2muvqZ+feuqpWLRoEX73u99h3bp11p/QI5EIQqGQ8W3ksmXL8Oc//9m17ZsOkVvOa0dHB+666y4jndc+dnZ2IpVKWXVUVFQgnU732pY33ngDU6dOxW677YZrr70WBxxwAB5//HEsW7YMP/7xj/t00NzamN95550IhUJW5P/bb7+NVCqFKVOmeK5jZ4HfbBKLCy+8EJ2dnTjhhBMwbtw4ZDIZvPTSS7j//vsxZswYnHXWWT1pzznnHFx//fU455xzMHHiRDz//PN49913d2Dre+dLX/oSHnroIZxwwgk45phjsHTpUtx+++3Yd999i/ou4MrKStx22234+te/jgMPPBCnnXYa6urqsHz5cjz++OM49NBD8atf/apo9RGyM8M9Z9vZ1j0nmUzi85//PP7+97/j6quvtj4/5ZRTcOmll+LSSy9FTU2N9c3iMcccg5///Of4whe+gK98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",
      "text/plain": [
       "<Figure size 800x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(8, 5))\n",
    "ax0.imshow(sum_results[0]['intensity'].data + 1, norm=LogNorm(vmin=1, vmax=1000))\n",
    "ax0.set_title('Sum frame')\n",
    "ax1.imshow(sum_results[1]['intensity'].data + 1, norm=LogNorm(vmin=1, vmax=1000))\n",
    "ax1.set_title(f'Sum frame (values > {threshold_level})')\n",
    "fig.suptitle('RawCSR input data')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9eb4d507",
   "metadata": {},
   "source": [
    "This is not the most efficient way to perform a threshold-sum, but demonstrates that UDFs can declare their compatibility explicitly and LiberTEM will handle conversion as appropriate."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a36821b",
   "metadata": {},
   "source": [
    "## Dask and HyperSpy integration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "a999446a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:36.787651Z",
     "iopub.status.busy": "2023-06-29T12:46:36.787509Z",
     "iopub.status.idle": "2023-06-29T12:46:36.790685Z",
     "shell.execute_reply": "2023-06-29T12:46:36.790256Z"
    }
   },
   "outputs": [],
   "source": [
    "from libertem.contrib.daskadapter import make_dask_array"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4779cdc6",
   "metadata": {},
   "source": [
    "### Dask array with sparse chunks\n",
    "\n",
    "We explicitly request a sparse backend with ndarray support for the chunks by passing the `array_backend` parameter.\n",
    "See https://docs.dask.org/en/stable/array-sparse.html for details on sparse Dask arrays!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "03905b77",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:36.792555Z",
     "iopub.status.busy": "2023-06-29T12:46:36.792232Z",
     "iopub.status.idle": "2023-06-29T12:46:36.795339Z",
     "shell.execute_reply": "2023-06-29T12:46:36.794919Z"
    }
   },
   "outputs": [],
   "source": [
    "sparse_dask_array, workers = make_dask_array(dataset_csr, array_backend=SPARSE_GCXS)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "383163d5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:36.797232Z",
     "iopub.status.busy": "2023-06-29T12:46:36.796824Z",
     "iopub.status.idle": "2023-06-29T12:46:36.804261Z",
     "shell.execute_reply": "2023-06-29T12:46:36.803839Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table>\n",
       "    <tr>\n",
       "        <td>\n",
       "            <table style=\"border-collapse: collapse;\">\n",
       "                <thead>\n",
       "                    <tr>\n",
       "                        <td> </td>\n",
       "                        <th> Array </th>\n",
       "                        <th> Chunk </th>\n",
       "                    </tr>\n",
       "                </thead>\n",
       "                <tbody>\n",
       "                    \n",
       "                    <tr>\n",
       "                        <th> Bytes </th>\n",
       "                        <td> 4.00 MiB </td>\n",
       "                        <td> 4.00 MiB </td>\n",
       "                    </tr>\n",
       "                    \n",
       "                    <tr>\n",
       "                        <th> Shape </th>\n",
       "                        <td> (8, 32, 64, 64) </td>\n",
       "                        <td> (8, 32, 64, 64) </td>\n",
       "                    </tr>\n",
       "                    <tr>\n",
       "                        <th> Dask graph </th>\n",
       "                        <td colspan=\"2\"> 1 chunks in 4 graph layers </td>\n",
       "                    </tr>\n",
       "                    <tr>\n",
       "                        <th> Data type </th>\n",
       "                        <td colspan=\"2\"> float32 numpy.ndarray </td>\n",
       "                    </tr>\n",
       "                </tbody>\n",
       "            </table>\n",
       "        </td>\n",
       "        <td>\n",
       "        <svg width=\"423\" height=\"205\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"0\" y1=\"0\" x2=\"39\" y2=\"0\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"0\" y1=\"27\" x2=\"39\" y2=\"27\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"27\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"39\" y1=\"0\" x2=\"39\" y2=\"27\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"0.0,0.0 39.793935054828374,0.0 39.793935054828374,27.675387197907465 0.0,27.675387197907465\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Text -->\n",
       "  <text x=\"19.896968\" y=\"47.675387\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >8</text>\n",
       "  <text x=\"59.793935\" y=\"13.837694\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,59.793935,13.837694)\">1</text>\n",
       "\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"109\" y1=\"0\" x2=\"144\" y2=\"35\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"109\" y1=\"120\" x2=\"144\" y2=\"155\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"109\" y1=\"0\" x2=\"109\" y2=\"120\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"144\" y1=\"35\" x2=\"144\" y2=\"155\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"109.0,0.0 144.29411764705884,35.294117647058826 144.29411764705884,155.29411764705884 109.0,120.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"109\" y1=\"0\" x2=\"229\" y2=\"0\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"144\" y1=\"35\" x2=\"264\" y2=\"35\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"109\" y1=\"0\" x2=\"144\" y2=\"35\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"229\" y1=\"0\" x2=\"264\" y2=\"35\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"109.0,0.0 229.0,0.0 264.29411764705884,35.294117647058826 144.29411764705884,35.294117647058826\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Horizontal lines -->\n",
       "  <line x1=\"144\" y1=\"35\" x2=\"264\" y2=\"35\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"144\" y1=\"155\" x2=\"264\" y2=\"155\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Vertical lines -->\n",
       "  <line x1=\"144\" y1=\"35\" x2=\"144\" y2=\"155\" style=\"stroke-width:2\" />\n",
       "  <line x1=\"264\" y1=\"35\" x2=\"264\" y2=\"155\" style=\"stroke-width:2\" />\n",
       "\n",
       "  <!-- Colored Rectangle -->\n",
       "  <polygon points=\"144.29411764705884,35.294117647058826 264.29411764705884,35.294117647058826 264.29411764705884,155.29411764705884 144.29411764705884,155.29411764705884\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
       "\n",
       "  <!-- Text -->\n",
       "  <text x=\"204.294118\" y=\"175.294118\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >64</text>\n",
       "  <text x=\"284.294118\" y=\"95.294118\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,284.294118,95.294118)\">64</text>\n",
       "  <text x=\"116.647059\" y=\"157.647059\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,116.647059,157.647059)\">32</text>\n",
       "</svg>\n",
       "        </td>\n",
       "    </tr>\n",
       "</table>"
      ],
      "text/plain": [
       "dask.array<reshape, shape=(8, 32, 64, 64), dtype=float32, chunksize=(8, 32, 64, 64), chunktype=numpy.ndarray>"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sparse_dask_array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "9ed1db15",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:36.806153Z",
     "iopub.status.busy": "2023-06-29T12:46:36.805756Z",
     "iopub.status.idle": "2023-06-29T12:46:37.683801Z",
     "shell.execute_reply": "2023-06-29T12:46:37.683236Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "63.592041015625\n"
     ]
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "print(sparse_dask_array.sum().compute() / np.prod(sparse_dask_array.shape[2:]))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "10f62464",
   "metadata": {},
   "source": [
    "### Dask array with dense CuPy chunks\n",
    "\n",
    "We explicitly request the CUPY backend for the chunks by passing the `array_backend` parameter.\n",
    "See https://docs.dask.org/en/stable/gpu.html for details on Dask arrays on GPUs!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "5f49a07d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:37.685600Z",
     "iopub.status.busy": "2023-06-29T12:46:37.685458Z",
     "iopub.status.idle": "2023-06-29T12:46:37.688161Z",
     "shell.execute_reply": "2023-06-29T12:46:37.687737Z"
    }
   },
   "outputs": [],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "if has_cupy:\n",
    "    from sparseconverter import CUPY\n",
    "    \n",
    "    cupy_dask_array, workers = make_dask_array(dataset_csr, array_backend=CUPY)\n",
    "    cupy_dask_array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "c88271b3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:37.690040Z",
     "iopub.status.busy": "2023-06-29T12:46:37.689701Z",
     "iopub.status.idle": "2023-06-29T12:46:37.692086Z",
     "shell.execute_reply": "2023-06-29T12:46:37.691666Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "63.59204\n"
     ]
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "if has_cupy:\n",
    "    print(cupy_dask_array.sum().compute() / np.prod(cupy_dask_array.shape[2:]))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5cad1f6d",
   "metadata": {},
   "source": [
    "### Using pyxem on a sparse dataset\n",
    "\n",
    "By default `make_dask_array()` will convert chunks to NumPy since that is expected by most downstream users, including pyxem and HyperSpy."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "5bbf3d53",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:37.693791Z",
     "iopub.status.busy": "2023-06-29T12:46:37.693664Z",
     "iopub.status.idle": "2023-06-29T12:46:39.300230Z",
     "shell.execute_reply": "2023-06-29T12:46:39.299715Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\weber\\miniconda3\\envs\\libertem311\\Lib\\site-packages\\diffsims\\utils\\discretise_utils.py:248: NumbaDeprecationWarning: \u001b[1mThe 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.\u001b[0m\n",
      "  @numba.jit(cache=True)\n",
      "C:\\Users\\weber\\miniconda3\\envs\\libertem311\\Lib\\site-packages\\diffsims\\utils\\discretise_utils.py:263: NumbaDeprecationWarning: \u001b[1mThe 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.\u001b[0m\n",
      "  @numba.jit(cache=True)\n",
      "WARNING:silx.opencl.common:Unable to import pyOpenCl. Please install it from: https://pypi.org/project/pyopencl\n"
     ]
    }
   ],
   "source": [
    "import pyxem"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "41b9b091",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:39.303122Z",
     "iopub.status.busy": "2023-06-29T12:46:39.302642Z",
     "iopub.status.idle": "2023-06-29T12:46:39.309996Z",
     "shell.execute_reply": "2023-06-29T12:46:39.309636Z"
    }
   },
   "outputs": [],
   "source": [
    "dense_dask_array, workers = make_dask_array(dataset_csr)\n",
    "dense_4d = pyxem.signals.LazyDiffraction2D(dense_dask_array)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "d319d224",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2023-06-29T12:46:39.312396Z",
     "iopub.status.busy": "2023-06-29T12:46:39.312104Z",
     "iopub.status.idle": "2023-06-29T12:46:40.090517Z",
     "shell.execute_reply": "2023-06-29T12:46:40.090122Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[########################################] | 100% Completed | 104.08 ms\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x200 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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UTLLv6veAHjV8ePH1aZNG1mtVvXv31+NGzfWsWPHtHXrVr3xxht66KGHFPO/ivfTp09X3qUq0gMA7AiUgBAyY8YM7dmzR2vXrtV1113n0Ga1WlWyoNSG5PZ1jgDAHcWR8fFHRikwTr0B8IodO3YoMjJSiYmJhdri4uIUHR1tv32pOUrHjh1Tnz59FBcXp3Llyqlfv37asmWLLBaLZl00Zy81NVUxMTHav3+/unfvrpiYGFWqVEnDhg1Tbm6uwzEnTZqk6667ThUqVFDp0qXVunVrffjhh1593ADgKwRKQAipXbu2cnNzNWfOHI/3zcvLU9euXfXBBx+oX79+Gj9+vLKystSvX79L3j83N1edOnVShQoVNGnSJCUnJ2vy5MmFqt1OnTpVLVu21Lhx4zRhwgSVKFFCKSkpWrJkSZEeI4DAFKpzlAiUgBDSv39/VapUSampqWrSpIkeeughffDBB8rOzna578KFC7Vu3TpNnjxZr776qh555BEtW7ZMFSpUuOT9z5w5o7vuukszZszQwIED9eGHH6ply5aaMWOGw/1+/fVXvf7663rkkUeUlpamNWvWqFmzZpoyZYpXHjMA+BKBEhBCEhIStGXLFg0cOFAnTpzQP//5T91zzz2qXLmy/vGPfxj+b2zZsmWKiorSAw88YN8WERGhRx55xOk+AwcOdLh9/fXXa+fOnQ7bSpcubf/3iRMnlJ2dreuvv16bNm3y9OEBCGBklAAEhapVq+qNN95QVlaWfvnlF73yyiuqVKmSnn322ULZnov997//VdWqVQtd/6iBk8sDRUdHq9JfKuJfdtllOnHihMO2xYsXKzExUdHR0SpfvrwqVaqkN954w60sFwD4G4ESEKIsFosaNWqkQYMGafXq1YqIiND777/vteNHRka6vM/XX3+t22+/XdHR0Zo2bZqWLl2qFStW6J577vHL/wwB+E6oZpQoDwCEgXr16umyyy5TVlaW0/vUrl1bK1eu1O+//+6QVfrtt9+K3O9HH32k6OhoLV++XKVKlbJvnzlzZpGPCQDFiYwSEEI2bNig06dPF9r+7bff6tixY7r88sud7tupUyedP39e06dPt2/Ly8vT66+/XuTxREZGymKxOJQM2L17txYuXFjkYwIITGSUAAS8OXPm6P3331ePHj3UunVrlSxZUtu3b9c777yj6OhoPf3000737d69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duyYbDabrrzyyiIdoyiKqx8AAIJBQJ16u/766zV8+HC1bt1a1apVU/fu3bVo0SKH+zz88MMaPny4qlSpoi1btmjQoEH67rvv3O4jGJZWd+7cWampqbrxxhu1c+dOHT16VD179tT58+f9PTS/CZTXJhAE4nPhq2XivnqsLF33DqPnkdIB4YdTb8WgbNmy2rJlix555JFLtvfq1UtTpkzR2LFj1apVK23ZskXLly9XpUqVPO4rPj5eZcqUMTtkn6hfv76ysrK0bt06HTp0SLm5uTpx4oRycnKKfSxVq1ZVZGRksfcLAEAgCKhAadmyZRo1apQWLlx4yfahQ4dq+vTpmjVrlrZv366BAwfq999/V//+/d06fmRkpG666Sa98cYb+v7771W7dm172zfffKMhQ4Y43H/z5s0aPXq0/fbKlSs1depUvfjiizp27JiysrIc2iWpTJkymj17tk6dOqUDBw5o6NChDu0Wi0VPPvmkdu7cqd9//10//PCD7rjjDnv7zJkz9dprr6l27dqy2WzatWuXve+LT4m5GourftwZqyQ98MAD2rdvnyZOnKhmzZq5fI4BAOGpIKPk65/iFlCBkpGoqCi1bt1an3/+uX2bzWbT559/rqSkJMN9mzVrpkmTJmnfvn16+eWXdfz4cd11113avn27x+Po16+fTp8+rWuvvVZPPPGEnn32WXXo0MHePnHiRCUnJ6tbt27q2LGjbrzxRrVq1cre/tRTT6lv374aOHCgrrjiCqWnp+u9997TDTfcIEkaMmSIRo0apb1796pKlSq6+uqrizQWV/24M1ZJevHFFzVkyBA1adJEmzZt0saNGzVo0CBVrFjR4+cOAIBgE1BzlIxUrFhRJUqU0KFDhxy2Hzp0SI0bNy50//Lly6t3797q16+frrjiCi1dulQPP/ywfvjhB1NzfbZu3apx48ZJkn777Tc9+uijat++vT7//HOVLVtWAwYMUO/evfXll19Kyg9mCuZZlCxZUk8//bQ6dOhgP0e/a9cutWvXTn//+9+1evVqWa1WnTp1Srm5uYUeq7tjWb16tct+XI21wNmzZzV//nzNnz9flSpV0j333KPU1FRNmjRJS5cu1ezZs/XJJ58oNze3yM8pACD4MUcpyAwaNEhTp05VTk6OGjRooJ49e+rjjz82PSF669atDrezsrJUuXJlSflzi0qVKqUN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fV544QUlJCQoNjZWAwYM0JkzZwwfc//+/TV16lQlJyerXr166t27t+677z4tWLCg0HjnzJmjOnXqKD4+Xv/3f/+nU6dO2e9z+vRp9e3bVzExMapataomT57s8vnesWOHunXrpoSEBMXExOjqq6/W559/bm//+eefVaZMGf3rX/+yb5s/f75Kly6tzMxMSYVPvX344Ydq3ry5SpcurQoVKqhDhw46ffq0y7EACE0ESoCXrVy5Ujt27NDKlSs1e/ZszZo1q9CpncmTJ6tNmzbavHmzHn74YT300EP65Zdf7O2xsbGaNWuWMjMzNXXqVE2fPl3p6ekOx9ixY4c+/fRTLVu2TB988IFmzJihLl26aN++ffrqq6/04osv6plnntGGDRvs+6SkpOjw4cP69NNPtXHjRrVq1Urt27fX8ePHJeUHEWPGjNGECRP0/fffq2rVqpo2bZrHz0F2drbKly9faLwLFy7U4sWLtXjxYn311Vd64YUX7O3Dhw/XV199pUWLFumzzz7TqlWrtGnTJsN+cnJydOutt+qLL77Q5s2b1blzZ3Xt2lV79uyRJDVu3FiTJk3Sww8/rD179mjfvn0aOHCgXnzxRTVt2rTQ8bKysnT33Xerf//+2r59u1atWqWePXty3SzADTabrVh+/PHAALiQnJxsGzJkSKHtM2fOtMXHx9tv9+vXz1a7dm3bhQsX7NtSUlJsd911l/127dq1bb1797bfzsvLs1WuXNn2xhtvOO1/4sSJttatW9tvjx492lamTBmb1Wq1b+vUqZOtTp06ttzcXPu2yy+/3Pb888/bbDab7euvv7bFxcXZzpw543Ds+vXr2958802bzWazJSUl2R5++GGH9muvvdZ25ZVXOh3bX61du9ZWokQJ2/Llyw3HO3z4cNu1115rs9lstlOnTtlKlixpmz9/vr392LFjttKlS1/yeTdyxRVX2F599VWHbV26dLFdf/31tvbt29s6duxoy8vLs7f169fP1q1bN5vNZrNt3LjRJsm2e/duj/oEwll2drZNki06OtpWunRpn/5ER0fbJNmys7OL7fExRwnwsiuuuEKRkZH221WrVtWPP/7ocJ8WLVrY/22xWFSlShUdPnzYvm3evHl65ZVXtGPHDuXk5OjChQuFLgBZp04dxcbG2m8nJCQoMjJSERERDtsKjrtlyxbl5OSoQoUKDsf5448/tGPHDknS9u3bNXDgQIf2pKQkrVy50q3H/tNPP6lbt24aPXq0OnbsaDjeqlWr2se2Y8cOnTt3Ttdee629vXz58rr88ssN+8vJydGYMWO0ZMkSZWVl6cKFC/rjjz/sGaUC77zzjho1aqSIiAht27bN6TUmr7zySrVv317NmzdXp06d1LFjR91555267LLL3Hr8QDizhegcJQIlwA1xcXHKzs4utP3kyZOFJgNHRUU53LZYLMrLy3P7PuvWrdO9996rsWPHqlOnToqPj9fcuXMLzdm51DGMjpuTk6OqVatq1apVhR6HN1buZWZmqn379nrwwQf1zDPPFGp353nx1LBhw7RixQpNmjRJDRo0UOnSpXXnnXfq3LlzDvfbsmWLTp8+rYiICGVlZalq1aqXPF5kZKRWrFihb775Rp999pleffVVjRw5Uhs2bFDdunVNjRVAcGKOEuCGyy+//JLzZTZt2qRGjRp5ta9vvvlGtWvX1siRI9WmTRs1bNhQ//3vf00ft1WrVjp48KBKlCihBg0aOPxUrFhRktSkSROHOU2StH79epfH3rZtm/72t7+pX79+hSaQu6N+/fqKiopy6PvEiRP69ddfDfdbu3atUlNT1aNHDzVv3lxVqlTR7t27He5z/PhxpaamauTIkUpNTdW9996rP/74w+kxLRaL2rZtq7Fjx2rz5s0qWbKkPv74Y48fExBubCE6R4mMEuCGhx56SK+99poGDx6s+++/X6VKldKSJUv0wQcf6JNPPvFqXw0bNtSePXs0d+5cXX311VqyZIlX/lB36NBBSUlJ6t69u1566SU1atRIBw4c0JIlS9SjRw+1adNGQ4YMUWpqqtq0aaO2bdvq/fff17Zt21SvXj2nx/3pp5900003qVOnTho6dKgOHjwoKT87U6lSJbfGFhMTowEDBmj48OGqUKGCKleurJEjRzqcRryUhg0basGCBeratassFotGjRpVKEs1cOBA1axZU88884zOnj2rli1batiwYXr99dcLHW/Dhg364osv1LFjR1WuXFkbNmzQkSNH1KRJE7ceB4DQQ6AEuKFevXpavXq1Ro4cqQ4dOujcuXNq3LixMjIy1LlzZ6/2dfvttystLU2PPvqozp49qy5dumjUqFEaM2aMqeNaLBYtXbpUI0eO1H333acjR46oSpUquuGGG5SQkCBJuuuuu7Rjxw498cQTOnPmjO644w499NBDWr58udPjfvjhhzpy5Ijee+89vffee/bttWvXLpTdMTJx4kTl5OSoa9euio2N1eOPP37J050XmzJlivr376/rrrtOFStW1IgRI2S1Wu3t7777rpYuXarNmzerRIkSKlGihN577z21a9dOt912m2655RaH48XFxWn16tV6+eWXZbVaVbt2bU2ePLnQ/QAUFqpzlCw2f/QKAABCgtVqVXx8vKKiopwulPAWm82m8+fPKzs7u9ACF18howQAAEwL1YwSk7kBAACcIKMEAABMI6MEAAAQZsgoAQAA08goAQAAhBkySgAAwDQySgAAAGGGjBIAADCNjBIAAEAQ6tWrl0qUKCGLxaKYmBjNnDnT7X0JlAAAgFfYbDaf/hTFkCFDlJGRob59+2rRokWqWbOmBgwYoG3btrm1P9d6AwAARVZwrbfi5Mm13mJiYlSvXj1t3bpVknThwgWVKlVKN998s5YtW+Zyf+YoAQCAoLJ//35ZrVb77bi4uEsGTjk5OTp9+rS6dOli31aiRAnVqVNHW7ZscasvAiUAAFBkJUuWVJUqVXTw4MFi6S8qKkpNmzZ12JacnKxVq1YVuu+vv/4qSapbt67D9goVKujQoUNu9UegBAAAiiw6Olq7du3SuXPniqW/M2fOFOrL3dNwRUGgBAAATImOjlZ0dHSx9OVJUNSoUSNJ0q5duxy2Hzt2TLGxsW4dg1VvAAAgJMXExKhs2bJasmSJfduFCxe0e/duXXnllW4dg0AJAACErAEDBujHH3/UAw88oMWLF6t58+ay2WyaNGmSW/tTHgAAAIS0lJQUffzxx8rNzVXZsmU1depUDRgwwK19CZQAAACc4NQbAACAEwRKAAAAThAoAQAAOEGgBAAA4ASBEgAAgBMESgAAAE4QKAEAADhBoAQAAOAEgRIAAIATBEoAAABOECgBAAA48f/1lyQ6tBTIEAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x581.818 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# NBVAL_IGNORE_OUTPUT\n",
    "dense_4d.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "68742cc4",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}