12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import copy
- import warnings
- import brian2 as br
- from brian2 import ms
- class TimedInhibition:
- def __init__(self, neuron_model, synapse_model, synapse_on_pre, neuron_parameters, synapse_parameters,
- initial_states, spike_threshold, integration_method, current_drive, record_variables):
- threshold_eqs = """
- v_threshold: volt
- """
- self.neuron = br.NeuronGroup(N=1, \
- model=neuron_model + threshold_eqs, \
- threshold='v > v_threshold', \
- refractory='v > v_threshold', \
- method=integration_method)
- self.neuron.v_threshold = spike_threshold
- set_parameters_from_dict(self.neuron, initial_states)
- self.neuron.I = current_drive
- self.spike_recorder = br.SpikeMonitor(source=self.neuron)
- self.neuron_state_recorder = br.StateMonitor(self.neuron, record_variables, record=True)
- self.auto_synapse = br.Synapses(source=self.neuron, target=self.neuron, model=synapse_model,
- on_pre=synapse_on_pre,
- delay=0.0 * ms)
- self.auto_synapse.connect()
- set_parameters_from_dict(self.auto_synapse, synapse_parameters)
- self.net = br.Network(self.neuron)
- self.net.add(self.auto_synapse)
- self.net.add(self.spike_recorder)
- self.net.add(self.neuron_state_recorder)
- self.net.store()
- self.network_params = copy.deepcopy(neuron_parameters)
- self.network_params.update(synapse_parameters)
- def run_sim(self, delay=0.0, pulse_strength=0.0, record_states=False, duration=50 * ms):
- self.net.restore()
- self.neuron_state_recorder.record = record_states
- self.auto_synapse.delay = delay
- self.auto_synapse.synaptic_strength = pulse_strength
- self.net.run(duration=duration, namespace=self.network_params)
- return self.spike_recorder, self.neuron_state_recorder
- def set_parameters_from_dict(neurongroup, dictionary_of_parameters):
- for param_key, param_value in dictionary_of_parameters.items():
- try:
- neurongroup.__setattr__(param_key, param_value)
- except AttributeError as err:
- warnings.warn("{:s} has no parameter {:s}".format(neurongroup.name, param_key))
|