systole.utils.norm_bad_segments#

systole.utils.norm_bad_segments(bad_segments) List[Tuple[int, int]][source]#

Normalize bad segments. Return a list of tuples and merge overlapping intervals.

Parameters:
bad_segments

The time stamps of the bad segments. Can be a boolean 1d numpy array where True is a bad segment (will be rejected), or a list of tuples such as (start_idx, end_idx) in signal samples or milliseconds when intervals are provided.

Returns:
bad_segments_tuples

The merged bad segments as tuples such as (start_idx, end_idx) indicate when each bad segment starts and ends.

Raises:
ValueError

If bad_segments is not a tuple or a np.ndarray.

Examples

Get a list of tuples such as [(start_idx, end_idx)] from a boolean vector that is of the same length that the associated signal and where True is a bad segment/sample.

>>> import numpy as np
>>> from systole.utils import norm_bad_segments
>>> bool_bad_segments = np.zeros(100, dtype=bool)
>>> bool_bad_segments[10:20] = True
>>> bool_bad_segments[50:60] = True
>>> new_segments = norm_bad_segments(bool_bad_segments)
>>> new_segments
`[(10, 20), (50, 60)]`

From a list of tuples such as [(start_idx, end_idx)], where some intervals are overlapping, get a clean version of these bad segments by merging the overlapping intervals.

>>> bad_segments = [(100, 200), (150, 250)]
>>> new_segments = norm_bad_segments(bad_segments)
>>> assert new_segments
`[(100, 250)]`