Source code for emodelrunner.create_stimuli
"""Functions to create stimuli."""
# 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 json
from emodelrunner.stimuli import Pulse
# adapted from bglibpy.cell
[docs]
def add_pulse(stimulus, soma_loc):
"""Return Pulse Stimulus.
Args:
stimulus (dict): contains the stimulus configuration data
soma_loc (bluepyopt.ephys.locations.NrnSeclistCompLocation): location of the soma
Returns:
Pulse: pulse stimulus
"""
return Pulse(
location=soma_loc,
delay=float(stimulus["Delay"]),
duration=float(stimulus["Duration"]),
amp=float(stimulus["AmpStart"]),
frequency=float(stimulus["Frequency"]),
width=float(stimulus["Width"]),
)
[docs]
def load_pulses(soma_loc, stim_path="protocols/stimuli.json"):
"""Return a list of pulse stimuli.
Args:
soma_loc (bluepyopt.ephys.locations.NrnSeclistCompLocation):
location of the soma
stim_path (str): path to the pulse stimuli file
Raises:
NotImplementedError: if stim["Pattern"] is not "Pulse" in simuli file
Returns:
list of Pulse stimuli
"""
pulse_stims = []
with open(stim_path, "r", encoding="utf-8") as f:
stimuli = json.load(f)
for _, stim in stimuli.items():
if "Pattern" in stim and stim["Pattern"] == "Pulse":
pulse_stims.append(add_pulse(stim, soma_loc))
else:
raise NotImplementedError(
"Stimulus other than Pulse in stimuli file. Not implemented yet."
)
return pulse_stims