# Authors: The MNE-Python contributors. # License: BSD-3-Clause # Copyright the MNE-Python contributors. """Set up bilateral hemisphere surface-based source space with subsampling. Examples -------- .. code-block:: console $ mne setup_source_space --subject sample .. note : Only one of --ico, --oct or --spacing options can be set at the same time. Default to oct6. """ import sys import mne from mne.utils import _check_option def run(): """Run command.""" from mne.commands.utils import _add_verbose_flag, get_optparser parser = get_optparser(__file__) parser.add_option( "-s", "--subject", dest="subject", help="Subject name (required)", default=None ) parser.add_option( "--src", dest="fname", help="Output file name. Use a name /-src.fif", metavar="FILE", default=None, ) parser.add_option( "--morph", dest="subject_to", help="morph the source space to this subject", default=None, ) parser.add_option( "--surf", dest="surface", help="The surface to use. (default to white)", default="white", type="string", ) parser.add_option( "--spacing", dest="spacing", help="Specifies the approximate grid spacing of the " "source space in mm. (default to 7mm)", default=None, type="int", ) parser.add_option( "--ico", dest="ico", help="use the recursively subdivided icosahedron " "to create the source space.", default=None, type="int", ) parser.add_option( "--oct", dest="oct", help="use the recursively subdivided octahedron to create the source space.", default=None, type="int", ) parser.add_option( "-d", "--subjects-dir", dest="subjects_dir", help="Subjects directory", default=None, ) parser.add_option( "-n", "--n-jobs", dest="n_jobs", help="The number of jobs to run in parallel " "(default 1). Requires the joblib package. " "Will use at most 2 jobs" " (one for each hemisphere).", default=1, type="int", ) parser.add_option( "--add-dist", dest="add_dist", help='Add distances. Can be "True", "False", or "patch" ' "to only compute cortical patch statistics (like the --cps option in MNE-C)", default="True", ) parser.add_option( "-o", "--overwrite", dest="overwrite", help="to write over existing files", default=None, action="store_true", ) _add_verbose_flag(parser) options, args = parser.parse_args() if options.subject is None: parser.print_help() sys.exit(1) subject = options.subject subject_to = options.subject_to fname = options.fname subjects_dir = options.subjects_dir spacing = options.spacing ico = options.ico oct_ = options.oct surface = options.surface n_jobs = options.n_jobs add_dist = options.add_dist _check_option("add_dist", add_dist, ("True", "False", "patch")) add_dist = {"True": True, "False": False, "patch": "patch"}[add_dist] verbose = True if options.verbose is not None else False overwrite = True if options.overwrite is not None else False # Parse source spacing option spacing_options = [ico, oct_, spacing] n_options = len([x for x in spacing_options if x is not None]) use_spacing = "oct6" if n_options > 1: raise ValueError("Only one spacing option can be set at the same time") elif n_options == 0: # Default to oct6 pass elif n_options == 1: if ico is not None: use_spacing = "ico" + str(ico) elif oct_ is not None: use_spacing = "oct" + str(oct_) elif spacing is not None: use_spacing = spacing del ico, oct_, spacing # Generate filename if fname is None: if subject_to is None: fname = subject + "-" + str(use_spacing) + "-src.fif" else: fname = subject_to + "-" + subject + "-" + str(use_spacing) + "-src.fif" else: if not (fname.endswith("_src.fif") or fname.endswith("-src.fif")): fname = fname + "-src.fif" # Create source space src = mne.setup_source_space( subject=subject, spacing=use_spacing, surface=surface, subjects_dir=subjects_dir, n_jobs=n_jobs, add_dist=add_dist, verbose=verbose, ) # Morph source space if --morph is set if subject_to is not None: src = mne.morph_source_spaces( src, subject_to=subject_to, subjects_dir=subjects_dir, surf=surface, verbose=verbose, ) # Save source space to file src.save(fname=fname, overwrite=overwrite) mne.utils.run_command_if_main()