Package for detecting HFOs
Project description
HFODetector
HFODetector is Python package that that is capable of detecting HFOs with either a STE or an MNI detector. Detection speed is increased by using multiprocessing.
Bibtex
If you find our project is useful in your research, please cite:
Zhang, Y., Liu, L., Ding, Y., Chen, X., Monsoor, T., Daida, A., ... & Roychowdhury, V. (2023). PyHFO: Lightweight Deep Learning-powered End-to-End High-Frequency Oscillations Analysis Application. bioRxiv, 2023-08.
Installation
pip install HFODetector
Run time comparison (in minutes)
Linux | Linux | Windows | Windows | OS X | OS X | |
---|---|---|---|---|---|---|
STE | MNI | STE | MNI | STE | MNI | |
RIPPLELAB | 372.83 | 5647.12 | - | - | - | - |
pyHFO single-core | 57.43 | 971.35 | 34.57 | 933.31 | 35.90 | 659.63 |
pyHFO multi-core | 5.18 | 83.30 | 9.03 | 113.59 | 7.56 | 114.35 |
The testing data we are using is 19 patients 10 min data in Refining epileptogenic high-frequency oscillations using deep learning: A novel reverse engineering approach paper.
** Single-core: n-jobs =1 for all machines,
** Multi-core: n-jobs = 32 for Linux (AMD Ryzen Threadripper 2950X), n-jobs = 8 for Windows(Intel i9-13900K) and Mac machines(Apple M1 Pro).
Example usage
STE detector
To use the STE detector, import ste
from HFODetector
, then a detector can be initialized with the desired parameters by calling ste.STEDetector
. To use it to detect HFOs from an .edf
file, call the detect_edf
method. The detect_edf
method takes a path to an edf file as input and returns a tuple containing the channel names and start and end timestamps of detected HFOs. The following code snippet shows how to use the STE detector.
import numpy as np
import pandas as pd
from HFODetector import ste
if __name__ == "__main__":
edf_path = "example.edf" #change this to your edf path
detector = ste.STEDetector(sample_freq=2000, filter_freq=[80, 500],
rms_window=3*1e-3, min_window=6*1e-3, min_gap=10 * 1e-3,
epoch_len=600, min_osc=6, rms_thres=5, peak_thres=3,
n_jobs=32, front_num=1)
channel_names, start_end = detector.detect_edf(edf_path)
# channel_names is a list that is the same length as the number of channels in the edf
# start_end is a nested list with the same length as channel_names. start_end[i][j][0] and start_end[i][j][1]
# will give the start and end index respectively for the jth detected HFO in channel channel_names[i]
channel_names = np.concatenate([[channel_names[i]]*len(start_end[i]) for i in range(len(channel_names))])
start_end = [start_end[i] for i in range(len(start_end)) if len(start_end[i])>0]
start_end = np.concatenate(start_end)
HFO_ste_df = pd.DataFrame({"channel":channel_names,"start":start_end[:,0],"end":start_end[:,1]})
Which results a pandas dataframe HFO_ste_df
a sample is displayed below:
This dataframe has the following 3 columns:
channel
: name of the channel corresponding to the detected HFOstart
: start timestamp of the detected HFO in millisecondsend
: end timestamp of the detected HFO in milliseconds
MNI detector
To use the MNI detector, import mni
from HFODetector
, then a detector can be initialized with the desired parameters by calling mni.MNIDetector
. To use it to detect HFOs from an .edf
file, call the detect_edf
method. The detect_edf
method takes a path to an edf file as input and returns a tuple containing the channel names and start and end timestamps of detected HFOs. The following code snippet shows how to use the MNI detector.
import numpy as np
import pandas as pd
from HFODetector import mni
if __name__ == "__main__":
edf_path = "example_edf.edf" #change this to your edf path
sample_freq=2000 #change this to your sample frequency
detector = mni.MNIDetector(sample_freq, filter_freq=[80, 500],
epoch_time=10, epo_CHF=60, per_CHF=95/100,
min_win=10*1e-3, min_gap=10*1e-3, thrd_perc=99.9999/100,
base_seg=125*1e-3, base_shift=0.5, base_thrd=0.67, base_min=5,
n_jobs=32, front_num=1)
channel_names, start_end = detector.detect_edf(edf_path)
# channel_names is a list that is the same length as the number of channels in the edf
# start_end is a nested list with the same length as channel_names. start_end[i][j][0] and start_end[i][j][1]
# will give the start and end index respectively for the jth detected HFO in channel channel_names[i]
channel_names = np.concatenate([[channel_names[i]]*len(start_end[i]) for i in range(len(channel_names))])
start_end = [start_end[i] for i in range(len(start_end)) if len(start_end[i])>0]
start_end = np.concatenate(start_end)
HFO_mni_df = pd.DataFrame({"channel":channel_names,"start":start_end[:,0],"end":start_end[:,1]})
Which results a pandas dataframe HFO_mni_df
a sample is displayed below:
This dataframe has the following 3 columns:
channel
: name of the channel corresponding to the detected HFOstart
: start timestamp of the detected HFO in millisecondsend
: end timestamp of the detected HFO in milliseconds
Contributors:
Department of Electrical and Computer Engineering, University of California, Los Angeles
- Xin Chen -- Main Author of MNI
- Hoyoung Chung -- Main Author of STE
- Lawrence Liu
- Qiujing Lu
- Yuanyi Ding
- Yipeng Zhang
Division of Pediatric Neurology, Department of Pediatrics, UCLA Mattel Children’s Hospital David Geffen School of Medicine
Contacts:
Please create a github issue or email the following people for further information
- Lawrence Liu (lawrencerliu@g.ucla.edu)
- Yuanyi Ding (semiswiet@g.ucla.edu)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file HFODetector-0.0.23.tar.gz
.
File metadata
- Download URL: HFODetector-0.0.23.tar.gz
- Upload date:
- Size: 17.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.15
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bea7794509698014344850b9d5f551bb434f1b392bf100b17c0f6c78aeec9340 |
|
MD5 | 45acf901646d68555c86386073d2ab93 |
|
BLAKE2b-256 | 3a6b8f7da16963df23414052d918506c6411121d6b977b3c8c18afc3375c164d |
File details
Details for the file HFODetector-0.0.23-py3-none-any.whl
.
File metadata
- Download URL: HFODetector-0.0.23-py3-none-any.whl
- Upload date:
- Size: 20.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.8.15
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9fab867d45e0de3a39ed6cb3ec1af638d75c384e3de9c91820e4746fedebb946 |
|
MD5 | 2ba1cbf613c8a60931319b6d806abb5d |
|
BLAKE2b-256 | a26872b2021bcf60db900da7db5696886780ccae4543d49266915693cc2915a0 |