294 lines
10 KiB
Python
294 lines
10 KiB
Python
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"
|
||
|
||
# 数据粗同步
|
||
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,
|
||
"Filter": {
|
||
"BandPassOrder": 4,
|
||
"BandPassLow": 0.01,
|
||
"BandPassHigh": 0.7
|
||
},
|
||
"Multiple_Factor":100
|
||
}
|
||
APPROXIMATELY_ALIGN_INPUT_ORGBCG_FILENAME: str = "orgBcg_Raw_"
|
||
APPROXIMATELY_ALIGN_INPUT_THO_FILENAME: str = "Effort Tho_Raw_"
|
||
APPROXIMATELY_ALIGN_INPUT_ABD_FILENAME: str = "Effort Abd_Raw_"
|
||
APPROXIMATELY_ALIGN_SAVE_FILENAME: str = "Approximately_Align_Info"
|
||
|
||
# 预处理
|
||
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_INPUT_BCG_FILENAME: str = "orgBcg_Raw_"
|
||
PREPROCESS_INPUT_ECG_FILENAME: str = "orgEcg II_Raw_"
|
||
PREPROCESS_SAVE_BCG_FILENAME: str = "BCG_Raw_"
|
||
PREPROCESS_SAVE_ECG_FILENAME: str = "ECG_Raw_"
|
||
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_INPUT_BCG_FILENAME: str = "BCG_Raw_"
|
||
DETECT_JPEAK_SAVE_FILENAME: str = "JPeak_revise"
|
||
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_INPUT_ECG_FILENAME: str = "ECG_Raw_"
|
||
DETECT_RPEAK_SAVE_FILENAME: str = "Rpeak_final"
|
||
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_INPUT_BCG_FILENAME: str = "BCG_Raw_"
|
||
LABEL_CHECK_INPUT_JPEAK_FILENAME: str = "JPeak_revise"
|
||
LABEL_CHECK_SAVE_JPEAK_FILENAME: str = "JPeak_revise_corrected"
|
||
LABEL_CHECK_INPUT_ECG_FILENAME: str = "ECG_Raw_"
|
||
LABEL_CHECK_INPUT_RPEAK_FILENAME: str = "Rpeak_final"
|
||
LABEL_CHECK_SAVE_RPEAK_FILENAME: str = "Rpeak_final_corrected"
|
||
LABEL_CHECK_APPROXIMATELY_ALIGNINFO_FILENAME: str = "Approximately_Align_Info"
|
||
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": {
|
||
"ECGFreq": 1000
|
||
}
|
||
}
|
||
PRECISELY_ALIGN_INPUT_ORGBCG_FILENAME: str = "orgBcg_Raw_"
|
||
PRECISELY_ALIGN_INPUT_BCG_FILENAME: str = "BCG_Raw_"
|
||
PRECISELY_ALIGN_INPUT_JPEAK_FILENAME: str = "JPeak_revise_corrected"
|
||
PRECISELY_ALIGN_SAVE_BCG_ALIGNINFO_FILENAME: str = "Align_info"
|
||
PRECISELY_ALIGN_INPUT_ECG_FILENAME: str = "ECG_Raw_"
|
||
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_"
|
||
PRECISELY_ALIGN_SAVE_JPEAK_FILENAME: str = "JPeak_Sync"
|
||
PRECISELY_ALIGN_SAVE_RPEAK_FILENAME: str = "Rpeak_Sync"
|
||
PRECISELY_ALIGN_APPROXIMATELY_ALIGNINFO_FILENAME: str = "Approximately_Align_Info"
|
||
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": "Effort Tho_Raw_",
|
||
"Effort Abd": "Effort Abd_Raw_",
|
||
"Flow Patient": "Flow Patient_Raw_",
|
||
"Snore": "Snore_Raw_",
|
||
"SpO2": "SpO2_Raw_",
|
||
"5_class": "5_class_Raw_"
|
||
},
|
||
"LabelInput": {
|
||
"SA Label": "SA Label_Raw"
|
||
},
|
||
"StartTime": "StartTime_Raw",
|
||
"ChannelSave": {
|
||
"Effort Tho": "Effort Tho_Sync_",
|
||
"Effort Abd": "Effort Abd_Sync_",
|
||
"Flow Patient": "Flow Patient_Sync_",
|
||
"Snore": "Snore_Sync_",
|
||
"SpO2": "SpO2_Sync_",
|
||
"5_class": "5_class_Sync_"
|
||
},
|
||
"LabelSave": {
|
||
"SA Label": "SA Label_Sync"
|
||
},
|
||
"EndWith": {
|
||
"Effort Tho": ENDSWITH_TXT,
|
||
"Effort Abd": 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_SAVE_ECG_ALIGNINFO_FILENAME: str = "Align_info"
|
||
CUT_PSG_SALABEL_EVENT: list = ["Hypopnea", "Central apnea", "Obstructive apnea", "Mixed apnea"]
|
||
|
||
|
||
# 体动标注
|
||
|
||
# TODO:弃用
|
||
# 通用
|
||
VALIDATOR_INTEGER = QIntValidator(-2**31, 2**31 - 1)
|
||
VALIDATOR_DOUBLE = QDoubleValidator(-1e100, 1e100, 10)
|
||
|
||
# 体动打标
|
||
ARTIFACT_LABEL_INPUT_BCG_FILENAME: str = "BCG_sync_"
|
||
ARTIFACT_LABEL_INPUT_XINXIAO_FILENAME: str = "orgBcg_sync_"
|
||
ARTIFACT_LABEL_SAVE_TXT_ARTIFACT_FILENAME: str = "Artifact_a"
|
||
ARTIFACT_LABEL_SAVE_TXT_ARTIFACT_AMOUNT_FILENAME: str = "Artifact_b"
|
||
ARTIFACT_LABEL_SAVE_CSV_ARTIFACT_FILENAME: str = "Artifact_c"
|
||
|
||
ARTIFACT_LABEL_INPUT_XINXIAO_DEFAULT_FS: int = 1000
|
||
ARTIFACT_LABEL_INPUT_BCG_DEFAULT_FS: int = 1000
|
||
|
||
ARTIFACT_LABEL_MOVELENGTH_DEFAULT: int = 15000
|
||
ARTIFACT_LABEL_MAXRANGE_DEFAULT: int = 60000
|
||
ARTIFACT_LABEL_MOVESPEED_DEFAULT: int = 1000
|
||
|
||
ARTIFACT_LABEL_LABEL_TRANSPARENCY: float = 0.3
|
||
|
||
ARTIFACT_LABEL_ACTION_LABEL_ARTIFACT_SHORTCUT_KEY: str = "Z"
|
||
|
||
|
||
# 质量打标
|
||
BCG_QUALITY_LABEL_INPUT_BCG_FILENAME: str = "BCG_sync_"
|
||
BCG_QUALITY_LABEL_INPUT_ARTIFACT_FILENAME: str = "Artifact_a"
|
||
BCG_QUALITY_LABEL_SAVE_FILENAME: str = "SQ_label_"
|
||
|
||
BCG_QUALITY_LABEL_INPUT_DEFAULT_FS: int = 1000
|
||
|
||
BCG_QUALITY_LABEL_SAVE_MODE_10S: str = "10s"
|
||
BCG_QUALITY_LABEL_SAVE_MODE_30S: str = "30s"
|
||
|
||
BCG_QUALITY_LABEL_MODE_10S_LENGTH = 10 * BCG_QUALITY_LABEL_INPUT_DEFAULT_FS
|
||
BCG_QUALITY_LABEL_MODE_30S_LENGTH = 30 * BCG_QUALITY_LABEL_INPUT_DEFAULT_FS
|
||
|
||
|
||
# 呼吸可用性及间期标注
|
||
RESP_QUALITY_LABEL_INPUT_XINXIAO_FILENAME: str = "orgBcg_sync_"
|
||
RESP_QUALITY_LABEL_INPUT_THO_FILENAME: str = "Effort_Tho_sync_"
|
||
RESP_QUALITY_LABEL_INPUT_ARTIFACT_FILENAME: str = "Artifact_a"
|
||
RESP_QUALITY_LABEL_SAVE_RESP_QUALITY_LABNEL_FILENAME: str = "Resp_quality_label"
|
||
RESP_QUALITY_LABEL_SAVE_THO_PEAK_FILENAME: str = "Tho_peak"
|
||
|
||
RESP_QUALITY_LABEL_INPUT_XINXIAO_DEFAULT_FS: int = 1000
|
||
RESP_QUALITY_LABEL_INPUT_THO_DEFAULT_FS: int = 200
|
||
|
||
RESP_QUALITY_LABEL_PARTS_TIME_SEC: int = 30
|
||
RESP_QUALITY_LABEL_PREPROCESS_FC: int = 1
|
||
|
||
RESP_QUALITY_LABEL_THRESHOLD1_DEFAULT: float = 0.65
|
||
RESP_QUALITY_LABEL_THRESHOLD2_DEFAULT: float = 0.8
|
||
RESP_QUALITY_LABEL_FINDPEAKS_MIN_INTERVAL_DEFAULT: int = 300
|
||
RESP_QUALITY_LABEL_FINDPEAKS_MIN_HEIGHT_DEFAULT: float = 0.1
|
||
RESP_QUALITY_LABEL_CUSTOM_LOW_DEFAULT: float = 0.1
|
||
RESP_QUALITY_LABEL_CUSTOM_HIGH_DEFAULT: float = 1
|
||
|
||
RESP_QUALITY_LABEL_LABEL_TRANSPARENCY: float = 0.2
|
||
|
||
RESP_QUALITY_LABEL_ACTION_LABEL_MULTIPLE_SHORTCUT_KEY: str = "Z"
|
||
|
||
|
||
# 睡眠呼吸暂停事件打标
|
||
|
||
|
||
# 禁止实例化
|
||
def __new__(cls):
|
||
raise TypeError("Constants class cannot be instantiated")
|
||
|
||
|
||
# 禁止修改常量
|
||
@classmethod
|
||
def __setattr__(cls, key, value):
|
||
raise AttributeError("Cannot modify constants") |