Source code for mriqc.run_mriqc

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: oesteban
# @Date:   2015-11-19 16:44:27
# @Last Modified by:   oesteban
# @Last Modified time: 2016-03-10 12:48:01

"""
=====
MRIQC
=====
"""
import os
import os.path as op
from multiprocessing import cpu_count

from argparse import ArgumentParser
from argparse import RawTextHelpFormatter
from mriqc.workflows import qc_workflows
from mriqc.utils.misc import gather_bids_data

from nipype import config as ncfg

__author__ = "Oscar Esteban"
__copyright__ = ("Copyright 2016, Center for Reproducible Neuroscience, "
                 "Stanford University")
__credits__ = "Oscar Esteban"
__license__ = "BSD"
__version__ = "0.0.1"
__maintainer__ = "Oscar Esteban"
__email__ = "code@oscaresteban.es"
__status__ = "Prototype"


[docs]def main(): """Entry point""" parser = ArgumentParser(description='MRI Quality Control', formatter_class=RawTextHelpFormatter) g_input = parser.add_argument_group('Inputs') g_input.add_argument('-i', '--bids-root', action='store', default=os.getcwd()) g_input.add_argument('--nthreads', action='store', default=0, type=int, help='number of threads') g_input.add_argument( "--write-graph", action='store_true', default=False, help="Write workflow graph.") g_input.add_argument( "--use-plugin", action='store', default=None, help='nipype plugin configuration file') g_input.add_argument( "--skip-anatomical", action='store_true', default=False, help="Skip anatomical QC workflow.") g_input.add_argument( "--skip-functional", action='store_true', default=False, help="Skip functional QC workflow.") g_outputs = parser.add_argument_group('Outputs') g_outputs.add_argument('-o', '--output-dir', action='store') g_outputs.add_argument('-w', '--work-dir', action='store') opts = parser.parse_args() settings = {'bids_root': op.abspath(opts.bids_root), 'output_dir': os.getcwd(), 'write_graph': opts.write_graph, 'skip': [], 'nthreads': opts.nthreads} if opts.skip_anatomical: settings['skip'].append('anat') if opts.skip_functional: settings['skip'].append('func') if opts.output_dir: settings['output_dir'] = op.abspath(opts.output_dir) if not op.exists(settings['output_dir']): os.makedirs(settings['output_dir']) if opts.work_dir: settings['work_dir'] = op.abspath(opts.work_dir) LOG_DIR = op.join(settings['work_dir'], 'log') if not op.exists(LOG_DIR): os.makedirs(LOG_DIR) # Set nipype config ncfg.update_config({ 'logging': {'log_directory': LOG_DIR, 'log_to_file': True}, 'execution': {'crashdump_dir': LOG_DIR} }) plugin_settings = {'plugin': 'Linear'} if opts.use_plugin is not None: from yaml import load as loadyml with open(opts.use_plugin) as f: plugin_settings = loadyml(f) else: # Setup multiprocessing if settings['nthreads'] == 0: settings['nthreads'] = cpu_count() if settings['nthreads'] > 1: plugin_settings['plugin'] = 'MultiProc' plugin_settings['plugin_args'] = {'n_procs': settings['nthreads']} subjects = gather_bids_data(settings['bids_root']) if not any([len(subjects[k]) > 0 for k in subjects.keys()]): raise RuntimeError('No scans found in %s' % settings['bids_root']) awf, fwf = qc_workflows(subjects=subjects, settings=settings) if awf is not None: awf.run(**plugin_settings) if fwf is not None: fwf.run(**plugin_settings)
if __name__ == '__main__': main()