to_neo

Contents

to_neo#

class braintools.file.to_neo(trains)#

Convert a SpikeTrains to a list of neo.SpikeTrain.

One neo.SpikeTrain is created per neuron, holding its valid spikes (padding is dropped), with the population’s t_start and t_stop.

Parameters:

trains (SpikeTrains) – Unbatched spike trains whose times carry a brainunit time unit.

Returns:

trains.n_neurons spike trains, in neuron order. Their unit is the same-named quantities unit (ms, s, us, …) or, if there is none, seconds. If trains.overflow is set, every train carries the annotation braintools_overflow=True.

Return type:

List[Any]

Raises:
  • TypeError – If trains is not a SpikeTrains, is traced (inside jax.jit/jax.vmap), or its times have no time unit.

  • ValueError – If trains is batched (times not 2-D).

  • ImportError – If neo or quantities is missing (pip install braintools[neo]).

See also

from_neo

The inverse conversion.

braintools.spike.SpikeTrains.to_list

Ragged per-neuron arrays.

Notes

Host-only: the output is ragged, so this cannot run under jax.jit or jax.vmap. Unitless trains are rejected rather than assumed to be in seconds or milliseconds.

Examples

>>> import brainunit as u
>>> import numpy as np
>>> from braintools.file._neo import to_neo
>>> from braintools.spike import SpikeTrains
>>> st = SpikeTrains.from_list([np.array([1., 3.]) * u.ms, np.array([]) * u.ms],
...                            t_start=0. * u.ms, t_stop=5. * u.ms)
>>> neo_trains = to_neo(st)
>>> len(neo_trains)
2
>>> neo_trains[0].magnitude.tolist(), str(neo_trains[0].units.dimensionality)
([1.0, 3.0], 'ms')
>>> float(neo_trains[1].t_stop), neo_trains[1].size
(5.0, 0)