From 2c9f37339733c3d373b24c50469334c1f8fdaae2 Mon Sep 17 00:00:00 2001 From: Stephan Philips <s.g.j.philips@tudelft.nl> Date: Tue, 13 Oct 2020 11:31:10 +0200 Subject: [PATCH] small fixes --- core_tools/data/README.MD | 1 + core_tools/data/SQL/buffer_writer.py | 2 +- core_tools/data/ds/data_set.py | 61 +++++++++++++++++++++++--- core_tools/data/ds/data_set_DataMgr.py | 34 ++++++++++---- core_tools/data/ds/data_set_raw.py | 4 +- core_tools/data/measurement.py | 1 + 6 files changed, 86 insertions(+), 17 deletions(-) diff --git a/core_tools/data/README.MD b/core_tools/data/README.MD index 60a2b3c1..d6c5ea1b 100644 --- a/core_tools/data/README.MD +++ b/core_tools/data/README.MD @@ -18,6 +18,7 @@ In this document the set up, creation, loading and browsing of dataset's is disc - [ ] index database for fast searches + add keyword feature - [ ] GUI to diplay data - [ ] possible future concept :: push local to external database +- [ ] feature : add start and stop also to slicing (e.g. ds.m1[:, 5:10:20] --> slices dataset and its setpoints) # Set up To set up the connection to the server, there are two options: diff --git a/core_tools/data/SQL/buffer_writer.py b/core_tools/data/SQL/buffer_writer.py index 61392d03..6892834a 100644 --- a/core_tools/data/SQL/buffer_writer.py +++ b/core_tools/data/SQL/buffer_writer.py @@ -114,7 +114,7 @@ class buffer_reference: return avg_lambda @staticmethod - def slice_lambda(*args): + def slice_lambda(args): def slice_lambda(data): return data[tuple(args)] return slice_lambda \ No newline at end of file diff --git a/core_tools/data/ds/data_set.py b/core_tools/data/ds/data_set.py index f6bc302f..19186be4 100644 --- a/core_tools/data/ds/data_set.py +++ b/core_tools/data/ds/data_set.py @@ -1,9 +1,11 @@ from core_tools.data.SQL.SQL_database_mgr import SQL_database_manager from core_tools.data.ds.data_set_raw import data_set_raw +from core_tools.data.ds.data_set_DataMgr import m_param_origanizer, dataset_data_description import datetime -import time +import string import json +import time def create_new_data_set(experiment_name, *m_params): ''' @@ -39,9 +41,10 @@ class data_set_desciptor(object): return getattr(getattr(obj,"_data_set__data_set_raw"), self.var) class data_set: - run_id = data_set_desciptor('exp_id') + exp_id = data_set_desciptor('exp_id') running = data_set_desciptor('uploaded_complete') + dbname = data_set_desciptor('dbname') table_name = data_set_desciptor('SQL_table_name') name = data_set_desciptor('exp_name') @@ -65,12 +68,42 @@ class data_set: def __init__(self, ds_raw): self.id = None self.__data_set_raw = ds_raw - self.__property_managment_list = [] - + print(ds_raw) + self.__repr_attr_overview = [] + self.__init_properties(m_param_origanizer(ds_raw.measurement_parameters_raw)) self.last_commit = time.time() - def __init_properties(self): - pass + def __init_properties(self, data_set_content): + ''' + populates the dataset with the measured parameter in the raw dataset + + Args: + data_set_content (m_param_origanizer) : m_param_raw raw objects in their mamagement object + ''' + m_id = data_set_content.get_m_param_id() + + for i in range(len(m_id)): #this is not pretty. + n_sets = len(data_set_content[m_id[i]]) + repr_attr_overview = [] + for j in range(n_sets): + ds_descript = dataset_data_description('', data_set_content.get(m_id[i], j), data_set_content) + + name = 'm' + str(i+1) + string.ascii_lowercase[j] + setattr(self, name, ds_descript) + + if j == 0: + setattr(self, 'm' + str(i+1), ds_descript) + + if j == 0 and n_sets==1: #consistent printing + repr_attr_overview += [('m' + str(i+1), ds_descript)] + ds_descript.name = 'm' + str(i+1) + else: + repr_attr_overview += [(name, ds_descript)] + ds_descript.name = name + + self.__repr_attr_overview += [repr_attr_overview] + + def add_metadata(self, metadata): pass @@ -113,4 +146,18 @@ class data_set: self.__data_set_raw.sync_buffers() SQL_mgr = SQL_database_manager() - SQL_mgr.update_write_cursors(self.__data_set_raw) \ No newline at end of file + SQL_mgr.update_write_cursors(self.__data_set_raw) + + def __repr__(self): + output_print = "DataSet :: {}\n\nid = {}\nTrueID = 1225565471200\n\n".format(self.name, self.run_id) + output_print += "| idn | label | unit | size |\n" + output_print += "---------------------------------------------------------------------------\n" + for i in self.__repr_attr_overview: + for j in i: + output_print += j[1].__repr__() + output_print += "\n" + output_print += "database : \n".format("self.table_name") + output_print += "set_up : \n".format(self.project) + output_print += "project : \n".format(self.set_up) + output_print += "sample_name : \n".format(self.sample_name) + return output_print \ No newline at end of file diff --git a/core_tools/data/ds/data_set_DataMgr.py b/core_tools/data/ds/data_set_DataMgr.py index 437ec51a..be18cdba 100644 --- a/core_tools/data/ds/data_set_DataMgr.py +++ b/core_tools/data/ds/data_set_DataMgr.py @@ -153,8 +153,20 @@ class dataset_data_description(): ''' take the ith slice of dimension i ''' - print(dim, i) - return self + if isinstance(dim, str): + dim = list(string.ascii_lowercase).index(dim) - 23 + + if dim > self.ndim: + raise ValueError("you are trying to average over a dimension that does not exists") + + idx = [slice(None)]*self.ndim + idx[dim] = i + raw_data_org_copy = copy.copy(self.__raw_data_org) + raw_data_cpy = raw_data_org_copy.get(self.__raw_data.param_id, self.__raw_data.nth_set) + raw_data_cpy.dependency.pop(dim) + raw_data_cpy.data_buffer.buffer_lambda = raw_data_cpy.data_buffer.slice_lambda(idx) + + return dataset_data_description(self.name, raw_data_cpy, raw_data_org_copy) def __getitem__(self, args): @@ -165,7 +177,7 @@ class dataset_data_description(): if slices is None: return self - return self.slice(slices[0], slices[1])[tuple(args[len(args)-slices[0]-1:])] + return self.slice(slices[0], slices[1])[tuple(args[slices[0]+1:])] def __repr__(self): output_print = "" @@ -179,6 +191,9 @@ class dataset_data_description(): return output_print class data_set_property_intializer(): + ''' + mockup of dataclass for development purposes-- dont use this class. + ''' def __init__(self, m_params): self.__repr_attr_overview = [] # m_meas_id's @@ -231,8 +246,8 @@ if __name__ == '__main__': data2 = buffer_reference(np.zeros([100, 100, 10])) data3 = buffer_reference(np.zeros([10])) data4 = buffer_reference(np.zeros([100,100])) - data4.buffer[0,:] = -5 - data4.buffer[:,0] = 5 + data1.buffer[0,:] = -5 + data1.buffer[:,0] = 5 a = m_param_raw(param_id=1636274596872, nth_set=0, nth_dim=-1, param_id_m_param=1636274596872, setpoint=False, setpoint_local=False, name_gobal='test', name='chan_1', label='keithley 1', unit='pA', dependency=[1635967634696, 1635967635080], shape='[100, 100]', size=100000, oid=16478, data_buffer=data1) @@ -247,12 +262,15 @@ if __name__ == '__main__': ds = data_set_property_intializer(l) - print(ds) + print(ds.m1a()) # print(ds.m1a.label) # print(ds.m1b.unit) # print(ds.m1b.label) - print(ds.m1a.average('x')) - print(ds.m1a[0,:]) + # print(ds.m1a.average('x')) + print(ds.m1a[:,0]()) + print(ds.m1a[0,:]()) + print(ds.m1a[:,:]()) + print(ds.m1a.slice('x', 0)()) # print(ds.m1a[:,0]) # print(ds.m1a.y()) # print(ds.m1a.z()) \ No newline at end of file diff --git a/core_tools/data/ds/data_set_raw.py b/core_tools/data/ds/data_set_raw.py index 3705dc28..ca03d26c 100644 --- a/core_tools/data/ds/data_set_raw.py +++ b/core_tools/data/ds/data_set_raw.py @@ -1,4 +1,4 @@ -from core_tools.data.SQL.connector import sample_info +from core_tools.data.SQL.connector import sample_info, SQL_conn_info from core_tools.data.SQL.buffer_writer import buffer_reference from dataclasses import dataclass, field import copy @@ -11,6 +11,8 @@ class data_set_raw: set_up : str = field(default_factory=lambda: sample_info.set_up) project : str = field(default_factory=lambda: sample_info.project) sample : str = field(default_factory=lambda: sample_info.sample) + + database : str = field(default_factory=lambda: SQL_conn_info.dbname) SQL_datatable : str = None measurement_parameters : list = field(default_factory=lambda: []) diff --git a/core_tools/data/measurement.py b/core_tools/data/measurement.py index bbf2d094..8b0c7036 100644 --- a/core_tools/data/measurement.py +++ b/core_tools/data/measurement.py @@ -232,5 +232,6 @@ if __name__ == '__main__': # print('results', i ,j, z) ds.add_result((a1, i), (a2, j), (m_param, z)) + print(ds.dataset) t1 =time.time() print(t1-t0) \ No newline at end of file -- GitLab