From cb7e79a86de054a99cd5c947906926ac519ab211 Mon Sep 17 00:00:00 2001
From: Yorusora <2944763079@qq.com>
Date: Tue, 20 May 2025 15:20:54 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E9=83=A8=E5=88=86?=
=?UTF-8?q?=E5=91=BD=E5=90=8D=E8=A7=84=E5=88=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
func/Module_approximately_align.py | 22 +++++------
func/Module_artifact_label.py | 22 +++++------
func/Module_cut_PSG.py | 2 +-
func/Module_label_check.py | 4 +-
func/Module_mainwindow.py | 10 ++++-
func/Module_precisely_align.py | 38 ++++++++----------
func/utils/ConfigParams.py | 43 +++++++++++++++++----
func/utils/Constants.py | 33 ++++++++++++++++
ui/setting/precisely_align_input_setting.py | 16 +++-----
ui/setting/precisely_align_input_setting.ui | 11 +-----
10 files changed, 126 insertions(+), 75 deletions(-)
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 @@
-
-
-
- 保存路径
-
-
-
- -
-
+
保存路径