Gretna2.0 中遇到的问题和Bug(持续更新)
用了很久的博客园,发现界面越来越不好用,于是想把内容逐步迁移过来,于是这是第一篇, 原文在这里 Gretna2.0 中遇到的问题和Bug
- 在做Normalize的时候,报错“Cannot find T1 image (e.g. *.dcm in T1 Directory), Please Check again!”,但是Pipeline的时候不会报错。
背景:之前使用Gretna做批处理,进行到一半的时候报错,说“Something went bad... the pipeline has FAILED”,当时查了一下,发现是第84个被试出了问题,于是以为是第84个被试的数据有问题,就把第84个被试从DICOM和T1数据的文件夹中移除了,但是并没有删除GretnaFunNIfTI文件夹下的subj_0084。同时开始分步运行Gretna。
结果问题就出在“没有删除GretnaFunNIfTI文件夹下的subj_0084”,在Gretna的分步计算过程中,输入变成了GretnaFunNIfTI下的文件,这样一来,gretna就会在T1文件夹下寻找subj_0084,找不到就报错了。
【备注】调试GUI文件夹下的gretna_GUI_PreprocessInterface.m文件
为了避免这类问题,我把Gretna的源代码进行了修改,使其提示更加人性化,修改的代码如下:
% modified by supakito
FlagEmptyies = cellfun(@isempty, InputT1FileList);
if any(FlagEmptyies)
NoT1Subjs = strjoin(SList(find(FlagEmptyies)),',');
errordlg(['Cannot find T1 image (e.g. *.dcm in T1 Directory), Please Check ',NoT1Subjs]);
return;
end
% end of modify by supakito
用于替换Gretna的gretna_GUI_PreprocessInterface.m中735行的:
if any(cellfun(@isempty, InputT1FileList))
errordlg('Cannot find T1 image (e.g. *.dcm in T1 Directory), Please Check again!');
return;
end
- Slice Timing
2018.7.3
今天,在仿照Gretna写自己的Nipype的时候,发现Grenta的一个Bug,在此报告一下。主要报告的版本是Gretna 2.0。
在Slice Timing里,Gretna的Slice order部分有六个选项:
![](https://img.haomeiwen.com/i11133201/8c07fb2ce7867e1f.png)
前2个选项都没有什么问题,但是第三个和第四个就有些问题了,在Gretna的源代码(
{GretnaBaseDir}/RunFun/gretna_RUN_SliTim.m
)中,是这样写的:
% {GretnaBaseDir}/RunFun/gretna_RUN_SliTim.m
switch SInd
case 1 %alt+z
SliOrd=[1:2:SliNum, 2:2:SliNum];
case 2 %alt+z2
SliOrd=[2:2:SliNum, 1:2:SliNum];
case 3 %alt-z
SliOrd=[SliNum:-2:1, SliNum:-2:2];
case 4 %alt-z2
SliOrd=[SliNum:-2:2, SliNum:-2:1];
case 5 %seq+z
SliOrd=1:SliNum;
case 6 %seq-z
SliOrd=SliNum:-1:1;
otherwise
error('Error: Slice Order Index');
end
当Slnd=3的时候,SliOrd = [SliNum:-2:1, SliNum:-2:2];
但是你们注意到了么,当SliNum为偶数的时候(例如30),那么SliOrd会变成多少呢?
![](https://img.haomeiwen.com/i11133201/7b0e988afa4fc1e8.png)
这肯定不是我们想要的东东,同样4也有这样的问题,正确的写法应该是
% {GretnaBaseDir}/RunFun/gretna_RUN_SliTim.m
switch SInd
case 1 %alt+z
SliOrd=[1:2:SliNum, 2:2:SliNum];
case 2 %alt+z2
SliOrd=[2:2:SliNum, 1:2:SliNum];
% modified by supakito
case 3 %alt-z
SliOrd=[flip([1:2:SliNum]), flip([2:2:SliNum])]
case 4 %alt-z2
SliOrd=[flip([2:2:SliNum]), flip([1:2:SliNum])]
% end modified by supakito
case 5 %seq+z
SliOrd=1:SliNum;
case 6 %seq-z
SliOrd=SliNum:-1:1;
otherwise
error('Error: Slice Order Index');
end
此Bug已得到了Gretna开发团队的反馈,承诺在下一版本中更正。