修复事件位于末尾时,BCG长度不够的情况

This commit is contained in:
marques 2022-05-20 11:17:16 +08:00
parent cc74c0aa44
commit 563e4fab8f
2 changed files with 20 additions and 9 deletions

View File

@ -67,7 +67,9 @@ if __name__ == '__main__':
qualityRelabel = Quality_Relabel(all_path=all_path, sampNo=opt.sampNo, frequency=frequency,
bcg_frequency=bcg_frequency,
focus_event_list=focus_event_list)
extend_second=opt.front_add_second + opt.back_add_second,
focus_event_list=focus_event_list
)
qualityRelabel.show_all_event(start_bcg_index=opt.start_bcg_index - 1,
front_add_second=opt.front_add_second,

View File

@ -73,6 +73,7 @@ class Quality_Relabel:
# assert len(color_cycle) == len(base_event) + 1, "基础事件数量与颜色数量不一致"
def __init__(self, all_path: List, sampNo: int, frequency: int = 100, bcg_frequency: int = 1000,
extend_second: int = 0,
channel_list: List[str] = ['Effort Tho', 'Effort Abd', 'SpO2', 'Flow Patient', 'Flow Patient'],
focus_event_list: List[str] = ["Obstructive apnea"]):
"""
@ -95,6 +96,7 @@ class Quality_Relabel:
self.focus_event_list = focus_event_list
self.frequency = frequency
self.bcg_frequency = bcg_frequency
self.extend_second = extend_second
self.ecg_start_time = None
@ -116,7 +118,7 @@ class Quality_Relabel:
self.signal_select = {}
self.check_channel()
self.read_data(frequency, bcg_frequency)
self.read_data(frequency, bcg_frequency, extend_second)
self.read_event()
self.read_artifact_label()
@ -148,8 +150,10 @@ class Quality_Relabel:
self.ecg_start_time = file.getStartdatetime()
# 根据PSG记录长度生成事件表
self.ecg_event_label = np.zeros(file.getFileDuration() * self.frequency)
self.spo2_event_label = np.zeros(file.getFileDuration() * self.frequency)
self.ecg_event_label = np.zeros(
file.getFileDuration() * self.frequency + self.extend_second * self.frequency)
self.spo2_event_label = np.zeros(
file.getFileDuration() * self.frequency + self.extend_second * self.frequency)
# 打印PSG信息
file.file_info_long()
@ -191,10 +195,15 @@ class Quality_Relabel:
signal2 = signal2[::int(bcg_frequency / frequency)]
# 根据心晓事件长度生成事件记录
self.bcg_event_label = np.zeros(len(signal))
self.bcg_event_label = np.zeros(len(signal) + self.extend_second * self.frequency)
self.signal_select['orgdata'] = signal1
self.signal_select['0.7lowpass_resp'] = signal2
for signal_key in self.signal_select.keys():
self.signal_select[signal_key] = np.append(self.signal_select[signal_key],
self.signal_select[signal_key].mean().astype(int).repeat(
self.extend_second * self.frequency))
def read_event(self):
bcg_label_path = self.BCG_Label_Path / f"export{self.sampNo}_all.csv"
ecg_label_path = self.PSG_Label_Path / f"export{self.sampNo}.csv"
@ -271,7 +280,7 @@ class Quality_Relabel:
artifact_label_path = self.Artifact_Label_Path / f"Artifact_{self.sampNo}.txt"
artifact_label = pd.read_csv(artifact_label_path, header=None).to_numpy().reshape(-1, 4)
self.artifact_event_label = np.zeros(len(self.bcg_event_label))
self.artifact_event_label = np.zeros(len(self.bcg_event_label) + self.extend_second * self.frequency)
for i, artifact_type, SP, EP in artifact_label:
SP = (int(SP) + offset_length) // (1000 // self.frequency)