Source code for neurokin.neural_data

from neurokin.utils.neural import importing
from numpy.typing import ArrayLike


[docs] class NeuralData: """ This class represents the neural data recording of a single recording experiment. It allows to load neural data from multiple recording systems and to perform basic analysis on the raw data. """ def __init__(self, path): self.path = path self.raw: ArrayLike self.fs: float self.sync_data: ArrayLike self.fs_sync: float self.pulses_count: int self.recording: int self.freq: ArrayLike[ArrayLike] self.pxx: ArrayLike[ArrayLike] self.recording_duration: float
[docs] def load_tdt_data(self, sync_present: bool = False, stream_name="Wav1", stim_stream_name="Wav1", t1=0, t2=-1): """ Loads TDT data in the classes attributes. :param sync_present: whether there is a sync channel or not (e.g. stimulation trace) :param stream_name: name of the stream where the neural data is stored :param stim_stream_name: name of the stream where the sync or stimulation data is stored :param t1: first time in second from which to import :param t2: last time in second up until which to import :return: """ self.fs, self.raw, self.sync_data, self.fs_sync = importing.import_tdt_channel_data(folderpath=self.path, stream_name=stream_name, stim_name=stim_stream_name, sync_present=sync_present, t1=t1, t2=t2)
[docs] def load_open_ephys(self, experiment, recording, channels=None, sync_present: bool = False, sync_ch: int = None, source_processor: str = None): """ Loads OpenEphys data in the classes attributes :param experiment: name of the experiment folder, as named by OE :param recording: name of the recording folder, as named by OE :param channels: which channels to load :param sync_present: whether there is a sync channel or not (e.g. stimulation trace) :param sync_ch: number where the sync or stimulation data is stored :param source_processor: name of the source processor as named by OE :return: """ self.fs, self.raw, self.sync_data = importing.import_open_ephys_channel_data(folderpath=self.path, experiment=experiment, recording=recording, channels=channels, sync_present=sync_present, sync_ch=sync_ch, source_processor=source_processor) self.recording = recording
[docs] def compute_recording_duration(self): """ Computes recording duration based on len of the dataset over the sampling frequency and sets it as a class attribute :return: """ self.recording_duration = self.raw.shape[1] / self.fs
[docs] def pick_sync_data(self, idx): """ In TDT loading, if the sync_data is accidentally a multichannel, use this to pick the correct one, based on a 0-based index. :param idx: index of the correct sync data :return: """ self.sync_data = self.sync_data[idx]