Source code for neuronunit.models.very_reduced
"""NeuronUnit model class for reduced neuron models."""
import numpy as np
from neo.core import AnalogSignal
import quantities as pq
import neuronunit.capabilities as cap
import neuronunit.models as mod
import neuronunit.capabilities.spike_functions as sf
[docs]class VeryReducedModel(mod.ExternalModel,
cap.ReceivesCurrent,
cap.ProducesActionPotentials,
):
"""Base class for reduced models, not using LEMS,
and not requiring file paths this is to wrap pyNN models, Brian models,
and other self contained models+model descriptions"""
def __init__(self, name=None, backend=None, attrs=None):
"""Instantiate a reduced model.
LEMS_file_path: Path to LEMS file (an xml file).
name: Optional model name.
"""
super(VeryReducedModel, self).__init__(name=name,
backend=backend,
attrs=attrs)
self.run_number = 0
self.tstop = None
[docs] def get_membrane_potential(self, **run_params):
self.run(**run_params)
for rkey in self.results.keys():
if 'v' in rkey or 'vm' in rkey:
v = np.array(self.results[rkey])
t = np.array(self.results['t'])
dt = (t[1]-t[0])*pq.s # Time per sample in seconds.
vm = AnalogSignal(v, units=pq.V, sampling_rate=1.0/dt)
return vm
[docs] def get_APs(self, **run_params):
vm = self.get_membrane_potential(**run_params)
waveforms = sf.get_spike_waveforms(vm)
return waveforms
[docs] def get_spike_train(self, **run_params):
vm = self.get_membrane_potential(**run_params)
spike_train = sf.get_spike_train(vm)
return spike_train
[docs] def inject_square_current(self, current):
self.set_run_params(injected_square_current=current)
self._backend.inject_square_current(current)