From 0431b85c153325adff2491c486a9cf32f6d809c8 Mon Sep 17 00:00:00 2001 From: Paul McCarthy <pauldmccarthy@gmail.com> Date: Sun, 21 Jan 2018 18:45:07 +0000 Subject: [PATCH] Additions to freesurfer module - can now load vertex data. --- fsl/data/freesurfer.py | 56 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/fsl/data/freesurfer.py b/fsl/data/freesurfer.py index a8856334f..029274eab 100644 --- a/fsl/data/freesurfer.py +++ b/fsl/data/freesurfer.py @@ -20,10 +20,11 @@ The following functions are also available: import os.path as op import glob -import nibabel as nib +import nibabel.freesurfer as nibfs -import fsl.utils.path as fslpath -import fsl.data.mesh as fslmesh +import fsl.utils.path as fslpath +import fsl.data.mghimage as fslmgh +import fsl.data.mesh as fslmesh GEOMETRY_EXTENSIONS = ['.pial', @@ -45,8 +46,14 @@ EXTENSION_DESCRIPTIONS = [ """A description for each extension in :attr:`GEOMETRY_EXTENSIONS`. """ - -VERTEX_DATA_EXTENSIONS = [''] +VERTEX_DATA_EXTENSIONS = ['.curv', + '.crv', + '.area', + '.thickness', + '.volume', + '.mgh', + '.mgz'] +"""File extensions which are interpreted as Freesurfer vertex data files. """ class FreesurferMesh(fslmesh.Mesh): @@ -68,7 +75,7 @@ class FreesurferMesh(fslmesh.Mesh): loaded as additional vertex sets. """ - vertices, indices, meta, comment = nib.freesurfer.read_geometry( + vertices, indices, meta, comment = nibfs.read_geometry( filename, read_metadata=True, read_stamp=True) @@ -93,18 +100,47 @@ class FreesurferMesh(fslmesh.Mesh): allFiles = relatedFiles(filename, ftypes=GEOMETRY_EXTENSIONS) for f in allFiles: - verts, idxs = nib.freesurfer.read_geometry(f) + verts, idxs = nibfs.read_geometry(f) self.addVertices(verts, f, select=False) def loadVertexData(self, infile, key=None): + """Overrides :meth:`.Mesh.loadVertexData`. If the given ``infile`` + looks like a Freesurfer file, it is loaded via the + :func:`loadFreesurferVertexFile` function. Otherwise, it is passed + through to the base-class function. """ - """ - pass + + if not fslpath.hasExt(infile, VERTEX_DATA_EXTENSIONS): + return fslmesh.loadVertexData(infile, key) + + infile = op.abspath(infile) + + if key is None: + key = infile + + vdata = loadFreesurferVertexFile(infile) + + self.addVertexData(key, vdata) + + return vdata def loadFreesurferVertexFile(infile): - pass + """Loads the given Freesurfer file, assumed to contain vertex-wise data. + """ + + # morphometry file + morphexts = ['.curv', '.crv', '.area', '.thickness', '.volume'] + + if fslpath.hasExt(infile, morphexts): + vdata = nibfs.read_morph_data(infile) + + # MGH image file + elif fslpath.hasExt(infile, fslmgh.ALLOWED_EXTENSIONS): + vdata = fslmgh.MGHImage(infile)[:].squeeze() + + return vdata def relatedFiles(fname, ftypes=None): -- GitLab