timed_inhibition.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import copy
  2. import warnings
  3. import brian2 as br
  4. from brian2 import ms
  5. class TimedInhibition:
  6. def __init__(self, neuron_model, synapse_model, synapse_on_pre, neuron_parameters, synapse_parameters,
  7. initial_states, spike_threshold, integration_method, current_drive, record_variables):
  8. threshold_eqs = """
  9. v_threshold: volt
  10. """
  11. self.neuron = br.NeuronGroup(N=1, \
  12. model=neuron_model + threshold_eqs, \
  13. threshold='v > v_threshold', \
  14. refractory='v > v_threshold', \
  15. method=integration_method)
  16. self.neuron.v_threshold = spike_threshold
  17. set_parameters_from_dict(self.neuron, initial_states)
  18. self.neuron.I = current_drive
  19. self.spike_recorder = br.SpikeMonitor(source=self.neuron)
  20. self.neuron_state_recorder = br.StateMonitor(self.neuron, record_variables, record=True)
  21. self.auto_synapse = br.Synapses(source=self.neuron, target=self.neuron, model=synapse_model,
  22. on_pre=synapse_on_pre,
  23. delay=0.0 * ms)
  24. self.auto_synapse.connect()
  25. set_parameters_from_dict(self.auto_synapse, synapse_parameters)
  26. self.net = br.Network(self.neuron)
  27. self.net.add(self.auto_synapse)
  28. self.net.add(self.spike_recorder)
  29. self.net.add(self.neuron_state_recorder)
  30. self.net.store()
  31. self.network_params = copy.deepcopy(neuron_parameters)
  32. self.network_params.update(synapse_parameters)
  33. def run_sim(self, delay=0.0, pulse_strength=0.0, record_states=False, duration=50 * ms):
  34. self.net.restore()
  35. self.neuron_state_recorder.record = record_states
  36. self.auto_synapse.delay = delay
  37. self.auto_synapse.synaptic_strength = pulse_strength
  38. self.net.run(duration=duration, namespace=self.network_params)
  39. return self.spike_recorder, self.neuron_state_recorder
  40. def set_parameters_from_dict(neurongroup, dictionary_of_parameters):
  41. for param_key, param_value in dictionary_of_parameters.items():
  42. try:
  43. neurongroup.__setattr__(param_key, param_value)
  44. except AttributeError as err:
  45. warnings.warn("{:s} has no parameter {:s}".format(neurongroup.name, param_key))