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" # 目前用到这个编码的地方: # 里的保存和读取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" # 数据粗同步 # 预处理 PREPROCESS_CONFIG_FILE_PATH: str = "./config/Config_preprocess.yaml" PREPROCESS_CONFIG_NEW_CONTENT = { "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 = "ECG 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 = { "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 = { "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 = { "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_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 = { "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_ACTION_GET_RANGE_SHORTCUT_KEY: str = "Z" PRECISELY_ALIGN_SAVE_CHUNK_SIZE: int = 1000000 PRECISELY_ALIGN_SAVE_PEAK_CHUNK_SIZE: int = 100 # 冗余数据切割和标签映射 CUT_PSG_CHANNEL_LIST: list = ["Effort Abd_Raw_", "Effort Tho_Raw_", "Flow Patient_Raw_", "Snore_Raw_", "SpO2_Raw_"] CUT_PST_LABEL_LIST: list = ["5_class_Raw_", "SA Label_Raw"] CUT_PST_STARTTIME: list = ["StartTime_Raw"] # 体动标注 # TODO:弃用 # 通用 VALIDATOR_INTEGER = QIntValidator(-2**31, 2**31 - 1) VALIDATOR_DOUBLE = QDoubleValidator(-1e100, 1e100, 10) # 数据粗同步 APPROXIMATELY_ALIGN_INPUT_ORGBCG_FILENAME: str = "orgBcg_Raw_" APPROXIMATELY_ALIGN_INPUT_PSG_FILENAME: str = "A" APPROXIMATELY_ALIGN_SAVE_FILENAME: str = "Approximately_Align_Info" APPROXIMATELY_ALIGN_INPUT_ORGBCG_DEFAULT_FS: int = 1000 APPROXIMATELY_ALIGN_INPUT_PSG_DEFAULT_FS: int = 100 APPROXIMATELY_ALIGN_THO_CUSTOM_CHANNEL_DEFAULT: int = 3 APPROXIMATELY_ALIGN_ABD_CUSTOM_CHANNE_DEFAULT: int = 4 APPROXIMATELY_ALIGN_BUTTERORDER_DEFAULT: int = 4 APPROXIMATELY_ALIGN_BUTTERLOWPASSFREQ_CHANNE_DEFAULT: float = 0.01 APPROXIMATELY_ALIGN_BUTTERHIGHPASSFREQ_DEFAULT: float = 0.70 APPROXIMATELY_ALIGN_APPLYFREQ_DEFAULT: float = 5 # 体动打标 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")