Source code for mcot.core._scripts.merge_hcp

#!/usr/bin/env python
"""
Creates new directory with links to HCP data

The full HCP directory structure is reproduced in the target directory with symlinks to the individual files.
The resulting directory will contain the structural, diffusion, and functional data.
"""
import argparse
import os.path as op
from pathlib import Path
import argparse
from warnings import warn
from mcot.core._scripts.iter_link import link_dir


[docs]def HCP_dir(modality='Diffusion', release='Q1200') -> str: """ Gets the parent HCP directory """ for path in ( op.join(op.expanduser('~'), 'Work', 'fmrib', 'scratch', 'HCP', modality, release), op.join('/vols','Scratch', 'HCP', modality, release), ): if op.exists(path): return path raise IOError("HCP directory not found")
[docs]def merge_hcp(target_dir, subject, release='Q1200'): """ Create a new HCP-like directory in `target_dir`/`subject` with links to split HCP directories :param target_dir: new HCP directory :param subject: subject id """ target_dir = Path(target_dir) / subject if not target_dir.is_dir(): target_dir.mkdir(parents=True) for modality in ('Structural', 'Diffusion', 'tfMRI', 'rfMRI'): try: src_dir = Path(HCP_dir(modality, release)) / subject except IOError: try: src_dir = Path(HCP_dir(modality, f'subjects{release[1:]}')) / subject except IOError: warn(f"Modality {modality} not found for subject {subject}") continue link_dir(src_dir, target_dir)
[docs]def run_from_args(args): """ Runs the script based on a Namespace containing the command line arguments """ merge_hcp( args.target_dir, args.subject, args.release )
[docs]def add_to_parser(parser="Create a new HCP-like directory in `target_dir`/`subject` with links to the HCP data"): """ Creates the parser of the command line arguments """ if isinstance(parser, str): parser = argparse.ArgumentParser(parser) parser.add_argument("target_dir", help='new HCP directory') parser.add_argument("subject", help='subject id') parser.add_argument("release", default='Q1200', nargs='?', help='Release specifier (default: Q1200)')