120 lines
4.7 KiB
Python
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() |