Skip to content

ENH: API for subcortical surface source spaces #6784

@larsoner

Description

@larsoner

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    To do

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions