analyseScript/Joschka/fit_test_20230703.ipynb

1372 lines
7.1 MiB
Plaintext
Raw Permalink Normal View History

{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"# Import supporting package"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"ExecuteTime": {
"end_time": "2023-07-20T08:09:07.499617300Z",
"start_time": "2023-07-20T08:08:57.502922200Z"
}
},
"outputs": [],
"source": [
"import xarray as xr\n",
"import pandas as pd\n",
"import numpy as np\n",
"import copy\n",
"\n",
"import glob\n",
"\n",
"import xrft\n",
"import finufft\n",
"\n",
"from uncertainties import ufloat\n",
"from uncertainties import unumpy as unp\n",
"from uncertainties import umath\n",
"\n",
"from datetime import datetime\n",
"\n",
"import matplotlib.pyplot as plt\n",
"plt.rcParams['font.size'] = 18\n",
"\n",
"from DataContainer.ReadData import read_hdf5_file, read_hdf5_global, read_hdf5_run_time, read_csv_file\n",
"from Analyser.ImagingAnalyser import ImageAnalyser\n",
"from Analyser.FitAnalyser import FitAnalyser\n",
"from Analyser.FitAnalyser import ThomasFermi2dModel, DensityProfileBEC2dModel, Polylog22dModel\n",
"from Analyser.FFTAnalyser import fft, ifft, fft_nutou\n",
"from ToolFunction.ToolFunction import *\n",
"\n",
"import time\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()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Start a client for parallel computing"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"ExecuteTime": {
"end_time": "2023-07-12T15:49:42.774756600Z",
"start_time": "2023-07-12T15:49:38.730743200Z"
}
},
"outputs": [
{
"data": {
"text/plain": "<Client: 'tcp://127.0.0.1:61035' processes=6 threads=24, memory=44.70 GiB>",
"text/html": "<div>\n <div style=\"width: 24px; height: 24px; background-color: #e1e1e1; border: 3px solid #9D9D9D; border-radius: 5px; position: absolute;\"> </div>\n <div style=\"margin-left: 48px;\">\n <h3 style=\"margin-bottom: 0px;\">Client</h3>\n <p style=\"color: #9D9D9D; margin-bottom: 0px;\">Client-b571f1d7-20cb-11ee-af24-6c02e09174aa</p>\n <table style=\"width: 100%; text-align: left;\">\n\n <tr>\n \n <td style=\"text-align: left;\"><strong>Connection method:</strong> Cluster object</td>\n <td style=\"text-align: left;\"><strong>Cluster type:</strong> distributed.LocalCluster</td>\n \n </tr>\n\n \n <tr>\n <td style=\"text-align: left;\">\n <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:8787/status\" target=\"_blank\">http://127.0.0.1:8787/status</a>\n </td>\n <td style=\"text-align: left;\"></td>\n </tr>\n \n\n </table>\n\n \n\n \n <details>\n <summary style=\"margin-bottom: 20px;\"><h3 style=\"display: inline;\">Cluster Info</h3></summary>\n <div class=\"jp-RenderedHTMLCommon jp-RenderedHTML jp-mod-trusted jp-OutputArea-output\">\n <div style=\"width: 24px; height: 24px; background-color: #e1e1e1; border: 3px solid #9D9D9D; border-radius: 5px; position: absolute;\">\n </div>\n <div style=\"margin-left: 48px;\">\n <h3 style=\"margin-bottom: 0px; margin-top: 0px;\">LocalCluster</h3>\n <p style=\"color: #9D9D9D; margin-bottom: 0px;\">61858421</p>\n <table style=\"width: 100%; text-align: left;\">\n <tr>\n <td style=\"text-align: left;\">\n <strong>Dashboard:</strong> <a href=\"http://127.0.0.1:8787/status\" target=\"_blank\">http://127.0.0.1:8787/status</a>\n </td>\n <td style=\"text-align: left;\">\n <strong>Workers:</strong> 6\n </td>\n </tr>\n <tr>\n <td style=\"text-align: left;\">\n <strong>Total threads:</strong> 24\n </td>\n <td style=\"text-align: left;\">\n <strong>Total memory:</strong> 44.70 GiB\n </td>\n </tr>\n \n <tr>\n <td style=\"text-align: left;\"><strong>Status:</strong> running</td>\n <td style=\"text-align: left;\"><strong>Using processes:</strong> True</td>\n</tr>\n\n \n </table>\n\n <details>\n <summary style=\"margin-bottom: 20px;\">\n <h3 style=\"display: inline;\">Scheduler Info</h3>\n </summary>\n\n <div style=\"\">\n <div>\n <div style=\"width: 24px; height: 24px; background-color: #FFF7E5; border: 3px solid #FF6132; border-radius: 5px; position: absolute;\"> </div>\n <div style=\"margin-left: 48px;\">\n <h3 style=\"margin-bottom: 0px;\">Scheduler</h3>\n <p style=\"color: #9D9D9D; margin-bottom: 0px;\">Scheduler-99ce72aa-461c-4086-91bc-c24d0f63bda5</p>\n <table style=\"width: 100%; text-align: left;\">\n <tr>\n <td style=\"text-align: left;\">\n <strong>Comm:</strong> tcp://127.0.0.1:61035\n </td>\n <td style=\"text-align: left;\">\n <strong>Workers:</strong> 6\n </td>\n </tr>\n <tr>\n <td style=\"text-align: left;\">\n <strong>Dashboard:</strong> <a href=\"http://127.0.0.1:8787/status\" target=\"_blank\">http://127.0.0.1:8787/status</a>\n </td>\n <td style=\"text-align: left;\">\n <strong>Total threads:</strong> 24\n </td>\n </tr>\n <tr>\n <td style=\"text-align: left;\">\n <
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from dask.distributed import Client\n",
"client = Client(n_workers=6, threads_per_worker=4, processes=True, memory_limit='8GB')\n",
"client"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {
"pycharm": {
"name": "#%% md\n"
}
},
"source": [
"## Set global path for experiment"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"ExecuteTime": {
"end_time": "2023-07-12T15:49:42.784724600Z",
"start_time": "2023-07-12T15:49:42.661921700Z"
}
},
"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": 4,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"ExecuteTime": {
"end_time": "2023-07-12T15:49:42.784724600Z",
"start_time": "2023-07-12T15:49:42.661921700Z"
}
},
"outputs": [],
"source": [
"img_dir = '//DyLabNAS/Data/'\n",
"SequenceName = \"Evaporative_Cooling\" + \"/\"\n",
"folderPath = img_dir + SequenceName + '2023/04/24'# get_date()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"ExecuteTime": {
"end_time": "2023-07-12T15:49:46.006543100Z",
"start_time": "2023-07-12T15:49:42.667881900Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"//DyLabNAS/Data/Evaporative_Cooling/2023/04/24/0009/2023-04-24_0009_Evaporative_Cooling_*0.h5\n"
]
},
{
"data": {
"text/plain": "<xarray.Dataset>\nDimensions: (odt_hold_time_4: 3, runs: 3, y: 1200, x: 1920)\nCoordinates:\n * odt_hold_time_4 (odt_hold_time_4) float64 0.001 0.03042 0.9252\n * runs (runs) float64 0.0 1.0 2.0\nDimensions without coordinates: y, x\nData variables:\n atoms (odt_hold_time_4, runs, y, x) uint16 dask.array<chunksize=(3, 3, 1200, 1920), meta=np.ndarray>\n background (odt_hold_time_4, runs, y, x) uint16 dask.array<chunksize=(3, 3, 1200, 1920), meta=np.ndarray>\n dark (odt_hold_time_4, runs, y, x) uint16 dask.array<chunksize=(3, 3, 1200, 1920), meta=np.ndarray>\n shotNum (odt_hold_time_4, runs) <U2 dask.array<chunksize=(3, 3), meta=np.ndarray>\n OD (odt_hold_time_4, runs, y, x) float64 dask.array<chunksize=(3, 3, 1200, 1920), meta=np.ndarray>\nAttributes: (12/96)\n TOF_free: 0.02\n abs_img_freq: 110.858\n absorption_imaging_flag: True\n backup_data: True\n blink_off_time: nan\n blink_on_time: nan\n ... ...\n z_offset: 0.189\n z_offset_img: 0.189\n odt_hold_time_4: [0.001 0.03041682 0.92518287 0.00...\n runs: [0. 0. 0. 1. 1. 1. 2. 2. 2.]\n scanAxis: ['odt_hold_time_4' 'runs']\n scanAxisLength: [9. 9.]",
"text/html": "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n<defs>\n<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n</symbol>\n<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n</symbol>\n</defs>\n</svg>\n<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n *\n */\n\n:root {\n --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n --xr-border-color: var(--jp-border-color2, #e0e0e0);\n --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n --xr-background-color: var(--jp-layout-color0, white);\n --xr-background-color-row-even: var(--jp-layout-color1, white);\n --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n}\n\nhtml[theme=dark],\nbody[data-theme=dark],\nbody.vscode-dark {\n --xr-font-color0: rgba(255, 255, 255, 1);\n --xr-font-color2: rgba(255, 255, 255, 0.54);\n --xr-font-color3: rgba(255, 255, 255, 0.38);\n --xr-border-color: #1F1F1F;\n --xr-disabled-color: #515151;\n --xr-background-color: #111111;\n --xr-background-color-row-even: #111111;\n --xr-background-color-row-odd: #313131;\n}\n\n.xr-wrap {\n display: block !important;\n min-width: 300px;\n max-width: 700px;\n}\n\n.xr-text-repr-fallback {\n /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n display: none;\n}\n\n.xr-header {\n padding-top: 6px;\n padding-bottom: 6px;\n margin-bottom: 4px;\n border-bottom: solid 1px var(--xr-border-color);\n}\n\n.xr-header > div,\n.xr-header > ul {\n display: inline;\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.xr-obj-type,\n.xr-array-name {\n margin-left: 2px;\n margin-right: 10px;\n}\n\n.xr-obj-type {\n color: var(--xr-font-color2);\n}\n\n.xr-sections {\n padding-left: 0 !important;\n display: grid;\n grid-template-columns: 150px auto auto 1fr 20px 20px;\n}\n\n.xr-section-item {\n display: contents;\n}\n\n.xr-section-item input {\n display: none;\n}\n\n.xr-section-item input + label {\n color: var(--xr-disabled-color);\n}\n\n.xr-section-item input:enabled + label {\n cursor: pointer;\n color: var(--xr-font-color2);\n}\n\n.xr-section-item input:enabled + label:hover {\n color: var(--xr-font-color0);\n}\n\n.xr-section-summary {\n grid-column: 1;\n color: var(--xr-font-color2);\n font-weight: 500;\n}\n\n.xr-section-summary > span {\n display: inline-block;\n padding-left: 0.5em;\n}\n\n.xr-section-summary-in:disabled + label {\n color: var(--xr-font-color2);\n}\n\n.xr-section-summary-in + label:before {\n display: inline-block;\n content: '►';\n font-size: 11px;\n width: 15px;\n text-align: center;\n}\n\n.xr-section-summary-in:disabled + label:before {\n color: var(--xr-disabled-color);\n}\n\n.xr-section-summary-in:checked + label:before {\n content: '▼';\n}\n\n.xr-section
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"shotNum = \"0009\"\n",
"filePath = folderPath + \"/\" + shotNum + \"/*.h5\"\n",
"filePath = folderPath + \"/\" + shotNum + \"/2023-04-24_0009_Evaporative_Cooling_*0.h5\"\n",
"print(filePath)\n",
"\n",
"# # load the data from HDF5 files\n",
"# dataSetDict = {\n",
"# dskey[groupList[i]]: read_hdf5_file(filePath, groupList[i])\n",
"# for i in [0] # range(len(groupList))\n",
"# }\n",
"\n",
"# selecte the data for centain camera\n",
"dataSet = read_hdf5_file(filePath, groupList[0])\n",
"# flip the x and y axis\n",
"dataSet = swap_xy(dataSet)\n",
"\n",
"# get the scan axis name of the shot\n",
"scanAxis = get_scanAxis(dataSet)\n",
"\n",
"# rechunck the data for parallel computing\n",
"dataSet = auto_rechunk(dataSet)\n",
"\n",
"# calculate the absorption imaging\n",
"dataSet = imageAnalyser.get_absorption_images(dataSet)\n",
"\n",
"dataSet\n",
"\n",
"OD = dataSet[\"OD\"]\n",
"\n",
"OD_np = OD.to_numpy()\n",
"\n",
"dataSet"
]
},
{
"cell_type": "code",
"execution_count": 6,
"outputs": [],
"source": [
"imageAnalyser.center = (960, 890)\n",
"imageAnalyser.span = (150, 200)\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",
"cropOD = dataSet_cropOD.to_numpy()\n",
"#dataSet_cropOD.plot.pcolormesh(cmap='jet', vmin=0, col=scanAxis[0], row=scanAxis[1])\n",
"plt.show()"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
},
"ExecuteTime": {
"end_time": "2023-07-12T15:49:47.914340900Z",
"start_time": "2023-07-12T15:49:46.022500Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Testing with numpy"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 8,
"outputs": [],
"source": [
"%matplotlib notebook"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
},
"ExecuteTime": {
"end_time": "2023-07-12T14:28:37.464829600Z",
"start_time": "2023-07-12T14:28:37.390481400Z"
}
}
},
{
"cell_type": "code",
"execution_count": 22,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"test\n"
]
}
],
"source": [
"print('test')"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T14:35:36.514647Z",
"start_time": "2023-07-12T14:35:36.420092400Z"
}
}
},
{
"cell_type": "code",
"execution_count": 18,
"outputs": [],
"source": [
"plt.close()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T14:30:59.536618Z",
"start_time": "2023-07-12T14:30:59.454704200Z"
}
}
},
{
"cell_type": "code",
"execution_count": 25,
"outputs": [
{
"data": {
"text/plain": "<IPython.core.display.Javascript object>",
"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('tabindex', '0');\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 'z-index: 2;'\n );\n\n function on_keyboard_event_cl
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<IPython.core.display.HTML object>",
"text/html": "<div id='06998f80-6813-4066-b698-bc7dc1aeead4'></div>"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"fig, ax = plt.subplots(3,3)\n",
"for i in range(0,3):\n",
" for j in range(0,3):\n",
" ax[i][j].pcolormesh(cropOD[i][j], cmap='jet', vmin=0, vmax=2.5)\n",
"fig.show()\n"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
},
"ExecuteTime": {
"end_time": "2023-07-12T14:36:42.351445200Z",
"start_time": "2023-07-12T14:36:42.056343600Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Test Laserbeamsize"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 20,
"outputs": [],
"source": [
"import imageio\n",
"import laserbeamsize as lbs"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-11T08:44:19.795028500Z",
"start_time": "2023-07-11T08:44:19.753630Z"
}
}
},
{
"cell_type": "code",
"execution_count": 11,
"outputs": [
{
"ename": "type",
"evalue": "name 'lbs' is not defined",
"output_type": "error",
"traceback": [
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[1;31mNameError\u001B[0m Traceback (most recent call last)",
"Cell \u001B[1;32mIn[11], line 2\u001B[0m\n\u001B[0;32m 1\u001B[0m beam \u001B[38;5;241m=\u001B[39m cropOD[\u001B[38;5;241m0\u001B[39m][\u001B[38;5;241m0\u001B[39m]\n\u001B[1;32m----> 2\u001B[0m x, y, dx, dy, phi \u001B[38;5;241m=\u001B[39m \u001B[43mlbs\u001B[49m\u001B[38;5;241m.\u001B[39mbeam_size(beam)\n\u001B[0;32m 3\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mThe center of the beam ellipse is at (\u001B[39m\u001B[38;5;132;01m%.0f\u001B[39;00m\u001B[38;5;124m, \u001B[39m\u001B[38;5;132;01m%.0f\u001B[39;00m\u001B[38;5;124m)\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;241m%\u001B[39m (x,y))\n\u001B[0;32m 4\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mThe ellipse diameter (closest to horizontal) is \u001B[39m\u001B[38;5;132;01m%.0f\u001B[39;00m\u001B[38;5;124m pixels\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;241m%\u001B[39m dx)\n",
"\u001B[1;31mNameError\u001B[0m: name 'lbs' is not defined"
]
}
],
"source": [
"beam = cropOD[0][0]\n",
"x, y, dx, dy, phi = lbs.beam_size(beam)\n",
"print(\"The center of the beam ellipse is at (%.0f, %.0f)\" % (x,y))\n",
"print(\"The ellipse diameter (closest to horizontal) is %.0f pixels\" % dx)\n",
"print(\"The ellipse diameter (closest to vertical) is %.0f pixels\" % dy)\n",
"print(\"The ellipse is rotated %.0f° ccw from horizontal\" % (phi*180/3.1416))"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T14:29:51.584819600Z",
"start_time": "2023-07-12T14:29:50.755356900Z"
}
}
},
{
"cell_type": "code",
"execution_count": 25,
"outputs": [
{
"data": {
"text/plain": "<Figure size 1200x1200 with 6 Axes>",
"image/png": "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GhrHJt577z0AQKdOnZCbm3uUrdHQ0NDQ+Cnw7LPPAiAV4vnnn39YdR08eNCizLv88sujll2yZAlef/11AMBNN92E+++/35FoZGRnZx+WbS3Biy++iL179wIApk6dGkE0AhTb+rHHHsPxxx8PAHjllVewZcsWx/r69esXlWhkTJgwAb/+9a/N9++//37Ush6PB+eeey4AYP78+airq4vdIY3/SGiyUUND44jj888/x9KlSwGQ5P71119Hp06dmj3v5z//OX71q18BoC95J3fk0047zZL04eDBg3j55Zdx+umnIzMzEx06dEDv3r3N8q3JRr17927cfvvtGDRoEDp16oQuXbrg5JNPxmOPPWbGOunduzfi4uIsbahoLiOYkz1VVVWYM2cOjj/+eCQlJSEpKQl+vx8PPvhgRIwVOxoaGvDuu++aTw9TU1PRsWNHJCcnY/Dgwbjmmmuwbt26mHVoaPwvwinj6ubNm3HdddehX79+SExMRI8ePXDuuefiiy++iDj//fffxznnnIPs7GzEx8ejV69euPbaa82HLNFw4MABLF26FLfccgvGjh2LjIwMuFwuJCUloX///rjsssvw6aeftrgfdXV1uO+++3DiiSciKSkJycnJGDp0KO69915UV1cDiLxuxsL27dtx11134eSTT0Z6ejpcLhe6deuG008/Hc8++yzC4XCLbXNC3759ERcXhyFDhkQtM2XKFNPeiRMnRi03YsQIxMXFoXv37jHbZLJx0qRJUX8s1dfX44knnsD48ePRrVs3uN1uZGRkYOzYsXjwwQdRW1vbgt61HpWVlfjDH/6A448/Hh6PBx6PB8OHD8dDDz3UbNI0wzDw2Wef4a677sKECRPQo0cPuN1udOrUCT6fDxdeeKHpPt5S7NixA3PmzMHYsWPRrVs3c20OGTIEV1xxBRYvXtyiZAJOqK+vx9lnn23O7YwZMxzXUzgcxpNPPolRo0bB6/Wic+fOOO6443Dbbbdh+/btAKwJHrZu3RpRh1M20W+//RazZ89G37590alTp6jf08uWLcMll1yCnJwcJCYmIikpCQMHDsTVV1+N1atXx+xja7KYNle2re8XGJ9//jkuvPBCZGZmIj4+HtnZ2ZgyZQqWLFnSovN/KhiGgUWLFuGSSy5Bv3794PF44HK50L17d0ycOBEPPPCA41yrONzrlz2r+r59+/Doo49ixIgR8Hq96NSpEwYPHow77rgDgUAgZh2MTz75xDHZSLSssXv37sWTTz6J008/3dzTXbp0wUknnYQ//OEPqKysjNmH1t4ntwarV6/GH//4R5xxxhno2bMn4uPjkZCQYK6h+fPn4+DBg47n8npXSbvLL788YlwO1bbq6mp88MEHAOg7JJYKsSVYsmQJdu7cCQAYOHAgTjnllKhlH3nkEQBEcv7pT386rHbbCvn5+ebrSy65JGq5du3ambHym5qa8M9//vOw2lXdoZu7H+J2GxoasGDBgsNq1+k74fXXX8fEiRPRvXt3xMfHo3fv3pg9ezYKCwtj1hXr2lxZWYnu3bsjLi4OHTt2xFdffRW1nnA4jOHDh5t1zZ8/P2q5efPm4bzzzjPvKVNSUnDCCSfglltuafa611IsXrwYv/jFL8zvtvj4eGRmZmLo0KGYPn06nnnmGfO+scUwNDQ0NI4wpk+fbgA
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 1200x1200 with 6 Axes>",
"image/png": "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
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 1200x1200 with 6 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAABRsAAAQOCAYAAABb1+8sAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOxde1hU1fp+AZ0BlIERwQuggqKG99HKW6XipbLMErNjpmV2ut9O2q/L6ahdrE5anU73vJRZlmlpnUwtvFQmmaKm4gUFlcELFwcGBQaF/ftjrW+vtTczAyhq2Xqfh4eZ2Wuv/a1vrb1nz7vf7/sCNE3ToKCgoKCgoKCgoKCgoKCgoKCgoKBwlgi80AYoKCgoKCgoKCgoKCgoKCgoKCgoXBxQZKOCgoKCgoKCgoKCgoKCgoKCgoJCvUCRjQoKCgoKCgoKCgoKCgoKCgoKCgr1AkU2KigoKCgoKCgoKCgoKCgoKCgoKNQLFNmooKCgoKCgoKCgoKCgoKCgoKCgUC9QZKOCgoKCgoKCgoKCgoKCgoKCgoJCvUCRjQoKCgoKCgoKCgoKCgoKCgoKCgr1AkU2KigoKCgoKCgoKCgoKCgoKCgoKNQLFNmooKCgoKCgoKCgoKCgoKCgoKCgUC9QZKOCgsJfGgcOHEBAQAACAgJw++23n/PjTZs2TT/e2rVrz/nx6gu33367bveBAwcutDkKCgoKFyXoOjtgwIALbUq94mId118Ra9eu1edz2rRpF9ocBYU6Y/PmzQgKCkJAQAA2bdp0oc1RkFBZWYkOHTogICAATz755IU2xys+/PBD/Rr44YcfXmhzasSF/O2pyEYFBYU/BLZv346pU6eiX79+iI2NRXBwMOx2Ozp06ICxY8fi448/RllZ2YU2U0FB4SIB3XgFBARcaFMU/gBYuXKlvh7Uj08FBYVzjWnTpmHatGl/CrLifGLr1q26b7Zu3XpOjvHAAw+gqqoK119/PXr16lVtu/yAvS5/vsj3uvZ3vnH06FFMnToVvXv3RmRkJKxWK2JjYzFs2DDMnTsXp0+frrEPTdOwfv16TJ8+HVdffTXi4uIQHByM0NBQtG7dGjfeeCM+/vhjeDwev/0EBQXhn//8JwDg1Vdfxb59++pljAoXBg0utAEKCgp/bRw5cgSPPfYYPvvsM2iaZtjm8XhQVFSEvXv3YuHChXjqqafw0ksv4dZbb71A1iooKCgoXIxYtmwZACAmJgY9e/a8wNYoKChc7Jg+fToA4KqrrjovkTV/FmzdulX3TZs2bdC9e/d67f/LL79EWloaANS7MjchIaFe+zsf+Pjjj3HPPfegtLTU8Hlubi5yc3OxatUqvPnmm1i8eLHP8e3atQuDBw/G4cOHvW4/dOgQDh06hKVLl+L555/Hp59+6vd7duzYsXj++eexd+9ePPPMM1i4cOGZD1DhgkKRjQoKChcMO3fuxDXXXIOcnBwAgMViwdChQzFo0CC0aNECpaWl2LNnD7788kvs27cPTqcT48aNw9atW/Hvf/+7Xp7+tWnTphrJeS5BT2sVFBQUFP44+OabbwAA1113nVK7KigoKFykmDp1KgDg6quvhsPh8NrmoYcewsiRI2vsKzMzE48//jgAICwsDCkpKTXu89577yE6Orr2Bp9DfPzxxxg/frz+fujQobjhhhsQFRWFnJwcLFy4EJs2bcKWLVswdOhQbNiwAVFRUdX6KSws1InGRo0aYfDgwejbty9iY2MBAL///js+/PBDHDt2DHv37kVycjLWr1+PTp06ebUrKCgIjz/+OCZNmoRFixbhmWeeQVJS0jnwwJnh9ttvVw8IaglFNiooKFwQHDt2DIMHD8bRo0cBAL1798aHH36IDh06VGv74osv4s0338TkyZNx6tQpzJw5EzabDc8888z5NltBQUFB4SJDeno6nE4nAGDEiBEX2BoFBQUFhXOBlStXYseOHQBgINnMcDgcPolIGU888YT+esyYMQgNDa1xn6FDh6JNmzY1G3uOkZ+fj/vuu09//8477+Cee+4xtHn00Ufxj3/8A6+//jr279+P//u//8PcuXO99temTRs88cQTGDt2LMLCwgzbxo4diyeeeAIjR47EunXrUFxcjPvuuw/r1q3zad/o0aPxwAMPoLy8HK+//jref//9sxitwoWCytmooKBwQTBhwgSdaOzTpw9++OEHr0QjAAQGBuKhhx7CZ599pitOpk+fjl9++eW82augoKCgcHHi66+/BsAUGcnJyRfYGgUFBQWFc4F33nkHAFMh3nDDDWfVV2VlJebPn6+/v+OOO86qv/ONuXPn4sSJEwCAUaNGVSMaAZbbetasWejSpQsA4KOPPkJmZma1dt27d8fevXtx9913VyMaCREREVi0aJFOyP7444/Izs72aZ/NZsP1118PAFiwYAFKSkrqNkCFPwQU2aigoHDe8fPPP2PlypUAgNDQUHzyySdo1KhRjfvddNNN+Pvf/w6Afcl7C0ceMGCAIcFyZWUlPvzwQwwZMgQxMTFo0KCB4YliXapRHzt2DI8//jiSkpLQqFEjNGnSBJdddhlmzZql5zpp06YNAgICfD61rKkimDd7CgoKMG3aNHTp0gVhYWEICwuDw+HAiy++WC3HihllZWX46quvcP/99+Pyyy9HZGQkGjZsiPDwcHTq1An33nsvtm3b5rcPBYW/IrxVXN27dy/uv/9+JCYmIjQ0FC1btsT111+P9evXV9v/22+/xXXXXacnSW/dujXuu+8+/SGLL5w+fRorV67EY489hv79+yM6OhoWiwVhYWFo3749br/9dvz444+1HkdJSQmeffZZdO/eHWFhYQgPD0e3bt0wffp0FBYWAqh+3fSHQ4cO4emnn8Zll12GqKgoWCwWNG/eHEOGDME777yDioqKWtvmDe3atUNAQAA6d+7ss83IkSN1ewcPHuyzXa9evRAQEIAWLVr4PSaRjUOHDoXVavXaprS0FK+99hoGDhyI5s2bw2q1Ijo6Gv3798eLL76I4uLiWoyu7sjPz8e//vUvdOnSBTabDTabDT179sRLL71UY9E0TdPw008/4emnn8agQYPQsmVLWK1WNGrUCPHx8bjlllv08PHa4vDhw5g2bRr69++P5s2b62uzc+fOmDhxIpYtW1arYgLeUFpaiuHDh+tzO2bMGK/rqaKiAq+//jp69+4Nu92Oxo0b45JLLsGUKVNw6NAhAMaCDAcOHKjWh7dqops2bcKkSZPQrl07NGrUyOf39KpVq3DbbbchISEBoaGhCAsLQ8eOHXHPPfdg8+bNfsdYlyqmNbWt7/sFws8//4xbbrkFMTExCA4ORlxcHEaOHIkVK1bUav9zBU3TsHTpUtx2221ITEyEzWaDxWJBixYtMHjwYMyYMcPrXMs42+uXuar6yZMnMXPmTPTq1Qt2ux2NGjVCp06d8OSTT8Llcvntg7Bu3TqvRUJ8VY09ceIEXn/9dQwZMkQ/p5s0aYJLL70U//rXv5Cfn+93DHW9T64LNm/ejOeeew5XX301WrVqheDgYISEhOhraMGCBaisrPS6L613mbS74447qvnlTG0rLCzE8uXLAbDvkNqoEP1hxYoVOHLkCACgY8eO6Nu371n1d76xevVq/fVtt93ms11gYKCeK7+qqgqfffZZtTaNGzdGw4YNazxmdHQ0rrzySv399u3b/ban45aVlWHx4sU19u8P3r4TPvnkEwwePBgtWrRAcHAw2rRpg0mTJiEjI8NvX/6uzfn5+WjRogUCAgLQsGFD/Prrrz77qaioQM+ePfW+FixY4LPdnDlzMGLECP2eMiIiAl27dsVjjz1W43Wvtli2bBluvvlm/bstODgYMTEx6NatG0aPHo23335bv2+sNTQFBQWF84zRo0drADQA2n333VenfXNzc7UGDRro++/cudOw/aqrrtK3FRYWav3799ff01/r1q319tnZ2frnEyZM8Hnc1atXa3a7vVpf9NelSxft0KFDWuvWrasdQ8bUqVP1fdasWVNtu9me3377TYuJifF53O7du2uFhYU+7W7Tpo3PfeW/J5980p/btQkTJuhts7Oz/bZ
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 1200x1200 with 6 Axes>",
"image/png": "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
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 1200x1200 with 6 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAABRsAAAQOCAYAAABb1+8sAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOxdeXhT1fZdBZqkhaQNHRjaAgnzDAEVBGUog4oiCogDgiL8nGfxPUUfOOsTh+dzlsEBxQEE9KmAFlBGEQoIlNEWaMvQKWkKbdPS3t8f5+x7Tm6TtIUCimd9X78mueeeu88+597crLv23mGapmlQUFBQUFBQUFBQUFBQUFBQUFBQUDhN1DvXBigoKCgoKCgoKCgoKCgoKCgoKCicH1Bko4KCgoKCgoKCgoKCgoKCgoKCgkKdQJGNCgoKCgoKCgoKCgoKCgoKCgoKCnUCRTYqKCgoKCgoKCgoKCgoKCgoKCgo1AkU2aigoKCgoKCgoKCgoKCgoKCgoKBQJ1Bko4KCgoKCgoKCgoKCgoKCgoKCgkKdQJGNCgoKCgoKCgoKCgoKCgoKCgoKCnUCRTYqKCgoKCgoKCgoKCgoKCgoKCgo1AkU2aigoKCgoKCgoKCgoKCgoKCgoKBQJ1Bko4KCwt8aBw4cQFhYGMLCwnDLLbec8ePNmDFDP96qVavO+PHqCrfccotu94EDB861OQoKCgrnJeg6O3DgwHNtSp3ifB3X3xGrVq3S53PGjBnn2hwFhVpj8+bNqF+/PsLCwrBp06ZzbY6ChIqKCrRv3x5hYWF47LHHzrU5AfHhhx/q18APP/zwXJtTLc7lb09FNiooKPwpsH37dkyfPh39+vVDYmIiLBYL7HY72rdvjxtvvBGffPIJSkpKzrWZCgoK5wnoxissLOxcm6LwJ8CyZcv09aB+fCooKJxpzJgxAzNmzPhLkBVnE1u3btV9s3Xr1jNyjHvuuQeVlZW46qqr0Lt37yrb5QfstfkLRr7Xtr+zjaNHj2L69Ono06cPYmJiYDabkZiYiOHDh2POnDk4efJktX0cOHAA8+bNw/33349LL70Ubdu2hd1uR3h4OGJiYnDhhRfioYcewu+//x6yn/r16+OJJ54AALz66qvYv39/nYxR4dygwbk2QEFB4e+NI0eO4OGHH8bnn38OTdP8tvl8Png8Huzduxfz58/H448/jhdffBE33XTTObJWQUFBQeF8xJIlSwAACQkJ6NWr1zm2RkFB4XzHU089BQAYMGDAWYms+atg69atum9atWqFHj161Gn/X3/9NTZs2AAAda7MdTqdddrf2cAnn3yCO+64A8XFxX6fZ2dnIzs7G8uXL8ebb76JBQsWhBzfP//5T3zxxRcBtxUUFKCgoAC//fYbXn/9ddxxxx1444030KBBYCrqxhtvxLPPPou9e/fiySefxPz58099gArnFIpsVFBQOGfYuXMnLr/8cmRmZgIATCYThg0bhsGDB6NZs2YoLi7Gnj178PXXX2P//v3IysrC+PHjsXXrVvz73/+uk6d/rVq1qkJynknQ01oFBQUFhT8Pvv32WwDAlVdeqdSuCgoKCucppk+fDgC47LLL4HK5Ara57777MGrUqGr72rdvHx599FEAgNVqxZgxY6rd57333kN8fHzNDT6D+OSTTzBhwgT9/bBhw3D11VcjLi4OmZmZmD9/PjZt2oQtW7Zg2LBhWL9+PeLi4oL2FxkZid69e6NXr15o27YtGjdujLCwMGRnZ+Onn37CDz/8AE3T8M477+D48eP4+OOPA/ZTv359PProo5g8eTK+/PJLPPnkk+jUqVOdj/9Uccstt6gHBDWEIhsVFBTOCY4dO4YhQ4bg6NGjAIA+ffrgww8/RPv27au0feGFF/Dmm2/ikUceQXl5OWbOnAmbzYYnn3zybJutoKCgoHCeITU1FVlZWQCAkSNHnmNrFBQUFBTOBJYtW4YdO3YAgB/JZoTL5QpKRMr45z//qb8eN24cIiMjq91n2LBhaNWqVfXGnmHk5ubirrvu0t+/8847uOOOO/zaPPjgg3jooYfw+uuv448//sA//vEPzJkzJ2B/zzzzDD766COYzeaA2x988EGsWLECV1xxBXw+Hz755BPcfffduOiiiwK2Hzt2LO655x6Ulpbi9ddfx/vvv3+KI1U4l1A5GxUUFM4JJk6cqBONffv2xU8//RSQaASAevXq4b777sPnn3+uK06eeuoprFu37qzZq6CgoKBwfuKbb74BADRs2BDJycnn2BoFBQUFhTOBd955BwBTIV599dWn1VdFRYWfMu/WW289rf7ONubMmYPjx48DAEaPHl2FaARYbutXXnkFXbt2BQB89NFH2LdvX8D+2rZtG5RoJAwePBi33367/v67774L2tZms+Gqq64CAMybNw9FRUWhB6Twp4QiGxUUFM461qxZg2XLlgFgkvtPP/0UDRs2rHa/a6+9Fv/3f/8HgH3JBwpHHjhwoF+C5YqKCnz44YcYOnQoEhIS0KBBA78nirWpRn3s2DE8+uij6NSpExo2bIjGjRvjwgsvxCuvvKLnOmnVqhXCwsKCPrWsriJYIHvy8vIwY8YMdO3aFVarFVarFS6XCy+88EKVHCtGlJSUYNGiRfrTw5iYGISHhyMqKgqdO3fGnXfeiW3btoXsQ0Hh74hAFVf37t2Lu+++G23btkVkZCSaN2+Oq666CmvXrq2y/3fffYcrr7wSSUlJsFgsaNmyJe666y79IUswnDx5EsuWLcPDDz+M/v37Iz4+HiaTCVarFe3atcMtt9yCX375pcbjKCoqwtNPP40ePXrAarUiKioK3bt3x1NPPYX8/HwAVa+boXDo0CFMmzYNF154IeLi4mAymdC0aVMMHToU77zzDsrKympsWyC0adMGYWFh6NKlS9A2o0aN0u0dMmRI0Ha9e/dGWFgYmjVrFvKYRDYOGzYs6I+l4uJivPbaaxg0aBCaNm0Ks9mM+Ph49O/fHy+88AIKCwtrMLraIzc3F//617/QtWtX2Gw22Gw29OrVCy+++GK1RdM0TcPq1asxbdo0DB48GM2bN4fZbEbDhg3hcDhw/fXX6+HjNcXhw4cxY8YM9O/fH02bNtXXZpcuXTBp0iQsWbKkRsUEAqG4uBgjRozQ53bcuHEB11NZWRlef/119OnTB3a7HY0aNULHjh0xdepUHDp0CIB/QYYDBw5U6SNQNdFNmzZh8uTJaNOmDRo2bBj0e3r58uW4+eab4XQ6ERkZCavVig4dOuCOO+7A5s2bQ46xNlVMq2tb1/cLhDVr1uD6669HQkICLBYLkpKSMGrUKCxdurRG+58paJqGxYsX4+abb0bbtm1hs9lgMpnQrFkzDBkyBM8//3zAuZZxutcvY1X1EydOYObMmejduzfsdjsaNmyIzp0747HHHoPb7Q7ZB+Hnn38OWCQkWNXY48eP4/XXX8fQoUP1c7px48a44IIL8K9//Qu5ubkhx1Db++TaYPPmzXjmmWdw2WWXoUWLFrBYLIiIiNDX0Lx581BRURFwX1rvMml36623VvHLqdqWn5+P77//HgD7DqmJCjEUli5diiNHjgAAOnTogIsvvvi0+jvbWLFihf765ptvDtquXr16eq78yspKfP7556d1XDkcurr7ITpuSUkJFixYcFrHDfSd8Omnn2LIkCFo1qwZLBYLWrVqhcmTJyMtLS1kX6Guzbm5uWjWrBnCwsIQHh6OX3/9NWg/ZWVl6NWrl97XvHnzgrabPXs2Ro4cqd9TRkdHo1u3bnj44Yerve7VFEuWLMF1112nf7dZLBYkJCSge/fuGDt2LN5++239vrHG0BQUFBTOMsaOHasB0ABod911V632zc7O1ho0aKDvv3PnTr/tAwYM0Lfl5+dr/fv319/TX8uWLfX2GRkZ+ucTJ04MetwVK1Zodru9Sl/017VrV+3QoUNay5YtqxxDxvTp0/V9Vq5cWWW70Z7ffvtNS0hICHrcHj16aPn5+UHtbtWqVdB95b/HHnsslNu1iRMn6m0zMjJCtlVQ+CtAXv+BsHLlSn379OnTtQULFmiRkZEBz5+wsDBtzpw5mqZ
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 1200x1200 with 6 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAABRsAAAQOCAYAAABb1+8sAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydeXgUVdbGf2FJJ4F00oSELQESCGoA0YAKigqERVxRYXBBccFZ3B11PkdnFHVGnRn3cRlH3BA3FkUdEVAWFQEVAghEIZggCVsgCelAVpL6/rh1qm5XujsJRHCcep+nn+6uunWXc29VV7/1nnMiDMMwcOHChQsXLly4cOHChQsXLly4cOHChYvDRKuj3QEXLly4cOHChQsXLly4cOHChQsXLlz8MuCSjS5cuHDhwoULFy5cuHDhwoULFy5cuGgRuGSjCxcuXLhw4cKFCxcuXLhw4cKFCxcuWgQu2ejChQsXLly4cOHChQsXLly4cOHChYsWgUs2unDhwoULFy5cuHDhwoULFy5cuHDhokXgko0uXLhw4cKFCxcuXLhw4cKFCxcuXLhoEbhkowsXLly4cOHChQsXLly4cOHChQsXLloELtnowoULFy5cuHDhwoULFy5cuHDhwoWLFoFLNrpw4cKFCxcuXLhw4cKFCxcuXLhw4aJF4JKNLly4+J/G1q1biYiIICIigquuuuonb2/q1KlWe0uXLv3J22spXHXVVVa/t27derS748KFCxe/SMh1dtiwYUe7Ky2KX+q4/hexdOlSaz6nTp16tLvjwkWzsXr1alq3bk1ERASrVq062t1x4cDIkSOJiIjg0ksvPdpdCYr/tmvgq6++avX31VdfPaJtu2SjCxcufhZYv3499913H6eddhrJyclERUXh8/k45phjuOyyy3j99deprKw82t104cLFLwRy4xUREXG0u+LiZ4AFCxZY68H98+nChYufGlOnTmXq1KlH/M//zx1r1661bLN27dqfpI0bb7yR+vp6zjvvPAYNGtRgv/6AvTmvYMSTTvQ053UkH8yUlZXxj3/8g2HDhpGUlERkZCRdunThzDPP5Omnn6aiouKQ6nz22WcZPXo03bt3JyoqioSEBDIyMrj00kt58cUXKSkpCXrsfffdB8Dbb7/N559/flhjc3F00eZod8CFCxf/29i5cye33347b7/9NoZhBOyrrq5m3759bN68mbfeeou7776bRx55hMsvv/wo9daFCxcuXPwS8f777wPQrVs3Bg4ceJR748KFi1867r//fgDOPPPMI+JZ89+CtWvXWrbp2bMnJ5xwQovW/+6777Jy5UqAFlelpaWl/SzrCocFCxZw+eWXU1xcHLB9165d7Nq1i88//5ynnnqKmTNnNvm38Z133uGWW25h9+7dAdurq6spKSnhu+++4+233yYxMZFx48Y1OP70009nxIgRLF68mLvuuovly5cf8vhcHF24ZKMLFy6OGjZu3MjYsWMpKCgAIDIyktGjRzNixAi6dOlCRUUFmzZt4t1332XLli0UFhYyadIk1q5dy9///vcWUST17NmzAcn5U0Ke1rpw4cKFi58PPvzwQwDOPfdcV+3qwoULF79QiGrurLPOIjMzM2iZm2++OSgJ5kRubi5/+MMfAIiNjWX8+PENyowYMYL33nuv0brq6+uZNGmS5cV19dVXN3rM4WLJkiWcd9551NbWAjB48GAmTpxI165dKSoq4r333mPx4sXk5eVx1llnsXz5ctLT08PW+c9//pObb74ZUP/rxo0bx9ChQ+nUqRMHDx5k69atfPnllyxatChsPXfffTeLFy9mxYoVzJ8/n7POOqtlBt0CGDZs2BH97/jfDJdsdOHCxVHB7t27GTlyJLt27QLUD9yrr77KMccc06Dsww8/zDPPPMMdd9xBbW0tjz76KF6vlz//+c9HutsuXLhw4eIXhuzsbAoLCwE4//zzj3JvXLhw4cLFT4EFCxawYcMGAK688sqQ5TIzM0MSkTruuusu6/PEiROJiYlpUKZ79+5079690brmz59vEY3p6emcfvrpjR5zOKiuruaqq66yiMa77rqLhx9+OKDMjTfeyJNPPsltt93G3r17+e1vfxuWJPz0008tonHQoEHMmjWLnj17Bi27f/9+q+1gGD58OMnJyRQWFvL444//rMhGF02HG7PRhQsXRwWTJ0+2iMYhQ4bw6aefBiUaAVq1asXNN9/M22+/bSlO7r//fldW78KFCxcuDhsffPABAO3atSMrK+so98aFCxcuXPwUeP755wGlQrzgggsOq666ujqmT59ufT9cJeLLL79sfT4SbvVz585l27ZtgCIGH3rooaDlbr31Vs4++2wAFi9eHJJsrK6uZsqUKYAiWBctWhSSaARo3749Pp8v5P5WrVpZCWI++eQTcnNzGx2Ti58fXLLRhQsXRxzLli1jwYIFAMTExPDGG2/Qrl27Ro+76KKL+PWvfw2oH/lg7sjDhg0LSPpQV1fHq6++yqhRo+jWrRtt2rQJ+PFrTjbq3bt384c//IGMjAzatWtHhw4dOPnkk3nssces4Mk9e/YkIiIi5A9sY9mog/Vn7969TJ06lf79+xMbG0tsbCyZmZk8/PDDjQZtrqys5L333uOGG27glFNOISEhgbZt2xIXF0ffvn353e9+x7p168LW4cLF/yKCZRvcvHkzN9xwA+np6cTExNC1a1fOO+88vvzyywbHf/TRR5x77rmkpKQQFRVFjx49uP76662HLKFw8OBBFixYwO23387QoUOtYO2xsbH06dOHq666qlkB08vLy3nggQc44YQTiI2NJS4ujgEDBnD//fdbMZqc181w2LZtG/fccw8nn3wyiYmJREZG0rlzZ0aNGsXzzz9PTU1Nk/sWDL179yYiIoJ+/fqFLDNu3DirvyNHjgxZbtCgQURERNClS5ewbQrZOHr0aDweT9AyFRUVPPHEEwwfPpzOnTvj8XhISkpi6NChPPzww5SVlTVhdM3Hnj17uPfee+nfvz9erxev18vAgQN55JFHGk2aZhgGX3zxBffccw8jRoyga9eueDwe2rVrR2pqKpdcconlPt5U7Nixg6lTpzJ06FA6d+5src1+/fpxzTXX8P7773Pw4MFDGmtFRQXnnHOONbcTJ04Mup5qamp48sknGTx4MD6fj/bt23Pcccdx5513Wn+e9QQPW7dubVBHsOycq1atYsqUKfTu3Zt27dqF/J1euHAhV1xxBWlpacTExBAbG8uxxx7Lb3/7W1avXh12jM3JCtpY2Za+XxAsW7aMSy65hG7duhEVFUVKSgrjxo1j/vz5TTr+p4JhGMydO5crrriC9PR0vF6vlchi5MiRPPTQQ0HnWsfhXr+cyTsOHDjAo48+yqBBg/D5fLRr146+ffvyxz/+kdLS0rB1CD777LOgCUKCrT1QirAnn3ySUaNGWed0hw4dOOmkk7j33nvZs2dP2DE09z65OVi9ejUPPvggZ511lpUUJDo62lpDM2bMoK6uLuixst510u7qq69uYJdD7VtxcTHz5s0D1G9IMBViczB//nx27twJwLHHHsupp556yHWVlJRYv0OtW7dm8uTJh9W3pmDx4sXW50mTJoX9/ddVoG+++WbQMjNnzuTHH38E4MEHH8Tr9R52H/UY/TNmzDisuoL9/5o3bx4XXHABycnJeDwekpOTufTSS1mxYkXYusJlo66qqqJfv37W/jlz5oSt67zzzrPK/uUvfwlapr6+npkzZzJx4kRSU1MDfnd+97vfsX79+ibbobFxTZ48mWOOOYb27dtb18d+/fpx/vnn8+ijj7J9+/bmVWq4cOHCxRHGhAkTDMAAjOuvv75Zx27fvt1o06aNdfzGjRsD9p955pnWvuLiYmPo0KHWd3n16NHDKp+fn29tnzx5csh2Fy9ebPh8vgZ1yat///7Gtm3bjB49ejRoQ8d9991nHbNkyZIG+539+eabb4xu3bqFbPeEE04wiouLQ/a7Z8+eIY/VX3/84x/Dmd2YPHmyVTY/Pz9sWRcu/hugr/9gWLJkibX/vvvuM2bPnm3ExMQEPX8iIiKMl19+2TA
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 1200x1200 with 6 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAABRsAAAQOCAYAAABb1+8sAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3gU1frHP7sJ2bRNSIU0QkKH0IOCcEGaghRRRCwIFrzX3vXawQbeexX9ee2KCKgoimADLFRpQughQEBCCAmQCum77O78/nhnZjc9QIR7vfN5Hh42O2fOnDlzZnbmO9/zviZFURQMDAwMDAwMDAwMDAwMDAwMDAwMDM4R84VugIGBgYGBgYGBgYGBgYGBgYGBgcGfA0NsNDAwMDAwMDAwMDAwMDAwMDAwMGgSDLHRwMDAwMDAwMDAwMDAwMDAwMDAoEkwxEYDAwMDAwMDAwMDAwMDAwMDAwODJsEQGw0MDAwMDAwMDAwMDAwMDAwMDAyaBENsNDAwMDAwMDAwMDAwMDAwMDAwMGgSDLHRwMDAwMDAwMDAwMDAwMDAwMDAoEkwxEYDAwMDAwMDAwMDAwMDAwMDAwODJsEQGw0MDAwMDAwMDAwMDAwMDAwMDAyaBENsNDAw+J/m8OHDmEwmTCYTN9988x++venTp+vbW7169R++vabi5ptv1tt9+PDhC90cAwMDgz8l2nX20ksvvdBNaVL+rPv1v8jq1av14zl9+vQL3RwDgzNm69ateHl5YTKZSElJudDNMfCguLiY0NBQTCYT77333oVuTq38tz3LXchnOENsNDAw+I9g9+7dTJs2jf79+xMbG4uvry8hISF06NCBG264gfnz51NRUXGhm2lgYPAnQbvxMplMF7opBv8B/Pjjj/p4MB4+DQwM/mimT5/O9OnT+fjjjy90U/6j2LFjh943O3bs+EO2cc899+ByuRgzZgzJyck1lnuKM2fy72zE97/+9a/nXMe5cvz4caZNm0bfvn0JCwvDYrEQGxvL5ZdfzkcffYTD4Wh0XUVFRcyaNYthw4bRsmVLLBYL/v7+tGrVijFjxjB79mwqKyvrXD8oKIgHH3wQgKeeeoqioqJz3j+DC4f3hW6AgYHB/zbHjh3j4Ycf5vPPP0dRlCrLbDYbJ0+eJD09nQULFvDkk0/y8ssvc+ONN16g1hoYGBgY/Bn55ptvAIiJiaF3794XuDUGBgZ/dp577jkABg0adF5m1vy3sGPHDr1vWrduTY8ePZq0/q+//ppNmzYBNLmwl5iYeEblV69ezYcfftikbThT5s+fzx133EF5eXmV77Ozs8nOzuann37izTff5Kuvvmpw/5YvX87kyZPJy8ursSwrK4usrCy+//57XnrpJb766it69epVaz33338/r732GgUFBfzzn/9k5syZZ7+DBhcUQ2w0MDC4YOzZs4eRI0eSlZUFgI+PD5dddhlDhgwhKiqK8vJy9u/fz9dff83Bgwc5evQokyZNYseOHfzzn/9sEkdS69ata4icfyTa21oDAwMDg/8cvvvuOwBGjx5tuF0NDAwM/qRMmzYNgBEjRtQpdt13332MGzeuwboOHDjAY489BoDVauWaa65pdDsqKiq4/fbbURSFgIAAysrKGr1uUzF//nwmT56s/33ZZZdx5ZVXEhERQVZWFgsWLCAlJYXt27dz2WWXsXHjRiIiImqta/PmzVx55ZXY7XYA2rRpw0033URCQgIOh4MDBw7w0UcfkZubS0ZGBsOGDWP37t3ExMTUqCsoKIi7776bF198kX//+9888sgjhIWF/TGdcBYYz3KNxxAbDQwMLggnTpxg2LBhHD9+HIC+ffvy8ccf06FDhxplZ86cyZtvvskjjzzC6dOneeWVVwgKCuKZZ5453802MDAwMPiTsW3bNo4ePQrA2LFjL3BrDAwMDAz+CH788UdSU1MBqohs1enVq1edQqQnjz/+uP554sSJ+Pv7N7ot06dP5+DBg8TExHDttdfy2muvNXrdpiAvL4+77rpL//udd97hjjvuqFLmwQcf5KGHHuL111/n999/5+9//zsfffRRrfU98cQTutB4yy238P777+PtXVVqeuaZZ7jyyiv55ZdfKCoq4l//+hevv/56rfVNnjyZF198kbKyMt577z2efPLJc9hbgwuFEbPRwMDggjBlyhRdaOzXrx+//PJLrUIjgNls5r777uPzzz/XHSfPPfccGzZsOG/tNTAwMDD4c/Ltt98CEBAQwNChQy9wawwMDAwM/gjeeecdQFyIV1555TnV5XQ6mTdvnv73Lbfc0uh1t23bxquvvgrAG2+8QVBQ0Dm15Wz46KOPKC0tBWD8+PE1hEaQ2NavvvoqXbt2BWDu3LkcOHCgRjmbzcaaNWsA8Pb25rXXXqshNAL4+/tXEVV//fXXOtvXrl07+vTpA8C77757XmehGTQdhthoYGBw3lm3bh0//vgjID88n376KQEBAQ2ud/XVV/PXv/4VkB/52izsl156aZWkD06nk48//pjhw4cTExODt7c3rVu31sufSTbqEydO8Nhjj9G5c2cCAgIIDQ3loosu4tVXX9VjnbRu3RqTyVRlG540lMGstvbk5+czffp0unbtitVqxWq10qtXL2bOnFkjxkp1KioqWLx4MXfffTcXX3wxYWFhNGvWjODgYLp06cKdd97Jzp07663DwOB/kdoyrqanp3P33XfTrl07/P39iY6OZsyYMaxfv77G+j/88AOjR48mLi4OX19f4uPjueuuu/SXLHXhcDj48ccfefjhhxkwYACRkZH4+PhgtVpp3749N998M2vXrm30fpSUlPD888/To0cPrFYrwcHBdO/eneeee46CggKg5nWzPo4cOcJTTz3FRRddREREBD4+PrRs2ZLhw4fzzjvv6M6Gs6Vt27aYTCaSkpLqLDNu3Di9vcOGDauzXHJyMiaTiaioqHq3qYmNl112GRaLpdYy5eXlvPbaawwePFgPeh8ZGcmAAQOYOXMmp06dasTenTl5eXk8++yzdO3alaCgIIKCgujduzcvv/xyg0nTFEXh119/5amnnmLIkCFER0djsVgICAggISGB6667Tp8+3lhycnKYPn06AwYMoGXLlvrYTEpK4tZbb+Wbb745o2QCnpSXlzNq1Cj92E6cOLHW8WS323n99dfp27cvISEhBAYG0qlTJx599FGOHDkCNJx98+OPP9aXawk6UlJSmDp1Km3btiUgIKDO3+mffvqJm266icTERPz9/bFarXTs2JE77riDrVu31ruPtW33bMs29f2Cxrp167juuuuIiYnB19eXuLg4xo0bx/Llyxu1/h+FoigsWbKEm266iXbt2hEUFISPjw9RUVEMGzaMGTNmNJhp9VyvX9WzqpeVlfHKK6+QnJxMSEgIAQEBdOnShSeeeKLOxBbVr7Vr1qypNdlIXVluS0tLef311xk+fLh+ToeGhtKnTx+effbZWuPleXKm98lnwtatW3nhhRcYMWIErVq1wtfXFz8/P30MffLJJzidzlrX1ca7p2h3yy231OiXs21bQUEBS5cuBeQ35ExciLWxfPlyjh07BkDHjh255JJLGrWew+Fg6tSpOJ1Oxo4dy9VXX31O7ThbVq5cqX++6aab6ixnNpv1WPkul4vPP/+8RpmCggL9uEZGRhIcHFxnfe3bt9c/NzR1XNtuVlbWOWd9rj7uHQ4H77zzDgMGDCAiIgI/Pz/at2/P/fffr4f3qov6nuX279+v/34EBweTkZFRZz1FRUW0atUKk8mEl5dXnfd253rONwan08n8+fMZM2aMft+qnbu9evVi0qRJzJ0798yn+ysGBgYG55kJEyYogAIod9111xmtm52drXh7e+vr79mzp8ryQYMG6csKCgqUAQMG6H9r/+Lj4/XyGRkZ+vdTpkypc7srV65UQkJCatSl/evataty5MgRJT4+vsY2PJk2bZq+zqpVq2osr96eLVu2KDExMXVut0ePHkpBQUGd7W7dunWd63r+e+KJJ+rrdmXKlCl62YyMjHrLGhj8N+A5/mtj1apV+vJp06YpX331leLv71/r+WMymZSPPvp
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 1200x1200 with 6 Axes>",
"image/png": "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MZlMtfbhSWPVqL31p7CwkJkzZ9KzZ09sNhs2m41+/foxe/bsOjlWTqWiooKvvvqKu+++m0GDBhEREUGrVq0ICQmhR48e3HnnnWzbtq3BNgwM/hfxVm0wPT2du+++m86dOxMQEEBMTAyXX34569atq7P9999/z/jx44mPj8fPz4+EhATuuusu/SVLfdTU1PDDDz/w8MMPM2zYMKKjo7FYLNhsNpKSkrjpppualTC9pKSEZ599lj59+mCz2QgJCaF3794888wz2O12oO59syGOHDnCk08+yXnnnUdUVBQWi4U2bdowduxY5s6dS1VVVZP75o1OnTphMplITk6ud52JEyfq/R0zZky96w0YMACTyUTbtm0b3KcmNl500UVYrVav65SXl/PPf/6TkSNH0qZNG6xWK9HR0QwbNozZs2dz8uTJJhxd8ykoKOCvf/0rPXv2JDg4mODgYPr378+LL77YaNE0RVH45ZdfePLJJxk1ahQxMTFYrVYCAwNJTEzkmmuu0cPHm0pubi4zZ85k2LBhtGnTRp+bycnJ3HLLLXz99deNFhOoj/Lyci677DL93E6ZMsXrfKqqquKVV15h8ODBhIWFERQURLdu3Xj00Uc5cuQIULvAw+HDh+u04a06Z2pqKtOnT6dTp04EBgbW+zn9448/csMNN9ChQwcCAgKw2Wx07dqVO+64g82bNzd4jM2pCtrYui39vKCxdu1arrnmGmJjY/Hz8yM+Pp6JEyeyfPnyJm3/e6EoCkuWLOGGG26gc+fOBAcHY7FYaNu2LWPGjGHWrFlez7UnZ3r/OrWqellZGS+99BIDBgwgLCyMwMBAevToweOPP87x48cbbENj9erVXgtneJt7AKWlpbzyyiuMHTtWv6bDw8MZOHAgf/3rXykoKGjwGJr7nNwcNm/ezHPPPccll1xCu3bt8PPzw9/fX59D8+fPx+l0et1Wm++eot3NN99cZ1xOt292u52lS5cC8hnSHBeiN5YvX05eXh4AXbt25fzzz2/SdjU1NUyfPh2n08mECRO46qqrzqgfp0tKSor+8w033FDvemazWc+V73K5+Oyzz057nx988IH+8y233NLo+p45+ufPn3/a+wXv37+WLl3KFVdcQVxcnF4U59prr2XDhg0NttVQNerKykqSk5P15YsXL26wrcsvv1xf9/nnn/e6jsvlYtGiRUyZMoXExMRanzt33nknO3bsaPI4NHZc06ZNo0uXLgQFBen3x+TkZCZMmMBLL71ETk5O8xpVDAwMDM4ykydPVgAFUO66665mbZuTk6P4+vrq2+/atavW8hEjRujL7Ha7MmzYMP137V9CQoK+fkZGhv73adOm1bvflJQUJSwsrE5b2r+ePXsqR44cURISEursw5Onn35a32blypV1lp/an02bNimxsbH17rdPnz6K3W6vt9/t27evd1vPf48//nhDw65MmzZNXzcjI6PBdQ0M/hvwnP/eWLlypb786aefVr744gslICDA6/VjMpmU999/X1EURamqqlJuvvnmeq+1Nm3aKPv376+3XxdeeGGTrtlp06YpDoejwWPcsWOHEhcXV28b7dq1U7Zt21brvtkQs2bNUqxWa4P96ty5s7Jv375GRr9+br31Vr2tY8eO1VnudDpr3Yv9/f29jsPx48cVs9msAMq1115b7/6
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 1200x1200 with 6 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAABRsAAAQOCAYAAABb1+8sAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOydd3gU1frHP7MJu2mbkApphFACQugBaYp0kCKKXKxgwXtt2PVnBxt4vbbrtSuoWLAheFWK0rsQQm+hJCEkgVRISNmwu/P7452d3ZAKRLjXO5/nyZNN5syZM2fOzM585/u+R1FVVcXAwMDAwMDAwMDAwMDAwMDAwMDA4DwxXewGGBgYGBgYGBgYGBgYGBgYGBgYGPw5MMRGAwMDAwMDAwMDAwMDAwMDAwMDg0bBEBsNDAwMDAwMDAwMDAwMDAwMDAwMGgVDbDQwMDAwMDAwMDAwMDAwMDAwMDBoFAyx0cDAwMDAwMDAwMDAwMDAwMDAwKBRMMRGAwMDAwMDAwMDAwMDAwMDAwMDg0bBEBsNDAwMDAwMDAwMDAwMDAwMDAwMGgVDbDQwMDAwMDAwMDAwMDAwMDAwMDBoFAyx0cDAwMDAwMDAwMDAwMDAwMDAwKBRMMRGAwOD/2nS09NRFAVFUbjlllv+8O1Nnz5d397KlSv/8O01Frfccove7vT09IvdHAMDA4M/Ja7r7BVXXHGxm9Ko/Fn363+RlStX6sdz+vTpF7s5BgZnzZYtW/Dy8kJRFJKTky92cww8KC4uJiQkBEVR+OCDDy52c2rkv+1Z7mI+wxlio4GBwX8EO3fuZNq0afTr14+YmBh8fHwIDg6mXbt23HDDDXz++eeUl5df7GYaGBj8SXDdeCmKcrGbYvAfwJIlS/TxYDx8GhgY/NFMnz6d6dOn8+mnn17spvxHsW3bNr1vtm3b9ods495778XpdDJmzBiSkpKqLfcUZ87m51zE97/+9a/nXcf5cuzYMaZNm0bv3r0JDQ3FYrEQExPD8OHDmT17Nna7vcF1FRUV8frrrzNkyBCaN2+OxWLBz8+PFi1aMGbMGGbNmkVFRUWt6wcGBvLggw8C8NRTT1FUVHTe+2dw8fC+2A0wMDD43yYnJ4eHH36Yr7/+GlVVqyyz2WycOHGC1NRU5s6dy5NPPsnLL7/MjTfeeJFaa2BgYGDwZ+THH38EIDo6mh49elzk1hgYGPzZee655wAYMGDABYms+W9h27Ztet+0bNmSrl27Nmr9P/zwAxs3bgRodGGvVatWZ1V+5cqVfPzxx43ahrPl888/584776SsrKzK/7OyssjKyuLXX3/l7bff5vvvv693/xYvXsykSZPIy8urtiwzM5PMzEx+/vlnXnrpJb7//nu6d+9eYz33338/b7zxBgUFBbzyyivMnDnz3HfQ4KJiiI0GBgYXjd27dzNy5EgyMzMBMJvNDBs2jEGDBhEZGUlZWRn79+/nhx9+4ODBgxw9epSbbrqJbdu28corrzSKI6lly5bVRM4/EtfbWgMDAwOD/xx++uknAEaPHm24XQ0MDAz+pEybNg2AESNG1Cp23XfffYwbN67eug4cOMBjjz0GgNVq5dprr21wO8rLy7njjjtQVRV/f39KS0sbvG5j8fnnnzNp0iT972HDhnHVVVcRHh5OZmYmc+fOJTk5ma1btzJs2DA2bNhAeHh4jXVt2rSJq666isrKSgBat27NzTffTHx8PHa7nQMHDjB79mxyc3NJS0tjyJAh7Ny5k+jo6Gp1BQYGcs899/Diiy/yr3/9i0ceeYTQ0NA/phPOAeNZruEYYqOBgcFF4fjx4wwZMoRjx44B0Lt3bz799FPatWtXrezMmTN5++23eeSRRzh9+jSvvvoqgYGBPPPMMxe62QYGBgYGfzJSUlI4evQoAGPHjr3IrTEwMDAw+CNYsmQJu3btAqgisp1J9+7daxUiPXn88cf1zxMnTsTPz6/BbZk+fToHDx4kOjqav/zlL7zxxhsNXrcxyMvL4+6779b/fu+997jzzjurlHnwwQd56KGHePPNNzl06BD/93//x+zZs2us74knntCFxltvvZUPP/wQb++qUtMzzzzDVVddxdKlSykqKuIf//gHb775Zo31TZo0iRdffJHS0lI++OADnnzyyfPYW4OLhZGz0cDA4KIwefJkXWjs06cPS5curVFoBDCZTNx33318/fXXuuPkueeeY/369ResvQYGBgYGf07+/e9/A+Dv78/gwYMvcmsMDAwMDP4I3nvvPUBciFddddV51eVwOJgzZ47+96233trgdVNSUnjttdcAeOuttwgMDDyvtpwLs2fP5tSpUwCMHz++mtAIktv6tddeo1OnTgB89tlnHDhwoFo5m83GqlWrAPD29uaNN96oJjQC+Pn5VRFV16xZU2v72rZtS8+ePQF4//33L2gUmkHjYYiNBgYGF5y1a9eyZMkSQL54vvzyS/z9/etd75prruGvf/0rIF/yNVnYr7jiiiqTPjgcDj799FOGDh1KdHQ03t7etGzZUi9/NrNRHz9+nMcee4wOHTrg7+9PSEgIvXr14rXXXtNznbRs2RJFUapsw5P6ZjCrqT35+flMnz6dTp06YbVasVqtdO/enZkzZ1bLsXIm5eXlzJ8/n3vuuYdLL72U0NBQmjRpQlBQEB07duSuu+5i+/btddZhYPC/SE0zrqampnLPPffQtm1b/Pz8iIqKYsyYMaxbt67a+r/88gujR48mNjYWHx8f4uLiuPvuu/WXLLVht9tZsmQJDz/8MP379yciIgKz2YzVaiUhIYFbbrmF1atXN3g/SkpKeP755+natStWq5WgoCC6dOnCc889R0FBAVD9ulkXR44c4amnnqJXr16Eh4djNptp3rw5Q4cO5b333tOdDedKmzZtUBSFxMTEWsuMGzdOb++QIUNqLZeUlISiKERGRta5TZfYOGzYMCwWS41lysrKeOONNxg4cKCe9D4iIoL+/fszc+ZMTp482YC9O3vy8vJ49tln6dSpE4GBgQQGBtKjRw9efvnleidNU1WVNWvW8NRTTzFo0CCioqKwWCz4+/sTHx/Pddddp4ePN5Ts7GymT59O//79ad68uT42ExMTue222/jxxx/PajIBT8rKyhg1apR+bCdOnFjjeKqsrOTNN9+kd+/eBAcHExAQwCWXXMKjjz7KkSNHgPpn3/z000/15a4JOpKTk5kyZQpt2rTB39+/1u/pX3/9lZtvvplWrVrh5+eH1Wqlffv23HnnnWzZsqXOfaxpu+datrHvF1ysXbuW6667jujoaHx8fIiNjWXcuHEsXry4Qev/UaiqyoIFC7j55ptp27YtgYGBmM1mIiMjGTJkCDNmzKh3ptXzvX6dOat6aWkpr776KklJSQQHB+Pv70/Hjh154oknap3Y4sxr7apVq2qcbKS2WW5PnTrFm2++ydChQ/VzOiQkhJ49e/Lss8/WmC/Pk7O9Tz4btmzZwgsvvMCIESNo0aIFPj4++Pr66mPoiy++wOFw1Liua7x7ina33nprtX4517YVFBSwcOFCQL5DzsaFWBOLFy8mJycHgPbt29O3b98GrWe325kyZQoOh4OxY8dyzTXXnFc7zpXly5frn2+++eZay5lMJj1XvtPp5Ouvv65WpqCgQD+uERERBAUF1VpfQkKC/rm+0HHXdjMzM8971uczx73dbue9996jf//+hIeH4+vrS0JCAvfff7+e3qs26nqW279/v/79ERQURFpaWq31FBUV0aJFCxRFwcvLq9Z7u/M95xuCw+Hg888/Z8yYMfp9q+vc7d69OzfddBOfffbZ2Yf7qwYGBgYXmAkTJqiACqh33333Wa2blZWlent76+vv3r27yvIBAwboywoKCtT+/fvrf7t+4uLi9PJpaWn6/ydPnlzrdpcvX64GBwdXq8v106lTJ/XIkSNqXFxctW14Mm3aNH2dFStWVFt+Zns2b96sRkdH17rdrl27qgUFBbW2u2XLlrWu6/nzxBNP1NXt6uTJk/WyaWlpdZY1MPhvwHP818SKFSv05dOmTVO///571c/Pr8bzR1EUdfbs2aqqqmplZaV
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for i in range(0,3):\n",
" for j in range(0,3):\n",
" beam = cropOD[i][j]\n",
" lbs.beam_size_plot(beam)\n",
" plt.show()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-11T08:48:48.907504100Z",
"start_time": "2023-07-11T08:48:41.310522100Z"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Try blurring image"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "markdown",
"source": [],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 7,
"outputs": [],
"source": [
"from scipy.ndimage import gaussian_filter\n",
"import matplotlib as mpl\n",
"mpl.rc('xtick', labelsize=8)\n",
"mpl.rc('ytick', labelsize=8)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T15:49:59.047707Z",
"start_time": "2023-07-12T15:49:58.974095900Z"
}
}
},
{
"cell_type": "code",
"execution_count": 47,
"outputs": [],
"source": [
"# from opencv import moments\n",
"blurred = gaussian_filter(cropOD, sigma=1.5)\n",
"\n",
"max = np.zeros((3,3,2))\n",
"\n",
"for i in range(0,3):\n",
" for j in range(0,3):\n",
" max[i,j] = np.unravel_index(np.argmax(blurred[i,j]), blurred[0,0].shape)\n",
"\n",
"thresh = gaussian_filter(cropOD, sigma=0.4)\n",
"thresh = np.where(thresh<np.max(blurred)*0.25,0,1)\n",
"\n",
"#M = moments(thresh)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-13T09:12:15.815275700Z",
"start_time": "2023-07-13T09:12:15.734884Z"
}
}
},
{
"cell_type": "code",
"execution_count": 48,
"outputs": [
{
"data": {
"text/plain": "<Figure size 1200x800 with 9 Axes>",
"image/png": "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
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 1200x800 with 9 Axes>",
"image/png": "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
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<Figure size 1200x800 with 9 Axes>",
"image/png": "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
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fsize = (12,8)\n",
"\n",
"nr_plots = 3\n",
"\n",
"fig, ax = plt.subplots(nr_plots,nr_plots,figsize=fsize)\n",
"\n",
"for i in range(0,nr_plots):\n",
" for j in range(0,nr_plots):\n",
" # ax[i][j].pcolormesh(blurred[i][j], cmap='jet', vmin=0, vmax=1.5, alpha=1)\n",
" ax[i][j].pcolormesh(thresh[i][j], cmap='jet', vmin=0, vmax=1.5, alpha=1)\n",
" #ax[i][j].pcolormesh(cropOD[i][j], cmap='hot', vmin=0, vmax=1, alpha=1)\n",
" ax[i][j].plot(max[i,j,1],max[i,j,0], marker='x', markersize=12)\n",
"plt.show()\n",
"\n",
"fig, ax = plt.subplots(nr_plots,nr_plots,figsize=fsize)\n",
"for i in range(0,nr_plots):\n",
" for j in range(0,nr_plots):\n",
" ax[i][j].pcolormesh(blurred[i][j], cmap='jet', vmin=0, vmax=1.5, alpha=1)\n",
" #ax[i][j].pcolormesh(thresh[i][j], cmap='jet', vmin=0, vmax=1.5, alpha=1)\n",
" #ax[i][j].pcolormesh(cropOD[i][j], cmap='hot', vmin=0, vmax=1, alpha=1)\n",
" ax[i][j].plot(max[i,j,1],max[i,j,0], marker='x', markersize=12)\n",
"plt.show()\n",
"\n",
"fig, ax = plt.subplots(nr_plots,nr_plots,figsize=fsize)\n",
"for i in range(0,nr_plots):\n",
" for j in range(0,nr_plots):\n",
" ax[i][j].pcolormesh(cropOD[i][j], cmap='jet', vmin=0, vmax=1.5)\n",
" ax[i][j].plot(max[i,j,1],max[i,j,0], marker='x', markersize=12)\n",
"plt.show()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-13T09:12:23.751816300Z",
"start_time": "2023-07-13T09:12:19.498409200Z"
}
}
},
{
"cell_type": "code",
"execution_count": 71,
"outputs": [],
"source": [
"print('t')"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "markdown",
"source": [
"## Fitting"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 19,
"outputs": [],
"source": [
"data = cropOD[0,0]\n",
"data_fl = data.flatten()\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T10:37:57.872972400Z",
"start_time": "2023-07-12T10:37:57.802099300Z"
}
}
},
{
"cell_type": "code",
"execution_count": 39,
"outputs": [
{
"ename": "type",
"evalue": "name 'data' is not defined",
"output_type": "error",
"traceback": [
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[1;31mNameError\u001B[0m Traceback (most recent call last)",
"Cell \u001B[1;32mIn[39], line 4\u001B[0m\n\u001B[0;32m 1\u001B[0m fitModel \u001B[38;5;241m=\u001B[39m DensityProfileBEC2dModel()\n\u001B[0;32m 2\u001B[0m \u001B[38;5;66;03m#fitModel.set_param_hint('deltax', value=5)\u001B[39;00m\n\u001B[1;32m----> 4\u001B[0m params \u001B[38;5;241m=\u001B[39m fitModel\u001B[38;5;241m.\u001B[39mmake_params(BEC_amplitude\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mdict\u001B[39m(value\u001B[38;5;241m=\u001B[39mnp\u001B[38;5;241m.\u001B[39mmax(\u001B[43mdata\u001B[49m),\u001B[38;5;28mmax\u001B[39m\u001B[38;5;241m=\u001B[39mnp\u001B[38;5;241m.\u001B[39mmax(data)))\n\u001B[0;32m 5\u001B[0m params\u001B[38;5;241m.\u001B[39madd_many(\n\u001B[0;32m 6\u001B[0m (\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mthermal_amplitude\u001B[39m\u001B[38;5;124m'\u001B[39m,\u001B[38;5;241m1\u001B[39m,\u001B[38;5;28;01mTrue\u001B[39;00m,\u001B[38;5;241m0\u001B[39m)\n\u001B[0;32m 7\u001B[0m )\n\u001B[0;32m 8\u001B[0m params\n",
"\u001B[1;31mNameError\u001B[0m: name 'data' is not defined"
]
}
],
"source": [
"fitModel = DensityProfileBEC2dModel()\n",
"#fitModel.set_param_hint('deltax', value=5)\n",
"\n",
"params = fitModel.make_params(BEC_amplitude=dict(value=np.max(data),max=np.max(data)))\n",
"params.add_many(\n",
" ('thermal_amplitude',1,True,0)\n",
")\n",
"params"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T15:01:46.818700500Z",
"start_time": "2023-07-12T15:01:46.723379600Z"
}
}
},
{
"cell_type": "code",
"execution_count": 119,
"outputs": [
{
"ename": "type",
"evalue": "'{5, 'BEC_amplitude'}' is not a Parameters object",
"output_type": "error",
"traceback": [
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[1;31mValueError\u001B[0m Traceback (most recent call last)",
"Cell \u001B[1;32mIn[119], line 1\u001B[0m\n\u001B[1;32m----> 1\u001B[0m \u001B[43mparams\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mupdate\u001B[49m\u001B[43m(\u001B[49m\u001B[43m{\u001B[49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[38;5;124;43mBEC_amplitude\u001B[39;49m\u001B[38;5;124;43m'\u001B[39;49m\u001B[43m,\u001B[49m\u001B[38;5;241;43m5\u001B[39;49m\u001B[43m}\u001B[49m\u001B[43m)\u001B[49m\n",
"File \u001B[1;32m~\\PycharmProjects\\analyseScript\\venv\\lib\\site-packages\\lmfit\\parameter.py:74\u001B[0m, in \u001B[0;36mParameters.update\u001B[1;34m(self, other)\u001B[0m\n\u001B[0;32m 72\u001B[0m \u001B[38;5;250m\u001B[39m\u001B[38;5;124;03m\"\"\"Update values and symbols with another Parameters object.\"\"\"\u001B[39;00m\n\u001B[0;32m 73\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(other, Parameters):\n\u001B[1;32m---> 74\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;132;01m{\u001B[39;00mother\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m is not a Parameters object\u001B[39m\u001B[38;5;124m\"\u001B[39m)\n\u001B[0;32m 75\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39madd_many(\u001B[38;5;241m*\u001B[39mother\u001B[38;5;241m.\u001B[39mvalues())\n\u001B[0;32m 76\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m sym \u001B[38;5;129;01min\u001B[39;00m other\u001B[38;5;241m.\u001B[39m_asteval\u001B[38;5;241m.\u001B[39muser_defined_symbols():\n",
"\u001B[1;31mValueError\u001B[0m: '{5, 'BEC_amplitude'}' is not a Parameters object"
]
}
],
"source": [
"params.update({'BEC_amplitude',5})"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-11T13:45:30.943395400Z",
"start_time": "2023-07-11T13:45:30.774483200Z"
}
}
},
{
"cell_type": "code",
"execution_count": 33,
"outputs": [],
"source": [],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T13:29:50.137881900Z",
"start_time": "2023-07-12T13:29:50.055103300Z"
}
}
},
{
"cell_type": "code",
"execution_count": 34,
"outputs": [
{
"ename": "type",
"evalue": "name 'polylog' is not defined",
"output_type": "error",
"traceback": [
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[1;31mNameError\u001B[0m Traceback (most recent call last)",
"Cell \u001B[1;32mIn[34], line 1\u001B[0m\n\u001B[1;32m----> 1\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[43mpolylog2_2d\u001B[49m\u001B[43m(\u001B[49m\u001B[43mx\u001B[49m\u001B[43m)\u001B[49m)\n",
"Cell \u001B[1;32mIn[33], line 4\u001B[0m, in \u001B[0;36mpolylog2_2d\u001B[1;34m(x, y, centerx, centery, amplitude, sigmax, sigmay)\u001B[0m\n\u001B[0;32m 2\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m \u001B[38;5;21mpolylog2_2d\u001B[39m(x, y\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m0.0\u001B[39m, centerx\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m0.0\u001B[39m, centery\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m0.0\u001B[39m, amplitude\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m1.0\u001B[39m, sigmax\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m1.0\u001B[39m, sigmay\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m1.0\u001B[39m):\n\u001B[0;32m 3\u001B[0m \u001B[38;5;66;03m## Approximation of the polylog function with 2D gaussian as argument. -> discribes the thermal part of the cloud\u001B[39;00m\n\u001B[1;32m----> 4\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m amplitude \u001B[38;5;241m/\u001B[39m \u001B[38;5;241m2\u001B[39m \u001B[38;5;241m/\u001B[39m np\u001B[38;5;241m.\u001B[39mpi \u001B[38;5;241m/\u001B[39m \u001B[38;5;241m1.20206\u001B[39m \u001B[38;5;241m/\u001B[39m \u001B[38;5;28mmax\u001B[39m(tiny, sigmax \u001B[38;5;241m*\u001B[39m sigmay) \u001B[38;5;241m*\u001B[39m \u001B[43mpolylog\u001B[49m(\u001B[38;5;241m2\u001B[39m, np\u001B[38;5;241m.\u001B[39mexp( \u001B[38;5;241m-\u001B[39m((x\u001B[38;5;241m-\u001B[39mcenterx)\u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39m\u001B[38;5;241m2\u001B[39m\u001B[38;5;241m/\u001B[39m(\u001B[38;5;241m2\u001B[39m \u001B[38;5;241m*\u001B[39m (sigmax)\u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39m\u001B[38;5;241m2\u001B[39m))\u001B[38;5;241m-\u001B[39m((y\u001B[38;5;241m-\u001B[39mcentery)\u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39m\u001B[38;5;241m2\u001B[39m\u001B[38;5;241m/\u001B[39m( \u001B[38;5;241m2\u001B[39m \u001B[38;5;241m*\u001B[39m (sigmay)\u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39m\u001B[38;5;241m2\u001B[39m)) ))\n",
"\u001B[1;31mNameError\u001B[0m: name 'polylog' is not defined"
]
}
],
"source": [
"print(polylog2_2d(x))"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T13:29:51.696064100Z",
"start_time": "2023-07-12T13:29:51.632683100Z"
}
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "markdown",
"source": [
"## Function testing"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 45,
"outputs": [
{
"ename": "type",
"evalue": "name 'data' is not defined",
"output_type": "error",
"traceback": [
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[1;31mNameError\u001B[0m Traceback (most recent call last)",
"Cell \u001B[1;32mIn[45], line 3\u001B[0m\n\u001B[0;32m 1\u001B[0m \u001B[38;5;66;03m## How fast are the functions\u001B[39;00m\n\u001B[1;32m----> 3\u001B[0m \u001B[38;5;28mprint\u001B[39m(np\u001B[38;5;241m.\u001B[39mshape(\u001B[43mdata\u001B[49m))\n\u001B[0;32m 4\u001B[0m x \u001B[38;5;241m=\u001B[39m np\u001B[38;5;241m.\u001B[39mlinspace(\u001B[38;5;241m0\u001B[39m,\u001B[38;5;241m150\u001B[39m, \u001B[38;5;241m151\u001B[39m)\n\u001B[0;32m 5\u001B[0m y \u001B[38;5;241m=\u001B[39m np\u001B[38;5;241m.\u001B[39mlinspace(\u001B[38;5;241m0\u001B[39m,\u001B[38;5;241m200\u001B[39m, \u001B[38;5;241m201\u001B[39m)\n",
"\u001B[1;31mNameError\u001B[0m: name 'data' is not defined"
]
}
],
"source": [
"## How fast are the functions\n",
"\n",
"print(np.shape(data))\n",
"x = np.linspace(0,150, 151)\n",
"y = np.linspace(0,200, 201)\n",
"\n",
"X, Y = np.meshgrid(x,y)\n",
"x_fl = x_.flatten()\n",
"y_fl = y_.flatten()\n",
"\n",
"\n",
"plt.pcolormesh(density_profile_BEC_2d(x=X, y=Y))\n",
"plt.show()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T15:28:15.691773300Z",
"start_time": "2023-07-12T15:28:15.654838Z"
}
}
},
{
"cell_type": "code",
"execution_count": 10,
"outputs": [],
"source": [
"import matplotlib as mpl\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T14:13:19.937313800Z",
"start_time": "2023-07-12T14:13:19.854896900Z"
}
}
},
{
"cell_type": "code",
"execution_count": 46,
"outputs": [
{
"data": {
"text/plain": "<IPython.core.display.Javascript object>",
"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('tabindex', '0');\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 'z-index: 2;'\n );\n\n function on_keyboard_event_cl
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": "<IPython.core.display.HTML object>",
"text/html": "<div id='0eb1abd9-3e5c-4873-9ee5-732c0178bab8'></div>"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from Analyser.FitAnalyser import density_profile_BEC_2d,polylog2_2d, ThomasFermi_2d\n",
"\n",
"\n",
"x = np.linspace(-5,5,1000)\n",
"\n",
"th_amp = 5\n",
"bec_amp = 1\n",
"plt.close()\n",
"plt.plot(x, density_profile_BEC_2d(x, BEC_amplitude=bec_amp, thermal_amplitude=th_amp))\n",
"plt.plot(x, polylog2_2d(x, amplitude=th_amp), linestyle='dotted')\n",
"plt.plot(x, ThomasFermi_2d(x,amplitude=bec_amp), linestyle='dotted')\n",
"plt.show()\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T15:28:26.158410600Z",
"start_time": "2023-07-12T15:28:25.992223500Z"
}
}
},
{
"cell_type": "code",
"execution_count": 33,
"outputs": [],
"source": [
"plt.plot(1,2)\n",
"plt.show()"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T14:43:42.772430Z",
"start_time": "2023-07-12T14:43:42.700077400Z"
}
}
},
{
"cell_type": "code",
2023-07-26 09:41:51 +02:00
"execution_count": 1,
"outputs": [],
"source": [
"def find_fwhm(f_x, x):\n",
" ind = 0\n",
" for i in range(0, len(f_x)):\n",
" if f_x[i] > np.max(f_x)/2 and ind ==0:\n",
" a = i\n",
" ind = 1\n",
"\n",
" if f_x[i] < np.max(f_x)/2 and ind ==1:\n",
" b = i\n",
" break\n",
" return x[b] - x[a]"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
2023-07-26 09:41:51 +02:00
"end_time": "2023-07-25T12:33:47.822058700Z",
"start_time": "2023-07-25T12:33:47.814126200Z"
}
}
},
{
"cell_type": "code",
"execution_count": 22,
"outputs": [
{
"ename": "type",
"evalue": "name 'find_fwhm' is not defined",
"output_type": "error",
"traceback": [
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[1;31mNameError\u001B[0m Traceback (most recent call last)",
"Cell \u001B[1;32mIn[22], line 2\u001B[0m\n\u001B[0;32m 1\u001B[0m x \u001B[38;5;241m=\u001B[39m np\u001B[38;5;241m.\u001B[39mlinspace(\u001B[38;5;241m-\u001B[39m\u001B[38;5;241m3\u001B[39m,\u001B[38;5;241m3\u001B[39m,\u001B[38;5;241m100000\u001B[39m)\n\u001B[1;32m----> 2\u001B[0m fac \u001B[38;5;241m=\u001B[39m \u001B[43mfind_fwhm\u001B[49m(ThomasFermi_2d(x, sigmax\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m1\u001B[39m), x)\n\u001B[0;32m 3\u001B[0m \u001B[38;5;28mprint\u001B[39m(fac)\n\u001B[0;32m 4\u001B[0m find_fwhm(ThomasFermi_2d(x, sigmax\u001B[38;5;241m=\u001B[39m\u001B[38;5;241m0.5\u001B[39m), x)\n",
"\u001B[1;31mNameError\u001B[0m: name 'find_fwhm' is not defined"
]
}
],
"source": [
"x = np.linspace(-3,3,100000)\n",
"fac = find_fwhm(ThomasFermi_2d(x, sigmax=1), x)\n",
"print(fac)\n",
"find_fwhm(ThomasFermi_2d(x, sigmax=0.5), x)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T10:38:51.409014100Z",
"start_time": "2023-07-12T10:38:51.321616600Z"
}
}
},
{
"cell_type": "code",
"execution_count": 38,
"outputs": [
{
"data": {
"text/plain": "0.6082860828608285"
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fac * 0.5"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-11T15:32:38.388641900Z",
"start_time": "2023-07-11T15:32:38.357158Z"
}
}
},
{
"cell_type": "code",
"execution_count": 59,
"outputs": [],
"source": [
"\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T14:04:41.585158400Z",
"start_time": "2023-07-12T14:04:41.507821200Z"
}
}
},
{
"cell_type": "code",
"execution_count": 38,
"outputs": [],
"source": [
"def polylog(power, numerator, order=20):\n",
" dataShape = numerator.shape\n",
" numerator = np.tile(numerator, (order, 1))\n",
" numerator = np.power(numerator.T, np.arange(1, order + 1)).T\n",
"\n",
" denominator = np.arange(1, order + 1)\n",
" denominator = np.tile(denominator, (dataShape[0], 1))\n",
" denominator = denominator.T\n",
"\n",
" data = numerator / np.power(denominator, power)\n",
"\n",
" return np.sum(data, axis=0)\n",
"\n",
"def polylog2_2d(x, y=0.0, centerx=0.0, centery=0.0, amplitude=1.0, sigmax=1.0, sigmay=1.0, order=20):\n",
" ## Approximation of the polylog function with 2D gaussian as argument. -> discribes the thermal part of the cloud\n",
" return amplitude / 2 / np.pi / 1.20206 / max(tiny, sigmax * sigmay) * polylog(2, np.exp( -((x-centerx)**2/(2 * (sigmax)**2))-((y-centery)**2/( 2 * (sigmay)**2)) ),order=order)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T14:49:25.062687200Z",
"start_time": "2023-07-12T14:49:24.993359Z"
}
}
},
{
"cell_type": "code",
"execution_count": 22,
"outputs": [],
"source": [
"import timeit\n",
"\n",
"a = time.time()\n",
"polylog2_2d(x, order=2000)\n",
"b= time.time()\n",
"\n",
"print((b-a)*1e3)\n"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 36,
"outputs": [
{
"ename": "type",
"evalue": "polylog2_2d() got an unexpected keyword argument 'order'",
"output_type": "error",
"traceback": [
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[1;31mTypeError\u001B[0m Traceback (most recent call last)",
"Cell \u001B[1;32mIn[36], line 2\u001B[0m\n\u001B[0;32m 1\u001B[0m x \u001B[38;5;241m=\u001B[39m np\u001B[38;5;241m.\u001B[39mlinspace(\u001B[38;5;241m0\u001B[39m,\u001B[38;5;241m1\u001B[39m,\u001B[38;5;241m151\u001B[39m)\n\u001B[1;32m----> 2\u001B[0m max_prec \u001B[38;5;241m=\u001B[39m \u001B[43mpolylog2_2d\u001B[49m\u001B[43m(\u001B[49m\u001B[43mx\u001B[49m\u001B[43m,\u001B[49m\u001B[43morder\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;241;43m3000\u001B[39;49m\u001B[43m)\u001B[49m\n",
"\u001B[1;31mTypeError\u001B[0m: polylog2_2d() got an unexpected keyword argument 'order'"
]
}
],
"source": [
"x = np.linspace(0,1,151)\n",
"max_prec = polylog2_2d(x,order=3000)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T14:49:08.727680400Z",
"start_time": "2023-07-12T14:49:08.619266900Z"
}
}
},
{
"cell_type": "code",
"execution_count": 35,
"outputs": [
{
"ename": "type",
"evalue": "polylog2_2d() got an unexpected keyword argument 'order'",
"output_type": "error",
"traceback": [
"\u001B[1;31m---------------------------------------------------------------------------\u001B[0m",
"\u001B[1;31mTypeError\u001B[0m Traceback (most recent call last)",
"Cell \u001B[1;32mIn[35], line 3\u001B[0m\n\u001B[0;32m 1\u001B[0m \u001B[38;5;66;03m#print(polylog2_2d(x,order=2))\u001B[39;00m\n\u001B[1;32m----> 3\u001B[0m \u001B[38;5;28mprint\u001B[39m(\u001B[43mpolylog2_2d\u001B[49m\u001B[43m(\u001B[49m\u001B[43mx\u001B[49m\u001B[43m,\u001B[49m\u001B[43morder\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;241;43m6\u001B[39;49m\u001B[43m)\u001B[49m\u001B[38;5;241m/\u001B[39mmax_prec)\n",
"\u001B[1;31mTypeError\u001B[0m: polylog2_2d() got an unexpected keyword argument 'order'"
]
}
],
"source": [
"#print(polylog2_2d(x,order=2))\n",
"\n",
"print(polylog2_2d(x,order=6)/max_prec)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T14:49:05.518382200Z",
"start_time": "2023-07-12T14:49:05.476870800Z"
}
}
},
{
"cell_type": "code",
"execution_count": 69,
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.21774815 0.21772299 0.21764863 0.21752807 0.21736539 0.21716479\n",
" 0.21693003 0.21666411 0.21636937 0.21604763 0.21570038 0.21532891\n",
" 0.21493435 0.21451771 0.21407994 0.21362191 0.21314442 0.21264822\n",
" 0.21213403 0.21160251 0.21105429 0.21048997 0.20991011 0.20931524\n",
" 0.2087059 0.20808256 0.2074457 0.20679578 0.20613322 0.20545843\n",
" 0.20477184 0.20407381 0.20336473 0.20264496 0.20191484 0.20117472\n",
" 0.20042492 0.19966577 0.19889756 0.19812059 0.19733517 0.19654157\n",
" 0.19574007 0.19493093 0.19411441 0.19329077 0.19246026 0.19162311\n",
" 0.19077957 0.18992985 0.18907419 0.18821281 0.18734591 0.18647371\n",
" 0.1855964 0.1847142 0.18382729 0.18293586 0.18204011 0.18114021\n",
" 0.18023634 0.17932869 0.17841741 0.17750267 0.17658465 0.1756635\n",
" 0.17473938 0.17381245 0.17288285 0.17195074 0.17101626 0.17007955\n",
" 0.16914075 0.16820001 0.16725745 0.16631321 0.16536742 0.16442021\n",
" 0.16347169 0.162522 0.16157125 0.16061957 0.15966706 0.15871384\n",
" 0.15776002 0.15680572 0.15585103 0.15489607 0.15394094 0.15298575\n",
" 0.15203058 0.15107554 0.15012073 0.14916623 0.14821215 0.14725857\n",
" 0.14630559 0.14535329 0.14440175 0.14345107 0.14250132 0.1415526\n",
" 0.14060496 0.13965851 0.1387133 0.13776943 0.13682696 0.13588596\n",
" 0.13494652 0.13400869 0.13307255 0.13213816 0.1312056 0.13027492\n",
" 0.12934619 0.12841948 0.12749484 0.12657233 0.12565202 0.12473396\n",
" 0.12381822 0.12290483 0.12199387 0.12108537 0.12017941 0.11927602\n",
" 0.11837525 0.11747716 0.1165818 0.11568921 0.11479944 0.11391253\n",
" 0.11302853 0.11214748 0.11126943 0.1103944 0.10952246 0.10865363\n",
" 0.10778796 0.10692547 0.10606622 0.10521023 0.10435755 0.1035082\n",
" 0.10266221 0.10181963 0.10098049 0.10014481 0.09931262 0.09848396\n",
" 0.09765885]\n"
]
}
],
"source": [
"print(max_prec)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T14:06:01.787511600Z",
"start_time": "2023-07-12T14:06:01.668149100Z"
}
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "markdown",
"source": [
"## Fitting Code Jianshun"
],
"metadata": {
"collapsed": false
}
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"ExecuteTime": {
"end_time": "2023-07-12T15:11:31.516632100Z",
"start_time": "2023-07-12T15:11:24.298357400Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"time guess =5.85423469543457 \n",
" time fit = 1.361077070236206\n"
]
}
],
"source": [
"from Analyser.FitAnalyser import ThomasFermi2dModel, DensityProfileBEC2dModel, polylog2_2d\n",
"\n",
"fitModel = DensityProfileBEC2dModel()\n",
"# fitModel = ThomasFermi2dModel()\n",
"\n",
"fitAnalyser = FitAnalyser(fitModel, fitDim=2)\n",
"\n",
"# fitAnalyser = FitAnalyser(\"Gaussian-2D\", fitDim=2)\n",
"\n",
"# dataSet_cropOD = dataSet_cropOD.chunk((1,1,100,100))\n",
"\n",
"start = time.time()\n",
"params = fitAnalyser.guess(dataSet_cropOD, guess_kwargs=dict(pureBECThreshold=0.3), dask=\"parallelized\")\n",
"\n",
"time_guess = time.time()\n",
"fitResult = fitAnalyser.fit(dataSet_cropOD, params).load()\n",
"end = time.time()\n",
"\n",
"print(f\"time guess ={time_guess-start} \\n time fit = {end-time_guess}\")"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"ExecuteTime": {
"end_time": "2023-07-12T15:23:42.071145400Z",
"start_time": "2023-07-12T15:23:41.998288600Z"
}
},
"outputs": [
{
"data": {
"text/plain": "<xarray.DataArray 'OD' (odt_hold_time_4: 3, runs: 3)>\narray([[<lmfit.model.ModelResult object at 0x00000177FBA9D280>,\n <lmfit.model.ModelResult object at 0x00000177FBAAB5E0>,\n <lmfit.model.ModelResult object at 0x00000177F9603B50>],\n [<lmfit.model.ModelResult object at 0x00000177FBAA2BB0>,\n <lmfit.model.ModelResult object at 0x00000177F97F4160>,\n <lmfit.model.ModelResult object at 0x00000177FBA9BFD0>],\n [<lmfit.model.ModelResult object at 0x00000177F981FCD0>,\n <lmfit.model.ModelResult object at 0x00000177F981FC70>,\n <lmfit.model.ModelResult object at 0x00000177F9837730>]],\n dtype=object)\nCoordinates:\n * odt_hold_time_4 (odt_hold_time_4) float64 0.001 0.03042 0.9252\n * runs (runs) float64 0.0 1.0 2.0\nAttributes:\n IMAGE_SUBCLASS: IMAGE_GRAYSCALE\n IMAGE_VERSION: 1.2\n IMAGE_WHITE_IS_ZERO: 0\n x_start: 885\n x_end: 1035\n y_end: 990\n y_start: 790\n x_center: 960\n y_center: 890\n x_span: 150\n y_span: 200",
"text/html": "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n<defs>\n<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n</symbol>\n<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n</symbol>\n</defs>\n</svg>\n<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n *\n */\n\n:root {\n --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n --xr-border-color: var(--jp-border-color2, #e0e0e0);\n --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n --xr-background-color: var(--jp-layout-color0, white);\n --xr-background-color-row-even: var(--jp-layout-color1, white);\n --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n}\n\nhtml[theme=dark],\nbody[data-theme=dark],\nbody.vscode-dark {\n --xr-font-color0: rgba(255, 255, 255, 1);\n --xr-font-color2: rgba(255, 255, 255, 0.54);\n --xr-font-color3: rgba(255, 255, 255, 0.38);\n --xr-border-color: #1F1F1F;\n --xr-disabled-color: #515151;\n --xr-background-color: #111111;\n --xr-background-color-row-even: #111111;\n --xr-background-color-row-odd: #313131;\n}\n\n.xr-wrap {\n display: block !important;\n min-width: 300px;\n max-width: 700px;\n}\n\n.xr-text-repr-fallback {\n /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n display: none;\n}\n\n.xr-header {\n padding-top: 6px;\n padding-bottom: 6px;\n margin-bottom: 4px;\n border-bottom: solid 1px var(--xr-border-color);\n}\n\n.xr-header > div,\n.xr-header > ul {\n display: inline;\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.xr-obj-type,\n.xr-array-name {\n margin-left: 2px;\n margin-right: 10px;\n}\n\n.xr-obj-type {\n color: var(--xr-font-color2);\n}\n\n.xr-sections {\n padding-left: 0 !important;\n display: grid;\n grid-template-columns: 150px auto auto 1fr 20px 20px;\n}\n\n.xr-section-item {\n display: contents;\n}\n\n.xr-section-item input {\n display: none;\n}\n\n.xr-section-item input + label {\n color: var(--xr-disabled-color);\n}\n\n.xr-section-item input:enabled + label {\n cursor: pointer;\n color: var(--xr-font-color2);\n}\n\n.xr-section-item input:enabled + label:hover {\n color: var(--xr-font-color0);\n}\n\n.xr-section-summary {\n grid-column: 1;\n color: var(--xr-font-color2);\n font-weight: 500;\n}\n\n.xr-section-summary > span {\n display: inline-block;\n padding-left: 0.5em;\n}\n\n.xr-section-summary-in:disabled + label {\n color: var(--xr-font-color2);\n}\n\n.xr-section-summary-in + label:before {\n display: inline-block;\n content: '►';\n font-size: 11px;\n width: 15px;\n text-align: center;\n}\n\n.xr-section-summary-in:disabled + label:before {\n color: var(--xr-disabled-color);\n}\n\n.xr-section-summary-in:checked + label:before {\n content: '▼';\n}\n\n.xr-section
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fitResult"
]
},
{
"cell_type": "code",
"execution_count": 49,
"outputs": [
{
"data": {
"text/plain": "<xarray.Dataset>\nDimensions: ()\nCoordinates:\n odt_hold_time_4 float64 0.001\n runs float64 0.0\nData variables: (12/13)\n BEC_amplitude object 108.97389973368065+/-nan\n thermal_amplitude object 1679.5248259002558+/-nan\n BEC_centerx object 76.78893406629503+/-nan\n BEC_centery object 88.87734904054957+/-nan\n thermal_centerx object 78.76046091342899+/-nan\n thermal_centery object 86.70094810836741+/-nan\n ... ...\n BEC_sigmay object 5.27118321157311+/-nan\n thermal_sigmax object 24.551284336095115+/-nan\n thermal_sigmay object 19.687679247584988+/-nan\n deltax object 73.50926746007993+/-nan\n thermalAspectRatio object 0.8019001767105238+/-nan\n condensate_fraction object 0.060930375947041655+/-nan\nAttributes:\n IMAGE_SUBCLASS: IMAGE_GRAYSCALE\n IMAGE_VERSION: 1.2\n IMAGE_WHITE_IS_ZERO: 0\n x_start: 885\n x_end: 1035\n y_end: 990\n y_start: 790\n x_center: 960\n y_center: 890\n x_span: 150\n y_span: 200",
"text/html": "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n<defs>\n<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n</symbol>\n<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n</symbol>\n</defs>\n</svg>\n<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n *\n */\n\n:root {\n --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n --xr-border-color: var(--jp-border-color2, #e0e0e0);\n --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n --xr-background-color: var(--jp-layout-color0, white);\n --xr-background-color-row-even: var(--jp-layout-color1, white);\n --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n}\n\nhtml[theme=dark],\nbody[data-theme=dark],\nbody.vscode-dark {\n --xr-font-color0: rgba(255, 255, 255, 1);\n --xr-font-color2: rgba(255, 255, 255, 0.54);\n --xr-font-color3: rgba(255, 255, 255, 0.38);\n --xr-border-color: #1F1F1F;\n --xr-disabled-color: #515151;\n --xr-background-color: #111111;\n --xr-background-color-row-even: #111111;\n --xr-background-color-row-odd: #313131;\n}\n\n.xr-wrap {\n display: block !important;\n min-width: 300px;\n max-width: 700px;\n}\n\n.xr-text-repr-fallback {\n /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n display: none;\n}\n\n.xr-header {\n padding-top: 6px;\n padding-bottom: 6px;\n margin-bottom: 4px;\n border-bottom: solid 1px var(--xr-border-color);\n}\n\n.xr-header > div,\n.xr-header > ul {\n display: inline;\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.xr-obj-type,\n.xr-array-name {\n margin-left: 2px;\n margin-right: 10px;\n}\n\n.xr-obj-type {\n color: var(--xr-font-color2);\n}\n\n.xr-sections {\n padding-left: 0 !important;\n display: grid;\n grid-template-columns: 150px auto auto 1fr 20px 20px;\n}\n\n.xr-section-item {\n display: contents;\n}\n\n.xr-section-item input {\n display: none;\n}\n\n.xr-section-item input + label {\n color: var(--xr-disabled-color);\n}\n\n.xr-section-item input:enabled + label {\n cursor: pointer;\n color: var(--xr-font-color2);\n}\n\n.xr-section-item input:enabled + label:hover {\n color: var(--xr-font-color0);\n}\n\n.xr-section-summary {\n grid-column: 1;\n color: var(--xr-font-color2);\n font-weight: 500;\n}\n\n.xr-section-summary > span {\n display: inline-block;\n padding-left: 0.5em;\n}\n\n.xr-section-summary-in:disabled + label {\n color: var(--xr-font-color2);\n}\n\n.xr-section-summary-in + label:before {\n display: inline-block;\n content: '►';\n font-size: 11px;\n width: 15px;\n text-align: center;\n}\n\n.xr-section-summary-in:disabled + label:before {\n color: var(--xr-disabled-color);\n}\n\n.xr-section-summary-in:checked + label:before {\n content: '▼';\n}\n\n.xr-section
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"a = fitResult[0][0]\n",
"params = {'BEC_centerx', 'BEC_centery'}\n",
"fitAnalyser.get_fit_full_result(a)\n"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T15:32:18.477212100Z",
"start_time": "2023-07-12T15:32:18.389874200Z"
}
}
},
{
"cell_type": "code",
"execution_count": 118,
"outputs": [
{
"data": {
"text/plain": "<xarray.DataArray 'odt_hold_time_4' (odt_hold_time_4: 3)>\narray([0.001 , 0.030417, 0.925183])\nCoordinates:\n * odt_hold_time_4 (odt_hold_time_4) float64 0.001 0.03042 0.9252",
"text/html": "<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n<defs>\n<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n</symbol>\n<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n</symbol>\n</defs>\n</svg>\n<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n *\n */\n\n:root {\n --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n --xr-border-color: var(--jp-border-color2, #e0e0e0);\n --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n --xr-background-color: var(--jp-layout-color0, white);\n --xr-background-color-row-even: var(--jp-layout-color1, white);\n --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n}\n\nhtml[theme=dark],\nbody[data-theme=dark],\nbody.vscode-dark {\n --xr-font-color0: rgba(255, 255, 255, 1);\n --xr-font-color2: rgba(255, 255, 255, 0.54);\n --xr-font-color3: rgba(255, 255, 255, 0.38);\n --xr-border-color: #1F1F1F;\n --xr-disabled-color: #515151;\n --xr-background-color: #111111;\n --xr-background-color-row-even: #111111;\n --xr-background-color-row-odd: #313131;\n}\n\n.xr-wrap {\n display: block !important;\n min-width: 300px;\n max-width: 700px;\n}\n\n.xr-text-repr-fallback {\n /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n display: none;\n}\n\n.xr-header {\n padding-top: 6px;\n padding-bottom: 6px;\n margin-bottom: 4px;\n border-bottom: solid 1px var(--xr-border-color);\n}\n\n.xr-header > div,\n.xr-header > ul {\n display: inline;\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.xr-obj-type,\n.xr-array-name {\n margin-left: 2px;\n margin-right: 10px;\n}\n\n.xr-obj-type {\n color: var(--xr-font-color2);\n}\n\n.xr-sections {\n padding-left: 0 !important;\n display: grid;\n grid-template-columns: 150px auto auto 1fr 20px 20px;\n}\n\n.xr-section-item {\n display: contents;\n}\n\n.xr-section-item input {\n display: none;\n}\n\n.xr-section-item input + label {\n color: var(--xr-disabled-color);\n}\n\n.xr-section-item input:enabled + label {\n cursor: pointer;\n color: var(--xr-font-color2);\n}\n\n.xr-section-item input:enabled + label:hover {\n color: var(--xr-font-color0);\n}\n\n.xr-section-summary {\n grid-column: 1;\n color: var(--xr-font-color2);\n font-weight: 500;\n}\n\n.xr-section-summary > span {\n display: inline-block;\n padding-left: 0.5em;\n}\n\n.xr-section-summary-in:disabled + label {\n color: var(--xr-font-color2);\n}\n\n.xr-section-summary-in + label:before {\n display: inline-block;\n content: '►';\n font-size: 11px;\n width: 15px;\n text-align: center;\n}\n\n.xr-section-summary-in:disabled + label:before {\n color: var(--xr-disabled-color);\n}\n\n.xr-section-summary-in:checked + label:before {\n content: '▼';\n}\n\n.xr-section
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fitResult['odt_hold_time_4']"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-06T14:56:46.621065200Z",
"start_time": "2023-07-06T14:56:46.574693800Z"
}
}
},
{
"cell_type": "code",
"execution_count": 8,
"outputs": [],
"source": [
"def polylog(power, numerator,order):\n",
"\n",
" dataShape = numerator.shape\n",
" numerator = np.tile(numerator, (order, 1))\n",
" numerator = np.power(numerator.T, np.arange(1, order+1)).T\n",
"\n",
" denominator = np.arange(1, order+1)\n",
" denominator = np.tile(denominator, (dataShape[0], 1))\n",
" denominator = denominator.T\n",
"\n",
" data = numerator/ np.power(denominator, power)\n",
"\n",
" return np.sum(data, axis=0)"
],
"metadata": {
"collapsed": false,
"ExecuteTime": {
"end_time": "2023-07-12T13:36:07.174272600Z",
"start_time": "2023-07-12T13:36:06.777406400Z"
}
}
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [],
"metadata": {
"collapsed": false
}
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"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"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}