analyseScript/testMongoDB.ipynb
2023-05-25 19:11:19 +02:00

1497 lines
86 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
"import pymongo\n",
"import xarray_mongodb\n",
"import bson\n",
"import datetime\n",
"\n",
"# datetime.datetime.utcnow()"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"mongoClient = pymongo.MongoClient()\n",
"mongoDB = mongoClient.testDB\n",
"mongoCollection = mongoDB.testCollection"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Task executing\n",
"\n",
"Task2 executing \n",
"\n",
"Task done\n",
"Task2 done\n",
"\n",
"\n"
]
}
],
"source": [
"from time import sleep\n",
"from multiprocessing.pool import ThreadPool\n",
" \n",
"# task executed in a worker thread\n",
"def task():\n",
" # report a message\n",
" print(f'Task executing\\n')\n",
" # block for a moment\n",
" sleep(1)\n",
" # report a message\n",
" print(f'Task done\\n')\n",
" \n",
"def task2():\n",
" # report a message\n",
" print(f'Task2 executing \\n')\n",
" # block for a moment\n",
" sleep(1)\n",
" # report a message\n",
" print(f'Task2 done\\n')\n",
" \n",
"# protect the entry point\n",
"if __name__ == '__main__':\n",
" # create and configure the thread pool\n",
" pool = ThreadPool()\n",
" # issue tasks to the thread pool\n",
" pool.apply_async(task)\n",
" pool.apply_async(task2)\n",
" # close the thread pool\n",
" pool.close()\n",
" # wait for all tasks to finish\n",
" pool.join()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Import supporting package"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"import xarray as xr\n",
"import pandas as pd\n",
"import numpy as np\n",
"import copy\n",
"\n",
"import glob\n",
"\n",
"import xrft\n",
"import finufft\n",
"\n",
"from uncertainties import ufloat\n",
"from uncertainties import unumpy as unp\n",
"from uncertainties import umath\n",
"\n",
"from datetime import datetime\n",
"\n",
"import matplotlib.pyplot as plt\n",
"plt.rcParams['font.size'] = 18\n",
"\n",
"from DataContainer.ReadData import read_hdf5_file, read_hdf5_global, read_hdf5_run_time, read_csv_file\n",
"from Analyser.ImagingAnalyser import ImageAnalyser\n",
"from Analyser.FitAnalyser import FitAnalyser\n",
"from Analyser.FitAnalyser import ThomasFermi2dModel, DensityProfileBEC2dModel, Polylog22dModel\n",
"from Analyser.FFTAnalyser import fft, ifft, fft_nutou\n",
"from ToolFunction.ToolFunction import *\n",
"\n",
"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": [
"# Import supporting package"
]
},
{
"cell_type": "code",
"execution_count": 28,
"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 ThomasFermi2dModel, DensityProfileBEC2dModel, Polylog22dModel\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": 29,
"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 53497 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-f81d966f-fb10-11ed-96c4-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:53497/status\" target=\"_blank\">http://127.0.0.1:53497/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;\">68a73a45</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:53497/status\" target=\"_blank\">http://127.0.0.1:53497/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-cea99f1c-444d-4f12-bd6b-5a8725df82cd</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:53498\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:53497/status\" target=\"_blank\">http://127.0.0.1:53497/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:53530\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:53533/status\" target=\"_blank\">http://127.0.0.1:53533/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:53502\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-ph8qm9gw\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:53527\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:53528/status\" target=\"_blank\">http://127.0.0.1:53528/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:53503\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-x4snfqwt\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:53539\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:53540/status\" target=\"_blank\">http://127.0.0.1:53540/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:53504\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-yw4z2wi3\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:53542\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:53543/status\" target=\"_blank\">http://127.0.0.1:53543/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:53505\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-jpmm633i\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:53531\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:53532/status\" target=\"_blank\">http://127.0.0.1:53532/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:53506\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-_4j15kw6\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:53536\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:53537/status\" target=\"_blank\">http://127.0.0.1:53537/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:53507\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-bmbg4f7j\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:53498' processes=6 threads=60, memory=55.88 GiB>"
]
},
"execution_count": 29,
"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": 30,
"metadata": {},
"outputs": [],
"source": [
"# filepath = \"//DyLabNAS/Data/Evaporative_Cooling/2023/05/03/0043/*.h5\"\n",
"# filepath = \"//DyLabNAS/Data/Evaporative_Cooling/2023/04/18/0003/2023-04-18_0003_Evaporative_Cooling_000.h5\"\n",
"\n",
"# filepath = \"//DyLabNAS/Data/Repetition_scan/2023/04/21/0002/*.h5\"\n",
"\n",
"# filepath = r\"./testData/0002/*.h5\"\n",
"\n",
"# filepath = r\"./testData/0002/2023-04-21_0002_Evaporative_Cooling_0.h5\"\n",
"\n",
"# filepath = r'd:/Jianshun Gao/Simulations/analyseScripts/testData/0002/2023-04-21_0002_Evaporative_Cooling_0.h5'\n",
"\n",
"# filepath = \"//DyLabNAS/Data/Evaporative_Cooling/2023/04/18/0003/*.h5\"\n",
"\n",
"# filepath = \"//DyLabNAS/Data/Evaporative_Cooling/2023/05/04/0000/*.h5\"\n",
"\n",
"filepath = './result_from_experiment/2023-04-24/0013/2023-04-24_0013_Evaporative_Cooling_08.h5'"
]
},
{
"cell_type": "code",
"execution_count": 31,
"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": 32,
"metadata": {},
"outputs": [],
"source": [
"img_dir = '//DyLabNAS/Data/'\n",
"SequenceName = \"Evaporative_Cooling\" + \"/\"\n",
"folderPath = img_dir + SequenceName + '2023/05/23'# get_date()"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=dark],\n",
"body[data-theme=dark],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1F1F1F;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: 'â–º';\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: 'â–¼';\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: '(';\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: ')';\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: ',';\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.Dataset&gt;\n",
"Dimensions: (fileIndex: 1, index: 1201)\n",
"Coordinates:\n",
" * index (index) int64 0 1 2 3 4 5 6 ... 1195 1196 1197 1198 1199 1200\n",
"Dimensions without coordinates: fileIndex\n",
"Data variables:\n",
" X (fileIndex, index) float64 nan 0.0 1.0 ... 1.198e+03 1.199e+03\n",
" CH1 (fileIndex, index) float64 nan -0.08 -0.08 ... 3.28 -5.52 9.68\n",
" CH2 (fileIndex, index) float64 nan 0.0 0.0 ... 0.008 -0.276 -0.128\n",
" Start (fileIndex, index) float64 nan nan nan nan ... nan nan nan nan\n",
" Increment (fileIndex, index) float64 nan nan nan nan ... nan nan nan nan\n",
" Unnamed: 5 (fileIndex, index) float64 nan nan nan nan ... nan nan nan nan</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-ab18782d-a842-4c21-a6b3-4f13566e3bb2' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-ab18782d-a842-4c21-a6b3-4f13566e3bb2' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span>fileIndex</span>: 1</li><li><span class='xr-has-index'>index</span>: 1201</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-c96b7ec7-482e-4441-b539-edde63b29062' class='xr-section-summary-in' type='checkbox' checked><label for='section-c96b7ec7-482e-4441-b539-edde63b29062' class='xr-section-summary' >Coordinates: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>index</span></div><div class='xr-var-dims'>(index)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 ... 1197 1198 1199 1200</div><input id='attrs-383cd32e-845a-4467-8d41-928ed8609827' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-383cd32e-845a-4467-8d41-928ed8609827' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-bf3f5910-78fd-4a93-9ee9-defd7ef8445d' class='xr-var-data-in' type='checkbox'><label for='data-bf3f5910-78fd-4a93-9ee9-defd7ef8445d' 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, 2, ..., 1198, 1199, 1200], dtype=int64)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-6044feb7-4f52-4887-90a7-1a68618d0360' class='xr-section-summary-in' type='checkbox' checked><label for='section-6044feb7-4f52-4887-90a7-1a68618d0360' class='xr-section-summary' >Data variables: <span>(6)</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>X</span></div><div class='xr-var-dims'>(fileIndex, index)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan 0.0 1.0 ... 1.198e+03 1.199e+03</div><input id='attrs-1ae77e14-8e0f-49d7-8a0f-f4743612f057' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-1ae77e14-8e0f-49d7-8a0f-f4743612f057' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a161b292-66bd-4d8b-9238-0e6ad0c4c618' class='xr-var-data-in' type='checkbox'><label for='data-a161b292-66bd-4d8b-9238-0e6ad0c4c618' 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([[ nan, 0.000e+00, 1.000e+00, ..., 1.197e+03, 1.198e+03,\n",
" 1.199e+03]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>CH1</span></div><div class='xr-var-dims'>(fileIndex, index)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan -0.08 -0.08 ... 3.28 -5.52 9.68</div><input id='attrs-d61ac07e-5f98-4e4f-a48b-b929c97a8143' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-d61ac07e-5f98-4e4f-a48b-b929c97a8143' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c4cf86e6-5eac-4b59-b0c6-07041dfface3' class='xr-var-data-in' type='checkbox'><label for='data-c4cf86e6-5eac-4b59-b0c6-07041dfface3' 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([[ nan, -0.08, -0.08, ..., 3.28, -5.52, 9.68]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>CH2</span></div><div class='xr-var-dims'>(fileIndex, index)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan 0.0 0.0 ... 0.008 -0.276 -0.128</div><input id='attrs-224f50c0-1174-4ce6-9c0e-0f907c6bd5fa' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-224f50c0-1174-4ce6-9c0e-0f907c6bd5fa' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-721707eb-b76e-4ec3-be7c-e2d944b10c63' class='xr-var-data-in' type='checkbox'><label for='data-721707eb-b76e-4ec3-be7c-e2d944b10c63' 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([[ nan, 0. , 0. , ..., 0.008, -0.276, -0.128]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>Start</span></div><div class='xr-var-dims'>(fileIndex, index)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan nan nan nan ... nan nan nan nan</div><input id='attrs-996d5f33-c693-40cc-b5af-28e8a588ba9b' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-996d5f33-c693-40cc-b5af-28e8a588ba9b' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c043ab07-d337-4099-994c-a9d9011214ee' class='xr-var-data-in' type='checkbox'><label for='data-c043ab07-d337-4099-994c-a9d9011214ee' 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([[nan, nan, nan, ..., nan, nan, nan]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>Increment</span></div><div class='xr-var-dims'>(fileIndex, index)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan nan nan nan ... nan nan nan nan</div><input id='attrs-54fc1344-e6ad-4333-bc19-f559f9dd9ced' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-54fc1344-e6ad-4333-bc19-f559f9dd9ced' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-191146ed-a804-4ebe-aadf-e796f61c5a48' class='xr-var-data-in' type='checkbox'><label for='data-191146ed-a804-4ebe-aadf-e796f61c5a48' 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([[nan, nan, nan, ..., nan, nan, nan]])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>Unnamed: 5</span></div><div class='xr-var-dims'>(fileIndex, index)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>nan nan nan nan ... nan nan nan nan</div><input id='attrs-a2e77687-a64b-4eda-bd69-f07105bb1ff4' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-a2e77687-a64b-4eda-bd69-f07105bb1ff4' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-309beda5-bf22-486b-9627-16de7c129c7e' class='xr-var-data-in' type='checkbox'><label for='data-309beda5-bf22-486b-9627-16de7c129c7e' 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([[nan, nan, nan, ..., nan, nan, nan]])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-ab9ddc62-d481-4844-acf4-6c5515a03594' class='xr-section-summary-in' type='checkbox' ><label for='section-ab9ddc62-d481-4844-acf4-6c5515a03594' class='xr-section-summary' >Indexes: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>index</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-b2ae3719-4aae-4340-9148-8aea2068c93e' class='xr-index-data-in' type='checkbox'/><label for='index-b2ae3719-4aae-4340-9148-8aea2068c93e' 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(RangeIndex(start=0, stop=1201, step=1, name=&#x27;index&#x27;))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-d32ad9db-a6e1-4249-8b72-f58570f4dbd6' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-d32ad9db-a6e1-4249-8b72-f58570f4dbd6' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.Dataset>\n",
"Dimensions: (fileIndex: 1, index: 1201)\n",
"Coordinates:\n",
" * index (index) int64 0 1 2 3 4 5 6 ... 1195 1196 1197 1198 1199 1200\n",
"Dimensions without coordinates: fileIndex\n",
"Data variables:\n",
" X (fileIndex, index) float64 nan 0.0 1.0 ... 1.198e+03 1.199e+03\n",
" CH1 (fileIndex, index) float64 nan -0.08 -0.08 ... 3.28 -5.52 9.68\n",
" CH2 (fileIndex, index) float64 nan 0.0 0.0 ... 0.008 -0.276 -0.128\n",
" Start (fileIndex, index) float64 nan nan nan nan ... nan nan nan nan\n",
" Increment (fileIndex, index) float64 nan nan nan nan ... nan nan nan nan\n",
" Unnamed: 5 (fileIndex, index) float64 nan nan nan nan ... nan nan nan nan"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"filePath = './NewFile.csv'\n",
"data = read_csv_file(filePath)\n",
"remove_bad_shots(data, index=0)\n",
"data = data.astype(float)\n",
"data"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x2b6f565f730>]"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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pIm55ZZbzPLly2vplYdWbm6u+ctf/mLGjBljunfvbpo1a2YcDoeJj483V155pZk0aZL55JNPKq3nxIkT5uGHHzadO3c2MTExplGjRub66683c+bMKXeI5lJWO+8eq1ev9r6n33333SqV4f1euZoEQmNC/37eunWrGTNmjGnTpo2JiooyLVq0MHfeeadZt25dIKehzlXnvF/6B05lX6+//nqpY6alpZmnn37a3H777eaKK64wjRo1Mg6HwyQnJ5t+/fqZX/3qV+bAgQNVan9tnXebMSGY/RAAAABhg7uMAQAALI5ACAAAYHEEQgAAAIsjEAIAAFgcgRAAAMDiCIQAAAAWRyAEAACwOAIhAACAxREIAQAALI5ACAAAYHEEQgC4xMSJE2Wz2TRx4sQ6P/bNN98sm82mGTNm1PmxAVgXgRAAAMDiCIQAcIlWrVqpa9euatWqVaibAgB1whHqBgBAuJk5c6ZmzpwZ6mYAQJ2hhxAAAMDiCIQAcAl/N5X43vBhjNGcOXN07bXXKjExUQkJCerfv7/efPPNCut2uVx68cUXdc011yguLk6NGzfWzTffrOXLl1e5fdu2bdOkSZN0xRVXyOl0Kj4+XldddZUee+wxnTlzptS+xhh997vflc1mU4cOHZSenl5unY8++qhsNpvi4+O1d+/eKrcFQMPAkDEABMjlcumuu+7SO++8I4fDIafTqaysLG3atEmbNm3SN998oyeeeKJMufz8fA0bNkyrV6+WJNntdkVFRek///mP/v3vf+tXv/pVpceePn26fve738kYI0lyOp0qLCzU9u3btX37dr322mt6//331bt3b0mSzWbTvHnz1KtXLx08eFD333+/li5dWqrONWvWaPbs2ZKkv/zlL+rSpUuNzg+A+oceQgAI0EsvvaQNGzZo7ty5yszMVEZGhg4fPqw77rhDkvTUU0/pm2++KVNu2rRpWr16tWw2m5566imdP39e58+f14kTJ/TAAw/o2Wef1RdffOH3uC+88IKefPJJxcfHa+bMmTp+/LhycnKUm5urLVu26Dvf+Y6OHz+u73//+8rOzvaWa9asmd544w3ZbDYtW7ZMc+bM8W47deqUxo8fL2OMRo0apR/+8IfBO1EA6g8DAChlwoQJRpKZMGFCqedvuukmI8lIMh999FGZcnl5eaZ169ZGknnqqadKbTt69KhxOBxGkvntb39b7nFHjx7trX/69Omltp0+fdo4nU5js9nM2rVryy1fWFho+vTpYySZ559/vsz2X/3qV0aScTqdZteuXcbtdpuhQ4caSaZDhw4mPT3d/0kB0KDRQwgAARowYIAGDhxY5vno6GjdeuutkqTt27eX2rZ8+XIVFRUpNjZWjzzySLn1VjQZ9YIFC5Sbm6u+fftq0KBB5e7jcDg0evRoSfIOS/t66qmndO211yo3N1ejRo3SM888o1WrVsnhcGjhwoVKSkrye3wADRvXEAJAgK699lq/21q3bi1JOnfuXKnnt2zZIknq27evEhMTyy3bpUsXtWnTRkePHi2z7ZNPPpEk7dixQy1btvR7/AsXLkiSDh48WGabw+HQokWLdPXVV3uvOZSKg2j//v391gmg4SMQAkCAEhIS/G5zOIo/VgsLC0s9f+rUKUlSmzZtKqy7bdu25QbCY8eOSSoOfJ7QV5Hc3Nxyn+/YsaOefvppTZkyRZLUv39/TZs2rdL6ADRsDBkDQB2y2WzVKudyuSRJP/nJT2SMqfQrLS2t3HoKCws1b9487//37t2rEydOVKtNABoOAiEA1IHmzZtLko4cOVLhfuX1DkryDhN/9dVXNWrHtGnTtGXLFsXHx6tjx446e/asxo0bJ7fbXaN6AdRvBEIAqAN9+/aVVHwtYVZWVrn7fPPNN34D44ABAyRJmzZtKvf6wKr48MMP9cc//lFS8dQ5S5cuVWRkpNavX69nn322WnUCaBgIhABQB4YPHy6Hw6ELFy7oueeeK3efJ5980m/5e++9V7GxsXK5XPrpT3/qHUIuj9vtLrMiyalTpzRhwgQZYzR69GiNHz9effv21dNPPy1Jevzxx7V58+bAXxiABoFACAB1oE2bNnrwwQclSb/73e80c+ZMb0/h6dOn9bOf/Uxvvvmm36lfWrZsqWeeeUaS9P777+uWW27Rxo0bvcHQGKM9e/boj3/8o3r27Kn33nvPW9YYo4kTJ+rEiRPq2LGjXnnlFe+2Rx55RLfccouKioo0evRoZWZm1srrBxDeCIQAUEeeffZZDR48WG63W7/+9a+VnJysxo0bq0WLFnrppZf0q1/9SldffbXf8g899JBmzZqliIgIrV+/Xtdff72cTqeaNm2q6OhodevWTb/85S+1e/fuUjevPP/88975BhcsWFBq2hubzab58+erWbNmSk1N1QMPPFCbpwBAmCIQAkAdiYmJ0apVq/SnP/1JV199taKiomSM0Q033KClS5d6ewArMnXqVO3Zs0cPP/ywevXqpZiYGKWnpys+Pl79+vXTo48+qk8//VRjxoyRJG3bts07rcz06dPLnW+wZcuWmjt3rmw2mxYuXFjqLmQA1mAzpmSFdAAAAFgSPYQAAAAWRyAEAACwOAIhAACAxREIAQAALI5ACAAAYHEEQgAAAIsjEAIAAFgcgRAAAMDiCIQAAAAWRyAEAACwOAIhAACAxREIAQAALI5ACAAAYHH/H93X7dWebmAOAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure()\n",
"ax = fig.gca()\n",
"\n",
"data.isel(fileIndex=0).CH2.plot(ax=ax)\n",
"plt.xlim()\n",
"plt.xlim()\n",
"\n",
"plt.show()"
]
},
{
"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 = \"0069\"\n",
"filePath = folderPath + \"/\" + shotNum + \"/*.h5\"\n",
"# filePath = \"//DyLabNAS/Data/Evaporative_Cooling/2023/05/12/0065/*.h5\"\n",
"filePath = './result_from_experiment/2023-04-24/0013/2023-04-24_0013_Evaporative_Cooling_08.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 = (960, 1040)\n",
"# imageAnalyser.span = (100, 100)\n",
"# imageAnalyser.fraction = (0.1, 0.1)\n",
"\n",
"imageAnalyser.center = (960, 875)\n",
"imageAnalyser.span = (300, 300)\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": [
"from Analyser.FitAnalyser import ThomasFermi2dModel, DensityProfileBEC2dModel, polylog2_2d\n",
"\n",
"fitModel = DensityProfileBEC2dModel()\n",
"# fitModel = ThomasFermi2dModel()\n",
"\n",
"fitAnalyser = FitAnalyser(fitModel, fitDim=2)\n",
"\n",
"# fitAnalyser = FitAnalyser(\"Gaussian-2D\", fitDim=2)\n",
"\n",
"# dataSet_cropOD = dataSet_cropOD.chunk((1,1,100,100))\n",
"\n",
"params = fitAnalyser.guess(dataSet_cropOD, guess_kwargs=dict(pureBECThreshold=0.3), dask=\"parallelized\")\n",
"fitResult = fitAnalyser.fit(dataSet_cropOD, params).load()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"params.compute().item()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fitCurve = fitAnalyser.eval(fitResult, x=np.arange(300), y=np.arange(300), dask=\"parallelized\").load()\n",
"\n",
"fitCurve.plot.pcolormesh(cmap='jet', vmin=0, col=scanAxis[0], row=scanAxis[1])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fitModel2 = Polylog22dModel(prefix='thermal_')\n",
"fitAnalyser2 = FitAnalyser(fitModel2, fitDim=2)\n",
"fitCurve2 = fitAnalyser2.eval(fitResult, x=np.arange(100), y=np.arange(100), dask=\"parallelized\").load()\n",
"\n",
"fitModel3 = ThomasFermi2dModel(prefix='BEC_')\n",
"fitAnalyser3 = FitAnalyser(fitModel3, fitDim=2)\n",
"fitCurve3 = fitAnalyser3.eval(fitResult, x=np.arange(100), y=np.arange(100), dask=\"parallelized\").load()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fig = plt.figure()\n",
"ax = fig.gca()\n",
"\n",
"dataSet_cropOD.sum(dim='x').plot(ax=ax, col=scanAxis[0], row=scanAxis[1])\n",
"fitCurve.sum(dim='x').plot(ax=ax, col=scanAxis[0], row=scanAxis[1])\n",
"fitCurve2.sum(dim='x').plot(ax=ax, col=scanAxis[0], row=scanAxis[1])\n",
"fitCurve3.sum(dim='x').plot(ax=ax, col=scanAxis[0], row=scanAxis[1])\n",
"\n",
"plt.show()\n",
"\n",
"fig = plt.figure()\n",
"ax = fig.gca()\n",
"\n",
"dataSet_cropOD.sum(dim='y').plot(ax=ax, col=scanAxis[0], row=scanAxis[1])\n",
"fitCurve.sum(dim='y').plot(ax=ax, col=scanAxis[0], row=scanAxis[1])\n",
"fitCurve2.sum(dim='y').plot(ax=ax, col=scanAxis[0], row=scanAxis[1])\n",
"fitCurve3.sum(dim='y').plot(ax=ax, col=scanAxis[0], row=scanAxis[1])\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"value = fitAnalyser.get_fit_full_result(fitResult)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"value"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"xdb = xarray_mongodb.XarrayMongoDB(mongoDB)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"value = fitAnalyser.get_fit_value(fitResult)\n",
"value"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"dataSet_cropOD"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"dataSet_cropOD.attrs['name'] = 'name'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"_id, _ = xdb.put(dataSet_cropOD)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"_id"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# _id = '646e3cbbdb91e17db4b4cbd2'"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"xdb.get(_id)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"c = bson.objectid.ObjectId('646e4919802812f029b385d7')\n",
"c"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"xdb.get(c)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import datetime\n",
"post = {\"author\": \"Mike\",\n",
" \"data_id\": _id,\n",
" \"tags\": [\"mongodb\", \"python\", \"pymongo\"],\n",
" \"date\": datetime.datetime.utcnow()}"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"posts = mongoCollection\n",
"post_id = posts.insert_one(post).inserted_id\n",
"post_id"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
" for i in posts.find({'_id': bson.objectid.ObjectId('646e45a4802812f029b385d6')}):\n",
" print(i)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import gridfs\n",
"\n",
"fs = gridfs.GridFS(mongoDB, 'xarray')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fs.put(b\"hello world\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"c = bson.objectid.ObjectId('646e4919802812f029b385d7')\n",
"\n",
"fs.get(_id)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"np.sqrt(np.sum([0.061**2, 0.334**2, 0.447**2]))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "py39",
"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
}