From 59cc78162d5a71fa113a05afccb7ce8c8170b03a Mon Sep 17 00:00:00 2001
From: Philipp Schmidt <philipp.schmidt@xfel.eu>
Date: Wed, 15 Nov 2023 10:05:03 +0100
Subject: [PATCH] Add spectral pulse height distribution plot

---
 .../REMI/REMI_Digitize_and_Transform.ipynb    | 58 +++++++++++++++++++
 1 file changed, 58 insertions(+)

diff --git a/notebooks/REMI/REMI_Digitize_and_Transform.ipynb b/notebooks/REMI/REMI_Digitize_and_Transform.ipynb
index 539f2c019..3ecb0b103 100644
--- a/notebooks/REMI/REMI_Digitize_and_Transform.ipynb
+++ b/notebooks/REMI/REMI_Digitize_and_Transform.ipynb
@@ -855,6 +855,7 @@
     "    fig = plt.figure(num=20+i, figsize=(9.5, 6))\n",
     "    \n",
     "    edges = det_data[det_name]['edges']\n",
+    "    amplitudes = det_data[det_name]['amplitudes']\n",
     "    \n",
     "    min_edge = np.nanmin(edges)\n",
     "    max_edge = np.nanmax(edges)\n",
@@ -914,6 +915,63 @@
     "pass"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Spectral pulse height distributions"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "for i, det_name in enumerate(remi['detector'].keys()):\n",
+    "    fig = plt.figure(num=2323232+i, figsize=(9.5, 12.0))\n",
+    "    grid = fig.add_gridspec(ncols=2, nrows=4, left=0.08, right=0.98, top=0.95, hspace=0.3)\n",
+    "    fig.text(0.02, 0.98, det_name.upper(), rotation=90, ha='left', va='top', size='x-large')\n",
+    "    \n",
+    "    edges = det_data[det_name]['edges']\n",
+    "    amplitudes = det_data[det_name]['amplitudes']\n",
+    "    \n",
+    "    min_edge = np.nanmin(edges)\n",
+    "    max_edge = np.nanmax(edges)\n",
+    "    \n",
+    "    max_amplitude = np.nanmax(amplitudes)\n",
+    "\n",
+    "    for edge_idx, edge_name in enumerate(['u1', 'u2', 'v1', 'v2', 'w1', 'w2', 'mcp']):\n",
+    "        if edge_idx < 6:\n",
+    "            row = 1 + edge_idx // 2\n",
+    "            col = edge_idx % 2\n",
+    "            tof_bins = int((max_edge - min_edge) // 20)\n",
+    "        else:\n",
+    "            row = 0\n",
+    "            col = np.s_[:]\n",
+    "            tof_bins = int((max_edge - min_edge) // 10)\n",
+    "\n",
+    "        ax = fig.add_subplot(grid[row, col])\n",
+    "        ax.set_title(f'Spectral pulse amplitudes: {edge_name}')\n",
+    "\n",
+    "        flat_edges = finite_flattened_slice(edges, np.s_[:, edge_idx, :])\n",
+    "        flat_amplitudes = finite_flattened_slice(amplitudes, np.s_[:, edge_idx, :])\n",
+    "        ax.hist2d(flat_edges, flat_amplitudes,\n",
+    "                  bins=[tof_bins, 512], norm=LogNorm(),\n",
+    "                  range=[[min_edge, max_edge], [0, max_amplitude]])\n",
+    "        \n",
+    "        if edge_idx == 6:\n",
+    "            ax.set_ylabel('Pulse height')\n",
+    "    pass"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "A more detailed view into the distribution of pulse heights as a function of TOF, e.g. to indicate whether the spectrometer transmission may depend on the kinetic energy and/or (in the case of ions) mass."
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
-- 
GitLab