Files
controller-data-analysis/new/analysis_mode.py
T
2023-06-01 16:23:40 +08:00

86 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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