diff --git a/DataContainer/MongoDB.py b/DataContainer/MongoDB.py index 198613e..36fe098 100644 --- a/DataContainer/MongoDB.py +++ b/DataContainer/MongoDB.py @@ -1,3 +1,6 @@ +from collections import OrderedDict + +import numpy as np import pymongo import xarray_mongodb import bson @@ -273,6 +276,94 @@ class MongoDB: return self.mongoDB['global'].find_one(filter) + def read_global_all(self, shotNum, date=None): + + from xarray.core.utils import equivalent + + if not date is None: + self.set_date(date) + + filter = { + 'year': self.year, + 'month': self.month, + 'day': self.day, + 'shotNum': shotNum, + } + + result = {} + dropped_attrs = OrderedDict() + + docs = self.mongoDB['global'].find(filter) + + for doc in docs: + + global_parameters = doc['global_parameters'] + + result.update( + { + key: value + for key, value in global_parameters.items() + if key not in result and key not in dropped_attrs.keys() + } + ) + + result = { + key: value + for key, value in result.items() + if key not in global_parameters or equivalent(global_parameters[key], value) + } + + dropped_attrs.update( + { + key: [] + for key in global_parameters if key not in result + } + ) + + for doc in docs: + + global_parameters = doc['global_parameters'] + + dropped_attrs.update( + { + key: np.append(dropped_attrs[key], global_parameters[key]) + for key in dropped_attrs.keys() + } + ) + + scan_attrs = OrderedDict() + scan_length = [] + for attrs_key in dropped_attrs.keys(): + flag = True + for key in scan_attrs.keys(): + if equivalent(scan_attrs[key], dropped_attrs[attrs_key]): + flag = False + + result.update({attrs_key: key}) + + break + if flag: + scan_attrs.update({ + attrs_key: dropped_attrs[attrs_key] + }) + scan_length = np.append(scan_length, len(dropped_attrs[attrs_key])) + + result.update( + { + key: value + for key, value in scan_attrs.items() + } + ) + + result.update( + { + "scanAxis": list(scan_attrs.keys()), + "scanAxisLength": scan_length, + } + ) + + return result + def _load_data_single(self, mongoID, engine): if engine == 'xarray': return self.xdb.get(mongoID) diff --git a/testMongoDB.ipynb b/testMongoDB.ipynb index fb88c95..402e167 100644 --- a/testMongoDB.ipynb +++ b/testMongoDB.ipynb @@ -16,11 +16,11 @@ }, { "cell_type": "code", - "execution_count": 172, + "execution_count": 178, "metadata": {}, "outputs": [], "source": [ - "mongoClient = pymongo.MongoClient('mongodb://userAdmin:DyLab2021userAdmin@127.0.0.1:27017/?authMechanism=DEFAULT')\n", + "mongoClient = pymongo.MongoClient('mongodb://control:DyLab2021@127.0.0.1:27017/?authMechanism=DEFAULT')\n", "mongoDB = mongoClient.testDB\n", "mongoCollection = mongoDB.testCollection" ] @@ -5474,7 +5474,149 @@ }, { "cell_type": "code", - "execution_count": 170, + "execution_count": 185, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'TOF_free': 0.022,\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", + " 'c_duration': 0.2,\n", + " 'carrier_amp': 3,\n", + " 'carrier_freq': 0.85,\n", + " 'carrier_offset': 0,\n", + " 'carrier_phase': 0,\n", + " 'channel_in_use': 1,\n", + " 'cmot_final_current': 0.65,\n", + " 'cmot_hold': 0.06,\n", + " 'cmot_initial_current': 0.18,\n", + " 'compX_current': 0,\n", + " 'compX_current_sg': 0.0,\n", + " 'compX_initial_current': 0,\n", + " 'compY_current': 0,\n", + " 'compY_current_sg': 0.0,\n", + " 'compY_final_current': 0,\n", + " 'compY_initial_current': 0,\n", + " 'compZ_current': 0,\n", + " 'compZ_current_sg': 0.189,\n", + " 'compZ_final_current': 0.264,\n", + " 'compZ_initial_current': 0,\n", + " 'default_camera': 0,\n", + " 'deltaf': 0.161,\n", + " 'evap_1_arm_1_final_pow': 0.35,\n", + " 'evap_1_arm_1_mod_depth_final': 0,\n", + " 'evap_1_arm_1_mod_depth_initial': 1.0,\n", + " 'evap_1_arm_1_mod_ramp_duration': 1.15,\n", + " 'evap_1_arm_1_pow_ramp_duration': 1.65,\n", + " 'evap_1_arm_1_start_pow': 7,\n", + " 'evap_1_arm_2_final_pow': 5,\n", + " 'evap_1_arm_2_ramp_duration': 0.5,\n", + " 'evap_1_arm_2_start_pow': 0,\n", + " 'evap_1_mod_ramp_trunc_value': 1,\n", + " 'evap_1_pow_ramp_trunc_value': 1.0,\n", + " 'evap_1_rate_constant_1': 0.525,\n", + " 'evap_1_rate_constant_2': 0.51,\n", + " 'evap_2_arm_1_final_pow': 0.037,\n", + " 'evap_2_arm_1_start_pow': 0.35,\n", + " 'evap_2_arm_2_final_pow': 0.09,\n", + " 'evap_2_arm_2_start_pow': 5,\n", + " 'evap_2_ramp_duration': 1.0,\n", + " 'evap_2_ramp_trunc_value': 1.0,\n", + " 'evap_2_rate_constant_1': 0.37,\n", + " 'evap_2_rate_constant_2': 0.71,\n", + " 'evap_3_arm_1_final_pow': 0.1038,\n", + " 'evap_3_arm_1_mod_depth_final': 0.43,\n", + " 'evap_3_arm_1_mod_depth_initial': 0,\n", + " 'evap_3_arm_1_start_pow': 0.037,\n", + " 'evap_3_ramp_duration': 0.1,\n", + " 'evap_3_ramp_trunc_value': 1.0,\n", + " 'evap_3_rate_constant_1': -0.879,\n", + " 'evap_3_rate_constant_2': -0.297,\n", + " 'final_amp': 0.00012,\n", + " 'final_freq': 104.0,\n", + " 'final_pow_1': 0.1038,\n", + " 'final_pow_2': 0.09,\n", + " 'gradCoil_current': 0.18,\n", + " 'gradCoil_current_sg': 0,\n", + " 'imaging_method': 'in_situ_absorption',\n", + " 'imaging_pulse_duration': 2.5e-05,\n", + " 'imaging_wavelength': 4.21291e-07,\n", + " 'initial_amp': 0.62,\n", + " 'initial_freq': 102.13,\n", + " 'mod_depth_fin': 0.43,\n", + " 'mod_depth_ini': 0,\n", + " 'mod_depth_initial': 1.0,\n", + " 'mot_3d_amp': 0.62,\n", + " 'mot_3d_camera_trigger_duration': 0.00025,\n", + " 'mot_3d_freq': 102.13,\n", + " 'mot_load_duration': 2,\n", + " 'odt_axis_camera_trigger_duration': 0.002,\n", + " 'odt_hold_time_1': 0.01,\n", + " 'odt_hold_time_2': 0.1,\n", + " 'odt_hold_time_3': 0.1,\n", + " 'odt_hold_time_4': 1.0,\n", + " 'odt_hold_time_5': 0.01,\n", + " 'operation_mode': 'SWEEP',\n", + " 'pow_arm_1': 7,\n", + " 'pow_arm_2': 0,\n", + " 'pulse_delay': 8e-05,\n", + " 'pulse_width': 0.01,\n", + " 'push_amp': 0.16,\n", + " 'push_freq': 102.66,\n", + " 'ramp_duration': 1,\n", + " 'recomp_ramp_duration': 0.5,\n", + " 'recomp_ramp_pow_fin_arm_1': 0.1038,\n", + " 'recomp_ramp_pow_fin_arm_2': 0.09,\n", + " 'recomp_ramp_pow_ini_arm_1': 0.1038,\n", + " 'recomp_ramp_pow_ini_arm_2': 0.09,\n", + " 'save_results': False,\n", + " 'sin_mod_amplitude': 0.00519,\n", + " 'sin_mod_dc_offset': 0.1038,\n", + " 'sin_mod_duration': nan,\n", + " 'sin_mod_freq': nan,\n", + " 'sin_mod_phase': 0.0,\n", + " 'start_pow_1': 0.037,\n", + " 'start_pow_2': 0.09,\n", + " 'stern_gerlach_duration': 0.001,\n", + " 'sweep_duration': 0.4,\n", + " 'sweep_start_freq': 0.7695,\n", + " 'sweep_stop_freq': 0.9305,\n", + " 'tf_meas_ramp_duration': 0.1,\n", + " 'wait_after_2dmot_off': 0,\n", + " 'wait_time_between_images': 0.22,\n", + " 'wavetype': 'SINE',\n", + " 'x_offset': 0.0,\n", + " 'x_offset_img': 0,\n", + " 'y_offset': 0.0,\n", + " 'y_offset_img': 0,\n", + " 'z_offset': 0.189,\n", + " 'z_offset_img': 0.189,\n", + " 'compX_final_current': [],\n", + " 'scanAxis': ['compX_final_current'],\n", + " 'scanAxisLength': array([0.])}" + ] + }, + "execution_count": 185, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from DataContainer.MongoDB import MongoDB\n", + "\n", + "DB = MongoDB(mongoClient, mongoDB, date='2023/05/23')\n", + "\n", + "DB.read_global_all('0069')" + ] + }, + { + "cell_type": "code", + "execution_count": 182, "metadata": {}, "outputs": [], "source": [ @@ -5772,27 +5914,76 @@ " result = {}\n", " dropped_attrs = OrderedDict()\n", " \n", - " for doc in self.mongoDB['global'].find(filter):\n", + " docs = self.mongoDB['global'].find(filter)\n", + " \n", + " for doc in docs:\n", + " \n", + " global_parameters = doc['global_parameters']\n", " \n", " result.update(\n", " {\n", " key: value\n", - " for key, value in attrs.items()\n", + " for key, value in global_parameters.items()\n", " if key not in result and key not in dropped_attrs.keys()\n", " }\n", " )\n", + " \n", " result = {\n", " key: value\n", " for key, value in result.items()\n", - " if key not in attrs or equivalent(attrs[key], value)\n", + " if key not in global_parameters or equivalent(global_parameters[key], value)\n", " }\n", + " \n", " dropped_attrs.update(\n", " {\n", " key: []\n", - " for key in attrs if key not in result \n", + " for key in global_parameters if key not in result \n", " }\n", " )\n", " \n", + " for doc in docs:\n", + " \n", + " global_parameters = doc['global_parameters']\n", + " \n", + " dropped_attrs.update(\n", + " {\n", + " key: np.append(dropped_attrs[key], global_parameters[key])\n", + " for key in dropped_attrs.keys()\n", + " }\n", + " ) \n", + " \n", + " scan_attrs = OrderedDict()\n", + " scan_length = []\n", + " for attrs_key in dropped_attrs.keys():\n", + " flag = True\n", + " for key in scan_attrs.keys():\n", + " if equivalent(scan_attrs[key], dropped_attrs[attrs_key]):\n", + " flag = False\n", + " \n", + " result.update({attrs_key: key})\n", + "\n", + " break\n", + " if flag:\n", + " scan_attrs.update({\n", + " attrs_key: dropped_attrs[attrs_key]\n", + " })\n", + " scan_length = np.append(scan_length, len(dropped_attrs[attrs_key]))\n", + "\n", + " result.update(\n", + " {\n", + " key: value\n", + " for key, value in scan_attrs.items()\n", + " }\n", + " )\n", + "\n", + " result.update(\n", + " {\n", + " \"scanAxis\": list(scan_attrs.keys()),\n", + " \"scanAxisLength\": scan_length,\n", + " }\n", + " )\n", + "\n", + " return result\n", " \n", " def _load_data_single(self, mongoID, engine):\n", " if engine == 'xarray':\n", @@ -7001,6 +7192,144 @@ "DB.create_global(shotNum, dataSet)" ] }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'TOF_free': 0.022,\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", + " 'c_duration': 0.2,\n", + " 'carrier_amp': 3,\n", + " 'carrier_freq': 0.85,\n", + " 'carrier_offset': 0,\n", + " 'carrier_phase': 0,\n", + " 'channel_in_use': 1,\n", + " 'cmot_final_current': 0.65,\n", + " 'cmot_hold': 0.06,\n", + " 'cmot_initial_current': 0.18,\n", + " 'compX_current': 0,\n", + " 'compX_current_sg': 0.0,\n", + " 'compX_initial_current': 0,\n", + " 'compY_current': 0,\n", + " 'compY_current_sg': 0.0,\n", + " 'compY_final_current': 0,\n", + " 'compY_initial_current': 0,\n", + " 'compZ_current': 0,\n", + " 'compZ_current_sg': 0.189,\n", + " 'compZ_final_current': 0.264,\n", + " 'compZ_initial_current': 0,\n", + " 'default_camera': 0,\n", + " 'deltaf': 0.161,\n", + " 'evap_1_arm_1_final_pow': 0.35,\n", + " 'evap_1_arm_1_mod_depth_final': 0,\n", + " 'evap_1_arm_1_mod_depth_initial': 1.0,\n", + " 'evap_1_arm_1_mod_ramp_duration': 1.15,\n", + " 'evap_1_arm_1_pow_ramp_duration': 1.65,\n", + " 'evap_1_arm_1_start_pow': 7,\n", + " 'evap_1_arm_2_final_pow': 5,\n", + " 'evap_1_arm_2_ramp_duration': 0.5,\n", + " 'evap_1_arm_2_start_pow': 0,\n", + " 'evap_1_mod_ramp_trunc_value': 1,\n", + " 'evap_1_pow_ramp_trunc_value': 1.0,\n", + " 'evap_1_rate_constant_1': 0.525,\n", + " 'evap_1_rate_constant_2': 0.51,\n", + " 'evap_2_arm_1_final_pow': 0.037,\n", + " 'evap_2_arm_1_start_pow': 0.35,\n", + " 'evap_2_arm_2_final_pow': 0.09,\n", + " 'evap_2_arm_2_start_pow': 5,\n", + " 'evap_2_ramp_duration': 1.0,\n", + " 'evap_2_ramp_trunc_value': 1.0,\n", + " 'evap_2_rate_constant_1': 0.37,\n", + " 'evap_2_rate_constant_2': 0.71,\n", + " 'evap_3_arm_1_final_pow': 0.1038,\n", + " 'evap_3_arm_1_mod_depth_final': 0.43,\n", + " 'evap_3_arm_1_mod_depth_initial': 0,\n", + " 'evap_3_arm_1_start_pow': 0.037,\n", + " 'evap_3_ramp_duration': 0.1,\n", + " 'evap_3_ramp_trunc_value': 1.0,\n", + " 'evap_3_rate_constant_1': -0.879,\n", + " 'evap_3_rate_constant_2': -0.297,\n", + " 'final_amp': 0.00012,\n", + " 'final_freq': 104.0,\n", + " 'final_pow_1': 0.1038,\n", + " 'final_pow_2': 0.09,\n", + " 'gradCoil_current': 0.18,\n", + " 'gradCoil_current_sg': 0,\n", + " 'imaging_method': 'in_situ_absorption',\n", + " 'imaging_pulse_duration': 2.5e-05,\n", + " 'imaging_wavelength': 4.21291e-07,\n", + " 'initial_amp': 0.62,\n", + " 'initial_freq': 102.13,\n", + " 'mod_depth_fin': 0.43,\n", + " 'mod_depth_ini': 0,\n", + " 'mod_depth_initial': 1.0,\n", + " 'mot_3d_amp': 0.62,\n", + " 'mot_3d_camera_trigger_duration': 0.00025,\n", + " 'mot_3d_freq': 102.13,\n", + " 'mot_load_duration': 2,\n", + " 'odt_axis_camera_trigger_duration': 0.002,\n", + " 'odt_hold_time_1': 0.01,\n", + " 'odt_hold_time_2': 0.1,\n", + " 'odt_hold_time_3': 0.1,\n", + " 'odt_hold_time_4': 1.0,\n", + " 'odt_hold_time_5': 0.01,\n", + " 'operation_mode': 'SWEEP',\n", + " 'pow_arm_1': 7,\n", + " 'pow_arm_2': 0,\n", + " 'pulse_delay': 8e-05,\n", + " 'pulse_width': 0.01,\n", + " 'push_amp': 0.16,\n", + " 'push_freq': 102.66,\n", + " 'ramp_duration': 1,\n", + " 'recomp_ramp_duration': 0.5,\n", + " 'recomp_ramp_pow_fin_arm_1': 0.1038,\n", + " 'recomp_ramp_pow_fin_arm_2': 0.09,\n", + " 'recomp_ramp_pow_ini_arm_1': 0.1038,\n", + " 'recomp_ramp_pow_ini_arm_2': 0.09,\n", + " 'save_results': False,\n", + " 'sin_mod_amplitude': 0.00519,\n", + " 'sin_mod_dc_offset': 0.1038,\n", + " 'sin_mod_duration': nan,\n", + " 'sin_mod_freq': nan,\n", + " 'sin_mod_phase': 0.0,\n", + " 'start_pow_1': 0.037,\n", + " 'start_pow_2': 0.09,\n", + " 'stern_gerlach_duration': 0.001,\n", + " 'sweep_duration': 0.4,\n", + " 'sweep_start_freq': 0.7695,\n", + " 'sweep_stop_freq': 0.9305,\n", + " 'tf_meas_ramp_duration': 0.1,\n", + " 'wait_after_2dmot_off': 0,\n", + " 'wait_time_between_images': 0.22,\n", + " 'wavetype': 'SINE',\n", + " 'x_offset': 0.0,\n", + " 'x_offset_img': 0,\n", + " 'y_offset': 0.0,\n", + " 'y_offset_img': 0,\n", + " 'z_offset': 0.189,\n", + " 'z_offset_img': 0.189,\n", + " 'compX_final_current': [],\n", + " 'scanAxis': ['compX_final_current'],\n", + " 'scanAxisLength': array([0.])}" + ] + }, + "execution_count": 183, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "DB.read_global_all('0069')" + ] + }, { "cell_type": "code", "execution_count": 171,