Skip to content
Snippets Groups Projects
Virtual spectrometer SCS Grating.ipynb 407 KiB
Newer Older
{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6386344d-b7ac-440d-9926-f03af4ff9d6f",
   "metadata": {},
   "source": [
    "# Training the Virtual Spectrometer with grating and PES data"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1711c3b9-5065-4a44-8b1b-a3e861b92bc5",
   "metadata": {},
   "source": [
    "The objective here is to use the grating monochromator to train the Virtual Spectrometer. This means that we will fit (\"train\") a model, which maps the PES measurements with the Viking measurements and use their correlation to interpolate in cases where the grating is not available.\n",
    "\n",
    "The following conditions must be satisfied for this to be possible:\n",
    "* The PES settings are the same in the \"training\" run and interesting run.\n",
    "* The photon energies of the beam in \"training\" and in the interesting run are similar.\n",
    "* The beam intensities are similar.\n",
    "* 1 pulse trains in \"training\".\n",
    "\n",
    "The following software implements:\n",
    "1. retrieve data;\n",
    "2. the Virtual Spectrometer training excluding the last 10 trains avalable so that we can use them for validation;\n",
    "3. the Virtual Spectrometer resolution function plotting;\n",
    "4. comparison of the Virtual spectrometer results in a selected set in which the Viking data was available.\n",
    "\n",
    "Finally, the model is applied in data without the grating. This last part may be applied independently from the rest if the modal has been written in a `joblib` file."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4a627555-522a-4c9d-b6b2-6ff77148eaab",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sys\n",
    "# replace this\n",
    "sys.path.append('/home/danilo/scratch/karabo/devices/pes_to_spec')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "78bbc433-ac5e-44c3-8740-3e93800c4532",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cupy is not installed in this environment, no access to the GPU\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import dask.array as da\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "from pes_to_spec.model import Model\n",
    "\n",
    "import toolbox_scs as tb\n",
    "from euxfel_bunch_pattern import indices_at_sase\n",
    "\n",
    "from scipy.signal import fftconvolve"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c7609899-5bc0-4211-ae97-010b3edcf676",
   "metadata": {},
   "source": [
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "95da5231-e454-4f7f-a1ce-eef7e52fe457",
   "metadata": {},
   "outputs": [],
   "source": [
    "# pes channel names to be used for reference later\n",
    "pes_map = dict(channel_1_A=\"PES_S_raw\",\n",
    "                channel_1_B=\"PES_SSW_raw\",\n",
    "                channel_1_C=\"PES_SW_raw\",\n",
    "                channel_1_D=\"PES_WSW_raw\",\n",
    "                #channel_2_A=\"PES_W_raw\",\n",
    "                #channel_2_B=\"PES_WNW_raw\",\n",
    "                #channel_2_C=\"PES_NW_raw\",\n",
    "                #channel_2_D=\"PES_NNW_raw\",\n",
    "                channel_3_A=\"PES_E_raw\",\n",
    "                channel_3_B=\"PES_ESE_raw\",\n",
    "                channel_3_C=\"PES_SE_raw\",\n",
    "                channel_3_D=\"PES_SSE_raw\",\n",
    "                channel_4_A=\"PES_N_raw\",\n",
    "                channel_4_B=\"PES_NNE_raw\",\n",
    "                channel_4_C=\"PES_NE_raw\",\n",
    "                channel_4_D=\"PES_ENE_raw\",\n",
    "               )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "fd8dacae-c22e-4c20-9df9-8720a2814320",
   "metadata": {},
   "outputs": [],
   "source": [
    "proposal = 900331\n",
    "runTrain = 69"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "25000b87-246d-467b-b770-8cde527faec4",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "navitar: only 71.9% of trains (7176 out of 9974) contain data.\n",
      "energy: only 71.9% of trains (7176 out of 9974) contain data.\n"
    "fields = [\n",
    "          'XTD10_SA3',             # XGM\n",
    "          *list(pes_map.values()), # PES\n",
    "          # calibrated grating\n",
    "          {'navitar': {'source': 'SA3_XTD10_SPECT/MDL/SPECTROMETER_SCS_NAVITAR:output',\n",
    "                       'key': 'data.intensityDistribution',\n",
    "                       'dim': ['gratingEnergy'],\n",
    "                      },\n",
    "          },\n",
    "          {'energy':\n",
    "          {'source': 'SA3_XTD10_SPECT/MDL/SPECTROMETER_SCS_NAVITAR:output',\n",
    "           'key': 'data.photonEnergy',\n",
    "           'dim': ['gratingEnergy'],\n",
    "          },\n",
    "          }\n",
    "         ]\n",
    "_, data_train = tb.load(proposal, runTrain, fields)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "294b5f3a-1d59-444e-80ab-4834d26d62dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# transform PES data into the format expected\n",
    "pes_data = {k: da.from_array(data_train[item].to_numpy())\n",
    "            for k, item in pes_map.items() if item in data_train}\n",
    "xgm = data_train.XTD10_SA3.isel(sa3_pId=0).to_numpy()[:, np.newaxis]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "b477bf49-f5ca-4df0-b6ed-a270ee35cd28",
   "metadata": {},
   "outputs": [],
   "source": [
    "channels = tuple(pes_data.keys())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
181 182 183 184 185 186 187 188 189 190 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 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 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 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 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 408 409 410 411 412 413 414 415 416 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 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571
   "id": "a843e981-e57e-4163-a4e0-310de7181aec",
   "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",
       "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",
       "  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 20px 20px;\n",
       "}\n",
       "\n",
       ".xr-section-item {\n",
       "  display: contents;\n",
       "}\n",
       "\n",
       ".xr-section-item input {\n",
       "  display: none;\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: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",
       "}\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",
       "  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'>&lt;xarray.Dataset&gt;\n",
       "Dimensions:            (trainId: 7165, PESsampleId: 40000, gratingEnergy: 1800,\n",
       "                        pulse_slot: 2700, sa3_pId: 1)\n",
       "Coordinates:\n",
       "  * trainId            (trainId) uint64 1724088331 1724088332 ... 1724098301\n",
       "  * sa3_pId            (sa3_pId) int64 1326\n",
       "Dimensions without coordinates: PESsampleId, gratingEnergy, pulse_slot\n",
       "Data variables: (12/16)\n",
       "    PES_S_raw          (trainId, PESsampleId) int16 -1 0 -2 0 -2 ... 4 -1 1 1 1\n",
       "    PES_SSW_raw        (trainId, PESsampleId) int16 -4 -3 -4 -2 ... -3 -2 0 -4\n",
       "    PES_SW_raw         (trainId, PESsampleId) int16 -3 -8 -5 -5 ... -7 -5 -8 -5\n",
       "    PES_WSW_raw        (trainId, PESsampleId) int16 -4 -6 -4 -5 ... -5 -3 -4 0\n",
       "    PES_E_raw          (trainId, PESsampleId) int16 -6 -3 -5 -8 ... -6 -2 -4 -6\n",
       "    PES_ESE_raw        (trainId, PESsampleId) int16 -11 -13 -10 ... -10 -10 -12\n",
       "    ...                 ...\n",
       "    PES_NE_raw         (trainId, PESsampleId) int16 -2 -5 -2 -4 -1 ... 0 -2 2 -3\n",
       "    PES_ENE_raw        (trainId, PESsampleId) int16 -4 -3 -2 -3 ... -5 -2 -3 -5\n",
       "    navitar            (trainId, gratingEnergy) float64 12.22 11.29 ... 12.46\n",
       "    energy             (trainId, gratingEnergy) float64 981.0 981.0 ... 1.02e+03\n",
       "    bunchPatternTable  (trainId, pulse_slot) uint32 2146089 0 ... 16777216\n",
       "    XTD10_SA3          (trainId, sa3_pId) float32 1.217e+03 ... 1.489e+03\n",
       "Attributes:\n",
       "    runFolder:  /gpfs/exfel/exp/SA3/202330/p900331/raw/r0069</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-ce2f99e1-96ed-49c4-9bdf-6443016666a8' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-ce2f99e1-96ed-49c4-9bdf-6443016666a8' 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>: 7165</li><li><span>PESsampleId</span>: 40000</li><li><span>gratingEnergy</span>: 1800</li><li><span>pulse_slot</span>: 2700</li><li><span class='xr-has-index'>sa3_pId</span>: 1</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-77f8c769-e25a-44d8-a672-27ae04292e7e' class='xr-section-summary-in' type='checkbox'  checked><label for='section-77f8c769-e25a-44d8-a672-27ae04292e7e' 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'>1724088331 ... 1724098301</div><input id='attrs-8be279b8-204d-427f-b568-aee9dba6e18c' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-8be279b8-204d-427f-b568-aee9dba6e18c' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-de89f66f-4c9c-40c3-b7da-cb3160960477' class='xr-var-data-in' type='checkbox'><label for='data-de89f66f-4c9c-40c3-b7da-cb3160960477' 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([1724088331, 1724088332, 1724088333, ..., 1724098299, 1724098300,\n",
       "       1724098301], 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'>int64</div><div class='xr-var-preview xr-preview'>1326</div><input id='attrs-7d3757a1-5c70-4902-996c-c8c74d06d2d1' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-7d3757a1-5c70-4902-996c-c8c74d06d2d1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-57c736a5-89f0-42d5-9fd3-2926a570380d' class='xr-var-data-in' type='checkbox'><label for='data-57c736a5-89f0-42d5-9fd3-2926a570380d' 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([1326])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-38ed2ad3-b662-42e6-8ef3-5e3a850b78ec' class='xr-section-summary-in' type='checkbox'  ><label for='section-38ed2ad3-b662-42e6-8ef3-5e3a850b78ec' class='xr-section-summary' >Data variables: <span>(16)</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>PES_S_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-1 0 -2 0 -2 2 -2 ... 2 4 -1 1 1 1</div><input id='attrs-8c13a9f8-80cc-43a4-b88a-dbc0193cb176' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-8c13a9f8-80cc-43a4-b88a-dbc0193cb176' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-28d5974f-f300-4585-a8d7-4bfbb429bb2d' class='xr-var-data-in' type='checkbox'><label for='data-28d5974f-f300-4585-a8d7-4bfbb429bb2d' 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([[-1,  0, -2, ...,  1, -4, -1],\n",
       "       [ 0,  4,  0, ...,  2,  1,  1],\n",
       "       [ 1, -1, -1, ...,  3,  1,  3],\n",
       "       ...,\n",
       "       [-2,  2,  0, ...,  1,  1,  4],\n",
       "       [ 0,  4,  0, ...,  3, -1,  3],\n",
       "       [-2,  4,  0, ...,  1,  1,  1]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>PES_SSW_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-4 -3 -4 -2 -4 -2 ... -2 -3 -2 0 -4</div><input id='attrs-9be9e3fe-13af-4a91-8559-3eae946a5f7a' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-9be9e3fe-13af-4a91-8559-3eae946a5f7a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b9601cb4-3102-436c-8b57-d181796c8817' class='xr-var-data-in' type='checkbox'><label for='data-b9601cb4-3102-436c-8b57-d181796c8817' 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([[-4, -3, -4, ..., -4,  0, -2],\n",
       "       [-7, -1, -2, ...,  0, -5,  0],\n",
       "       [-1, -3, -1, ..., -2, -4, -1],\n",
       "       ...,\n",
       "       [-5, -2, -4, ..., -2, -5, -3],\n",
       "       [-1, -3, -4, ...,  2,  0, -1],\n",
       "       [-3, -2, -5, ..., -2,  0, -4]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>PES_SW_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-3 -8 -5 -5 -7 ... -6 -7 -5 -8 -5</div><input id='attrs-90822846-b1c9-42c0-89cf-6728bf37eef2' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-90822846-b1c9-42c0-89cf-6728bf37eef2' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-04dfbfd6-8b07-4e5e-aec1-30c9cfeea298' class='xr-var-data-in' type='checkbox'><label for='data-04dfbfd6-8b07-4e5e-aec1-30c9cfeea298' 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([[ -3,  -8,  -5, ..., -10,  -5, -10],\n",
       "       [ -6,  -4,  -7, ...,  -5,  -8,  -5],\n",
       "       [ -6,  -7,  -7, ...,  -6,  -7,  -8],\n",
       "       ...,\n",
       "       [ -6,  -7,  -3, ...,  -4,  -4,  -6],\n",
       "       [ -8,  -5,  -9, ...,  -9,  -6,  -4],\n",
       "       [ -7,  -5,  -9, ...,  -5,  -8,  -5]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>PES_WSW_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-4 -6 -4 -5 -5 -3 ... -5 -5 -3 -4 0</div><input id='attrs-3aec6568-8d63-4526-8fa0-8cd16d2bdcb8' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-3aec6568-8d63-4526-8fa0-8cd16d2bdcb8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4358d272-ed0b-4341-90e5-1e93862104dc' class='xr-var-data-in' type='checkbox'><label for='data-4358d272-ed0b-4341-90e5-1e93862104dc' 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([[-4, -6, -4, ..., -7, -5, -7],\n",
       "       [-2, -4, -3, ..., -6, -3, -2],\n",
       "       [-3, -3, -3, ..., -4, -5, -3],\n",
       "       ...,\n",
       "       [-8, -5, -5, ..., -4, -5, -4],\n",
       "       [-5, -4, -3, ..., -3, -5, -3],\n",
       "       [-3, -5, -6, ..., -3, -4,  0]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>PES_E_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-6 -3 -5 -8 -7 ... -4 -6 -2 -4 -6</div><input id='attrs-c3876bcd-7936-405e-ae1c-14d38e47dc80' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-c3876bcd-7936-405e-ae1c-14d38e47dc80' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e46a4ff3-2a06-4aff-90e9-933421f20766' class='xr-var-data-in' type='checkbox'><label for='data-e46a4ff3-2a06-4aff-90e9-933421f20766' 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([[-6, -3, -5, ..., -7, -8, -4],\n",
       "       [-8, -5, -8, ..., -7, -4, -5],\n",
       "       [-6, -4, -5, ..., -6, -7, -3],\n",
       "       ...,\n",
       "       [-6, -5, -9, ..., -5, -7, -5],\n",
       "       [-6, -5, -7, ..., -6, -9, -6],\n",
       "       [-5, -3, -7, ..., -2, -4, -6]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>PES_ESE_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-11 -13 -10 -11 ... -11 -10 -10 -12</div><input id='attrs-6f19ed66-b793-44d5-a770-751517f24aca' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-6f19ed66-b793-44d5-a770-751517f24aca' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-0d369472-79cc-4f19-b21e-c4b95ff08b4a' class='xr-var-data-in' type='checkbox'><label for='data-0d369472-79cc-4f19-b21e-c4b95ff08b4a' 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([[-11, -13, -10, ..., -12, -13,  -9],\n",
       "       [ -8, -10, -13, ..., -12,  -9,  -9],\n",
       "       [-12, -12, -11, ..., -10,  -9, -11],\n",
       "       ...,\n",
       "       [-13, -12, -10, ..., -10, -13, -11],\n",
       "       [-11, -12,  -9, ...,  -9, -11, -10],\n",
       "       [-12, -10,  -8, ..., -10, -10, -12]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>PES_SE_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-7 -3 -8 -2 -3 -2 ... 1 -6 -4 -4 -5</div><input id='attrs-673cb872-700e-4470-aac4-d89931829586' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-673cb872-700e-4470-aac4-d89931829586' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a5e5bef8-1fba-40ec-9f42-f252b4363d8f' class='xr-var-data-in' type='checkbox'><label for='data-a5e5bef8-1fba-40ec-9f42-f252b4363d8f' 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([[-7, -3, -8, ..., -3, -7, -2],\n",
       "       [-6, -4, -9, ..., -6, -5, -2],\n",
       "       [-7, -5, -6, ..., -1, -8, -5],\n",
       "       ...,\n",
       "       [-1, -2, -7, ..., -3, -3, -2],\n",
       "       [-5, -6, -6, ..., -4, -8, -4],\n",
       "       [-6, -2, -4, ..., -4, -4, -5]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>PES_SSE_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-13 -14 -14 -13 ... -13 -15 -14 -11</div><input id='attrs-9783df67-3ec6-490d-92f8-6c2a4111588b' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-9783df67-3ec6-490d-92f8-6c2a4111588b' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-98d3cdc6-a895-404d-832e-f345d2f74bc5' class='xr-var-data-in' type='checkbox'><label for='data-98d3cdc6-a895-404d-832e-f345d2f74bc5' 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([[-13, -14, -14, ..., -14, -13, -16],\n",
       "       [-12, -15, -15, ..., -12, -15, -14],\n",
       "       [-14, -13, -14, ..., -14, -14, -15],\n",
       "       ...,\n",
       "       [-11, -10, -13, ..., -14, -10, -13],\n",
       "       [-12, -14, -11, ...,  -9, -14, -13],\n",
       "       [-12, -15, -14, ..., -15, -14, -11]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>PES_N_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-10 -9 -9 -10 -8 ... -11 -9 -9 -9</div><input id='attrs-3e92f06e-fcad-4a8d-a1d9-38b638040a4f' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-3e92f06e-fcad-4a8d-a1d9-38b638040a4f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4d5f3ad8-df08-42b7-916b-a50fe647100e' class='xr-var-data-in' type='checkbox'><label for='data-4d5f3ad8-df08-42b7-916b-a50fe647100e' 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([[-10,  -9,  -9, ..., -11,  -9, -12],\n",
       "       [ -9, -12, -10, ..., -10, -11, -10],\n",
       "       [ -9, -10,  -8, ..., -11, -11, -10],\n",
       "       ...,\n",
       "       [-12, -11, -11, ..., -12, -12, -10],\n",
       "       [-10, -14, -10, ...,  -8, -10, -11],\n",
       "       [-11,  -9, -11, ...,  -9,  -9,  -9]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>PES_NNE_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-8 -9 -7 -10 -9 ... -8 -8 -8 -7 -8</div><input id='attrs-4c7f41c8-d188-428b-ba96-f0386810ea4b' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-4c7f41c8-d188-428b-ba96-f0386810ea4b' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-11b7a006-bf95-4e52-92bc-ab16ac929dca' class='xr-var-data-in' type='checkbox'><label for='data-11b7a006-bf95-4e52-92bc-ab16ac929dca' 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([[ -8,  -9,  -7, ...,  -6,  -6, -10],\n",
       "       [ -6,  -6,  -8, ...,  -9,  -6,  -6],\n",
       "       [ -8, -10,  -9, ...,  -6,  -7,  -8],\n",
       "       ...,\n",
       "       [ -7,  -8,  -7, ...,  -9,  -7,  -7],\n",
       "       [ -7,  -9,  -7, ...,  -7,  -6,  -9],\n",
       "       [ -7,  -9,  -8, ...,  -8,  -7,  -8]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>PES_NE_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-2 -5 -2 -4 -1 -2 ... 2 0 -2 2 -3</div><input id='attrs-8c5aea66-34b6-4c58-9436-8a89f857a8da' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-8c5aea66-34b6-4c58-9436-8a89f857a8da' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-03c0826b-3f80-42b2-b5db-0159d271a50a' class='xr-var-data-in' type='checkbox'><label for='data-03c0826b-3f80-42b2-b5db-0159d271a50a' 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([[-2, -5, -2, ..., -3, -1, -5],\n",
       "       [-1, -2, -2, ..., -2, -2, -5],\n",
       "       [ 1, -2, -3, ..., -4, -5, -4],\n",
       "       ...,\n",
       "       [-2, -1, -1, ..., -4, -2, -6],\n",
       "       [ 0, -9,  0, ..., -1,  0, -4],\n",
       "       [-3, -3, -4, ..., -2,  2, -3]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>PES_ENE_raw</span></div><div class='xr-var-dims'>(trainId, PESsampleId)</div><div class='xr-var-dtype'>int16</div><div class='xr-var-preview xr-preview'>-4 -3 -2 -3 -3 ... -3 -5 -2 -3 -5</div><input id='attrs-ad625186-c9c9-4b12-999e-374dad98991a' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-ad625186-c9c9-4b12-999e-374dad98991a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c2eae30a-c31b-4a01-aae3-4dcaae29ecd0' class='xr-var-data-in' type='checkbox'><label for='data-c2eae30a-c31b-4a01-aae3-4dcaae29ecd0' 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([[-4, -3, -2, ..., -4, -2, -3],\n",
       "       [-4, -5, -3, ..., -1, -3,  2],\n",
       "       [-1, -2, -5, ..., -4, -3, -1],\n",
       "       ...,\n",
       "       [-5, -2, -4, ..., -2,  0, -1],\n",
       "       [-2, -2, -4, ..., -6, -4, -2],\n",
       "       [-3, -3, -5, ..., -2, -3, -5]], dtype=int16)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>navitar</span></div><div class='xr-var-dims'>(trainId, gratingEnergy)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>12.22 11.29 10.78 ... 13.06 12.46</div><input id='attrs-8d46411a-0ea1-4eac-b421-fdcf9e02b093' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-8d46411a-0ea1-4eac-b421-fdcf9e02b093' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7f6df7f7-1388-4bf8-aeac-c45ef3070565' class='xr-var-data-in' type='checkbox'><label for='data-7f6df7f7-1388-4bf8-aeac-c45ef3070565' 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([[12.22  , 11.2875, 10.78  , ..., 12.105 , 11.035 , 11.4475],\n",
       "       [10.555 , 12.405 , 11.015 , ..., 11.995 , 11.7325, 10.76  ],\n",
       "       [11.725 , 10.5325, 11.47  , ..., 13.3975, 11.4575, 12.4975],\n",
       "       ...,\n",
       "       [10.5275, 11.8375, 10.88  , ..., 11.4275, 11.635 , 11.5475],\n",
       "       [11.1775, 11.    , 10.9025, ..., 11.6725, 12.195 , 10.955 ],\n",
       "       [11.59  , 12.0475, 12.6725, ..., 12.425 , 13.0575, 12.455 ]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>energy</span></div><div class='xr-var-dims'>(trainId, gratingEnergy)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>981.0 981.0 ... 1.02e+03 1.02e+03</div><input id='attrs-acb0ebe3-45e2-4ed5-9224-1d4f546d97d5' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-acb0ebe3-45e2-4ed5-9224-1d4f546d97d5' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b91ec4cd-428c-4a86-a07e-ec4e51bd7eb4' class='xr-var-data-in' type='checkbox'><label for='data-b91ec4cd-428c-4a86-a07e-ec4e51bd7eb4' 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([[ 981.00375578,  981.02558941,  981.04742304, ..., 1020.23878641,\n",
       "        1020.26062003, 1020.28245366],\n",
       "       [ 980.99653477,  981.01836809,  981.04020142, ..., 1020.23101968,\n",
       "        1020.252853  , 1020.27468633],\n",
       "       [ 981.00375578,  981.02558941,  981.04742304, ..., 1020.23878641,\n",
       "        1020.26062003, 1020.28245366],\n",
       "       ...,\n",
       "       [ 981.00375578,  981.02558941,  981.04742304, ..., 1020.23878641,\n",
       "        1020.26062003, 1020.28245366],\n",
       "       [ 981.00375578,  981.02558941,  981.04742304, ..., 1020.23878641,\n",
       "        1020.26062003, 1020.28245366],\n",
       "       [ 981.02541948,  981.04725402,  981.06908856, ..., 1020.2620873 ,\n",
       "        1020.28392184, 1020.30575638]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>bunchPatternTable</span></div><div class='xr-var-dims'>(trainId, pulse_slot)</div><div class='xr-var-dtype'>uint32</div><div class='xr-var-preview xr-preview'>2146089 0 ... 16777216 16777216</div><input id='attrs-f13dbce8-1c17-4b95-bf23-35584d4a8852' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-f13dbce8-1c17-4b95-bf23-35584d4a8852' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c4470e3b-6eb5-467b-8bd5-fe3189e21b6c' class='xr-var-data-in' type='checkbox'><label for='data-c4470e3b-6eb5-467b-8bd5-fe3189e21b6c' 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([[ 2146089,        0,  2097193, ..., 16777216, 16777216, 16777216],\n",
       "       [ 2146089,        0,  2097193, ..., 16777216, 16777216, 16777216],\n",
       "       [ 2146089,        0,  2097193, ..., 16777216, 16777216, 16777216],\n",
       "       ...,\n",
       "       [ 2146089,        0,  2097193, ..., 16777216, 16777216, 16777216],\n",
       "       [ 2211625,        0,  2097193, ..., 16777216, 16777216, 16777216],\n",
       "       [ 2146089,        0,  2097193, ..., 16777216, 16777216, 16777216]],\n",
       "      dtype=uint32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>XTD10_SA3</span></div><div class='xr-var-dims'>(trainId, sa3_pId)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>1.217e+03 1.376e+03 ... 1.489e+03</div><input id='attrs-ec6f6e6f-3ecd-40f5-8f00-4d0b221822fe' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-ec6f6e6f-3ecd-40f5-8f00-4d0b221822fe' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7658532a-368b-4652-8c5a-ab36977ed842' class='xr-var-data-in' type='checkbox'><label for='data-7658532a-368b-4652-8c5a-ab36977ed842' 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([[1217.2598],\n",
       "       [1375.6898],\n",
       "       [1362.0608],\n",
       "       ...,\n",
       "       [1517.0592],\n",
       "       [1555.7712],\n",
       "       [1489.4523]], dtype=float32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-ab65f70f-7644-4b87-99a0-e988baaa05f5' class='xr-section-summary-in' type='checkbox'  ><label for='section-ab65f70f-7644-4b87-99a0-e988baaa05f5' 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><div></div><input id='index-8132cdcc-c2ac-4aca-80ee-525d936ca494' class='xr-index-data-in' type='checkbox'/><label for='index-8132cdcc-c2ac-4aca-80ee-525d936ca494' 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([1724088331, 1724088332, 1724088333, 1724088334, 1724088335, 1724088336,\n",
       "       1724088337, 1724088338, 1724088339, 1724088340,\n",
       "       ...\n",
       "       1724098292, 1724098293, 1724098294, 1724098295, 1724098296, 1724098297,\n",
       "       1724098298, 1724098299, 1724098300, 1724098301],\n",
       "      dtype=&#x27;uint64&#x27;, name=&#x27;trainId&#x27;, length=7165))</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><div></div><input id='index-7463f89e-b1bb-419b-9abb-88cffa319ef2' class='xr-index-data-in' type='checkbox'/><label for='index-7463f89e-b1bb-419b-9abb-88cffa319ef2' 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([1326], dtype=&#x27;int64&#x27;, name=&#x27;sa3_pId&#x27;))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-7d629879-f4de-49c0-82a0-6ce5da3adbea' class='xr-section-summary-in' type='checkbox'  checked><label for='section-7d629879-f4de-49c0-82a0-6ce5da3adbea' class='xr-section-summary' >Attributes: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>runFolder :</span></dt><dd>/gpfs/exfel/exp/SA3/202330/p900331/raw/r0069</dd></dl></div></li></ul></div></div>"
      ],
      "text/plain": [
       "<xarray.Dataset>\n",
       "Dimensions:            (trainId: 7165, PESsampleId: 40000, gratingEnergy: 1800,\n",
       "                        pulse_slot: 2700, sa3_pId: 1)\n",
       "Coordinates:\n",
       "  * trainId            (trainId) uint64 1724088331 1724088332 ... 1724098301\n",
       "  * sa3_pId            (sa3_pId) int64 1326\n",
       "Dimensions without coordinates: PESsampleId, gratingEnergy, pulse_slot\n",
       "Data variables: (12/16)\n",
       "    PES_S_raw          (trainId, PESsampleId) int16 -1 0 -2 0 -2 ... 4 -1 1 1 1\n",
       "    PES_SSW_raw        (trainId, PESsampleId) int16 -4 -3 -4 -2 ... -3 -2 0 -4\n",
       "    PES_SW_raw         (trainId, PESsampleId) int16 -3 -8 -5 -5 ... -7 -5 -8 -5\n",
       "    PES_WSW_raw        (trainId, PESsampleId) int16 -4 -6 -4 -5 ... -5 -3 -4 0\n",
       "    PES_E_raw          (trainId, PESsampleId) int16 -6 -3 -5 -8 ... -6 -2 -4 -6\n",
       "    PES_ESE_raw        (trainId, PESsampleId) int16 -11 -13 -10 ... -10 -10 -12\n",
       "    ...                 ...\n",
       "    PES_NE_raw         (trainId, PESsampleId) int16 -2 -5 -2 -4 -1 ... 0 -2 2 -3\n",
       "    PES_ENE_raw        (trainId, PESsampleId) int16 -4 -3 -2 -3 ... -5 -2 -3 -5\n",
       "    navitar            (trainId, gratingEnergy) float64 12.22 11.29 ... 12.46\n",
       "    energy             (trainId, gratingEnergy) float64 981.0 981.0 ... 1.02e+03\n",
       "    bunchPatternTable  (trainId, pulse_slot) uint32 2146089 0 ... 16777216\n",
       "    XTD10_SA3          (trainId, sa3_pId) float32 1.217e+03 ... 1.489e+03\n",
       "Attributes:\n",
       "    runFolder:  /gpfs/exfel/exp/SA3/202330/p900331/raw/r0069"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "8f154e38-d208-477e-9d9c-ef2a632514c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "energy = data_train.energy.to_numpy()[0,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "0c5ff2a0-0737-417d-9f57-158d4fbd8090",
   "metadata": {},
   "outputs": [],
   "source": [
    "gs = data_train.navitar.to_numpy()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "995e2ac0-1898-46dd-b95f-f65a24496871",
   "metadata": {},
   "source": [
    "## Train Virtual Spectrometer"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9cbf75c8-fbe0-42ec-af85-6194aede91f5",
   "metadata": {},
   "source": [
    "So far we have only done pre-processing due to experimental problems with some data not being available in certain train IDs.\n",
    "\n",
    "Let's finally take a look at the data before training the model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "63b35dac-ad50-4124-b6f8-e1ceea667b4d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x2b4c48d719f0>]"
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(energy, gs[2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "d0b70fef-5e27-4cb1-90e7-2653989cf48a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x2b4c50e8d030>]"
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(-pes_data[\"channel_3_A\"][0,2600:2800])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a6606c28-28c8-4d27-9f38-4a7ca88ee397",
   "metadata": {},
   "source": [
    "Now, let's fit the model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "5690cf09-4fed-497d-a09d-0f3cdceea04d",
   "metadata": {},
   "outputs": [],
   "source": [
    "n_test = 10 # exclude some trains to validate the training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "cb86aa32-dc1d-4684-bd62-25aa77a97245",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Checking data quality in high-resolution data.\n",
      "Finding region-of-interest\n",
      "Excluding outliers\n",
      "Selected 6439 of 7155 samples.\n",
      "Fitting PCA on low-resolution data.\n",
      "Using 600 comp. for PES PCA.\n",
      "Fitting PCA on high-resolution data.\n",
      "Using 24 comp. for grating spec. PCA.\n",
      "Fitting outlier detection\n",
      "Fitting model.\n",
      "Calculate PCA unc. on high-resolution data.\n",
      "Calculate transfer function\n",
      "Resolution = 0.77 eV, S/R = 5.69\n",
      "Calculate PCA on channel_1_A\n",
      "Calculate PCA on channel_1_B\n",
      "Calculate PCA on channel_1_C\n",
      "Calculate PCA on channel_1_D\n",
      "Calculate PCA on channel_3_A\n",
      "Calculate PCA on channel_3_B\n",
      "Calculate PCA on channel_3_C\n",
      "Calculate PCA on channel_3_D\n",
      "Calculate PCA on channel_4_A\n",
      "Calculate PCA on channel_4_B\n",
      "Calculate PCA on channel_4_C\n",
      "Calculate PCA on channel_4_D\n",
      "End of fit.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[[12.22  , 11.2875, 10.78  , ..., 12.105 , 11.035 , 11.4475]],\n",
       "       [[10.555 , 12.405 , 11.015 , ..., 11.995 , 11.7325, 10.76  ]],\n",
       "       [[11.725 , 10.5325, 11.47  , ..., 13.3975, 11.4575, 12.4975]],\n",
       "\n",
       "       ...,\n",
       "\n",
       "       [[11.2575, 12.1375, 10.1275, ..., 10.4625, 11.55  , 12.4175]],\n",
       "       [[10.2325, 11.135 , 11.3725, ..., 13.3375, 12.365 , 11.015 ]],\n",
       "       [[12.3775, 10.4575, 11.6425, ..., 11.6075, 11.1875, 12.3825]]])"
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# exclude the last n_test train IDs so we can use them for validation later\n",
    "pes_train = {ch: pes_data[ch][:-n_test, :] for ch in pes_data.keys()}\n",
    "gs_train = gs[:-n_test, :]\n",
    "xgm_train = xgm[:-n_test,:]\n",
    "\n",
    "model = Model(channels=channels)\n",
    "model.fit(pes_train,\n",
    "          gs_train,\n",
    "          np.broadcast_to(energy, (gs_train.shape[0], gs_train.shape[-1])),\n",
    "          pulse_energy=xgm_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "52c038c5-d86e-4e5a-9214-5e1878dd77e8",
   "metadata": {},
   "source": [
    "The resolution of the Virtual Spectrometer relative to the Viking has also been estimated (in eV):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "a084b920-0006-4859-80f9-ff81f3c1f6b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7660922321176997"
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.resolution"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c1f47e6e-3b62-4c8a-8573-8eb4bd40f2ff",
   "metadata": {},
   "source": [
    "We can look at the Virtual Spectrometer to Viking response function as well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f752a9e0-8484-4381-8bb5-5eb27bd82670",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Intensity [a.u.]')"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12, 8))\n",
    "plt.plot(model.impulse_axis, model.impulse_response)\n",
    "plt.xlabel('Energy [eV]')\n",
    "plt.ylabel('Intensity [a.u.]')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3842cb23-a961-4a60-9e9e-d341256e1bb7",
   "metadata": {},
   "source": [
    "## Save model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "4e612338-401e-4fd5-bef7-a6579af0d3d3",
   "metadata": {},
   "outputs": [],