Source code for denspp.offline.nsp.spike_analyse

import numpy as np


[docs] def calc_spiketicks(frames_in: list, do_short: bool=True, out_transient_size: int=0) -> np.ndarray: """Determining spike ticks with cluster results""" frames_pos = frames_in[1] cluster_id = frames_in[2] cluster_no = np.unique(cluster_id) # --- Generation of spike ticks if do_short: ticks = np.zeros(shape=(frames_pos.size, 2), dtype=int) ticks[:, 0] = frames_pos ticks[:, 1] = cluster_id else: # --- Performing the long type ticks = np.zeros(shape=(cluster_no.size, out_transient_size), dtype=np.int8) for idx, val in enumerate(frames_pos): ticks[cluster_id[idx], val] = 1 return ticks
[docs] def calc_amplitude(frames_in: list) -> list: """Determining the min-max amplitudes of each spike frame over time""" frames0_in = frames_in[0] frames_pos = frames_in[1] cluster_id = frames_in[2] amp = list() cluster_no = np.unique(cluster_id) for id in cluster_no: selx = np.where(cluster_id == id)[0] amp_id = list() sel_frames = frames0_in[selx, :] for idx, frame0 in enumerate(sel_frames): amp_id.append([frames_pos[selx[idx]], np.min(frame0), np.max(frame0)]) amp.append(amp_id) return amp
[docs] def calc_interval_timing(xticks: np.ndarray, fs: float) -> list: """Calculating the interval timing of clustered spike ticks""" ivt = list() for idx, ticks in enumerate(xticks): x0 = np.where(ticks == 1)[0] ivt.append(np.diff(x0) / fs) return ivt
[docs] def calc_firing_rate(xticks: np.ndarray, fs: float) -> list: """Calculation of the firing rate of each clustered spike ticks""" out = list() for idx, ticks in enumerate(xticks): x0 = np.where(ticks == 1)[0] xout = np.zeros(shape=(2, x0.size)) xout[0, :] = x0 / fs xout[1, :] = np.concatenate((0, fs / np.diff(x0)), axis=None) out.append(xout) return out
[docs] def calc_autocorrelogram(xticks: np.ndarray, fs: float) -> list: """Calculation of the Auto-Correlogram""" out = list() for idx, ticks0 in enumerate(xticks): isi = [] ticks = np.where(ticks0 == 1)[0] for tick_ref in ticks: dt_isi = ticks - tick_ref isi = np.concatenate([isi, dt_isi], axis=None) out.append(isi / fs) return out
[docs] def calc_crosscorrelogram(xticks: np.ndarray, xref: np.ndarray, fs: float) -> list: """Calculation of the Cross-Correlogram""" out = list() tick_ref0 = np.where(xref == 1)[0] for idx, ticks0 in enumerate(xticks): isi = [] ticks = np.where(ticks0 == 1)[0] for tick_ref in tick_ref0: dt_isi = ticks - tick_ref isi = np.concatenate([isi, dt_isi], axis=None) out.append(isi / fs) return out