Compare commits
5 Commits
f00a98ce77
...
fada84e115
| Author | SHA1 | Date | |
|---|---|---|---|
| fada84e115 | |||
| 5332a2e7db | |||
| 81c360bf9f | |||
| 9af911a856 | |||
| cb7e79a86d |
@ -7,7 +7,7 @@ from PySide6.QtWidgets import QMessageBox, QMainWindow, QApplication
|
|||||||
from matplotlib.backends.backend_qt import NavigationToolbar2QT
|
from matplotlib.backends.backend_qt import NavigationToolbar2QT
|
||||||
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas
|
from matplotlib.backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas
|
||||||
from matplotlib.figure import Figure
|
from matplotlib.figure import Figure
|
||||||
from numpy import repeat, convolve, ones, mean, std, int64, argmax, linspace, diff
|
from numpy import convolve, ones, mean, std, int64, argmax, linspace, diff
|
||||||
from overrides import overrides
|
from overrides import overrides
|
||||||
from pandas import read_csv, DataFrame
|
from pandas import read_csv, DataFrame
|
||||||
from scipy.signal import find_peaks, resample, butter, sosfiltfilt, correlate
|
from scipy.signal import find_peaks, resample, butter, sosfiltfilt, correlate
|
||||||
|
|||||||
@ -64,7 +64,7 @@ class MainWindow_cut_PSG(QMainWindow):
|
|||||||
"Path": {
|
"Path": {
|
||||||
"InputFolder": str(Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / Path(str(self.sampID))),
|
"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))),
|
"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))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@ -90,7 +90,7 @@ class SettingWindow(QMainWindow):
|
|||||||
"Input_Peak": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
|
"Input_Peak": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
|
||||||
Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_INPUT_JPEAK_FILENAME +
|
Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_INPUT_JPEAK_FILENAME +
|
||||||
ConfigParams.ENDSWITH_TXT))),
|
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 +
|
Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_APPROXIMATELY_ALIGNINFO_FILENAME +
|
||||||
ConfigParams.ENDSWITH_CSV))),
|
ConfigParams.ENDSWITH_CSV))),
|
||||||
"Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
|
"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 /
|
"Input_Peak": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
||||||
Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_INPUT_RPEAK_FILENAME +
|
Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_INPUT_RPEAK_FILENAME +
|
||||||
ConfigParams.ENDSWITH_TXT))),
|
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 +
|
Path(str(self.sampID)) / Path(ConfigParams.LABEL_CHECK_APPROXIMATELY_ALIGNINFO_FILENAME +
|
||||||
ConfigParams.ENDSWITH_CSV))),
|
ConfigParams.ENDSWITH_CSV))),
|
||||||
"Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
"Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
||||||
|
|||||||
@ -226,7 +226,15 @@ class MainWindow(QMainWindow, Ui_Signal_Label):
|
|||||||
|
|
||||||
def __slot_btn_SA_label__(self):
|
def __slot_btn_SA_label__(self):
|
||||||
self.SA_label = MainWindow_SA_label()
|
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):
|
def seek_sampID(self, path):
|
||||||
if not Path(path).exists():
|
if not Path(path).exists():
|
||||||
|
|||||||
@ -111,7 +111,7 @@ class SettingWindow(QMainWindow):
|
|||||||
|
|
||||||
Config.update({
|
Config.update({
|
||||||
"Path": {
|
"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 +
|
Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_INPUT_ORGBCG_FILENAME +
|
||||||
str(Config["InputConfig"]["ECGFreq"]) +
|
str(Config["InputConfig"]["ECGFreq"]) +
|
||||||
ConfigParams.ENDSWITH_TXT))),
|
ConfigParams.ENDSWITH_TXT))),
|
||||||
@ -132,13 +132,10 @@ class SettingWindow(QMainWindow):
|
|||||||
"Input_Approximately_Align": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
"Input_Approximately_Align": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
||||||
Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_APPROXIMATELY_ALIGNINFO_FILENAME +
|
Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_APPROXIMATELY_ALIGNINFO_FILENAME +
|
||||||
ConfigParams.ENDSWITH_CSV))),
|
ConfigParams.ENDSWITH_CSV))),
|
||||||
"Save_BCG_AlignInfo": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_ALIGNED /
|
"Save_AlignInfo": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_LABEL /
|
||||||
Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_SAVE_BCG_ALIGNINFO_FILENAME +
|
Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_SAVE_ALIGNINFO_FILENAME +
|
||||||
ConfigParams.ENDSWITH_TXT))),
|
ConfigParams.ENDSWITH_TXT))),
|
||||||
"Save_ECG_AlignInfo": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_ALIGNED /
|
"Save_OrgBCG": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_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 /
|
|
||||||
Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_SAVE_ORGBCG_FILENAME +
|
Path(str(self.sampID)) / Path(ConfigParams.PRECISELY_ALIGN_SAVE_ORGBCG_FILENAME +
|
||||||
str(Config["InputConfig"]["ECGFreq"]) +
|
str(Config["InputConfig"]["ECGFreq"]) +
|
||||||
ConfigParams.ENDSWITH_TXT))),
|
ConfigParams.ENDSWITH_TXT))),
|
||||||
@ -202,15 +199,14 @@ class SettingWindow(QMainWindow):
|
|||||||
|
|
||||||
# 数据回显
|
# 数据回显
|
||||||
self.ui.spinBox_input_freq_ECG.setValue(Config["InputConfig"]["ECGFreq"])
|
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_BCG.setPlainText(Config["Path"]["Input_BCG"])
|
||||||
self.ui.plainTextEdit_file_path_input_Jpeak.setPlainText(Config["Path"]["Input_Jpeak"])
|
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_ECG.setPlainText(Config["Path"]["Input_ECG"])
|
||||||
self.ui.plainTextEdit_file_path_input_Rpeak.setPlainText(Config["Path"]["Input_Rpeak"])
|
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_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_AlignInfo.setPlainText(Config["Path"]["Save_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_orgBcg.setPlainText(Config["Path"]["Save_orgBcg"])
|
|
||||||
self.ui.plainTextEdit_file_path_save_BCG.setPlainText(Config["Path"]["Save_BCG"])
|
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_ECG.setPlainText(Config["Path"]["Save_ECG"])
|
||||||
self.ui.plainTextEdit_file_path_save_Jpeak.setPlainText(Config["Path"]["Save_Jpeak"])
|
self.ui.plainTextEdit_file_path_save_Jpeak.setPlainText(Config["Path"]["Save_Jpeak"])
|
||||||
@ -219,15 +215,14 @@ class SettingWindow(QMainWindow):
|
|||||||
def __write_config__(self):
|
def __write_config__(self):
|
||||||
# 从界面写入配置
|
# 从界面写入配置
|
||||||
Config["InputConfig"]["ECGFreq"] = self.ui.spinBox_input_freq_ECG.value()
|
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_BCG"] = self.ui.plainTextEdit_file_path_input_BCG.toPlainText()
|
||||||
Config["Path"]["Input_Jpeak"] = self.ui.plainTextEdit_file_path_input_Jpeak.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_ECG"] = self.ui.plainTextEdit_file_path_input_ECG.toPlainText()
|
||||||
Config["Path"]["Input_Rpeak"] = self.ui.plainTextEdit_file_path_input_Rpeak.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"]["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_AlignInfo"] = self.ui.plainTextEdit_file_path_save_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_orgBcg"] = self.ui.plainTextEdit_file_path_save_orgBcg.toPlainText()
|
|
||||||
Config["Path"]["Save_BCG"] = self.ui.plainTextEdit_file_path_save_BCG.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_ECG"] = self.ui.plainTextEdit_file_path_save_ECG.toPlainText()
|
||||||
Config["Path"]["Save_Jpeak"] = self.ui.plainTextEdit_file_path_save_Jpeak.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)))
|
total_rows = len(DataFrame(self.data.res_orgBcg.reshape(-1)))
|
||||||
chunk_size = ConfigParams.PRECISELY_ALIGN_SAVE_CHUNK_SIZE
|
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):
|
for start in range(0, total_rows, chunk_size):
|
||||||
end = min(start + chunk_size, total_rows)
|
end = min(start + chunk_size, total_rows)
|
||||||
chunk = DataFrame(self.data.res_orgBcg.reshape(-1)).iloc[start:end]
|
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)))
|
total_rows = len(DataFrame(self.data.res_BCG.reshape(-1)))
|
||||||
chunk_size = ConfigParams.PRECISELY_ALIGN_SAVE_CHUNK_SIZE
|
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):
|
for start in range(0, total_rows, chunk_size):
|
||||||
end = min(start + chunk_size, total_rows)
|
end = min(start + chunk_size, total_rows)
|
||||||
chunk = DataFrame(self.data.res_BCG.reshape(-1)).iloc[start:end]
|
chunk = DataFrame(self.data.res_BCG.reshape(-1)).iloc[start:end]
|
||||||
@ -944,7 +939,7 @@ class MainWindow_precisely_align(QMainWindow):
|
|||||||
else:
|
else:
|
||||||
PublicFunc.text_output(self.ui, "(6/6)" + result.info, Constants.TIPS_TYPE_INFO)
|
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)
|
PublicFunc.finish_operation(self, ButtonState)
|
||||||
|
|
||||||
def __update_coordinate__(self):
|
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"])
|
return Result().failure(info=Constants.INPUT_FAILURE + Constants.PRECISELY_ALIGN_FAILURE_REASON["Data_Path_Not_Exist"])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.raw_orgBcg = read_csv(Config["Path"]["Input_orgBcg"],
|
self.raw_orgBcg = read_csv(Config["Path"]["Input_OrgBCG"],
|
||||||
encoding=ConfigParams.UTF8_ENCODING,
|
encoding=ConfigParams.UTF8_ENCODING,
|
||||||
header=None).to_numpy().reshape(-1)
|
header=None).to_numpy().reshape(-1)
|
||||||
self.raw_BCG = read_csv(Config["Path"]["Input_BCG"],
|
self.raw_BCG = read_csv(Config["Path"]["Input_BCG"],
|
||||||
@ -1803,8 +1798,7 @@ class Data:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
save_data = [str(save_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_AlignInfo"], index=False, header=False)
|
||||||
DataFrame(save_data).to_csv(Config["Path"]["Save_ECG_AlignInfo"], index=False, header=False)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return Result().failure(info=Constants.PRECISELY_ALIGN_SAVING_ALIGNINFO_FAILURE + Constants.PRECISELY_ALIGN_FAILURE_REASON["Save_Exception"] + "\n" + format_exc())
|
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"])
|
return Result().failure(info=Constants.PRECISELY_ALIGN_SAVING_RES_ORGBCG_FAILURE + Constants.PRECISELY_ALIGN_FAILURE_REASON["res_orgBcg_Not_Exist"])
|
||||||
|
|
||||||
try:
|
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:
|
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())
|
return Result().failure(info=Constants.PRECISELY_ALIGN_SAVING_RES_ORGBCG_FAILURE + Constants.PRECISELY_ALIGN_FAILURE_REASON["Save_Exception"] + "\n" + format_exc())
|
||||||
|
|
||||||
|
|||||||
@ -75,13 +75,9 @@ class SettingWindow(QMainWindow):
|
|||||||
Config.update({
|
Config.update({
|
||||||
"Path": {
|
"Path": {
|
||||||
"Input": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
|
"Input": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
|
||||||
Path(str(self.sampID)) / Path(ConfigParams.PREPROCESS_INPUT_BCG_FILENAME +
|
Path(str(self.sampID)))),
|
||||||
str(Config["InputConfig"]["Freq"]) +
|
|
||||||
ConfigParams.ENDSWITH_TXT))),
|
|
||||||
"Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
|
"Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
|
||||||
Path(str(self.sampID)) / Path(ConfigParams.PREPROCESS_SAVE_BCG_FILENAME +
|
Path(str(self.sampID))))
|
||||||
str(Config["OutputConfig"]["Freq"]) +
|
|
||||||
ConfigParams.ENDSWITH_TXT)))
|
|
||||||
},
|
},
|
||||||
"Mode": self.mode
|
"Mode": self.mode
|
||||||
})
|
})
|
||||||
@ -89,13 +85,9 @@ class SettingWindow(QMainWindow):
|
|||||||
Config.update({
|
Config.update({
|
||||||
"Path": {
|
"Path": {
|
||||||
"Input": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
"Input": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
||||||
Path(str(self.sampID)) / Path(ConfigParams.PREPROCESS_INPUT_ECG_FILENAME +
|
Path(str(self.sampID)))),
|
||||||
str(Config["InputConfig"]["Freq"]) +
|
|
||||||
ConfigParams.ENDSWITH_TXT))),
|
|
||||||
"Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
"Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
||||||
Path(str(self.sampID)) / Path(ConfigParams.PREPROCESS_SAVE_ECG_FILENAME +
|
Path(str(self.sampID))))
|
||||||
str(Config["OutputConfig"]["Freq"]) +
|
|
||||||
ConfigParams.ENDSWITH_TXT)))
|
|
||||||
},
|
},
|
||||||
"Mode": self.mode
|
"Mode": self.mode
|
||||||
})
|
})
|
||||||
@ -133,14 +125,14 @@ class SettingWindow(QMainWindow):
|
|||||||
str((Path(self.root_path) /
|
str((Path(self.root_path) /
|
||||||
ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
|
ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
|
||||||
Path(str(self.sampID)) /
|
Path(str(self.sampID)) /
|
||||||
Path(ConfigParams.PREPROCESS_INPUT_BCG_FILENAME +
|
Path(ConfigParams.ORGBCG_RAW +
|
||||||
str(self.ui.spinBox_input_freq.value()) +
|
str(self.ui.spinBox_input_freq.value()) +
|
||||||
ConfigParams.ENDSWITH_TXT))))
|
ConfigParams.ENDSWITH_TXT))))
|
||||||
self.ui.plainTextEdit_file_path_save.setPlainText(
|
self.ui.plainTextEdit_file_path_save.setPlainText(
|
||||||
str((Path(self.root_path) /
|
str((Path(self.root_path) /
|
||||||
ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
|
ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
|
||||||
Path(str(self.sampID)) /
|
Path(str(self.sampID)) /
|
||||||
Path(ConfigParams.PREPROCESS_SAVE_BCG_FILENAME +
|
Path(ConfigParams.BCG_FILTER +
|
||||||
str(self.ui.spinBox_output_freq.value()) +
|
str(self.ui.spinBox_output_freq.value()) +
|
||||||
ConfigParams.ENDSWITH_TXT))))
|
ConfigParams.ENDSWITH_TXT))))
|
||||||
elif self.mode == "ECG":
|
elif self.mode == "ECG":
|
||||||
@ -148,14 +140,14 @@ class SettingWindow(QMainWindow):
|
|||||||
str((Path(self.root_path) /
|
str((Path(self.root_path) /
|
||||||
ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
||||||
Path(str(self.sampID)) /
|
Path(str(self.sampID)) /
|
||||||
Path(ConfigParams.PREPROCESS_INPUT_ECG_FILENAME +
|
Path(ConfigParams.ECG_RAW +
|
||||||
str(self.ui.spinBox_input_freq.value()) +
|
str(self.ui.spinBox_input_freq.value()) +
|
||||||
ConfigParams.ENDSWITH_TXT))))
|
ConfigParams.ENDSWITH_TXT))))
|
||||||
self.ui.plainTextEdit_file_path_save.setPlainText(
|
self.ui.plainTextEdit_file_path_save.setPlainText(
|
||||||
str((Path(self.root_path) /
|
str((Path(self.root_path) /
|
||||||
ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
ConfigParams.PUBLIC_PATH_PSG_TEXT /
|
||||||
Path(str(self.sampID)) /
|
Path(str(self.sampID)) /
|
||||||
Path(ConfigParams.PREPROCESS_SAVE_ECG_FILENAME +
|
Path(ConfigParams.ECG_FILTER +
|
||||||
str(self.ui.spinBox_output_freq.value()) +
|
str(self.ui.spinBox_output_freq.value()) +
|
||||||
ConfigParams.ENDSWITH_TXT))))
|
ConfigParams.ENDSWITH_TXT))))
|
||||||
else:
|
else:
|
||||||
@ -394,21 +386,57 @@ class Data:
|
|||||||
self.processed_data = None
|
self.processed_data = None
|
||||||
|
|
||||||
def open_file(self):
|
def open_file(self):
|
||||||
|
if Config["Mode"] == "BCG":
|
||||||
|
signal = ConfigParams.ORGBCG_RAW
|
||||||
|
elif Config["Mode"] == "ECG":
|
||||||
|
signal = ConfigParams.ECG_RAW
|
||||||
|
else:
|
||||||
|
raise ValueError("模式不存在")
|
||||||
|
if Path(Config["Path"]["Input"]).is_file():
|
||||||
|
Config["Path"]["Input"] = str(Path(Config["Path"]["Input"]).parent)
|
||||||
|
|
||||||
if not Path(Config["Path"]["Input"]).exists():
|
if not Path(Config["Path"]["Input"]).exists():
|
||||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.PREPROCESS_FAILURE_REASON["Data_Path_Not_Exist"])
|
return Result().failure(info=Constants.INPUT_FAILURE + Constants.FAILURE_REASON["Path_Not_Exist"])
|
||||||
|
|
||||||
|
temp_path = list(
|
||||||
|
Path(Config["Path"]["Input"]).glob(f"{signal}*"))
|
||||||
|
if len(temp_path) == 0:
|
||||||
|
return Result().failure(
|
||||||
|
info=Constants.INPUT_FAILURE + "\n" +
|
||||||
|
signal + ":" +
|
||||||
|
Config["Path"]["Input"] +
|
||||||
|
Constants.FAILURE_REASON["File_Not_Exist"])
|
||||||
|
elif len(temp_path) > 1:
|
||||||
|
return Result().failure(
|
||||||
|
info=Constants.INPUT_FAILURE + "\n" +
|
||||||
|
signal + ":" +
|
||||||
|
Config["Path"]["Input"] +
|
||||||
|
Constants.FAILURE_REASON["Data_File_More_Than_One"])
|
||||||
|
else:
|
||||||
|
path = temp_path[0]
|
||||||
|
Config["Path"]["Input"] = str(path)
|
||||||
|
freq = path.stem.split("_")[-1]
|
||||||
|
# 验证是否为整数或是否存在
|
||||||
|
if not freq.isdigit():
|
||||||
|
return Result().failure(
|
||||||
|
info=Constants.INPUT_FAILURE + "\n" +
|
||||||
|
signal + ":" +
|
||||||
|
Constants.FAILURE_REASON["Data_Frequency_Not_In_Filename"])
|
||||||
|
Config["InputConfig"]["Freq"] = int(freq)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.raw_data = read_csv(Config["Path"]["Input"],
|
self.raw_data = read_csv(Config["Path"]["Input"],
|
||||||
encoding=ConfigParams.UTF8_ENCODING,
|
encoding=ConfigParams.UTF8_ENCODING,
|
||||||
header=None).to_numpy().reshape(-1)
|
header=None).to_numpy().reshape(-1)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return Result().failure(info=Constants.INPUT_FAILURE + Constants.PREPROCESS_FAILURE_REASON["Read_Data_Exception"] + "\n" + format_exc())
|
return Result().failure(info=Constants.INPUT_FAILURE +
|
||||||
|
Constants.FAILURE_REASON["Open_Data_Exception"] + "\n" + format_exc())
|
||||||
|
|
||||||
return Result().success(info=Constants.INPUT_FINISHED)
|
return Result().success(info=Constants.INPUT_FINISHED)
|
||||||
|
|
||||||
def preprocess(self):
|
def preprocess(self):
|
||||||
if self.raw_data is None:
|
if self.raw_data is None:
|
||||||
Result().failure(info=Constants.PREPROCESS_PROCESS_FAILURE + Constants.PREPROCESS_FAILURE_REASON["Raw_Data_Not_Exist"])
|
Result().failure(info=Constants.PREPROCESS_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if Config["InputConfig"]["Freq"] != Config["OutputConfig"]["Freq"]:
|
if Config["InputConfig"]["Freq"] != Config["OutputConfig"]["Freq"]:
|
||||||
@ -430,18 +458,19 @@ class Data:
|
|||||||
else:
|
else:
|
||||||
raise ValueError("模式不存在")
|
raise ValueError("模式不存在")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
Result().failure(info=Constants.PREPROCESS_PROCESS_FAILURE + Constants.PREPROCESS_FAILURE_REASON["Filter_Exception"] + "\n" + format_exc())
|
Result().failure(info=Constants.PREPROCESS_FAILURE +
|
||||||
|
Constants.FAILURE_REASON["Preprocess_Exception"] + "\n" + format_exc())
|
||||||
return Result().success(info=Constants.PREPROCESS_PROCESS_FINISHED)
|
|
||||||
|
|
||||||
|
return Result().success(info=Constants.PREPROCESS_FINISHED)
|
||||||
|
|
||||||
def save(self, chunk):
|
def save(self, chunk):
|
||||||
if self.processed_data is None:
|
if self.processed_data is None:
|
||||||
return Result().failure(info=Constants.SAVING_FAILURE + Constants.PREPROCESS_FAILURE_REASON["Processed_Data_Not_Exist"])
|
return Result().failure(info=Constants.SAVING_FAILURE + Constants.FAILURE_REASON["Data_Not_Exist"])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
chunk.to_csv(Config["Path"]["Save"], mode='a', index=False, header=False, float_format='%.4f')
|
chunk.to_csv(Config["Path"]["Save"], mode='a', index=False, header=False, float_format='%.4f')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return Result().failure(info=Constants.SAVING_FAILURE + Constants.PREPROCESS_FAILURE_REASON["Save_Exception"] + "\n" + format_exc())
|
return Result().failure(info=Constants.SAVING_FAILURE +
|
||||||
|
Constants.FAILURE_REASON["Save_Exception"] + "\n" + format_exc())
|
||||||
|
|
||||||
return Result().success(Constants.SAVING_FINISHED)
|
return Result().success(Constants.SAVING_FINISHED)
|
||||||
@ -29,6 +29,16 @@ class ConfigParams:
|
|||||||
ACTION_ZOOM_SHORTCUT_KEY: str = "C"
|
ACTION_ZOOM_SHORTCUT_KEY: str = "C"
|
||||||
FONT: str = "Microsoft YaHei UI"
|
FONT: str = "Microsoft YaHei UI"
|
||||||
|
|
||||||
|
ORGBCG_RAW: str = "OrgBCG_Raw_"
|
||||||
|
ECG_RAW: str = "ECG II_Raw_"
|
||||||
|
THO_RAW: str = "Effort Tho_Raw_"
|
||||||
|
ABD_RAW: str = "Effort Abd_Raw_"
|
||||||
|
|
||||||
|
BCG_FILTER: str = "BCG_Filter_"
|
||||||
|
ECG_FILTER: str = "ECG_Filter_"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 数据粗同步
|
# 数据粗同步
|
||||||
APPROXIMATELY_ALIGN_CONFIG_FILE_PATH: str = "./config/Config_approximately_align.yaml"
|
APPROXIMATELY_ALIGN_CONFIG_FILE_PATH: str = "./config/Config_approximately_align.yaml"
|
||||||
APPROXIMATELY_ALIGN_CONFIG_NEW_CONTENT: dict = {
|
APPROXIMATELY_ALIGN_CONFIG_NEW_CONTENT: dict = {
|
||||||
@ -163,10 +173,9 @@ class ConfigParams:
|
|||||||
PRECISELY_ALIGN_INPUT_ORGBCG_FILENAME: str = "OrgBCG_Raw_"
|
PRECISELY_ALIGN_INPUT_ORGBCG_FILENAME: str = "OrgBCG_Raw_"
|
||||||
PRECISELY_ALIGN_INPUT_BCG_FILENAME: str = "BCG_Filter_"
|
PRECISELY_ALIGN_INPUT_BCG_FILENAME: str = "BCG_Filter_"
|
||||||
PRECISELY_ALIGN_INPUT_JPEAK_FILENAME: str = "JPeak_revise_corrected"
|
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_ECG_FILENAME: str = "ECG_Filter_"
|
||||||
PRECISELY_ALIGN_INPUT_RPEAK_FILENAME: str = "Rpeak_final_corrected"
|
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_ORGBCG_FILENAME: str = "OrgBCG_Sync_"
|
||||||
PRECISELY_ALIGN_SAVE_BCG_FILENAME: str = "BCG_Sync_"
|
PRECISELY_ALIGN_SAVE_BCG_FILENAME: str = "BCG_Sync_"
|
||||||
PRECISELY_ALIGN_SAVE_ECG_FILENAME: str = "ECG_Sync_"
|
PRECISELY_ALIGN_SAVE_ECG_FILENAME: str = "ECG_Sync_"
|
||||||
@ -185,7 +194,8 @@ class ConfigParams:
|
|||||||
"ChannelInput": {
|
"ChannelInput": {
|
||||||
"Effort Tho": "Effort Tho_Raw_",
|
"Effort Tho": "Effort Tho_Raw_",
|
||||||
"Effort Abd": "Effort Abd_Raw_",
|
"Effort Abd": "Effort Abd_Raw_",
|
||||||
"Flow Patient": "Flow Patient_Raw_",
|
"Flow T": "Flow T_Raw_",
|
||||||
|
"Flow P": "Flow P_Raw_",
|
||||||
"Snore": "Snore_Raw_",
|
"Snore": "Snore_Raw_",
|
||||||
"SpO2": "SpO2_Raw_",
|
"SpO2": "SpO2_Raw_",
|
||||||
"5_class": "5_class_Raw_"
|
"5_class": "5_class_Raw_"
|
||||||
@ -197,7 +207,8 @@ class ConfigParams:
|
|||||||
"ChannelSave": {
|
"ChannelSave": {
|
||||||
"Effort Tho": "Effort Tho_Sync_",
|
"Effort Tho": "Effort Tho_Sync_",
|
||||||
"Effort Abd": "Effort Abd_Sync_",
|
"Effort Abd": "Effort Abd_Sync_",
|
||||||
"Flow Patient": "Flow Patient_Sync_",
|
"Flow T": "Flow T_Sync_",
|
||||||
|
"Flow P": "Flow P_Sync_",
|
||||||
"Snore": "Snore_Sync_",
|
"Snore": "Snore_Sync_",
|
||||||
"SpO2": "SpO2_Sync_",
|
"SpO2": "SpO2_Sync_",
|
||||||
"5_class": "5_class_Sync_"
|
"5_class": "5_class_Sync_"
|
||||||
@ -208,6 +219,8 @@ class ConfigParams:
|
|||||||
"EndWith": {
|
"EndWith": {
|
||||||
"Effort Tho": ENDSWITH_TXT,
|
"Effort Tho": ENDSWITH_TXT,
|
||||||
"Effort Abd": ENDSWITH_TXT,
|
"Effort Abd": ENDSWITH_TXT,
|
||||||
|
"Flow T": ENDSWITH_TXT,
|
||||||
|
"Flow P": ENDSWITH_TXT,
|
||||||
"Flow Patient": ENDSWITH_TXT,
|
"Flow Patient": ENDSWITH_TXT,
|
||||||
"Snore": ENDSWITH_TXT,
|
"Snore": ENDSWITH_TXT,
|
||||||
"SpO2": ENDSWITH_TXT,
|
"SpO2": ENDSWITH_TXT,
|
||||||
@ -241,7 +254,33 @@ class ConfigParams:
|
|||||||
ARTIFACT_LABEL_LABEL_TRANSPARENCY: float = 0.3
|
ARTIFACT_LABEL_LABEL_TRANSPARENCY: float = 0.3
|
||||||
ARTIFACT_LABEL_ACTION_LABEL_ARTIFACT_SHORTCUT_KEY: str = "Z"
|
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"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -19,6 +19,14 @@ class Constants:
|
|||||||
INPUT_FINISHED: str = "导入完成"
|
INPUT_FINISHED: str = "导入完成"
|
||||||
INPUT_FAILURE: str = "导入失败"
|
INPUT_FAILURE: str = "导入失败"
|
||||||
|
|
||||||
|
PREPROCESSING_DATA: str = "正在预处理数据"
|
||||||
|
PREPROCESS_FINISHED: str = "预处理完成"
|
||||||
|
PREPROCESS_FAILURE: str = "预处理失败"
|
||||||
|
|
||||||
|
RESAMPLING_DATA: str = "正在数据重采样"
|
||||||
|
RESAMPLE_FINISHED: str = "重采样完成"
|
||||||
|
RESAMPLE_FAILURE: str = "重采样失败"
|
||||||
|
|
||||||
DRAWING_DATA: str = "正在绘制图形"
|
DRAWING_DATA: str = "正在绘制图形"
|
||||||
DRAWING_FINISHED: str = "绘制完成"
|
DRAWING_FINISHED: str = "绘制完成"
|
||||||
DRAWING_FAILURE: str = "绘制失败"
|
DRAWING_FAILURE: str = "绘制失败"
|
||||||
@ -75,6 +83,18 @@ class Constants:
|
|||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
FAILURE_REASON: dict = {
|
||||||
|
"Path_Not_Exist": "(路径不存在)",
|
||||||
|
"File_Not_Exist": "(数据文件不存在)",
|
||||||
|
"File_More_Than_One": "(数据文件超过一个)",
|
||||||
|
"Frequency_Not_In_Filename": "(数据频率不在文件名中)",
|
||||||
|
"Data_Not_Exist": "(数据不存在)",
|
||||||
|
|
||||||
|
"Open_Data_Exception": "(打开数据异常)",
|
||||||
|
"Preprocess_Exception": "(预处理异常)",
|
||||||
|
"Save_Exception": "(保存异常)"
|
||||||
|
}
|
||||||
|
|
||||||
# 数据粗同步
|
# 数据粗同步
|
||||||
APPROXIMATELY_ONLY_ALIGN_RESAMPLING: str = "正在仅重采样"
|
APPROXIMATELY_ONLY_ALIGN_RESAMPLING: str = "正在仅重采样"
|
||||||
APPROXIMATELY_ONLY_ALIGN_RESAMPLE_FINISHED: str = "仅重采样完成"
|
APPROXIMATELY_ONLY_ALIGN_RESAMPLE_FINISHED: str = "仅重采样完成"
|
||||||
@ -160,9 +180,7 @@ class Constants:
|
|||||||
DETECT_JPEAK_LOAD_FINISHED: str = "读取完成"
|
DETECT_JPEAK_LOAD_FINISHED: str = "读取完成"
|
||||||
DETECT_JPEAK_LOAD_FAILURE: str = "读取失败"
|
DETECT_JPEAK_LOAD_FAILURE: str = "读取失败"
|
||||||
|
|
||||||
DETECT_JPEAK_PROCESSING_DATA: str = "正在处理数据"
|
|
||||||
DETECT_JPEAK_PROCESS_FINISHED: str = "处理完成"
|
|
||||||
DETECT_JPEAK_PROCESS_FAILURE: str = "处理失败"
|
|
||||||
|
|
||||||
DETECT_JPEAK_PREDICTING_PEAK: str = "正在预测峰值"
|
DETECT_JPEAK_PREDICTING_PEAK: str = "正在预测峰值"
|
||||||
DETECT_JPEAK_PREDICT_FINISHED: str = "预测完成"
|
DETECT_JPEAK_PREDICT_FINISHED: str = "预测完成"
|
||||||
@ -450,6 +468,35 @@ class Constants:
|
|||||||
background-color: #00ff00; /* 鼠标悬停时的背景颜色 */
|
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 = "跳转到事件"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -70,15 +70,10 @@ class Ui_MainWindow_precisely_align_input_setting(object):
|
|||||||
self.groupBox_file_path_save.setObjectName(u"groupBox_file_path_save")
|
self.groupBox_file_path_save.setObjectName(u"groupBox_file_path_save")
|
||||||
self.verticalLayout_4 = QVBoxLayout(self.groupBox_file_path_save)
|
self.verticalLayout_4 = QVBoxLayout(self.groupBox_file_path_save)
|
||||||
self.verticalLayout_4.setObjectName(u"verticalLayout_4")
|
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_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.setObjectName(u"plainTextEdit_file_path_save_AlignInfo")
|
||||||
|
|
||||||
self.verticalLayout_4.addWidget(self.plainTextEdit_file_path_save_BCG_AlignInfo)
|
self.verticalLayout_4.addWidget(self.plainTextEdit_file_path_save_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.gridLayout_2.addWidget(self.groupBox_file_path_save, 5, 0, 1, 2)
|
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(1, 3)
|
||||||
self.gridLayout_2.setRowStretch(3, 3)
|
self.gridLayout_2.setRowStretch(3, 3)
|
||||||
self.gridLayout_2.setRowStretch(4, 2)
|
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_2.setRowStretch(6, 4)
|
||||||
|
|
||||||
self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 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_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.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.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_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.groupBox_file_path_input_orgBcg.setTitle(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u539f\u59cborgBcg\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.setPlainText("")
|
||||||
self.plainTextEdit_file_path_input_orgBcg.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u6587\u4ef6\u8def\u5f84", None))
|
self.plainTextEdit_file_path_input_orgBcg.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u6587\u4ef6\u8def\u5f84", None))
|
||||||
|
|||||||
@ -37,7 +37,7 @@
|
|||||||
<property name="title">
|
<property name="title">
|
||||||
<string>文件路径</string>
|
<string>文件路径</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2" rowstretch="3,3,0,3,2,4,4">
|
<layout class="QGridLayout" name="gridLayout_2" rowstretch="3,3,0,3,2,2,4">
|
||||||
<item row="6" column="0">
|
<item row="6" column="0">
|
||||||
<widget class="QGroupBox" name="groupBox_file_path_save_2">
|
<widget class="QGroupBox" name="groupBox_file_path_save_2">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
@ -75,14 +75,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPlainTextEdit" name="plainTextEdit_file_path_save_BCG_AlignInfo">
|
<widget class="QPlainTextEdit" name="plainTextEdit_file_path_save_AlignInfo">
|
||||||
<property name="placeholderText">
|
|
||||||
<string>保存路径</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPlainTextEdit" name="plainTextEdit_file_path_save_ECG_AlignInfo">
|
|
||||||
<property name="placeholderText">
|
<property name="placeholderText">
|
||||||
<string>保存路径</string>
|
<string>保存路径</string>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
Reference in New Issue
Block a user