Source code for emodelrunner.synapses.recordings

"""Custom Recording class."""

# 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.

import logging

from bluepyopt import ephys

logger = logging.getLogger(__name__)


[docs] class SynapseRecordingCustom(ephys.recordings.Recording): """Recording in synaptic locations. Attributes: name (str): name of this object location (Location): location in the model of the recording variable (str): which variable to record from (e.g. 'v') varvectors (list of neuron Vector): vectors recording the variable tvector (neuron Vector): vector recording the time (ms) instantiated (bool): whether the object has been instantiated or not """ def __init__(self, name=None, location=None, variable="v"): """Constructor. Args: name (str): name of this object location (Location): location in the model of the recording variable (str): which variable to record from (e.g. 'v') """ super().__init__(name=name) self.location = location self.variable = variable self.varvectors = [] self.tvector = None self.instantiated = False @property def response(self): """Return recording responses. Returns: list of recorded responses """ if not self.instantiated: return None responses = [] for varvector in self.varvectors: responses.append( ephys.recordings.responses.TimeVoltageResponse( self.name, self.tvector.to_python(), varvector.to_python() ) ) return responses
[docs] def instantiate(self, sim=None, icell=None): """Instantiate recording. Args: sim (bluepyopt.ephys.NrnSimulator): neuron simulator icell (neuron cell): cell instantiation in simulator """ logger.debug( "Adding compartment recording of %s at %s", self.variable, self.location ) pprocesses = self.location.instantiate(sim=sim, icell=icell) for synapse in pprocesses: varvector = sim.neuron.h.Vector() varvector.record(getattr(synapse.hsynapse, f"_ref_{self.variable}")) self.varvectors.append(varvector) self.tvector = sim.neuron.h.Vector() self.tvector.record(sim.neuron.h._ref_t) # pylint: disable=W0212 self.instantiated = True
[docs] def destroy(self, sim=None): """Destroy recording. Args: sim (bluepyopt.ephys.NrnSimulator): neuron simulator """ # pylint: disable=unused-argument self.varvectors = None self.tvector = None self.instantiated = False
def __str__(self): """String representation. Returns: string representation """ return f"{self.name}: {self.variable} at {self.location}"