Newer
Older
{
"cells": [
{
"cell_type": "markdown",
"id": "b3954c58",
"metadata": {},
"source": [
"# How to extract digitizer peaks with the SCS Toolbox"
]
},
{
"attachments": {},
"cell_type": "markdown",
"id": "df9acef3-8450-457f-8d8f-f2674e8fdb05",
"metadata": {},
"source": [
"## Workflow during a beamtime\n",
"\n",
"1. Record first data with signal on digitizer.\n",
"2. Find peak integration parameters using `check_peak_params()`.\n",
"3. Update the new parameters in DAMNIT, so that for each new run, automatic processing of each run is performed and saved in `usr/processed_runs` folder. As long as the right bunch pattern is selected for peak extraction, there is no need to care about the number of pulses / period, as they will be adjusted to match the bunch pattern of each run.\n",
"4. For analysis, load digitizer data using `load_processed_peaks()` or `load_all_processed_peaks()`. This is much faster than loading the raw traces and re-performing peak integration.\n",
"5. Checking the integration parameters used for the processed data can be done via `check_processed_peaks_params()`."
]
},
{
"cell_type": "markdown",
"id": "fdcbef95-b471-42a2-b62f-be2646fca9e5",
"metadata": {},
"source": [
"## Peak-integration parameters"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "e8d99d6e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cupy is not installed in this environment, no access to the GPU\n"
]
}
],
"source": [
"import toolbox_scs as tb\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"plt.rcParams['figure.constrained_layout.use'] = True"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Extracting peaks from a raw trace is done using the `get_digitizer_peaks()` function of the SCS Toolbox, by integration over the area of the peak and subtraction of a baseline. For one peak, the parameters `pulseStart` and `pulseStop` (sample numbers in the raw trace) define the integration region and `baseStart` and `baseStop` define the baseline region. In most cases, the pulse pattern is regular and there are `npulses` separated by a `period`. The peak extraction is repeated for each peak, with `pulseStart`, `pulseStop`, `baseStart` and `baseStop` shifted by the period.\n",
"\n",
"An example of integration parameters:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "f7050acb-d48b-4802-96b8-65ff3f43ed8d",
"metadata": {},
"outputs": [],
"source": [
"params = {'pulseStart': 100,\n",
" 'pulseStop': 120,\n",
" 'baseStart': 80,\n",
" 'baseStop': 99,\n",
" 'period': 96,\n",
" 'npulses': 25}"
]
},
{
"cell_type": "markdown",
"id": "ad30515c-b30a-458c-a30d-1f65d6b33138",
"metadata": {},
"source": [
"If the pattern is not regular, a list of starting positions can be provided to `pulseStart`, while `pulseStop`, `baseStart`, `baseStop` remain integers and relate to the first peak only. In such case, `period` does not have a meaning and `npulses` is equal to `len(pulseStart)`:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "2cb8ce33-a39f-48b7-bb25-7090bfea4238",
"params = {'pulseStart': [100, 200, 500, 600, 900, 1000, 2000, 10000, 15500],\n",
" 'period': 0,\n",
" 'pulseStop': 110,\n",
" 'baseStop': 99,\n",
" 'baseStart': 90,\n",
" 'npulses': 9}"
]
},
{
"cell_type": "markdown",
"id": "bc07d359-aee0-412b-8e7a-695ae01947c3",
"metadata": {},
"source": [
"Let's assume that we are interested in the APD signal on diode 8 looking at the FEL, which corresponds to Ch9 of Fast ADC 2 (mnemonic `FastADC2_9raw`). We can check how the peak-finding algorithm performs by using `tb.check_peak_parameters()` and inspecting the found regions of integration. This shows a plot with the first and last pulses identified by the peak-finding algorithm and displays the region of integration and the region for baseline subtraction. The function returns a dictionnary `good_params` that has all parameters necessary to perform the trapezoidal integration over the digitizer trace.\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "946601a8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Bunch pattern sase3: 400 pulses, 96 samples between two pulses\n",
"Auto-find peak parameters: 400 pulses, 96 samples between two pulses\n"
]
},
{
"data": {
"text/plain": [
"{'pulseStart': 6763,\n",
" 'period': 96,\n",
" 'pulseStop': 6770,\n",
" 'baseStop': 6762,\n",
" 'baseStart': 6757,\n",
" 'npulses': 400}"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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y549e2jVqlWV6/L1119z5ZVXEhERoW0demR99OhR+vXrh91u58knnyQ5OZkFCxbw0EMPsWvXrgq3Gr/++mteffVV3n33XRYtWkRERAQtWrQo9zOvvvoqHTp04IUXXgDgiSee4KKLLmLPnj1EREQA7gn1pptu4tJLL2XWrFlkZWUxdepUbDZbpRXjjRs3cv/99zN16lTi4uKYO3cu9913H3a7nYceeghwK/GDBg3iwIEDTJw4kW7duvH3338zefJkNm3axI8//qgpvLt27WLMmDGa0vbnn38yY8YM/vnnH5/Ksofnn3+ehx9+mKlTp2qKa3mkp6dzzTXX8OijjzJ9+nQWLlzIU089RWZmJq+88opWLjU1ldtvv53ExEQAfv/9d+655x4OHjzI5MmTve65fv16tm7dyqRJk2jVqhUhISFVfqb09HRuuukmHnnkEVq0aMHLL7/MzTffzP79+/niiy+YOHEiERERTJ8+ncsuu4zdu3eTkJAAwJYtW+jXrx+JiYnMmjWLuLg4fvjhB+69916OHTvGlClT6NmzJ3PmzOGmm25i0qRJWp/1tKfly5czYsQI+vTpwxtvvEFERASffvopV199NXl5eWW24G+++WbNPSA3NxeTycQNN9zA+vXrmTFjBu3atePEiROsX7+ejIyMCn8XQagSShBqkClTpihAPfDAA17X586dqwD18ccf+/3sgQMHVLNmzVTv3r2V0+nUrt9///1Kr9ervXv3epW/4YYbFKBuu+027dr333+vHn/8cfXtt9+qn376Sb3yyiuqRYsWKiQkRG3cuFEr98knnyhAhYeHq/79+6v58+erBQsWqMGDByudTqcWLVpU7nPu2bNHAapNmzbKbreXW7Zz585q0KBB5ZYZPny4ArQ6ffXVV+WWL8nNN9+sALV161allFLLly9XgHriiSe8ynl+m9LMmTNHAWrPnj0V1vnRRx9VgPrjjz+8rt95551Kp9Opbdu2VVhfTz2OHj3qdX3QoEFe3+mRcdeuXZXD4dCur169WgHqk08+UUop5XQ6VUJCgurZs6dyuVxaudTUVGUymVRSUlKFdUpKSlI6nc6rjSil1LBhw1R4eLjKzc1VSik1c+ZMpdfr1Zo1a7zKffHFFwpQ3333nc/7O51OVVhYqD788ENlMBjU8ePHvZ67c+fOyul0qvHjxyuz2VxuPynJoEGDFKC++eYbr+u33nqrzz5Tuj7Tp09X0dHRXnJLSkpSBoOhwt+yomcC1Nq1a7VrGRkZymAwqKCgIHXw4EHt+saNGxWgXnrpJe3a8OHDVYsWLVRWVpbXd44fP15ZrVbtu9asWaMANWfOnDL169Chg+rRo4cqLCz0uj5q1CgVHx+vjTGe9n/jjTeWuUdoaKi6//77y5WDINQEsk0p1ArXXXed1+urrroKo9GobeOV5vjx41x00UUopfjss8+8rBm33XYbJpOJ6667jr///puMjAxeffVVPvvsM8B7S3DEiBE89dRTjBo1ioEDB3L33Xfz888/o9PpvFb/ni01s9nM999/z8UXX8zIkSNZsGAB8fHxPPnkk5V6zksuuaRcS19lefnll1m9ejXffPMNw4cP5+qrr+aTTz6p8HMnT57k888/p1+/ftqBhUGDBtGmTRvef//9Sm0dVoVly5bRqVMnbTvZQ0pKCkopzbLpcrlwOBzaX+kts6owcuRIDAaD9rpbt24A7N27F4Bt27Zx6NAhxowZ47UNm5SURL9+/Sr9PZ07d+bMM8/0ujZmzBiys7NZv349AAsWLKBLly50797d6/mGDx+OTqdjxYoV2mc3bNjAJZdcQnR0NAaDAZPJxI033ojT6WT79u1e31NQUMBll13G3LlzWbx4cZn+Ux5hYWFl/BzHjBmDy+Vi5cqV2rVly5YxdOhQIiIitPpMnjyZjIwMjhw54vX5bt260a5duzLfVZVnio+P93ItiIqKomnTpnTv3l2zgAF07NgRKP49CwoKWLp0KZdffjnBwcFecr7ooosoKCjwuU1dkp07d/LPP/9ocix9j7S0NLZt2+b1mSuuuKLMfc4++2zef/99nnrqKX7//fdKbTELQnUQZUyoFeLi4rxeG41GoqOjfZr3MzMzGTZsGAcPHmTJkiVlfLg6duzI119/zd69e+nSpQsxMTH85z//YdasWQA0b9683LokJyczYMAArwHc46/Wr18/wsLCtOvBwcEMGjRIm3wrIj4+vlLlKqJt27acddZZXHLJJXz++eecf/753H333RUqU5999hknT57kqquu4sSJE5w4cYKsrCyuuuoq9u/fz5IlS2qkfh4yMjJ8PrNncvX8vtOnT8dkMml/bdq0qfZ3lvYt9GyZ5ufne31n6Tbn75o/yvu85zsOHz7MX3/95fVsJpOJsLAwlFIcO3YMcPvVnXvuuRw8eJAXX3yRn3/+mTVr1mg+T566ezhy5Ag//PADffv2rZICCW7fu4rqvXr1ai644AIA3n77bX799VfWrFnD448/7rM+vn7jqj5TVFRUmXuYzeYy181mM+BWwjx1djgcvPzyy2XkfNFFFwFocvbH4cOHAXjooYfK3OOuu+7yeQ9fz/zZZ58xduxY3nnnHfr27UtUVBQ33nijzzA5gnAqiM+YUCukp6d7KUkOh4OMjIwyE2tmZiZDhw5lz549LF26VLN6lObCCy9k79697Ny5E4fDQbt27TRH3IEDB1ZYH6WUlwXN3/f4KlsetXXa6uyzz2bRokUcPXrU52TrwRNr7f777+f+++/3+f7w4cMBtFAXNpvNywevoomtJNHR0aSlpZW5fujQIQBiYmIAtzVz1KhR2vu+fP5qCk+b8jVBVmXSLO/znu+IiYnxe0DC8z7AvHnzyM3N5auvviIpKUl73188rMTERGbPns3ll1/O6NGj+d///lfp0CQexaO8en/66aeYTCYWLFjgdd958+b5vKevdl3VZ6oukZGRGAwGbrjhBu6++26fZSryhfT8Do899hijR4/2WaZ9+/Zer309c0xMDC+88AIvvPAC+/btY/78+Tz66KMcOXKkWgeHBMEfoowJtcLcuXO9tig+//xzHA6H12k5jyK2e/dulixZQo8ePcq9p06n0xzk7XY7L774It27d69QGduzZw+//vorQ4cO1a7Fx8fTt29ffv31V7KzswkPDwfcDto//fQT55xzTlUfucZQSvHTTz/RpEkTnydOPWzdupVVq1ZxxRVX+Az0+tRTT/HNN99oSrDnRORff/2lnUIDfMZBs1gsZSwdAOeffz4zZ85k/fr19OzZU7v+4YcfotPpGDx4MOC2lJXciqpN2rdvr8WemzBhgjap7t27l99++63S9fj777/5888/vbYq//vf/xIWFqY966hRo3j66aeJjo4uVyHw1KGkEqqU4u233/b7mQsuuIAffviBkSNHMmrUKL755hvNcb48cnJymD9/vtdW5X//+1/0er3WN3Q6HUaj0Wu7Nz8/n48++qjC+5/KM1WH4OBgBg8ezIYNG+jWrZtmOfNFaSuph/bt29O2bVv+/PNPnn766RqpV2JiIuPHj2fp0qX8+uuvNXJPQfAgyphQK3z11VcYjUaGDRumnaY888wzueqqqwD34Dl8+HA2bNjACy+8gMPh8NpGjI2N9drauueeezjvvPOIjo5m9+7dvPTSSxw4cICffvrJ63uHDh3KwIED6datG+Hh4WzatIlnnnkGnU5Xxg/sueeeY/DgwQwfPpz/+7//Q6fTMWvWLI4dO1ZpnzF/rF27VgsVkZ2djVKKL774AoCzzjpLsyxceumlnHnmmXTv3p3o6GgOHTrE+++/z08//cSrr75abngLj1XskUceKePDBe5JeunSpXz88cfcd999XHTRRURFRXHLLbcwffp0jEYj77//vlcYEQ9du3bl008/5bPPPqN169ZYrVa6du3KAw88wIcffsjIkSOZPn06SUlJLFy4kNdee40777zTp59RbaPX63nyyScZN24cl19+ObfeeisnTpzQTkVWloSEBC655BKmTp1KfHw8H3/8MUuWLOE///kPwcHBgNsC+eWXXzJw4EAeeOABunXrhsvlYt++fSxevJgHH3yQPn36MGzYMMxmM9deey2PPPIIBQUFvP7662RmZpZbhwEDBrB06VJGjBjBBRdcwHfffaedGPVHdHQ0d955J/v27aNdu3Z89913vP3229x5553aycmRI0cye/ZsxowZw2233UZGRgbPPfdclSyW1X2m6vDiiy8yYMAAzj33XO68806Sk5PJyclh586dfPvtt5pvYps2bQgKCmLu3Ll07NiR0NBQbSHw5ptvcuGFFzJ8+HBSUlJo3rw5x48fZ+vWraxfv57//e9/5dYhKyuLwYMHM2bMGDp06EBYWBhr1qxh0aJFfq1tglBt6uzogNAo8ZyUW7dunbr44otVaGioCgsLU9dee606fPiwVs5zUs7f39ixY73ue+mll6r4+HhlMplUXFycSklJUampqWW+//7771edOnVSYWFhymg0qoSEBHX99df7PRn2888/q0GDBqng4GAVHByshgwZon799dcKn9NT/2effdbn+2PHjvX7bCVPfv3nP/9RZ511loqMjFQGg0FFR0er4cOHqwULFpT7/Xa7XTVt2lR1797dbxmHw6FatGihunbtql1bvXq16tevnwoJCVHNmzdXU6ZMUe+8806Z05SpqanqggsuUGFhYQrwOpG4d+9eNWbMGBUdHa1MJpNq3769evbZZ71OwJZHVU9T+pIxoKZMmeJ17Z133lFt27ZVZrNZtWvXTr333ntq7NixlT5NOXLkSPXFF1+ozp07K7PZrJKTk9Xs2bPLlD158qSaNGmSat++vTKbzSoiIkJ17dpVPfDAAyo9PV0r9+2336ozzzxTWa1W1bx5c/Xwww+r77//XgFq+fLlXs/duXNnr+/YvHmziouLUz179iwjp5J4PrtixQrVu3dvZbFYVHx8vJo4cWKZU4Tvvfeeat++vbJYLKp169Zq5syZ6t133y3z23tk4YtTeaby7g2ou+++2+vanj171M0336yaN2+uTCaTio2NVf369VNPPfWUV7lPPvlEdejQQZlMpjLt4s8//1RXXXWVatq0qTZ2DBkyRL3xxhtaGc9pytInZAsKCtQdd9yhunXrpsLDw1VQUJBq3769mjJlina6VhBqCp1SpSL+CcIpMHXqVKZNm8bRo0c1vw1BqO8kJyfTpUsXLaVUQ+G8887j2LFjWlYDQRAaJnKaUhAEQRAEoQ4RZUwQBEEQBKEOkW1KQRAEQRCEOkQsY4IgCIIgCHWIKGOCIAiCIAh1iChjgiAIgiAIdYgoY4IgCIIgCHWIKGOCIAiCIAh1iChjgiAIgiAIdYgoY4IgCIIgCHWIKGNCjXPeeedx//3313U1Ks3UqVPp3r17XVdDEAShXBra2CpUHlHGhGqRkpKCTqcr87dz506++uornnzyyVO6v06nY968eTVTWUEQApaUlBQuu+yyWrn3ihUr0Ol0nDhxolbuLwQOxrqugNBwGTFiBHPmzPG6Fhsbi8FgKPdzdrsds9lcm1UTBEEQhAaDWMaEamOxWIiLi/P6MxgMZUzpycnJPPXUU6SkpBAREcGtt96K3W5n/PjxxMfHY7VaSU5OZubMmVp5gMsvvxydTqe9Lk1qaio6nY5PP/2Ufv36YbVa6dy5MytWrNDKvP/++zRp0sTrc/PmzUOn0/l9rhUrVnD22WcTEhJCkyZN6N+/P3v37tXe//bbb+nVqxdWq5XWrVszbdo0HA5HlWQnCEL9YPbs2XTt2pWQkBBatmzJXXfdxcmTJ7X39+7dy8UXX0xkZCQhISF07tyZ7777jtTUVAYPHgxAZGQkOp2OlJQUn9/hGYfmzZtHu3btsFqtDBs2jP3792tlfFnw7r//fs477zy/dX/ttddo27YtVquVZs2aceWVV2rvKaV45plnaN26NUFBQZx55pl88cUXVReQcFoQy5hwWnj22Wd54oknmDRpEgAvvfQS8+fP5/PPPycxMZH9+/drA9OaNWto2rQpc+bMYcSIERVa2h5++GFeeOEFOnXqxOzZs7nkkkvYs2cP0dHRVa6nw+Hgsssu49Zbb+WTTz7BbrezevVqTXn74YcfuP7663nppZc499xz2bVrF7fddhsAU6ZMqfL3CYJQt+j1el566SWSk5PZs2cPd911F4888givvfYaAHfffTd2u52VK1cSEhLCli1bCA0NpWXLlnz55ZdcccUVbNu2jfDwcIKCgvx+T15eHjNmzOCDDz7AbDZz1113cc011/Drr79Wq95r167l3nvv5aOPPqJfv34cP36cn3/+WXt/0qRJfPXVV7z++uu0bduWlStXcv311xMbG8ugQYOq9Z1C7SHKmFBtFixYQGhoqPb6wgsv5H//+5/PskOGDOGhhx7SXu/bt4+2bdsyYMAAdDodSUlJ2nuxsbEANGnShLi4uArrMX78eK644goAXn/9dRYtWsS7777LI488UuVnys7OJisri1GjRtGmTRsAOnbsqL0/Y8YMHn30UcaOHQtA69atefLJJ3nkkUdEGROEBkhJK36rVq148sknufPOOzVlbN++fVxxxRV07doVcPd5D1FRUQA0bdq0jAW+NIWFhbzyyiv06dMHgA8++ICOHTuyevVqzj777CrXe9++fYSEhDBq1CjCwsJISkqiR48eAOTm5jJ79myWLVtG3759tXr/8ssvvPnmm6KM1UNEGROqzeDBg3n99de11yEhIX7L9u7d2+t1SkoKw4YNo3379owYMYJRo0ZxwQUXVKsensEGwGg00rt3b7Zu3Vqte0VFRZGSksLw4cMZNmwYQ4cO5aqrriI+Ph6AdevWsWbNGmbMmKF9xul0UlBQQF5eHsHBwdX6XkEQ6obly5fz9NNPs2XLFrKzs3E4HBQUFJCbm0tISAj33nsvd955J4sXL2bo0KFcccUVdOvWrcrf4xmbPHTo0IEmTZqwdevWailjw4YNIykpidatWzNixAhGjBjB5ZdfTnBwMFu2bKGgoIBhw4Z5fcZut2sKm1C/EJ8xodqEhIRwxhlnaH8ehcVf2ZL07NmTPXv28OSTT5Kfn89VV13l5e9wqni2FfV6PUopr/cKCwvL/eycOXNYtWoV/fr147PPPqNdu3b8/vvvALhcLqZNm8bGjRu1v02bNrFjxw6sVmuN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tEgppdSWLVsUoH7//XetzKpVqxSg/vnnn1N8itNPZeTWuXNnNX36dK9rPXv2VJMmTVJKBabclKpYdtu2bVOA2rx5s3bN4XCoqKgo9fbbbyulAld2gUBOTo5q27atWrJkiRo0aFCZifHSSy/1+9maahffffed0uv16uDBg1qZTz75RFksFpWVlVVDT1qznIrcSrJ8+XKfylhjlZtSNSc7D59//rkym82qsLBQKXV6ZSfblA2U+fPn07t3b/71r3/RtGlTevTowdtvv+23/OHDh1m4cCG33HKLdm3dunUUFhZywQUXaNcSEhLo0qULv/32GwCrVq0iIiKCPn36aGXOOeccIiIitDINicrIbcCAAcyfP5+DBw+ilGL58uVs376d4cOHA4EpN6hYdjabDQCr1apdMxgMmM1mfvnlFyBwZRcI3H333YwcOZKhQ4f6fH/FihU0bdqUdu3aceutt3LkyBHtvZpqF6tWraJLly4kJCRoZYYPH47NZvPaTq9PnIrcKkNjlRvUvOyysrIIDw/HaHSn7T6dshNlrIGye/duXn/9ddq2bcsPP/zAHXfcwb333suHH37os/wHH3xAWFgYo0eP1q6lp6djNpuJjIz0KtusWTPS09O1Mk2bNi1zv6ZNm2plGhKVkdtLL71Ep06daNGiBWazmREjRvDaa68xYMAAIDDlBhXLrkOHDiQlJfHYY4+RmZmJ3W7n3//+N+np6aSlpQGBK7vGzqeffsr69euZOXOmz/cvvPBC5s6dy7Jly5g1axZr1qxhyJAhmgJfU+0iPT2dZs2aeb0fGRmJ2Wyul23nVOVWGRqj3KDmZZeRkcGTTz7J7bffrl07nbIzVrqkUK9wuVz07t2bp59+GoAePXrw999/8/rrr3PjjTeWKf/ee+9x3XXXeVkt/KGUQqfTaa9L/t9fmYZCZeT20ksv8fvvvzN//nySkpJYuXIld911F/Hx8X5XYNC45QYVy85kMvHll19yyy23EBUVhcFgYOjQoVx44YUV3ruxy64xs3//fu677z4WL17sd3y5+uqrtf936dKF3r17k5SUxMKFC70WiKWpTrtoKG2nNuVWmsYkN6h52WVnZzNy5Eg6derElClTvN47XbITy1gDJT4+nk6dOnld69ixI/v27StT9ueff2bbtm2MGzfO63pcXBx2u53MzEyv60eOHNE0/bi4OA4f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zGaz+vTTT7VrGRkZKigoSN13333ataSkJPX8888rpZT6/vvvldFoVGlpadr7S5YsUYD6+uuvlVJK7dmzRwFqw4YNSimlli9frgCVmZnp9f2DBg3y+h4Px44dU23atFF33XWXdu3cc89VTz/9tFe5jz76SMXHx2uvAXX//feX+8xffvmlCg8PV9nZ2eWW83DkyBEFqE2bNnk92zvvvKOV+eSTTxSgli5dql2bOXOmat++vfZ67NixKioqSuXm5mrXXn/9dRUaGqqcTqdSylseO3fuVDqdTh08eNCrPueff7567LHHlFJKde3aVU2dOrVSzyEIDRkZqypGxqrAQCxjjZBdu3Zht9vp27evdi0qKor27dv7/cy2bdto2bKll5/F2WefXWN1Kiws5IorriAxMZEXX3xRu75u3TrWrFnjtTJzOp0UFBSQl5dHcHAwAL179y73/sOGDSMpKYnWrVszYsQIRowYweWXX659fteuXTzxxBP8/vvvHDt2DJfLBcC+ffvo0qWLdp9u3bpp/2/WrBkAXbt29bp25MgRr+8+88wzte8B6Nu3LydPnmT//v0kJSV5lV2/fj1KKdq1a+d13WazER0dDcC9997LnXfeyeLFixk6dChXXHGFV70EobEgY5WMVYIbUcYaIUqpan1Gp9PVQm3c3Hnnnezbt481a9ZgNBY3O5fLxbRp0xg9enSZz1itVu3/FZ2kCgsLY/369axYsYLFixczefJkpk6dypo1a2jSpAkXX3wxLVu25O233yYhIQGXy0WXLl3K+EuUdLb1yKP0Nc/gWBG+5OlyuTAYDKxbt67MFobHvD9u3DiGDx/OwoULWbx4MTNnzmTWrFncc889lfpeQWgoyFglY5XgRhz4GyFnnHEGJpOJ33//XbuWmZnJ9u3b/X6mQ4cO7Nu3j8OHD2vX1qxZU+73mM1mwL06LI/Zs2fz2WefMX/+fG1F5aFnz55s27aNM844o8xfSf+IymA0Ghk6dCjPPPMMf/31F6mpqSxbtoyMjAy2bt3KpEmTOP/88+nYsSOZmZlVund5/Pnnn+Tn52uvf//9d0JDQ2nRokWZsj169MDpdHLkyJEyz1typd+yZUvuuOMOvvrqKx588EHefvvtGquvINQXZKySsUpwI5axRkhoaCi33HILDz/8MNHR0TRr1ozHH3+83AFj2LBhtGnThrFjx/LMM8+Qk5PD448/DvheNQEkJSWh0+lYsGABF110EUFBQWWcN3/88UceeeQRXn31VWJiYkhPTwcgKCiIiIgIJk+ezKhRo2jZsiX/+te/0Ov1/PXXX2zatMnvSSRfLFiwgN27dzNw4EAiIyP57rvvcLlctG/fnsjISKKjo3nrrbeIj49n3759PProo5W+d0XY7XZuueUWJk2axN69e5kyZQrjx4/3Ke927dpx3XXXceONNzJr1ix69OjBsWPHWLZsGV27duWiiy7i/vvv58ILL6Rdu3ZkZmaybNkyOnbsWGP1FYT6goxVMlYJbsQy1kh59tlnGThwIJdccglDhw5lwIAB9OrVy295g8HAvHnzOHnyJGeddRbjxo1j0qRJgLcJviTNmzdn2rRpPProozRr1ozx48eXKfPLL7/gdDq54447iI+P1/7uu+8+AIYPH86CBQtYsmQJZ511Fueccw6zZ88u479QEU2aNOGrr75iyJAhdOzYkTfeeINPPvmEzp07o9fr+fTTT1m3bh1dunThgQce4Nlnn63S/cvj/PPP//927hBFoSiMAvCZbrSa5PFwDYrJYNFoFLvBIJhdhdUluAqDe3jNDQguwAkDphkGhmHuw/m+fMNNh3P5L3+qqsp4PM5ischsNst+v//y/PF4zHK5zHa7TV3Xmc/nuVwu6fV6ST5e7+v1OoPBINPpNHVd53A4/Np9oU1klawieXv8ZGjPv3A+nzMajdI0Tfr9funrtNJqtcrtdnvuNwL+nqz6nqxqN2NKnk6nUzqdTqqqStM02Ww2GQ6Hwg1oFVnFq1HGeLrf79ntdrler+l2u5lMJp9uwwYoSVbxaowpAQAK8oEfAKAgZQwAoCBlDACgIGUMAKAgZQwAoCBlDACgIGUMAKAgZQwAoKB3FJQDio2+UUwAAAAASUVORK5CYII=",
"<Figure size 600x300 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"proposal, runNB = 2956, 13\n",
"good_params = tb.check_peak_params(proposal, runNB, 'FastADC2_9raw', bunchPattern='sase3')\n",
"good_params"
]
},
{
"cell_type": "markdown",
"id": "f0e4fcef-4188-47f4-ae8d-6f9656dbdc12",
"metadata": {},
"source": [
"## Extracting peaks"
]
},
{
"cell_type": "markdown",
"id": "137414e9-b2de-4fe9-8182-808790623af2",
"metadata": {},
"source": [
"The integration parameters are either user-provided or automatically computed by a peak-finding algorithm in `get_digitizer_peaks()` and `check_peak_params()`. The bunch pattern, when provided, is used to determine the parameters or to check consistency with user-provided parameters, and to align the pulse ID. The minimum required inputs to extract peaks are:\n",
"* the `bunchPattern` source ('sase3' if the device is looking at the FEL or 'scs_ppl' if the device is looking at the PP laser), leaving `integParams=None` to let the peak-finding algorithm operate.\n",
"* or `integParams` dict including `pulseStart`, `pulseStop`, `baseStart`, `baseStop`, `period` and `npulses` keys.\n",
"In most cases, automatic peak finding provides good integration parameters. If it fails, or if we want to define fixed parameters to consistently analyze a series of runs, it is necessary to provide the parameters via `integParams`.\n",
"If both the bunch pattern and the integration parameters are provided, the `period` and `npulses` of the user-provided parameters (`integParams`) will be overriden (with a warning in case of mismatch), except if `pulseStart` is a list (e.g. case of irregular patterns).\n"
]
},
{
"cell_type": "markdown",
"id": "8a4fe745-9541-4ec4-aae4-ce02d47f6179",
"metadata": {},
"source": [
"Once the parameters are found, we can extract the peaks using `get_digitizer_peaks()`, with `bunchPattern='sase3'`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "5653df96",
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=\"dark\"],\n",
"html[data-theme=\"dark\"],\n",
"body[data-theme=\"dark\"],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1f1f1f;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: inline-block;\n",
" opacity: 0;\n",
" height: 0;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:focus + label {\n",
" border: 2px solid var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: \"►\";\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: \"▼\";\n",
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: \"(\";\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: \")\";\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: \",\";\n",
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'><xarray.Dataset> Size: 25MB\n",
"Dimensions: (trainId: 7898, sa3_pId: 400)\n",
" * trainId (trainId) uint64 63kB 1501374970 1501374971 ... 1501382869\n",
" * sa3_pId (sa3_pId) int32 2kB 772 776 780 784 ... 2356 2360 2364 2368\n",
" FastADC2_9peaks (trainId, sa3_pId) float64 25MB -1.04e+04 ... -1.866e+03</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-097afa33-b6be-43a8-993a-700569942b54' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-097afa33-b6be-43a8-993a-700569942b54' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>trainId</span>: 7898</li><li><span class='xr-has-index'>sa3_pId</span>: 400</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-3796698d-e3a5-44e7-b301-400249a18195' class='xr-section-summary-in' type='checkbox' checked><label for='section-3796698d-e3a5-44e7-b301-400249a18195' class='xr-section-summary' >Coordinates: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>trainId</span></div><div class='xr-var-dims'>(trainId)</div><div class='xr-var-dtype'>uint64</div><div class='xr-var-preview xr-preview'>1501374970 ... 1501382869</div><input id='attrs-36859df5-b0cd-4068-951c-b994ee21191d' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-36859df5-b0cd-4068-951c-b994ee21191d' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-65e64e14-c38b-4a1f-a687-b5a9e8535bd8' class='xr-var-data-in' type='checkbox'><label for='data-65e64e14-c38b-4a1f-a687-b5a9e8535bd8' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([1501374970, 1501374971, 1501374972, ..., 1501382867, 1501382868,\n",
" 1501382869], dtype=uint64)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>sa3_pId</span></div><div class='xr-var-dims'>(sa3_pId)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>772 776 780 784 ... 2360 2364 2368</div><input id='attrs-afd647ef-f489-4b41-942b-6564c130ae94' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-afd647ef-f489-4b41-942b-6564c130ae94' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7e7c061d-9b7e-46c3-96cd-5f86c1f7a602' class='xr-var-data-in' type='checkbox'><label for='data-7e7c061d-9b7e-46c3-96cd-5f86c1f7a602' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 772, 776, 780, ..., 2360, 2364, 2368], dtype=int32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-6fd49acd-9d02-45a5-aa69-b7ebdcdfc521' class='xr-section-summary-in' type='checkbox' checked><label for='section-6fd49acd-9d02-45a5-aa69-b7ebdcdfc521' class='xr-section-summary' >Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>FastADC2_9peaks</span></div><div class='xr-var-dims'>(trainId, sa3_pId)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-1.04e+04 -2.104e+04 ... -1.866e+03</div><input id='attrs-edb92b9e-9d25-45be-acff-5e0f3e5fc0d1' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-edb92b9e-9d25-45be-acff-5e0f3e5fc0d1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-808f8990-0059-41bb-95fe-be4e74805611' class='xr-var-data-in' type='checkbox'><label for='data-808f8990-0059-41bb-95fe-be4e74805611' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>FastADC2_9peaks_pulseStart :</span></dt><dd>6763</dd><dt><span>FastADC2_9peaks_period :</span></dt><dd>96</dd><dt><span>FastADC2_9peaks_pulseStop :</span></dt><dd>6770</dd><dt><span>FastADC2_9peaks_baseStop :</span></dt><dd>6762</dd><dt><span>FastADC2_9peaks_baseStart :</span></dt><dd>6757</dd><dt><span>FastADC2_9peaks_npulses :</span></dt><dd>400</dd></dl></div><div class='xr-var-data'><pre>array([[-10396.5, -21040.5, -11618. , ..., -2953. , -14307.5, -9120. ],\n",
" [-14979.5, -3093.5, -8993. , ..., -5679.5, -4255. , -25531. ],\n",
" [-22282. , -2814. , -21852.5, ..., -14205.5, -8499.5, -13072. ],\n",
" [ -607.5, 99. , -660. , ..., -1162.5, -1217. , -808. ],\n",
" [ -999.5, -681. , -327. , ..., -1800. , -935. , -660. ],\n",
" [ -1075. , -1200. , -358. , ..., -753. , -864. , -1866.5]])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-5a7a1f7b-5686-49e4-a5a8-258eda47845c' class='xr-section-summary-in' type='checkbox' ><label for='section-5a7a1f7b-5686-49e4-a5a8-258eda47845c' class='xr-section-summary' >Indexes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>trainId</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-ce56fb5e-fa05-4c35-8905-94328d5b73b8' class='xr-index-data-in' type='checkbox'/><label for='index-ce56fb5e-fa05-4c35-8905-94328d5b73b8' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([1501374970, 1501374971, 1501374972, 1501374973, 1501374974, 1501374975,\n",
" 1501374976, 1501374977, 1501374978, 1501374979,\n",
" ...\n",
" 1501382860, 1501382861, 1501382862, 1501382863, 1501382864, 1501382865,\n",
" 1501382866, 1501382867, 1501382868, 1501382869],\n",
" dtype='uint64', name='trainId', length=7898))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>sa3_pId</div></div><div class='xr-index-preview'>PandasIndex</div><input type='checkbox' disabled/><label></label><input id='index-06172524-357f-409c-aa9b-1af2b385f49f' class='xr-index-data-in' type='checkbox'/><label for='index-06172524-357f-409c-aa9b-1af2b385f49f' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([ 772, 776, 780, 784, 788, 792, 796, 800, 804, 808,\n",
" ...\n",
" 2332, 2336, 2340, 2344, 2348, 2352, 2356, 2360, 2364, 2368],\n",
" dtype='int32', name='sa3_pId', length=400))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-0cafd352-2b7d-45c6-bf70-ecd8df663bc8' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-0cafd352-2b7d-45c6-bf70-ecd8df663bc8' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset> Size: 25MB\n",
"Dimensions: (trainId: 7898, sa3_pId: 400)\n",
" * trainId (trainId) uint64 63kB 1501374970 1501374971 ... 1501382869\n",
" * sa3_pId (sa3_pId) int32 2kB 772 776 780 784 ... 2356 2360 2364 2368\n",
" FastADC2_9peaks (trainId, sa3_pId) float64 25MB -1.04e+04 ... -1.866e+03"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"peaks = tb.get_digitizer_peaks(proposal, runNB, 'FastADC2_9raw', integParams=good_params, bunchPattern='sase3')\n",
"peaks"
"attachments": {},
"cell_type": "markdown",
"id": "1dbeb1e3-0126-4307-bdde-6d541fecbdc7",
"metadata": {},
"source": [
"We see here that `peaks` has a variable `FastADC2_9peaks` which has dimensions `['trainId', 'sa3_pId']`, which is exactly what we wanted: the raw traces were automatically transformed into vectors of length `sa3_pId`.\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "8ab2e1fe",
"metadata": {},
"source": [
"Note that we could also have ommitted the parameter `integParams` in `get_digitizer_peaks()` to force the automatic peak finding algorithm:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "2089bc40-54bf-4dc6-b4b9-97ac6fc6ae82",
"peaks = tb.get_digitizer_peaks(proposal, runNB, 'FastADC2_9raw', bunchPattern='sase3')"
]
},
{
"cell_type": "markdown",
"id": "9aa9fca4",
"metadata": {},
"source": [
"## If the peak-finding algorithm fails\n",
"\n",
"\n",
"The best strategy is to inspect the raw trace with `get_dig_avg_trace()` or use `check_peak_params()` with `show_all=True` and determine the regions of integration manually. Once the integration parameter dictionnary is created, one can feed it to the `integParams` argument in `get_digitizer_peaks()`."
]
},
{
"cell_type": "markdown",
"id": "3d0d64a0",
"metadata": {},
"source": [
"## Save / load processed peaks\n",
"\n",
"If we have found good integration parameters, it is worth saving the integrated peaks as processed data. This can be done by selecting `save=True` in `get_digitizer_peaks()`. The location can be chosen by `subdir`, by default it goes to the `usr/processed_runs` folder of the proposal."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "2d9bd039-b025-4be5-86cd-3ca5c542801c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"saved data into /gpfs/exfel/exp/SCS/202202/p002956/usr/processed_runs/r0013/r0013-digitizers-data.h5.\n"
}
],
"source": [
"peaks = tb.get_digitizer_peaks(proposal, runNB, 'FastADC2_9raw', integParams=good_params, bunchPattern='sase3',\n",
]
},
{
"cell_type": "markdown",
"id": "e2b80062-fcf9-4d20-a775-1da949f925eb",
"metadata": {},
"source": [
"To load the processed data:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "b378684c-527d-480b-909a-4b5e1ffaf734",
"metadata": {},
"outputs": [
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=\"dark\"],\n",
"html[data-theme=\"dark\"],\n",
"body[data-theme=\"dark\"],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1f1f1f;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 0 20px 0 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: inline-block;\n",
" opacity: 0;\n",
" height: 0;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:focus + label {\n",
" border: 2px solid var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: \"►\";\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: \"▼\";\n",
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: \"(\";\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: \")\";\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: \",\";\n",
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",