86 lines
3.4 KiB
Python
86 lines
3.4 KiB
Python
from ana_func import dataAnalyticFunc
|
||
import matplotlib.pyplot as plt
|
||
import csv
|
||
import pandas as pd
|
||
import time
|
||
|
||
async 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 = 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 = 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(args):
|
||
x_data, y_data, percentage = args
|
||
data_list = {}
|
||
### create dataAnalyticFunc instance
|
||
# print('x', x_data, 'y', y_data)
|
||
VT_mode = dataAnalyticFunc(x_data, y_data)
|
||
peak_wid ,_ = VT_mode.histogram_find_peak()
|
||
if len(peak_wid) != 2:
|
||
print('check if data fit VT mode.')
|
||
return [[], [[], []]],{}
|
||
VT_data_list = {'ground':round(min(peak_wid)), 'ceiling':round(max(peak_wid)) }
|
||
# print('peak list =', data_list['ground'])
|
||
data_list.update(VT_data_list)
|
||
peak_list = list(data_list.values())
|
||
|
||
trigger_line_down = (data_list['ceiling']-data_list['ground'])*percentage / 1e2 + data_list['ground']
|
||
trigger_line_up = (data_list['ceiling']-data_list['ground'])*(1-percentage / 1e2) + data_list['ground']
|
||
|
||
trigger = {str(percentage)+'% point':trigger_line_down, str(100-percentage)+'% point':trigger_line_up}
|
||
data_list.update(trigger)
|
||
|
||
peak_list.append(trigger_line_down)
|
||
peak_list.append(trigger_line_up)
|
||
|
||
start_time = time.time()
|
||
triggerpoint = [VT_mode.trigger_point('y_data','x_data',trigger_line_down,gte = False,head = True), VT_mode.trigger_point('y_data','x_data',trigger_line_up,gte=True,head=False)]
|
||
print("trigger end:%f 秒" % (time.time() - start_time))
|
||
# 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()
|
||
print([peak_list, triggerpoint] , data_list)
|
||
return [peak_list, triggerpoint] , data_list
|
||
|
||
|
||
def movstd_run(channel_data):
|
||
movs_mode = dataAnalyticFunc(channel_data[0], channel_data[1])
|
||
result = movs_mode.SMA(20,5)
|
||
return result
|