Source code for cleo.stimulators

"""Contains basic stimulators."""
from __future__ import annotations
from attrs import define, field
from brian2 import Unit, NeuronGroup
from cleo.base import Stimulator


[docs] @define(eq=False) class StateVariableSetter(Stimulator): """Sets the given state variable of target neuron groups.""" variable_to_ctrl: str = field(kw_only=True) """Name of state variable to control""" unit: Unit = field(kw_only=True) """Unit of controlled variable: will be used in :meth:`update`""" neuron_groups: list[NeuronGroup] = field(init=False, factory=list)
[docs] def connect_to_neuron_group(self, neuron_group): self.neuron_groups.append(neuron_group) self.update(self.value)
[docs] def update(self, ctrl_signal: float) -> None: """Set state variable of target neuron groups Parameters ---------- ctrl_signal : float Value to update variable to, without unit. The unit provided on initialization is automatically multiplied. """ for ng in self.neuron_groups: setattr(ng, self.variable_to_ctrl, ctrl_signal * self.unit)