Surface-based Group Analysis Questions

I am attempting to do a surface based analysis of an n-back task (2 back minus 0 back conditions), and I am having trouble piecing together the appropriate procedure through the docs.

I manually edited the skull-stripping in FreeSurfer, then converted the edited brainmask file to a surface via:

@SUMA_Make_Spec_FS -NIFTI -fspath ./subject_ID -sid ./subject_ID

Then, I followed example 8 (but using a standard mesh - as advised by Rick Reynolds: https://afni.nimh.nih.gov/afni/community/board/read.php?1,159454,159521#msg-159521 )

afni_proc.py -subj_id subject_ID
-scr_overwrite
-blocks tshift align volreg surf blur scale regress
-copy_anat ./subject_ID/SUMA/brainmask.nii
-dsets ./funct1.nii.gz ./funct2.nii.gz
-surf_anat ./subject_ID/SUMA/subject_ID_SurfVol.nii
-surf_spec ./subject_ID/SUMA/std.60.subject_ID_?h.spec
-tshift_opts_ts
-tpattern alt-z
-align_opts_aea -cost lpc+ZZ
-volreg_align_to MIN_OUTLIER
-volreg_align_e2a
-blur_size 6
-regress_stim_times
./0_back.1D
./2_back.1D
-regress_stim_labels back_0 back_2
-regress_basis ‘BLOCK(45,1)’
-regress_opts_3dD
-gltsym ‘SYM: back_2 - back_0’
-glt_label 2minus0
-regress_censor_outliers .1
-regress_censor_motion 0.3
-regress_motion_per_run
-regress_run_clustsim no
-execute

Then, I looked through the SUMA handout:
https://afni.nimh.nih.gov/pub/dist/edu/latest/afni_handouts/suma.pdf
My reading of slide 88 is that the output of the afni_proc.py script using the (-surf_anat and -surf_spec) options can be used in the 3dXXXX group analyses:

gen_group_command.py -command 3dttest++
-write_script ./twominuszero_lh.tcsh
-prefix twominuszero_lh.niml.dset
-dsets ./subject_ID/subject_ID.results/stats.*_ID.lh.niml.dset
-set_labels back2 back0
-subs_betas ‘back_2#0_Coef’ ‘back_0#0_Coef’
-subs_tstats ‘back_2#0_Tstat’ ‘back_0#0_Tstat’
-options
-nomeans -no1sam

Then twominuszero_lh.tcsh runs without error, and creates twominuszero_lh.niml.dset

My goal is to visualize the functional data, and eventually (I think) run slow_surf_clustsim.py to perform the correction for multiple comparisons as in example 3 of the slow_surf_clustsim.py -help output.

My questions are:

  1. Is the “stats.subject_ID.?h.niml.dset” the correct file to use for 3dttest++ if the goal is to visualize the functional data (that was included as volumetric data in afni_proc.py as .nii.gz files)

  2. I am confused about the spec/std files. I visualized the “twominuszero_lh.niml.dset” file in SUMA by:

afni -niml &
suma -spec ./suma_MNI_N27/std.60.MNI_N27_lh.spec -sv ./suma_MNI_N27/MNI_N27_SurfVol.nii

View → Object Controller → Load Dset → twominuszero_lh.niml.dset

This “looks right” - but I’m unsure if those were appropriate -spec and -sv files.

  1. I am unclear if slow_surf_clustsim.py is a surface equivalent of the -clustsim option in 3dttest++ for volumes. The description of the z.max output values sound like analogous information, but based on ( https://afni.nimh.nih.gov/afni/community/board/read.php?1,159863,159889#msg-159889 ) “… we haven’t looked at this for a cluster-control FPR test”

  2. If the output of slow_surf_clustim.py can be used for mutliple comparison correction of functional data projected on a surface, I am unsure of which files to use. Copying example 3 I tried:

slow_surf_clustsim.py -save_script surf_lh
-on_surface yes
-uvar blur 4.0
-uvar spec_file */std.60.subject_ID_lh.spec
-uvar surf_vol ./subject_ID_SurfVol_Alnd_Exp+orig

The above script works when I use just one subject picked at random, but when I try to use data from all of the subjects included in the analysis (as in the gen_group_command.py):

slow_surf_clustsim.py -save_script surf_lh
-on_surface yes
-uvar blur 4.0
-uvar spec_file ./std.60._ID_lh.spec
-uvar surf_vol ./
_ID_SurfVol_Alnd_Exp+orig

I get “** error: arg #44 (-uvar) requires 2 params, found 1”

My understanding of the std.60.subject_ID.lh.spec file is that it essentially defines the conversion of/relationship between the surface of subject “subject_ID”, and the std.60 mesh (which, seems like the equivalent of a template). Similarly, the subject_ID_SurfVol_Alnd_Exp+orig defines the conversion of/relationship between the volume that was used to create the surface (in my case, the brainmask edited in freesurfer, created from a T1), and the experimental volume (in my case, the functional scans aligned to the MIN_OUTLIER slice).

If my understanding of the files is correct, I don’t understand how slow_surf_clustsim.py can use information from only one subject, to determine cluster correction for a group analysis.

Any clarification would be very helpful, as I want to make sure I’m using these tools correctly!
Thanks!!

I am still working on this and was wondering if anyone had any suggestions, since I feel like I’m missing something quite obvious.

Is the appropriate approach to convert the 3dttest++ output (i.e. twominuszero_lh.niml.dset) to a volumetric dataset using 3dSurf2Vol? I was under the impression that one of the purposes of doing the surface-based analysis directly through afni_proc.py was so that the surface results would be directly mappable to the volume, but I may have misinterpreted that.

Any ideas would be appreciated!