Files
Signal_Label_Reborn/func/utils/ConfigParams.py
Yorusora ee4df5ee93 1、修复了一处文件命名错误
2、添加了一条TODO LIST
2025-05-28 12:59:06 +08:00

342 lines
11 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from PySide6.QtGui import QIntValidator, QDoubleValidator
from matplotlib.ticker import FuncFormatter
class ConfigParams:
# 公共
PUBLIC_CONFIG_FILE_PATH: str = "./config/Config_public.yaml"
PUBLIC_PATH_ORGBCG_TEXT: str = "OrgBCG_Text"
PUBLIC_PATH_PSG_TEXT: str = "PSG_Text"
PUBLIC_PATH_ORGBCG_ALIGNED: str = "OrgBCG_Aligned"
PUBLIC_PATH_PSG_ALIGNED: str = "PSG_Aligned"
PUBLIC_PATH_LABEL: str = "Label"
PUBLIC_CONFIG_NEW_CONTENT = {
"Path": {
"Root": ""
}
}
UTF8_ENCODING: str = "utf-8"
# 目前用到这个编码的地方:
# <BCG的质量评估打标>里的保存和读取csv文件的地方注意的是读取原始数据时依然使用UTF-8
GBK_ENCODING: str = "gbk"
ENDSWITH_TXT: str = ".txt"
ENDSWITH_CSV: str = ".csv"
ENDSWITH_EDF: str = ".edf"
FORMATTER = FuncFormatter(lambda x, p: f"{x:.0f}")
ACTION_PAN_SHORTCUT_KEY: str = "X"
ACTION_ZOOM_SHORTCUT_KEY: str = "C"
FONT: str = "Microsoft YaHei UI"
VALIDATOR_INTEGER = QIntValidator(-2**31, 2**31 - 1)
VALIDATOR_DOUBLE = QDoubleValidator(-1e100, 1e100, 10)
# 文件命名
# Folder: OrgBCG_Text
ORGBCG_RAW: str = "OrgBCG_Raw_"
BCG_FILTER: str = "BCG_Filter_"
JPEAK_REVISE: str = "Jpeak_revise_"
JPEAK_REVISE_CORRECTED: str = "Jpeak_revise_corrected_"
# Folder: PSG_Text
ECG_RAW: str = "ECG II_Raw_"
THO_RAW: str = "Effort Tho_Raw_"
ABD_RAW: str = "Effort Abd_Raw_"
FLOWT_RAW: str = "Flow T_Raw_"
FLOWP_RAW: str = "Flow P_Raw_"
SNORE_RAW: str = "Snore_Raw_"
SPO2_RAW: str = "SpO2_Raw_"
FIVE_CLASS_RAW: str = "5_class_Raw_"
STARTTIME_RAW: str = "StartTime_Raw"
SA_LABEL_RAW: str = "SA Label_Raw"
ECG_FILTER: str = "ECG_Filter_"
RPEAK_FINAL: str = "Rpeak_final_"
RPEAK_FINAL_CORRECTED: str = "Rpeak_final_corrected_"
# Folder: OrgBCG_Aligned
ORGBCG_SYNC: str = "OrgBCG_Sync_"
BCG_SYNC: str = "BCG_Sync_"
# Folder: PSG_Aligned
ECG_SYNC: str = "ECG_Sync_"
THO_SYNC: str = "Effort Tho_Sync_"
ABD_SYNC: str = "Effort Abd_Sync_"
FLOWT_SYNC: str = "Flow T_Sync_"
FLOWP_SYNC: str = "Flow P_Sync_"
SNORE_SYNC: str = "Snore_Sync_"
SPO2_SYNC: str = "SpO2_Sync_"
FIVE_CLASS_SYNC: str = "5_class_Sync_"
SA_LABEL_SYNC: str = "SA Label_Sync"
JPEAK_SYNC: str = "Jpeak_Sync_"
RPEAK_SYNC: str = "Rpeak_Sync_"
# Folder: Label
APPROXIMATELY_ALIGN_INFO: str = "Approximately_Align_Info"
PRECISELY_ALIGN_INFO: str = "Precisely_Align_Info"
ARTIFACT_A: str = "Artifact_a_"
ARTIFACT_B: str = "Artifact_b_"
ARTIFACT_C: str = "Artifact_c_"
SA_LABEL_CORRECTED: str = "SA Label_corrected"
SA_LABEL_ADD: str = "SA Label_add"
RESP_QUALITY_LABEL: str = "Resp_quality_label"
THO_PEAK: str = "Tho_peak_"
SQ_LABEL_10S: str = "SQ_label_10s"
SQ_LABEL_30S: str = "SQ_label_30s"
# 数据粗同步
APPROXIMATELY_ALIGN_CONFIG_FILE_PATH: str = "./config/Config_approximately_align.yaml"
APPROXIMATELY_ALIGN_CONFIG_NEW_CONTENT: dict = {
"InputConfig": {
"orgBcgFreq": 1000,
"ThoFreq": 100,
"AbdFreq": 100
},
"ApplyFrequency": 5,
"TempFrequency": 100,
"Filter": {
"BandPassOrder": 4,
"BandPassLow": 0.01,
"BandPassHigh": 0.7
},
"Multiple_Factor":100,
"CorrByEpoch":
{
"window_epoch": 6
}
}
# 预处理
PREPROCESS_CONFIG_FILE_PATH: str = "./config/Config_preprocess.yaml"
PREPROCESS_CONFIG_NEW_CONTENT: dict = {
"InputConfig": {
"Freq": 1000
},
"OutputConfig": {
"Freq": 1000
},
"Filter": {
"BCGBandPassOrder": 4,
"BCGBandPassLow": 2,
"BCGBandPassHigh": 10,
"ECGBandPassOrder": 3,
"ECGBandPassLow": 1,
"ECGBandPassHigh": 25
}
}
PREPROCESS_SAVE_CHUNK_SIZE: int = 1000000
# BCG的J峰算法定位
DETECT_JPEAK_CONFIG_FILE_PATH: str = "./config/Config_detect_Jpeak.yaml"
DETECT_JPEAK_CONFIG_NEW_CONTENT: dict = {
"InputConfig": {
"Freq": 1000
},
"Filter": {
"BandPassLow": 2,
"BandPassHigh": 10
},
"ModelFolderPath": "./func/detect_Jpeak_model",
"PeaksValue": 100,
"AmpValue": 5,
"IntervalLow": 50,
"IntervalHigh": 140,
"UseCPU": False,
"DetectMethod": ""
}
DETECT_JPEAK_SAVE_CHUNK_SIZE: int = 100
# ECG的R峰算法定位
DETECT_RPEAK_CONFIG_FILE_PATH: str = "./config/Config_detect_Rpeak.yaml"
DETECT_RPEAK_CONFIG_NEW_CONTENT: dict = {
"InputConfig": {
"Freq": 1000
},
"Filter": {
"BandPassLow": 2,
"BandPassHigh": 15
},
"PeaksValue": 200,
"DetectMethod": ""
}
DETECT_RPEAK_SAVE_CHUNK_SIZE: int = 100
# 人工纠正
LABEL_CHECK_CONFIG_FILE_PATH: str = "./config/Config_label_check.yaml"
LABEL_CHECK_CONFIG_NEW_CONTENT: dict = {
"InputConfig": {
"Freq": 1000
},
"Filter": {
"BCGBandPassOrder": 2,
"BCGBandPassLow": 2,
"BCGBandPassHigh": 10,
"ECGBandPassOrder": 2,
"ECGBandPassLow": 2,
"ECGBandPassHigh": 15
},
"FindPeaks" : {
"MinInterval": 1000,
"MinHeight": 0.5
},
"CustomAutoplayArgs": {
"MoveLength": 15000,
"MaxRange": 60000,
"MoveSpeed": 1000
}
}
LABEL_CHECK_SAVE_CHUNK_SIZE: int = 100
LABEL_CHECK_LABEL_TRANSPARENCY: float = 0.2
LABEL_CHECK_ACTION_LABEL_MULTIPLE_SHORTCUT_KEY: str = "Z"
# 数据精同步
PRECISELY_ALIGN_CONFIG_FILE_PATH: str = "./config/Config_precisely_align.yaml"
PRECISELY_ALIGN_CONFIG_NEW_CONTENT: dict = {
"InputConfig": {
"orgBcgFreq": 1000,
"BCGFreq": 1000,
"ECGFreq": 1000,
"UseFreq": 1000
}
}
PRECISELY_ALIGN_ACTION_GET_RANGE_SHORTCUT_KEY: str = "Z"
PRECISELY_ALIGN_SAVE_CHUNK_SIZE: int = 1000000
PRECISELY_ALIGN_SAVE_PEAK_CHUNK_SIZE: int = 100
PRECISELY_ALIGN_LABEL_TRANSPARENCY: float = 0.2
# 冗余数据切割和标签映射
CUT_PSG_CONFIG_FILE_PATH: str = "./config/Config_cut_PSG.yaml"
CUT_PSG_CONFIG_NEW_CONTENT: dict = {
"ECGFreq": 1000,
"ChannelInput": {
"Effort Tho": THO_RAW,
"Effort Abd": ABD_RAW,
"Flow T": FLOWT_RAW,
"Flow P": FLOWP_RAW,
"Snore": SNORE_RAW,
"SpO2": SPO2_RAW,
"5_class": FIVE_CLASS_RAW
},
"LabelInput": {
"SA Label": SA_LABEL_RAW
},
"StartTime": STARTTIME_RAW,
"ChannelSave": {
"Effort Tho": THO_SYNC,
"Effort Abd": ABD_SYNC,
"Flow T": FLOWT_SYNC,
"Flow P": FLOWP_SYNC,
"Snore": SNORE_SYNC,
"SpO2": SPO2_SYNC,
"5_class": FIVE_CLASS_SYNC
},
"LabelSave": {
"SA Label": SA_LABEL_SYNC
},
"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,
"5_class": ENDSWITH_TXT,
"SA Label": ENDSWITH_CSV,
"StartTime": ENDSWITH_TXT
},
}
CUT_PSG_SALABEL_EVENT: list = ["Hypopnea", "Central apnea", "Obstructive apnea", "Mixed apnea"]
# 体动标注
ARTIFACT_LABEL_CONFIG_FILE_PATH: str = "./config/Config_artifact_label.yaml"
ARTIFACT_LABEL_CONFIG_NEW_CONTENT: dict = {
"InputConfig": {
"orgBcgFreq": 1000,
"BCGFreq": 1000,
"UseFreq": 1000
},
"CustomAutoplayArgs": {
"MoveLength": 15000,
"MaxRange": 60000,
"MoveSpeed": 1000
}
}
ARTIFACT_LABEL_LABEL_TRANSPARENCY: float = 0.3
ARTIFACT_LABEL_ACTION_LABEL_ARTIFACT_SHORTCUT_KEY: str = "Z"
# BCG的质量标注
BCG_QUALITY_LABEL_CONFIG_FILE_PATH: str = "./config/Config_bcg_quality_label.yaml"
BCG_QUALITY_LABEL_CONFIG_NEW_CONTENT: dict = {
"InputConfig": {
"BCGFreq": 1000,
"UseFreq": 1000
}
}
BCG_QUALITY_LABEL_BTN_PREV_SHORTCUT_KEY: str = "A"
BCG_QUALITY_LABEL_BTN_NEXT_SHORTCUT_KEY: str = "D"
# 呼吸可用性及间期标注
RESP_QUALITY_LABEL_CONFIG_FILE_PATH: str = "./config/Config_resp_quality_label.yaml"
RESP_QUALITY_LABEL_CONFIG_NEW_CONTENT: dict = {
"InputConfig": {
"OrgBCGFreq": 1000,
"ThoFreq": 100,
"OrgBCGUseFreq": 1000,
"ThoUseFreq": 100
},
"Threshold": {
"Low": 0.65,
"High": 0.8
},
"FindPeaks" : {
"MinInterval": 300,
"MinHeight": 0.1
},
"Filter": {
"BandPassLow": 0.1,
"BandPassHigh": 1
}
}
RESP_QUALITY_LABEL_PREPROCESS_FC: int = 1
RESP_QUALITY_LABEL_PARTS_TIME_SEC: int = 30
RESP_QUALITY_LABEL_LABEL_TRANSPARENCY: float = 0.2
RESP_QUALITY_LABEL_ACTION_LABEL_MULTIPLE_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": 10,
"FlowPFreq": 100,
"SpO2Freq": 1,
"PlotFreq": 100
},
"AddSecond": {
"Front": 60,
"Back": 60
}
}
SA_LABEL_TRANSPARENCY: float = 0.05
SA_LABEL_BTN_PREV_SHORTCUT_KEY: str = "A"
SA_LABEL_BTN_NEXT_SHORTCUT_KEY: str = "D"
SA_LABEL_BTN_CONFIRMLABEL_SHORTCUT_KEY: str = "S"
SA_LABEL_BTN_QUICK_REMARK_WAITINGFORTALK_SHORTCUT_KEY: str = "J"
SA_LABEL_RADIOBUTTON_OSA_SHORTCUT_KEY: str = "1"
SA_LABEL_RADIOBUTTON_CSA_SHORTCUT_KEY: str = "2"
SA_LABEL_RADIOBUTTON_MSA_SHORTCUT_KEY: str = "3"
SA_LABEL_RADIOBUTTON_HPY_SHORTCUT_KEY: str = "4"
SA_LABEL_RADIOBUTTON_1_CLASS_SHORTCUT_KEY: str = "U"
SA_LABEL_RADIOBUTTON_2_CLASS_SHORTCUT_KEY: str = "I"
SA_LABEL_RADIOBUTTON_3_CLASS_SHORTCUT_KEY: str = "O"
# 禁止实例化
def __new__(cls):
raise TypeError("Constants class cannot be instantiated")
# 禁止修改常量
@classmethod
def __setattr__(cls, key, value):
raise AttributeError("Cannot modify constants")