2079 lines
173 KiB
Plaintext
2079 lines
173 KiB
Plaintext
{
|
|
"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",
|
|
"\n",
|
|
"from uncertainties import ufloat\n",
|
|
"from uncertainties import unumpy as unp\n",
|
|
"from uncertainties import umath\n",
|
|
"\n",
|
|
"import matplotlib.pyplot as plt\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\n",
|
|
"from ToolFunction.ToolFunction import *\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": {},
|
|
"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 59281 instead\n",
|
|
" warnings.warn(\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"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-778ff951-f4cc-11ed-962c-80e82ce2fa8e</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:59281/status\" target=\"_blank\">http://127.0.0.1:59281/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;\">ee5b2908</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:59281/status\" target=\"_blank\">http://127.0.0.1:59281/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> 60\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Total memory:</strong> 55.88 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-92ff3858-7467-4cdb-985b-821ffd168aa8</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:59282\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:59281/status\" target=\"_blank\">http://127.0.0.1:59281/status</a>\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Total threads:</strong> 60\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Started:</strong> Just now\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Total memory:</strong> 55.88 GiB\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" </table>\n",
|
|
" </div>\n",
|
|
" </div>\n",
|
|
"\n",
|
|
" <details style=\"margin-left: 48px;\">\n",
|
|
" <summary style=\"margin-bottom: 20px;\">\n",
|
|
" <h3 style=\"display: inline;\">Workers</h3>\n",
|
|
" </summary>\n",
|
|
"\n",
|
|
" \n",
|
|
" <div style=\"margin-bottom: 20px;\">\n",
|
|
" <div style=\"width: 24px; height: 24px; background-color: #DBF5FF; border: 3px solid #4CC9FF; border-radius: 5px; position: absolute;\"> </div>\n",
|
|
" <div style=\"margin-left: 48px;\">\n",
|
|
" <details>\n",
|
|
" <summary>\n",
|
|
" <h4 style=\"margin-bottom: 0px; display: inline;\">Worker: 0</h4>\n",
|
|
" </summary>\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:59309\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Total threads: </strong> 10\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:59310/status\" target=\"_blank\">http://127.0.0.1:59310/status</a>\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Memory: </strong> 9.31 GiB\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Nanny: </strong> tcp://127.0.0.1:59285\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\"></td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td colspan=\"2\" style=\"text-align: left;\">\n",
|
|
" <strong>Local directory: </strong> C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-4zzx3ytb\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" </table>\n",
|
|
" </details>\n",
|
|
" </div>\n",
|
|
" </div>\n",
|
|
" \n",
|
|
" <div style=\"margin-bottom: 20px;\">\n",
|
|
" <div style=\"width: 24px; height: 24px; background-color: #DBF5FF; border: 3px solid #4CC9FF; border-radius: 5px; position: absolute;\"> </div>\n",
|
|
" <div style=\"margin-left: 48px;\">\n",
|
|
" <details>\n",
|
|
" <summary>\n",
|
|
" <h4 style=\"margin-bottom: 0px; display: inline;\">Worker: 1</h4>\n",
|
|
" </summary>\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:59321\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Total threads: </strong> 10\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:59322/status\" target=\"_blank\">http://127.0.0.1:59322/status</a>\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Memory: </strong> 9.31 GiB\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Nanny: </strong> tcp://127.0.0.1:59286\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\"></td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td colspan=\"2\" style=\"text-align: left;\">\n",
|
|
" <strong>Local directory: </strong> C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-a1vzuzts\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" </table>\n",
|
|
" </details>\n",
|
|
" </div>\n",
|
|
" </div>\n",
|
|
" \n",
|
|
" <div style=\"margin-bottom: 20px;\">\n",
|
|
" <div style=\"width: 24px; height: 24px; background-color: #DBF5FF; border: 3px solid #4CC9FF; border-radius: 5px; position: absolute;\"> </div>\n",
|
|
" <div style=\"margin-left: 48px;\">\n",
|
|
" <details>\n",
|
|
" <summary>\n",
|
|
" <h4 style=\"margin-bottom: 0px; display: inline;\">Worker: 2</h4>\n",
|
|
" </summary>\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:59314\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Total threads: </strong> 10\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:59319/status\" target=\"_blank\">http://127.0.0.1:59319/status</a>\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Memory: </strong> 9.31 GiB\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Nanny: </strong> tcp://127.0.0.1:59287\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\"></td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td colspan=\"2\" style=\"text-align: left;\">\n",
|
|
" <strong>Local directory: </strong> C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-o4dck2c3\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" </table>\n",
|
|
" </details>\n",
|
|
" </div>\n",
|
|
" </div>\n",
|
|
" \n",
|
|
" <div style=\"margin-bottom: 20px;\">\n",
|
|
" <div style=\"width: 24px; height: 24px; background-color: #DBF5FF; border: 3px solid #4CC9FF; border-radius: 5px; position: absolute;\"> </div>\n",
|
|
" <div style=\"margin-left: 48px;\">\n",
|
|
" <details>\n",
|
|
" <summary>\n",
|
|
" <h4 style=\"margin-bottom: 0px; display: inline;\">Worker: 3</h4>\n",
|
|
" </summary>\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:59312\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Total threads: </strong> 10\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:59316/status\" target=\"_blank\">http://127.0.0.1:59316/status</a>\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Memory: </strong> 9.31 GiB\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Nanny: </strong> tcp://127.0.0.1:59288\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\"></td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td colspan=\"2\" style=\"text-align: left;\">\n",
|
|
" <strong>Local directory: </strong> C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-fc2gkd9y\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" </table>\n",
|
|
" </details>\n",
|
|
" </div>\n",
|
|
" </div>\n",
|
|
" \n",
|
|
" <div style=\"margin-bottom: 20px;\">\n",
|
|
" <div style=\"width: 24px; height: 24px; background-color: #DBF5FF; border: 3px solid #4CC9FF; border-radius: 5px; position: absolute;\"> </div>\n",
|
|
" <div style=\"margin-left: 48px;\">\n",
|
|
" <details>\n",
|
|
" <summary>\n",
|
|
" <h4 style=\"margin-bottom: 0px; display: inline;\">Worker: 4</h4>\n",
|
|
" </summary>\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:59313\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Total threads: </strong> 10\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:59315/status\" target=\"_blank\">http://127.0.0.1:59315/status</a>\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Memory: </strong> 9.31 GiB\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Nanny: </strong> tcp://127.0.0.1:59289\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\"></td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td colspan=\"2\" style=\"text-align: left;\">\n",
|
|
" <strong>Local directory: </strong> C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-1653kst6\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" </table>\n",
|
|
" </details>\n",
|
|
" </div>\n",
|
|
" </div>\n",
|
|
" \n",
|
|
" <div style=\"margin-bottom: 20px;\">\n",
|
|
" <div style=\"width: 24px; height: 24px; background-color: #DBF5FF; border: 3px solid #4CC9FF; border-radius: 5px; position: absolute;\"> </div>\n",
|
|
" <div style=\"margin-left: 48px;\">\n",
|
|
" <details>\n",
|
|
" <summary>\n",
|
|
" <h4 style=\"margin-bottom: 0px; display: inline;\">Worker: 5</h4>\n",
|
|
" </summary>\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:59324\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Total threads: </strong> 10\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Dashboard: </strong> <a href=\"http://127.0.0.1:59325/status\" target=\"_blank\">http://127.0.0.1:59325/status</a>\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Memory: </strong> 9.31 GiB\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td style=\"text-align: left;\">\n",
|
|
" <strong>Nanny: </strong> tcp://127.0.0.1:59290\n",
|
|
" </td>\n",
|
|
" <td style=\"text-align: left;\"></td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <td colspan=\"2\" style=\"text-align: left;\">\n",
|
|
" <strong>Local directory: </strong> C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-r0ix07tp\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" \n",
|
|
"\n",
|
|
" </table>\n",
|
|
" </details>\n",
|
|
" </div>\n",
|
|
" </div>\n",
|
|
" \n",
|
|
"\n",
|
|
" </details>\n",
|
|
"</div>\n",
|
|
"\n",
|
|
" </details>\n",
|
|
" </div>\n",
|
|
"</div>\n",
|
|
" </details>\n",
|
|
" \n",
|
|
"\n",
|
|
" </div>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
"<Client: 'tcp://127.0.0.1:59282' processes=6 threads=60, memory=55.88 GiB>"
|
|
]
|
|
},
|
|
"execution_count": 2,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"from dask.distributed import Client\n",
|
|
"client = Client(n_workers=6, threads_per_worker=10, processes=True, memory_limit='10GB')\n",
|
|
"client"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Set global path for experiment"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"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_1\",\n",
|
|
" \"images/ODT_1_Axis_Camera/in_situ_absorption\": \"camera_2\",\n",
|
|
" \"images/ODT_2_Axis_Camera/in_situ_absorption\": \"camera_3\",\n",
|
|
"}\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"img_dir = '//DyLabNAS/Data/'\n",
|
|
"SequenceName = \"Repetition_scan\" + \"/\"\n",
|
|
"folderPath = img_dir + SequenceName + '2023/' + get_date()"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# An example for one experimental run"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Load the data"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"shotNum = \"0065\"\n",
|
|
"filePath = folderPath + \"/\" + shotNum + \"/*.h5\"\n",
|
|
"filePath = \"//DyLabNAS/Data/Evaporative_Cooling/2023/05/12/0065/*.h5\"\n",
|
|
"\n",
|
|
"dataSetDict = {\n",
|
|
" dskey[groupList[i]]: read_hdf5_file(filePath, groupList[i])\n",
|
|
" for i in [0] # range(len(groupList))\n",
|
|
"}\n",
|
|
"\n",
|
|
"dataSet = dataSetDict[\"camera_1\"]\n",
|
|
"dataSet = swap_xy(dataSet)\n",
|
|
"\n",
|
|
"scanAxis = get_scanAxis(dataSet)\n",
|
|
"\n",
|
|
"dataSet = auto_rechunk(dataSet)\n",
|
|
"\n",
|
|
"dataSet = imageAnalyser.get_absorption_images(dataSet)\n",
|
|
"\n",
|
|
"dataSet"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Calculate an plot OD images"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"imageAnalyser.center = (959, 280)\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",
|
|
"\n",
|
|
"dataSet_cropOD.plot.pcolormesh(cmap='jet', vmin=0, col=scanAxis[0], row=scanAxis[1])\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Do a 2D two-peak gaussian fit to the OD images"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Do the fit"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"fitAnalyser = FitAnalyser(\"Gaussian-2D\", fitDim=2)\n",
|
|
"\n",
|
|
"params = fitAnalyser.guess(dataSet_cropOD, dask=\"parallelized\")\n",
|
|
"fitResult = fitAnalyser.fit(dataSet_cropOD, params).load()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"fitCurve = fitAnalyser.eval(fitResult, x=np.arange(150), y=np.arange(200), dask=\"parallelized\").load()\n",
|
|
"\n",
|
|
"fitCurve.plot.pcolormesh(cmap='jet', vmin=0, col=scanAxis[0], row=scanAxis[1])"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Get the result of the fit"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"fitAnalyser.get_fit_value(fitResult)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"fitAnalyser.get_fit_std(fitResult)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"fitAnalyser.get_fit_full_result(fitResult)"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Get the Ncount"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Calculate the mean and standard deviation"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"Ncount = imageAnalyser.get_Ncount(dataSet_cropOD)\n",
|
|
"\n",
|
|
"Ncount.load()\n",
|
|
"Ncount_mean = calculate_mean(Ncount)\n",
|
|
"Ncount_std = calculate_std(Ncount)\n",
|
|
"Ncount_mean.plot.errorbar(yerr=Ncount_std)\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"### Do a 1D fit"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def gaussian(x, amplitude=1.0, center=0.0, sigma=1.0):\n",
|
|
" \"\"\"Return a 1-dimensional Gaussian function.\n",
|
|
"\n",
|
|
" gaussian(x, amplitude, center, sigma) =\n",
|
|
" (amplitude/(s2pi*sigma)) * exp(-(1.0*x-center)**2 / (2*sigma**2))\n",
|
|
"\n",
|
|
" \"\"\"\n",
|
|
" return ((amplitude/(max(1e-10, np.sqrt(2*np.pi)*sigma)))\n",
|
|
" * np.exp(-(1.0*x-center)**2 / max(1e-10, (2*sigma**2))))\n",
|
|
"\n",
|
|
"fitModel = NewFitModel(gaussian)\n",
|
|
"\n",
|
|
"fitModel.make_params()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"fitAnalyser = FitAnalyser(fitModel, fitDim=1)\n",
|
|
"\n",
|
|
"params = fitAnalyser.guess(Ncount_mean, x=\"sin_mod_freq\", dask=\"parallelized\")\n",
|
|
"fitResult = fitAnalyser.fit(Ncount_mean, params, x=\"sin_mod_freq\").load()\n",
|
|
"\n",
|
|
"plot_x = np.linspace(Ncount_mean[\"sin_mod_freq\"].min(), Ncount_mean[\"sin_mod_freq\"].max(), 100)\n",
|
|
"\n",
|
|
"fitCurve = fitAnalyser.eval(fitResult, x=plot_x, dask=\"parallelized\").load()\n",
|
|
"\n",
|
|
"fig = plt.figure()\n",
|
|
"ax = fig.gca()\n",
|
|
"\n",
|
|
"Ncount_mean.plot.errorbar(ax=ax, yerr=Ncount_std)\n",
|
|
"fitCurve.plot.errorbar(ax=ax, fmt='--g')\n",
|
|
"\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"fitCurve = fitCurve.rename(dict(x='final_amp'))\n",
|
|
"plot_dataSe = xr.combine_nested([Ncount_mean, fitCurve], ['plot'])\n",
|
|
"\n",
|
|
"fig = plt.figure()\n",
|
|
"ax = fig.gca()\n",
|
|
"plot_dataSe.sel(plot=[0, 1]).plot.errorbar(ax=ax, hue='plot', x='final_amp', fmt=['ob', '-g'])\n",
|
|
"plt.show()\n"
|
|
]
|
|
},
|
|
{
|
|
"attachments": {},
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Select data and remove bad shot"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"plot_dataSe.where( (Ncount_mean[scanAxis[0]]<2e-4) & (Ncount_mean[scanAxis[0]]>1e-4) )"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"img_dir = '//DyLabNAS/Data/'\n",
|
|
"SequenceName = \"Evaporative_Cooling\" + \"/\"\n",
|
|
"folderPath = img_dir + SequenceName + '2023/05/17'"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"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",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
|
|
"<defs>\n",
|
|
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
|
|
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
|
|
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
|
|
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
|
|
"</symbol>\n",
|
|
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
|
|
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
|
|
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
|
|
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
|
|
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
|
|
"</symbol>\n",
|
|
"</defs>\n",
|
|
"</svg>\n",
|
|
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
|
|
" *\n",
|
|
" */\n",
|
|
"\n",
|
|
":root {\n",
|
|
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
|
|
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
|
|
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
|
|
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
|
|
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
|
|
" --xr-background-color: var(--jp-layout-color0, white);\n",
|
|
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
|
|
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
|
|
"}\n",
|
|
"\n",
|
|
"html[theme=dark],\n",
|
|
"body[data-theme=dark],\n",
|
|
"body.vscode-dark {\n",
|
|
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
|
|
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
|
|
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
|
|
" --xr-border-color: #1F1F1F;\n",
|
|
" --xr-disabled-color: #515151;\n",
|
|
" --xr-background-color: #111111;\n",
|
|
" --xr-background-color-row-even: #111111;\n",
|
|
" --xr-background-color-row-odd: #313131;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-wrap {\n",
|
|
" display: block !important;\n",
|
|
" min-width: 300px;\n",
|
|
" max-width: 700px;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-text-repr-fallback {\n",
|
|
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
|
|
" display: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-header {\n",
|
|
" padding-top: 6px;\n",
|
|
" padding-bottom: 6px;\n",
|
|
" margin-bottom: 4px;\n",
|
|
" border-bottom: solid 1px var(--xr-border-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-header > div,\n",
|
|
".xr-header > ul {\n",
|
|
" display: inline;\n",
|
|
" margin-top: 0;\n",
|
|
" margin-bottom: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-obj-type,\n",
|
|
".xr-array-name {\n",
|
|
" margin-left: 2px;\n",
|
|
" margin-right: 10px;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-obj-type {\n",
|
|
" color: var(--xr-font-color2);\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-sections {\n",
|
|
" padding-left: 0 !important;\n",
|
|
" display: grid;\n",
|
|
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-item {\n",
|
|
" display: contents;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-item input {\n",
|
|
" display: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-item input + label {\n",
|
|
" color: var(--xr-disabled-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-item input:enabled + label {\n",
|
|
" cursor: pointer;\n",
|
|
" color: var(--xr-font-color2);\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-item input:enabled + label:hover {\n",
|
|
" color: var(--xr-font-color0);\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-summary {\n",
|
|
" grid-column: 1;\n",
|
|
" color: var(--xr-font-color2);\n",
|
|
" font-weight: 500;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-summary > span {\n",
|
|
" display: inline-block;\n",
|
|
" padding-left: 0.5em;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-summary-in:disabled + label {\n",
|
|
" color: var(--xr-font-color2);\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-summary-in + label:before {\n",
|
|
" display: inline-block;\n",
|
|
" content: 'â–º';\n",
|
|
" font-size: 11px;\n",
|
|
" width: 15px;\n",
|
|
" text-align: center;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-summary-in:disabled + label:before {\n",
|
|
" color: var(--xr-disabled-color);\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-summary-in:checked + label:before {\n",
|
|
" content: 'â–¼';\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-summary-in:checked + label > span {\n",
|
|
" display: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-summary,\n",
|
|
".xr-section-inline-details {\n",
|
|
" padding-top: 4px;\n",
|
|
" padding-bottom: 4px;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-inline-details {\n",
|
|
" grid-column: 2 / -1;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-details {\n",
|
|
" display: none;\n",
|
|
" grid-column: 1 / -1;\n",
|
|
" margin-bottom: 5px;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-section-summary-in:checked ~ .xr-section-details {\n",
|
|
" display: contents;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-array-wrap {\n",
|
|
" grid-column: 1 / -1;\n",
|
|
" display: grid;\n",
|
|
" grid-template-columns: 20px auto;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-array-wrap > label {\n",
|
|
" grid-column: 1;\n",
|
|
" vertical-align: top;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-preview {\n",
|
|
" color: var(--xr-font-color3);\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-array-preview,\n",
|
|
".xr-array-data {\n",
|
|
" padding: 0 5px !important;\n",
|
|
" grid-column: 2;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-array-data,\n",
|
|
".xr-array-in:checked ~ .xr-array-preview {\n",
|
|
" display: none;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-array-in:checked ~ .xr-array-data,\n",
|
|
".xr-array-preview {\n",
|
|
" display: inline-block;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-dim-list {\n",
|
|
" display: inline-block !important;\n",
|
|
" list-style: none;\n",
|
|
" padding: 0 !important;\n",
|
|
" margin: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-dim-list li {\n",
|
|
" display: inline-block;\n",
|
|
" padding: 0;\n",
|
|
" margin: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-dim-list:before {\n",
|
|
" content: '(';\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-dim-list:after {\n",
|
|
" content: ')';\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-dim-list li:not(:last-child):after {\n",
|
|
" content: ',';\n",
|
|
" padding-right: 5px;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-has-index {\n",
|
|
" font-weight: bold;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-list,\n",
|
|
".xr-var-item {\n",
|
|
" display: contents;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-item > div,\n",
|
|
".xr-var-item label,\n",
|
|
".xr-var-item > .xr-var-name span {\n",
|
|
" background-color: var(--xr-background-color-row-even);\n",
|
|
" margin-bottom: 0;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-item > .xr-var-name:hover span {\n",
|
|
" padding-right: 5px;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-list > li:nth-child(odd) > div,\n",
|
|
".xr-var-list > li:nth-child(odd) > label,\n",
|
|
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
|
|
" background-color: var(--xr-background-color-row-odd);\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-name {\n",
|
|
" grid-column: 1;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-dims {\n",
|
|
" grid-column: 2;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-dtype {\n",
|
|
" grid-column: 3;\n",
|
|
" text-align: right;\n",
|
|
" color: var(--xr-font-color2);\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-preview {\n",
|
|
" grid-column: 4;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-index-preview {\n",
|
|
" grid-column: 2 / 5;\n",
|
|
" color: var(--xr-font-color2);\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-name,\n",
|
|
".xr-var-dims,\n",
|
|
".xr-var-dtype,\n",
|
|
".xr-preview,\n",
|
|
".xr-attrs dt {\n",
|
|
" white-space: nowrap;\n",
|
|
" overflow: hidden;\n",
|
|
" text-overflow: ellipsis;\n",
|
|
" padding-right: 10px;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-name:hover,\n",
|
|
".xr-var-dims:hover,\n",
|
|
".xr-var-dtype:hover,\n",
|
|
".xr-attrs dt:hover {\n",
|
|
" overflow: visible;\n",
|
|
" width: auto;\n",
|
|
" z-index: 1;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-attrs,\n",
|
|
".xr-var-data,\n",
|
|
".xr-index-data {\n",
|
|
" display: none;\n",
|
|
" background-color: var(--xr-background-color) !important;\n",
|
|
" padding-bottom: 5px !important;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
|
|
".xr-var-data-in:checked ~ .xr-var-data,\n",
|
|
".xr-index-data-in:checked ~ .xr-index-data {\n",
|
|
" display: block;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-data > table {\n",
|
|
" float: right;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-var-name span,\n",
|
|
".xr-var-data,\n",
|
|
".xr-index-name div,\n",
|
|
".xr-index-data,\n",
|
|
".xr-attrs {\n",
|
|
" padding-left: 25px !important;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-attrs,\n",
|
|
".xr-var-attrs,\n",
|
|
".xr-var-data,\n",
|
|
".xr-index-data {\n",
|
|
" grid-column: 1 / -1;\n",
|
|
"}\n",
|
|
"\n",
|
|
"dl.xr-attrs {\n",
|
|
" padding: 0;\n",
|
|
" margin: 0;\n",
|
|
" display: grid;\n",
|
|
" grid-template-columns: 125px auto;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-attrs dt,\n",
|
|
".xr-attrs dd {\n",
|
|
" padding: 0;\n",
|
|
" margin: 0;\n",
|
|
" float: left;\n",
|
|
" padding-right: 10px;\n",
|
|
" width: auto;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-attrs dt {\n",
|
|
" font-weight: normal;\n",
|
|
" grid-column: 1;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-attrs dt:hover span {\n",
|
|
" display: inline-block;\n",
|
|
" background: var(--xr-background-color);\n",
|
|
" padding-right: 10px;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-attrs dd {\n",
|
|
" grid-column: 2;\n",
|
|
" white-space: pre-wrap;\n",
|
|
" word-break: break-all;\n",
|
|
"}\n",
|
|
"\n",
|
|
".xr-icon-database,\n",
|
|
".xr-icon-file-text2,\n",
|
|
".xr-no-icon {\n",
|
|
" display: inline-block;\n",
|
|
" vertical-align: middle;\n",
|
|
" width: 1em;\n",
|
|
" height: 1.5em !important;\n",
|
|
" stroke-width: 0;\n",
|
|
" stroke: currentColor;\n",
|
|
" fill: currentColor;\n",
|
|
"}\n",
|
|
"</style><pre class='xr-text-repr-fallback'><xarray.Dataset>\n",
|
|
"Dimensions: (carrier_freq: 30, runs: 2, x: 1200, y: 1920)\n",
|
|
"Coordinates:\n",
|
|
" * carrier_freq (carrier_freq) float64 4.21 4.212 4.214 ... 4.264 4.266 4.268\n",
|
|
" * runs (runs) float64 0.0 1.0\n",
|
|
"Dimensions without coordinates: x, y\n",
|
|
"Data variables:\n",
|
|
" atoms (carrier_freq, runs, x, y) float64 dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray>\n",
|
|
" background (carrier_freq, runs, x, y) float64 dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray>\n",
|
|
" dark (carrier_freq, runs, x, y) float64 dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray>\n",
|
|
" shotNum (carrier_freq, runs) float64 dask.array<chunksize=(30, 2), meta=np.ndarray>\n",
|
|
" OD (carrier_freq, runs, x, y) float64 dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray>\n",
|
|
"Attributes: (12/120)\n",
|
|
" TOF_free: 0.01\n",
|
|
" abs_img_freq: 110.858\n",
|
|
" absorption_imaging_flag: True\n",
|
|
" backup_data: True\n",
|
|
" blink_off_time: 0.001\n",
|
|
" blink_on_time: 0.001\n",
|
|
" ... ...\n",
|
|
" z_offset: 0.189\n",
|
|
" z_offset_img: 0.189\n",
|
|
" carrier_freq: [4.21 4.212 4.214 4.216 4.218 4.22 4...\n",
|
|
" runs: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0...\n",
|
|
" scanAxis: ['carrier_freq' 'runs']\n",
|
|
" scanAxisLength: [58. 58.]</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-36eb2a9e-2860-4378-a119-078fa3ec7cb4' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-36eb2a9e-2860-4378-a119-078fa3ec7cb4' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>carrier_freq</span>: 30</li><li><span class='xr-has-index'>runs</span>: 2</li><li><span>x</span>: 1200</li><li><span>y</span>: 1920</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-38fe2b7a-9b1d-4149-bdb2-610b093bbbea' class='xr-section-summary-in' type='checkbox' checked><label for='section-38fe2b7a-9b1d-4149-bdb2-610b093bbbea' class='xr-section-summary' >Coordinates: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>carrier_freq</span></div><div class='xr-var-dims'>(carrier_freq)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>4.21 4.212 4.214 ... 4.266 4.268</div><input id='attrs-8dd0d756-8076-4b89-a044-1e0181b9f68a' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-8dd0d756-8076-4b89-a044-1e0181b9f68a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-3179e29b-052e-44f1-99a9-7e01a7c1c71a' class='xr-var-data-in' type='checkbox'><label for='data-3179e29b-052e-44f1-99a9-7e01a7c1c71a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([4.21 , 4.212, 4.214, 4.216, 4.218, 4.22 , 4.222, 4.224, 4.226, 4.228,\n",
|
|
" 4.23 , 4.232, 4.234, 4.236, 4.238, 4.24 , 4.242, 4.244, 4.246, 4.248,\n",
|
|
" 4.25 , 4.252, 4.254, 4.256, 4.258, 4.26 , 4.262, 4.264, 4.266, 4.268])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>runs</span></div><div class='xr-var-dims'>(runs)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.0 1.0</div><input id='attrs-be9a5907-d9a8-4443-b9a2-72df64ad8089' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-be9a5907-d9a8-4443-b9a2-72df64ad8089' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-90bb0a37-3672-4a43-856e-8fb94df73855' class='xr-var-data-in' type='checkbox'><label for='data-90bb0a37-3672-4a43-856e-8fb94df73855' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0., 1.])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-8fa00fd9-fc56-49f2-ba42-b7a82a05d8ad' class='xr-section-summary-in' type='checkbox' checked><label for='section-8fa00fd9-fc56-49f2-ba42-b7a82a05d8ad' class='xr-section-summary' >Data variables: <span>(5)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>atoms</span></div><div class='xr-var-dims'>(carrier_freq, runs, x, y)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray></div><input id='attrs-d3794105-4f60-4522-b3d2-622595cba537' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-d3794105-4f60-4522-b3d2-622595cba537' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-228d680c-daac-4e93-b845-93ac45682436' class='xr-var-data-in' type='checkbox'><label for='data-228d680c-daac-4e93-b845-93ac45682436' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>IMAGE_SUBCLASS :</span></dt><dd>IMAGE_GRAYSCALE</dd><dt><span>IMAGE_VERSION :</span></dt><dd>1.2</dd><dt><span>IMAGE_WHITE_IS_ZERO :</span></dt><dd>0</dd></dl></div><div class='xr-var-data'><table>\n",
|
|
" <tr>\n",
|
|
" <td>\n",
|
|
" <table style=\"border-collapse: collapse;\">\n",
|
|
" <thead>\n",
|
|
" <tr>\n",
|
|
" <td> </td>\n",
|
|
" <th> Array </th>\n",
|
|
" <th> Chunk </th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" \n",
|
|
" <tr>\n",
|
|
" <th> Bytes </th>\n",
|
|
" <td> 1.03 GiB </td>\n",
|
|
" <td> 105.47 MiB </td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
" <tr>\n",
|
|
" <th> Shape </th>\n",
|
|
" <td> (30, 2, 1200, 1920) </td>\n",
|
|
" <td> (3, 2, 1200, 1920) </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th> Dask graph </th>\n",
|
|
" <td colspan=\"2\"> 10 chunks in 195 graph layers </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th> Data type </th>\n",
|
|
" <td colspan=\"2\"> float64 numpy.ndarray </td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
" </table>\n",
|
|
" </td>\n",
|
|
" <td>\n",
|
|
" <svg width=\"378\" height=\"139\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"0\" y1=\"0\" x2=\"27\" y2=\"0\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"0\" y1=\"25\" x2=\"27\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"2\" y1=\"0\" x2=\"2\" y2=\"25\" />\n",
|
|
" <line x1=\"5\" y1=\"0\" x2=\"5\" y2=\"25\" />\n",
|
|
" <line x1=\"8\" y1=\"0\" x2=\"8\" y2=\"25\" />\n",
|
|
" <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n",
|
|
" <line x1=\"13\" y1=\"0\" x2=\"13\" y2=\"25\" />\n",
|
|
" <line x1=\"16\" y1=\"0\" x2=\"16\" y2=\"25\" />\n",
|
|
" <line x1=\"19\" y1=\"0\" x2=\"19\" y2=\"25\" />\n",
|
|
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n",
|
|
" <line x1=\"24\" y1=\"0\" x2=\"24\" y2=\"25\" />\n",
|
|
" <line x1=\"27\" y1=\"0\" x2=\"27\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"0.0,0.0 27.675387197907465,0.0 27.675387197907465,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Text -->\n",
|
|
" <text x=\"13.837694\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >30</text>\n",
|
|
" <text x=\"47.675387\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,47.675387,12.706308)\">1</text>\n",
|
|
"\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"111\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"97\" y1=\"75\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"97\" y2=\"75\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"97.0,0.0 111.9485979497544,14.948597949754403 111.9485979497544,89.9485979497544 97.0,75.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"217\" y2=\"0\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"111\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"217\" y1=\"0\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"97.0,0.0 217.0,0.0 231.9485979497544,14.948597949754403 111.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"89\" x2=\"231\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"231\" y1=\"14\" x2=\"231\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"111.9485979497544,14.948597949754403 231.9485979497544,14.948597949754403 231.9485979497544,89.9485979497544 111.9485979497544,89.9485979497544\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Text -->\n",
|
|
" <text x=\"171.948598\" y=\"109.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1920</text>\n",
|
|
" <text x=\"251.948598\" y=\"52.448598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,251.948598,52.448598)\">1200</text>\n",
|
|
" <text x=\"94.474299\" y=\"102.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,94.474299,102.474299)\">2</text>\n",
|
|
"</svg>\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>background</span></div><div class='xr-var-dims'>(carrier_freq, runs, x, y)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray></div><input id='attrs-4cb9bac4-256b-4ab9-b5a9-e00cb2d9a254' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-4cb9bac4-256b-4ab9-b5a9-e00cb2d9a254' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-31eeeec9-413f-49b3-b866-04dc48aaa284' class='xr-var-data-in' type='checkbox'><label for='data-31eeeec9-413f-49b3-b866-04dc48aaa284' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>IMAGE_SUBCLASS :</span></dt><dd>IMAGE_GRAYSCALE</dd><dt><span>IMAGE_VERSION :</span></dt><dd>1.2</dd><dt><span>IMAGE_WHITE_IS_ZERO :</span></dt><dd>0</dd></dl></div><div class='xr-var-data'><table>\n",
|
|
" <tr>\n",
|
|
" <td>\n",
|
|
" <table style=\"border-collapse: collapse;\">\n",
|
|
" <thead>\n",
|
|
" <tr>\n",
|
|
" <td> </td>\n",
|
|
" <th> Array </th>\n",
|
|
" <th> Chunk </th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" \n",
|
|
" <tr>\n",
|
|
" <th> Bytes </th>\n",
|
|
" <td> 1.03 GiB </td>\n",
|
|
" <td> 105.47 MiB </td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
" <tr>\n",
|
|
" <th> Shape </th>\n",
|
|
" <td> (30, 2, 1200, 1920) </td>\n",
|
|
" <td> (3, 2, 1200, 1920) </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th> Dask graph </th>\n",
|
|
" <td colspan=\"2\"> 10 chunks in 195 graph layers </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th> Data type </th>\n",
|
|
" <td colspan=\"2\"> float64 numpy.ndarray </td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
" </table>\n",
|
|
" </td>\n",
|
|
" <td>\n",
|
|
" <svg width=\"378\" height=\"139\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"0\" y1=\"0\" x2=\"27\" y2=\"0\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"0\" y1=\"25\" x2=\"27\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"2\" y1=\"0\" x2=\"2\" y2=\"25\" />\n",
|
|
" <line x1=\"5\" y1=\"0\" x2=\"5\" y2=\"25\" />\n",
|
|
" <line x1=\"8\" y1=\"0\" x2=\"8\" y2=\"25\" />\n",
|
|
" <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n",
|
|
" <line x1=\"13\" y1=\"0\" x2=\"13\" y2=\"25\" />\n",
|
|
" <line x1=\"16\" y1=\"0\" x2=\"16\" y2=\"25\" />\n",
|
|
" <line x1=\"19\" y1=\"0\" x2=\"19\" y2=\"25\" />\n",
|
|
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n",
|
|
" <line x1=\"24\" y1=\"0\" x2=\"24\" y2=\"25\" />\n",
|
|
" <line x1=\"27\" y1=\"0\" x2=\"27\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"0.0,0.0 27.675387197907465,0.0 27.675387197907465,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Text -->\n",
|
|
" <text x=\"13.837694\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >30</text>\n",
|
|
" <text x=\"47.675387\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,47.675387,12.706308)\">1</text>\n",
|
|
"\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"111\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"97\" y1=\"75\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"97\" y2=\"75\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"97.0,0.0 111.9485979497544,14.948597949754403 111.9485979497544,89.9485979497544 97.0,75.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"217\" y2=\"0\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"111\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"217\" y1=\"0\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"97.0,0.0 217.0,0.0 231.9485979497544,14.948597949754403 111.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"89\" x2=\"231\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"231\" y1=\"14\" x2=\"231\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"111.9485979497544,14.948597949754403 231.9485979497544,14.948597949754403 231.9485979497544,89.9485979497544 111.9485979497544,89.9485979497544\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Text -->\n",
|
|
" <text x=\"171.948598\" y=\"109.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1920</text>\n",
|
|
" <text x=\"251.948598\" y=\"52.448598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,251.948598,52.448598)\">1200</text>\n",
|
|
" <text x=\"94.474299\" y=\"102.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,94.474299,102.474299)\">2</text>\n",
|
|
"</svg>\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>dark</span></div><div class='xr-var-dims'>(carrier_freq, runs, x, y)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray></div><input id='attrs-07c66865-5793-4d2f-91c0-f042922ceaf9' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-07c66865-5793-4d2f-91c0-f042922ceaf9' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-9183a53c-bcdf-4652-8a64-492896a8068f' class='xr-var-data-in' type='checkbox'><label for='data-9183a53c-bcdf-4652-8a64-492896a8068f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>IMAGE_SUBCLASS :</span></dt><dd>IMAGE_GRAYSCALE</dd><dt><span>IMAGE_VERSION :</span></dt><dd>1.2</dd><dt><span>IMAGE_WHITE_IS_ZERO :</span></dt><dd>0</dd></dl></div><div class='xr-var-data'><table>\n",
|
|
" <tr>\n",
|
|
" <td>\n",
|
|
" <table style=\"border-collapse: collapse;\">\n",
|
|
" <thead>\n",
|
|
" <tr>\n",
|
|
" <td> </td>\n",
|
|
" <th> Array </th>\n",
|
|
" <th> Chunk </th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" \n",
|
|
" <tr>\n",
|
|
" <th> Bytes </th>\n",
|
|
" <td> 1.03 GiB </td>\n",
|
|
" <td> 105.47 MiB </td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
" <tr>\n",
|
|
" <th> Shape </th>\n",
|
|
" <td> (30, 2, 1200, 1920) </td>\n",
|
|
" <td> (3, 2, 1200, 1920) </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th> Dask graph </th>\n",
|
|
" <td colspan=\"2\"> 10 chunks in 195 graph layers </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th> Data type </th>\n",
|
|
" <td colspan=\"2\"> float64 numpy.ndarray </td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
" </table>\n",
|
|
" </td>\n",
|
|
" <td>\n",
|
|
" <svg width=\"378\" height=\"139\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"0\" y1=\"0\" x2=\"27\" y2=\"0\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"0\" y1=\"25\" x2=\"27\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"2\" y1=\"0\" x2=\"2\" y2=\"25\" />\n",
|
|
" <line x1=\"5\" y1=\"0\" x2=\"5\" y2=\"25\" />\n",
|
|
" <line x1=\"8\" y1=\"0\" x2=\"8\" y2=\"25\" />\n",
|
|
" <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n",
|
|
" <line x1=\"13\" y1=\"0\" x2=\"13\" y2=\"25\" />\n",
|
|
" <line x1=\"16\" y1=\"0\" x2=\"16\" y2=\"25\" />\n",
|
|
" <line x1=\"19\" y1=\"0\" x2=\"19\" y2=\"25\" />\n",
|
|
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n",
|
|
" <line x1=\"24\" y1=\"0\" x2=\"24\" y2=\"25\" />\n",
|
|
" <line x1=\"27\" y1=\"0\" x2=\"27\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"0.0,0.0 27.675387197907465,0.0 27.675387197907465,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Text -->\n",
|
|
" <text x=\"13.837694\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >30</text>\n",
|
|
" <text x=\"47.675387\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,47.675387,12.706308)\">1</text>\n",
|
|
"\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"111\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"97\" y1=\"75\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"97\" y2=\"75\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"97.0,0.0 111.9485979497544,14.948597949754403 111.9485979497544,89.9485979497544 97.0,75.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"217\" y2=\"0\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"111\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"217\" y1=\"0\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"97.0,0.0 217.0,0.0 231.9485979497544,14.948597949754403 111.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"89\" x2=\"231\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"231\" y1=\"14\" x2=\"231\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"111.9485979497544,14.948597949754403 231.9485979497544,14.948597949754403 231.9485979497544,89.9485979497544 111.9485979497544,89.9485979497544\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Text -->\n",
|
|
" <text x=\"171.948598\" y=\"109.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1920</text>\n",
|
|
" <text x=\"251.948598\" y=\"52.448598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,251.948598,52.448598)\">1200</text>\n",
|
|
" <text x=\"94.474299\" y=\"102.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,94.474299,102.474299)\">2</text>\n",
|
|
"</svg>\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>shotNum</span></div><div class='xr-var-dims'>(carrier_freq, runs)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(30, 2), meta=np.ndarray></div><input id='attrs-04a894a2-dc31-47f5-9e0f-cea052e9dc38' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-04a894a2-dc31-47f5-9e0f-cea052e9dc38' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c7e95610-337c-49c5-adf1-d75c85c52218' class='xr-var-data-in' type='checkbox'><label for='data-c7e95610-337c-49c5-adf1-d75c85c52218' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n",
|
|
" <tr>\n",
|
|
" <td>\n",
|
|
" <table style=\"border-collapse: collapse;\">\n",
|
|
" <thead>\n",
|
|
" <tr>\n",
|
|
" <td> </td>\n",
|
|
" <th> Array </th>\n",
|
|
" <th> Chunk </th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" \n",
|
|
" <tr>\n",
|
|
" <th> Bytes </th>\n",
|
|
" <td> 480 B </td>\n",
|
|
" <td> 480 B </td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
" <tr>\n",
|
|
" <th> Shape </th>\n",
|
|
" <td> (30, 2) </td>\n",
|
|
" <td> (30, 2) </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th> Dask graph </th>\n",
|
|
" <td colspan=\"2\"> 1 chunks in 1 graph layer </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th> Data type </th>\n",
|
|
" <td colspan=\"2\"> float64 numpy.ndarray </td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
" </table>\n",
|
|
" </td>\n",
|
|
" <td>\n",
|
|
" <svg width=\"86\" height=\"170\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"0\" y1=\"0\" x2=\"36\" y2=\"0\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"0\" y1=\"120\" x2=\"36\" y2=\"120\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"120\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"36\" y1=\"0\" x2=\"36\" y2=\"120\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"0.0,0.0 36.24782989210401,0.0 36.24782989210401,120.0 0.0,120.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Text -->\n",
|
|
" <text x=\"18.123915\" y=\"140.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >2</text>\n",
|
|
" <text x=\"56.247830\" y=\"60.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,56.247830,60.000000)\">30</text>\n",
|
|
"</svg>\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>OD</span></div><div class='xr-var-dims'>(carrier_freq, runs, x, y)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray></div><input id='attrs-97717c63-4481-42a9-9c36-6dc30ea8ffb1' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-97717c63-4481-42a9-9c36-6dc30ea8ffb1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4f3b27de-c1ab-401e-88fe-eba7390e8ebf' class='xr-var-data-in' type='checkbox'><label for='data-4f3b27de-c1ab-401e-88fe-eba7390e8ebf' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>IMAGE_SUBCLASS :</span></dt><dd>IMAGE_GRAYSCALE</dd><dt><span>IMAGE_VERSION :</span></dt><dd>1.2</dd><dt><span>IMAGE_WHITE_IS_ZERO :</span></dt><dd>0</dd></dl></div><div class='xr-var-data'><table>\n",
|
|
" <tr>\n",
|
|
" <td>\n",
|
|
" <table style=\"border-collapse: collapse;\">\n",
|
|
" <thead>\n",
|
|
" <tr>\n",
|
|
" <td> </td>\n",
|
|
" <th> Array </th>\n",
|
|
" <th> Chunk </th>\n",
|
|
" </tr>\n",
|
|
" </thead>\n",
|
|
" <tbody>\n",
|
|
" \n",
|
|
" <tr>\n",
|
|
" <th> Bytes </th>\n",
|
|
" <td> 1.03 GiB </td>\n",
|
|
" <td> 105.47 MiB </td>\n",
|
|
" </tr>\n",
|
|
" \n",
|
|
" <tr>\n",
|
|
" <th> Shape </th>\n",
|
|
" <td> (30, 2, 1200, 1920) </td>\n",
|
|
" <td> (3, 2, 1200, 1920) </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th> Dask graph </th>\n",
|
|
" <td colspan=\"2\"> 10 chunks in 571 graph layers </td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th> Data type </th>\n",
|
|
" <td colspan=\"2\"> float64 numpy.ndarray </td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
" </table>\n",
|
|
" </td>\n",
|
|
" <td>\n",
|
|
" <svg width=\"378\" height=\"139\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"0\" y1=\"0\" x2=\"27\" y2=\"0\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"0\" y1=\"25\" x2=\"27\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"2\" y1=\"0\" x2=\"2\" y2=\"25\" />\n",
|
|
" <line x1=\"5\" y1=\"0\" x2=\"5\" y2=\"25\" />\n",
|
|
" <line x1=\"8\" y1=\"0\" x2=\"8\" y2=\"25\" />\n",
|
|
" <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n",
|
|
" <line x1=\"13\" y1=\"0\" x2=\"13\" y2=\"25\" />\n",
|
|
" <line x1=\"16\" y1=\"0\" x2=\"16\" y2=\"25\" />\n",
|
|
" <line x1=\"19\" y1=\"0\" x2=\"19\" y2=\"25\" />\n",
|
|
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n",
|
|
" <line x1=\"24\" y1=\"0\" x2=\"24\" y2=\"25\" />\n",
|
|
" <line x1=\"27\" y1=\"0\" x2=\"27\" y2=\"25\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"0.0,0.0 27.675387197907465,0.0 27.675387197907465,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Text -->\n",
|
|
" <text x=\"13.837694\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >30</text>\n",
|
|
" <text x=\"47.675387\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,47.675387,12.706308)\">1</text>\n",
|
|
"\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"111\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"97\" y1=\"75\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"97\" y2=\"75\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"97.0,0.0 111.9485979497544,14.948597949754403 111.9485979497544,89.9485979497544 97.0,75.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"217\" y2=\"0\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"97\" y1=\"0\" x2=\"111\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"217\" y1=\"0\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"97.0,0.0 217.0,0.0 231.9485979497544,14.948597949754403 111.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Horizontal lines -->\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"231\" y2=\"14\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"111\" y1=\"89\" x2=\"231\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Vertical lines -->\n",
|
|
" <line x1=\"111\" y1=\"14\" x2=\"111\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
" <line x1=\"231\" y1=\"14\" x2=\"231\" y2=\"89\" style=\"stroke-width:2\" />\n",
|
|
"\n",
|
|
" <!-- Colored Rectangle -->\n",
|
|
" <polygon points=\"111.9485979497544,14.948597949754403 231.9485979497544,14.948597949754403 231.9485979497544,89.9485979497544 111.9485979497544,89.9485979497544\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
|
|
"\n",
|
|
" <!-- Text -->\n",
|
|
" <text x=\"171.948598\" y=\"109.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1920</text>\n",
|
|
" <text x=\"251.948598\" y=\"52.448598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,251.948598,52.448598)\">1200</text>\n",
|
|
" <text x=\"94.474299\" y=\"102.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,94.474299,102.474299)\">2</text>\n",
|
|
"</svg>\n",
|
|
" </td>\n",
|
|
" </tr>\n",
|
|
"</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-1d9b1315-356b-4c14-860b-21ec537aa8d0' class='xr-section-summary-in' type='checkbox' ><label for='section-1d9b1315-356b-4c14-860b-21ec537aa8d0' class='xr-section-summary' >Indexes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>carrier_freq</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-e051c7f3-09d6-427c-97bc-12e71afb370b' class='xr-index-data-in' type='checkbox'/><label for='index-e051c7f3-09d6-427c-97bc-12e71afb370b' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([ 4.21, 4.212, 4.214, 4.216, 4.218, 4.22, 4.222, 4.224, 4.226,\n",
|
|
" 4.228, 4.23, 4.232, 4.234, 4.236, 4.238, 4.24, 4.242, 4.244,\n",
|
|
" 4.246, 4.248, 4.25, 4.252, 4.254, 4.256, 4.258, 4.26, 4.262,\n",
|
|
" 4.264, 4.266, 4.268],\n",
|
|
" dtype='float64', name='carrier_freq'))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>runs</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-7cce0716-790e-4e08-bcfb-78053bf38b35' class='xr-index-data-in' type='checkbox'/><label for='index-7cce0716-790e-4e08-bcfb-78053bf38b35' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Float64Index([0.0, 1.0], dtype='float64', name='runs'))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-05f98e90-5848-47e3-92f6-458dc5e89589' class='xr-section-summary-in' type='checkbox' ><label for='section-05f98e90-5848-47e3-92f6-458dc5e89589' class='xr-section-summary' >Attributes: <span>(120)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>TOF_free :</span></dt><dd>0.01</dd><dt><span>abs_img_freq :</span></dt><dd>110.858</dd><dt><span>absorption_imaging_flag :</span></dt><dd>True</dd><dt><span>backup_data :</span></dt><dd>True</dd><dt><span>blink_off_time :</span></dt><dd>0.001</dd><dt><span>blink_on_time :</span></dt><dd>0.001</dd><dt><span>c_duration :</span></dt><dd>0.2</dd><dt><span>carrier_amp :</span></dt><dd>3</dd><dt><span>carrier_offset :</span></dt><dd>0</dd><dt><span>carrier_phase :</span></dt><dd>0</dd><dt><span>channel_in_use :</span></dt><dd>1</dd><dt><span>cmot_final_current :</span></dt><dd>0.65</dd><dt><span>cmot_hold :</span></dt><dd>0.06</dd><dt><span>cmot_initial_current :</span></dt><dd>0.18</dd><dt><span>compX_current :</span></dt><dd>0.005</dd><dt><span>compX_current_sg :</span></dt><dd>0</dd><dt><span>compX_final_current :</span></dt><dd>0.005</dd><dt><span>compX_initial_current :</span></dt><dd>0.005</dd><dt><span>compY_current :</span></dt><dd>0</dd><dt><span>compY_current_sg :</span></dt><dd>0</dd><dt><span>compY_final_current :</span></dt><dd>0.0</dd><dt><span>compY_initial_current :</span></dt><dd>0</dd><dt><span>compZ_current :</span></dt><dd>0</dd><dt><span>compZ_current_sg :</span></dt><dd>0.189</dd><dt><span>compZ_final_current :</span></dt><dd>0.268</dd><dt><span>compZ_initial_current :</span></dt><dd>0</dd><dt><span>default_camera :</span></dt><dd>0</dd><dt><span>deltaf :</span></dt><dd>nan</dd><dt><span>evap_1_arm_1_final_pow :</span></dt><dd>0.35</dd><dt><span>evap_1_arm_1_mod_depth_final :</span></dt><dd>0</dd><dt><span>evap_1_arm_1_mod_depth_initial :</span></dt><dd>1.0</dd><dt><span>evap_1_arm_1_mod_ramp_duration :</span></dt><dd>1.15</dd><dt><span>evap_1_arm_1_pow_ramp_duration :</span></dt><dd>1.65</dd><dt><span>evap_1_arm_1_start_pow :</span></dt><dd>7</dd><dt><span>evap_1_arm_2_final_pow :</span></dt><dd>5</dd><dt><span>evap_1_arm_2_ramp_duration :</span></dt><dd>0.5</dd><dt><span>evap_1_arm_2_start_pow :</span></dt><dd>0</dd><dt><span>evap_1_mod_ramp_trunc_value :</span></dt><dd>1</dd><dt><span>evap_1_pow_ramp_trunc_value :</span></dt><dd>1.0</dd><dt><span>evap_1_rate_constant_1 :</span></dt><dd>0.525</dd><dt><span>evap_1_rate_constant_2 :</span></dt><dd>0.51</dd><dt><span>evap_2_arm_1_final_pow :</span></dt><dd>0.1</dd><dt><span>evap_2_arm_1_start_pow :</span></dt><dd>0.35</dd><dt><span>evap_2_arm_2_final_pow :</span></dt><dd>1.71</dd><dt><span>evap_2_arm_2_start_pow :</span></dt><dd>5</dd><dt><span>evap_2_ramp_duration :</span></dt><dd>0.5</dd><dt><span>evap_2_ramp_trunc_value :</span></dt><dd>1.0</dd><dt><span>evap_2_rate_constant_1 :</span></dt><dd>0.37</dd><dt><span>evap_2_rate_constant_2 :</span></dt><dd>0.71</dd><dt><span>evap_3_arm_1_final_pow :</span></dt><dd>0.1038</dd><dt><span>evap_3_arm_1_mod_depth_final :</span></dt><dd>0.43</dd><dt><span>evap_3_arm_1_mod_depth_initial :</span></dt><dd>0</dd><dt><span>evap_3_arm_1_start_pow :</span></dt><dd>0.1</dd><dt><span>evap_3_ramp_duration :</span></dt><dd>0.1</dd><dt><span>evap_3_ramp_trunc_value :</span></dt><dd>1.0</dd><dt><span>evap_3_rate_constant_1 :</span></dt><dd>-0.879</dd><dt><span>evap_3_rate_constant_2 :</span></dt><dd>-0.297</dd><dt><span>final_amp :</span></dt><dd>0.000105</dd><dt><span>final_freq :</span></dt><dd>104.0</dd><dt><span>final_pow_1 :</span></dt><dd>0.1038</dd><dt><span>final_pow_2 :</span></dt><dd>0.09</dd><dt><span>gradCoil_current :</span></dt><dd>0.18</dd><dt><span>gradCoil_current_sg :</span></dt><dd>0</dd><dt><span>imaging_method :</span></dt><dd>in_situ_absorption</dd><dt><span>imaging_pulse_duration :</span></dt><dd>2.5e-05</dd><dt><span>imaging_wavelength :</span></dt><dd>4.21291e-07</dd><dt><span>initial_amp :</span></dt><dd>0.62</dd><dt><span>initial_freq :</span></dt><dd>102.13</dd><dt><span>mod_depth_fin :</span></dt><dd>0.43</dd><dt><span>mod_depth_ini :</span></dt><dd>0</dd><dt><span>mod_depth_initial :</span></dt><dd>1.0</dd><dt><span>mot_3d_amp :</span></dt><dd>0.62</dd><dt><span>mot_3d_camera_trigger_duration :</span></dt><dd>0.00025</dd><dt><span>mot_3d_freq :</span></dt><dd>102.13</dd><dt><span>mot_load_duration :</span></dt><dd>2</dd><dt><span>odt_axis_camera_trigger_duration :</span></dt><dd>0.002</dd><dt><span>odt_hold_time_1 :</span></dt><dd>0.01</dd><dt><span>odt_hold_time_2 :</span></dt><dd>0.1</dd><dt><span>odt_hold_time_3 :</span></dt><dd>0.1</dd><dt><span>odt_hold_time_4 :</span></dt><dd>0.5</dd><dt><span>odt_hold_time_5 :</span></dt><dd>0.01</dd><dt><span>operation_mode :</span></dt><dd>BASIC</dd><dt><span>pow_arm_1 :</span></dt><dd>7</dd><dt><span>pow_arm_2 :</span></dt><dd>0</dd><dt><span>pulse_delay :</span></dt><dd>8e-05</dd><dt><span>pulse_width :</span></dt><dd>0.002</dd><dt><span>push_amp :</span></dt><dd>0.16</dd><dt><span>push_freq :</span></dt><dd>102.7</dd><dt><span>ramp_duration :</span></dt><dd>1</dd><dt><span>recomp_ramp_duration :</span></dt><dd>0.5</dd><dt><span>recomp_ramp_pow_fin_arm_1 :</span></dt><dd>0.1038</dd><dt><span>recomp_ramp_pow_fin_arm_2 :</span></dt><dd>1.71</dd><dt><span>recomp_ramp_pow_ini_arm_1 :</span></dt><dd>0.1038</dd><dt><span>recomp_ramp_pow_ini_arm_2 :</span></dt><dd>1.71</dd><dt><span>save_results :</span></dt><dd>False</dd><dt><span>sin_mod_amplitude :</span></dt><dd>0.00519</dd><dt><span>sin_mod_dc_offset :</span></dt><dd>0.1038</dd><dt><span>sin_mod_duration :</span></dt><dd>nan</dd><dt><span>sin_mod_freq :</span></dt><dd>nan</dd><dt><span>sin_mod_phase :</span></dt><dd>0.0</dd><dt><span>start_pow_1 :</span></dt><dd>0.1</dd><dt><span>start_pow_2 :</span></dt><dd>1.71</dd><dt><span>stern_gerlach_duration :</span></dt><dd>0.001</dd><dt><span>sweep_duration :</span></dt><dd>nan</dd><dt><span>sweep_start_freq :</span></dt><dd>nan</dd><dt><span>sweep_stop_freq :</span></dt><dd>nan</dd><dt><span>tf_meas_ramp_duration :</span></dt><dd>0.1</dd><dt><span>wait_after_2dmot_off :</span></dt><dd>0</dd><dt><span>wait_time_between_images :</span></dt><dd>0.22</dd><dt><span>wavetype :</span></dt><dd>SINE</dd><dt><span>x_offset :</span></dt><dd>0</dd><dt><span>x_offset_img :</span></dt><dd>0</dd><dt><span>y_offset :</span></dt><dd>0</dd><dt><span>y_offset_img :</span></dt><dd>0</dd><dt><span>z_offset :</span></dt><dd>0.189</dd><dt><span>z_offset_img :</span></dt><dd>0.189</dd><dt><span>carrier_freq :</span></dt><dd>[4.21 4.212 4.214 4.216 4.218 4.22 4.222 4.224 4.226 4.228 4.23 4.232\n",
|
|
" 4.234 4.236 4.238 4.24 4.242 4.244 4.246 4.248 4.25 4.252 4.254 4.256\n",
|
|
" 4.258 4.26 4.262 4.264 4.266 4.268 4.21 4.212 4.214 4.216 4.218 4.22\n",
|
|
" 4.222 4.224 4.226 4.228 4.23 4.232 4.234 4.236 4.238 4.24 4.242 4.248\n",
|
|
" 4.25 4.252 4.254 4.256 4.258 4.26 4.262 4.264 4.266 4.268]</dd><dt><span>runs :</span></dt><dd>[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n",
|
|
" 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.\n",
|
|
" 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]</dd><dt><span>scanAxis :</span></dt><dd>['carrier_freq' 'runs']</dd><dt><span>scanAxisLength :</span></dt><dd>[58. 58.]</dd></dl></div></li></ul></div></div>"
|
|
],
|
|
"text/plain": [
|
|
"<xarray.Dataset>\n",
|
|
"Dimensions: (carrier_freq: 30, runs: 2, x: 1200, y: 1920)\n",
|
|
"Coordinates:\n",
|
|
" * carrier_freq (carrier_freq) float64 4.21 4.212 4.214 ... 4.264 4.266 4.268\n",
|
|
" * runs (runs) float64 0.0 1.0\n",
|
|
"Dimensions without coordinates: x, y\n",
|
|
"Data variables:\n",
|
|
" atoms (carrier_freq, runs, x, y) float64 dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray>\n",
|
|
" background (carrier_freq, runs, x, y) float64 dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray>\n",
|
|
" dark (carrier_freq, runs, x, y) float64 dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray>\n",
|
|
" shotNum (carrier_freq, runs) float64 dask.array<chunksize=(30, 2), meta=np.ndarray>\n",
|
|
" OD (carrier_freq, runs, x, y) float64 dask.array<chunksize=(3, 2, 1200, 1920), meta=np.ndarray>\n",
|
|
"Attributes: (12/120)\n",
|
|
" TOF_free: 0.01\n",
|
|
" abs_img_freq: 110.858\n",
|
|
" absorption_imaging_flag: True\n",
|
|
" backup_data: True\n",
|
|
" blink_off_time: 0.001\n",
|
|
" blink_on_time: 0.001\n",
|
|
" ... ...\n",
|
|
" z_offset: 0.189\n",
|
|
" z_offset_img: 0.189\n",
|
|
" carrier_freq: [4.21 4.212 4.214 4.216 4.218 4.22 4...\n",
|
|
" runs: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0...\n",
|
|
" scanAxis: ['carrier_freq' 'runs']\n",
|
|
" scanAxisLength: [58. 58.]"
|
|
]
|
|
},
|
|
"execution_count": 8,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"dataSet"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 7,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"The detected scaning axes and values are: \n",
|
|
"\n",
|
|
"{'carrier_freq': array([4.21 , 4.212, 4.214, 4.216, 4.218, 4.22 , 4.222, 4.224, 4.226,\n",
|
|
" 4.228, 4.23 , 4.232, 4.234, 4.236, 4.238, 4.24 , 4.242, 4.244,\n",
|
|
" 4.246, 4.248, 4.25 , 4.252, 4.254, 4.256, 4.258, 4.26 , 4.262,\n",
|
|
" 4.264, 4.266, 4.268]), 'runs': array([0., 1.])}\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "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jhITE5WYmKicnByFh4dr0qRJrvFMnjxZc+fOVbdu3RQdHa158+Zp0KBBrhMv+vfvr4cfflhTpkzRqlWrJElTp05VWlqa+vXr15rNBwAA8FutCnVr166VJPXp00fz5s275V2tbfXiiy/q6tWrmj59usrLyzV8+HDt2LFDkZGRrj7Lli1TcHCwMjIydPXqVY0bN07r1q1TUL0LN23atEmzZs1ynSU7YcIErVy50qtjBwAAaE9tOqbu1VdfNXsckqSPPvrIbdlmsyk7O1vZ2dnNviYsLEwrVqzQihUrmu0THR2tjRs3mjRKAAAA/9Om69SdP39emZmZio+PV3BwsIKCgtx+AAAA0L7aNFP3zDPP6JtvvtErr7yinj173vQSIwAAAPCuNoW6vXv3as+ePbrvvvtMHg4AAADaok27XxMSEmQYhtljAQAAQBu1KdTl5ubq5Zdf1tdff23ycAAAANAWbdr9+uSTT+rKlSv63ve+p/Dw8EYXzvv73/9uyuAAAABwa9oU6nJzc00eBgAAADzRplD39NNPmz0OAAAAeKBNoe6bb75p8fk777yzTYMBAABA27Qp1PXp06fFa9PV1ta2eUAAAABovTaFuiNHjrgtOxwOHTlyREuXLtWvfvUrUwYGAACAW9emUHfvvfc2ahs2bJji4+P1m9/8Runp6R4PDADMVlUldenifHz5shQR4dvxAICZ2nSduuZ8//vf16FDh8xcJQAAAG5Bm2bqKisr3ZYNw1BJSYmys7OVmJhoysAAAABw69oU6m6//fZGJ0oYhqGEhATl5eWZMjAAAADcujaFug8//NBt+bbbblOPHj109913Kzi4TasEAACAB9qUwMaMGWP2OAAAAOCBNk+rffnll8rNzdXx48dls9nUv39/zZ49W9/73vfMHB8AAABuQZvOft2+fbsGDBiggwcPavDgwRo4cKAOHDige+65R4WFhWaPEQAAADfRppm6l19+WS+88IJ+/etfN2p/6aWXlJycbMrgAAAAcGvaNFN3/PhxTZ48uVH7c889p88++8zjQQEAAKB12hTqevTooeLi4kbtxcXFiomJ8XRMAIAWRERIhuH84a4YAOq0affrlClTNHXqVH311VcaOXKkbDab9u7dq8WLF2vu3LlmjxEAAAA30aZQ98orrygyMlJvvPGG5s+fL0mKj49Xdna2Zs2aZeoAAQAA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apqTk2Ps2LHD+PLLL43jx48bb7zxhhEcHGysXr26PTfFL5hRz4Y6yu7XpphRz+zsbKOgoMD48ssvjSNHjhjPPvusERwcbBw4cKA9N8UvmFHPb775xujSpYvxi1/8wjhx4oTxwQcfGDExMcbrr7/enpviF8z89/7ggw8aTz75ZJvHwtmvPlBSUqJvvvnGtbxq1Spdu3bNdRHHup/Zs2e7+nz77bcaMmSIhgwZopKSEv32t7/VkCFD9Pzzz/tiE/xKW+r55ptvqqamRk888YRbn9/+9re+2AS/05aaVlVVafr06brnnns0cuRIbdmyRRs3buQzqrbVE81rSz0vXryoqVOnqn///q5rUu7evVv333+/LzbBr7SlngkJCdqxY4cOHTqkwYMHa9asWZo9e7ZefvllX2yCX2nrv/fPP/9ce/fu9ehsd5thGEabXw0AAAC/wEwdAACABRDqAAAALIBQBwAAYAGEOgAAAAsg1AEAAFgAoQ4AAMACCHUAAAAWQKgDAACwAEIdANyCjz76SDabTRcvXvTq+/zlL3/RiBEjFBYWpvvuu8+r7wXAWrijBADcgpqaGv39739XbGysbDab197nySef1F//+lf9+7//u7p06aJu3bp57b0AWAszdQDwDw6Ho9n2Tp06KS4uzqNAV1NTc9M+X375pR588EH17t272UDX3DgBdGyEOgAB7fr161q8eLHuvvtuhYaG6s4779SvfvUrSdJLL72k73//+woPD9ddd92lV155xS0QZWdn67777tO///u/66677lJoaKgMw5DNZtP//J//UxMnTlRERIRef/31Jne/FhUVafTo0ercubMSEhI0a9YsVVVVuZ7v06ePXn/9dT3zzDOy2+2aMmVKi9tis9l0+PBh/fKXv5TNZlN2dra+/vpr2Ww2/Z//8380duxYhYWFaePGjZKktWvXqn///goLC9MPfvADvfnmm27rO3jwoIYMGaKwsDANGzZMW7dulc1mU3FxsYdVB+CXDAAIYC+++KLRtWtXY926dcYXX3xh7Nmzx1i9erVhGIbx2muvGR9//LFx6tQp47333jNiY2ONxYsXu1776quvGhEREUZqaqrx//7f/zP+9Kc/GdevXzckGTExMcaaNWuML7/80vj666+NDz/80JBklJeXG4ZhGH/+85+NLl26GMuWLTM+//xz4+OPPzaGDBliPPPMM6719+7d24iKijJ+85vfGCdPnjROnjzZ4raUlJQY99xzjzF37lyjpKTEuHTpknHq1ClDktGnTx/j97//vfHVV18Z586dM95++22jZ8+errbf//73RnR0tLFu3TrDMAzj8uXLRo8ePYwnn3zSOHr0qPH+++8bd911lyHJOHLkiLl/CQD8AqEOQMCqrKw0QkNDXSHuZpYsWWIMHTrUtfzqq68aISEhRllZmVs/SUZWVpZbW8NQl5mZaUydOtWtz549e4zbbrvNuHr1qmEYzlD3+OOPt2qb7r33XuPVV191LdeFutzcXLd+CQkJxubNm93aXnvtNSMpKckwDMNYtWqVER0dbVRVVbmef+uttwh1gIUF+26OEAA8c/z4cVVXV2vcuHFNPr9lyxbl5ubqiy++0OXLl3Xt2jVFRUW59endu7d69OjR6LXDhg1r8b0PHz6sL774Qps2bXK1GYah69ev69SpU+rfv/8tredW1V/PhQsXdObMGU2ePNltl+61a9dkt9slOWtz7733Kjw83PV8UlKSKWMB4J8IdQACVufOnZt9bv/+/frpT3+qhQsXKjU1VXa7XXl5eXrjjTfc+kVERDT5+uba61y/fl3Tpk3TrFmzGj1355133vJ6blX99Vy/fl2StHr1ag0fPtytX1BQkCRnwATQsRDqAASsxMREde7cWX/84x/1/PPPuz338ccfq3fv3lqwYIGr7fTp06a993/5L/9Fx44d0913323aOm9VbGys7rjjDn311Vd66qmnmuwzYMAAbdiwQVevXnWF3/3797fnMAG0M0IdgIAVFhaml156SS+++KI6deqkBx54QBcuXHCFrW+++UZ5eXn64Q9/qP/7f/+vtm7datp7v/TSSxoxYoRmzJihKVOmKCIiQsePH1dhYaFWrFhh2vs0Jzs7W7NmzVJUVJQeeeQRVVdX65NPPlF5ebnmzJmjSZMmacGCBZo8ebL+5V/+RV9//bV++9vfen1cAHyHS5oACGivvPKK5s6dq3/9139V//799eSTT6qsrEwTJ07UCy+8oF/84he67777VFRUpFdeecW09x08eLB27dqlkydPatSoURoyZIheeeUV9ezZ07T3aMnzzz+v3/3ud1q3bp0GDRqkMWPGaN26derbt68kqUuXLnr//ff12WefaciQIVqwYIEWL17cLmMD4BvcUQIAOoivv/5affv21ZEjR7gFGWBBzNQBAABYAKEOANpJTk6OunTp0uTPI4884uvhAQhw7H4FgHby97//XX//+9+bfK5z586644472nlEAKyEUAcAAGAB7H4FAACwAEIdAACABRDqAAAALIBQBwAAYAGEOgAAAAsg1AEAAFgAoQ4AAMACCHUAAAAW8P8Bv72bKYt0rDMAAAAASUVORK5CYII=",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"shotNum = \"0023\"\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 = (280, 959)\n",
|
|
"imageAnalyser.span = (350, 350)\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.mean(dim='runs')\n",
|
|
"Ncount_std = Ncount.std(dim='runs')\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, 800])\n",
|
|
"plt.grid(visible=1)\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 105,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<table><tr><th> name </th><th> value </th><th> initial value </th><th> min </th><th> max </th><th> vary </th></tr><tr><td> amplitude </td><td> 1.00000000 </td><td> None </td><td> -inf </td><td> inf </td><td> True </td></tr><tr><td> center </td><td> 0.00000000 </td><td> None </td><td> -inf </td><td> inf </td><td> True </td></tr><tr><td> sigma </td><td> 1.00000000 </td><td> None </td><td> -inf </td><td> inf </td><td> True </td></tr><tr><td> offset </td><td> 0.00000000 </td><td> None </td><td> -inf </td><td> inf </td><td> True </td></tr></table>"
|
|
],
|
|
"text/plain": [
|
|
"Parameters([('amplitude', <Parameter 'amplitude', value=1.0, bounds=[-inf:inf]>), ('center', <Parameter 'center', value=0.0, bounds=[-inf:inf]>), ('sigma', <Parameter 'sigma', value=1.0, bounds=[-inf:inf]>), ('offset', <Parameter 'offset', value=0.0, bounds=[-inf:inf]>)])"
|
|
]
|
|
},
|
|
"execution_count": 105,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"def sinc_func(x, amplitude=1.0, center=0.0, sigma=1.0, offset=0.0):\n",
|
|
" x = np.where(x==center, 1e-15, x)\n",
|
|
" return amplitude * ( np.sin(np.pi*(x-center)*sigma) / (np.pi*( (x-center) )* max(sigma, 1e-15) ) ) + offset\n",
|
|
"\n",
|
|
"fitModel = NewFitModel(sinc_func)\n",
|
|
"\n",
|
|
"fitModel.make_params()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 111,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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HhEREZGpkrSw69mzJwRBKHW9TCZDWFgYwsLCSm1ja2uLJUuWYMmSJaW2cXZ2xrp166oSKhEREZHRM9pr7IiIiIioYljYEREREZkJFnZEREREZoKFHREREZGZYGFHREREZCZY2BERERGZCRZ2RERERGbCaO8VS0RUVQ4OQBlTZRIRmR322BERERGZCRZ2RERERGaChR0RERGRmWBhR0RERGQmWNgRERERmQkWdkRERERmgoUdERERkZlgYUdERERkJljYEREREZkJFnZEREREZoKFHREREZGZYGFHREREZCZY2BERERGZCRZ2RERERGaChR0RERGRmWBhR0RERGQmWNgRERERmQkWdkRERERmgoUdERERkZlgYUdERERkJljYEREREZkJFnZEREREZoKFHREREZGZYGFHREREZCZY2BERERGZCRZ2RERERGaChR0RERGRmWBhR0RERGQmWNgRERERmQkWdkRERERmgoUdERERkZlgYUdERERkJljYEREREZmJalXYLVu2DA0aNICtrS06dOiAgwcPSh0SERERkWiqTWG3adMmhIaG4sMPP8TJkyfRrVs3DBgwALdv35Y6NCIiIiJRVJvC7ttvv8X48ePx5ptvokWLFli0aBG8vb3x/fffSx0aERERkSispA7AEPLz8xEXF4f3339fZ3lAQAAOHz5c4mvy8vKQl5enfZ6eng4AUCqVUCqVeomzcLv62n51wTyKh7kUh9R51OxWro2hMmGIsQ0xSJ1Lc8JcisMQeazItmWCIAh6i8RI3Lt3D3Xr1sXff/+Nrl27apfPmTMHa9aswaVLl4q9JiwsDJ999lmx5Rs2bIC9vb1e4yUiIiIqlJ2djeDgYKSlpcHJyanMttWix66QTCbTeS4IQrFlhWbPno0ZM2Zon6enp8Pb2xsBAQHPTGplKZVKREdHw9/fH3K5XC/7qA6YR/Ewl+JgHsXDXIqHuRSHIfJYeNawPKpFYefi4gJLS0skJSXpLL9//z7c3NxKfI2NjQ1sbGyKLZfL5Xr/BTDEPqoD5lE8zKU4mEfxMJfiYS7Foc88VmS71WLwhLW1NTp06IDo6Gid5dHR0TqnZomIiIhMWbXosQOAGTNmICQkBB07doSfnx9+/PFH3L59G2+99ZbUoRERERGJotoUdqNGjcKjR4/w+eefIzExEb6+voiMjET9+vWlDo2I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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"fitAnalyser = FitAnalyser(fitModel, fitDim=1)\n",
|
|
"# params = fitAnalyser.guess(Ncount_mean_1, x=scanAxis[0], guess_kwargs=dict(negative=True), dask=\"parallelized\")\n",
|
|
"params = fitAnalyser.fitModel.make_params()\n",
|
|
"params.add(name=\"amplitude\", value= -5000, max=np.inf, min=-np.inf, vary=True)\n",
|
|
"params.add(name=\"center\", value= 4.24, max=np.inf, min=-np.inf, vary=True)\n",
|
|
"params.add(name=\"sigma\", value= 100, max=np.inf, min= 0, vary=True)\n",
|
|
"params.add(name=\"offset\", value= 7000, max=np.inf, min=-np.inf, vary=True)\n",
|
|
"\n",
|
|
"fitResult = fitAnalyser.fit(Ncount_mean, params, x=scanAxis[0]).load()\n",
|
|
"freqdata = np.linspace(4.21, 4.27, 500)\n",
|
|
"fitCurve = fitAnalyser.eval(fitResult, x=freqdata, dask=\"parallelized\").load()\n",
|
|
"fitCurve = fitCurve.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.plot.errorbar(ax=ax, fmt='--g')\n",
|
|
"plt.xlabel('Center Frequency (MHz)')\n",
|
|
"plt.ylabel('NCount')\n",
|
|
"plt.tight_layout()\n",
|
|
"plt.grid(visible=1)\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 114,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<h2> Model</h2> Model(sinc_func) <h2>Fit Statistics</h2><table><tr><td>fitting method</td><td>leastsq</td><td></td></tr><tr><td># function evals</td><td>6</td><td></td></tr><tr><td># data points</td><td>30</td><td></td></tr><tr><td># variables</td><td>4</td><td></td></tr><tr><td>chi-square</td><td> 22258818.8</td><td></td></tr><tr><td>reduced chi-square</td><td> 856108.416</td><td></td></tr><tr><td>Akaike info crit.</td><td> 413.511544</td><td></td></tr><tr><td>Bayesian info crit.</td><td> 419.116333</td><td></td></tr></table><h2>Variables</h2><table><tr><th> name </th><th> value </th><th> standard error </th><th> relative error </th><th> initial value </th><th> min </th><th> max </th><th> vary </th></tr><tr><td> amplitude </td><td> -3763.02104 </td><td> 533.936160 </td><td> (14.19%) </td><td> -5000 </td><td> -inf </td><td> inf </td><td> True </td></tr><tr><td> center </td><td> 4.24000001 </td><td> 1.2454e-08 </td><td> (0.00%) </td><td> 4.24 </td><td> -inf </td><td> inf </td><td> True </td></tr><tr><td> sigma </td><td> 101.667371 </td><td> 5.09607377 </td><td> (5.01%) </td><td> 100 </td><td> 0.00000000 </td><td> inf </td><td> True </td></tr><tr><td> offset </td><td> 6305.33408 </td><td> 190.360991 </td><td> (3.02%) </td><td> 7000 </td><td> -inf </td><td> inf </td><td> True </td></tr></table><h2>Correlations (unreported correlations are < 0.100)</h2><table><tr><td>amplitude</td><td>offset</td><td>-0.3586</td></tr><tr><td>center</td><td>sigma</td><td>-0.2865</td></tr><tr><td>amplitude</td><td>sigma</td><td>-0.2413</td></tr><tr><td>center</td><td>offset</td><td>0.2306</td></tr><tr><td>sigma</td><td>offset</td><td>-0.1447</td></tr></table>"
|
|
],
|
|
"text/plain": [
|
|
"<lmfit.model.ModelResult at 0x21cb9fdf3d0>"
|
|
]
|
|
},
|
|
"execution_count": 114,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"fitResult.item()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 87,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import lmfit\n",
|
|
"\n",
|
|
"def sinc_func(x, amplitude=1.0, center=0.0, sigma=1.0, offset=0.0):\n",
|
|
" x = np.where(x==center, 1e-5, x)\n",
|
|
" return amplitude * ( np.sin(np.pi*(x-center)*max(sigma, 1e-5)) / (np.pi*( (x-center) )* max(sigma, 1e-5) ) ) + offset\n",
|
|
"\n",
|
|
"def _fit_1D(data, params, x):\n",
|
|
" \n",
|
|
" print(x)\n",
|
|
" print(data)\n",
|
|
" \n",
|
|
" res = fitModel.fit(data=data, x=x, params=params, nan_policy='omit')\n",
|
|
" \n",
|
|
" print(111)\n",
|
|
" \n",
|
|
" # print(res.items())\n",
|
|
" \n",
|
|
" return 1\n",
|
|
"\n",
|
|
"def fit(dataArray, paramsArray, x=None, y=None, input_core_dims=None, dask='parallelized', vectorize=True, keep_attrs=True, daskKwargs=None, **kwargs):\n",
|
|
" \n",
|
|
" kwargs.update(\n",
|
|
" {\n",
|
|
" \"dask\": dask,\n",
|
|
" \"vectorize\": vectorize,\n",
|
|
" \"input_core_dims\": input_core_dims,\n",
|
|
" 'keep_attrs': keep_attrs,\n",
|
|
" }\n",
|
|
" )\n",
|
|
" \n",
|
|
" fitModel = NewFitModel(sinc_func)\n",
|
|
"\n",
|
|
" if not daskKwargs is None:\n",
|
|
" kwargs.update({\"dask_gufunc_kwargs\": daskKwargs})\n",
|
|
" \n",
|
|
" if isinstance(paramsArray, type(fitModel.make_params())):\n",
|
|
"\n",
|
|
" if input_core_dims is None:\n",
|
|
" kwargs.update(\n",
|
|
" {\n",
|
|
" \"input_core_dims\": [['x']],\n",
|
|
" }\n",
|
|
" )\n",
|
|
"\n",
|
|
" if x is None:\n",
|
|
" if 'x' in dataArray.dims:\n",
|
|
" x = dataArray['x'].to_numpy()\n",
|
|
" else:\n",
|
|
" if isinstance(x, str):\n",
|
|
" if input_core_dims is None:\n",
|
|
" kwargs.update(\n",
|
|
" {\n",
|
|
" \"input_core_dims\": [[x]],\n",
|
|
" }\n",
|
|
" )\n",
|
|
" x = dataArray[x].to_numpy()\n",
|
|
"\n",
|
|
" return xr.apply_ufunc(_fit_1D, dataArray, kwargs={'params':paramsArray,'x':x},\n",
|
|
" output_dtypes=[type(lmfit.model.ModelResult(fitModel, fitModel.make_params()))], \n",
|
|
" **kwargs)\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 96,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"params = fitAnalyser.fitModel.make_params()\n",
|
|
"params.add(name=\"amplitude\", value= -6000, max=np.inf, min=-np.inf, vary=True)\n",
|
|
"params.add(name=\"center\", value= 4.24, max=np.inf, min=-np.inf, vary=True)\n",
|
|
"params.add(name=\"sigma\", value= 1, max=np.inf, min= 0, vary=True)\n",
|
|
"params.add(name=\"offset\", value= 6000, max=np.inf, min=-np.inf, vary=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 97,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"[4.21 4.212 4.214 4.216 4.218 4.22 4.222 4.224 4.226 4.228 4.23 4.232\n",
|
|
" 4.234 4.236 4.238 4.24 4.242 4.244 4.246 4.248 4.25 4.252 4.254 4.256\n",
|
|
" 4.258 4.26 4.262 4.264 4.266 4.268]\n",
|
|
"[6769.67956065 6481.29550119 6053.12583223 6167.32988037 5832.95142324\n",
|
|
" 6666.80232023 6495.09820957 6194.86783408 5496.9058868 6528.28343547\n",
|
|
" 6320.13082993 5967.89140337 5146.70221327 2198.13874681 1791.42699994\n",
|
|
" 5195.29511407 4194.74291752 2821.57312863 3186.06344255 6177.81491664\n",
|
|
" 6281.72290362 6793.60854331 6780.77347622 6566.97442088 6551.53646254\n",
|
|
" 6566.30218537 6630.50401754 7033.66568469 6485.86052695 6861.09580952]\n",
|
|
"111\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"fitResult = fit(Ncount_mean, params, x=scanAxis[0]).load()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 95,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<h2> Model</h2> Model(sinc_func) <h2>Fit Statistics</h2><table><tr><td>fitting method</td><td>leastsq</td><td></td></tr><tr><td># function evals</td><td>17</td><td></td></tr><tr><td># data points</td><td>30</td><td></td></tr><tr><td># variables</td><td>4</td><td></td></tr><tr><td>chi-square</td><td> 57863952.6</td><td></td></tr><tr><td>reduced chi-square</td><td> 2225536.64</td><td></td></tr><tr><td>Akaike info crit.</td><td> 442.172234</td><td></td></tr><tr><td>Bayesian info crit.</td><td> 447.777023</td><td></td></tr></table><h2>Variables</h2><table><tr><th> name </th><th> value </th><th> standard error </th><th> relative error </th><th> initial value </th><th> min </th><th> max </th><th> vary </th></tr><tr><td> amplitude </td><td> -4877.47241 </td><td> 30874.3404 </td><td> (633.00%) </td><td> -6000 </td><td> -inf </td><td> inf </td><td> True </td></tr><tr><td> center </td><td> 4.23999931 </td><td> 0.00308412 </td><td> (0.07%) </td><td> 4.24 </td><td> -inf </td><td> inf </td><td> True </td></tr><tr><td> sigma </td><td> 19.9674926 </td><td> 74.3761454 </td><td> (372.49%) </td><td> 1 </td><td> 0.00000000 </td><td> inf </td><td> True </td></tr><tr><td> offset </td><td> 10532.4576 </td><td> 31160.6325 </td><td> (295.85%) </td><td> 6000 </td><td> -inf </td><td> inf </td><td> True </td></tr></table><h2>Correlations (unreported correlations are < 0.100)</h2><table><tr><td>amplitude</td><td>offset</td><td>-0.9999</td></tr><tr><td>sigma</td><td>offset</td><td>-0.9988</td></tr><tr><td>amplitude</td><td>sigma</td><td>0.9983</td></tr><tr><td>amplitude</td><td>center</td><td>0.1438</td></tr><tr><td>center</td><td>offset</td><td>-0.1432</td></tr><tr><td>center</td><td>sigma</td><td>0.1381</td></tr></table>"
|
|
],
|
|
"text/plain": [
|
|
"<lmfit.model.ModelResult at 0x21cb9fdba00>"
|
|
]
|
|
},
|
|
"execution_count": 95,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"def sinc_func(x, amplitude=1.0, center=0.0, sigma=1.0, offset=0.0):\n",
|
|
" x = np.where(x==center, 1e-5, x)\n",
|
|
" return amplitude * ( np.sin(np.pi*(x-center)*max(sigma, 1e-5)) / (np.pi*( (x-center) )* max(sigma, 1e-5) ) ) + offset\n",
|
|
"\n",
|
|
"fitModel = NewFitModel(sinc_func)\n",
|
|
"\n",
|
|
"fitModel.make_params()\n",
|
|
"\n",
|
|
"data = Ncount_mean.to_numpy()\n",
|
|
"x = Ncount_mean.carrier_freq.to_numpy()\n",
|
|
"\n",
|
|
"fitModel.fit(data=data, x=x, params=params, nan_policy='omit')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 78,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"ename": "SyntaxError",
|
|
"evalue": "positional argument follows keyword argument (864697295.py, line 1)",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[1;36m Cell \u001b[1;32mIn [78], line 1\u001b[1;36m\u001b[0m\n\u001b[1;33m np.where(x=0, 1, 2)\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m positional argument follows keyword argument\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"np.where(x==0, 1, 2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"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.13"
|
|
},
|
|
"orig_nbformat": 4
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|