脑核磁共振数据处理——fMRI

Gretna2.0 中遇到的问题和Bug(持续更新)

2018-03-15  本文已影响22人  韧心222

用了很久的博客园,发现界面越来越不好用,于是想把内容逐步迁移过来,于是这是第一篇, 原文在这里 Gretna2.0 中遇到的问题和Bug

  1. 在做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
  1. Slice Timing

2018.7.3

今天,在仿照Gretna写自己的Nipype的时候,发现Grenta的一个Bug,在此报告一下。主要报告的版本是Gretna 2.0。

在Slice Timing里,Gretna的Slice order部分有六个选项:

Slice Timing
前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会变成多少呢?

SliceOrder

这肯定不是我们想要的东东,同样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开发团队的反馈,承诺在下一版本中更正。

上一篇 下一篇

猜你喜欢

热点阅读