[pymvpa] Surface searchlight problems (alignment related)
Mike E. Klein
michaeleklein at gmail.com
Sun Feb 8 19:58:22 UTC 2015
I message you after weeks of frustration and feeling progressively more
dumb. I am attempting to do a surface-informed MVPA analysis and am
approaching the “screw it, I’ll stick with my volumetric results” decision
point, but wanted to try to make one final push before I fly the white
flag. I am generally new to surfaces, FreeSurfer, AFNI/SUMA, which is
adding to my confusion (new software, file formats, etc.). I have an
audio-motor task, and volumetric searchlights are highlighting STG as well
as inferior parietal areas (like S2), which I very much hope to
disambiguate using the surface-constrained approach. Separately, this
approach just makes more inherent sense and I want to be able to constrain
my MVPAs to the surface going forward.
- I’m having two sorts of issues:
- 1. Registration-related. While the FreeSurfer surfaces look
well-registered to the input anatomicals, the same isn’t true of the
surfaces projected into functional space (although it’s not terrible).
Registration woes then get even worse following MVPA, as sanity check
analyses (sound vs. silence) shows best decoding in regions that are
clearly posterior and superior (by multiple centimeters) to primary
- 2. How to do a statistical analysis on the group data (11
- I’ve put a few screenshots, referenced below, at:
- I’m not getting any explicit python errors, but am nonetheless clearly
doing this amiss somewhere.
- List of steps (with issues in italics)
- 1. fMRI (volume) preprocessing (motion correction etc.) done in SPM8
- 2. Surface extraction from anatomical (in native anatomical space)
done with FreeSurfer
- 2a. Quality of surfaces and alignment to the anatomical visually
inspected with FreeView.
- 3. pymvpa2-pre-afni-surf run to:
- a. resamples the surfaces to standard topologies (with different
resolutions) using MapIcosehedron
- b. aligns surfaces to a reference functional volume,
- c. merges left and right hemispheres into single surface files.
- I did this with pymvpa2-prep-afni-surf -e
mySub/example_functional_volume.nii -d surfer/mySub/surf/ -r
- example_functional_volume.nii is taken from my 4D time
series. I visually verified that the entire time series was in good
alignment with the example.
- Step 3a vs. Step 3b is a point of a confusion for me. I think I
am being thrown off by the phrase “standard topologies.” We are
the anatomically-extracted surface into the functional space so that the
functional data does not need to be transformed/interpolated
(unintentionally smoothed). If that is the case, then how are “standard
topologies” involved? (When I hear standard, I think “standard
MNI152, etc.) Is the idea that the -shape- of the surface sheet isn’t
altered in this “resampl[ing],” but instead just the specific locations
(and numbering schemes) for the vertices/edges? This is the only
explanation that makes sense to me.
- 4. Visually check the alignment of one of the new suma surfaces
(e.g. mh_ico32_al.spec) with the example functional volume using
I am doing this by running:
- afni -niml &
- suma -spec mh_ico32_al.spec -sv example_functional_volume.nii &
- (I’m showing this with both a T2 and a T1 image registered
the example functional in the T2’s 3mm space, as it’s
easier to see.) These
images are shown in two of the screenshots.
- pressing “t” in SUMA to link together AFNI and SUMA
- This, to me, looks OK, but not great. There is clearly much
correspondence between the surfaces and the volume, although
area (on right) looks particularly bad to me.
- Separately, I get a warning message about a force switch from
the original view to talairach view. I’m not sure why this
would be, as all
of these volumes and surfaces should be in the functional space...
- 5. Run the PyMVPA surface searchlight script.
- I’m doing this as a sanity check: decoding sound vs. silence.
- I’m using the merged (m) hemisphere option and I’m using what I
think are essentially default settings:
- highres_ld = 128
- pial_surf_fn = os.path.join(surfpath, "ico%d_%sh.pial_al.asc %
- white_surf_fn = os.path.join(surfpath,
"ico%d_%sh.smoothwm_al.asc” % (highres_ld, hemi))
- lowres_ld = 32 # 16, 32 or 64 is reasonable. 4 and 8 are
- source_surf_fn = os.path.join(surfpath,
"ico%d_%sh.intermediate_al.asc % (lowres_ld, hemi))
- radius = 123
- qe = disc_surface_queryengine(radius, epi_fn, white_surf_fn,
pial_surf_fn, source_surf_fn, nproc=4)
- clf = LinearCSVMC()
- cv = CrossValidation(clf, NFoldPartitioner(), errorfx=lambda
p, t: np.mean(p == t), enable_ca=['stats'])
- 6. I’m then checking the results with AFNI/SUMA.
- *While I do get very high (almost 100% decoding) in certain
regions for sound/silence, the peaks are not along the STG/HG as they
should be. Instead they are considerably posterior and
superior (the SMG
and surrounding). This doesn’t pass the smell test, as is
also at odds with
my volumetric results, which show maximal decoding in and around A1.*
- A stray thought, but if I display the suma surfaces over my
anatomical in its native space, the surface-HG region fits
over the native
anatomical IPL region.
- And, of course, even if I had all of the issues ironed out, I’m at
a loss for how to treat the DSET surface MVPA files in a group
volume space, I’ve run my information maps through SPM. *At present,
I can’t even get these searchlight result files to load in FreeSurfer’s
FreeView (even if I convert file formats to something like GII). The blue
loading bar just spins and spins until the app crashes. *
A very long message I know, but any help would be immensely appreciated.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Pkg-ExpPsy-PyMVPA