Source code for bluepymm.select_combos.megate_output

"""BluePyMM megate output."""

"""
Copyright (c) 2018, EPFL/Blue Brain Project

 This file is part of BluePyMM <https://github.com/BlueBrain/BluePyMM>

 This library is free software; you can redistribute it and/or modify it under
 the terms of the GNU Lesser General Public License version 3.0 as published
 by the Free Software Foundation.

 This library is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
 details.

 You should have received a copy of the GNU Lesser General Public License
 along with this library; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
"""


# pylint: disable=R0914, C0325, W0640


import os
from bluepymm import tools
from . import table_processing


def _write_extneurondbdat(extneurondb, filename):
    """Write extneurondb.dat"""
    pure_extneuron_db = extneurondb.copy()

    # Select the correct columns
    column_order = ['morph_name', 'layer', 'fullmtype', 'etype', 'combo_name']
    # pure_extneuron_db = pure_extneuron_db[column_order]
    pure_extneuron_db.to_csv(
        filename,
        sep=' ',
        columns=column_order,
        index=False,
        header=False)


[docs] def save_megate_results(extneurondb, output_dir, extneurondb_filename='extneurondb.dat', mecombo_emodel_filename='mecombo_emodel.tsv', sort_key=None, make_names_neuron_compliant=False, extra_value_errors=True): """Write results of megating to two files. Args: extneurondb: pandas.DataFrame with result of me-gating output_dir: path to output directory extneurondb_filename: filename of extended neuron database. The columns of this file are ordered as 'morph_name', 'layer', 'fullmtype', 'etype', 'combo_name'. Values are separated by a space. Default filename is 'extneurondb.dat'. mecombo_emodel_filename: filename of 'mecombo_emodel' file. Values are separated with a tab. Default filename is 'mecombo_emodel.tsv'. sort_key: key to sort database in ascending order before writing out to file. Default is None. make_names_neuron_compliant: boolean indicating whether the combo name should be made NEURON-compliant. Default is False. If set to True, a log file with the conversion info is written out to <output_dir>/log_neuron_compliance.csv """ tools.makedirs(output_dir) if make_names_neuron_compliant: log_filename = 'log_neuron_compliance.csv' log_path = os.path.join(output_dir, log_filename) table_processing.process_combo_name(extneurondb, log_path) if sort_key is not None: extneurondb = extneurondb.sort_values(sort_key).reset_index(drop=True) extneurondb_path = os.path.join(output_dir, extneurondb_filename) _write_extneurondbdat(extneurondb, extneurondb_path) print( 'Wrote extneurondb.dat to {}'.format( os.path.abspath(extneurondb_path))) mecombo_emodel_path = os.path.join(output_dir, mecombo_emodel_filename) if extra_value_errors: for extra_values_key in ['holding_current', 'threshold_current']: null_rows = extneurondb[extra_values_key].isnull() if null_rows.sum() > 0: # TODO reenable this for release ! # raise ValueError( # "There are rows with None for " # "holding current: %s" % str( # extneurondb[null_rows])) print("WARNING ! There are rows with None for " "holding current: %s" % str(extneurondb[null_rows])) extneurondb.to_csv( mecombo_emodel_path, columns=[ 'morph_name', 'layer', 'fullmtype', 'etype', 'emodel', 'combo_name', 'threshold_current', 'holding_current'], sep='\t', index=False) print( 'Wrote mecombo_emodel tsv to {}'.format( os.path.abspath(mecombo_emodel_path))) return extneurondb_path, mecombo_emodel_path
[docs] def write_mecomboreleasejson( output_dir, emodels_hoc_path, extneurondb_path, mecombo_emodel_path): """Write json file contain info about release""" output_paths = {} output_paths['emodels_hoc'] = os.path.abspath(emodels_hoc_path) output_paths['extneurondb.dat'] = os.path.abspath(extneurondb_path) output_paths['mecombo_emodel.tsv'] = os.path.abspath(mecombo_emodel_path) release = {'version': '1.0', 'output_paths': output_paths} tools.write_json( output_dir, 'mecombo_release.json', release) print( 'Wrote mecombo_release json to %s' % os.path.abspath(os.path.join( output_dir, 'mecombo_release.json')))