Source code for emodelrunner.run
"""Create python recordings."""
# 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
from emodelrunner.configuration.configparser import PackageType
from emodelrunner.create_cells import create_cell_using_config
from emodelrunner.parsing_utilities import get_parser_args, set_verbosity
from emodelrunner.protocols.create_protocols import ProtocolBuilder
from emodelrunner.load import (
load_config,
get_release_params,
)
from emodelrunner.output import write_current
from emodelrunner.output import write_responses
logger = logging.getLogger(__name__)
[docs]
def main(config_path):
"""Main.
Args:
config_path (str): path to config file
The config file should have '.ini' suffix
"""
# pylint: disable=too-many-locals, possibly-used-before-assignment
config = load_config(config_path=config_path)
cell = create_cell_using_config(config)
release_params = get_release_params(config)
cvode_active = config.getboolean("Sim", "cvode_active")
# simulator
dt = config.getfloat("Sim", "dt")
sim = ephys.simulators.NrnSimulator(dt=dt, cvode_active=cvode_active)
# create protocols
add_synapses = config.getboolean("Synapses", "add_synapses")
prot_args = config.prot_args()
if config.package_type == PackageType.sscx:
protocols = ProtocolBuilder.using_sscx_protocols(add_synapses, prot_args, cell)
elif config.package_type == PackageType.thalamus:
protocols = ProtocolBuilder.using_thalamus_protocols(
add_synapses, prot_args, cell
)
else:
raise ValueError(f"unsupported package type: {config.package_type}")
ephys_protocols = protocols.get_ephys_protocols()
# run
logger.info("Python Recordings Running...")
responses = ephys_protocols.run(
cell_model=cell, param_values=release_params, sim=sim, isolate=False
)
mtype = config.get("Morphology", "mtype")
if config.package_type == PackageType.sscx:
currents = protocols.get_stim_currents(responses, dt)
elif config.package_type == PackageType.thalamus:
currents = protocols.get_thalamus_stim_currents(responses, mtype, dt)
# write responses
output_dir = config.get("Paths", "output_dir")
write_responses(responses, output_dir)
write_current(currents, output_dir)
logger.info("Python Recordings Done.")
logger.info("Responses written to %s", output_dir)
if __name__ == "__main__":
args = get_parser_args()
set_verbosity(args.verbosity)
main(config_path=args.config_path)