diff --git a/doc/DSSC fine delay with SCS toolbox.ipynb b/doc/DSSC fine delay with SCS toolbox.ipynb index 0b40ec3cf8abbbca0a6f153779732cc773b5f42d..270324a3ff45821c1cc7200341723b19962817c1 100644 --- a/doc/DSSC fine delay with SCS toolbox.ipynb +++ b/doc/DSSC fine delay with SCS toolbox.ipynb @@ -17,7 +17,7 @@ ], "source": [ "import numpy as np\n", - "%matplotlib notebook\n", + "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "plt.rcParams['figure.constrained_layout.use'] = True\n", "\n", @@ -29,865 +29,1138 @@ "import toolbox_scs.routines.boz as boz" ] }, + { + "cell_type": "markdown", + "id": "e94a5c90", + "metadata": {}, + "source": [ + "# Improved method\n", + "\n", + "The delay is scan and saved in the DAQ while recording a single run." + ] + }, { "cell_type": "code", - "execution_count": 4, - "id": "69c17cda", + "execution_count": 2, + "id": "975a36d1", "metadata": {}, "outputs": [], "source": [ - "runs = np.arange(775, 814+1)\n", - "delay = np.arange(4756930, 4756969+1)" + "proposal = 900257\n", + "dNB = 67\n", + "rNB = 68" ] }, { "cell_type": "code", - "execution_count": 5, - "id": "b436e44e", + "execution_count": 3, + "id": "23144fcb", "metadata": {}, "outputs": [], "source": [ - "proposal = 2937" + "arr_dark, tid_dark = boz.load_dssc_module(proposal, dNB, drop_intra_darks=False)" ] }, { - "cell_type": "markdown", - "id": "fdec2470", + "cell_type": "code", + "execution_count": 4, + "id": "6a7a4169", "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "<table>\n", + "<tr>\n", + "<td>\n", + "<table>\n", + " <thead>\n", + " <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", + " </thead>\n", + " <tbody>\n", + " <tr><th> Bytes </th><td> 8.15 GB </td> <td> 1.38 GB </td></tr>\n", + " <tr><th> Shape </th><td> (758, 82, 128, 512) </td> <td> (128, 82, 128, 512) </td></tr>\n", + " <tr><th> Count </th><td> 35 Tasks </td><td> 6 Chunks </td></tr>\n", + " <tr><th> Type </th><td> uint16 </td><td> numpy.ndarray </td></tr>\n", + " </tbody>\n", + "</table>\n", + "</td>\n", + "<td>\n", + "<svg width=\"534\" height=\"114\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", + " <line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"25\" />\n", + " <line x1=\"40\" y1=\"0\" x2=\"40\" y2=\"25\" />\n", + " <line x1=\"60\" y1=\"0\" x2=\"60\" y2=\"25\" />\n", + " <line x1=\"81\" y1=\"0\" x2=\"81\" y2=\"25\" />\n", + " <line x1=\"100\" y1=\"0\" x2=\"100\" y2=\"25\" />\n", + " <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"0.000000,0.000000 120.000000,0.000000 120.000000,25.412617 0.000000,25.412617\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >758</text>\n", + " <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", + "\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"212\" y2=\"22\" style=\"stroke-width:2\" />\n", + " <line x1=\"190\" y1=\"41\" x2=\"212\" y2=\"64\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"190\" y2=\"41\" style=\"stroke-width:2\" />\n", + " <line x1=\"212\" y1=\"22\" x2=\"212\" y2=\"64\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"190.000000,0.000000 212.957586,22.957586 212.957586,64.221703 190.000000,41.264117\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"271\" y2=\"0\" style=\"stroke-width:2\" />\n", + " <line x1=\"212\" y1=\"22\" x2=\"294\" y2=\"22\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"190\" y1=\"0\" x2=\"212\" y2=\"22\" style=\"stroke-width:2\" />\n", + " <line x1=\"271\" y1=\"0\" x2=\"294\" y2=\"22\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"190.000000,0.000000 271.055409,0.000000 294.012995,22.957586 212.957586,22.957586\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Horizontal lines -->\n", + " <line x1=\"212\" y1=\"22\" x2=\"294\" y2=\"22\" style=\"stroke-width:2\" />\n", + " <line x1=\"212\" y1=\"64\" x2=\"294\" y2=\"64\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Vertical lines -->\n", + " <line x1=\"212\" y1=\"22\" x2=\"212\" y2=\"64\" style=\"stroke-width:2\" />\n", + " <line x1=\"294\" y1=\"22\" x2=\"294\" y2=\"64\" style=\"stroke-width:2\" />\n", + "\n", + " <!-- Colored Rectangle -->\n", + " <polygon points=\"212.957586,22.957586 294.012995,22.957586 294.012995,64.221703 212.957586,64.221703\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", + "\n", + " <!-- Text -->\n", + " <text x=\"253.485290\" y=\"84.221703\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >512</text>\n", + " <text x=\"314.012995\" y=\"43.589644\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,314.012995,43.589644)\">128</text>\n", + " <text x=\"191.478793\" y=\"72.742910\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,191.478793,72.742910)\">82</text>\n", + "</svg>\n", + "</td>\n", + "</tr>\n", + "</table>" + ], + "text/plain": [ + "dask.array<reshape, shape=(758, 82, 128, 512), dtype=uint16, chunksize=(128, 82, 128, 512), chunktype=numpy.ndarray>" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "use first run as dark" + "arr_dark" ] }, { "cell_type": "code", - "execution_count": 9, - "id": "6d5673f2", + "execution_count": 5, + "id": "6d233216", "metadata": {}, "outputs": [], "source": [ - "arr_dark, tid_dark = boz.load_dssc_module(proposal, runs[0])\n", - "dark = boz.average_module(arr_dark).compute()" + "dark = arr_dark.mean(axis=0).compute()" ] }, { "cell_type": "code", - "execution_count": 22, - "id": "542d140c", + "execution_count": 6, + "id": "43934f12", "metadata": {}, "outputs": [], "source": [ - "intensity = np.zeros((len(runs)))\n", - "for k,r in enumerate(runs):\n", - " arr, tid = boz.load_dssc_module(proposal, r)\n", - " data = boz.average_module(arr, dark=dark).compute()\n", - " sensor = data[:,:,:256]\n", - " intensity[k] = sensor.mean(axis=(0,1,2))" + "arr, tid = boz.load_dssc_module(proposal, rNB, drop_intra_darks=False)\n", + "arr = arr - dark" ] }, { "cell_type": "code", - "execution_count": 23, - "id": "eab988af", + "execution_count": 7, + "id": "300ce9c6", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Bunch pattern table not found in run. Skipping!\n" + ] + } + ], + "source": [ + "fields = [\"DSSC_delay\"]\n", + "\n", + "run, data = tb.load(proposal, rNB, fields)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "555a7a99", "metadata": {}, "outputs": [ { "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "window.mpl = {};\n", + "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", - "mpl.get_websocket_type = function() {\n", - " if (typeof(WebSocket) !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof(MozWebSocket) !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert('Your browser does not have WebSocket support. ' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.');\n", - " };\n", + "html[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", - "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", + ".xr-wrap {\n", + " display: block;\n", + " min-width: 300px;\n", + " max-width: 700px;\n", + "}\n", "\n", - " this.ws = websocket;\n", + ".xr-text-repr-fallback {\n", + " /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", + " display: none;\n", + "}\n", "\n", - " this.supports_binary = (this.ws.binaryType != undefined);\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", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById(\"mpl-warnings\");\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent = (\n", - " \"This browser does not support binary websocket messages. \" +\n", - " \"Performance may be slow.\");\n", - " }\n", - " }\n", + ".xr-header > div,\n", + ".xr-header > ul {\n", + " display: inline;\n", + " margin-top: 0;\n", + " margin-bottom: 0;\n", + "}\n", "\n", - " this.imageObj = new Image();\n", + ".xr-obj-type,\n", + ".xr-array-name {\n", + " margin-left: 2px;\n", + " margin-right: 10px;\n", + "}\n", "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", + ".xr-obj-type {\n", + " color: var(--xr-font-color2);\n", + "}\n", "\n", - " this.image_mode = 'full';\n", + ".xr-sections {\n", + " padding-left: 0 !important;\n", + " display: grid;\n", + " grid-template-columns: 150px auto auto 1fr 20px 20px;\n", + "}\n", "\n", - " this.root = $('<div/>');\n", - " this._root_extra_style(this.root)\n", - " this.root.attr('style', 'display: inline-block');\n", + ".xr-section-item {\n", + " display: contents;\n", + "}\n", "\n", - " $(parent_element).append(this.root);\n", + ".xr-section-item input {\n", + " display: none;\n", + "}\n", "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", + ".xr-section-item input + label {\n", + " color: var(--xr-disabled-color);\n", + "}\n", "\n", - " var fig = this;\n", + ".xr-section-item input:enabled + label {\n", + " cursor: pointer;\n", + " color: var(--xr-font-color2);\n", + "}\n", "\n", - " this.waiting = false;\n", + ".xr-section-item input:enabled + label:hover {\n", + " color: var(--xr-font-color0);\n", + "}\n", "\n", - " this.ws.onopen = function () {\n", - " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", - " fig.send_message(\"send_image_mode\", {});\n", - " if (mpl.ratio != 1) {\n", - " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", - " }\n", - " fig.send_message(\"refresh\", {});\n", - " }\n", + ".xr-section-summary {\n", + " grid-column: 1;\n", + " color: var(--xr-font-color2);\n", + " font-weight: 500;\n", + "}\n", "\n", - " this.imageObj.onload = function() {\n", - " if (fig.image_mode == 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", + ".xr-section-summary > span {\n", + " display: inline-block;\n", + " padding-left: 0.5em;\n", + "}\n", "\n", - " this.imageObj.onunload = function() {\n", - " fig.ws.close();\n", - " }\n", + ".xr-section-summary-in:disabled + label {\n", + " color: var(--xr-font-color2);\n", + "}\n", "\n", - " this.ws.onmessage = this._make_on_message_function(this);\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", - " this.ondownload = ondownload;\n", + ".xr-section-summary-in:disabled + label:before {\n", + " color: var(--xr-disabled-color);\n", "}\n", "\n", - "mpl.figure.prototype._init_header = function() {\n", - " var titlebar = $(\n", - " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", - " 'ui-helper-clearfix\"/>');\n", - " var titletext = $(\n", - " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", - " 'text-align: center; padding: 3px;\"/>');\n", - " titlebar.append(titletext)\n", - " this.root.append(titlebar);\n", - " this.header = titletext[0];\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", - "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\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", - "mpl.figure.prototype._root_extra_style = function(canvas_div) {\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", - "mpl.figure.prototype._init_canvas = function() {\n", - " var fig = this;\n", + ".xr-preview {\n", + " color: var(--xr-font-color3);\n", + "}\n", "\n", - " var canvas_div = $('<div/>');\n", + ".xr-array-preview,\n", + ".xr-array-data {\n", + " padding: 0 5px !important;\n", + " grid-column: 2;\n", + "}\n", "\n", - " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", + ".xr-array-data,\n", + ".xr-array-in:checked ~ .xr-array-preview {\n", + " display: none;\n", + "}\n", "\n", - " function canvas_keyboard_event(event) {\n", - " return fig.key_event(event, event['data']);\n", - " }\n", + ".xr-array-in:checked ~ .xr-array-data,\n", + ".xr-array-preview {\n", + " display: inline-block;\n", + "}\n", "\n", - " canvas_div.keydown('key_press', canvas_keyboard_event);\n", - " canvas_div.keyup('key_release', canvas_keyboard_event);\n", - " this.canvas_div = canvas_div\n", - " this._canvas_extra_style(canvas_div)\n", - " this.root.append(canvas_div);\n", + ".xr-dim-list {\n", + " display: inline-block !important;\n", + " list-style: none;\n", + " padding: 0 !important;\n", + " margin: 0;\n", + "}\n", "\n", - " var canvas = $('<canvas/>');\n", - " canvas.addClass('mpl-canvas');\n", - " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", + ".xr-dim-list li {\n", + " display: inline-block;\n", + " padding: 0;\n", + " margin: 0;\n", + "}\n", "\n", - " this.canvas = canvas[0];\n", - " this.context = canvas[0].getContext(\"2d\");\n", + ".xr-dim-list:before {\n", + " content: '(';\n", + "}\n", "\n", - " var backingStore = this.context.backingStorePixelRatio ||\n", - "\tthis.context.webkitBackingStorePixelRatio ||\n", - "\tthis.context.mozBackingStorePixelRatio ||\n", - "\tthis.context.msBackingStorePixelRatio ||\n", - "\tthis.context.oBackingStorePixelRatio ||\n", - "\tthis.context.backingStorePixelRatio || 1;\n", + ".xr-dim-list:after {\n", + " content: ')';\n", + "}\n", "\n", - " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + ".xr-dim-list li:not(:last-child):after {\n", + " content: ',';\n", + " padding-right: 5px;\n", + "}\n", "\n", - " var rubberband = $('<canvas/>');\n", - " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", + ".xr-has-index {\n", + " font-weight: bold;\n", + "}\n", "\n", - " var pass_mouse_events = true;\n", + ".xr-var-list,\n", + ".xr-var-item {\n", + " display: contents;\n", + "}\n", "\n", - " canvas_div.resizable({\n", - " start: function(event, ui) {\n", - " pass_mouse_events = false;\n", - " },\n", - " resize: function(event, ui) {\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " stop: function(event, ui) {\n", - " pass_mouse_events = true;\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " });\n", - "\n", - " function mouse_event_fn(event) {\n", - " if (pass_mouse_events)\n", - " return fig.mouse_event(event, event['data']);\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", - " rubberband.mousedown('button_press', mouse_event_fn);\n", - " rubberband.mouseup('button_release', mouse_event_fn);\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband.mousemove('motion_notify', mouse_event_fn);\n", + ".xr-var-item > .xr-var-name:hover span {\n", + " padding-right: 5px;\n", + "}\n", "\n", - " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", - " rubberband.mouseleave('figure_leave', mouse_event_fn);\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", - " canvas_div.on(\"wheel\", function (event) {\n", - " event = event.originalEvent;\n", - " event['data'] = 'scroll'\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " mouse_event_fn(event);\n", - " });\n", + ".xr-var-name {\n", + " grid-column: 1;\n", + "}\n", "\n", - " canvas_div.append(canvas);\n", - " canvas_div.append(rubberband);\n", - "\n", - " this.rubberband = rubberband;\n", - " this.rubberband_canvas = rubberband[0];\n", - " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", - " this.rubberband_context.strokeStyle = \"#000000\";\n", + ".xr-var-dims {\n", + " grid-column: 2;\n", + "}\n", "\n", - " this._resize_canvas = function(width, height) {\n", - " // Keep the size of the canvas, canvas container, and rubber band\n", - " // canvas in synch.\n", - " canvas_div.css('width', width)\n", - " canvas_div.css('height', height)\n", + ".xr-var-dtype {\n", + " grid-column: 3;\n", + " text-align: right;\n", + " color: var(--xr-font-color2);\n", + "}\n", "\n", - " canvas.attr('width', width * mpl.ratio);\n", - " canvas.attr('height', height * mpl.ratio);\n", - " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", - "\n", - " rubberband.attr('width', width);\n", - " rubberband.attr('height', height);\n", - " }\n", - "\n", - " // Set the figure to an initial 600x600px, this will subsequently be updated\n", - " // upon first draw.\n", - " this._resize_canvas(600, 600);\n", - "\n", - " // Disable right mouse context menu.\n", - " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", - " return false;\n", - " });\n", - "\n", - " function set_focus () {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "}\n", - "\n", - "mpl.figure.prototype._init_toolbar = function() {\n", - " var fig = this;\n", - "\n", - " var nav_element = $('<div/>');\n", - " nav_element.attr('style', 'width: 100%');\n", - " this.root.append(nav_element);\n", - "\n", - " // Define a callback function for later on.\n", - " function toolbar_event(event) {\n", - " return fig.toolbar_button_onclick(event['data']);\n", - " }\n", - " function toolbar_mouse_event(event) {\n", - " return fig.toolbar_button_onmouseover(event['data']);\n", - " }\n", - "\n", - " for(var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " // put a spacer in here.\n", - " continue;\n", - " }\n", - " var button = $('<button/>');\n", - " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", - " 'ui-button-icon-only');\n", - " button.attr('role', 'button');\n", - " button.attr('aria-disabled', 'false');\n", - " button.click(method_name, toolbar_event);\n", - " button.mouseover(tooltip, toolbar_mouse_event);\n", - "\n", - " var icon_img = $('<span/>');\n", - " icon_img.addClass('ui-button-icon-primary ui-icon');\n", - " icon_img.addClass(image);\n", - " icon_img.addClass('ui-corner-all');\n", - "\n", - " var tooltip_span = $('<span/>');\n", - " tooltip_span.addClass('ui-button-text');\n", - " tooltip_span.html(tooltip);\n", - "\n", - " button.append(icon_img);\n", - " button.append(tooltip_span);\n", - "\n", - " nav_element.append(button);\n", - " }\n", - "\n", - " var fmt_picker_span = $('<span/>');\n", - "\n", - " var fmt_picker = $('<select/>');\n", - " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", - " fmt_picker_span.append(fmt_picker);\n", - " nav_element.append(fmt_picker_span);\n", - " this.format_dropdown = fmt_picker[0];\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = $(\n", - " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", - " fmt_picker.append(option);\n", - " }\n", - "\n", - " // Add hover states to the ui-buttons\n", - " $( \".ui-button\" ).hover(\n", - " function() { $(this).addClass(\"ui-state-hover\");},\n", - " function() { $(this).removeClass(\"ui-state-hover\");}\n", - " );\n", + ".xr-var-preview {\n", + " grid-column: 4;\n", + "}\n", "\n", - " var status_bar = $('<span class=\"mpl-message\"/>');\n", - " nav_element.append(status_bar);\n", - " this.message = status_bar[0];\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", - "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\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", - "mpl.figure.prototype.send_message = function(type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "}\n", - "\n", - "mpl.figure.prototype.send_draw_message = function() {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", - " }\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype.handle_save = function(fig, msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1]);\n", - " fig.send_message(\"refresh\", {});\n", - " };\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", - " var x0 = msg['x0'] / mpl.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", - " var x1 = msg['x1'] / mpl.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0, 0, fig.canvas.width / mpl.ratio, fig.canvas.height / mpl.ratio);\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", - " var cursor = msg['cursor'];\n", - " switch(cursor)\n", - " {\n", - " case 0:\n", - " cursor = 'pointer';\n", - " break;\n", - " case 1:\n", - " cursor = 'default';\n", - " break;\n", - " case 2:\n", - " cursor = 'crosshair';\n", - " break;\n", - " case 3:\n", - " cursor = 'move';\n", - " break;\n", - " }\n", - " fig.rubberband_canvas.style.cursor = cursor;\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_message = function(fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "}\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function() {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message(\"ack\", {});\n", - "}\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function(fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " evt.data.type = \"image/png\";\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src);\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " evt.data);\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig[\"handle_\" + msg_type];\n", - " } catch (e) {\n", - " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", - " }\n", - " }\n", - " };\n", - "}\n", - "\n", - "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function(e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e)\n", - " e = window.event;\n", - " if (e.target)\n", - " targ = e.target;\n", - " else if (e.srcElement)\n", - " targ = e.srcElement;\n", - " if (targ.nodeType == 3) // defeat Safari bug\n", - " targ = targ.parentNode;\n", - "\n", - " // jQuery normalizes the pageX and pageY\n", - " // pageX,Y are the mouse positions relative to the document\n", - " // offset() returns the position of the element relative to the document\n", - " var x = e.pageX - $(targ).offset().left;\n", - " var y = e.pageY - $(targ).offset().top;\n", - "\n", - " return {\"x\": x, \"y\": y};\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * http://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys (original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object')\n", - " obj[key] = original[key]\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function(event, name) {\n", - " var canvas_pos = mpl.findpos(event)\n", - "\n", - " if (name === 'button_press')\n", - " {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * mpl.ratio;\n", - " var y = canvas_pos.y * mpl.ratio;\n", - "\n", - " this.send_message(name, {x: x, y: y, button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event)});\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "}\n", - "\n", - "mpl.figure.prototype._key_event_extra = function(event, name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "}\n", - "\n", - "mpl.figure.prototype.key_event = function(event, name) {\n", - "\n", - " // Prevent repeat events\n", - " if (name == 'key_press')\n", - " {\n", - " if (event.which === this._key)\n", - " return;\n", - " else\n", - " this._key = event.which;\n", - " }\n", - " if (name == 'key_release')\n", - " this._key = null;\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.which != 17)\n", - " value += \"ctrl+\";\n", - " if (event.altKey && event.which != 18)\n", - " value += \"alt+\";\n", - " if (event.shiftKey && event.which != 16)\n", - " value += \"shift+\";\n", - "\n", - " value += 'k';\n", - " value += event.which.toString();\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, {key: value,\n", - " guiEvent: simpleKeys(event)});\n", - " return false;\n", - "}\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", - " if (name == 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message(\"toolbar_button\", {name: name});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.close = function() {\n", - " comm.close()\n", - " };\n", - " ws.send = function(m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function(msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", - " ws.onmessage(msg['content']['data'])\n", - " });\n", - " return ws;\n", - "}\n", - "\n", - "mpl.mpl_figure_comm = function(comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = $(\"#\" + id);\n", - " var ws_proxy = comm_websocket_adapter(comm)\n", - "\n", - " function ondownload(figure, format) {\n", - " window.open(figure.imageObj.src);\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy,\n", - " ondownload,\n", - " element.get(0));\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element.get(0);\n", - " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", - " if (!fig.cell_info) {\n", - " console.error(\"Failed to find cell for figure\", id, fig);\n", - " return;\n", - " }\n", - "\n", - " var output_index = fig.cell_info[2]\n", - " var cell = fig.cell_info[0];\n", - "\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function(fig, msg) {\n", - " var width = fig.canvas.width/mpl.ratio\n", - " fig.root.unbind('remove')\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable()\n", - " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", - " fig.close_ws(fig, msg);\n", - "}\n", - "\n", - "mpl.figure.prototype.close_ws = function(fig, msg){\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "}\n", - "\n", - "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width/mpl.ratio\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", - "}\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function() {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message(\"ack\", {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () { fig.push_to_output() }, 1000);\n", - "}\n", - "\n", - "mpl.figure.prototype._init_toolbar = function() {\n", - " var fig = this;\n", - "\n", - " var nav_element = $('<div/>');\n", - " nav_element.attr('style', 'width: 100%');\n", - " this.root.append(nav_element);\n", - "\n", - " // Define a callback function for later on.\n", - " function toolbar_event(event) {\n", - " return fig.toolbar_button_onclick(event['data']);\n", - " }\n", - " function toolbar_mouse_event(event) {\n", - " return fig.toolbar_button_onmouseover(event['data']);\n", - " }\n", - "\n", - " for(var toolbar_ind in mpl.toolbar_items){\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) { continue; };\n", - "\n", - " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", - " button.click(method_name, toolbar_event);\n", - " button.mouseover(tooltip, toolbar_mouse_event);\n", - " nav_element.append(button);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", - " nav_element.append(status_bar);\n", - " this.message = status_bar[0];\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", - " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", - " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", - " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", - " buttongrp.append(button);\n", - " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", - " titlebar.prepend(buttongrp);\n", - "}\n", - "\n", - "mpl.figure.prototype._root_extra_style = function(el){\n", - " var fig = this\n", - " el.on(\"remove\", function(){\n", - "\tfig.close_ws(fig, {});\n", - " });\n", - "}\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function(el){\n", - " // this is important to make the div 'focusable\n", - " el.attr('tabindex', 0)\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " }\n", - " else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "\n", - "}\n", - "\n", - "mpl.figure.prototype._key_event_extra = function(event, name) {\n", - " var manager = IPython.notebook.keyboard_manager;\n", - " if (!manager)\n", - " manager = IPython.keyboard_manager;\n", - "\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which == 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_save = function(fig, msg) {\n", - " fig.ondownload(fig, null);\n", - "}\n", - "\n", - "\n", - "mpl.find_output_cell = function(html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i=0; i<ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code'){\n", - " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] == html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "}\n", - "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel != null) {\n", - " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", - "}\n" + "\n", + ".xr-var-attrs,\n", + ".xr-var-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", + " 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-attrs {\n", + " padding-left: 25px !important;\n", + "}\n", + "\n", + ".xr-attrs,\n", + ".xr-var-attrs,\n", + ".xr-var-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, 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", + " 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>\n", + "Dimensions: (trainId: 3987)\n", + "Coordinates:\n", + " * trainId (trainId) uint64 1356431136 1356431137 ... 1356435121 1356435122\n", + "Data variables:\n", + " DSSC_delay (trainId) int32 4756934 4756934 4756934 ... 4756963 4756963\n", + "Attributes:\n", + " runFolder: /gpfs/exfel/exp/SCS/202230/p900257/raw/r0068</pre><div class='xr-wrap' hidden><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-bfa04272-0b47-4c09-8ffe-fb916b03714c' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-bfa04272-0b47-4c09-8ffe-fb916b03714c' 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>: 3987</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-5cc36342-fcf0-41cc-8e60-cca0029ebe4c' class='xr-section-summary-in' type='checkbox' checked><label for='section-5cc36342-fcf0-41cc-8e60-cca0029ebe4c' class='xr-section-summary' >Coordinates: <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 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'>1356431136 ... 1356435122</div><input id='attrs-b819dd08-6550-45cc-842c-3756b1cbc1f9' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-b819dd08-6550-45cc-842c-3756b1cbc1f9' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-177439a1-f769-4844-a43c-b220fb7700a8' class='xr-var-data-in' type='checkbox'><label for='data-177439a1-f769-4844-a43c-b220fb7700a8' 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([1356431136, 1356431137, 1356431138, ..., 1356435120, 1356435121,\n", + " 1356435122], dtype=uint64)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-3ba898b9-af16-4c92-ba3a-7ee1e61177d6' class='xr-section-summary-in' type='checkbox' checked><label for='section-3ba898b9-af16-4c92-ba3a-7ee1e61177d6' 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>DSSC_delay</span></div><div class='xr-var-dims'>(trainId)</div><div class='xr-var-dtype'>int32</div><div class='xr-var-preview xr-preview'>4756934 4756934 ... 4756963 4756963</div><input id='attrs-8e450f6c-0293-4711-b2a8-5196b3291fce' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-8e450f6c-0293-4711-b2a8-5196b3291fce' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-34b9c4b0-ab3a-4159-ae6c-243b73a702c8' class='xr-var-data-in' type='checkbox'><label for='data-34b9c4b0-ab3a-4159-ae6c-243b73a702c8' 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([4756934, 4756934, 4756934, ..., 4756963, 4756963, 4756963],\n", + " dtype=int32)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-ea3a3bf7-ae2b-4f54-b08c-478b479f7edb' class='xr-section-summary-in' type='checkbox' checked><label for='section-ea3a3bf7-ae2b-4f54-b08c-478b479f7edb' 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/SCS/202230/p900257/raw/r0068</dd></dl></div></li></ul></div></div>" ], "text/plain": [ - "<IPython.core.display.Javascript object>" + "<xarray.Dataset>\n", + "Dimensions: (trainId: 3987)\n", + "Coordinates:\n", + " * trainId (trainId) uint64 1356431136 1356431137 ... 1356435121 1356435122\n", + "Data variables:\n", + " DSSC_delay (trainId) int32 4756934 4756934 4756934 ... 4756963 4756963\n", + "Attributes:\n", + " runFolder: /gpfs/exfel/exp/SCS/202230/p900257/raw/r0068" ] }, + "execution_count": 8, "metadata": {}, - "output_type": "display_data" - }, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "133621fc", + "metadata": {}, + "outputs": [], + "source": [ + "intensity = (arr[:,::2,:,:] - arr[:,1::2,:,:]).mean(axis=(1,2,3)).compute()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "aa37ecee", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "b2ed51a8", + "metadata": {}, + "outputs": [], + "source": [ + "xrintensity = xr.DataArray(intensity, coords={'trainId':tid}, dims=['trainId']).to_dataset(name='intensity')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "40ecf913", + "metadata": {}, + "outputs": [ { "data": { "text/html": [ - "<img src=\"data:image/png;base64,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zjIZ6zRq7kbfUwAkuIgCMDc3V2eeeabOP/98fe5zn9OmTZskSb169dJdd90VvbVRQADieOobAvp6nyky1mltUbnvOUhgz09fL2Od/jZ+he8pABJcRAHYrVs3/fOf/5QknXLKKeEAXLBggYwx0VkaJQQgjmfl9tLwi/MDAV6cj+iZsrJIxjr9/MX5vqcASHARBeCXv/xlbdwYukTx6QDcunWrOnToEKWp0UEA4nhGZ26WsU6/fyPL9xQkuM17K2Ws04W909XAXzYARFFEAXjmmWdq+fLlkhoH4LRp03T22WdHaWp0EIA4ngfHhl6X9eKM9b6nIME1BIK6oFe6jHXasrfS9xwACSyiALz33nv1y1/+UnV1dTrllFO0efNmbdu2TZdffrkefvjhqA5ubQQgjueqATNkrNOCjXt9T0ESuPHFeTLWaWp+ke8pABJYRAFYWlqqH/3oRzrttNN04okn6mtf+5rat2+va665RpWV8fW3VgIQx7K95ICMdTq3R5qqaut9z0ESeHR8jox1eoFnnAFEUYvOAczMzNTLL7+sQYMGafr06VEZGG0EII5lck7o9ly/eIkX5aNtjJq7UcY6PTB2me8pABJYRAH41ltvqaam5rCP19bW6q233mrdhVFGAOJY+kxeKWOd+n2c73sKksTstbtlrNOPhs7xPQVAAosoAE844QTt3r37sI/v27dPJ5xwQusujDICEMdywwuh12O53J2+pyBJ7CwNvezgvB5pqqlv8D0HQIKKKADbtWunPXsOv1XRihUrdPrpp7fuwigjAHE0FTX16pTquDcr2lQwGFSXvlNlrNOaIn5fAhAdzQrAyy67TJdffrlOOOEEXXLJJbr88svDj0svvVRf+tKX1L179zYZ3loIQBzN/PV7ZazT1c/M9D0FSeZ/RyyQsU6Tc+Lr1poA4kezArBfv37q16+f2rVrp3/84x/hf+7Xr58GDBigd999V7W1tW0yvLUQgDia56avk7FOD41b7nsKkkzPSXky1mlA+mrfUwAkqIguAb/55puqrk6MS2IEII7mt68tlrFOYxZu8T0FSWbS8kIZ69Rt6BwFg9wRBEDra9ExMLW1tSosLNS2bdsaPeIJAYgjaQgEdfHjoddhrdrBrw20rfLqOnU+eEeQtUXlvucASEARBeD69ev1ve99TyeccEKjR7t27XgXMBLCqh1lMtap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\" width=\"640\">" + "<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.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;\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-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", + " 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", + " 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-attrs {\n", + " padding-left: 25px !important;\n", + "}\n", + "\n", + ".xr-attrs,\n", + ".xr-var-attrs,\n", + ".xr-var-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, 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", + " 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>\n", + "Dimensions: (trainId: 3987)\n", + "Coordinates:\n", + " * trainId (trainId) uint64 1356431136 1356431137 ... 1356435121 1356435122\n", + "Data variables:\n", + " intensity (trainId) float64 -0.05101 -0.05173 -0.04971 ... 0.1101 0.09043</pre><div class='xr-wrap' hidden><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-b2b4ce51-a78c-465d-af44-bcf41e7b7e26' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-b2b4ce51-a78c-465d-af44-bcf41e7b7e26' 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>: 3987</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-0ab9160a-b3c6-4a8e-bc60-82107d5e969c' class='xr-section-summary-in' type='checkbox' checked><label for='section-0ab9160a-b3c6-4a8e-bc60-82107d5e969c' class='xr-section-summary' >Coordinates: <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 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'>1356431136 ... 1356435122</div><input id='attrs-9b99e257-1d49-421f-99ce-82e91f73afd9' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-9b99e257-1d49-421f-99ce-82e91f73afd9' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-734a9766-a051-4d1c-84a7-d0fc4dc46967' class='xr-var-data-in' type='checkbox'><label for='data-734a9766-a051-4d1c-84a7-d0fc4dc46967' 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([1356431136, 1356431137, 1356431138, ..., 1356435120, 1356435121,\n", + " 1356435122], dtype=uint64)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-ee25f1d2-8e07-4c9c-a570-cbd048a10c42' class='xr-section-summary-in' type='checkbox' checked><label for='section-ee25f1d2-8e07-4c9c-a570-cbd048a10c42' 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>intensity</span></div><div class='xr-var-dims'>(trainId)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-0.05101 -0.05173 ... 0.09043</div><input id='attrs-f0fd2f61-15b0-44d8-8f7b-bf449db5676a' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-f0fd2f61-15b0-44d8-8f7b-bf449db5676a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-ca51ecb5-0f1f-48ec-b623-367016ff5138' class='xr-var-data-in' type='checkbox'><label for='data-ca51ecb5-0f1f-48ec-b623-367016ff5138' 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([-0.05101078, -0.05172943, -0.04970783, ..., 0.09228413,\n", + " 0.11005988, 0.09043484])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-77c89a11-f801-4bfa-85a2-4fdacf30421f' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-77c89a11-f801-4bfa-85a2-4fdacf30421f' 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": [ - "<IPython.core.display.HTML object>" + "<xarray.Dataset>\n", + "Dimensions: (trainId: 3987)\n", + "Coordinates:\n", + " * trainId (trainId) uint64 1356431136 1356431137 ... 1356435121 1356435122\n", + "Data variables:\n", + " intensity (trainId) float64 -0.05101 -0.05173 -0.04971 ... 0.1101 0.09043" ] }, + "execution_count": 12, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" + } + ], + "source": [ + "xrintensity" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "b12050ba", + "metadata": {}, + "outputs": [], + "source": [ + "r = xr.merge([data, xrintensity], join='inner', combine_attrs='no_conflicts')" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "6c222b5e", + "metadata": {}, + "outputs": [], + "source": [ + "rbin = r.groupby('DSSC_delay').mean()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "be0a0b31", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Intensity')" + ] + }, + "execution_count": 15, + "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": [ + "offset = 4756949\n", + "plt.figure()\n", + "plt.plot(rbin['DSSC_delay'] - offset, rbin['intensity'], marker='o')\n", + "plt.title(f'{proposal} r:{rNB} d:{dNB}')\n", + "plt.xlabel(f'DSSC fine delay - {offset} (delay unit)')\n", + "plt.ylabel('Intensity')" + ] + }, + { + "cell_type": "markdown", + "id": "d1e47f42", + "metadata": {}, + "source": [ + "# Legacy\n", + "\n", + "One run is recorded for one fine delay in sequence, the delay itself is not saved in the data" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "69c17cda", + "metadata": {}, + "outputs": [], + "source": [ + "runs = np.arange(775, 814+1)\n", + "delay = np.arange(4756930, 4756969+1)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "b436e44e", + "metadata": {}, + "outputs": [], + "source": [ + "proposal = 2937" + ] + }, + { + "cell_type": "markdown", + "id": "fdec2470", + "metadata": {}, + "source": [ + "use first run as dark" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "6d5673f2", + "metadata": {}, + "outputs": [], + "source": [ + "arr_dark, tid_dark = boz.load_dssc_module(proposal, runs[0])\n", + "dark = boz.average_module(arr_dark).compute()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "542d140c", + "metadata": {}, + "outputs": [], + "source": [ + "intensity = np.zeros((len(runs)))\n", + "for k,r in enumerate(runs):\n", + " arr, tid = boz.load_dssc_module(proposal, r)\n", + " data = boz.average_module(arr, dark=dark).compute()\n", + " sensor = data[:,:,:256]\n", + " intensity[k] = sensor.mean(axis=(0,1,2))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "eab988af", + "metadata": {}, + "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, '<intensity>')" ] }, - "execution_count": 23, + "execution_count": 20, "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": [ diff --git a/doc/changelog.rst b/doc/changelog.rst index 49da25044d5f58c398e1047ae4b253fcd15a2ad8..6a83bdeb4c5b4dcd2d33b4719399b361e38d564a 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -18,7 +18,7 @@ unreleased - update version GATT-related mnemonics, add `transmission_col2` :mr:`172` - reorganize the Howto section :mr:`169` - improve SLURM scripts with named arguments :mr:`176` - - adds notebook for DSSC fine timing analysis + - adds notebook for DSSC fine timing analysis :mr:`184` and :mr:`185` - **New Features** - add routine for fluence calibration :mr:`180` diff --git a/src/toolbox_scs/constants.py b/src/toolbox_scs/constants.py index c3c2deba425ec5f4941fbe1c082f0bcbb9927a7a..8d4a75bc5cd2cdfe20da9901d5305202971142ee 100644 --- a/src/toolbox_scs/constants.py +++ b/src/toolbox_scs/constants.py @@ -446,6 +446,11 @@ mnemonics = { 'key': 'data.image.pixels', 'dim': ['llc1_y', 'llc1_x']},), + # DSSC + "DSSC_delay": ({'source': 'SCS_RR_SYS/TSYS/UTC-1-S2', + 'key': 'backTrg3.delay.value', + 'dim': None},), + # PI-MTE3 CCD camera "MTE3": ({'source': 'SCS_CDIDET_MTE3/CAM/CAMERA:daqOutput', 'key': 'data.image.pixels',