From 74d9642be9a42408973189f31513a14eea8b7a2a Mon Sep 17 00:00:00 2001 From: Yorusora <2944763079@qq.com> Date: Wed, 21 May 2025 10:28:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86<=E4=BD=93=E5=8A=A8?= =?UTF-8?q?=E6=A0=87=E6=B3=A8>=E7=9A=84=E9=87=8D=E9=87=87=E6=A0=B7=20?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E8=A7=84=E8=8C=83=E4=BF=AE=E6=94=B9=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- func/Module_approximately_align.py | 32 ++++----- func/Module_artifact_label.py | 106 +++++++++++++++++++---------- func/Module_cut_PSG.py | 6 +- func/Module_detect_Jpeak.py | 10 +-- func/Module_detect_Rpeak.py | 10 +-- func/Module_label_check.py | 18 ++--- func/Module_precisely_align.py | 20 +++--- func/Module_preprocess.py | 10 +-- func/utils/ConfigParams.py | 15 ++-- func/utils/Constants.py | 54 +++++---------- 10 files changed, 143 insertions(+), 138 deletions(-) diff --git a/func/Module_approximately_align.py b/func/Module_approximately_align.py index cfdfc94..0c85386 100644 --- a/func/Module_approximately_align.py +++ b/func/Module_approximately_align.py @@ -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): # 仅重采样 diff --git a/func/Module_artifact_label.py b/func/Module_artifact_label.py index 087d827..204f83f 100644 --- a/func/Module_artifact_label.py +++ b/func/Module_artifact_label.py @@ -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): diff --git a/func/Module_cut_PSG.py b/func/Module_cut_PSG.py index e7a73d0..10739cd 100644 --- a/func/Module_cut_PSG.py +++ b/func/Module_cut_PSG.py @@ -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): diff --git a/func/Module_detect_Jpeak.py b/func/Module_detect_Jpeak.py index a033cd2..3744bf6 100644 --- a/func/Module_detect_Jpeak.py +++ b/func/Module_detect_Jpeak.py @@ -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: diff --git a/func/Module_detect_Rpeak.py b/func/Module_detect_Rpeak.py index 2eb9865..a64d20c 100644 --- a/func/Module_detect_Rpeak.py +++ b/func/Module_detect_Rpeak.py @@ -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) \ No newline at end of file + return Result().success(info=Constants.SAVE_FINISHED) \ No newline at end of file diff --git a/func/Module_label_check.py b/func/Module_label_check.py index 0293518..78ce4e9 100644 --- a/func/Module_label_check.py +++ b/func/Module_label_check.py @@ -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): diff --git a/func/Module_precisely_align.py b/func/Module_precisely_align.py index 8ca9c0e..44e9af2 100644 --- a/func/Module_precisely_align.py +++ b/func/Module_precisely_align.py @@ -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: diff --git a/func/Module_preprocess.py b/func/Module_preprocess.py index ad2e337..cac14da 100644 --- a/func/Module_preprocess.py +++ b/func/Module_preprocess.py @@ -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) \ No newline at end of file + return Result().success(Constants.SAVE_FINISHED) \ No newline at end of file diff --git a/func/utils/ConfigParams.py b/func/utils/ConfigParams.py index 3aefeb4..c839a56 100644 --- a/func/utils/ConfigParams.py +++ b/func/utils/ConfigParams.py @@ -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" diff --git a/func/utils/Constants.py b/func/utils/Constants.py index 31d13a8..6bfd0ac 100644 --- a/func/utils/Constants.py +++ b/func/utils/Constants.py @@ -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 = "暂停移动"