"""View the 3-Layers BEM model using Freeview. Examples -------- .. code-block:: console $ mne freeview_bem_surfaces -s sample """ # Authors: The MNE-Python contributors. # License: BSD-3-Clause # Copyright the MNE-Python contributors. import os import os.path as op import sys import mne from mne.utils import get_subjects_dir, run_subprocess def freeview_bem_surfaces(subject, subjects_dir, method=None): """View 3-Layers BEM model with Freeview. Parameters ---------- subject : str Subject name subjects_dir : path-like Directory containing subjects data (Freesurfer SUBJECTS_DIR) method : str | None Can be ``'flash'`` or ``'watershed'``, or None to use the ``bem/`` directory files. """ subjects_dir = str(get_subjects_dir(subjects_dir, raise_error=True)) if subject is None: raise ValueError("subject argument is None.") subject_dir = op.join(subjects_dir, subject) if not op.isdir(subject_dir): raise ValueError( f"Wrong path: '{subject_dir}'. Check subjects-dir or subject argument." ) env = os.environ.copy() env["SUBJECT"] = subject env["SUBJECTS_DIR"] = subjects_dir if "FREESURFER_HOME" not in env: raise RuntimeError("The FreeSurfer environment needs to be set up.") mri_dir = op.join(subject_dir, "mri") bem_dir = op.join(subject_dir, "bem") mri = op.join(mri_dir, "T1.mgz") if method == "watershed": bem_dir = op.join(bem_dir, "watershed") outer_skin = op.join(bem_dir, f"{subject}_outer_skin_surface") outer_skull = op.join(bem_dir, f"{subject}_outer_skull_surface") inner_skull = op.join(bem_dir, f"{subject}_inner_skull_surface") else: if method == "flash": bem_dir = op.join(bem_dir, "flash") outer_skin = op.join(bem_dir, "outer_skin.surf") outer_skull = op.join(bem_dir, "outer_skull.surf") inner_skull = op.join(bem_dir, "inner_skull.surf") # put together the command cmd = ["freeview"] cmd += ["--volume", mri] cmd += ["--surface", f"{inner_skull}:color=red:edgecolor=red"] cmd += ["--surface", f"{outer_skull}:color=yellow:edgecolor=yellow"] cmd += ["--surface", f"{outer_skin}:color=255,170,127:edgecolor=255,170,127"] run_subprocess(cmd, env=env, stdout=sys.stdout) print("[done]") def run(): """Run command.""" from mne.commands.utils import get_optparser parser = get_optparser(__file__) subject = os.environ.get("SUBJECT") parser.add_option( "-s", "--subject", dest="subject", help="Subject name", default=subject ) parser.add_option( "-d", "--subjects-dir", dest="subjects_dir", help="Subjects directory", ) parser.add_option( "-m", "--method", dest="method", help="Method used to generate the BEM model. Can be flash or watershed.", ) options, args = parser.parse_args() subject = options.subject subjects_dir = options.subjects_dir method = options.method freeview_bem_surfaces(subject, subjects_dir, method) mne.utils.run_command_if_main()