plot_flight_borders: add flags for flexibility. tm_wheel_parser.py: plot data distribution

This commit is contained in:
Danila Gamkov
2025-08-07 14:13:43 +03:00
parent cf3c9290b0
commit d91039ca21
12 changed files with 820 additions and 202 deletions

View File

@@ -11,11 +11,8 @@ import pandas as pd
from datetime import datetime
asotr_kit = 1
# fname = f'../python_cyclo/data/asotr0{asotr_kit}_data_T.csv'
fname = f'../data/asotr/asotr0{asotr_kit}_data_T.csv'
dateparse = lambda x: datetime.strptime(x, "%d.%m.%Y %H:%M:%S.%f")
data = pd.read_csv(fname, sep=';', parse_dates=['timestamp'], date_parser=dateparse)
data = pd.read_csv(fname, sep=';', parse_dates=["timestamp"], date_format="%d.%m.%Y %H:%M:%S.%f")
# date = '20.03.2025'
# period = '1 мин'
@@ -48,7 +45,6 @@ data = pd.read_csv(fname, sep=';', parse_dates=['timestamp'], date_parser=datepa
# name_fig = 'step_response_KDI_20242403.png'
# interp = {'method': 'polynomial', 'order': 1}
# thermocycle_info = {'date': '01.04.2025',
# 'time_begin': ['01.04.2025 16:27:00', '01.04.2025 18:00:00'],
@@ -62,6 +58,8 @@ data = pd.read_csv(fname, sep=';', parse_dates=['timestamp'], date_parser=datepa
# 'name_fig': f'{name}.png', 'font': 10}
fname = f'../../python_cyclo/data/asotr0{asotr_kit}_data_T.csv'
data = pd.read_csv(fname, sep=';', parse_dates=["timestamp"], date_format="%d.%m.%Y %H:%M:%S.%f")
interp = {'method': 'polynomial', 'order': 1}
@@ -69,46 +67,12 @@ data_info_list = []
thermocycle_info_list = []
cut_step_resp_list = []
data_info = {'data': data, 'device': 'летный', 'channel': 'ch1', 'period': '1 мин',
data_info = {'data': data, 'device': 'КДИ', 'channel': 'ch1', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '25.04.2025',
'time_begin': ['24.04.2025 22:46:32', '25.04.2025 00:19:33'],
thermocycle_info = {'date': '01.04.2025',
'time_begin': ['01.04.2025 16:27:13', '01.04.2025 18:00:18'],
'duration_sec': 92*60, 'type': 'step', 'type_ru': 'ступенчатое'}
cut_step_resp = {'time_step_begin': '25.04.2025 01:18:01', 'step_duration': 30*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch2', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '25.04.2025',
'time_begin': ['24.04.2025 22:46:32', '25.04.2025 00:19:33'],
'duration_sec': 92*60, 'type': 'step1_to2', 'type_ru': 'ступенчатое'}
cut_step_resp = {'time_step_begin': '25.04.2025 01:18:01', 'step_duration': 30*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch1', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '25.04.2025',
'time_begin': ['25.04.2025 01:52:34', '25.04.2025 03:25:34'],
'duration_sec': 92*60, 'type': 'impulse', 'type_ru': 'импульсное'}
cut_step_resp = {'time_step_begin': '25.04.2025 04:24:00', 'step_duration': 15*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch2', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '25.04.2025',
'time_begin': ['25.04.2025 01:52:34', '25.04.2025 03:25:34'],
'duration_sec': 92*60, 'type': 'impulse1_to2', 'type_ru': 'импульсное'}
cut_step_resp = {'time_step_begin': '25.04.2025 04:24:00', 'step_duration': 20*60}
cut_step_resp = {'time_step_begin': '01.04.2025 18:53:20', 'step_duration': 25*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
@@ -116,144 +80,199 @@ cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch2', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '30.04.2025',
'time_begin': ['29.04.2025 22:02:54', '29.04.2025 23:35:54'],
'duration_sec': 93*60, 'type': 'step', 'type_ru': 'ступенчатое'}
cut_step_resp = {'time_step_begin': '30.04.2025 00:36:01', 'step_duration': 30*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch1', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '30.04.2025',
'time_begin': ['29.04.2025 22:02:54', '29.04.2025 23:35:54'],
'duration_sec': 93*60, 'type': 'step2_to1', 'type_ru': 'ступенчатое'}
cut_step_resp = {'time_step_begin': '30.04.2025 00:36:01', 'step_duration': 30*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch2', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '30.04.2025',
'time_begin': ['30.04.2025 01:09:55', '30.04.2025 02:41:54'],
'duration_sec': 93*60, 'type': 'impulse', 'type_ru': 'импульсное'}
cut_step_resp = {'time_step_begin': '30.04.2025 03:42:00', 'step_duration': 15*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch1', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '30.04.2025',
'time_begin': ['30.04.2025 01:09:55', '30.04.2025 02:41:54'],
'duration_sec': 93*60, 'type': 'impulse2_to1', 'type_ru': 'импульсное'}
cut_step_resp = {'time_step_begin': '30.04.2025 03:42:00', 'step_duration': 20*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch4', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '02.05.2025',
'time_begin': ['01.05.2025 22:05:30', '01.05.2025 23:38:40'],
'duration_sec': 93*60, 'type': 'step', 'type_ru': 'ступенчатое'}
cut_step_resp = {'time_step_begin': '02.05.2025 00:39:00', 'step_duration': 30*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch3', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '02.05.2025',
'time_begin': ['01.05.2025 22:05:30', '01.05.2025 23:38:40'],
'duration_sec': 93*60, 'type': 'step4_to3', 'type_ru': 'ступенчатое'}
cut_step_resp = {'time_step_begin': '02.05.2025 00:39:00', 'step_duration': 30*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch4', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '02.05.2025',
'time_begin': ['02.05.2025 01:12:30', '02.05.2025 02:46:02'],
'duration_sec': 93*60, 'type': 'impulse', 'type_ru': 'импульсное'}
cut_step_resp = {'time_step_begin': '02.05.2025 03:45:02', 'step_duration': 15*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch3', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '02.05.2025',
'time_begin': ['02.05.2025 01:12:30', '02.05.2025 02:46:02'],
'duration_sec': 93*60, 'type': 'impulse4_to3', 'type_ru': 'импульсное'}
cut_step_resp = {'time_step_begin': '02.05.2025 03:45:02', 'step_duration': 20*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch3', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '04.05.2025',
'time_begin': ['03.05.2025 22:12:11', '03.05.2025 23:45:10'],
'duration_sec': 93*60, 'type': 'step', 'type_ru': 'ступенчатое'}
cut_step_resp = {'time_step_begin': '04.05.2025 00:42:01', 'step_duration': 26*60}
# interp = {'method': 'polynomial', 'order': 1}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
# data_info_list = []
# thermocycle_info_list = []
# cut_step_resp_list = []
data_info = {'data': data, 'device': 'летный', 'channel': 'ch4', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '04.05.2025',
'time_begin': ['03.05.2025 22:12:11', '03.05.2025 23:45:10'],
'duration_sec': 93*60, 'type': 'step3_to4', 'type_ru': 'ступенчатое'}
cut_step_resp = {'time_step_begin': '04.05.2025 00:42:01', 'step_duration': 30*60}
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch1', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '25.04.2025',
# 'time_begin': ['24.04.2025 22:46:32', '25.04.2025 00:19:33'],
# 'duration_sec': 92*60, 'type': 'step', 'type_ru': 'ступенчатое'}
# cut_step_resp = {'time_step_begin': '25.04.2025 01:18:01', 'step_duration': 30*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch3', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '04.05.2025',
'time_begin': ['04.05.2025 01:19:10', '04.05.2025 02:52:11'],
'duration_sec': 93*60, 'type': 'impulse', 'type_ru': 'импульсное'}
cut_step_resp = {'time_step_begin': '04.05.2025 03:48:01', 'step_duration': 15*60}
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch2', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '25.04.2025',
# 'time_begin': ['24.04.2025 22:46:32', '25.04.2025 00:19:33'],
# 'duration_sec': 92*60, 'type': 'step1_to2', 'type_ru': 'ступенчатое'}
# cut_step_resp = {'time_step_begin': '25.04.2025 01:18:01', 'step_duration': 30*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
data_info = {'data': data, 'device': 'летный', 'channel': 'ch4', 'period': '1 мин',
'find_accuracy': 'seconds'}
thermocycle_info = {'date': '04.05.2025',
'time_begin': ['04.05.2025 01:19:10', '04.05.2025 02:52:11'],
'duration_sec': 93*60, 'type': 'impulse3_to4', 'type_ru': 'импульсное'}
cut_step_resp = {'time_step_begin': '04.05.2025 03:48:01', 'step_duration': 20*60}
data_info_list.append(data_info)
thermocycle_info_list.append(thermocycle_info)
cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch1', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '25.04.2025',
# 'time_begin': ['25.04.2025 01:52:34', '25.04.2025 03:25:34'],
# 'duration_sec': 92*60, 'type': 'impulse', 'type_ru': 'импульсное'}
# cut_step_resp = {'time_step_begin': '25.04.2025 04:24:00', 'step_duration': 15*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch2', 'period': '1 мин',
# 'find_accuracy2: 'seconds'}
# thermocycle_info = {'date': '25.04.2025',
# 'time_begin': ['25.04.2025 01:52:34', '25.04.2025 03:25:34'],
# 'duration_sec': 92*60, 'type': 'impulse1_to2', 'type_ru': 'импульсное'}
# cut_step_resp = {'time_step_begin': '25.04.2025 04:24:00', 'step_duration': 20*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch2', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '30.04.2025',
# 'time_begin': ['29.04.2025 22:02:54', '29.04.2025 23:35:54'],
# 'duration_sec': 93*60, 'type': 'step', 'type_ru': 'ступенчатое'}
# cut_step_resp = {'time_step_begin': '30.04.2025 00:36:01', 'step_duration': 30*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch1', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '30.04.2025',
# 'time_begin': ['29.04.2025 22:02:54', '29.04.2025 23:35:54'],
# 'duration_sec': 93*60, 'type': 'step2_to1', 'type_ru': 'ступенчатое'}
# cut_step_resp = {'time_step_begin': '30.04.2025 00:36:01', 'step_duration': 30*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch2', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '30.04.2025',
# 'time_begin': ['30.04.2025 01:09:55', '30.04.2025 02:41:54'],
# 'duration_sec': 93*60, 'type': 'impulse', 'type_ru': 'импульсное'}
# cut_step_resp = {'time_step_begin': '30.04.2025 03:42:00', 'step_duration': 15*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch1', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '30.04.2025',
# 'time_begin': ['30.04.2025 01:09:55', '30.04.2025 02:41:54'],
# 'duration_sec': 93*60, 'type': 'impulse2_to1', 'type_ru': 'импульсное'}
# cut_step_resp = {'time_step_begin': '30.04.2025 03:42:00', 'step_duration': 20*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch4', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '02.05.2025',
# 'time_begin': ['01.05.2025 22:05:30', '01.05.2025 23:38:40'],
# 'duration_sec': 93*60, 'type': 'step', 'type_ru': 'ступенчатое'}
# cut_step_resp = {'time_step_begin': '02.05.2025 00:39:00', 'step_duration': 30*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch3', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '02.05.2025',
# 'time_begin': ['01.05.2025 22:05:30', '01.05.2025 23:38:40'],
# 'duration_sec': 93*60, 'type': 'step4_to3', 'type_ru': 'ступенчатое'}
# cut_step_resp = {'time_step_begin': '02.05.2025 00:39:00', 'step_duration': 30*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch4', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '02.05.2025',
# 'time_begin': ['02.05.2025 01:12:30', '02.05.2025 02:46:02'],
# 'duration_sec': 93*60, 'type': 'impulse', 'type_ru': 'импульсное'}
# cut_step_resp = {'time_step_begin': '02.05.2025 03:45:02', 'step_duration': 15*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch3', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '02.05.2025',
# 'time_begin': ['02.05.2025 01:12:30', '02.05.2025 02:46:02'],
# 'duration_sec': 93*60, 'type': 'impulse4_to3', 'type_ru': 'импульсное'}
# cut_step_resp = {'time_step_begin': '02.05.2025 03:45:02', 'step_duration': 20*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch3', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '04.05.2025',
# 'time_begin': ['03.05.2025 22:12:11', '03.05.2025 23:45:10'],
# 'duration_sec': 93*60, 'type': 'step', 'type_ru': 'ступенчатое'}
# cut_step_resp = {'time_step_begin': '04.05.2025 00:42:01', 'step_duration': 26*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch4', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '04.05.2025',
# 'time_begin': ['03.05.2025 22:12:11', '03.05.2025 23:45:10'],
# 'duration_sec': 93*60, 'type': 'step3_to4', 'type_ru': 'ступенчатое'}
# cut_step_resp = {'time_step_begin': '04.05.2025 00:42:01', 'step_duration': 30*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch3', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '04.05.2025',
# 'time_begin': ['04.05.2025 01:19:10', '04.05.2025 02:52:11'],
# 'duration_sec': 93*60, 'type': 'impulse', 'type_ru': 'импульсное'}
# cut_step_resp = {'time_step_begin': '04.05.2025 03:48:01', 'step_duration': 15*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
# data_info = {'data': data, 'device': 'летный', 'channel': 'ch4', 'period': '1 мин',
# 'find_accuracy': 'seconds'}
# thermocycle_info = {'date': '04.05.2025',
# 'time_begin': ['04.05.2025 01:19:10', '04.05.2025 02:52:11'],
# 'duration_sec': 93*60, 'type': 'impulse3_to4', 'type_ru': 'импульсное'}
# cut_step_resp = {'time_step_begin': '04.05.2025 03:48:01', 'step_duration': 20*60}
# data_info_list.append(data_info)
# thermocycle_info_list.append(thermocycle_info)
# cut_step_resp_list.append(cut_step_resp)
def get_step_response(data_info, thermocycle_info, cut_step_resp):
name = f'{data_info["channel"]}_{thermocycle_info["type"]}_response_{data_info["device"]}_{thermocycle_info["date"].replace(".","")}'
plot_info = {'title': 'Реакция на ' + thermocycle_info['type_ru'] + ' воздействие',
'ox_dtime_format': "%H:%M:%S", 'legend_pos': ['upper left', 'lower left'],
'ox_dtime_format': "%H:%M", 'legend_pos': ['upper left', 'lower left'],
'name_fig': f'../plots/response/{name}.png', 'font': 10}
asotr.plot_step_response_in_thermocycle(data_info, thermocycle_info, interp,
@@ -270,7 +289,7 @@ def get_step_response(data_info, thermocycle_info, cut_step_resp):
title = f'{plot_info["title"]}, канал {data_info["channel"][2]} АСОТР, {data_info["device"]} СПИН-X1-МВН, период опроса {data_info["period"]} ({thermocycle_info["date"]})'
fig = plt.figure(figsize=(10, 6), dpi=200)
fig = plt.figure(figsize=(6, 10), dpi=200)
fig.suptitle(title, fontsize=plot_info['font'])
ax1 = fig.add_subplot(1,1,1)
@@ -282,8 +301,8 @@ def get_step_response(data_info, thermocycle_info, cut_step_resp):
ax1.legend(loc=plot_info["legend_pos"][0], fontsize=plot_info['font'])
ax1.grid(True)
ax1.tick_params(axis='both', width=1, labelsize=plot_info['font'])
ax1.set_ylabel(r'$T_{norm}$, $^\circ$C', fontsize=plot_info['font'])
ax1.set_xlabel('Время, ЧЧ:MM:CC', fontsize=plot_info['font'])
ax1.set_ylabel(r'$T_{норм}$, $^\circ$C', fontsize=plot_info['font'])
ax1.set_xlabel('Время, ЧЧ:MM', fontsize=plot_info['font'])
plt.tight_layout()
fig.savefig(plot_info["name_fig"])