Source code for neuron_morphology.validation.validate_reconstruction

import os
import sys
import logging
import neuron_morphology.swc_io as swc
import neuron_morphology.validation as validation
from neuron_morphology.validation.result import *
import neuron_morphology.marker as marker
from neuron_morphology.validation.report import Report
import argparse
import glob
import neuron_morphology.validation.morphology_statistics as statistics

logger = logging.getLogger()


[docs]def parse_arguments(args): """ This function parses command line arguments """ parser = argparse.ArgumentParser() parser.add_argument('--dir', type=str, nargs='+', help="SWC and Marker files") parser.add_argument('--swc', type=str, help="SWC file") parser.add_argument('--marker', type=str, help="Marker file") return parser.parse_args(args)
[docs]def main(): args = vars(parse_arguments(sys.argv[1:])) if args['dir'] is None and args['swc'] is None and args['marker'] is None: print("You need to provide one of the following arguments: directory, swc file, marker file") sys.exit(1) reconstruction_files = [] swc_file = None marker_file = None if args['dir']: for file_name in args['dir']: if glob.has_magic(file_name): reconstruction_files += glob.glob(file_name) else: reconstruction_files.append(file_name) swc_files = [f for f in reconstruction_files if f.endswith('.swc')] marker_files = [f for f in reconstruction_files if f.endswith('.marker')] if len(swc_files) > 1 or len(marker_files) > 1: print("You cannot choose a directory with more than one swc or marker file") sys.exit(1) else: if len(swc_files) == 0: print("No swc file in the directory. No swc validation was done.") sys.exit(1) else: matching_morphology_name = marker_files[0].replace('.marker', '.swc') if matching_morphology_name != swc_files[0]: print("No matching .swc file found. No marker validation was done for:\n %s \n\n" % marker_files[0]) sys.exit(1) swc_file = swc_files[0] marker_file = marker_files[0] else: swc_file = args['swc'] marker_file = args['marker'] report = Report() try: morpho = swc.morphology_from_swc(swc_file) morpho.validate(strict=True) report.add_swc_results(swc_file, []) except InvalidMorphology as im: report.add_swc_results(swc_file, im.validation_errors) morphology = None try: morphology = swc.morphology_from_swc(swc_file) morphology.validate(strict=False) except InvalidMorphology as im: report.add_marker_results(marker_file, [MarkerValidationError("Unable to parse matching SWC file " "to validate the marker file.", {}, "Fatal")]) if morphology: stats = statistics.morphology_statistics(morphology) report.add_swc_stats(swc_file, stats) if marker_file: try: results = validation.validate_marker(marker.read_marker_file(marker_file), morphology) report.add_marker_results(marker_file, results) except InvalidMarkerFile as imf: report.add_marker_results(marker_file, imf.validation_errors) print(report.to_json()) if report.has_results(): sys.exit(1)
if __name__ == "__main__": main()