通过脚本使用SPM12

一、使用脚本的必要性

  1. SPM12里有些模块的图形界面(GUI)只能处理单个被试,比如,Specify 1st-level,但是实践中不可能只处理一个被试,如果每个被试都用GUI设置一遍,非常繁琐而且容易出错。

  2. 使用脚本可以更容易把不同处理模块串联起来。一旦建立了一个处理流程后,相似的数据集可以重复使用脚本。当然,SPM12的Batch System也可以使用图形界面的方式将不同处理模块串联起来,但是还是会有无法处理多个被试的困难。

  3. 更容易和其他处理软件结合起来使用。

  4. 更容易在集群服务器上使用。

二、使用方法

  1. 针对某一个模块(比如,Segment模块),使用GUI设置一个被试的数据并运行。

  2. 在图形窗口菜单栏选择File -> Save Batch and Script,会生成*.m*_job.m两个文件,其中*表示设置的文件名,*_job.m里包含进行Segment任务所需要的代码,如下图所示:

  1. 在上述代码最开始的部分加上初始化的代码,在结束的部分加上运行任务的代码,如下所示:
%% initialize
spm('defaults', 'fmri');
spm_jobman('initcfg');
%% some job-related code
matlabbatch{1}.spm...=...;
%% run current job
spm_jobman('run', matlabbatch);
  1. 比较使用GUI和使用脚本得到的结果是否一致,确保脚本正确。

  2. 添加一些循环和输入输出的Matlab代码来处理所有被试的数据,需要一些基本的Matlab编程知识,这里不做介绍。

一个更完整的例子可以参考我的博客:https://alexbrain.cn/?p=491。我个人对SPM12日常使用不多,还在积极学习中,有不准确的地方,欢迎指正。

三、参考资料

  1. SPM12的官方文档:https://www.fil.ion.ucl.ac.uk/spm/doc/manual.pdf

  2. SPM12的官方教程:https://www.fil.ion.ucl.ac.uk/spm/docs/tutorials/