diff --git a/func/Module_approximately_align.py b/func/Module_approximately_align.py index fe9ca25..fba9b0f 100644 --- a/func/Module_approximately_align.py +++ b/func/Module_approximately_align.py @@ -97,7 +97,7 @@ class SettingWindow(QMainWindow): "Path": { "Input_orgBcg": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / Path(str(self.sampID)) / Path(ConfigParams.APPROXIMATELY_ALIGN_INPUT_ORGBCG_FILENAME + - str(Config["InputConfig"]["orgBcgFreq"]) + + str(Config["InputConfig"]["OrgBCGFreq"]) + ConfigParams.ENDSWITH_TXT))), "Input_Tho": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / Path(str(self.sampID)) / Path(ConfigParams.APPROXIMATELY_ALIGN_INPUT_THO_FILENAME + @@ -107,7 +107,7 @@ class SettingWindow(QMainWindow): Path(str(self.sampID)) / Path(ConfigParams.APPROXIMATELY_ALIGN_INPUT_ABD_FILENAME + str(Config["InputConfig"]["AbdFreq"]) + ConfigParams.ENDSWITH_TXT))), - "Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / + "Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL / Path(str(self.sampID)) / Path(ConfigParams.APPROXIMATELY_ALIGN_SAVE_FILENAME + ConfigParams.ENDSWITH_CSV))) }, @@ -116,7 +116,7 @@ class SettingWindow(QMainWindow): }) # 数据回显 - self.ui.spinBox_input_orgBcg_freq.setValue(Config["InputConfig"]["orgBcgFreq"]) + self.ui.spinBox_input_orgBcg_freq.setValue(Config["InputConfig"]["OrgBCGFreq"]) self.ui.spinBox_input_Tho_freq.setValue(Config["InputConfig"]["ThoFreq"]) self.ui.spinBox_input_Abd_freq.setValue(Config["InputConfig"]["AbdFreq"]) self.ui.spinBox_bandpassOrder.setValue(Config["Filter"]["BandPassOrder"]) @@ -130,7 +130,7 @@ class SettingWindow(QMainWindow): def __write_config__(self): # 从界面写入配置 - Config["InputConfig"]["orgBcgFreq"] = self.ui.spinBox_input_orgBcg_freq.value() + Config["InputConfig"]["OrgBCGFreq"] = self.ui.spinBox_input_orgBcg_freq.value() Config["InputConfig"]["ThoFreq"] = self.ui.spinBox_input_Tho_freq.value() Config["InputConfig"]["AbdFreq"] = self.ui.spinBox_input_Abd_freq.value() Config["ApplyFrequency"] = self.ui.spinBox_display_freq.value() @@ -143,7 +143,7 @@ class SettingWindow(QMainWindow): Config["Path"]["Save"] = self.ui.plainTextEdit_file_path_save.toPlainText() # 保存配置到文件 - self.config["InputConfig"]["orgBcgFreq"] = self.ui.spinBox_input_orgBcg_freq.value() + self.config["InputConfig"]["OrgBCGFreq"] = self.ui.spinBox_input_orgBcg_freq.value() self.config["InputConfig"]["ThoFreq"] = self.ui.spinBox_input_Tho_freq.value() self.config["InputConfig"]["AbdFreq"] = self.ui.spinBox_input_Abd_freq.value() self.config["ApplyFrequency"] = self.ui.spinBox_display_freq.value() @@ -357,7 +357,7 @@ class MainWindow_approximately_align(QMainWindow): else: PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_INFO) - orgBcg_minutes = round(self.data.raw_orgBcg.shape[0] / Config["InputConfig"]["orgBcgFreq"] / 60) + orgBcg_minutes = round(self.data.raw_orgBcg.shape[0] / Config["InputConfig"]["OrgBCGFreq"] / 60) PSG_minutes = round(self.data.raw_Tho.shape[0] / Config["InputConfig"]["ThoFreq"] / 60) Config.update({ "orgBcg_minutes": orgBcg_minutes, @@ -921,7 +921,7 @@ class Data: # 滤波 self.processed_orgBcg = butter_bandpass_filter(self.raw_orgBcg, Config["Filter"]["BandPassLow"], Config["Filter"]["BandPassHigh"], - Config["InputConfig"]["orgBcgFreq"], + Config["InputConfig"]["OrgBCGFreq"], Config["Filter"]["BandPassOrder"]) self.processed_Tho = butter_bandpass_filter(self.raw_Tho, Config["Filter"]["BandPassLow"], Config["Filter"]["BandPassHigh"], @@ -951,13 +951,13 @@ class Data: Config.update({"TempFrequency": Config["InputConfig"]["ThoFreq"]}) # 如果orgBcg采样率大于PSG采样率,那么orgBcg重采样到PSG采样率 - if Config["InputConfig"]["orgBcgFreq"] > Config["TempFrequency"]: + if Config["InputConfig"]["OrgBCGFreq"] > Config["TempFrequency"]: # 用[::]完成 - self.processed_orgBcg = self.processed_orgBcg[::int(Config["InputConfig"]["orgBcgFreq"] / Config["TempFrequency"])] + self.processed_orgBcg = self.processed_orgBcg[::int(Config["InputConfig"]["OrgBCGFreq"] / Config["TempFrequency"])] # 如果orgBcg采样率小于PSG采样率,那么orgBcg重采样到PSG采样率 - elif Config["InputConfig"]["orgBcgFreq"] < Config["TempFrequency"]: + elif Config["InputConfig"]["OrgBCGFreq"] < Config["TempFrequency"]: # 用repeat完成 - self.processed_orgBcg = repeat(self.processed_orgBcg, int(Config["TempFrequency"] / Config["InputConfig"]["orgBcgFreq"]), axis=0) + self.processed_orgBcg = repeat(self.processed_orgBcg, int(Config["TempFrequency"] / Config["InputConfig"]["OrgBCGFreq"]), axis=0) except Exception as e: return Result().failure(info=Constants.APPROXIMATELY_PRE_ALIGN_RESAMPLE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Pre_Resample_Exception"] + "\n" + format_exc()) diff --git a/func/Module_artifact_label.py b/func/Module_artifact_label.py index 087d827..77d965f 100644 --- a/func/Module_artifact_label.py +++ b/func/Module_artifact_label.py @@ -89,9 +89,9 @@ class SettingWindow(QMainWindow): Config.update({ "Path": { - "Input_orgBcg": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED / + "Input_OrgBCG": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED / Path(str(self.sampID)) / Path(ConfigParams.ARTIFACT_LABEL_INPUT_ORGBCG_FILENAME + - str(Config["InputConfig"]["orgBcgFreq"]) + + 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 + @@ -110,9 +110,9 @@ class SettingWindow(QMainWindow): }) # 数据回显 - self.ui.spinBox_input_freq_orgBcg.setValue(Config["InputConfig"]["orgBcgFreq"]) + self.ui.spinBox_input_freq_orgBcg.setValue(Config["InputConfig"]["OrgBCGFreq"]) self.ui.spinBox_input_freq_BCG.setValue(Config["InputConfig"]["BCGFreq"]) - self.ui.plainTextEdit_file_path_input_orgBcg.setPlainText(Config["Path"]["Input_orgBcg"]) + self.ui.plainTextEdit_file_path_input_orgBcg.setPlainText(Config["Path"]["Input_OrgBCG"]) self.ui.plainTextEdit_file_path_input_BCG.setPlainText(Config["Path"]["Input_BCG"]) self.ui.plainTextEdit_file_path_save_a.setPlainText(Config["Path"]["Save_a"]) self.ui.plainTextEdit_file_path_save_b.setPlainText(Config["Path"]["Save_b"]) @@ -120,16 +120,16 @@ class SettingWindow(QMainWindow): def __write_config__(self): # 从界面写入配置 - Config["InputConfig"]["orgBcgFreq"] = self.ui.spinBox_input_freq_orgBcg.value() + Config["InputConfig"]["OrgBCGFreq"] = self.ui.spinBox_input_freq_orgBcg.value() Config["InputConfig"]["BCGFreq"] = self.ui.spinBox_input_freq_BCG.value() - Config["Path"]["Input_orgBcg"] = self.ui.plainTextEdit_file_path_input_orgBcg.toPlainText() + Config["Path"]["Input_OrgBCG"] = self.ui.plainTextEdit_file_path_input_orgBcg.toPlainText() Config["Path"]["Input_BCG"] = self.ui.plainTextEdit_file_path_input_BCG.toPlainText() Config["Path"]["Save_a"] = self.ui.plainTextEdit_file_path_save_a.toPlainText() Config["Path"]["Save_b"] = self.ui.plainTextEdit_file_path_save_b.toPlainText() Config["Path"]["Save_c"] = self.ui.plainTextEdit_file_path_save_c.toPlainText() # 保存配置到文件 - self.config["InputConfig"]["orgBcgFreq"] = self.ui.spinBox_input_freq_orgBcg.value() + self.config["InputConfig"]["OrgBCGFreq"] = self.ui.spinBox_input_freq_orgBcg.value() self.config["InputConfig"]["BCGFreq"] = self.ui.spinBox_input_freq_BCG.value() with open(ConfigParams.ARTIFACT_LABEL_CONFIG_FILE_PATH, "w") as f: @@ -450,7 +450,7 @@ class MainWindow_artifact_label(QMainWindow): try: # 计算傅里叶变换 fft_result = fft(self.data.orgBcg[rect_left:rect_right]) - fft_freqs = fftfreq(len(self.data.orgBcg[rect_left:rect_right]), 1 / Config["InputConfig"]["orgBcgFreq"]) + fft_freqs = fftfreq(len(self.data.orgBcg[rect_left:rect_right]), 1 / Config["InputConfig"]["OrgBCGFreq"]) # 确定频率高于20Hz的成分 high_freq_indices = abs(fft_freqs) > 20 high_freq_fft = fft_result[high_freq_indices] @@ -463,7 +463,7 @@ class MainWindow_artifact_label(QMainWindow): # 计算傅里叶变换 fft_result = fft(self.data.orgBcg[rect_left:rect_right]) fft_freqs = fftfreq(len(self.data.orgBcg[rect_left:rect_right]), - 1 / Config["InputConfig"]["orgBcgFreq"]) + 1 / Config["InputConfig"]["OrgBCGFreq"]) # 确定频率高于20Hz的成分 high_freq_indices = abs(fft_freqs) > 20 high_freq_fft = fft_result[high_freq_indices] @@ -1158,11 +1158,11 @@ class Data: self.df_Artifact_a = DataFrame(columns=["number", "type", "startTime", "endTime"]) def open_file(self): - if (not Path(Config["Path"]["Input_orgBcg"]).exists()) or (not Path(Config["Path"]["Input_BCG"]).exists()): + 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"]) try: - self.orgBcg = read_csv(Config["Path"]["Input_orgBcg"], + self.orgBcg = read_csv(Config["Path"]["Input_OrgBCG"], encoding=ConfigParams.UTF8_ENCODING, header=None).to_numpy().reshape(-1) self.BCG = read_csv(Config["Path"]["Input_BCG"], diff --git a/func/Module_cut_PSG.py b/func/Module_cut_PSG.py index 8eae68e..c790782 100644 --- a/func/Module_cut_PSG.py +++ b/func/Module_cut_PSG.py @@ -64,7 +64,7 @@ class MainWindow_cut_PSG(QMainWindow): "Path": { "InputFolder": str(Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / Path(str(self.sampID))), "SaveFolder": str(Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_ALIGNED / Path(str(self.sampID))), - "InputAlignInfo": str(Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_ALIGNED / Path(str(self.sampID)) / (ConfigParams.CUT_PSG_SAVE_ECG_ALIGNINFO_FILENAME + ConfigParams.ENDSWITH_TXT)) + "InputAlignInfo": str(Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL / Path(str(self.sampID)) / (ConfigParams.CUT_PSG_SAVE_ECG_ALIGNINFO_FILENAME + ConfigParams.ENDSWITH_TXT)) } }) diff --git a/func/Module_label_check.py b/func/Module_label_check.py index 1fa5b90..6149004 100644 --- a/func/Module_label_check.py +++ b/func/Module_label_check.py @@ -90,7 +90,7 @@ class SettingWindow(QMainWindow): "Input_Peak": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_INPUT_JPEAK_FILENAME + ConfigParams.ENDSWITH_TXT))), - "Input_Approximately_Align": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / + "Input_Approximately_Align": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL / Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_APPROXIMATELY_ALIGNINFO_FILENAME + ConfigParams.ENDSWITH_CSV))), "Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / @@ -109,7 +109,7 @@ class SettingWindow(QMainWindow): "Input_Peak": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_INPUT_RPEAK_FILENAME + ConfigParams.ENDSWITH_TXT))), - "Input_Approximately_Align": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / + "Input_Approximately_Align": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL / Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_APPROXIMATELY_ALIGNINFO_FILENAME + ConfigParams.ENDSWITH_CSV))), "Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / diff --git a/func/Module_mainwindow.py b/func/Module_mainwindow.py index 5e63988..b552eb5 100644 --- a/func/Module_mainwindow.py +++ b/func/Module_mainwindow.py @@ -226,7 +226,15 @@ class MainWindow(QMainWindow, Ui_Signal_Label): def __slot_btn_SA_label__(self): self.SA_label = MainWindow_SA_label() - self.SA_label.show() + root_path = self.ui.plainTextEdit_root_path.toPlainText() + sampID = self.ui.comboBox_sampID.currentText() + if not self.check_root_path(): + return + if not self.check_sampID(): + return + self.SA_label.show(root_path, int(sampID)) + # 默认最大化显示而非固定分辨率 + self.SA_label.showMaximized() def seek_sampID(self, path): if not Path(path).exists(): diff --git a/func/Module_precisely_align.py b/func/Module_precisely_align.py index f297148..3978441 100644 --- a/func/Module_precisely_align.py +++ b/func/Module_precisely_align.py @@ -111,7 +111,7 @@ class SettingWindow(QMainWindow): Config.update({ "Path": { - "Input_orgBcg": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / + "Input_OrgBCG": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_INPUT_ORGBCG_FILENAME + str(Config["InputConfig"]["ECGFreq"]) + ConfigParams.ENDSWITH_TXT))), @@ -132,13 +132,10 @@ class SettingWindow(QMainWindow): "Input_Approximately_Align": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_APPROXIMATELY_ALIGNINFO_FILENAME + ConfigParams.ENDSWITH_CSV))), - "Save_BCG_AlignInfo": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED / - Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_SAVE_BCG_ALIGNINFO_FILENAME + + "Save_AlignInfo": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL / + Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_SAVE_ALIGNINFO_FILENAME + ConfigParams.ENDSWITH_TXT))), - "Save_ECG_AlignInfo": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_ALIGNED / - Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_SAVE_ECG_ALIGNINFO_FILENAME + - ConfigParams.ENDSWITH_TXT))), - "Save_orgBcg": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED / + "Save_OrgBCG": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED / Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_SAVE_ORGBCG_FILENAME + str(Config["InputConfig"]["ECGFreq"]) + ConfigParams.ENDSWITH_TXT))), @@ -202,15 +199,14 @@ class SettingWindow(QMainWindow): # 数据回显 self.ui.spinBox_input_freq_ECG.setValue(Config["InputConfig"]["ECGFreq"]) - self.ui.plainTextEdit_file_path_input_orgBcg.setPlainText(Config["Path"]["Input_orgBcg"]) + self.ui.plainTextEdit_file_path_input_orgBcg.setPlainText(Config["Path"]["Input_OrgBCG"]) self.ui.plainTextEdit_file_path_input_BCG.setPlainText(Config["Path"]["Input_BCG"]) self.ui.plainTextEdit_file_path_input_Jpeak.setPlainText(Config["Path"]["Input_Jpeak"]) self.ui.plainTextEdit_file_path_input_ECG.setPlainText(Config["Path"]["Input_ECG"]) self.ui.plainTextEdit_file_path_input_Rpeak.setPlainText(Config["Path"]["Input_Rpeak"]) self.ui.plainTextEdit_file_path_input_approximately_align.setPlainText(Config["Path"]["Input_Approximately_Align"]) - self.ui.plainTextEdit_file_path_save_BCG_AlignInfo.setPlainText(Config["Path"]["Save_BCG_AlignInfo"]) - self.ui.plainTextEdit_file_path_save_ECG_AlignInfo.setPlainText(Config["Path"]["Save_ECG_AlignInfo"]) - self.ui.plainTextEdit_file_path_save_orgBcg.setPlainText(Config["Path"]["Save_orgBcg"]) + self.ui.plainTextEdit_file_path_save_AlignInfo.setPlainText(Config["Path"]["Save_AlignInfo"]) + self.ui.plainTextEdit_file_path_save_orgBcg.setPlainText(Config["Path"]["Save_OrgBCG"]) self.ui.plainTextEdit_file_path_save_BCG.setPlainText(Config["Path"]["Save_BCG"]) self.ui.plainTextEdit_file_path_save_ECG.setPlainText(Config["Path"]["Save_ECG"]) self.ui.plainTextEdit_file_path_save_Jpeak.setPlainText(Config["Path"]["Save_Jpeak"]) @@ -219,15 +215,14 @@ class SettingWindow(QMainWindow): def __write_config__(self): # 从界面写入配置 Config["InputConfig"]["ECGFreq"] = self.ui.spinBox_input_freq_ECG.value() - Config["Path"]["Input_orgBcg"] = self.ui.plainTextEdit_file_path_input_orgBcg.toPlainText() + Config["Path"]["Input_OrgBCG"] = self.ui.plainTextEdit_file_path_input_orgBcg.toPlainText() Config["Path"]["Input_BCG"] = self.ui.plainTextEdit_file_path_input_BCG.toPlainText() Config["Path"]["Input_Jpeak"] = self.ui.plainTextEdit_file_path_input_Jpeak.toPlainText() Config["Path"]["Input_ECG"] = self.ui.plainTextEdit_file_path_input_ECG.toPlainText() Config["Path"]["Input_Rpeak"] = self.ui.plainTextEdit_file_path_input_Rpeak.toPlainText() Config["Path"]["Input_Approximately_Align"] = self.ui.plainTextEdit_file_path_input_approximately_align.toPlainText() - Config["Path"]["Save_BCG_AlignInfo"] = self.ui.plainTextEdit_file_path_save_BCG_AlignInfo.toPlainText() - Config["Path"]["Save_ECG_AlignInfo"] = self.ui.plainTextEdit_file_path_save_ECG_AlignInfo.toPlainText() - Config["Path"]["Save_orgBcg"] = self.ui.plainTextEdit_file_path_save_orgBcg.toPlainText() + Config["Path"]["Save_AlignInfo"] = self.ui.plainTextEdit_file_path_save_AlignInfo.toPlainText() + Config["Path"]["Save_OrgBCG"] = self.ui.plainTextEdit_file_path_save_orgBcg.toPlainText() Config["Path"]["Save_BCG"] = self.ui.plainTextEdit_file_path_save_BCG.toPlainText() Config["Path"]["Save_ECG"] = self.ui.plainTextEdit_file_path_save_ECG.toPlainText() Config["Path"]["Save_Jpeak"] = self.ui.plainTextEdit_file_path_save_Jpeak.toPlainText() @@ -839,7 +834,7 @@ class MainWindow_precisely_align(QMainWindow): total_rows = len(DataFrame(self.data.res_orgBcg.reshape(-1))) chunk_size = ConfigParams.PRECISELY_ALIGN_SAVE_CHUNK_SIZE - with open(Config["Path"]["Save_orgBcg"], 'w') as f: + with open(Config["Path"]["Save_OrgBCG"], 'w') as f: for start in range(0, total_rows, chunk_size): end = min(start + chunk_size, total_rows) chunk = DataFrame(self.data.res_orgBcg.reshape(-1)).iloc[start:end] @@ -861,7 +856,7 @@ class MainWindow_precisely_align(QMainWindow): total_rows = len(DataFrame(self.data.res_BCG.reshape(-1))) chunk_size = ConfigParams.PRECISELY_ALIGN_SAVE_CHUNK_SIZE - with open(Config["Path"]["Save_orgBcg"], 'w') as f: + with open(Config["Path"]["Save_BCG"], 'w') as f: for start in range(0, total_rows, chunk_size): end = min(start + chunk_size, total_rows) chunk = DataFrame(self.data.res_BCG.reshape(-1)).iloc[start:end] @@ -944,7 +939,7 @@ class MainWindow_precisely_align(QMainWindow): else: PublicFunc.text_output(self.ui, "(6/6)" + result.info, Constants.TIPS_TYPE_INFO) - PublicFunc.msgbox_output(self, result.info, Constants.TIPS_TYPE_INFO) + PublicFunc.msgbox_output(self, Constants.SAVING_FINISHED, Constants.TIPS_TYPE_INFO) PublicFunc.finish_operation(self, ButtonState) def __update_coordinate__(self): @@ -1447,7 +1442,7 @@ class Data: return Result().failure(info=Constants.INPUT_FAILURE + Constants.PRECISELY_ALIGN_FAILURE_REASON["Data_Path_Not_Exist"]) try: - self.raw_orgBcg = read_csv(Config["Path"]["Input_orgBcg"], + self.raw_orgBcg = read_csv(Config["Path"]["Input_OrgBCG"], encoding=ConfigParams.UTF8_ENCODING, header=None).to_numpy().reshape(-1) self.raw_BCG = read_csv(Config["Path"]["Input_BCG"], @@ -1803,8 +1798,7 @@ class Data: } } save_data = [str(save_data)] - DataFrame(save_data).to_csv(Config["Path"]["Save_BCG_AlignInfo"], index=False, header=False) - DataFrame(save_data).to_csv(Config["Path"]["Save_ECG_AlignInfo"], index=False, header=False) + DataFrame(save_data).to_csv(Config["Path"]["Save_AlignInfo"], index=False, header=False) except Exception as e: return Result().failure(info=Constants.PRECISELY_ALIGN_SAVING_ALIGNINFO_FAILURE + Constants.PRECISELY_ALIGN_FAILURE_REASON["Save_Exception"] + "\n" + format_exc()) @@ -1815,7 +1809,7 @@ class Data: return Result().failure(info=Constants.PRECISELY_ALIGN_SAVING_RES_ORGBCG_FAILURE + Constants.PRECISELY_ALIGN_FAILURE_REASON["res_orgBcg_Not_Exist"]) try: - chunk.to_csv(Config["Path"]["Save_orgBcg"], mode='a', index=False, header=False) + chunk.to_csv(Config["Path"]["Save_OrgBCG"], mode='a', index=False, header=False) except Exception as e: return Result().failure(info=Constants.PRECISELY_ALIGN_SAVING_RES_ORGBCG_FAILURE + Constants.PRECISELY_ALIGN_FAILURE_REASON["Save_Exception"] + "\n" + format_exc()) diff --git a/func/utils/ConfigParams.py b/func/utils/ConfigParams.py index 2f92876..6fa7617 100644 --- a/func/utils/ConfigParams.py +++ b/func/utils/ConfigParams.py @@ -33,7 +33,7 @@ class ConfigParams: APPROXIMATELY_ALIGN_CONFIG_FILE_PATH: str = "./config/Config_approximately_align.yaml" APPROXIMATELY_ALIGN_CONFIG_NEW_CONTENT: dict = { "InputConfig": { - "orgBcgFreq": 1000, + "OrgBCGFreq": 1000, "ThoFreq": 100, "AbdFreq": 100 }, @@ -158,10 +158,9 @@ class ConfigParams: PRECISELY_ALIGN_INPUT_ORGBCG_FILENAME: str = "OrgBCG_Raw_" PRECISELY_ALIGN_INPUT_BCG_FILENAME: str = "BCG_Filter_" PRECISELY_ALIGN_INPUT_JPEAK_FILENAME: str = "JPeak_revise_corrected" - PRECISELY_ALIGN_SAVE_BCG_ALIGNINFO_FILENAME: str = "Align_info" + PRECISELY_ALIGN_SAVE_ALIGNINFO_FILENAME: str = "Align_info" PRECISELY_ALIGN_INPUT_ECG_FILENAME: str = "ECG_Filter_" PRECISELY_ALIGN_INPUT_RPEAK_FILENAME: str = "Rpeak_final_corrected" - PRECISELY_ALIGN_SAVE_ECG_ALIGNINFO_FILENAME: str = "Align_info" PRECISELY_ALIGN_SAVE_ORGBCG_FILENAME: str = "OrgBCG_Sync_" PRECISELY_ALIGN_SAVE_BCG_FILENAME: str = "BCG_Sync_" PRECISELY_ALIGN_SAVE_ECG_FILENAME: str = "ECG_Sync_" @@ -180,7 +179,8 @@ class ConfigParams: "ChannelInput": { "Effort Tho": "Effort Tho_Raw_", "Effort Abd": "Effort Abd_Raw_", - "Flow Patient": "Flow Patient_Raw_", + "Flow T": "Flow T_Raw_", + "Flow P": "Flow P_Raw_", "Snore": "Snore_Raw_", "SpO2": "SpO2_Raw_", "5_class": "5_class_Raw_" @@ -192,7 +192,8 @@ class ConfigParams: "ChannelSave": { "Effort Tho": "Effort Tho_Sync_", "Effort Abd": "Effort Abd_Sync_", - "Flow Patient": "Flow Patient_Sync_", + "Flow T": "Flow T_Sync_", + "Flow P": "Flow P_Sync_", "Snore": "Snore_Sync_", "SpO2": "SpO2_Sync_", "5_class": "5_class_Sync_" @@ -203,6 +204,8 @@ class ConfigParams: "EndWith": { "Effort Tho": ENDSWITH_TXT, "Effort Abd": ENDSWITH_TXT, + "Flow T": ENDSWITH_TXT, + "Flow P": ENDSWITH_TXT, "Flow Patient": ENDSWITH_TXT, "Snore": ENDSWITH_TXT, "SpO2": ENDSWITH_TXT, @@ -219,7 +222,7 @@ class ConfigParams: ARTIFACT_LABEL_CONFIG_FILE_PATH: str = "./config/Config_artifact_label.yaml" ARTIFACT_LABEL_CONFIG_NEW_CONTENT: dict = { "InputConfig": { - "orgBcgFreq": 1000, + "OrgBCGFreq": 1000, "BCGFreq": 1000 }, "CustomAutoplayArgs": { @@ -236,7 +239,33 @@ class ConfigParams: ARTIFACT_LABEL_LABEL_TRANSPARENCY: float = 0.3 ARTIFACT_LABEL_ACTION_LABEL_ARTIFACT_SHORTCUT_KEY: str = "Z" - + # 睡眠呼吸暂停事件标注 + SA_LABEL_CONFIG_FILE_PATH: str = "./config/Config_SA_label.yaml" + SA_LABEL_CONFIG_NEW_CONTENT: dict = { + "InputConfig": { + "OrgBCGFreq": 1000, + "ThoFreq": 100, + "AbdFreq": 100, + "FlowTFreq": 100, + "FlowPFreq": 100, + "SpO2Freq": 1, + "PlotFreq": 100 + }, + "AddSecond": { + "Front": 60, + "Back": 60 + } + } + SA_LABEL_INPUT_ORGBCG_FILENAME: str = "OrgBCG_Sync_" + SA_LABEL_INPUT_THO_FILENAME: str = "Effort Tho_Sync_" + SA_LABEL_INPUT_ABD_FILENAME: str = "Effort Abd_Sync_" + SA_LABEL_INPUT_FLOWT_FILENAME: str = "Flow T_Sync_" + SA_LABEL_INPUT_FLOWP_FILENAME: str = "Flow P_Sync_" + SA_LABEL_INPUT_SPO2_FILENAME: str = "SpO2_Sync_" + SA_LABEL_INPUT_ARTIFACT_FILENAME: str = "Artifact_a" + SA_LABEL_INPUT_LABEL_FILENAME: str = "SA Label_Sync" + SA_LABEL_SAVE_FILENAME: str = "SA Label_corrected" + SA_LABEL_SAVE2_FILENAME: str = "SA Label_add" diff --git a/func/utils/Constants.py b/func/utils/Constants.py index eae3f26..9edcfc4 100644 --- a/func/utils/Constants.py +++ b/func/utils/Constants.py @@ -19,6 +19,10 @@ class Constants: INPUT_FINISHED: str = "导入完成" INPUT_FAILURE: str = "导入失败" + RESAMPLING_DATA: str = "正在数据重采样" + RESAMPLE_FINISHED: str = "重采样完成" + RESAMPLE_FAILURE: str = "重采样失败" + DRAWING_DATA: str = "正在绘制图形" DRAWING_FINISHED: str = "绘制完成" DRAWING_FAILURE: str = "绘制失败" @@ -447,6 +451,35 @@ class Constants: background-color: #00ff00; /* 鼠标悬停时的背景颜色 */ }""" + # 睡眠呼吸暂停事件标注 + SA_LABEL_LOADING_ARCHIVE: str = "正在获取历史存档" + SA_LABEL_ARCHIVE_EXIST: str = "找到历史存档,成功读取" + SA_LABEL_ARCHIVE_NOT_EXIST: str = "未找到历史存档,创建新存档" + + SA_LABEL_UPDATING_TABLE: str = "正在更新表格" + SA_LABEL_UPDATING_INFO: str = "正在更新信息" + SA_LABEL_UPDATE_FINISHED: str = "更新完成" + SA_LABEL_UPDATE_FAILURE: str = "更新失败" + + SA_LABEL_PROCESSING_DATA: str = "正在处理数据" + SA_LABEL_PROCESS_FINISHED: str = "处理完成" + SA_LABEL_PROCESS_FAILURE: str = "处理失败" + + SA_LABEL_FAILURE_REASON = { + "Data_Path_Not_Exist": "(数据路径不存在)", + "Read_Data_Exception": "(读取数据异常)", + "Raw_Data_Not_Exist": "(原始数据不存在)", + "Filter_Exception": "(滤波器异常)", + "Resample_Exception": "(重采样异常)", + "Artifact_Format_Not_Correct": "(体动长度或格式不正确)", + "Get_Artifact_Format_Exception": "(获取体动长度或格式异常)", + "Label_Format_Exception": "(获取标签格式异常)", + "Update_tableWidget_Exception": "(更新表格异常)", + "Update_Info_Exception": "(更新信息异常)", + "Process_Data_Exception": "(处理数据异常)", + "Save_Exception": "(保存异常)" + } + SA_LABEL_JUMP: str = "跳转到事件" diff --git a/ui/setting/precisely_align_input_setting.py b/ui/setting/precisely_align_input_setting.py index fa81c02..b9d4f8b 100644 --- a/ui/setting/precisely_align_input_setting.py +++ b/ui/setting/precisely_align_input_setting.py @@ -70,15 +70,10 @@ class Ui_MainWindow_precisely_align_input_setting(object): self.groupBox_file_path_save.setObjectName(u"groupBox_file_path_save") self.verticalLayout_4 = QVBoxLayout(self.groupBox_file_path_save) self.verticalLayout_4.setObjectName(u"verticalLayout_4") - self.plainTextEdit_file_path_save_BCG_AlignInfo = QPlainTextEdit(self.groupBox_file_path_save) - self.plainTextEdit_file_path_save_BCG_AlignInfo.setObjectName(u"plainTextEdit_file_path_save_BCG_AlignInfo") + self.plainTextEdit_file_path_save_AlignInfo = QPlainTextEdit(self.groupBox_file_path_save) + self.plainTextEdit_file_path_save_AlignInfo.setObjectName(u"plainTextEdit_file_path_save_AlignInfo") - self.verticalLayout_4.addWidget(self.plainTextEdit_file_path_save_BCG_AlignInfo) - - self.plainTextEdit_file_path_save_ECG_AlignInfo = QPlainTextEdit(self.groupBox_file_path_save) - self.plainTextEdit_file_path_save_ECG_AlignInfo.setObjectName(u"plainTextEdit_file_path_save_ECG_AlignInfo") - - self.verticalLayout_4.addWidget(self.plainTextEdit_file_path_save_ECG_AlignInfo) + self.verticalLayout_4.addWidget(self.plainTextEdit_file_path_save_AlignInfo) self.gridLayout_2.addWidget(self.groupBox_file_path_save, 5, 0, 1, 2) @@ -201,7 +196,7 @@ class Ui_MainWindow_precisely_align_input_setting(object): self.gridLayout_2.setRowStretch(1, 3) self.gridLayout_2.setRowStretch(3, 3) self.gridLayout_2.setRowStretch(4, 2) - self.gridLayout_2.setRowStretch(5, 4) + self.gridLayout_2.setRowStretch(5, 2) self.gridLayout_2.setRowStretch(6, 4) self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 4) @@ -231,8 +226,7 @@ class Ui_MainWindow_precisely_align_input_setting(object): self.plainTextEdit_file_path_save_BCG.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u4fdd\u5b58\u8def\u5f84", None)) self.plainTextEdit_file_path_save_ECG.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u4fdd\u5b58\u8def\u5f84", None)) self.groupBox_file_path_save.setTitle(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u5bf9\u9f50\u4fe1\u606f\u4fdd\u5b58\u8def\u5f84", None)) - self.plainTextEdit_file_path_save_BCG_AlignInfo.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u4fdd\u5b58\u8def\u5f84", None)) - self.plainTextEdit_file_path_save_ECG_AlignInfo.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u4fdd\u5b58\u8def\u5f84", None)) + self.plainTextEdit_file_path_save_AlignInfo.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u4fdd\u5b58\u8def\u5f84", None)) self.groupBox_file_path_input_orgBcg.setTitle(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u539f\u59cborgBcg\u8def\u5f84", None)) self.plainTextEdit_file_path_input_orgBcg.setPlainText("") self.plainTextEdit_file_path_input_orgBcg.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) diff --git a/ui/setting/precisely_align_input_setting.ui b/ui/setting/precisely_align_input_setting.ui index e638be6..1580093 100644 --- a/ui/setting/precisely_align_input_setting.ui +++ b/ui/setting/precisely_align_input_setting.ui @@ -37,7 +37,7 @@ 文件路径 - + @@ -75,14 +75,7 @@ - - - 保存路径 - - - - - + 保存路径