initial commit
This commit is contained in:
150
mne/commands/mne_setup_forward_model.py
Normal file
150
mne/commands/mne_setup_forward_model.py
Normal file
@@ -0,0 +1,150 @@
|
||||
# Authors: The MNE-Python contributors.
|
||||
# License: BSD-3-Clause
|
||||
# Copyright the MNE-Python contributors.
|
||||
|
||||
"""Create a BEM model for a subject.
|
||||
|
||||
Examples
|
||||
--------
|
||||
.. code-block:: console
|
||||
|
||||
$ mne setup_forward_model -s 'sample'
|
||||
|
||||
"""
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
import mne
|
||||
from mne.utils import get_subjects_dir, warn
|
||||
|
||||
|
||||
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(
|
||||
"--model",
|
||||
dest="model",
|
||||
help="Output file name. Use a name <dir>/<name>-bem.fif",
|
||||
default=None,
|
||||
type="string",
|
||||
)
|
||||
parser.add_option(
|
||||
"--ico",
|
||||
dest="ico",
|
||||
help="The surface ico downsampling to use, e.g. "
|
||||
" 5=20484, 4=5120, 3=1280. If None, no subsampling"
|
||||
" is applied.",
|
||||
default=None,
|
||||
type="int",
|
||||
)
|
||||
parser.add_option(
|
||||
"--brainc",
|
||||
dest="brainc",
|
||||
help="Defines the brain compartment conductivity. "
|
||||
"The default value is 0.3 S/m.",
|
||||
default=0.3,
|
||||
type="float",
|
||||
)
|
||||
parser.add_option(
|
||||
"--skullc",
|
||||
dest="skullc",
|
||||
help="Defines the skull compartment conductivity. "
|
||||
"The default value is 0.006 S/m.",
|
||||
default=None,
|
||||
type="float",
|
||||
)
|
||||
parser.add_option(
|
||||
"--scalpc",
|
||||
dest="scalpc",
|
||||
help="Defines the scalp compartment conductivity. "
|
||||
"The default value is 0.3 S/m.",
|
||||
default=None,
|
||||
type="float",
|
||||
)
|
||||
parser.add_option(
|
||||
"--homog",
|
||||
dest="homog",
|
||||
help="Use a single compartment model (brain only) "
|
||||
"instead a three layer one (scalp, skull, and "
|
||||
" brain). If this flag is specified, the options "
|
||||
"--skullc and --scalpc are irrelevant.",
|
||||
default=None,
|
||||
action="store_true",
|
||||
)
|
||||
parser.add_option(
|
||||
"-d",
|
||||
"--subjects-dir",
|
||||
dest="subjects_dir",
|
||||
help="Subjects directory",
|
||||
default=None,
|
||||
)
|
||||
_add_verbose_flag(parser)
|
||||
options, args = parser.parse_args()
|
||||
|
||||
if options.subject is None:
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
subject = options.subject
|
||||
fname = options.model
|
||||
subjects_dir = options.subjects_dir
|
||||
ico = options.ico
|
||||
brainc = options.brainc
|
||||
skullc = options.skullc
|
||||
scalpc = options.scalpc
|
||||
homog = True if options.homog is not None else False
|
||||
verbose = True if options.verbose is not None else False
|
||||
# Parse conductivity option
|
||||
if homog is True:
|
||||
if skullc is not None:
|
||||
warn(
|
||||
"Trying to set the skull conductivity for a single layer "
|
||||
"model. To use a 3 layer model, do not set the --homog flag."
|
||||
)
|
||||
if scalpc is not None:
|
||||
warn(
|
||||
"Trying to set the scalp conductivity for a single layer "
|
||||
"model. To use a 3 layer model, do not set the --homog flag."
|
||||
)
|
||||
# Single layer
|
||||
conductivity = [brainc]
|
||||
else:
|
||||
if skullc is None:
|
||||
skullc = 0.006
|
||||
if scalpc is None:
|
||||
scalpc = 0.3
|
||||
conductivity = [brainc, skullc, scalpc]
|
||||
# Create source space
|
||||
bem_model = mne.make_bem_model(
|
||||
subject,
|
||||
ico=ico,
|
||||
conductivity=conductivity,
|
||||
subjects_dir=subjects_dir,
|
||||
verbose=verbose,
|
||||
)
|
||||
# Generate filename
|
||||
if fname is None:
|
||||
n_faces = list(str(len(surface["tris"])) for surface in bem_model)
|
||||
fname = subject + "-" + "-".join(n_faces) + "-bem.fif"
|
||||
else:
|
||||
if not (fname.endswith("-bem.fif") or fname.endswith("_bem.fif")):
|
||||
fname = fname + "-bem.fif"
|
||||
# Save to subject's directory
|
||||
subjects_dir = get_subjects_dir(subjects_dir, raise_error=True)
|
||||
fname = subjects_dir / subject / "bem" / fname
|
||||
# Save source space to file
|
||||
mne.write_bem_surfaces(fname, bem_model)
|
||||
# Compute the solution
|
||||
sol_fname = os.path.splitext(str(fname))[0] + "-sol.fif"
|
||||
bem_sol = mne.make_bem_solution(bem_model, verbose=verbose)
|
||||
mne.write_bem_solution(sol_fname, bem_sol)
|
||||
|
||||
|
||||
mne.utils.run_command_if_main()
|
||||
Reference in New Issue
Block a user