-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata_store.py
More file actions
113 lines (85 loc) · 4.14 KB
/
data_store.py
File metadata and controls
113 lines (85 loc) · 4.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
from os import makedirs, path
import json
import pandas as pd
from database_connection import DataBase
import pickle
def write_to_pickle(experiment_df: pd.DataFrame, background_df: pd.DataFrame, experiment_parameters: dict):
# Make file folder
name = experiment_parameters["Start_date"].replace(":","-").replace(" ","T")
folderpath = path.join(path.dirname(path.abspath(__file__)), name)
makedirs(folderpath, exist_ok=True)
with open(path.join(folderpath, f'{name}.pkl'), 'wb') as file:
pickle.dump((experiment_df, background_df, experiment_parameters), file)
print('Saved to pickle')
print()
def get_from_pickle(name):
folderpath = path.join(path.dirname(path.abspath(__file__)), name)
with open(path.join(folderpath, f'{name}.pkl'), 'wb') as file:
experiment_df, background_df, experiment_parameters = pickle.load(file)
print("Unpickled")
print()
return experiment_df, background_df, experiment_parameters
def write_to_folder(experiment_df: pd.DataFrame, background_df: pd.DataFrame, experiment_parameters: dict):
# Make file folder
foldername = experiment_parameters["Start_date"].replace(":","-").replace(" ","T")
folderpath = path.join(path.dirname(path.abspath(__file__)), foldername)
makedirs(folderpath, exist_ok=True)
# Save experiment_parameters to file
with open(path.join(folderpath, 'experiment_parameters.json'), 'w') as f:
json.dump(experiment_parameters, f)
print("Written experiment_parameters to json")
# Save experiment_df to file
experiment_df.to_csv(path.join(folderpath, 'angle_voltage.csv'), header=True, index=False)
print("Written data to file")
# Save background_df to file
background_df.to_csv(path.join(folderpath, 'background.csv'), header=True, index=False)
print("Written background to file")
print()
def get_from_folder(foldername:str):
folderpath = path.join(path.dirname(path.abspath(__file__)), foldername)
try:
experiment_df = pd.read_csv(path.join(folderpath, 'angle_voltage.csv'))
except:
experiment_df = None
try:
background_df = pd.read_csv(path.join(folderpath, 'background.csv'))
except:
background_df = None
try:
with open(path.join(folderpath, 'experiment_parameters.json'), 'r') as json_file:
experiment_parameters = json.load(json_file)
except:
experiment_parameters = None
print("Got data from database")
print()
return experiment_df, background_df, experiment_parameters
def write_to_database(experiment_df: pd.DataFrame, background_df: pd.DataFrame, experiment_parameters: dict, user:str):
"""experiment_df must have this format: Angle PD_Voltage LED_Current LED_Voltage"""
metadata = {
'MetaData': [experiment_parameters,],
'Background': background_df
}
## Save to database
obj=DataBase()
responce = obj.save(3,1001,metadata,experiment_df,user,'Goniometer')
## Show database responce
if responce == False:
print("Something went wrong saving to database.")
raise Exception("Something went wrong saving to database.")
print()
def get_from_database(metadata_filter:dict, is_and:bool = True, remove_database_info=True):
# Get from database
obj = DataBase()
experiment_parameters_df, experiment_df, background_df = obj.get_goniometer(metadata_filter, is_and)
# Remove database fields if desired
if remove_database_info:
experiment_parameters_df = experiment_parameters_df.drop(columns=['Tracker_Id',])
columns_to_remove = ['DUT_Name', 'Pin', 'Tracker_Id']
experiment_df = experiment_df.drop(columns=columns_to_remove)
background_df = background_df.drop(columns=columns_to_remove)
# Convert experiment_parameters from pd.dataframe to dict
experiment_parameters = experiment_parameters_df.to_dict(orient='index')
experiment_parameters = list(experiment_parameters.values())[0]
print("Got data from database")
print()
return experiment_df, background_df, experiment_parameters