{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Import supporting package" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import xarray as xr\n", "import numpy as np\n", "import copy\n", "\n", "from uncertainties import ufloat\n", "from uncertainties import unumpy as unp\n", "from uncertainties import umath\n", "import random\n", "import matplotlib.pyplot as plt\n", "plt.rcParams['font.size'] = 12\n", "\n", "from DataContainer.ReadData import read_hdf5_file\n", "from Analyser.ImagingAnalyser import ImageAnalyser\n", "from Analyser.FitAnalyser import FitAnalyser\n", "from Analyser.FitAnalyser import NewFitModel, DensityProfileBEC2dModel\n", "from ToolFunction.ToolFunction import *\n", "\n", "from scipy.optimize import curve_fit\n", "\n", "from ToolFunction.HomeMadeXarrayFunction import errorbar, dataarray_plot_errorbar\n", "xr.plot.dataarray_plot.errorbar = errorbar\n", "xr.plot.accessor.DataArrayPlotAccessor.errorbar = dataarray_plot_errorbar\n", "\n", "imageAnalyser = ImageAnalyser()\n", "\n", "# %matplotlib notebook" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Start a client for parallel computing" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\data\\AppData\\Roaming\\Python\\Python39\\site-packages\\distributed\\node.py:182: UserWarning: Port 8787 is already in use.\n", "Perhaps you already have a cluster running?\n", "Hosting the HTTP server on port 64025 instead\n", " warnings.warn(\n" ] }, { "data": { "text/html": [ "
\n", "
\n", "
\n", "

Client

\n", "

Client-62d9ff1a-1663-11ee-a424-80e82ce2fa8e

\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", " Dashboard: http://127.0.0.1:64025/status\n", "
\n", "\n", " \n", "\n", " \n", "
\n", "

Cluster Info

\n", "
\n", "
\n", "
\n", "
\n", "

LocalCluster

\n", "

c9b6fb7f

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", "
\n", " Dashboard: http://127.0.0.1:64025/status\n", " \n", " Workers: 8\n", "
\n", " Total threads: 128\n", " \n", " Total memory: 149.01 GiB\n", "
Status: runningUsing processes: True
\n", "\n", "
\n", " \n", "

Scheduler Info

\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "

Scheduler

\n", "

Scheduler-aec9e7c3-d306-41ff-adef-79b6d2ae756f

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Comm: tcp://127.0.0.1:64028\n", " \n", " Workers: 8\n", "
\n", " Dashboard: http://127.0.0.1:64025/status\n", " \n", " Total threads: 128\n", "
\n", " Started: Just now\n", " \n", " Total memory: 149.01 GiB\n", "
\n", "
\n", "
\n", "\n", "
\n", " \n", "

Workers

\n", "
\n", "\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 0

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:64070\n", " \n", " Total threads: 16\n", "
\n", " Dashboard: http://127.0.0.1:64073/status\n", " \n", " Memory: 18.63 GiB\n", "
\n", " Nanny: tcp://127.0.0.1:64031\n", "
\n", " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-a5t3uhr6\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 1

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:64064\n", " \n", " Total threads: 16\n", "
\n", " Dashboard: http://127.0.0.1:64067/status\n", " \n", " Memory: 18.63 GiB\n", "
\n", " Nanny: tcp://127.0.0.1:64032\n", "
\n", " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-axcwdu0y\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 2

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:64084\n", " \n", " Total threads: 16\n", "
\n", " Dashboard: http://127.0.0.1:64085/status\n", " \n", " Memory: 18.63 GiB\n", "
\n", " Nanny: tcp://127.0.0.1:64033\n", "
\n", " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-ewtdqzqy\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 3

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:64076\n", " \n", " Total threads: 16\n", "
\n", " Dashboard: http://127.0.0.1:64079/status\n", " \n", " Memory: 18.63 GiB\n", "
\n", " Nanny: tcp://127.0.0.1:64034\n", "
\n", " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-imeu1_9t\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 4

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:64075\n", " \n", " Total threads: 16\n", "
\n", " Dashboard: http://127.0.0.1:64077/status\n", " \n", " Memory: 18.63 GiB\n", "
\n", " Nanny: tcp://127.0.0.1:64035\n", "
\n", " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-y0dpc96g\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 5

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:64063\n", " \n", " Total threads: 16\n", "
\n", " Dashboard: http://127.0.0.1:64065/status\n", " \n", " Memory: 18.63 GiB\n", "
\n", " Nanny: tcp://127.0.0.1:64036\n", "
\n", " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-hrqxp7t9\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 6

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:64069\n", " \n", " Total threads: 16\n", "
\n", " Dashboard: http://127.0.0.1:64071/status\n", " \n", " Memory: 18.63 GiB\n", "
\n", " Nanny: tcp://127.0.0.1:64037\n", "
\n", " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-dv2tpx5b\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 7

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:64081\n", " \n", " Total threads: 16\n", "
\n", " Dashboard: http://127.0.0.1:64082/status\n", " \n", " Memory: 18.63 GiB\n", "
\n", " Nanny: tcp://127.0.0.1:64038\n", "
\n", " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-e907936d\n", "
\n", "
\n", "
\n", "
\n", " \n", "\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", " \n", "\n", "
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from dask.distributed import Client\n", "client = Client(n_workers=8, threads_per_worker=16, processes=True, memory_limit='20GB')\n", "client" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Start a client for Mongo DB" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import pymongo\n", "import xarray_mongodb\n", "\n", "from DataContainer.MongoDB import MongoDB\n", "\n", "mongoClient = pymongo.MongoClient('mongodb://control:DyLab2021@127.0.0.1:27017/?authMechanism=DEFAULT')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Set global path for experiment" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "groupList = [\n", " \"images/MOT_3D_Camera/in_situ_absorption\",\n", " \"images/ODT_1_Axis_Camera/in_situ_absorption\",\n", " \"images/ODT_2_Axis_Camera/in_situ_absorption\",\n", "]\n", "\n", "dskey = {\n", " \"images/MOT_3D_Camera/in_situ_absorption\": \"camera_0\",\n", " \"images/ODT_1_Axis_Camera/in_situ_absorption\": \"camera_1\",\n", " \"images/ODT_2_Axis_Camera/in_situ_absorption\": \"camera_2\",\n", "}\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "img_dir = 'C:/Users/control/DyLab/Experiments/DyBEC/'\n", "SequenceName = \"Repetition_scan\"\n", "folderPath = img_dir + SequenceName + \"/\" + get_date()\n", "\n", "mongoDB = mongoClient[SequenceName]\n", "\n", "DB = MongoDB(mongoClient, mongoDB, date=get_date())" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Repetition Scans" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## scan MOT freq" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The detected scaning axes and values are: \n", "\n", "{'initial_freq': array([102. , 102.25, 102.5 , 102.75, 103. , 103.25, 103.5 , 103.75,\n", " 104. , 104.25, 104.5 , 104.75]), 'runs': array([0., 1., 2.])}\n" ] }, { "data": { "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.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(\n '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 }\n};\n\nmpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = this.ws.binaryType !== undefined;\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\n this.imageObj = new Image();\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\n this.image_mode = 'full';\n\n this.root = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\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 (fig.ratio !== 1) {\n fig.send_message('set_device_pixel_ratio', {\n device_pixel_ratio: fig.ratio,\n });\n }\n fig.send_message('refresh', {});\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\n this.imageObj.onunload = function () {\n fig.ws.close();\n };\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n};\n\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n rubberband_canvas.addEventListener(\n 'dblclick',\n on_mouse_event_closure('dblclick')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\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\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.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};\n\nmpl.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\nmpl.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\nmpl.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\nmpl.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], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n fig.rubberband_canvas.style.cursor = msg['cursor'];\n};\n\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.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.\nmpl.figure.prototype._make_on_message_function = function (fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n var img = evt.data;\n if (img.type !== 'image/png') {\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 img.type = 'image/png';\n }\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\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n img\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\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(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\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(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.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 }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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 * https://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\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\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.key === this._key) {\n return;\n } else {\n this._key = event.key;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.key !== 'Control') {\n value += 'ctrl+';\n }\n else if (event.altKey && event.key !== 'Alt') {\n value += 'alt+';\n }\n else if (event.shiftKey && event.key !== 'Shift') {\n value += 'shift+';\n }\n\n value += 'k' + event.key;\n\n this._key_event_extra(event, name);\n\n this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.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\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar 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.binaryType = comm.kernel.ws.binaryType;\n ws.readyState = comm.kernel.ws.readyState;\n function updateReadyState(_event) {\n if (comm.kernel.ws) {\n ws.readyState = comm.kernel.ws.readyState;\n } else {\n ws.readyState = 3; // Closed state.\n }\n }\n comm.kernel.ws.addEventListener('open', updateReadyState);\n comm.kernel.ws.addEventListener('close', updateReadyState);\n comm.kernel.ws.addEventListener('error', updateReadyState);\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 var data = msg['content']['data'];\n if (data['blob'] !== undefined) {\n data = {\n data: new Blob(msg['buffers'], { type: data['blob'] }),\n };\n }\n // Pass the mpl event to the overridden (by mpl) onmessage function.\n ws.onmessage(data);\n });\n return ws;\n};\n\nmpl.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 = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\n fig.cell_info = mpl.find_output_cell(\"
\");\n if (!fig.cell_info) {\n console.error('Failed to find cell for figure', id, fig);\n return;\n }\n fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n '';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.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 / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '';\n};\n\nmpl.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 () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('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 } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.figure.prototype._key_event_extra = function (event, _name) {\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\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.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.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib notebook\n", "shotNum = \"0000\"\n", "filePath = folderPath + \"/\" + shotNum + \"/*.h5\"\n", "\n", "dataSetDict = {\n", " dskey[groupList[i]]: read_hdf5_file(filePath, groupList[i])\n", " for i in range(len(groupList))\n", "}\n", "\n", "dataSet = dataSetDict[\"camera_1\"]\n", "\n", "print_scanAxis(dataSet)\n", "\n", "scanAxis = get_scanAxis(dataSet)\n", "\n", "dataSet = auto_rechunk(dataSet)\n", "\n", "dataSet = imageAnalyser.get_absorption_images(dataSet)\n", "\n", "imageAnalyser.center = (310, 825)\n", "imageAnalyser.span = (550, 1250)\n", "imageAnalyser.fraction = (0.1, 0.1)\n", "\n", "dataSet_cropOD = imageAnalyser.crop_image(dataSet.OD)\n", "dataSet_cropOD = imageAnalyser.substract_offset(dataSet_cropOD).load()\n", "\n", "Ncount = imageAnalyser.get_Ncount(dataSet_cropOD)\n", "Ncount_mean = calculate_mean(Ncount)\n", "Ncount_std = calculate_std(Ncount)\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", "Ncount_mean.plot.errorbar(ax=ax, yerr = Ncount_std, fmt='ob')\n", "plt.xlabel('MOT AOM Freq (MHz)')\n", "plt.ylabel('NCount')\n", "plt.tight_layout()\n", "plt.grid(visible=1)\n", "plt.show()\n", "\n", "# DB.create_global(shotNum, dataSet)\n", "# DB.add_data(shotNum, dataSet_cropOD, engine='xarray')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "dataSet_cropOD.plot.pcolormesh(cmap='jet', vmin=0, vmax=2, col=scanAxis[0], row=scanAxis[1])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## scan Push freq" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The detected scaning axes and values are: \n", "\n", "{'push_freq': array([101.1, 101.6, 102.1, 102.6, 103.1, 103.6, 104.1, 104.6, 105.1,\n", " 105.6, 106.1]), 'runs': array([0., 1., 2.])}\n" ] }, { "data": { "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.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(\n '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 }\n};\n\nmpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = this.ws.binaryType !== undefined;\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\n this.imageObj = new Image();\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\n this.image_mode = 'full';\n\n this.root = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\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 (fig.ratio !== 1) {\n fig.send_message('set_device_pixel_ratio', {\n device_pixel_ratio: fig.ratio,\n });\n }\n fig.send_message('refresh', {});\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\n this.imageObj.onunload = function () {\n fig.ws.close();\n };\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n};\n\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n rubberband_canvas.addEventListener(\n 'dblclick',\n on_mouse_event_closure('dblclick')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\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\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.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};\n\nmpl.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\nmpl.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\nmpl.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\nmpl.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], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n fig.rubberband_canvas.style.cursor = msg['cursor'];\n};\n\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.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.\nmpl.figure.prototype._make_on_message_function = function (fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n var img = evt.data;\n if (img.type !== 'image/png') {\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 img.type = 'image/png';\n }\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\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n img\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\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(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\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(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.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 }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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 * https://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\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\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.key === this._key) {\n return;\n } else {\n this._key = event.key;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.key !== 'Control') {\n value += 'ctrl+';\n }\n else if (event.altKey && event.key !== 'Alt') {\n value += 'alt+';\n }\n else if (event.shiftKey && event.key !== 'Shift') {\n value += 'shift+';\n }\n\n value += 'k' + event.key;\n\n this._key_event_extra(event, name);\n\n this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.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\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar 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.binaryType = comm.kernel.ws.binaryType;\n ws.readyState = comm.kernel.ws.readyState;\n function updateReadyState(_event) {\n if (comm.kernel.ws) {\n ws.readyState = comm.kernel.ws.readyState;\n } else {\n ws.readyState = 3; // Closed state.\n }\n }\n comm.kernel.ws.addEventListener('open', updateReadyState);\n comm.kernel.ws.addEventListener('close', updateReadyState);\n comm.kernel.ws.addEventListener('error', updateReadyState);\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 var data = msg['content']['data'];\n if (data['blob'] !== undefined) {\n data = {\n data: new Blob(msg['buffers'], { type: data['blob'] }),\n };\n }\n // Pass the mpl event to the overridden (by mpl) onmessage function.\n ws.onmessage(data);\n });\n return ws;\n};\n\nmpl.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 = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\n fig.cell_info = mpl.find_output_cell(\"
\");\n if (!fig.cell_info) {\n console.error('Failed to find cell for figure', id, fig);\n return;\n }\n fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n '';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.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 / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '';\n};\n\nmpl.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 () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('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 } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.figure.prototype._key_event_extra = function (event, _name) {\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\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.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.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib notebook\n", "shotNum = \"0001\"\n", "filePath = folderPath + \"/\" + shotNum + \"/*.h5\"\n", "\n", "dataSetDict = {\n", " dskey[groupList[i]]: read_hdf5_file(filePath, groupList[i])\n", " for i in range(len(groupList))\n", "}\n", "\n", "dataSet = dataSetDict[\"camera_1\"]\n", "\n", "print_scanAxis(dataSet)\n", "\n", "scanAxis = get_scanAxis(dataSet)\n", "\n", "dataSet = auto_rechunk(dataSet)\n", "\n", "dataSet = imageAnalyser.get_absorption_images(dataSet)\n", "\n", "imageAnalyser.center = (310, 825)\n", "imageAnalyser.span = (550, 1250)\n", "imageAnalyser.fraction = (0.1, 0.1)\n", "\n", "dataSet_cropOD = imageAnalyser.crop_image(dataSet.OD)\n", "dataSet_cropOD = imageAnalyser.substract_offset(dataSet_cropOD).load()\n", "\n", "Ncount = imageAnalyser.get_Ncount(dataSet_cropOD)\n", "Ncount_mean = calculate_mean(Ncount)\n", "Ncount_std = calculate_std(Ncount)\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", "Ncount_mean.plot.errorbar(ax=ax, yerr = Ncount_std, fmt='ob')\n", "plt.xlabel('Push AOM Freq (MHz)')\n", "plt.ylabel('NCount')\n", "plt.tight_layout()\n", "plt.grid(visible=1)\n", "plt.show()\n", "\n", "# DB.create_global(shotNum, dataSet)\n", "# DB.add_data(shotNum, dataSet_cropOD, engine='xarray')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## scan Z comp current" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The detected scaning axes and values are: \n", "\n", "{'compZ_final_current': array([0.248, 0.249, 0.25 , 0.251, 0.252, 0.253, 0.254, 0.255, 0.256,\n", " 0.257, 0.258]), 'runs': array([0., 1., 2.])}\n" ] }, { "data": { "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.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(\n '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 }\n};\n\nmpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = this.ws.binaryType !== undefined;\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\n this.imageObj = new Image();\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\n this.image_mode = 'full';\n\n this.root = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\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 (fig.ratio !== 1) {\n fig.send_message('set_device_pixel_ratio', {\n device_pixel_ratio: fig.ratio,\n });\n }\n fig.send_message('refresh', {});\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\n this.imageObj.onunload = function () {\n fig.ws.close();\n };\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n};\n\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n rubberband_canvas.addEventListener(\n 'dblclick',\n on_mouse_event_closure('dblclick')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\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\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.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};\n\nmpl.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\nmpl.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\nmpl.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\nmpl.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], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n fig.rubberband_canvas.style.cursor = msg['cursor'];\n};\n\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.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.\nmpl.figure.prototype._make_on_message_function = function (fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n var img = evt.data;\n if (img.type !== 'image/png') {\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 img.type = 'image/png';\n }\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\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n img\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\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(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\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(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.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 }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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 * https://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\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\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.key === this._key) {\n return;\n } else {\n this._key = event.key;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.key !== 'Control') {\n value += 'ctrl+';\n }\n else if (event.altKey && event.key !== 'Alt') {\n value += 'alt+';\n }\n else if (event.shiftKey && event.key !== 'Shift') {\n value += 'shift+';\n }\n\n value += 'k' + event.key;\n\n this._key_event_extra(event, name);\n\n this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.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\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar 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.binaryType = comm.kernel.ws.binaryType;\n ws.readyState = comm.kernel.ws.readyState;\n function updateReadyState(_event) {\n if (comm.kernel.ws) {\n ws.readyState = comm.kernel.ws.readyState;\n } else {\n ws.readyState = 3; // Closed state.\n }\n }\n comm.kernel.ws.addEventListener('open', updateReadyState);\n comm.kernel.ws.addEventListener('close', updateReadyState);\n comm.kernel.ws.addEventListener('error', updateReadyState);\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 var data = msg['content']['data'];\n if (data['blob'] !== undefined) {\n data = {\n data: new Blob(msg['buffers'], { type: data['blob'] }),\n };\n }\n // Pass the mpl event to the overridden (by mpl) onmessage function.\n ws.onmessage(data);\n });\n return ws;\n};\n\nmpl.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 = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\n fig.cell_info = mpl.find_output_cell(\"
\");\n if (!fig.cell_info) {\n console.error('Failed to find cell for figure', id, fig);\n return;\n }\n fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n '';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.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 / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '';\n};\n\nmpl.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 () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('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 } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.figure.prototype._key_event_extra = function (event, _name) {\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\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.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.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib notebook\n", "shotNum = \"0002\"\n", "filePath = folderPath + \"/\" + shotNum + \"/*.h5\"\n", "\n", "dataSetDict = {\n", " dskey[groupList[i]]: read_hdf5_file(filePath, groupList[i])\n", " for i in range(len(groupList))\n", "}\n", "\n", "dataSet = dataSetDict[\"camera_1\"]\n", "\n", "print_scanAxis(dataSet)\n", "\n", "scanAxis = get_scanAxis(dataSet)\n", "\n", "dataSet = auto_rechunk(dataSet)\n", "\n", "dataSet = imageAnalyser.get_absorption_images(dataSet)\n", "\n", "imageAnalyser.center = (305, 870)\n", "imageAnalyser.span = (400, 400)\n", "imageAnalyser.fraction = (0.1, 0.1)\n", "\n", "dataSet_cropOD = imageAnalyser.crop_image(dataSet.OD)\n", "dataSet_cropOD = imageAnalyser.substract_offset(dataSet_cropOD).load()\n", "\n", "Ncount = imageAnalyser.get_Ncount(dataSet_cropOD)\n", "Ncount_mean = calculate_mean(Ncount)\n", "Ncount_std = calculate_std(Ncount)\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", "Ncount_mean.plot.errorbar(ax=ax, yerr = Ncount_std, fmt='ob')\n", "plt.xlabel('comp Z current (A)')\n", "plt.ylabel('NCount')\n", "plt.tight_layout()\n", "plt.grid(visible=1)\n", "plt.show()\n", "\n", "# DB.create_global(shotNum, dataSet)\n", "# DB.add_data(shotNum, dataSet_cropOD, engine='xarray')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## scan cMOT final amp" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The detected scaning axes and values are: \n", "\n", "{'final_amp': array([3.00e-05, 5.50e-05, 8.00e-05, 1.05e-04, 1.30e-04, 1.55e-04,\n", " 1.80e-04, 2.05e-04, 2.30e-04, 2.55e-04, 2.80e-04]), 'runs': array([0., 1., 2.])}\n" ] }, { "data": { "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.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(\n '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 }\n};\n\nmpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = this.ws.binaryType !== undefined;\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\n this.imageObj = new Image();\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\n this.image_mode = 'full';\n\n this.root = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\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 (fig.ratio !== 1) {\n fig.send_message('set_device_pixel_ratio', {\n device_pixel_ratio: fig.ratio,\n });\n }\n fig.send_message('refresh', {});\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\n this.imageObj.onunload = function () {\n fig.ws.close();\n };\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n};\n\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n rubberband_canvas.addEventListener(\n 'dblclick',\n on_mouse_event_closure('dblclick')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\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\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.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};\n\nmpl.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\nmpl.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\nmpl.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\nmpl.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], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n fig.rubberband_canvas.style.cursor = msg['cursor'];\n};\n\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.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.\nmpl.figure.prototype._make_on_message_function = function (fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n var img = evt.data;\n if (img.type !== 'image/png') {\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 img.type = 'image/png';\n }\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\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n img\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\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(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\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(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.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 }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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 * https://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\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\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.key === this._key) {\n return;\n } else {\n this._key = event.key;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.key !== 'Control') {\n value += 'ctrl+';\n }\n else if (event.altKey && event.key !== 'Alt') {\n value += 'alt+';\n }\n else if (event.shiftKey && event.key !== 'Shift') {\n value += 'shift+';\n }\n\n value += 'k' + event.key;\n\n this._key_event_extra(event, name);\n\n this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.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\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar 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.binaryType = comm.kernel.ws.binaryType;\n ws.readyState = comm.kernel.ws.readyState;\n function updateReadyState(_event) {\n if (comm.kernel.ws) {\n ws.readyState = comm.kernel.ws.readyState;\n } else {\n ws.readyState = 3; // Closed state.\n }\n }\n comm.kernel.ws.addEventListener('open', updateReadyState);\n comm.kernel.ws.addEventListener('close', updateReadyState);\n comm.kernel.ws.addEventListener('error', updateReadyState);\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 var data = msg['content']['data'];\n if (data['blob'] !== undefined) {\n data = {\n data: new Blob(msg['buffers'], { type: data['blob'] }),\n };\n }\n // Pass the mpl event to the overridden (by mpl) onmessage function.\n ws.onmessage(data);\n });\n return ws;\n};\n\nmpl.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 = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\n fig.cell_info = mpl.find_output_cell(\"
\");\n if (!fig.cell_info) {\n console.error('Failed to find cell for figure', id, fig);\n return;\n }\n fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n '';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.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 / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '';\n};\n\nmpl.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 () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('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 } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.figure.prototype._key_event_extra = function (event, _name) {\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\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.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.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib notebook\n", "shotNum = \"0003\"\n", "filePath = folderPath + \"/\" + shotNum + \"/*.h5\"\n", "\n", "dataSetDict = {\n", " dskey[groupList[i]]: read_hdf5_file(filePath, groupList[i])\n", " for i in range(len(groupList))\n", "}\n", "\n", "dataSet = dataSetDict[\"camera_1\"]\n", "\n", "print_scanAxis(dataSet)\n", "\n", "scanAxis = get_scanAxis(dataSet)\n", "\n", "dataSet = auto_rechunk(dataSet)\n", "\n", "dataSet = imageAnalyser.get_absorption_images(dataSet)\n", "\n", "imageAnalyser.center = (306, 872)\n", "imageAnalyser.span = (400, 400)\n", "imageAnalyser.fraction = (0.1, 0.1)\n", "\n", "dataSet_cropOD = imageAnalyser.crop_image(dataSet.OD)\n", "dataSet_cropOD = imageAnalyser.substract_offset(dataSet_cropOD).load()\n", "\n", "Ncount = imageAnalyser.get_Ncount(dataSet_cropOD)\n", "Ncount_mean = calculate_mean(Ncount)\n", "Ncount_std = calculate_std(Ncount)\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", "Ncount_mean.plot.errorbar(ax=ax, yerr = Ncount_std, fmt='ob')\n", "#plt.xlabel('comp Z current (A)')\n", "plt.ylabel('NCount')\n", "plt.tight_layout()\n", "plt.grid(visible=1)\n", "plt.show()\n", "\n", "# DB.create_global(shotNum, dataSet)\n", "# DB.add_data(shotNum, dataSet_cropOD, engine='xarray')" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Evaporative Cooling" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "img_dir = '//DyLabNAS/Data/'\n", "SequenceName = \"Evaporative_Cooling\" + \"/\"\n", "folderPath = img_dir + SequenceName + '2023/06/29'# get_date()\n", "\n", "# mongoDB = mongoClient[SequenceName]\n", "\n", "# DB = MongoDB(mongoClient, mongoDB, date=get_date())" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Check BEC" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The detected scaning axes and values are: \n", "\n", "{'runs': array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])}\n" ] }, { "data": { "image/png": "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zMpUXacPHgCzZontSZMAV9eqnY+IiEitmLyRWcnJ244dQGam8edZvBhITQXq1wdGjzZJaERERKrE5I3MKiQEaNRIzBKNizPuHPfvl2x102pNFx8REZHaMHkjszLFaguLFgHXrgGBgcCoUaaLjYiISI2YvJHZFV9tIT+/cs/NyQHmzBHb77/PVjciIiImb2R2XbsCtWoBt28D+/ZV7rlffw1cvw4EBwMjR5ojOiIiInVh8kZm5+wsar4Bles6zc4GPv5YbH/wgVi1gYiIyN4xeSOLMGbc21dfibVRGzQAXnjBPHERERGpDZM3soh+/QBHRyAlRSwqX5GsrKJWt8mTResdERERMXkjC6lTR4x9AwxrfVuwQIyRa9QIGDHCvLERERGpCZM3shhDu04zM4FPPxXbkycDTk7mjYuIiEhNmLyRxcjJW2IikJFR9nFffgmkpQGNGwN/+5tlYiMiIlILJm9kMY0bi386HbBli/5jMjKAzz4T2x9+yFY3IiKiRzF5I4uqqOv0X/8C7twBmjQBnn3WcnERERGpheLJW2ZmJiZMmIDevXvD29sbGo0GU6dOLXXcrl27MHr0aISGhkKr1UKj0eDChQuljvvjjz/w9ttvIzQ0FLVr14aHhwe6dOmC1atX673+zZs3MXLkSHh5ecHNzQ1hYWFISEgw8askmZy8bd5cerWFu3eBzz8X21OmiNmpREREVJLiyVtaWhoWLVqE3NxcREdHl3lcQkICtm7disDAQHTu3LnM4+Li4rBp0yYMGTIEq1atwooVK/D4448jJiYG06dPL3Fsbm4uevXqhYSEBMyfPx8///wzfH190bdvXyQmJprqJVIxXbqImadpacCePSUfmz9fJHDNmgExMYqER0REZPUUH1EUFBSEO3fuQKPR4Pbt21i8eLHe4yZPnowpU6YAAD777DPs2LFD73HPPvssxo4dC41GU7ivX79+uH37Nj7++GO8++670P61QOaSJUuQnJyM3bt3IywsDADQo0cPtG7dGhMmTMC+yq7lRBVychI131auFF2ncvmQO3eAuXPFNlvdiIiIyqZ4y5tGoymRaJXFwcGwUL28vPSer0OHDsjJyUF6enrhvnXr1iEkJKQwcQMAJycnjBgxAvv370dqaqpB16TK0Tfu7YsvxGSFFi2AoUOViYuIiEgNFG95s5Tt27fD29sbPj4+hfuS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/YT09HQ0adIEEydOxLPPPqt0aFRMREQEEhMTy3ycP2bWj8mb9bp//z6mTZuGlStX4tq1a/Dz88Nzzz2HKVOmQKvVKh0eFbN9+3bMmTMHx48fx7179xAQEICBAwdi4sSJ8PT0VDo8m8HkjYiIiEhFOOaNiIiISEWYvBERERGpCJM3IiIiIhVh8kZERESkIkzeiIiIiFSEyRsRERGRijB5IyIiIlIRJm9EREREKsLkjYjs3siRI6HRaMr9FxwcrHSYipg1axbWr19fqeecPXsWWq22cE3LRw0ePBgajQavvfaa3scTEhJQo0YNpKamVjZcIrvAFRaIyO6dPXsWt27d0vvY0qVL8c0332D8+PH44osvLByZ8mrUqIGhQ4di6dKlBj9n0KBB0Ol02LhxY6nHbt68ifr160On06F27dq4du0aXF1dSx3Xs2dPBAQEYNmyZVUJn8gmseWNiOxew4YN0alTp1L/AODbb79F9+7d8emnnyocpVjjUx+dToe8vDwLR6PfyZMnsX79eowbN07v49999x10Oh369++Pu3fvYu3atXqPGzt2LFasWIHLly+bM1wiVWLyRkRGO3XqFIYPHw5fX19otVoEBgbihRdeQG5ubuExycnJePrpp1GnTh24urqiTZs2pVpTduzYAY1Gg5UrV+Ldd99FvXr1UKNGDQwcOBA3btxAZmYmXnnlFXh5ecHLywsvvfRSqQXk5W64b775Bo0bN4ZWq0WzZs3wv//9z6jXdv36dQwZMgTe3t746aef4OTkVOX3Y+rUqdBoNKWet3TpUmg0Gly4cKFwX3BwMAYMGIC1a9eibdu2cHV1xbRp0wrfq++//x5vvfUW/P39odVq8eeffwIAtm7dil69esHd3R1ubm7o0qULEhISSlxPjiMlJQXDhw9HrVq14Ovri1GjRuHevXuFx2k0GmRnZ2PZsmWF3ccRERHlvgdfffUV6tati8jISL2P//e//4Wvry+WLVuGatWq4b///a/e4wYOHIgaNWrgP//5T7nXI7JHFX8aERHpcezYMXTt2hVeXl6YPn06Hn/8cVy7dg2//PILHj58CK1Wi9OnT6Nz587w8fHBv/71L3h6emL58uUYOXIkbty4gQkTJpQ456RJk9CjRw8sXboUFy5cwNtvv43hw4fDyckJrVu3xg8//IAjR45g0qRJqFmzJv71r3+VeP4v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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "shotNum = \"0002\"\n", "filePath = folderPath + \"/\" + shotNum + \"/*.h5\"\n", "\n", "dataSetDict = {\n", " dskey[groupList[i]]: read_hdf5_file(filePath, groupList[i])\n", " for i in [0]\n", "}\n", "\n", "dataSet = dataSetDict[\"camera_0\"]\n", "\n", "print_scanAxis(dataSet)\n", "\n", "scanAxis = get_scanAxis(dataSet)\n", "\n", "dataSet = auto_rechunk(dataSet)\n", "\n", "dataSet = imageAnalyser.get_absorption_images(dataSet)\n", "\n", "imageAnalyser.center = (880, 980)\n", "imageAnalyser.span = (80, 80)\n", "imageAnalyser.fraction = (0.1, 0.1)\n", "\n", "dataSet_cropOD = imageAnalyser.crop_image(dataSet.OD)\n", "dataSet_cropOD = imageAnalyser.substract_offset(dataSet_cropOD).load()\n", "\n", "Ncount = imageAnalyser.get_Ncount(dataSet_cropOD)\n", "Ncount_mean = Ncount#calculate_mean(Ncount)\n", "Ncount_std = None#calculate_std(Ncount)\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", "Ncount_mean.plot.errorbar(ax=ax, yerr = None, fmt='-ob')\n", "plt.xlabel('comp Z current (A)')\n", "plt.ylabel('NCount')\n", "plt.tight_layout()\n", "plt.grid(visible=1)\n", "plt.show()\n", "\n", "# DB.create_global(shotNum, dataSet)\n", "# DB.add_data(shotNum, dataSet_cropOD, engine='xarray')" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAACnoAAAEcCAYAAADqLPiTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9e7ydRXn3j187RxKSEEIACaclB0EKGE8IChjq+UA9f7WtrYdaT2jVXz1rRdRWtPI81ra2Wn0q1WopWPs8ImgrFVQUT5AKFVDQpZwkHLIlgXDYSX5/7HWt9Vkrn8+euXfWTnb2/rxfr7z2ZNZ9z8w9M9fMNXPfc10jW7du3RrGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxZtoxZ2cXwBhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcZw/KGnMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjzDTFH3oaY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGTFP8oacxxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGPMNMUfehpjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcZMU/yhpzHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY8w0xR96GmOMMcYYY4wxxhhjjDHGGGOMMcYYY4wxxkxT/KGnMcYYY4wxxhhjjDHGGGOMMcYYY4wxxhhjzDTFH3oaY4wxxhhjjDHGGGOMMcYYY4wxxhhjjDHGTFP8oaeZ9WzcuDHe+MY3xqpVq2K33XaL1atXx7/8y79U379u3bp46UtfGitXrozFixfHCSecEBdddNEUltgYM8iGDRvirW99azz5yU+OvffeO0ZGRuK9731vozQsy8bsfP7rv/4rXv7yl8eRRx4Zu+++e+y///7xrGc9K370ox9Vp2FZNmbns3bt2njGM54RBx10UCxatChWrFgRJ5xwQnzuc5+rTsOybMz04lOf+lSMjIzEkiVLqu+xHBuz87n44otjZGSE/rvsssuq0rAsGzN9+Pa3vx1Pf/rTY88994xFixbF4YcfHu9///ur7rUsG7PzeelLXyrn5dq52bJszPTgiiuuiGc/+9mxatWqWLx4cRx55JHxvve9L+65556q+y3Lxux8vv/978dTnvKUWLp0aSxZsiROOeWUuPTSS6vvtxwbY3YW/tDTzHqe+9znxtlnnx2nn356XHjhhfHoRz86fvd3fzc+//nPF++977774glPeEJcdNFF8Vd/9Vfxf//v/4199903nvrUp8Yll1yyA0pvjImIuOOOO+KTn/xk3HffffHsZz+78f2WZWOmB3/3d38X7XY73vCGN8QFF1wQf/VXfxXr1q2L448/Pv7rv/6reL9l2ZjpwejoaBx44IHxF3/xF3HBBRfEP/3TP0Wr1Yo/+IM/iA984APF+y3Lxkwvbrrppnjzm98cq1atqr7HcmzM9OIv/uIv4rvf/W7fv6OPPrp4n2XZmOnD5z//+Xj84x8fe+yxR/zTP/1TXHDBBfG2t70ttm7dWrzXsmzM9ODP/uzPtpmPv/vd78bKlStj//33j0c/+tET3m9ZNmZ68JOf/CQe+9jHRrvdjo9+9KNx/vnnx4te9KJ43/veF7/7u79bvN+ybMzO5wc/+EGcfPLJsWnTpvjsZz8bn/3sZ+Pee++NJzzhCfHd7363eL/l2BizMxnZWrMTYGYt99xzTyxevHhnF2PKuOCCC+IZz3hGfP7zn+9Tvp/85CfH//zP/8SvfvWrmDt3rrz/4x//eJx22mnxne98J0444YSIiBgbG4uHPexhsWTJkvje97435c9gTA0zXZZzKhsZGYnbb7899t577zj99NOrrXpals2uwkyX5XXr1sU+++zTF7dx48Y47LDD4uijj46vf/3rE95vWTa7CjNdlhXHH3983HzzzfGrX/1qwussy2ZXYDbJ8amnnhojIyOxYsWKOO+882Ljxo3FeyzHZldhpsvyxRdfHKecckqce+658fznP7/x/ZZls6sw02X5pptuiiOOOCL+8A//MD7+8Y83vt+ybHYVZrosMy655JJYs2ZNvPvd7y5a6LUsm12FmS7L7373u+PP//zP47rrrotDDz20G/+qV70qPvnJT8add94Ze+65p7zfsmx2BWa6HD/1qU+NtWvXxs9//vPuc27YsCEOOeSQeMhDHlK07Gk5NsbsTGzR03R573vfGyMjI3H55ZfH85///Nhzzz27CuqaNWtizZo129zz0pe+NFqtVvf/7XY7RkZG4iMf+Uj8r//1v+LBD35wLFmyJE444YRt3E78/Oc/jxe96EWxatWqWLhwYey7777xhCc8IdauXTuFT9nPl770pViyZEm84AUv6It/2cteFjfffHNxEv7Sl74URxxxRHcCj4iYN29evPjFL47vf//7cdNNN01JuY2ZiNkoy+neZrJYls10ZDbK8uBHnhERS5YsiaOOOipuuOGG4v2WZTMdmY2yrFi5cmXMmzeveJ1l2Uw3ZrMcf+5zn4tLLrmk8UcllmMzHZnNsjxZLMtmOjIbZflTn/pU3H333fG2t71tUvdbls10ZDbKMuPTn/50jIyMxMtf/vLitZZlMx2ZjbI8f/78iIjYY489+uKXL18ec+bMiQULFkx4v2XZTDdmoxxfeumlsWbNmr6PWZcuXRonn3xyfOc734lbbrllwvstx8aYnUn5LZuZdTz3uc+NF73oRfHqV7867r777kml8bd/+7dx5JFHxkc/+tGIGHdJ8fSnPz1+8YtfdBXfpz/96bF58+b48Ic/HAcddFDcfvvt8Z3vfCdGR0cnTHvr1q2xefPmqnKUXiRfddVV8dCHPnSb64499tju74997GMnvP+kk07aJj7v/5//+Z/Yf//9q8pqzLCZTbK8vViWzXRmtsvyb37zm7j88svjt3/7t4vXWpbNdGY2yvKWLVtiy5YtsX79+jj33HPja1/7WvzN3/xN8T7LspmuzDY5XrduXbzxjW+MM888Mw444ICqdBPLsZnOzDZZjog47bTT4kUvelEsXrw4TjjhhPizP/uzOPHEE4v3WZbNdGY2yfI3v/nNWLFiRVxzzTXxrGc9K6666qpYsWJFPPe5z40Pf/jDsWzZsgnvtyyb6cxskuVBfvOb38R5550XT3jCE+LBD35w8XrLspnOzCZZfslLXhIf/ehH4zWveU186EMfir333jsuueSS+MQnPhGnnXZa7L777hPeb1k205XZJMf3339/LFy4cJv4jLvyyitjv/32k/dbjo0xOxN/6Gm24SUveUmcccYZ25XG0qVL4/zzz++6PV+1alUcd9xxceGFF8aLXvSiuOOOO+Laa6+Nj370o/HiF7+4e99zn/vcYtpnn312vOxlL6sqR7pzVtxxxx1xyCGHbBO/YsWK7u+l+/PaydxvzFQym2R5e7Esm+nMbJfl0047Le6+++5417veVbzWsmymM7NRll/72tfGJz7xiYiIWLBgQXzsYx+LV73qVcX7LMtmujLb5Pi1r31tHHHEEfGa17ymKk3EcmymM7NJlvfYY494wxveEGvWrIm99torrrvuuvjLv/zLWLNmTXzlK1+JpzzlKRPeb1k205nZJMs33XRT3HPPPfGCF7wg3vGOd8RHP/rR+MEPfhCnn356XHXVVfGtb31rQk83lmUznZlNsjzIF77whdi0aVP80R/9UdX1lmUznZlNstxqteK73/1uPOc5z+lz3f4nf/In3Y/bJsKybKYrs0mOjzrqqLjssstiy5YtMWfOuBPksbGxrrdXfyNijJnO+ENPsw3Pe97ztjuNZzzjGd0JPKJ3euGXv/xlRIxPcoceemj85V/+ZWzevDlOOeWUeNjDHtadSCfi1FNPjR/84AfbXcZkok2wGlfQ23u/MVPFbJPl7cWybKYrs1mW/+zP/iz++Z//Of76r/86HvnIR1bdY1k205XZKMvvfOc74xWveEWsW7cuvvzlL8frXve6uPvuu+PNb35z8V7LspmOzCY5/uIXvxhf/vKX44orrpi0zFmOzXRlNsnywx/+8Hj4wx/e/f9JJ50Uz3nOc+KYY46Jt771rcUPPSMsy2b6MptkecuWLXHvvffG6aefHm9/+9sjYtyN5oIFC+KNb3xjXHTRRfHEJz5xwjQsy2a6MptkeZBPf/rTsddee8VznvOc6nssy2a6Mptkud1ux6mnnhr77rtvnHfeebH33nvH9773vfjABz4QGzdujE9/+tPFNCzLZjoym+T49a9/ffzRH/1RvO51r4t3vetdsWXLljjjjDO65awpj+XYGLOz8IeeZhsmMkNdy1577dX3/zRzvWnTpogYn9wuuuiieN/73hcf/vCH40//9E9jxYoV8fu///vx53/+57F06VKZ9ooVK7qmvYdRTnai4s477+zmNZX3GzOVzCZZ3l4sy2Y6M1tl+YwzzogPfOAD8ed//ufxute9ruoey7KZzsxGWT7ooIPioIMOiohxlzwREe94xzviJS95Sey9997yPsuyma7MFjneuHFjnHbaafH6178+Vq1a1XWddf/990dExOjoaMyfP39Cd3SWYzOdmS2yrFi+fHk885nPjL//+7+PTZs2xaJFi+S1lmUznZlNsrzXXnvFz372s20+zn7a054Wb3zjG+Pyyy+f8ENPy7KZzswmWUZ+/OMfxw9/+MN4wxveQF3HMizLZjozm2T57W9/e9x1112xdu3a7rr45JNPjpUrV8bLX/7y+MM//MN4/OMfL++3LJvpymyS45e//OVx2223xQc+8IH4u7/7u4iIOOGEE+LNb35zfOhDHyq6XbccG2N2JuVP0c2sg50w2G233eK+++7bJv7222+fdD4HH3xwfPrTn45f//rXce2118ab3vSm+PjHPx5vectbJrzv7LPPjvnz51f9K3HMMcfE1VdfHWNjY33xV155ZUREHH300cX789rJ3G/MVDKbZHl7sSyb6cxslOUzzjgj3vve98Z73/veeOc731l9n2XZTGdmoywPctxxx8XY2Fj8/Oc/n/A6y7KZrswWOb799tvj1ltvjbPOOiv23HPP7r8vfOELcffdd8eee+4Zv//7vz9hGpZjM52ZLbI8EenGrmRlxLJspjOzSZbTEtIgKcsli0OWZTOdmU2yjKTFv1e84hXV91iWzXRmNsny2rVr46ijjtrm8OOjH/3oiIi46qqrJrzfsmymK7NJjiMi3va2t8Xtt98eV155ZbTb7fjOd74T69evj913373oYc5ybIzZmdiip6mi1WrFueeeG/fdd1/35MUdd9wR3/nOd2LZsmXbnf5DHvKQePe73x1f/OIX4/LLL5/w2mGa5X7Oc54T//AP/xBf/OIX44UvfGE3/uyzz45Vq1bFYx7zmOL9r33ta+N73/te99qxsbH43Oc+F495zGNi1apVQymnMcNipsry9mJZNrsaM1mW3//+98d73/veePe73x2nn356o3sty2ZXYybLMuMb3/hGzJkzJw455JAJr7Msm12JmSjHD3rQg+Ib3/jGNvFnnnlmXHLJJXHhhRfGypUrJ0zDcmx2NWaiLCvWr18f559/fqxevTp22223Ca+1LJtdjZkqy8973vPik5/8ZFx44YXx8Ic/vBt/wQUXRETE8ccfP+H9lmWzqzFTZTm577774nOf+1wcd9xxjT4EsSybXY2ZKsurVq2Kq666KjZu3BhLlizpxn/3u9+NiIgDDjhgwvsty2ZXYqbKcbJw4cLuXPyrX/0qzjnnnPjjP/7jCT1fRFiOjTE7F3/oaar4gz/4g/jEJz4RL37xi+OP//iP44477ogPf/jDk57Af/zjH8frXve6eMELXhCHH354LFiwIP7rv/4rfvzjH8fb3/72Ce/da6+9tjH7PVme9rSnxZOe9KR4zWteE3fddVccdthh8YUvfCG++tWvxuc+97mYO3du99o/+qM/irPPPjuuv/76OPjggyNi3Kz33/7t38YLXvCCOPPMM2OfffaJj3/843HttdfG17/+9aGU0Zhh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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dataSet_cropOD.plot.pcolormesh(cmap='jet', vmin=0, vmax=5, col=scanAxis[0])" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "data = dataSet_cropOD#.sel(runs = 0)\n", "\n", "fitModel = DensityProfileBEC2dModel()\n", "fitAnalyser_1 = FitAnalyser(fitModel, fitDim=2)\n", "\n", "params = fitAnalyser_1.guess(data, dask=\"parallelized\", guess_kwargs=dict(pureBECThreshold=1.2))\n", "\n", "fitResult_1 = fitAnalyser_1.fit(data, params).load()\n", "\n", "# fitCurve = fitAnalyser.eval(fitResult, x=np.range(150), y=np.range(150), dask=\"parallelized\").load()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:              (runs: 10)\n",
       "Coordinates:\n",
       "  * runs                 (runs) float64 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0\n",
       "Data variables: (12/13)\n",
       "    BEC_amplitude        (runs) object 622.325100923668+/-nan ... 622.4907683...\n",
       "    thermal_amplitude    (runs) object 574.323330298593+/-nan ... 562.0410431...\n",
       "    BEC_centerx          (runs) object 40.697673212791095+/-nan ... 41.846469...\n",
       "    BEC_centery          (runs) object 38.68619529315486+/-nan ... 40.1657973...\n",
       "    thermal_centerx      (runs) object 41.672856011589964+/-nan ... 42.186994...\n",
       "    thermal_centery      (runs) object 40.50023901378942+/-nan ... 41.8611854...\n",
       "    ...                   ...\n",
       "    BEC_sigmay           (runs) object 9.925094420566738+/-nan ... 9.27924633...\n",
       "    thermal_sigmax       (runs) object 15.219058592618353+/-nan ... 14.193823...\n",
       "    thermal_sigmay       (runs) object 18.262870311142024+/-nan ... 17.032587...\n",
       "    deltax               (runs) object 18.54999801825887+/-nan ... 15.3119583...\n",
       "    thermalAspectRatio   (runs) object 1.2+/-nan 1.2+/-nan ... 1.2+/-nan\n",
       "    condensate_fraction  (runs) object 0.5200567557574306+/-nan ... 0.5255162...\n",
       "Attributes:\n",
       "    IMAGE_SUBCLASS:       IMAGE_GRAYSCALE\n",
       "    IMAGE_VERSION:        1.2\n",
       "    IMAGE_WHITE_IS_ZERO:  0\n",
       "    x_start:              840\n",
       "    x_end:                920\n",
       "    y_end:                1020\n",
       "    y_start:              940\n",
       "    x_center:             880\n",
       "    y_center:             980\n",
       "    x_span:               80\n",
       "    y_span:               80
" ], "text/plain": [ "\n", "Dimensions: (runs: 10)\n", "Coordinates:\n", " * runs (runs) float64 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0\n", "Data variables: (12/13)\n", " BEC_amplitude (runs) object 622.325100923668+/-nan ... 622.4907683...\n", " thermal_amplitude (runs) object 574.323330298593+/-nan ... 562.0410431...\n", " BEC_centerx (runs) object 40.697673212791095+/-nan ... 41.846469...\n", " BEC_centery (runs) object 38.68619529315486+/-nan ... 40.1657973...\n", " thermal_centerx (runs) object 41.672856011589964+/-nan ... 42.186994...\n", " thermal_centery (runs) object 40.50023901378942+/-nan ... 41.8611854...\n", " ... ...\n", " BEC_sigmay (runs) object 9.925094420566738+/-nan ... 9.27924633...\n", " thermal_sigmax (runs) object 15.219058592618353+/-nan ... 14.193823...\n", " thermal_sigmay (runs) object 18.262870311142024+/-nan ... 17.032587...\n", " deltax (runs) object 18.54999801825887+/-nan ... 15.3119583...\n", " thermalAspectRatio (runs) object 1.2+/-nan 1.2+/-nan ... 1.2+/-nan\n", " condensate_fraction (runs) object 0.5200567557574306+/-nan ... 0.5255162...\n", "Attributes:\n", " IMAGE_SUBCLASS: IMAGE_GRAYSCALE\n", " IMAGE_VERSION: 1.2\n", " IMAGE_WHITE_IS_ZERO: 0\n", " x_start: 840\n", " x_end: 920\n", " y_end: 1020\n", " y_start: 940\n", " x_center: 880\n", " y_center: 980\n", " x_span: 80\n", " y_span: 80" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fitAnalyser_1.get_fit_full_result(fitResult_1)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Calibration of the magnetic fields" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Z Offset field = 0.489A" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The detected scaning axes and values are: \n", "\n", "{'carrier_freq': array([9.525, 9.527, 9.529, 9.531, 9.533, 9.535, 9.537, 9.539, 9.541,\n", " 9.543, 9.545, 9.547, 9.549, 9.551, 9.553, 9.555, 9.557, 9.559])}\n" ] }, { "data": { "application/javascript": "/* Put everything inside the global mpl namespace */\n/* global mpl */\nwindow.mpl = {};\n\nmpl.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(\n '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 }\n};\n\nmpl.figure = function (figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = this.ws.binaryType !== undefined;\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\n this.imageObj = new Image();\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\n this.image_mode = 'full';\n\n this.root = document.createElement('div');\n this.root.setAttribute('style', 'display: inline-block');\n this._root_extra_style(this.root);\n\n parent_element.appendChild(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\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 (fig.ratio !== 1) {\n fig.send_message('set_device_pixel_ratio', {\n device_pixel_ratio: fig.ratio,\n });\n }\n fig.send_message('refresh', {});\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\n this.imageObj.onunload = function () {\n fig.ws.close();\n };\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n};\n\nmpl.figure.prototype._init_header = function () {\n var titlebar = document.createElement('div');\n titlebar.classList =\n 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n var titletext = document.createElement('div');\n titletext.classList = 'ui-dialog-title';\n titletext.setAttribute(\n 'style',\n 'width: 100%; text-align: center; padding: 3px;'\n );\n titlebar.appendChild(titletext);\n this.root.appendChild(titlebar);\n this.header = titletext;\n};\n\nmpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n\nmpl.figure.prototype._init_canvas = function () {\n var fig = this;\n\n var canvas_div = (this.canvas_div = document.createElement('div'));\n canvas_div.setAttribute(\n 'style',\n 'border: 1px solid #ddd;' +\n 'box-sizing: content-box;' +\n 'clear: both;' +\n 'min-height: 1px;' +\n 'min-width: 1px;' +\n 'outline: 0;' +\n 'overflow: hidden;' +\n 'position: relative;' +\n 'resize: both;'\n );\n\n function on_keyboard_event_closure(name) {\n return function (event) {\n return fig.key_event(event, name);\n };\n }\n\n canvas_div.addEventListener(\n 'keydown',\n on_keyboard_event_closure('key_press')\n );\n canvas_div.addEventListener(\n 'keyup',\n on_keyboard_event_closure('key_release')\n );\n\n this._canvas_extra_style(canvas_div);\n this.root.appendChild(canvas_div);\n\n var canvas = (this.canvas = document.createElement('canvas'));\n canvas.classList.add('mpl-canvas');\n canvas.setAttribute('style', 'box-sizing: content-box;');\n\n this.context = canvas.getContext('2d');\n\n var backingStore =\n this.context.backingStorePixelRatio ||\n this.context.webkitBackingStorePixelRatio ||\n this.context.mozBackingStorePixelRatio ||\n this.context.msBackingStorePixelRatio ||\n this.context.oBackingStorePixelRatio ||\n this.context.backingStorePixelRatio ||\n 1;\n\n this.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n 'canvas'\n ));\n rubberband_canvas.setAttribute(\n 'style',\n 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n );\n\n // Apply a ponyfill if ResizeObserver is not implemented by browser.\n if (this.ResizeObserver === undefined) {\n if (window.ResizeObserver !== undefined) {\n this.ResizeObserver = window.ResizeObserver;\n } else {\n var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n this.ResizeObserver = obs.ResizeObserver;\n }\n }\n\n this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n var nentries = entries.length;\n for (var i = 0; i < nentries; i++) {\n var entry = entries[i];\n var width, height;\n if (entry.contentBoxSize) {\n if (entry.contentBoxSize instanceof Array) {\n // Chrome 84 implements new version of spec.\n width = entry.contentBoxSize[0].inlineSize;\n height = entry.contentBoxSize[0].blockSize;\n } else {\n // Firefox implements old version of spec.\n width = entry.contentBoxSize.inlineSize;\n height = entry.contentBoxSize.blockSize;\n }\n } else {\n // Chrome <84 implements even older version of spec.\n width = entry.contentRect.width;\n height = entry.contentRect.height;\n }\n\n // Keep the size of the canvas and rubber band canvas in sync with\n // the canvas container.\n if (entry.devicePixelContentBoxSize) {\n // Chrome 84 implements new version of spec.\n canvas.setAttribute(\n 'width',\n entry.devicePixelContentBoxSize[0].inlineSize\n );\n canvas.setAttribute(\n 'height',\n entry.devicePixelContentBoxSize[0].blockSize\n );\n } else {\n canvas.setAttribute('width', width * fig.ratio);\n canvas.setAttribute('height', height * fig.ratio);\n }\n canvas.setAttribute(\n 'style',\n 'width: ' + width + 'px; height: ' + height + 'px;'\n );\n\n rubberband_canvas.setAttribute('width', width);\n rubberband_canvas.setAttribute('height', height);\n\n // And update the size in Python. We ignore the initial 0/0 size\n // that occurs as the element is placed into the DOM, which should\n // otherwise not happen due to the minimum size styling.\n if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n fig.request_resize(width, height);\n }\n }\n });\n this.resizeObserverInstance.observe(canvas_div);\n\n function on_mouse_event_closure(name) {\n return function (event) {\n return fig.mouse_event(event, name);\n };\n }\n\n rubberband_canvas.addEventListener(\n 'mousedown',\n on_mouse_event_closure('button_press')\n );\n rubberband_canvas.addEventListener(\n 'mouseup',\n on_mouse_event_closure('button_release')\n );\n rubberband_canvas.addEventListener(\n 'dblclick',\n on_mouse_event_closure('dblclick')\n );\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband_canvas.addEventListener(\n 'mousemove',\n on_mouse_event_closure('motion_notify')\n );\n\n rubberband_canvas.addEventListener(\n 'mouseenter',\n on_mouse_event_closure('figure_enter')\n );\n rubberband_canvas.addEventListener(\n 'mouseleave',\n on_mouse_event_closure('figure_leave')\n );\n\n canvas_div.addEventListener('wheel', function (event) {\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n on_mouse_event_closure('scroll')(event);\n });\n\n canvas_div.appendChild(canvas);\n canvas_div.appendChild(rubberband_canvas);\n\n this.rubberband_context = rubberband_canvas.getContext('2d');\n this.rubberband_context.strokeStyle = '#000000';\n\n this._resize_canvas = function (width, height, forward) {\n if (forward) {\n canvas_div.style.width = width + 'px';\n canvas_div.style.height = height + 'px';\n }\n };\n\n // Disable right mouse context menu.\n this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n event.preventDefault();\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\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'mpl-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'mpl-button-group';\n continue;\n }\n\n var button = (fig.buttons[name] = document.createElement('button'));\n button.classList = 'mpl-widget';\n button.setAttribute('role', 'button');\n button.setAttribute('aria-disabled', 'false');\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n\n var icon_img = document.createElement('img');\n icon_img.src = '_images/' + image + '.png';\n icon_img.srcset = '_images/' + image + '_large.png 2x';\n icon_img.alt = tooltip;\n button.appendChild(icon_img);\n\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n var fmt_picker = document.createElement('select');\n fmt_picker.classList = 'mpl-widget';\n toolbar.appendChild(fmt_picker);\n this.format_dropdown = fmt_picker;\n\n for (var ind in mpl.extensions) {\n var fmt = mpl.extensions[ind];\n var option = document.createElement('option');\n option.selected = fmt === mpl.default_extension;\n option.innerHTML = fmt;\n fmt_picker.appendChild(option);\n }\n\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n};\n\nmpl.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};\n\nmpl.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\nmpl.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\nmpl.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\nmpl.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], msg['forward']);\n fig.send_message('refresh', {});\n }\n};\n\nmpl.figure.prototype.handle_rubberband = function (fig, msg) {\n var x0 = msg['x0'] / fig.ratio;\n var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n var x1 = msg['x1'] / fig.ratio;\n var y1 = (fig.canvas.height - msg['y1']) / fig.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,\n 0,\n fig.canvas.width / fig.ratio,\n fig.canvas.height / fig.ratio\n );\n\n fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n};\n\nmpl.figure.prototype.handle_figure_label = function (fig, msg) {\n // Updates the figure title.\n fig.header.textContent = msg['label'];\n};\n\nmpl.figure.prototype.handle_cursor = function (fig, msg) {\n fig.rubberband_canvas.style.cursor = msg['cursor'];\n};\n\nmpl.figure.prototype.handle_message = function (fig, msg) {\n fig.message.textContent = msg['message'];\n};\n\nmpl.figure.prototype.handle_draw = function (fig, _msg) {\n // Request the server to send over a new figure.\n fig.send_draw_message();\n};\n\nmpl.figure.prototype.handle_image_mode = function (fig, msg) {\n fig.image_mode = msg['mode'];\n};\n\nmpl.figure.prototype.handle_history_buttons = function (fig, msg) {\n for (var key in msg) {\n if (!(key in fig.buttons)) {\n continue;\n }\n fig.buttons[key].disabled = !msg[key];\n fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n }\n};\n\nmpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n if (msg['mode'] === 'PAN') {\n fig.buttons['Pan'].classList.add('active');\n fig.buttons['Zoom'].classList.remove('active');\n } else if (msg['mode'] === 'ZOOM') {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.add('active');\n } else {\n fig.buttons['Pan'].classList.remove('active');\n fig.buttons['Zoom'].classList.remove('active');\n }\n};\n\nmpl.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.\nmpl.figure.prototype._make_on_message_function = function (fig) {\n return function socket_on_message(evt) {\n if (evt.data instanceof Blob) {\n var img = evt.data;\n if (img.type !== 'image/png') {\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 img.type = 'image/png';\n }\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\n fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n img\n );\n fig.updated_canvas_event();\n fig.waiting = false;\n return;\n } else if (\n typeof evt.data === 'string' &&\n evt.data.slice(0, 21) === 'data:image/png;base64'\n ) {\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(\n \"No handler for the '\" + msg_type + \"' message type: \",\n msg\n );\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(\n \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n e,\n e.stack,\n msg\n );\n }\n }\n };\n};\n\n// from https://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\nmpl.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 }\n if (e.target) {\n targ = e.target;\n } else if (e.srcElement) {\n targ = e.srcElement;\n }\n if (targ.nodeType === 3) {\n // defeat Safari bug\n targ = targ.parentNode;\n }\n\n // pageX,Y are the mouse positions relative to the document\n var boundingRect = targ.getBoundingClientRect();\n var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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 * https://stackoverflow.com/a/24161582/3208463\n */\nfunction simpleKeys(original) {\n return Object.keys(original).reduce(function (obj, key) {\n if (typeof original[key] !== 'object') {\n obj[key] = original[key];\n }\n return obj;\n }, {});\n}\n\nmpl.figure.prototype.mouse_event = function (event, name) {\n var canvas_pos = mpl.findpos(event);\n\n if (name === 'button_press') {\n this.canvas.focus();\n this.canvas_div.focus();\n }\n\n var x = canvas_pos.x * this.ratio;\n var y = canvas_pos.y * this.ratio;\n\n this.send_message(name, {\n x: x,\n y: y,\n button: event.button,\n step: event.step,\n guiEvent: simpleKeys(event),\n });\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\nmpl.figure.prototype._key_event_extra = function (_event, _name) {\n // Handle any extra behaviour associated with a key event\n};\n\nmpl.figure.prototype.key_event = function (event, name) {\n // Prevent repeat events\n if (name === 'key_press') {\n if (event.key === this._key) {\n return;\n } else {\n this._key = event.key;\n }\n }\n if (name === 'key_release') {\n this._key = null;\n }\n\n var value = '';\n if (event.ctrlKey && event.key !== 'Control') {\n value += 'ctrl+';\n }\n else if (event.altKey && event.key !== 'Alt') {\n value += 'alt+';\n }\n else if (event.shiftKey && event.key !== 'Shift') {\n value += 'shift+';\n }\n\n value += 'k' + event.key;\n\n this._key_event_extra(event, name);\n\n this.send_message(name, { key: value, guiEvent: simpleKeys(event) });\n return false;\n};\n\nmpl.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\nmpl.figure.prototype.toolbar_button_onmouseover = function (tooltip) {\n this.message.textContent = tooltip;\n};\n\n///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n// prettier-ignore\nvar _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\nmpl.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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n\nmpl.extensions = [\"eps\", \"jpeg\", \"pgf\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n\nmpl.default_extension = \"png\";/* global mpl */\n\nvar 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.binaryType = comm.kernel.ws.binaryType;\n ws.readyState = comm.kernel.ws.readyState;\n function updateReadyState(_event) {\n if (comm.kernel.ws) {\n ws.readyState = comm.kernel.ws.readyState;\n } else {\n ws.readyState = 3; // Closed state.\n }\n }\n comm.kernel.ws.addEventListener('open', updateReadyState);\n comm.kernel.ws.addEventListener('close', updateReadyState);\n comm.kernel.ws.addEventListener('error', updateReadyState);\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 var data = msg['content']['data'];\n if (data['blob'] !== undefined) {\n data = {\n data: new Blob(msg['buffers'], { type: data['blob'] }),\n };\n }\n // Pass the mpl event to the overridden (by mpl) onmessage function.\n ws.onmessage(data);\n });\n return ws;\n};\n\nmpl.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 = document.getElementById(id);\n var ws_proxy = comm_websocket_adapter(comm);\n\n function ondownload(figure, _format) {\n window.open(figure.canvas.toDataURL());\n }\n\n var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\n fig.cell_info = mpl.find_output_cell(\"
\");\n if (!fig.cell_info) {\n console.error('Failed to find cell for figure', id, fig);\n return;\n }\n fig.cell_info[0].output_area.element.on(\n 'cleared',\n { fig: fig },\n fig._remove_fig_handler\n );\n};\n\nmpl.figure.prototype.handle_close = function (fig, msg) {\n var width = fig.canvas.width / fig.ratio;\n fig.cell_info[0].output_area.element.off(\n 'cleared',\n fig._remove_fig_handler\n );\n fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n '';\n fig.close_ws(fig, msg);\n};\n\nmpl.figure.prototype.close_ws = function (fig, msg) {\n fig.send_message('closing', msg);\n // fig.ws.close()\n};\n\nmpl.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 / this.ratio;\n var dataURL = this.canvas.toDataURL();\n this.cell_info[1]['text/html'] =\n '';\n};\n\nmpl.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 () {\n fig.push_to_output();\n }, 1000);\n};\n\nmpl.figure.prototype._init_toolbar = function () {\n var fig = this;\n\n var toolbar = document.createElement('div');\n toolbar.classList = 'btn-toolbar';\n this.root.appendChild(toolbar);\n\n function on_click_closure(name) {\n return function (_event) {\n return fig.toolbar_button_onclick(name);\n };\n }\n\n function on_mouseover_closure(tooltip) {\n return function (event) {\n if (!event.currentTarget.disabled) {\n return fig.toolbar_button_onmouseover(tooltip);\n }\n };\n }\n\n fig.buttons = {};\n var buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n var button;\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 /* Instead of a spacer, we start a new button group. */\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n buttonGroup = document.createElement('div');\n buttonGroup.classList = 'btn-group';\n continue;\n }\n\n button = fig.buttons[name] = document.createElement('button');\n button.classList = 'btn btn-default';\n button.href = '#';\n button.title = name;\n button.innerHTML = '';\n button.addEventListener('click', on_click_closure(method_name));\n button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n buttonGroup.appendChild(button);\n }\n\n if (buttonGroup.hasChildNodes()) {\n toolbar.appendChild(buttonGroup);\n }\n\n // Add the status bar.\n var status_bar = document.createElement('span');\n status_bar.classList = 'mpl-message pull-right';\n toolbar.appendChild(status_bar);\n this.message = status_bar;\n\n // Add the close button to the window.\n var buttongrp = document.createElement('div');\n buttongrp.classList = 'btn-group inline pull-right';\n button = document.createElement('button');\n button.classList = 'btn btn-mini btn-primary';\n button.href = '#';\n button.title = 'Stop Interaction';\n button.innerHTML = '';\n button.addEventListener('click', function (_evt) {\n fig.handle_close(fig, {});\n });\n button.addEventListener(\n 'mouseover',\n on_mouseover_closure('Stop Interaction')\n );\n buttongrp.appendChild(button);\n var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n titlebar.insertBefore(buttongrp, titlebar.firstChild);\n};\n\nmpl.figure.prototype._remove_fig_handler = function (event) {\n var fig = event.data.fig;\n if (event.target !== this) {\n // Ignore bubbled events from children.\n return;\n }\n fig.close_ws(fig, {});\n};\n\nmpl.figure.prototype._root_extra_style = function (el) {\n el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n};\n\nmpl.figure.prototype._canvas_extra_style = function (el) {\n // this is important to make the div 'focusable\n el.setAttribute('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 } else {\n // location in version 2\n IPython.keyboard_manager.register_events(el);\n }\n};\n\nmpl.figure.prototype._key_event_extra = function (event, _name) {\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\nmpl.figure.prototype.handle_save = function (fig, _msg) {\n fig.ondownload(fig, null);\n};\n\nmpl.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.\nif (IPython.notebook.kernel !== null) {\n IPython.notebook.kernel.comm_manager.register_target(\n 'matplotlib',\n mpl.mpl_figure_comm\n );\n}\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib notebook\n", "shotNum = \"0008\"\n", "filePath = folderPath + \"/\" + shotNum + \"/*.h5\"\n", "\n", "dataSetDict = {\n", " dskey[groupList[i]]: read_hdf5_file(filePath, groupList[i], excludeAxis = ['sweep_start_freq', 'sweep_stop_freq'])\n", " for i in [0]\n", "}\n", "\n", "dataSet = dataSetDict[\"camera_0\"]\n", "\n", "print_scanAxis(dataSet)\n", "\n", "scanAxis = get_scanAxis(dataSet)\n", "\n", "dataSet = auto_rechunk(dataSet)\n", "\n", "dataSet = imageAnalyser.get_absorption_images(dataSet)\n", "\n", "imageAnalyser.center = (135, 990)\n", "imageAnalyser.span = (250, 250)\n", "imageAnalyser.fraction = (0.1, 0.1)\n", "\n", "dataSet_cropOD = imageAnalyser.crop_image(dataSet.OD)\n", "dataSet_cropOD = imageAnalyser.substract_offset(dataSet_cropOD).load()\n", "\n", "Ncount = imageAnalyser.get_Ncount(dataSet_cropOD)\n", "Ncount_mean = calculate_mean(Ncount)\n", "Ncount_std = calculate_std(Ncount)\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", "Ncount_mean.plot.errorbar(ax=ax, yerr = Ncount_std, fmt='ob')\n", "\n", "plt.ylabel('NCount')\n", "plt.tight_layout()\n", "#plt.ylim([0, 3500])\n", "plt.grid(visible=1)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Ncount_mean_1 = Ncount_mean\n", "Ncount_std_1 = Ncount_std\n", "\n", "fitAnalyser_1 = FitAnalyser(\"Gaussian With Offset\", fitDim=1)\n", "# params = fitAnalyser.guess(Ncount_mean_1, x=scanAxis[0], guess_kwargs=dict(negative=True), dask=\"parallelized\")\n", "params = fitAnalyser_1.fitModel.make_params()\n", "params.add(name=\"amplitude\", value= -3000, max=np.inf, min=-np.inf, vary=True)\n", "params.add(name=\"center\", value= 2.785, max=np.inf, min=-np.inf, vary=True)\n", "params.add(name=\"sigma\", value= 0.1, max=np.inf, min= 0, vary=True)\n", "params.add(name=\"offset\", value= 3000, max=np.inf, min=-np.inf, vary=True)\n", "\n", "fitResult_1 = fitAnalyser_1.fit(Ncount_mean_1, params, x=scanAxis[0]).load()\n", "freqdata = np.linspace(2.76, 2.81, 500)\n", "fitCurve_1 = fitAnalyser_1.eval(fitResult_1, x=freqdata, dask=\"parallelized\").load()\n", "fitCurve_1 = fitCurve_1.assign_coords({'x':np.array(freqdata)})\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", "\n", "Ncount_mean.plot.errorbar(ax=ax, yerr = Ncount_std, fmt='ob')\n", "fitCurve_1.plot.errorbar(ax=ax, fmt='--g')\n", "plt.xlabel('Center Frequency (MHz)')\n", "plt.ylabel('NCount')\n", "#plt.ylim([0, 3500])\n", "plt.tight_layout()\n", "plt.grid(visible=1)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f_1 = fitAnalyser_1.get_fit_value(fitResult_1).center\n", "df_1 = fitAnalyser_1.get_fit_std(fitResult_1).center\n", "\n", "print('f = %.5f \\u00B1 %.5f kHz'% tuple([np.abs(f_1)* 1e3,df_1* 1e3]))\n", "\n", "s_1 = fitAnalyser_1.get_fit_value(fitResult_1).sigma\n", "ds_1 = fitAnalyser_1.get_fit_std(fitResult_1).sigma\n", "\n", "fwhm_1 = 2.3548200*s_1 * 1e3\n", "dfwhm_1 = 2.3548200*ds_1 * 1e3\n", "\n", "print('fwhm = %.5f \\u00B1 %.5f kHz'% tuple([np.abs(fwhm_1),dfwhm_1]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%matplotlib notebook\n", "shotNum = \"0016\"\n", "filePath = folderPath + \"/\" + shotNum + \"/*.h5\"\n", "\n", "dataSetDict = {\n", " dskey[groupList[i]]: read_hdf5_file(filePath, groupList[i], excludeAxis = ['sweep_start_freq', 'sweep_stop_freq'])\n", " for i in [0]\n", "}\n", "\n", "dataSet = dataSetDict[\"camera_0\"]\n", "\n", "print_scanAxis(dataSet)\n", "\n", "scanAxis = get_scanAxis(dataSet)\n", "\n", "dataSet = auto_rechunk(dataSet)\n", "\n", "dataSet = imageAnalyser.get_absorption_images(dataSet)\n", "\n", "imageAnalyser.center = (135, 990)\n", "imageAnalyser.span = (250, 250)\n", "imageAnalyser.fraction = (0.1, 0.1)\n", "\n", "dataSet_cropOD = imageAnalyser.crop_image(dataSet.OD)\n", "dataSet_cropOD = imageAnalyser.substract_offset(dataSet_cropOD).load()\n", "\n", "Ncount = imageAnalyser.get_Ncount(dataSet_cropOD)\n", "Ncount_mean = calculate_mean(Ncount)\n", "Ncount_std = calculate_std(Ncount)\n", "\n", "fig = plt.figure()\n", "ax = fig.gca()\n", "Ncount_mean.plot.errorbar(ax=ax, yerr = Ncount_std, fmt='ob')\n", "\n", "plt.ylabel('NCount')\n", "plt.tight_layout()\n", "#plt.ylim([0, 3500])\n", "plt.grid(visible=1)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[9.525, 9.527, 9.529, 9.531, 9.533, 9.535, 9.537, 9.539, 9.541, 9.543, 9.545, 9.547, 9.549, 9.551, 9.553, 9.555, 9.557, 9.559]\n", "18\n" ] }, { "data": { "text/plain": [ "9.542" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "l = list(np.arange(9.525, 9.56, 0.002))\n", "# l = np.logspace(np.log10(250e-6), np.log10(500e-3), num=15)\n", "\n", "l = [round(item, 7) for item in l]\n", "#random.shuffle(l)\n", "\n", "print(l)\n", "print(len(l))\n", "np.mean(l)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "[10.25, 10.255, 10.26, 10.265, 10.27, 10.275, 10.28, 10.285, 10.29, 10.295, 10.3, 10.305, 10.31, 10.315, 10.32, 10.325, 10.33, 10.335, 10.34, 10.345, 10.35, 10.355]" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pixel = 5.86e-6\n", "M = 0.6827\n", "F = (1/(0.3725*8.4743e-14)) * (pixel / M)**2\n", "NCount = 85000\n", "AtomNumber = NCount * F / 1e8\n", "print(AtomNumber)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "muB = 9.274e-24\n", "hbar = 6.626e-34 / (2 * np.pi)\n", "gJ = 1.24\n", "Delta = 2 * np.pi * 100 * 1e3\n", "\n", "Bz = (Delta*hbar) / (muB*gJ)\n", "print(Bz * 1e4)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## ODT 1 Calibration" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "v_high = 2.7\n", "\"\"\"High Power\"\"\"\n", "P_arm1_high = 5.776 * v_high - 0.683\n", "\n", "v_mid = 0.2076\n", "\"\"\"Intermediate Power\"\"\"\n", "P_arm1_mid = 5.815 * v_mid - 0.03651\n", "\n", "v_low = 0.0587\n", "\"\"\"Low Power\"\"\"\n", "P_arm1_low = 5271 * v_low - 27.5\n", "\n", "print(round(P_arm1_high, 3))\n", "print(round(P_arm1_mid, 3))\n", "print(round(P_arm1_low, 3))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## ODT 2 Power Calibration" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "v = 0.7607\n", "P_arm2 = 2.302 * v - 0.06452\n", "print(round(P_arm2, 3))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.12" }, "vscode": { "interpreter": { "hash": "c05913ad4f24fdc6b2418069394dc5835b1981849b107c9ba6df693aafd66650" } } }, "nbformat": 4, "nbformat_minor": 2 }