Skip to content

Instantly share code, notes, and snippets.

@larsoner
Created November 12, 2020 15:20
Show Gist options
  • Save larsoner/72703fb3e37ae7082479c0591a4bee72 to your computer and use it in GitHub Desktop.
Save larsoner/72703fb3e37ae7082479c0591a4bee72 to your computer and use it in GitHub Desktop.
import os.path as op
import mne
from mne.io.constants import FIFF
subjects = ('ANTS3-0Months3T', 'ANTS6-0Months3T', 'ANTS12-0Months3T')
subjects_dir = '.'
for subject in subjects:
subject_dir = op.join(subjects_dir, subject)
assert op.isdir(subject_dir), subject_dir
bem_dir = op.join(subjects_dir, subject, 'bem')
assert op.isdir(bem_dir), bem_dir
# Fiducials
fname = op.join(bem_dir, f'{subject}-fiducials.fif')
if not op.isfile(fname):
dig = mne.channels.read_dig_fif(
op.join(subject_dir, '10-20-montage.fif')).dig[:3]
for d, want in zip(dig, (FIFF.FIFFV_POINT_LPA,
FIFF.FIFFV_POINT_NASION,
FIFF.FIFFV_POINT_RPA)):
assert d['kind'] == FIFF.FIFFV_POINT_CARDINAL
assert d['coord_frame'] == FIFF.FIFFV_COORD_HEAD # XXX WRONG
d['coord_frame'] = FIFF.FIFFV_COORD_MRI
assert d['ident'] == want
mne.io.write_fiducials(fname, dig, FIFF.FIFFV_COORD_MRI, verbose=True)
# -head.fif
fname = op.join(bem_dir, f'{subject}-head.fif')
if not op.isfile(fname):
rr, tris = mne.read_surface(op.join(bem_dir, 'outer_skin_large.surf'))
rr /= 1000. # mm->m
dec_surf = mne.bem._surfaces_to_bem(
[dict(rr=rr, tris=tris)],
[mne.io.constants.FIFF.FIFFV_BEM_SURF_ID_HEAD], [1], rescale=False,
incomplete='raise', extra='')
mne.write_bem_surfaces(fname, dec_surf)
# -vol-5-src.fif
fname = op.join(bem_dir, f'{subject}-vol-5-src.fif')
fname_inner_skull = op.join(bem_dir, 'inner_skull.surf')
if not op.isfile(fname):
mne.write_source_spaces(fname, mne.setup_volume_source_space(
subject, pos=5, subjects_dir=subjects_dir,
surface=fname_inner_skull, verbose=True))
# -oct-6-src.fif
fname = op.join(bem_dir, f'{subject}-oct-6-src.fif')
if not op.isfile(fname):
mne.write_source_spaces(fname, mne.setup_source_space(
subject, spacing='oct6', subjects_dir=subjects_dir, verbose=True))
# -bem.fif and bem-sol.fif
fname_bem = op.join(bem_dir, f'{subject}-5120-5120-5120-bem.fif')
if not op.isfile(fname_bem):
mne.write_bem_surfaces(fname_bem, mne.make_bem_model(
subject, subjects_dir=subjects_dir,
# ico=None, # XXX 5 should be fine here
verbose=True))
fname_bem_sol = fname_bem[:-4] + '-sol.fif'
if not op.isfile(fname_bem_sol):
mne.write_bem_solution(fname_bem_sol, mne.make_bem_solution(
mne.read_bem_surfaces(fname_bem), verbose=True))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment