mne-tools / mne-tools/mne-python

ENH: API for subcortical surface source spaces

Open
#6,784 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
3.5k
Forks
1.6k
Avg merge
1d 6h
Merged PRs (30d)
100

Description

It turns out (I think!) you can take just about any subcortical ROI and turn it into a surface using a few FreeSurfer commands:

mri_tessellate aseg.mgz 17 lh.hippocampus.orig
mri_tessellate aseg.mgz 53 rh.hippocampus.orig
mris_extract_main_component lh.hippocampus.orig lh.hippocampus.orig
mris_extract_main_component rh.hippocampus.orig rh.hippocampus.orig
mris_smooth -nw lh.hippocampus.orig lh.hippocampus.smooth
mris_smooth -nw rh.hippocampus.orig rh.hippocampus.smooth

The .smooth surfaces look reasonable for the MNE sample subject:

Screenshot from 2019-08-16 14-50-48

And they can be inflated to a sphere (so that they can be subdivided via ico/oct) with:

mris_inflate -no-save-sulc lh.hippocampus.smooth lh.hippocampus.inflated
mris_inflate -no-save-sulc rh.hippocampus.smooth rh.hippocampus.inflated
mris_sphere -q lh.hippocampus.inflated lh.hippocampus.qsphere
mris_sphere -q rh.hippocampus.inflated rh.hippocampus.qsphere

Here is a starting API proposal:

  1. setup_source_space(..., surf='...') allow surf to be a list/tuple of names in aseg.mgz, not just surf/ files. The default would stay 'white', which is an alias for (as would be pial and other cortical surfaces) ('lh.white', 'rh.white') to create a cortical surface source space.
  2. Currently we use FIFF.FIFFV_MNE_SURF_LEFT_HEMI = 101 for left, 102 for right; maybe we should use 1000+aseg_value for any non-cortical surface, and left/right hemi would keep their "special" / exceptional values of 101 and 102 (their numbers in aseg.mgz appear to be 2 or 3 and 41 or 42)
  3. The .kind for a SourceSpaces with just these surfaces would be not 'surf' (keep this for cortical surf source spaces only) but instead 'subcortical_surf' or something. And combinations of cortical surf + subcortical surf would be, as usual, 'mixed'.
  4. Figure out morphing somehow. In theory we might be able to do this procedure for fsaverage and use FreeSurfer commands to align the surfaces (make .sphere instead of just .qsphere surfaces). Now that make_morph_maps is not horribly slow anymore, creating the morph maps on the fly might be acceptable since these surfaces in general will have way fewer vertices.
  5. Improve plotting to support multiple surfaces.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the setup_source_space API and the make_morph_maps workflow mentioned in the proposal, then review how source-space plotting currently handles multiple surfaces. The work is done when the proposed subcortical surface inputs, source-space kinds, morphing behavior, and multiple-surface plotting are defined and supported consistently.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
api
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.