添加了<体动标注>的重采样

根据规范修改变量名称
This commit is contained in:
Yorusora
2025-05-21 10:28:46 +08:00
parent f1447596b0
commit 74d9642be9
10 changed files with 143 additions and 138 deletions

View File

@ -344,10 +344,10 @@ class MainWindow_approximately_align(QMainWindow):
elif sender == self.ui.pushButton_EP100:
result = self.DrawPicByEpoch(*args, **kwargs)
except Exception as e:
return Result().failure(info=Constants.DRAWING_FAILURE + "\n" + format_exc())
return Result().failure(info=Constants.DRAW_FAILURE + "\n" + format_exc())
if result is None:
return Result().failure(info=Constants.DRAWING_FAILURE)
return Result().failure(info=Constants.DRAW_FAILURE)
else:
return result
@ -707,9 +707,9 @@ class MainWindow_approximately_align(QMainWindow):
self.fig.canvas.draw()
except Exception as e:
return Result().failure(info=Constants.DRAWING_FAILURE + "\n" + format_exc())
return Result().failure(info=Constants.DRAW_FAILURE + "\n" + format_exc())
# 返回图片以便存到QPixImage
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
def DrawPicOverviewWithCutOff(self):
try:
@ -763,9 +763,9 @@ class MainWindow_approximately_align(QMainWindow):
self.fig.canvas.draw()
except Exception as e:
return Result().failure(info=Constants.DRAWING_FAILURE + "\n" + format_exc())
return Result().failure(info=Constants.DRAW_FAILURE + "\n" + format_exc())
# 返回图片以便存到QPixImage
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
def DrawPicCorrelate(self, tho_pxx, tho_nxx, abd_pxx, abd_nxx):
try:
@ -787,9 +787,9 @@ class MainWindow_approximately_align(QMainWindow):
self.fig.canvas.draw()
except Exception as e:
return Result().failure(info=Constants.DRAWING_FAILURE + "\n" + format_exc())
return Result().failure(info=Constants.DRAW_FAILURE + "\n" + format_exc())
# 返回图片以便存到QPixImage
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
def DrawPicTryAlign(self):
try:
@ -822,9 +822,9 @@ class MainWindow_approximately_align(QMainWindow):
self.fig.canvas.draw()
except Exception as e:
return Result().failure(info=Constants.DRAWING_FAILURE + "\n" + format_exc())
return Result().failure(info=Constants.DRAW_FAILURE + "\n" + format_exc())
# 返回图片以便存到QPixImage
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
def DrawPicByEpoch(self, epoch):
try:
@ -882,9 +882,9 @@ class MainWindow_approximately_align(QMainWindow):
self.fig.canvas.draw()
except Exception as e:
return Result().failure(info=Constants.DRAWING_FAILURE + "\n" + format_exc())
return Result().failure(info=Constants.DRAW_FAILURE + "\n" + format_exc())
# 返回图片以便存到QPixImage
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
def DrawAlignScatter(self):
try:
@ -903,10 +903,10 @@ class MainWindow_approximately_align(QMainWindow):
ax2.set_title("ABD")
self.fig.canvas.draw()
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
except Exception as e:
return Result().failure(info=Constants.DRAWING_FAILURE + "\n" + format_exc())
return Result().failure(info=Constants.DRAW_FAILURE + "\n" + format_exc())
@ -978,10 +978,10 @@ class Data:
df = DataFrame({"pos": [pos], "epoch": [epoch], "ApplyFrequency": [ApplyFrequency]})
df.to_csv(Path(Config["Path"]["Save"]), mode="w", header=True, index=False)
except Exception as e:
return Result().failure(info=Constants.SAVING_FAILURE + Constants.FAILURE_REASON[
return Result().failure(info=Constants.SAVE_FAILURE + Constants.FAILURE_REASON[
"Save_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.SAVING_FINISHED)
return Result().success(info=Constants.SAVE_FINISHED)
def Standardize_0(self):
# 仅重采样

View File

@ -12,6 +12,7 @@ from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg
from numpy.fft import fft, fftfreq
from overrides import overrides
from pandas import read_csv, DataFrame, concat
from scipy.signal import resample
from yaml import dump, load, FullLoader
from func.utils.PublicFunc import PublicFunc
@ -90,21 +91,21 @@ class SettingWindow(QMainWindow):
Config.update({
"Path": {
"Input_orgBcg": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED /
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_LABEL_INPUT_ORGBCG_FILENAME +
Path(str(self.sampID)) / Path(ConfigParams.ORGBCG_SYNC +
str(Config["InputConfig"]["orgBcgFreq"]) +
ConfigParams.ENDSWITH_TXT))),
"Input_BCG": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED /
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_LABEL_INPUT_BCG_FILENAME +
Path(str(self.sampID)) / Path(ConfigParams.BCG_SYNC +
str(Config["InputConfig"]["BCGFreq"]) +
ConfigParams.ENDSWITH_TXT))),
"Save_a": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL /
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_LABEL_SAVE_FILENAME_A +
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_A +
ConfigParams.ENDSWITH_TXT))),
"Save_b": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL /
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_LABEL_SAVE_FILENAME_B +
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_B +
ConfigParams.ENDSWITH_TXT))),
"Save_c": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL /
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_LABEL_SAVE_FILENAME_C +
Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_C +
ConfigParams.ENDSWITH_CSV)))
}
})
@ -145,14 +146,14 @@ class SettingWindow(QMainWindow):
str((Path(self.root_path) /
ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED /
Path(str(self.sampID)) /
Path(ConfigParams.ARTIFACT_LABEL_INPUT_ORGBCG_FILENAME +
Path(ConfigParams.ORGBCG_SYNC +
str(self.ui.spinBox_input_freq_orgBcg.value()) +
ConfigParams.ENDSWITH_TXT))))
self.ui.plainTextEdit_file_path_input_BCG.setPlainText(
str((Path(self.root_path) /
ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED /
Path(str(self.sampID)) /
Path(ConfigParams.ARTIFACT_LABEL_INPUT_BCG_FILENAME +
Path(ConfigParams.BCG_SYNC +
str(self.ui.spinBox_input_freq_BCG.value()) +
ConfigParams.ENDSWITH_TXT))))
@ -240,7 +241,7 @@ class MainWindow_artifact_label(QMainWindow):
self.ax0.grid(True)
self.ax0.xaxis.set_major_formatter(ConfigParams.FORMATTER)
self.ax0.tick_params(axis='x', colors=Constants.PLOT_COLOR_WHITE)
self.ax1 = self.fig.add_subplot(self.gs[1], sharex=self.ax0, sharey=self.ax0)
self.ax1 = self.fig.add_subplot(self.gs[1], sharex=self.ax0)
self.ax1.grid(True)
self.ax1.xaxis.set_major_formatter(ConfigParams.FORMATTER)
@ -344,13 +345,13 @@ class MainWindow_artifact_label(QMainWindow):
self.ax0.autoscale(False)
self.ax1.autoscale(False)
except Exception as e:
return Result().failure(info=Constants.DRAWING_FAILURE + "\n" + format_exc())
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().failure(info=Constants.DRAW_FAILURE + "\n" + format_exc())
return Result().success(info=Constants.DRAW_FINISHED)
else:
self.canvas.draw()
self.ax0.autoscale(False)
self.ax1.autoscale(False)
return Result().failure(info=Constants.DRAWING_FAILURE)
return Result().failure(info=Constants.DRAW_FAILURE)
def __plot_artifact__(self):
if len(self.ax0.patches) != 0:
@ -524,9 +525,9 @@ class MainWindow_artifact_label(QMainWindow):
self.ui.tableWidget_type_5.setItem(self.ui.tableWidget_type_5.rowCount() - 1, 1, QTableWidgetItem(str(data["startTime"])))
self.ui.tableWidget_type_5.setItem(self.ui.tableWidget_type_5.rowCount() - 1, 2, QTableWidgetItem(str(data["endTime"])))
except Exception as e:
return Result().failure(info=Constants.ARTIFACT_LABEL_UPDATE_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON["Update_tableWidget_Exception"] + "\n" + format_exc())
return Result().failure(info=Constants.UPDATE_FAILURE + Constants.FAILURE_REASON["Update_tableWidget_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.ARTIFACT_LABEL_UPDATE_FINISHED)
return Result().success(info=Constants.UPDATE_FINISHED)
def update_Info(self):
try:
@ -560,9 +561,9 @@ class MainWindow_artifact_label(QMainWindow):
self.ui.spinBox_duration_type_4.setValue(artifact_total_duration[3])
self.ui.spinBox_duration_type_5.setValue(artifact_total_duration[4])
except Exception as e:
return Result().failure(info=Constants.ARTIFACT_LABEL_UPDATE_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON["Update_Info_Exception"] + "\n" + format_exc())
return Result().failure(info=Constants.UPDATE_FAILURE + Constants.FAILURE_REASON["Update_Info_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.ARTIFACT_LABEL_UPDATE_FINISHED)
return Result().success(info=Constants.UPDATE_FAILURE)
def __slot_btn_input__(self):
PublicFunc.__disableAllButton__(self, ButtonState)
@ -573,7 +574,7 @@ class MainWindow_artifact_label(QMainWindow):
self.data = Data()
# 导入数据
PublicFunc.progressbar_update(self, 1, 5, Constants.INPUTTING_DATA, 0)
PublicFunc.progressbar_update(self, 1, 6, Constants.INPUTTING_DATA, 0)
result = self.data.open_file()
if not result.status:
PublicFunc.text_output(self.ui, "(1/5)" + result.info, Constants.TIPS_TYPE_ERROR)
@ -583,49 +584,63 @@ class MainWindow_artifact_label(QMainWindow):
else:
PublicFunc.text_output(self.ui, "(1/5)" + result.info, Constants.TIPS_TYPE_INFO)
# 重采样
PublicFunc.progressbar_update(self, 2, 6, Constants.RESAMPLING_DATA, 0)
result = self.data.resample()
if not result.status:
PublicFunc.text_output(self.ui, "(2/6)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
else:
PublicFunc.text_output(self.ui, "(2/6)" + result.info, Constants.TIPS_TYPE_INFO)
self.__reset__()
PublicFunc.finish_operation(self, ButtonState)
# 获取存档
PublicFunc.progressbar_update(self, 2, 5, Constants.ARTIFACT_LABEL_LOADING_ARCHIVE, 50)
PublicFunc.progressbar_update(self, 3, 6, Constants.LOADING_ARCHIVE, 50)
result = self.data.get_archive()
if not result.status:
PublicFunc.text_output(self.ui, "(2/5)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.text_output(self.ui, "(3/6)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
else:
PublicFunc.text_output(self.ui, "(2/5)" + result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.text_output(self.ui, "(3/6)" + result.info, Constants.TIPS_TYPE_INFO)
# 绘图
PublicFunc.progressbar_update(self, 3, 5, Constants.DRAWING_DATA, 60)
PublicFunc.progressbar_update(self, 4, 6, Constants.DRAWING_DATA, 60)
result = self.__plot__()
if not result.status:
PublicFunc.text_output(self.ui, "(3/5)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.text_output(self.ui, "(4/6)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
else:
PublicFunc.text_output(self.ui, "(3/5)" + result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.text_output(self.ui, "(4/6)" + result.info, Constants.TIPS_TYPE_INFO)
# 更新表格
PublicFunc.progressbar_update(self, 4, 5, Constants.ARTIFACT_LABEL_UPDATING_TABLE, 90)
PublicFunc.progressbar_update(self, 5, 6, Constants.UPDATING_TABLEWIDGET, 90)
result = self.update_tableWidget()
if not result.status:
PublicFunc.text_output(self.ui, "(4/5)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.text_output(self.ui, "(5/6)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
else:
PublicFunc.text_output(self.ui, "(4/5)" + result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.text_output(self.ui, "(5/6)" + result.info, Constants.TIPS_TYPE_INFO)
# 更新信息
PublicFunc.progressbar_update(self, 5, 5, Constants.ARTIFACT_LABEL_UPDATING_INFO, 95)
PublicFunc.progressbar_update(self, 6, 6, Constants.UPDATING_INFO, 95)
result = self.update_Info()
if not result.status:
PublicFunc.text_output(self.ui, "(5/5)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.text_output(self.ui, "(6/6)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
PublicFunc.finish_operation(self, ButtonState)
return
else:
PublicFunc.text_output(self.ui, "(5/5)" + result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.text_output(self.ui, "(6/6)" + result.info, Constants.TIPS_TYPE_INFO)
self.__reset__()
self.figToolbar.action_Label_Artifact.setEnabled(True)
@ -1159,7 +1174,7 @@ class Data:
def open_file(self):
if (not Path(Config["Path"]["Input_orgBcg"]).exists()) or (not Path(Config["Path"]["Input_BCG"]).exists()):
return Result().failure(info=Constants.INPUT_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON["Data_Path_Not_Exist"])
return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Path_Not_Exist"])
try:
self.orgBcg = read_csv(Config["Path"]["Input_orgBcg"],
@ -1169,18 +1184,35 @@ class Data:
encoding=ConfigParams.UTF8_ENCODING,
header=None).to_numpy().reshape(-1)
except Exception as e:
return Result().failure(info=Constants.INPUT_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON["Read_Data_Exception"] + "\n" + format_exc())
return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Open_Data_Exception"] + "\n" + format_exc())
# 检查同步后的orgBcg信号和同步后的BCG信号长度是否相同
if len(self.orgBcg) != len(self.BCG):
return Result().failure(info=Constants.INPUT_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON["Data_Length_not_Correct"])
return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Data_Length_not_Correct"])
return Result().success(info=Constants.INPUT_FINISHED)
def resample(self):
if self.orgBcg is None:
Result().failure(info=Constants.RESAMPLE_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
try:
if Config["InputConfig"]["orgBcgFreq"] != Config["InputConfig"]["UseFreq"]:
self.orgBcg = resample(self.orgBcg,
int(len(self.orgBcg) *
(Config["InputConfig"]["UseFreq"] / Config["InputConfig"]["orgBcgFreq"])))
else:
return Result().success(info=Constants.RESAMPLE_NO_NEED)
except Exception as e:
Result().failure(info=Constants.RESAMPLE_FAILURE +
Constants.FAILURE_REASON["Resample_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.RESAMPLE_FINISHED)
def get_archive(self):
if not Path(Config["Path"]["Save_a"]).exists():
self.Artifact_a = []
return Result().success(info=Constants.ARTIFACT_LABEL_ARCHIVE_NOT_EXIST)
return Result().success(info=Constants.ARCHIVE_NOT_EXIST)
else:
self.Artifact_a = read_csv(Config["Path"]["Save_a"],
encoding=ConfigParams.UTF8_ENCODING,
@ -1188,7 +1220,7 @@ class Data:
try:
# 检查体动标签正确性,长度
if len(self.Artifact_a) % 4 != 0:
return Result().failure(info=Constants.INPUT_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON[
return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON[
"Artifact_Format_Not_Correct"])
for i in range(0, len(self.Artifact_a), 4):
unit_data = self.Artifact_a[i:i + 4]
@ -1196,10 +1228,10 @@ class Data:
break
self.df_Artifact_a.loc[len(self.df_Artifact_a)] = [int(unit_data[j]) for j in range(4)]
except Exception as e:
return Result().failure(info=Constants.INPUT_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON[
return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON[
"Get_Artifact_Format_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.ARTIFACT_LABEL_ARCHIVE_EXIST)
return Result().success(info=Constants.ARCHIVE_EXIST)
def save(self, amount, duration):
try:
@ -1224,10 +1256,10 @@ class Data:
self.df_Artifact_a.to_csv(Path(Config["Path"]["Save_c"]), index=False,
encoding=ConfigParams.GBK_ENCODING)
except Exception as e:
return Result().failure(info=Constants.SAVING_FAILURE + Constants.ARTIFACT_LABEL_FAILURE_REASON[
return Result().failure(info=Constants.SAVE_FAILURE + Constants.FAILURE_REASON[
"Save_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.SAVING_FINISHED)
return Result().success(info=Constants.SAVE_FINISHED)
class CustomNavigationToolbar(NavigationToolbar2QT):

View File

@ -327,7 +327,7 @@ class Data:
for raw in self.raw.values():
if len(raw) == 0:
return Result().failure(info=Constants.SAVING_FAILURE +
return Result().failure(info=Constants.SAVE_FAILURE +
Constants.FAILURE_REASON["Data_not_Exist"])
try:
@ -338,10 +338,10 @@ class Data:
index=False,
encoding="gbk")
except Exception as e:
return Result().failure(info=Constants.SAVING_FAILURE +
return Result().failure(info=Constants.SAVE_FAILURE +
Constants.FAILURE_REASON["Save_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.SAVING_FINISHED)
return Result().success(info=Constants.SAVE_FINISHED)
@staticmethod
def get_time_to_seconds(time_str):

View File

@ -241,10 +241,10 @@ class MainWindow_detect_Jpeak(QMainWindow):
self.ax0.legend(loc=Constants.PLOT_UPPER_RIGHT)
self.canvas.draw()
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
else:
self.canvas.draw()
return Result().failure(info=Constants.DRAWING_FAILURE)
return Result().failure(info=Constants.DRAW_FAILURE)
def __update_config__(self):
Config["Filter"]["BandPassLow"] = self.ui.doubleSpinBox_bandPassLow.value()
@ -465,15 +465,15 @@ class Data:
Path(Config["Path"]["Save"]).parent.mkdir(parents=True, exist_ok=True)
if self.peak is None:
return Result().failure(info=Constants.SAVING_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
return Result().failure(info=Constants.SAVE_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
try:
chunk.to_csv(Config["Path"]["Save"], mode='a', index=False, header=False)
except Exception as e:
return Result().failure(info=Constants.SAVING_FAILURE +
return Result().failure(info=Constants.SAVE_FAILURE +
Constants.FAILURE_REASON["Save_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.SAVING_FINISHED)
return Result().success(info=Constants.SAVE_FINISHED)
class Model:

View File

@ -237,10 +237,10 @@ class MainWindow_detect_Rpeak(QMainWindow):
self.ax0.legend(loc=Constants.PLOT_UPPER_RIGHT)
self.ax1.legend(loc=Constants.PLOT_UPPER_RIGHT)
self.canvas.draw()
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
else:
self.canvas.draw()
return Result().failure(info=Constants.DRAWING_FAILURE)
return Result().failure(info=Constants.DRAW_FAILURE)
def __update_config__(self):
Config["Filter"]["BandPassLow"] = self.ui.doubleSpinBox_bandPassLow.value()
@ -457,12 +457,12 @@ class Data:
if self.peak is None:
return Result().failure(info=Constants.SAVING_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
return Result().failure(info=Constants.SAVE_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
try:
chunk.to_csv(Config["Path"]["Save"], mode='a', index=False, header=False)
except Exception as e:
return Result().failure(info=Constants.SAVING_FAILURE +
return Result().failure(info=Constants.SAVE_FAILURE +
Constants.FAILURE_REASON["Save_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.SAVING_FINISHED)
return Result().success(info=Constants.SAVE_FINISHED)

View File

@ -390,12 +390,12 @@ class MainWindow_label_check(QMainWindow):
self.canvas.draw()
self.ax0.autoscale(False)
self.ax1.autoscale(False)
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
else:
self.canvas.draw()
self.ax0.autoscale(False)
self.ax1.autoscale(False)
return Result().failure(info=Constants.DRAWING_FAILURE)
return Result().failure(info=Constants.DRAW_FAILURE)
def __plot_peaks__(self):
try:
@ -407,10 +407,10 @@ class MainWindow_label_check(QMainWindow):
self.ax0.legend(loc=Constants.PLOT_UPPER_RIGHT)
self.ax1.legend(loc=Constants.PLOT_UPPER_RIGHT)
except Exception as e:
return Result().failure(info=Constants.DRAWING_FAILURE + "\n" + format_exc())
return Result().failure(info=Constants.DRAW_FAILURE + "\n" + format_exc())
self.canvas.draw()
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
def __redraw_peaks__(self):
self.point_peak_corrected.remove()
@ -433,9 +433,9 @@ class MainWindow_label_check(QMainWindow):
for row, value in enumerate(self.data.corrected_peak):
item = QTableWidgetItem(str(value).strip())
self.ui.tableWidget_peak_corrected.setItem(row, 0, item)
return Result().success(info=Constants.UPDATING_FINISHED)
return Result().success(info=Constants.UPDATE_FINISHED)
except Exception as e:
return Result().failure(info=Constants.UPDATING_FAILURE + "\n" + format_exc())
return Result().failure(info=Constants.UPDATE_FAILURE + "\n" + format_exc())
def __update_config__(self):
Config["FindPeaks"]["MinInterval"] = self.ui.doubleSpinBox_findpeaks_min_interval.value()
@ -1015,15 +1015,15 @@ class Data:
Path(Config["Path"]["Save"]).parent.mkdir(parents=True, exist_ok=True)
if self.corrected_peak is None:
return Result().failure(info=Constants.SAVING_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
return Result().failure(info=Constants.SAVE_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
try:
chunk.to_csv(Config["Path"]["Save"], mode='a', index=False, header=False)
except Exception as e:
return Result().failure(info=Constants.SAVING_FAILURE +
return Result().failure(info=Constants.SAVE_FAILURE +
Constants.FAILURE_REASON["Save_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.SAVING_FINISHED)
return Result().success(info=Constants.SAVE_FINISHED)
class CustomNavigationToolbar(NavigationToolbar2QT):

View File

@ -494,7 +494,7 @@ class MainWindow_precisely_align(QMainWindow):
self.ax0.legend(loc=Constants.PLOT_UPPER_RIGHT)
self.ax1.legend(loc=Constants.PLOT_UPPER_RIGHT)
self.canvas.draw()
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
elif sender == self.ui.pushButton_calculate_correlation and plot_element is not None and plot_element["mode"] == "init":
self.gs = gridspec.GridSpec(2, 2, height_ratios=[1, 1], width_ratios=[1, 1])
self.fig.subplots_adjust(top=0.88, bottom=0.05, right=0.98, left=0.05, hspace=0.15, wspace=0.15)
@ -560,7 +560,7 @@ class MainWindow_precisely_align(QMainWindow):
self.ax3.legend(loc=Constants.PLOT_UPPER_RIGHT)
self.canvas.draw()
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
elif sender == self.ui.pushButton_correlation_align or (plot_element is not None and plot_element["mode"] == "select"):
self.gs = gridspec.GridSpec(1, 1, height_ratios=[1])
self.fig.subplots_adjust(top=0.95, bottom=0.05, right=0.98, left=0.05, hspace=0, wspace=0)
@ -581,7 +581,7 @@ class MainWindow_precisely_align(QMainWindow):
self.ax4.legend(loc=Constants.PLOT_UPPER_RIGHT)
self.canvas.draw()
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
elif sender == self.ui.pushButton_view_align:
self.gs = gridspec.GridSpec(1, 1, height_ratios=[1])
self.fig.subplots_adjust(top=0.95, bottom=0.05, right=0.98, left=0.05, hspace=0, wspace=0)
@ -598,10 +598,10 @@ class MainWindow_precisely_align(QMainWindow):
self.ax4.legend(loc=Constants.PLOT_UPPER_RIGHT)
self.canvas.draw()
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
else:
self.canvas.draw()
return Result().failure(info=Constants.DRAWING_FAILURE)
return Result().failure(info=Constants.DRAW_FAILURE)
def __update_info__(self):
self.ui.spinBox_BCG_front_JJIV_1.setValue(Config["IV_Coordinate"]["BCG_front_1"])
@ -945,7 +945,7 @@ class MainWindow_precisely_align(QMainWindow):
else:
PublicFunc.text_output(self.ui, "(6/6)" + result.info, Constants.TIPS_TYPE_INFO)
PublicFunc.msgbox_output(self, Constants.SAVING_FINISHED, Constants.TIPS_TYPE_INFO)
PublicFunc.msgbox_output(self, Constants.SAVE_FINISHED, Constants.TIPS_TYPE_INFO)
PublicFunc.finish_operation(self, ButtonState)
def __update_coordinate__(self):
@ -1086,9 +1086,9 @@ class MainWindow_precisely_align(QMainWindow):
self.ax2.set_ylim(self.ax2_ylime)
self.canvas.draw()
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
return Result().failure(info=Constants.DRAWING_FAILURE)
return Result().failure(info=Constants.DRAW_FAILURE)
def redraw_correlation_align(self, plot_element=None):
if plot_element is not None and plot_element["mode"] == "select":
@ -1123,9 +1123,9 @@ class MainWindow_precisely_align(QMainWindow):
self.ax4.set_ylim(self.ax4_ylime)
self.canvas.draw()
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
return Result().failure(info=Constants.DRAWING_FAILURE)
return Result().failure(info=Constants.DRAW_FAILURE)
def toggle_home(self):
if self.ax0 is not None:

View File

@ -271,10 +271,10 @@ class MainWindow_preprocess(QMainWindow):
label=Constants.PREPROCESS_PLOT_LABEL_PROCESSED_DATA)
self.ax0.legend(loc=Constants.PLOT_UPPER_RIGHT)
self.canvas.draw()
return Result().success(info=Constants.DRAWING_FINISHED)
return Result().success(info=Constants.DRAW_FINISHED)
else:
self.canvas.draw()
return Result().success(info=Constants.DRAWING_FAILURE)
return Result().success(info=Constants.DRAW_FAILURE)
def __update_config__(self):
if self.mode == "BCG":
@ -478,12 +478,12 @@ class Data:
Path(Config["Path"]["Save"]).parent.mkdir(parents=True, exist_ok=True)
if self.processed_data is None:
return Result().failure(info=Constants.SAVING_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
return Result().failure(info=Constants.SAVE_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
try:
chunk.to_csv(Config["Path"]["Save"], mode='a', index=False, header=False, float_format='%.4f')
except Exception as e:
return Result().failure(info=Constants.SAVING_FAILURE +
return Result().failure(info=Constants.SAVE_FAILURE +
Constants.FAILURE_REASON["Save_Exception"] + "\n" + format_exc())
return Result().success(Constants.SAVING_FINISHED)
return Result().success(Constants.SAVE_FINISHED)

View File

@ -49,6 +49,9 @@ class ConfigParams:
RPEAK_FINAL_CORRECTED: str = "Rpeak_final_corrected_"
APPROXIMATELY_ALIGN_INFO: str = "Approximately_Align_Info"
PRECISELY_ALIGN_INFO: str = "Precisely_Align_Info"
ARTIFACT_A: str = "Artifact_a"
ARTIFACT_B: str = "Artifact_b"
ARTIFACT_C: str = "Artifact_c"
BCG_SYNC: str = "BCG_Sync_"
ECG_SYNC: str = "ECG_Sync_"
JPEAK_SYNC: str = "Jpeak_Sync_"
@ -227,16 +230,13 @@ class ConfigParams:
}
CUT_PSG_SALABEL_EVENT: list = ["Hypopnea", "Central apnea", "Obstructive apnea", "Mixed apnea"]
# 体动标注
ARTIFACT_LABEL_CONFIG_FILE_PATH: str = "./config/Config_artifact_label.yaml"
ARTIFACT_LABEL_CONFIG_NEW_CONTENT: dict = {
"InputConfig": {
"orgBcgFreq": 1000,
"BCGFreq": 1000
"BCGFreq": 1000,
"UseFreq": 1000
},
"CustomAutoplayArgs": {
"MoveLength": 15000,
@ -244,11 +244,6 @@ class ConfigParams:
"MoveSpeed": 1000
}
}
ARTIFACT_LABEL_INPUT_ORGBCG_FILENAME: str = "OrgBCG_Sync_"
ARTIFACT_LABEL_INPUT_BCG_FILENAME: str = "BCG_Sync_"
ARTIFACT_LABEL_SAVE_FILENAME_A: str = "Artifact_a"
ARTIFACT_LABEL_SAVE_FILENAME_B: str = "Artifact_b"
ARTIFACT_LABEL_SAVE_FILENAME_C: str = "Artifact_c"
ARTIFACT_LABEL_LABEL_TRANSPARENCY: float = 0.3
ARTIFACT_LABEL_ACTION_LABEL_ARTIFACT_SHORTCUT_KEY: str = "Z"

View File

@ -33,16 +33,18 @@ class Constants:
ARCHIVE_NOT_EXIST: str = "未找到历史存档,创建新存档"
DRAWING_DATA: str = "正在绘制图形"
DRAWING_FINISHED: str = "绘制完成"
DRAWING_FAILURE: str = "绘制失败"
DRAW_FINISHED: str = "绘制完成"
DRAW_FAILURE: str = "绘制失败"
UPDATING_TABLEWIDGET_AND_INFO: str = "正在更新表格和信息"
UPDATING_FINISHED: str = "更新完成"
UPDATING_FAILURE: str = "更新失败"
UPDATING_TABLEWIDGET: str = "正在更新表格"
UPDATING_INFO: str = "正在更新信息"
UPDATE_FINISHED: str = "更新完成"
UPDATE_FAILURE: str = "更新失败"
SAVING_DATA: str = "正在保存数据"
SAVING_FINISHED: str = "保存完成"
SAVING_FAILURE: str = "保存失败"
SAVE_FINISHED: str = "保存完成"
SAVE_FAILURE: str = "保存失败"
OPERATION_FINISHED: str = "操作完成"
OPERATION_FAILURE: str = "操作失败"
@ -99,6 +101,9 @@ class Constants:
"Align_Label_SALabel_Format_not_Correct": "映射标签时SA Label中的文件格式不正确",
"Filename_Format_not_Correct": "(文件名格式不正确)",
"Method_Not_Exist": "(检测方法不存在)",
"Data_Length_not_Correct": "orgBcg和BCG长度不匹配",
"Artifact_Format_Not_Correct": "(体动长度或格式不正确)",
"Get_Artifact_Format_Exception": "(获取体动长度或格式异常)",
"Open_Data_Exception": "(打开数据异常)",
"Process_Exception": "(处理异常)",
@ -125,6 +130,8 @@ class Constants:
"Cut_Data_Exception": "(切割数据异常)",
"Align_Label_Exception": "(映射标签异常)",
"Get_File_and_Freq_Excepetion": "(检查文件是否存在并获取其数据采样率异常)",
"Update_tableWidget_Exception": "(更新表格异常)",
"Update_Info_Exception": "(更新信息异常)",
"res_orgBcg_Not_Exist": "切割后orgBcg不存在",
"res_BCG_Not_Exist": "切割后BCG不存在",
@ -208,7 +215,7 @@ class Constants:
DETECT_RPEAK_DURATION_MIN: str = "数据时长(分钟):"
DETECT_RPEAK_PEAK_AMOUNT: str = "R峰个数"
DETECT_RPEAK_PLOT_LABEL_RRIV: str = "RRIV"
DETECT_RPEAK_PLOT_LABEL_ECG: str = "ECG"
DETECT_RPEAK_PLOT_LABEL_ECG: str = "ECG_Processed"
DETECT_RPEAK_PLOT_LABEL_R_PEAKS: str = "R_Peaks"
DETECT_RPEAK_PLOT_LABEL_INTERVAL: str = "Interval"
@ -299,38 +306,9 @@ class Constants:
CUT_PSG_ALIGN_LABEL_FINISHED: str = "映射标签完成"
CUT_PSG_ALIGN_LABEL_FAILURE: str = "映射标签失败"
# 体动标注
ARTIFACT_LABEL_LOADING_ARCHIVE: str = "正在获取历史存档"
ARTIFACT_LABEL_ARCHIVE_EXIST: str = "找到历史存档,成功读取"
ARTIFACT_LABEL_ARCHIVE_NOT_EXIST: str = "未找到历史存档,创建新存档"
ARTIFACT_LABEL_UPDATING_TABLE: str = "正在更新表格"
ARTIFACT_LABEL_UPDATING_INFO: str = "正在更新信息"
ARTIFACT_LABEL_UPDATE_FINISHED: str = "更新完成"
ARTIFACT_LABEL_UPDATE_FAILURE: str = "更新失败"
ARTIFACT_LABEL_FAILURE_REASON: str = {
"Data_Path_Not_Exist": "(数据路径不存在)",
"Read_Data_Exception": "(读取数据异常)",
"File_not_Exist": "(需要处理的文件不存在)",
"Data_Length_not_Correct": "orgBcg和BCG长度不匹配",
"Artifact_Format_Not_Correct": "(体动长度或格式不正确)",
"Get_Artifact_Format_Exception": "(获取体动长度或格式异常)",
"Update_tableWidget_Exception": "(更新表格异常)",
"Update_Info_Exception": "(更新信息异常)",
"Save_Data_not_Exist": "(需要保存的数据不存在)",
"Save_Exception": "(保存异常)"
}
ARTIFACT_LABEL_PLOT_LABEL_ORGBCG_SYNC: str = "orgBcg_sync"
ARTIFACT_LABEL_PLOT_LABEL_BCG_SYNC: str = "BCG_sync"
ARTIFACT_LABEL_PLOT_LABEL_ORGBCG_SYNC: str = "OrgBCG_Sync"
ARTIFACT_LABEL_PLOT_LABEL_BCG_SYNC: str = "BCG_Sync"
ARTIFACT_LABEL_PREV_MOVE: str = "向前移动"
ARTIFACT_LABEL_NEXT_MOVE: str = "向后移动"
ARTIFACT_LABEL_PAUSE: str = "暂停移动"