Source code for biobss.pipeline.bio_channel

from __future__ import annotations

import copy as copy

import numpy as np
from numpy.typing import ArrayLike


[docs]class Channel: """Biological signal channel class""" def __init__(self, signal: ArrayLike, name: str, sampling_rate: float): # Docstring """Biological signal channel class Parameters signal: ArrayLike name: str Name of the signal sampling_rate: float Sampling rate of the signal Attributes ----------- channel: ArrayLike Signal signal_name: str Name of the signal sampling_rate: float Sampling rate of the signal """ # # initialize channel data""" self.channel = np.array(signal) self.signal_name = name self.sampling_rate = sampling_rate
[docs] def copy(self): # Docstring """Returns a copy of the channel Returns ------- copy: Channel Copy of the channel """ # return copy.deepcopy(self)
def __eq__(self, other: object) -> bool: # Docstring """Check if two channels are equal Parameters ---------- other: object Object to compare Returns ------- equal: bool True if the two channels are equal, False otherwise """ # if not isinstance(other, Channel): return False return ( (self.signal_name == other.signal_name) and (np.array_equal(self.channel, other.channel)) and self.sampling_rate == other.sampling_rate )
[docs] def get_window(self, window_index): # Docstring """Returns a window of the channel Parameters ---------- window_index: int Index of the window to return Returns ------- window: ArrayLike Window of the channel """ # if len(self.channel.shape) < 2: return self.channel else: return self.channel[window_index, :]
[docs] def get_timestamp(self): if self.n_windows == 1: return np.array([0]) else: return np.arange(self.n_windows)
[docs] def get_window_timestamps(self): if self.n_windows == 1: return np.array([0]) else: return np.arange(self.n_windows)
@property def duration(self): if len(self.channel.shape) < 2: return self.channel.shape[0] / self.sampling_rate else: return self.channel.shape[1] / self.sampling_rate @property def n_windows(self): if len(self.channel.shape) < 2: return 1 else: return self.channel.shape[0] @property def segmented(self): return self.n_windows > 1