Source code for snnib.brian2_utils

"""utilities for interactions with `brian2`

- functions and classes to make interaction with `brian2` objects more straightforward

Exceptions

Classes

Functions
    - `get_spike_monitor()` -- obtains a `SpikeMonitor` associated with some `NeuronGroup`
    - `get_spiketrain()` -- obtains plottable spiketrain from some `SpikeMonitor`

Other Objects
"""

#%%imports
import brian2
import logging

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.WARNING)

#%%definitions
[docs] def get_spike_monitor( net:brian2.Network, group:brian2.NeuronGroup ) -> brian2.SpikeMonitor: """returns the `SpikeMonitor` associated to `group` if it exists - returns only the first found `SpikeMonitor` - returns `None` if no `SpikeMonitor` was found Parameters - `net` - `brian2.Network` - network to hosting `group` - `group` - `brian2.NeuronGroup` - neuron group to get the `SpikeMonitor` of Raises Returns - `obj` - `SpikeMonitor` - extracted `SpikeMonitor` - `None` if no `SpikeMonitor` was found Dependencies - `brian2` - `logging` """ #checks assert isinstance(net, brian2.Network) assert isinstance(group, brian2.groups.Group) for obj in net.objects: if isinstance(obj, brian2.SpikeMonitor) and obj.source is group: return obj logger.info("no `SpikeMonitor` found") return None
[docs] def get_spiketrains( spike_mon:brian2.SpikeMonitor, t_max:brian2.Quantity, n2plot:int ): """returns spiketrains of the first `n2plot` neurons contained in `spike_mon` Parameters - `spike_mon` - `brian2.SpikeMonitor` - spike monitor containing the spiketrains - `t_max` - `brian2.Quantity` - maximum time to extract spiketrains for - `n2plot` - `int` - number of neurons to extract spiketrains for Raises Returns - `times` - `np.array[brian2.Quantity]` - extracted spike times - `ids` - `np.array` - ids of the neurons the spiketrains of which have been extracted Dependencies """ times, ids = spike_mon.t[:], spike_mon.i[:] mask = (times <= t_max) & (ids < n2plot) return times[mask], ids[mask]