from __future__ import annotations
from typing import Sequence
import numpy as np
from .core import nspikeTrain as _LegacySpikeTrain
from .simulation import simulate_poisson_from_rate
from .trial import nstColl as _LegacySpikeTrainCollection
[docs]
class SpikeTrain(_LegacySpikeTrain):
"""Canonical spike train type for point-process analyses."""
[docs]
def inter_spike_intervals(self) -> np.ndarray:
return self.getISIs()
[docs]
def to_counts(self, bin_edges: Sequence[float]) -> np.ndarray:
return self.to_binned_counts(bin_edges)
[docs]
class SpikeTrainCollection(_LegacySpikeTrainCollection):
"""Collection of aligned spike trains for ensemble analyses."""
def __iter__(self):
for i in range(self.numSpikeTrains):
yield self.getNST(i)
[docs]
def to_matrix(self, bin_edges: Sequence[float]) -> np.ndarray:
edges = np.asarray(bin_edges, dtype=float).reshape(-1)
if edges.ndim != 1 or edges.size < 2:
raise ValueError("bin_edges must be a 1D array with at least two entries")
rows = [np.asarray(train.to_binned_counts(edges), dtype=float) for train in self]
return np.vstack(rows)
__all__ = ["SpikeTrain", "SpikeTrainCollection", "simulate_poisson_from_rate"]