修复事件位于末尾时,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)
@ -348,7 +357,7 @@ class Quality_Relabel:
# 绘制 Flow2
plt.subplot(gs[1])
self.plt_channel(plt_=plt, SP=ecg_SP, EP=ecg_EP, channel="Flow P",
title=f"PSG sampNo:{self.sampNo} Index:{ecg_index+1}/{len(self.ecg_event_label_filtered_df)} "
title=f"PSG sampNo:{self.sampNo} Index:{ecg_index + 1}/{len(self.ecg_event_label_filtered_df)} "
f"Epoch:{one_ecg_data['Epoch']} Duration:{ecg_duration}")
plt.subplot(gs[2])
@ -367,10 +376,10 @@ class Quality_Relabel:
plt.subplot(gs[6])
self.plt_channel(plt_=plt, SP=bcg_SP, EP=bcg_EP, channel="0.7lowpass_resp",
event_code=[6, 7, 8, 9, 10 ,1, 2, 3, 4],
event_code=[6, 7, 8, 9, 10, 1, 2, 3, 4],
event_show_under=False,
ax_bottom=True,
title=f"ÐÄÏþ sampNo:{self.sampNo} Index:{bcg_index+1}/{len(self.bcg_event_label_filtered_df)} "
title=f"ÐÄÏþ sampNo:{self.sampNo} Index:{bcg_index + 1}/{len(self.bcg_event_label_filtered_df)} "
f"Epoch:{one_bcg_data['Epoch']} Duration:{bcg_duration}",
)