Releases: embodied-computation-group/systole
v0.2.4
v0.2.3
v0.2.2
v0.2.2 (December 2021)
Highlights
++++++++++
This release seeks to improve the heart rate variability module and will be the reference version for the JOSS publication.
Changes
+++++++
- |Feature| HRV module: Add a function py:func:
systole.hrv.all_domain()
to easily compute all possible HRV indices. - |Feature| HRV module: Add recurence plot analysis and fast recurrence matrix computation (thanks to Dominique Makowski), and basic quantitative metrics (recurrence rate, l_max, l_mean, determinism rate, Shannon entropy). These metrics are now part of the nonlinear reports (py:func:
systole.hrv.nonlinear_domain()
) or can be called separately (py:func:systole.hrv.recurrence()
). - |Feature| |Enhancement| HRV module: The time domain function (py:func:
systole.hrv.time_domain()
) also reports the SDSD by default. - |Feature| |Enhancement| HRV module: The frequency domain function (py:func:
systole.hrv.frequency_domain()
) now returns the total power and LF/HF ratio by default. - |Feature| Plotting module: Add nicer rendering for table output for time_domain, frequency_domain and nonlinear_domain functions, working either with Tabulate or Bokeh.
- |Feature| Add a respiratory peaks detection function (py:func:
systole.detection.res_peaks()
). VEry simple for now, will be improved in the future. - |Docs| |Enhancement| Improve tutorial notebook on HRV.
Contributors
++++++++++++
- Dominique Makowski (https://github.com/DominiqueMakowski)
- Bertrand Hermann ([email protected])
v0.2.1 - December 2021
v0.2.1 - December 2021
Highlights
This release fixes dependencies and import errors pointed during the review of the JOSS Systole paper and add the paper to the main repository. It also adds several bug fixes and functionality improvements.
We recommend all users upgrade to this new version.
Changes
- |Fix| Important BUGFIX: :func:
systole.hrv.frequency_domain()
switched the variables"power_hf_nu"
and"power_lf_nu"
before returning. - |Fix| Important BUGFIX: :func:
systole.hrv.frequency_domain()
the variables"power_hf_nu"
and"power_lf_nu"
were not properly scalled (x100) before returning. - |Fix| |Enhancement| Fix :func:
systole.plots.plot_evoked()
so it works with the three inputs types and improve documentation. - |Enhancement| Fix :func:
systole.utils.norm_triggers()
is now using Numba's jit by default. - |Enhancement| |Defaults| The :func:
systole.plot.plot_frequency()
function clip power to be >= 0 by default. - |Defaults| The :func:
systole.hrv.frequency_domain()
:func:systole.hrv.time_domain()
functions rounds with the same parameter (6
).
v0.2.0 - October 2021
v0.2.0 (October 2021)
Highlights
This is a major release that introduces a new plotting backend using Bokeh instead of Plotly, several API changes and performance improvement (Numba).
The plots
submodule now includes the following functions:
- :func:
systole.plots.plot_circular
- :func:
systole.plots.plot_ectopic
- :func:
systole.plots.plot_events
- :func:
systole.plots.plot_evoked
- :func:
systole.plots.plot_frequency
- :func:
systole.plots.plot_pointcare
- :func:
systole.plots.plot_raw
- :func:
systole.plots.plot_rr
- :func:
systole.plots.plot_shortlong
- :func:
systole.plots.plot_subspaces
These functions can be called using Bokeh or Matplotlib as backend (plot_circular
only accepts Matplotlib for now).
All the methods available in :func:systole.detection.ecg_peaks
are now accelerated with Numba.
- |Enhancement| Add Numba support for :func:
systole.detector.pan_tompkins()
(~7x faster) - |Enhancement| Add Numba support for :func:
systole.detector.hamilton()
(~10x faster) - |Enhancement| Add Numba support for :func:
systole.detector.christov()
(~30x faster) - |Enhancement| Add Numba support for :func:
systole.detector.engelse_zeelenberg()
(~20x faster)
This also drops py-ecg-detectors dependency, and the refactored code is now included in Systole.
This release also includes some API changes and renaming for consistency (oxi_peaks
-> ppg_peaks
).
Changes
-
|Api| Remove support for Plotly. Add support for Bokeh. Merge interactive and non-interactive modules into a unique :func:
plots
module. -
|Docs| Use PyData Sphinx theme.
-
|Docs| Several additions to the tutorials pages, now divided into 5 Chapters:
- Physiological signal analysis
- Detecting cycles
- Detecting and correcting artefacts
- Heart rate variability
- Instantaneous heart rate and evoked heart rate
-
|Docs| Add examples for :func:
systole.correction.correct_peaks()
and :func:systole.correction.correct_rr()
in the gallery. -
|Enhancement| |Feature| |API| Most of the functions now accept inputs as
peaks
(boolean vector),peaks_idx
(int indexes vector),rr_ms
(floats RR intervals in miliseconds) orrr_s
(floats RR intervals in seconds). :func:systole.utils.to_rr()
has been renamed to :py:func:systole.utils.input_conversion()
and support the conversion between data types. -
|Fix| |Enhancement| :func:
systole.detection.ppg_peaks()
now handles negative values/ low sampling rate. -
|Enhancement| :func:
systole.correction.correct_peaks()
and :func:systole.correction.correct_rr()
have been improved for performances, allowsn
iterations and print results. -
|Enhancement| utils.to_epochs() now accept multiple condition (as list) and returns rejection vectors for each one. The code has also been simplified and runs faster.
-
|Fix| Remove use of
outdated
.
Contributors
- Gidon Levakov ([email protected])
- Peter Doggart ([email protected])
v0.1.3 - April 2021
v0.1.3 (April 2021)
Enhancements
a. :py:func:systole.plotly.plot_raw()
: add ecg_method
parameter to control the ECG peak detection method used.
b. Download dataset directly from GitHub instead of copying the files at install.
c. Haromonisation of :py:func:systole.plotting.plot_raw()
and :py:func:systole.plotting.plot_raw()
(replace the plot_hr()
function), and :py:func:systole.plotly.plot_subspaces()
and :py:func:systole.plotly.plot_subspaces()
.
d. The :py:class:systole.recording.Oximeter()
class has been improved:
- :py:func:
systole.recording.Oximeter.setup()
has annAttempts
argument so it will not run forever if no valid signal is recordedfor a given number of attempts (default is 100). - :py:func:
systole.recording.Oximeter.check()
has been updated and accept data format #7 from Xpods, allowing more flexibility. - :py:func:
systole.recording.Oximeter.save()
will now save additional channels and support.txt
and.npy
file extensions. - Create a :py:func:
systole.recording.Oximeter.reset()
method to avoid improper use of__init__()
.
e. Add pre-commit hooks, flake8, black and isort CI tests.
f. Add type hints and CI testing with mypy.
v 0.1.2 - September 2020
v0.1.2 (September 2020)
New functions
a. Add :py:func:systole.utils.to_rr()
. for peaks or index vectors convertion to RR intervals
b. Add :py:func:systole.recording.BrainVisionExG()
, a class to read physio recording from BrainVision ExG products via TCP/IP connection.
c. Add :py:func:systole.recording.findOximeter()
, find the USB port where Nonin Oximeter is plugged by looping through the USB port and checking the input.
d. Add :py:func:systole.detection.ecg_peaks()
. A wrapper around py-ecg-detectors for basic ECG peaks detection.
Enhancements
a. Improved documentation and examples.
b. Simplification of PPG example data import.
c. Improved interactive plotting functions.
June 2020
New functions
a. Add the plotly sub-module, a set of Plotly functions comprising systole.plotly.plot_raw
, systole.plotly.plot_subspaces
, systole.plotly.plot_ectopic
, systole.plotly.plot_shortLong
, systole.plotly.plot_frequency
, systole.plotly.plot_nonlinear
, systole.plotly.plot_timedomain
.
b. Add plotly.utils.simulate_rr()
, for random RR interval simulation with different kind of artefacts. Can also return peak vector.
c. The correction sub-module has been largely rewritten and now include systole.correction.correct_extra
, systole.correction.correct_missed
, systole.correction.interpolate_bads
, systole.correction.correct_rr
, systole.correction.correct_peaks
, systole.correction.correct_missed_peaks
, systole.correction.correct_extra_peaks
. These function can correct artefacts either using peaks addition/removal or by interpolation of the RR time series.
Enhancements
a. The detection sub-module has been improved. It is now about 10x faster and returns more information. The main function has been renamed to systole.detection.rr_artefacts
.
Bugfixes
a. systole.correction.interpolate_clipping
: add exception in case of clipping artefacts at the edge of the signal segment. This can cause cash during recording. The default behavior is now to decrement the last/first item in case of threshold value. The threshold can be changed manually. This procedure can result in slightly inaccurate interpolation, using a longer recording should always be preferred when possible.
b. The PPG signal simulator used for testing can now run infinitely.
Contributors
Jan C. Brammer <[email protected]>
_
Initial release
v0.1.0 (January 2020)
Initial release.
Detection
a. oxi_peaks()
b. hr_subspaces()
c. interpolate_clipping()
d. rr_outliers()
HRV
a. nnX()
b. pnX()
c. rmssd()
d. time_domain()
e. frequency_domain()
f. nonlinear()
Plotting
a. plot_hr()
b. plot_events()
c. plot_oximeter()
d. plot_subspaces()
e. plot_psd()
f. circular()
g. plot_circular()
Recording
a. Oximeter()
Report
a. report_oxi()
Utils
a. norm_triggers()
b. time_shift()
c. heart_rate()
d. to_angles()
e. to_epochs()
Pre-Alpha
Initial release of our Systole python package for processing cardiac physiology data.