3dToutcount -automask v1+orig | 1dplot -stdin Usage: 3dTqual [options] dataset
计算3D+time数据集每个sub-brick的`quality index'。输出为由每个sub-brick的index组成的1D时间序列。结果输出至stderr。
注:小的index值为'好',意味着该sub-brick与norm无非常显著的差异。该程序的目的就是为筛选fMRI时间序列零星的异常图像提供粗糙的方法,例如由于被试头部较大运动或scanner故障导致的伪影。 不要完全照搬该程序的结果。只是提供GUIDE帮助研究者发现数据问题。
具有更高的index值的sub-bricks应该检查问题。如何定义'much higher'表示多少由研究者决定。研究者应该用图形来检测index的值。作为guide, 程序将输出中值质量指数(median quality index)和范围median-3.5*MAD ~ median+3.5MAD(MAD为中绝绝对偏差)。超过该范围的values值得怀疑,如果quality index服从正态分布,超过该范围的值发生的概率为1%。 选项
-spearman = Quality index值为1-Spearman (rank) correlation coefficient (每个sub-brick与 median sub-brick的Spearman相关系数) [default method.] -quadrant =与-spearman相似,但用1-(1/4)*Spearman 相关系数
-autoclip = 去除(clip off) median sub-brick中低强度的区域,这样,相关系数只在高强度的 -automask 体素(大概脑组织范围内)之间计算。强度水平的决定与3dClipLevel相同。这就 防止脑组织以外的接近0的体素使相关系数的计算发生偏斜。 -clip val = 去除(clip off) median sub-brick中低于'val' 的体素。
-range = 与每个quality index一起输出-3.5*MAD 和median+3.5*MAD值,这样可以进 行plot绘图。
注:* 这些值在任何情况下输出至stderr。仅在用1dplot时有用。较低的值median-3.5*MAD 不允许小于0。 举例:3dTqual -range -automask fred+orig | 1dplot -one -stdin (3) 3dcalc程序
该程序对3D数据集进行voxel-by-voxel运算(limited to inter-voxel computation) 该程序假设voxel-by-voxel运算在占有相同空间并有相同轴向的数据集进行。 Usage: 3dcalc -a dsetA [-b dsetB...] -expr EXPRESSION [options] 举例:
a. 基于voxel-by-voxel,将几个数据集进行平均
3dcalc -a fred+tlrc -b ethel+tlrc -c lucy+tlrc -expr '(a+b+c)/3' -prefix subjects_mean b. 建立一个简单的mask,其中只包含sub-brick中大于某一指定值的体素 3dcalc -a 'func+orig[0]' -expr 'ispositive(a-3.14159)' -prefix mask c 在准备组分析前,对被试的时间序列进行标准化
下面的例子中,将时间序列中(epi_r1+orig)的每个强度值除以平均(mean+orig)得到改变值百分比。 3dcalc -a epi_run1+orig -b mean+orig -expr '100 * a/b ' -prefix percent_chg d. 从统计数据集建立一个混合的mask,其中3个刺激呈现激活 注:'step' 和 'ispositive' 是等价的,可交替使用
3dcalc -a 'func+orig[12]' -b 'func+orig[15]' -c 'func+orig[18]' \\ -expr 'step(a-4.2)*step(b-2.9)*step(c-3.1)' -prefix compound_mask e. 创建3维球体ROI(region-of-interest) mask。ROI内的值 将被标记为1,ROI mask外的值将被标记为0。这样,就 可以对ROI内的体素进行统计分析:
3dcalc -a anat+tlrc -expr 'step((9-(x-20)*(x-20)-(y-30)*(y-30)-(z-70)*(z-70))' -prefix ball
f. 数据集 'a' 通常被用作输出数据集的模板(template)。下面的例子中,假设d1+orig和d2+orig由小的整数组成:
a) 当a除以b时,结果应进行缩放,这样结果值2.4不会被四舍五入成2。为避免这种小数部分被删减现象,使用-fscale选项强迫进行缩放
3dcalc -a d1+orig -b d2+orig -expr 'a/b' -prefix quot -fscale b) 最好的方法是结果采用'float'型,可设置输出数据集为float型: 3dcalc -a d1+orig -b d2+orig -expr 'a/b' -prefix quot -datum float
c) 也许有时只想取商数的整数部分,即9/4=2, 而不是2.24,可使用-nscale选项强迫结果不进行缩放 3dcalc -a d1+orig -b d2+orig -expr 'a/b' -prefix quot -nscale 3dcalc的参数(必须包含在命令行内):
-a dnam = 读取数据集'dname' ,并在表达式expression (-expr)中称其体素值为'a'。3dcalc可以最 多使用24个数据集名(-a, -b, -c, ... -z)。
** 如果在表达式中使用某字母,但在数据集选项中没有指定,则其值设为0
** 如果字母后接一数字,那么数字被用来选择数据集中某一sub-brick(indexes start at 0)。 -expr = 表达式以单引号(quotes)括信。将表达式应用于输入数据集。 3dcalc的选项:
-verbose = 让程序在执行过程中显示冗余程序
-datum type = 强迫数据集以指定的类型(byte, short, or float)存储。[默认为第1个输入数据集类型] -fscale = 强迫输出数据集进行缩放至最大整数范围。仅在输出数据集为byte或short时有效。 (默认即进行缩放) [默认在计算的值看上去需要缩放时进行缩放,如所有均小于1.0或 有某一值超过整型的上限]
-gscale = 同于'-fscale',介同时强迫每个输出的sub-brick有相同的缩放比例(scaling factor),例 如,这也许对3D+time数据集有用
-nscale = 不对byte或short型输出数据集进行缩放。当对mask数据(仅包含0或1)进行操作时 非常有用。
-prefix pname = 使用 'pname' 作为输出数据集的前缀[default='calc'] -session dir = 使用'dir' 作为输出数据集目录[default='./',即当前目录] -dt tstep = 使用 'tstep'作为人为生成的3D+time数据集的TR -TR tstep = 如果没有指定的话,默认为1s
-taxis N = 如果仅3D数据集输入,通常只有一个3D数据集被计算。使用该选项,可以强迫建 *OR* 立长度为N的时间轴。Step可选。例如,你可能想使用在你的表达式中预先定义好的 -taxis N:tstep 时间变量't' 和/或 'k' ,否则每个结果sub-brick将相同。 例如:'-taxis 121:0.1' 将产生121个时间点,并以TR 0.1为间隙。 注:也可以使用-dt选项指定TR。
注:可以通过使用'1D:n@val,n@val'指定 1D输入数据。如:-dt 0.1 -w '1D:121@0' 注:对于'-dt' 和 '-taxis'选项,'tstep' 都是以s为单位。可以后缀'ms'指定以ms为单位。
-rgbfac A B C = 对一起RGB输入数据集,3个通道(channels r,g,b) 分开以使用3dcalc运算:value = A*r + B*g + C*b。默认值为:A=0.299 B=0.587 C=0.114,给出了灰度强度值。例如,挑选绿通道,使用'-rgbfac 0 1 0'。注意,RGB数据集中每个通道的值为byte型,范围为0..255,因此,'-rgbfac 0.001173 0.002302 0.000447'将重新缩放到范围0..1.0 (i.e., 0.001173=0.299/255, etc.) 数据集类型:
最常用的AFNI 数据集类型为 'byte', 'short' 和 'float'。
数据集可以在每个sub-brick后附1个向量。其主要用途是允许short型数据表示非整数值,但却只有float数据的一半大小。
例如,考虑一个short数据集后附1个标量0.0001,这样就可以表示-32.768~+32.767,精度为0.001。 3D+time数据集:
新版本的3dcalc可以操作3D+time 数据集。每个输入数据集可以是下列情况的一种:
a) 是普通的3D数据集(no time);b) 3D+time数据集并指定sub-brick索引(如 '-b3');c) 3D+time数据集不使用sub-brick索引(如 '-b')。也可使用multi-brick 'bucket' 数据集。 输入数据集的名称:
可以以下列形式'prefix+view', 'prefix+view.HEAD', 或 'prefix+view.BRIK'指定。并可以附上1个sub-brick选择列表。例如:
fred+orig[5..8] or [5-8] ==> use #5, #6, #7, and #8 fred+orig[5..13(2)] or [5-13(2)] ==> use #5, #7, #9, #11, and #13
fred+orig[0..$(3)] 可以用字符'$'表示数据集中最后一个sub-brick 同时,也可以在输入数据集后使用语法(syntax)限定数值的范围,例如: fred+orig[5..7]<100..200>
注:字符 '$ ( ) [ ] < >' 都是Linux中shell专用字符,可以将整个输入数据集和选择列表一起括在前向单引号(')内避免冲突。例如:'fred+orig[5..7,9]'。(也可以使用双引号) 1D 时间序列:
也可以输入1个'*.1D' 时间序列来代替数据集。这种情况下,每个空间的体素值在n时间点将相同,并且为时间序列文件中的第n个值。至少必须输入1个真实数据集。如果所有输入数据集为3D(single sub-brick)或是来自multi-brick的一个sub-brick,输出数据集将是一个人为生成的3D+time数据集。 例如,假设'a3D+orig'为3D数据集 3dcalc -a a3D+orig -b b.1D -expr \ 坐标和预定义的值:
如果你在指定数据集时没有使用'-x', '-y', or '-z' ,体素的空间坐标将会载入这些变量。例如:表达式 'a*step(x*x+y*y+z*z-100)' 将会把所有与距离半径10mm范围内的体素清0。
同样,'-t' 如果没有被数据集或*.1D输入使用,将会作为变量保存体素的时间坐标。请指定该变量的单位,可以是ms, s 或Hertz。另外,数据集的各层面之间可能具有不同的时间位移,这就允许对't'进行运算。使用3dinfo程序可以找出数据集的结构。
同样,如果没有被使用,'-i', '-j'和 '-k'可作为存储体素空间索引坐标的变量;'-l' 作为时间索引坐标变量。 否则,没有指定的字母初值设为0。 使用下标:
3dcalc通常的运算严格控制在per-voxel的基础上。没有不同空间或时间值的'cross-talk'。使用下标特性允许相对于基准体素,指向不同位置的变量。例如: -a fred+orig -b 'a[1,0,0,0]' -c 'a[0,0,0,2]'
这表示'a' 代替fred+orig数据集中的1个值,'b' 代表x-方向下1坐标体素, 'c' 代表相同位置time serials 下1个体素。
使用该性质,首先必须定义基准数据集(e.g., 'a')。然后基准数据集后接不同的下标(整数),表示x-, y-, z-和-t方向的位移。
为方便使用,下面的简写可代替下标表示坐标平移:
[1,0,0,0] == +i [-1, 0, 0, 0] == -i [0,1,0,0] == +j [ 0,-1, 0, 0] == -j
[0,0,1,0] == +k [ 0, 0,-1, 0] == -k [0,0,0,1] == +l [ 0, 0, 0,-1] == -l
当位移到达边界并引用数据集范围外的体素时,可以(假设x range 0..99,+2i): STOP => 在数据集边缘停止平移(返回边缘值 voxel 99)
WRAP => 绕至数据集相反的边缘(返回相反方向体素值 voxel 1) ZERO => 返回0
可以通过开关选项指定: '-dsSTOP', '-dsWRAP', 或 '-dsZERO',默认为STOP。 问题:
* 不能对Complex-valued类型数据集进行运算 * 使用Differential subscripts降低程序执行速度 表达式:
运算符 + - * / **及圆括号。指向数据集的变量及选择列列,以及未指定的预定义的变量。 内建的函数包括:
sin, cos, tan, asin, acos, atan, atan2, sinh, cosh, tanh, asinh, acosh, atanh, exp, log, log10, abs, int, sqrt, max, min, J0, J1, Y0, Y1, erf, erfc, qginv, qg, rect, step, astep, bool, and, or, mofn, sind, cosd, tand, median, lmode, hmode, mad, gran, uran, iran, eran, lran, orstat, mean, stdev, sem, Pleg 比较有用的函数说明如下:
* qg(x) 标准正态分布的翻转累积分布函数(reversed cdf) * qginv(x) qg函数的逆函数 * mean(a,b,c,...) 计算各输入参数的均值 * stdev(a,b,c,...) 计算各输入参数的标准差
* sem(a,b,c,...) 计算各输入参数的标准误[sem(n arguments) = stdev(same)/sqrt(n)] 下面的这些函数设计用来实验逻辑功能:
step(x) = {1 if x>0 , 0 if x<=0}, rect(x) = {1 if abs(x)<=0.5, 0 if abs(x)>0.5}, bool(x) = {1 if x != 0.0 , 0 if x == 0.0}, equals(x,y = 1-bool(x-y) = { 1 if x == y , 0 if x != y }, ispositive(x) = { 1 if x > 0; 0 if x <= 0 },
and(a,b,...,c) = {1 if all arguments are nonzero, 0 if any are zero} or(a,b,...,c) = {1 if any arguments are nonzero, 0 if all are zero} mofn(m,a,...,c) = {1 if at least 'm' arguments are nonzero, 0 otherwise} argmax(a,b,...) = index of largest argument; = 0 if all args are 0 还有一些用来转变统计值的函数(略)。 (4)3dTstat程序及数据的标准化 Usage: 3dTstat [options] dataset
对3D+time数据集计算1个或多个 voxel-wise统计量,并存储在1个bucket数据集中 Options:
-mean = 计算输入数据集的均值[默认]
-slope = 计算输入数据集的平均坡(mean slope) vs. time -stdev = 计算输入数据集的标准差 注:该值在平均坡被去除后计算
-cvar = 计算输入数据集的变异系数[cv=stdev/fabs(mean)]
** 注:可在上述2选项后加NOD关闭detrending操作。例如-stdevNOD或-cvarNOD
-MAD = 计算输入数据集的中值绝对偏差(median absolute deviation, MAD) [undetrended] MAD = median(|voxel-median(voxel)|)
-DW = 计算输入数据集的杜宾-沃森统计量(Durbin-Watson Statisti)[detrended] **根据统计学原理,对时间序列数据而言,如果自相关存在,就意味着一种有显著影响的因素
——时间序列没有在回归模型的考虑之中,从而使误差平方和不是最小值,这样就不能进行有效的判断。因此,应对
时间序列数据进行自相关检验。最常见的自相关检验是杜宾—沃森检验,简称DW检验,DW检验统计量的计算公式为:
et表示某一项按时间序列排列的因变量的残差项,et-1表示前一项因变量的残差项。
查Durbin-Watson表可得到两个DW界值(上、下限):Du和Dl,如果Dl < DW < 4-Du ,认为无自相关。 还有选项-median, -min, -max, -absmax, -argmin, -argmax, -argabsmax分别表示计算输入数据集的中值、最小值、最大值、最大绝对值、最小值的索引值、最大值的索引值、最大绝对值的索引值。全部都不需要进行detrend操作[undetrended]。
-prefix p = 使用字符串 'p' 作为输出数据集的前缀[DEFAULT = 'stat']
datum d = 使用指定的类型d('byte', 'short', 或'float')作为输出数据集存储类型[DEFAULT=float] -autocorr n = 计算自相关函数并返回最前n个系数值 -autoreg n = 计算自回归系数并返回最前n个系数值 输出数据集为1个bucket 数据集。 □ 数据的标准化(vs. time)
3dTstat –prefix r1mean r1blur+orig 3dTstat –prefix r2mean r2blur+orig
3dcalc –prefix r1norm –a r1blur+orig. –b r1mean+orig. –c combmask+orig –expr '(a/b*100)*c' 3dcalc –prefix r2norm –a r2blur+orig. –b r2mean+orig. –c combmask+orig –expr '(a/b*100)*c' (5) 3dTcat 程序和多个run连接(去线性漂移)
将输入的数据集sub-bricks连接成一个大的3D+time数据集。 Usage: 3dTcat options 选项:
-prefix pname = 使用 'pname'作为输出数据集的前缀(或-output pname, 默认为'tcat') -session dir = 指定'dir' 输出数据集的路径(default='./'=current working directory) -glueto fname = 添加sub-bricks至'fname' 数据集的末尾(与-prefix可相互替换) -dry = 执行 'dry run'; 也就是说只输出显示将要做什么。 -verb = 在程序执行过程中显示一些冗余信息。(-dry 意味着 -verb).
-rlt = 分别地为从每个输入数据集载入的每个体素的时间序列去除线性超势(remove linear trends, RLT)。也就是说,从每个数据集的数据被分别地detrended。 注:1) -rlt 为每个体素去除'a+b*t'最小二乘法拟合。这意味着mean和trend都被 去除。这样就使得用AFNI内部的FIM无法计算强度的%改变。
2) 为使得每个数据时间序列的mean在执行后都加回,使用选项'-rlt+'。这样,只 有斜坡(线性超势)'b*t'被去除。
3) 加回所有数据集时间序列的总体均值(overall mean),使用选项'-rlt++'。这样, 各个输入数据集的'a+b*t'被分别去除,在最后,再加上所有输入数据集的均值。 4) -rlt 可对shorts或floats数据集处理,但不能处理complex或byte类型数据集。 注意事项:
* TR以及其它时间轴信息从第1个输入数据集获得。如果没有输入数据集包含这样的信息,TR则设为1.0s。可以使用3drefit程序改变。
* Sub-bricks以指定的顺序输出,并且不一定是原始数据集的顺序。例如使用fred+orig[0..$(2),1..$(2)] 会导致fred+orig内的sub-bricks以间隔的顺序输出至新的数据集。如果使用了-rlt选项,从输入数据集选择的sub-bricks将重新排序至输出数据集,并且对该顺序进行detrended。例: 3dTcat -prefix normlink r1stded+orig r2stded+orig
注:concat.1D,用于有多个run相接的3dDeconvolve处理,这样会使结果更准确。