Files
controller-data-analysis/test.py
T
2023-02-10 10:31:07 +08:00

120 lines
4.7 KiB
Python

import psycopg2
import ana_func
import matplotlib.pyplot as plt
import csv
import pandas as pd
def search_id_by_str(keyword):
conn = psycopg2.connect(database="postgres", user="biopro", password="BioProControlBox", host="127.0.0.1", port="5432")
cur = conn.cursor()
sql_str = f"select id from recording_data_metas WHERE name ILIKE '%"+keyword+"%'"
cur.execute(sql_str)
data = cur.fetchall()
data = [i[0] for i in data]
return data
def read_data(id,channel_list):
conn = psycopg2.connect(database="postgres", user="biopro", password="BioProControlBox", host="127.0.0.1", port="5432")
cur = conn.cursor()
sql_str = f'select "raw_data" from "recording_data_metas" WHERE id = {id}'
cur.execute(sql_str)
data = cur.fetchall()[0][0]
channel_data = []
for channel in channel_list:
i = str(channel)
channel_data_temp = []
for j in data[i]:
# print(j)
sql_str = f'select "data" from "{i}_recording_data_raws" WHERE id = {j}'
cur.execute(sql_str)
raw_data = cur.fetchall()[0][0]
raw_data = raw_data.replace('"***"',' ').split(" ")
channel_data_temp =channel_data_temp + [int(raw_data[k]) for k in range(len(raw_data)) if k%2]
# print(len(channel_data_temp))
channel_data.append(channel_data_temp)
return channel_data
def read_data_csv(file_name=0, start_row=0):
df = pd.read_excel("read_file/2021-8-9-15-42-46-0_CV discussion.xlsx",skiprows = 63, usecols="B,D,F,H")
data = [list(df['Current[nA]']),list(df['Voltage[uV]']),list(df['Unnamed: 7'])]
# print(df)
return data
# read_data_csv()
def CVmode_run():
df = read_data_csv()
print(df[0][:10])
data = [[df[0][i] for i in range(len(df[0])) if df[2][i] == 5], [df[1][i] for i in range(len(df[1])) if df[2][i] == 5]]
print(data[0][:10]) #y:Current[nA]/x:Voltage[uV]
CVmode = ana_func.dataAnalyticFunc(data[1], data[0])
cal_slop_data = CVmode.guess_func()
print(len(cal_slop_data))
integel = CVmode.integral_func('x_data','y_data')
print(integel)
# return [data[1],data[0]]
return [[i for i in range(len(data[0]))],cal_slop_data]
# return [[i for i in range(len(df[0]))],[i/50 for i in df[0]]]
# CVmode()
def slop_run(id, channel_list, win):
# id = 166
# win = 20
print(win)
channel_data = read_data(id, channel_list)
slop_mode = ana_func.dataAnalyticFunc(channel_data[0], channel_data[1])
cal_slop_data = slop_mode.cal_slop_array(window=win)
# return [[i for i in range(len(channel_data[0]))], channel_data[1]]
return [[i for i in range(len(channel_data[0]))], cal_slop_data]
def VTmode_run(id, channel_list, perc):
# id = 166
percentage = perc/100
data_list = {}
print('channel_list', channel_list)
print(percentage)
channel_data = read_data(id, channel_list)
VT_mode = ana_func.dataAnalyticFunc(channel_data[0], channel_data[1])
VT_data_list ,_ = VT_mode.histogram_find_peak()
# print('peak list =', data_list['ground'])
data_list.update(VT_data_list)
peak_list = list(data_list.values())
trigger_line_down = (data_list['ground']-data_list['ceiling'])*percentage + data_list['ceiling']
trigger_line_up = (data_list['ground']-data_list['ceiling'])*(1-percentage) + data_list['ceiling']
trigger = {str(100-perc)+'% point':trigger_line_down, str(perc)+'% point':trigger_line_up}
data_list.update(trigger)
peak_list.append(trigger_line_down)
peak_list.append(trigger_line_up)
triggerpoint = [VT_mode.trigger_point('y_data','x_data',trigger_line_down, order=-1,drop=-1), VT_mode.trigger_point('y_data','x_data',trigger_line_up)]
# slope_tan = math.atan2(triggerpoint[0][1]-triggerpoint[1][1],triggerpoint[0][0]-triggerpoint[1][0])
center_point = [(triggerpoint[0][0]+triggerpoint[1][0])/2,(triggerpoint[0][1]+triggerpoint[1][0])/2]
slope = (triggerpoint[0][1]-triggerpoint[1][1])/(triggerpoint[0][0]-triggerpoint[1][0])
center_point_dict = {'center point key': center_point[0], 'center point value':center_point[1], 'slope': slope}
print('trigger point',triggerpoint, slope, center_point)
data_list.update(center_point_dict)
# Plot
# plt.plot(channel_data[0],channel_data[1],'o',markersize=2)
# print(peak_list)
# for i in peak_list[1:]:
# plt.hlines(i,min(channel_data[0]),max(channel_data[0]),color='r')
# for j in triggerpoint:
# plt.plot(j[0],j[1],'o',markersize=5)
# plt.savefig('fig/test'+ str(id) +'.png')
# plt.close()
resultList = [id , *channel_data, peak_list, triggerpoint]
channel_data.append(peak_list)
channel_data.append(triggerpoint)
return resultList, data_list
# if __name__ == '__main__':
# VTmode_run()