FMRI任务态数据SPM批处理_code操作
引言
此前先是总结了spm处理任务态数据的点击操作,后又结合dpabi进行了批量处理的改进。近两天学会了直接修改spmBatch的code,进行循环处理。比想象中的简单一些,所以这次完整的介绍一下只用SPM进行批量处理的操作方法。
一、SPM单个被试任务态数据的batch设置
二、数据结构的整理
这里参考了DPABI文件处理的结构,以便后续的循环处理。
#R语言批量准备处理前文件结构
#共37个被试,需准备RW、SD与T1三个大文件夹,并分装37个被试相应的文件。
#创建37个子文件夹
setwd("D:/desk/speed/data_1/task_spm/RW")
sapply(paste0("sub_10",1:9), dir.create)
sapply(paste0("sub_1",10:37), dir.create)
setwd("D:/desk/speed/data_1/task_spm/SD")
sapply(paste0("sub_20",1:9), dir.create)
sapply(paste0("sub_2",10:37), dir.create)
setwd("D:/desk/speed/data_1/task_spm/T1/RW")
sapply(paste0("sub_10",1:9), dir.create)
sapply(paste0("sub_1",10:37), dir.create)
setwd("D:/desk/speed/data_1/task_spm/T1/SD")
sapply(paste0("sub_20",1:9), dir.create)
sapply(paste0("sub_2",10:37), dir.create)
#移动文件
#结构像
##RW文件夹
for (i in 1:9) {file.copy(
paste("D:/desk/speed/data_1/T1/RW/sub_10",as.character(i),"/10",as.character(i),"_t1.nii",sep = ""),
paste("D:/desk/speed/data_1/task_spm/T1/RW/sub_10",as.character(i),"/10",as.character(i),"_t1.nii",sep = ""))
}
for (i in 10:37) {file.copy(
paste("D:/desk/speed/data_1/T1/RW/sub_1",as.character(i),"/1",as.character(i),"_t1.nii",sep = ""),
paste("D:/desk/speed/data_1/task_spm/T1/RW/sub_1",as.character(i),"/1",as.character(i),"_t1.nii",sep = ""))
}
##SD文件夹
for (i in 1:9) {file.copy( paste("D:/desk/speed/data_1/T1/SD/sub_20",as.character(i),"/20",as.character(i),"_t1.nii",sep = ""),
paste("D:/desk/speed/data_1/task_spm/T1/SD/sub_20",as.character(i),"/20",as.character(i),"_t1.nii",sep = ""))
}
for (i in 10:37) {file.copy(paste("D:/desk/speed/data_1/T1/SD/sub_2",as.character(i),"/2",as.character(i),"_t1.nii",sep = ""),paste("D:/desk/speed/data_1/task_spm/T1/SD/sub_2",as.character(i),"/2",as.character(i),"_t1.nii",sep = ""))
}
#功能像文件移动
##RW
for (i in 1:9) {file.copy(
paste("D:/desk/speed/data_0/RW/10",as.character(i),"_speed.nii",sep = ""),paste("D:/desk/speed/data_1/task_spm/RW/sub_10",as.character(i),"/10",as.character(i),"_speed.nii",sep = ""))
}
for (i in 10:37) {file.copy(
paste("D:/desk/speed/data_0/RW/1",as.character(i),"_speed.nii",sep = ""),paste("D:/desk/speed/data_1/task_spm/RW/sub_1",as.character(i),"/1",as.character(i),"_speed.nii",sep = ""))
}
##SD
for (i in 1:9) {file.copy(
paste("D:/desk/speed/data_0/SD/20",as.character(i),"_speed.nii",sep = ""),paste("D:/desk/speed/data_1/task_spm/SD/sub_20",as.character(i),"/20",as.character(i),"_speed.nii",sep = ""))
}
for (i in 10:37) {file.copy(
paste("D:/desk/speed/data_0/SD/2",as.character(i),"_speed.nii",sep = ""),paste("D:/desk/speed/data_1/task_spm/SD/sub_2",as.character(i),"/2",as.character(i),"_speed.nii",sep = ""))
}
三、SPMbatch批量处理code修改
%-----------------------------------------------------------------------
% 时间:20220913
% 程序员:wishing
% 目的:批处理头动、配准、分割、标准化、模型设计与评估、contrast设计
%-----------------------------------------------------------------------
clear,clc;
spm_get_defaults
spm_jobman('initcfg');
%一种循环的写法
%p=["01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" "31" "32" "33" "34" "35" "36" "37"];这里可以由于01-09比较特殊只能手动打,而后面的可以写一个数列再用string函数转化为字符格式,然后粘贴复制。
%然后for i=length(p)
%其中'sub_1',p(i)代替这样可以实现从1-37的无缝循环
for i = 2:3
filename_in = char(append('D:\desk\speed\data_1\Dp_spm\RW\FunImg\sub_10',string(i),'\10',string(i),'_speed.nii,1'));
filename_out = char(append('D:\desk\speed\data_1\Dp_spm\RW\FunImg\sub_10',string(i)));
file_t = char(append('D:\desk\speed\data_1\Dp_spm\RW\T1Img\sub_10',string(i),'\10',string(i),'_t1.nii,1'));
jobs{1}.spm.util.split.vol = {filename_in};
jobs{1}.spm.util.split.outdir = {filename_out};
jobs{2}.spm.spatial.realign.estwrite.data{1}(1) = cfg_dep('4D to 3D File Conversion: Series of 3D Volumes', substruct('.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','splitfiles'));
jobs{2}.spm.spatial.realign.estwrite.eoptions.quality = 0.9;
jobs{2}.spm.spatial.realign.estwrite.eoptions.sep = 4;
jobs{2}.spm.spatial.realign.estwrite.eoptions.fwhm = 5;
jobs{2}.spm.spatial.realign.estwrite.eoptions.rtm = 1;
jobs{2}.spm.spatial.realign.estwrite.eoptions.interp = 2;
jobs{2}.spm.spatial.realign.estwrite.eoptions.wrap = [0 0 0];
jobs{2}.spm.spatial.realign.estwrite.eoptions.weight = '';
jobs{2}.spm.spatial.realign.estwrite.roptions.which = [2 1];
jobs{2}.spm.spatial.realign.estwrite.roptions.interp = 4;
jobs{2}.spm.spatial.realign.estwrite.roptions.wrap = [0 0 0];
jobs{2}.spm.spatial.realign.estwrite.roptions.mask = 1;
jobs{2}.spm.spatial.realign.estwrite.roptions.prefix = 'r';
jobs{3}.spm.spatial.coreg.estimate.ref(1) = cfg_dep('Realign: Estimate & Reslice: Mean Image', substruct('.','val', '{}',{2}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','rmean'));
jobs{3}.spm.spatial.coreg.estimate.source = {file_t};
jobs{3}.spm.spatial.coreg.estimate.other = {''};
jobs{3}.spm.spatial.coreg.estimate.eoptions.cost_fun = 'nmi';
jobs{3}.spm.spatial.coreg.estimate.eoptions.sep = [4 2];
jobs{3}.spm.spatial.coreg.estimate.eoptions.tol = [0.02 0.02 0.02 0.001 0.001 0.001 0.01 0.01 0.01 0.001 0.001 0.001];
jobs{3}.spm.spatial.coreg.estimate.eoptions.fwhm = [7 7];
jobs{4}.spm.spatial.preproc.channel.vols(1) = cfg_dep('Coregister: Estimate: Coregistered Images', substruct('.','val', '{}',{3}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','cfiles'));
jobs{4}.spm.spatial.preproc.channel.biasreg = 0.001;
jobs{4}.spm.spatial.preproc.channel.biasfwhm = 60;
jobs{4}.spm.spatial.preproc.channel.write = [0 1];
jobs{4}.spm.spatial.preproc.tissue(1).tpm = {'D:\working\matlab\toolbox\spm12\tpm\TPM.nii,1'};
jobs{4}.spm.spatial.preproc.tissue(1).ngaus = 1;
jobs{4}.spm.spatial.preproc.tissue(1).native = [1 0];
jobs{4}.spm.spatial.preproc.tissue(1).warped = [0 0];
jobs{4}.spm.spatial.preproc.tissue(2).tpm = {'D:\working\matlab\toolbox\spm12\tpm\TPM.nii,2'};
jobs{4}.spm.spatial.preproc.tissue(2).ngaus = 1;
jobs{4}.spm.spatial.preproc.tissue(2).native = [1 0];
jobs{4}.spm.spatial.preproc.tissue(2).warped = [0 0];
jobs{4}.spm.spatial.preproc.tissue(3).tpm = {'D:\working\matlab\toolbox\spm12\tpm\TPM.nii,3'};
jobs{4}.spm.spatial.preproc.tissue(3).ngaus = 2;
jobs{4}.spm.spatial.preproc.tissue(3).native = [1 0];
jobs{4}.spm.spatial.preproc.tissue(3).warped = [0 0];
jobs{4}.spm.spatial.preproc.tissue(4).tpm = {'D:\working\matlab\toolbox\spm12\tpm\TPM.nii,4'};
jobs{4}.spm.spatial.preproc.tissue(4).ngaus = 3;
jobs{4}.spm.spatial.preproc.tissue(4).native = [1 0];
jobs{4}.spm.spatial.preproc.tissue(4).warped = [0 0];
jobs{4}.spm.spatial.preproc.tissue(5).tpm = {'D:\working\matlab\toolbox\spm12\tpm\TPM.nii,5'};
jobs{4}.spm.spatial.preproc.tissue(5).ngaus = 4;
jobs{4}.spm.spatial.preproc.tissue(5).native = [1 0];
jobs{4}.spm.spatial.preproc.tissue(5).warped = [0 0];
jobs{4}.spm.spatial.preproc.tissue(6).tpm = {'D:\working\matlab\toolbox\spm12\tpm\TPM.nii,6'};
jobs{4}.spm.spatial.preproc.tissue(6).ngaus = 2;
jobs{4}.spm.spatial.preproc.tissue(6).native = [0 0];
jobs{4}.spm.spatial.preproc.tissue(6).warped = [0 0];
jobs{4}.spm.spatial.preproc.warp.mrf = 1;
jobs{4}.spm.spatial.preproc.warp.cleanup = 1;
jobs{4}.spm.spatial.preproc.warp.reg = [0 0.001 0.5 0.05 0.2];
jobs{4}.spm.spatial.preproc.warp.affreg = 'mni';
jobs{4}.spm.spatial.preproc.warp.fwhm = 0;
jobs{4}.spm.spatial.preproc.warp.samp = 3;
jobs{4}.spm.spatial.preproc.warp.write = [0 1];
jobs{4}.spm.spatial.preproc.warp.vox = NaN;
jobs{4}.spm.spatial.preproc.warp.bb = [NaN NaN NaN
NaN NaN NaN];
jobs{5}.spm.spatial.normalise.write.subj.def(1) = cfg_dep('Segment: Forward Deformations', substruct('.','val', '{}',{4}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','fordef', '()',{':'}));
jobs{5}.spm.spatial.normalise.write.subj.resample(1) = cfg_dep('Realign: Estimate & Reslice: Resliced Images (Sess 1)', substruct('.','val', '{}',{2}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','sess', '()',{1}, '.','rfiles'));
jobs{5}.spm.spatial.normalise.write.woptions.bb = [-78 -112 -70
78 76 85];
jobs{5}.spm.spatial.normalise.write.woptions.vox = [2 2 2];
jobs{5}.spm.spatial.normalise.write.woptions.interp = 4;
jobs{5}.spm.spatial.normalise.write.woptions.prefix = 'w';
jobs{6}.spm.spatial.smooth.data(1) = cfg_dep('Normalise: Write: Normalised Images (Subj 1)', substruct('.','val', '{}',{5}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('()',{1}, '.','files'));
jobs{6}.spm.spatial.smooth.fwhm = [8 8 8];
jobs{6}.spm.spatial.smooth.dtype = 0;
jobs{6}.spm.spatial.smooth.im = 0;
jobs{6}.spm.spatial.smooth.prefix = 's';
jobs{7}.spm.stats.fmri_spec.dir = {filename_out};
jobs{7}.spm.stats.fmri_spec.timing.units = 'secs';
jobs{7}.spm.stats.fmri_spec.timing.RT = 2;
jobs{7}.spm.stats.fmri_spec.timing.fmri_t = 35;
jobs{7}.spm.stats.fmri_spec.timing.fmri_t0 = 18;
jobs{7}.spm.stats.fmri_spec.sess.scans(1) = cfg_dep('Smooth: Smoothed Images', substruct('.','val', '{}',{6}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','files'));
jobs{7}.spm.stats.fmri_spec.sess.cond(1).name = 'speed';
jobs{7}.spm.stats.fmri_spec.sess.cond(1).onset = [0
62
124
186
248
310
372];
jobs{7}.spm.stats.fmri_spec.sess.cond(1).duration = 32;
jobs{7}.spm.stats.fmri_spec.sess.cond(1).tmod = 0;
jobs{7}.spm.stats.fmri_spec.sess.cond(1).pmod = struct('name', {}, 'param', {}, 'poly', {});
jobs{7}.spm.stats.fmri_spec.sess.cond(1).orth = 1;
jobs{7}.spm.stats.fmri_spec.sess.cond(2).name = 'baseline';
jobs{7}.spm.stats.fmri_spec.sess.cond(2).onset = [32
94
156
218
280
342
404];
jobs{7}.spm.stats.fmri_spec.sess.cond(2).duration = 30;
jobs{7}.spm.stats.fmri_spec.sess.cond(2).tmod = 0;
jobs{7}.spm.stats.fmri_spec.sess.cond(2).pmod = struct('name', {}, 'param', {}, 'poly', {});
jobs{7}.spm.stats.fmri_spec.sess.cond(2).orth = 1;
jobs{7}.spm.stats.fmri_spec.sess.multi = {''};
jobs{7}.spm.stats.fmri_spec.sess.regress = struct('name', {}, 'val', {});
jobs{7}.spm.stats.fmri_spec.sess.multi_reg(1) = cfg_dep('Realign: Estimate & Reslice: Realignment Param File (Sess 1)', substruct('.','val', '{}',{2}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','sess', '()',{1}, '.','rpfile'));
jobs{7}.spm.stats.fmri_spec.sess.hpf = 128;
jobs{7}.spm.stats.fmri_spec.fact = struct('name', {}, 'levels', {});
jobs{7}.spm.stats.fmri_spec.bases.hrf.derivs = [0 0];
jobs{7}.spm.stats.fmri_spec.volt = 1;
jobs{7}.spm.stats.fmri_spec.global = 'None';
jobs{7}.spm.stats.fmri_spec.mthresh = 0.8;
jobs{7}.spm.stats.fmri_spec.mask = {''};
jobs{7}.spm.stats.fmri_spec.cvi = 'AR(1)';
jobs{8}.spm.stats.fmri_est.spmmat(1) = cfg_dep('fMRI model specification: SPM.mat File', substruct('.','val', '{}',{7}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','spmmat'));
jobs{8}.spm.stats.fmri_est.write_residuals = 0;
jobs{8}.spm.stats.fmri_est.method.Classical = 1;
jobs{9}.spm.stats.con.spmmat(1) = cfg_dep('Model estimation: SPM.mat File', substruct('.','val', '{}',{8}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','spmmat'));
jobs{9}.spm.stats.con.consess{1}.tcon.name = 's-b';
jobs{9}.spm.stats.con.consess{1}.tcon.weights = [1 -1 0 0 0 0 0 0];
jobs{9}.spm.stats.con.consess{1}.tcon.sessrep = 'none';
jobs{9}.spm.stats.con.delete = 0;
spm_jobman('run',jobs);
clear jobs
end
四、对结果con.nii文件进行整理
这里还是使用DPABI进行统计分析、view、输出结果图片与报告脑区。
#R语言
#单样本检验DAPBI文件结构
#RW
for (i in 1:9) {file.copy(
paste("D:/desk/speed/data_1/Dp_spm/RW/FunImgARWS/sub_10",as.character(i),"/con_0001.nii",sep = ""),
paste("D:/desk/speed/data_1/Dp_spm/group/one_ttest/RW_con/con_",as.character(i),".nii",sep = ""))
}
for (i in 10:37) {file.copy(
paste("D:/desk/speed/data_1/Dp_spm/RW/FunImgARWS/sub_1",as.character(i),"/con_0001.nii",sep = ""),
paste("D:/desk/speed/data_1/Dp_spm/group/one_ttest/RW_con/con_",as.character(i),".nii",sep = ""))
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgkgefj
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13