Source code for emodelrunner.synapses.synapse

"""Custom synapse-related classes."""

# Copyright 2020-2022 Blue Brain Project / EPFL

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

#     http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


[docs] class SynapseMixin: """Class containing the synapse-related methods."""
[docs] def set_random_nmb_generator(self, sim, icell, sid): """Sets the random number generator. Args: sim (bluepyopt.ephys.NrnSimulator): neuron simulator icell (neuron cell): cell instantiation in simulator sid (int): synapse id """ if self.rng_settings_mode == "Random123": self.randseed1 = icell.gid + 250 self.randseed2 = sid + 100 self.randseed3 = 300 self.hsynapse.setRNG(self.randseed1, self.randseed2, self.randseed3) if self.rng_settings_mode == "Compatibility": self.rndd = sim.neuron.h.Random() self.rndd.MCellRan4( sid * 100000 + 100, icell.gid + 250 + self.seed, ) self.rndd.uniform(0, 1) self.hsynapse.setRNG(self.rndd)
[docs] def set_tau_r(self, sim, icell, sid): """Set tau_r_GABAA using random nmb generator. Args: sim (bluepyopt.ephys.NrnSimulator): neuron simulator icell (neuron cell): cell instantiation in simulator sid (int): synapse id """ self.rng = sim.neuron.h.Random() if self.rng_settings_mode == "Random123": self.rng.Random123(icell.gid + 250, sid + 100, 450) elif self.rng_settings_mode == "Compatibility": self.rng.MCellRan4( sid * 100000 + 100, icell.gid + 250 + self.seed, ) self.rng.lognormal(0.2, 0.1) self.hsynapse.tau_r_GABAA = self.rng.repick()
[docs] def execute_synapse_configuration(self, synconf_dict, sid, sim, exec_all=False): """Create a hoc file configuring synapse. Args: synconf_dict (dict): synapse configuration sid (int): synapse id sim (bluepyopt.ephys.NrnSimulator): neuron simulator exec_all (bool): whether to also execute commands with '*' """ # pylint: disable=consider-using-f-string for cmd, ids in synconf_dict.items(): if sid in ids and (exec_all or "*" not in cmd): cmd = cmd.replace("%s", "\n%(syn)s") hoc_cmd = cmd % {"syn": self.hsynapse.hname()} hoc_cmd = "{%s}" % hoc_cmd sim.neuron.h(hoc_cmd)
[docs] class SynapseCustom(SynapseMixin): """Attach a synapse to the simulation. Attributes: seed (int): random number generator seed number rng_settins_mode (str) : mode of the random number generator Can be "Random123" or "Compatibility" section (neuron section): cell location where the synapse is attached to hsynapse (neuron ProbGABAAB_EMS or ProbAMPANMDA_EMS): synapse instantion in simulator delay (float): synapse delay weight (float): synapse weight pre_mtype (int): ID (but not gid) of the presynaptic cell start (int/None): force synapse to start firing at given value when using NetStim interval (int/None): force synapse to fire at given interval when using NetStim number (int/None): force synapse to fire N times when using NetStim noise (int/None): force synapse to have given noise when using NetStim """ def __init__( self, sim, icell, synapse, section, seed, rng_settings_mode, synconf_dict, start=None, interval=None, number=None, noise=None, ): """Constructor. Args: sim (NrnSimulator): simulator icell (Hoc Cell): cell to which attach the synapse synapse (dict): synapse data section (neuron section): cell location where the synapse is attached to seed (int) : random number generator seed number rng_settings_mode (str) : mode of the random number generator Can be "Random123" or "Compatibility" synconf_dict (dict) : synapse configuration start (int/None): force synapse to start firing at given value when using NetStim interval (int/None): force synapse to fire at given interval when using NetStim number (int/None): force synapse to fire N times when using NetStim noise (int/None): force synapse to have given noise when using NetStim """ # pylint: disable=too-many-arguments self.seed = seed self.rng_settings_mode = rng_settings_mode self.section = section # the synapse is inhibitory if synapse["synapse_type"] < 100: self.hsynapse = sim.neuron.h.ProbGABAAB_EMS( synapse["seg_x"], sec=self.section ) self.hsynapse.tau_d_GABAA = synapse["tau_d"] self.set_tau_r(sim, icell, synapse["sid"]) # the synapse is excitatory else: self.hsynapse = sim.neuron.h.ProbAMPANMDA_EMS( synapse["seg_x"], sec=self.section ) self.hsynapse.tau_d_AMPA = synapse["tau_d"] self.hsynapse.Use = abs(synapse["use"]) self.hsynapse.Dep = abs(synapse["dep"]) self.hsynapse.Fac = abs(synapse["fac"]) self.hsynapse.synapseID = synapse["sid"] self.hsynapse.Nrrp = synapse["Nrrp"] # set random number generator self.set_random_nmb_generator(sim, icell, synapse["sid"]) self.execute_synapse_configuration(synconf_dict, synapse["sid"], sim) self.delay = synapse["delay"] self.weight = synapse["weight"] self.pre_mtype = synapse["pre_mtype"] # netstim params if given self.start = start self.interval = interval self.number = number self.noise = noise