# Quality_Relabel

## 文件目录
```bash
Quality_Relabel                     主目录  
├── Data                            数据  
│   ├── Artifact_label              体动标签
│   │   └──20220421Artifact_offset_value.xlsx  体动信号位置相对于心晓信号位置偏移量
│   ├── BCG                         心晓信号
│   ├── BCG_label                   心晓事件标签
│   ├── PSG                         PSG信号
│   └── PSG_label                   PSG事件标签
├── history                         存放历史记录
│   └── history.log                 历史记录
├── utils                           基本库
│   ├── Preprocessing.py            BCG数据处理工具库
│   └── Prepare_Data.py             数据集加载与处理    
├── Main_Quality_Relabel.py         启动入口
└── README.md                       项目说明

```



## 数据来源与格式

### PSG数据

直接从Alice中导出的EDF文件,包括如下通道

| Signal Name | Frequency | Signal Name | Frequency |
| :---------: | :-------: | :---------: | :-------: |
|  EEG C3-A2  |    200    |   Flow T    |    200    |
|  EEG C4-A1  |    100    |   Flow P    |    100    |
|  EEG F3-A2  |    200    | Effort Tho  |    200    |
|  EEG F3-A1  |    200    | Effort Abd  |    10     |
|  EEG O3-A2  |    200    |    SpO2     |     1     |
|  EEG O4-A1  |    200    |     RR      |    10     |
|  EEG A1-A2  |    200    |    ECG I    |    200    |
|  EOG Left   |    200    |   ECG II    |    200    |
|  EOG Right  |    100    |  Leg LEG1   |    200    |
|  EMG Chin   |    200    |  leg LEG2   |    200    |
|    Snore    |    200    |    Body     |     1     |
|     Imp     |    200    |    Pleth    |    100    |
|    Pluse    |     1     |             |           |



### 心晓数据

由new_org_1000hz.txt, 通过读取后保存成numpy的npy文件,以加速读取。此份数据为相对于PSG信号对齐,进行过补0与裁剪信号

### PSG标签

从Alice中导出包含所有事件的标签

<img src="graph/PSG_Label_example.png" style="zoom: 80%;" />

### 心晓标签

打标后从Alice中导出,并重新计算标签的epoch、start、end

其中CSA标签为质量打标后的第三次修正的位置

<img src="graph/BCG_Label_example.png" style="zoom: 80%;" />

### 体动标签

每个标签由四行构成, 其中体动位置相对于未经对齐的心晓信号,故增加20220421Artifact_offset_value.xlsx 用于对齐

第一行为第几个事件, 第二行为事件标签编码, 第三行为事件起始点, 第四行为事件终止点

<img src="graph/artifact_Label_example.png" style="zoom: 100%;" />



## 上色规则

| 事件代码 |      事件      | 颜色 |
| :------: | :------------: | :--: |
|    0     |      背景      | 黑色 |
|    1     |     低通气     | 粉色 |
|    2     | 中枢性呼吸暂停 | 蓝色 |
|    3     | 阻塞型呼吸暂停 | 红色 |
|    4     | 混合型呼吸暂停 | 灰色 |
|    5     | 血氧饱和度下降 | 绿色 |
|    6     |     大体动     | 橙色 |
|    7     |     小体动     | 橙色 |
|    8     |     深呼吸     | 橙色 |
|    9     |    脉冲体动    | 橙色 |
|    10    |    无效片段    | 橙色 |



## 依赖库

- pyedflib

- numpy

- pandas

- matplotlib

- tqdm

- pywt

- scipy

如果在windows服务器106上运行直接默认Anaconda环境就已满足



## 使用方法

### 1. 从PyCharm中运行

首先取消在pycharm的窗口内显示图片

File --> Settings --> Tools --> Python Scientific -->  Show plots in tools window **取消勾选**



打开Main_Quality_Relabel.py

修改

focus_event_list 显示事件

sampNo 样本编号

start_bcg_index 从第几个事件开始显示

<img src="graph/pycharm_example.png" style="zoom: 80%;" />



点击右上角红色方块停止程序

<img src="graph/pycharm_close.png" style="zoom: 100%;" />



### 2. 从命令行运行

最新的代码支持从命令行中传入参数,无需打开pycharm

在代码文件夹的路径栏输入cmd后回车,进入到命令提示符

<img src="graph/cmd_example.png" style="zoom: 100%;" />



再在命令提示符中运行python 程序名 参数 即可运行

<img src="graph/cmd_example2.png" style="zoom: 100%;" />

#### 支持参数

```bash
usage: Main_Quality_Relabel.py [-h] [-n [SAMPNO]]
                               [-e [{OSA,CSA,MSA,HPY} [{OSA,CSA,MSA,HPY} ...]]]
                               [-i [START_BCG_INDEX]] [-f [FRONT_ADD_SECOND]]
                               [-b [BACK_ADD_SECOND]]

optional arguments:
  -h, --help            show this help message and exit
  -n [SAMPNO], --sampNo [SAMPNO]
                        样本编号
  -e [{OSA,CSA,MSA,HPY} [{OSA,CSA,MSA,HPY} ...]], --event [{OSA,CSA,MSA,HPY} [{OSA,CSA,MSA,HPY} ...]]
                        显示事件,从[OSA,CSA,MSA,HPY] 选择一个或多个      默认值:OSA
  -i [START_BCG_INDEX], --start_bcg_index [START_BCG_INDEX]
                        开始事件序号                                   默认值:1
  -f [FRONT_ADD_SECOND], --front_add_second [FRONT_ADD_SECOND]
                        在事件前添加信号长度                             默认值:60
  -b [BACK_ADD_SECOND], --back_add_second [BACK_ADD_SECOND]
                        在事件后添加信号长度                             默认值:60

```



#### 命令行示例

##### 1. 打开样本编号为670,查看事件OSA

```bash
python Main_Quality_Relabel.py -n 670
```

或

```bash
python Main_Quality_Relabel.py -n 670 -e OSA
```



##### 2. 打开样本编号为703,查看事件OSA、CSA, 从第三个事件开始

```bash
python Main_Quality_Relabel.py -n 703 -e OSA CSA -i 3
```



## 记录保存

程序的日志输出将保存到history/[日期].log文件夹下,可以通过查看日志,获取之前打标位置

<img src="graph/log_example.png" style="zoom: 100%;" />

## 窗口示例

<img src="graph/example.png" style="zoom: 80%;" />

## 注意事项

<img src="graph/note.png" style="zoom: 80%;" />





## 程序流程框图

![流程框图](graph/Quality_Relabel.png)

## TODO

2022-03-27 22:27

1. ~~完成启动入口(预计半天)~~
2. ~~完成参数说明(预计半天)~~
3. ~~导出PSG所有标签(额外的工作)~~
4. ~~迁移BCG标签,中文字符切换目前已经完成目前存在ubuntu,需要文件重命名(预计一小时)~~
5. ~~完成日志记录模块(预计半天)~~



2022-04-15 22:06

1. ~~删除了PSG开头部分不存在于心晓中的标签,以后不用计算shifting~~

2022-04-17 20:00

1. ~~添加命令行传入参数功能~~
2. ~~添加显示目前位于第几个~~