安装 AFQ以及babyAFQ,24小时趟坑记录
AFQ和babyAFQ是大脑白质神经纤维束分割和分析软件,分别面向成人和婴幼儿群体,它能够取得更高的分析精度。软件的作者是Yeatman,目前在斯坦福大学的Brain Development & Education Lab。为了比较可靠地分析大脑白质的发育,病变过程,AFQ和babyAFQ已经被成功应用到了一系列的工作中,例如阿尔茨海默病的诊断等。不过要部署工具到本地,还费了些周折。
需要一些计算库的重新编译,软件变量的适配等工作,总共花费了24小时。废话不多说,先展示一下demo数据上的六个,神经纤维束的结果图。
要安装和成功安装使用AFQ和babyAFQ,需要提前准备好几个工具(Matlab, FSL, ANTs, FreeSurfer, Mrtrix3,VistaSoft,SPM和它的updated version。不像在AFQ官方GitHub网站中简略的所说那样,那样的描述曾欺骗了我带的硕士,让他以为很容易就安装,但实际上如果没有安装依赖软件,那将是一个巨大的工作量。而这是值得需要说明的,因为会报起奇奇怪怪的问题,特别是基础软件环境还不是那么完备的情况下。
It requires functions from the MATLAB stats toolbox, vistasoft and SPM.
此外,除了上述的Matlab的Statistics and Machine Learning Toolbox还需要安装两个packages,Image Processing Toolbox和Mapping Toolbox。
在准备好了上述软件,环境之后,主要会存在两方面的问题1)Mex,2)在Matlab中调用系统环境软件。
1)Mex编译, libmex.dylib errors
- 如果直接执行AFQ,会提示调用SPM/VistaSoft/AFQ的*.mexmaci64文件,在苹果系统上需要给它们开使用权限,否则就会报错。
点击取消,然后在“隐私和安全性”中的“安全性”下方,就能看到淡出的允许按钮。点击允许就可以。
此外,可能还需要进入到有*.mexmaci64的文件夹,在终端用下面的code 就不会弹出错误。参考之前的博文“MacBook matlab 无法打开***.mexmaci64文件”
find . -name "*.mexmaci64" -exec xattr -d com.apple.quarantine {} \;
- 设置了上面的步骤之后,还会碰到错误
'/usr/local/lib/libmex.dylib' (no such file)
,MEXFILE error, libmex.dylib not loaded
这是因为*.mexmaci64系统不匹配的原因造成的,需要重新编译codes。否则就会报错,如下所示。
需要说明的是,采用mex编译c或者c++代码,需要加上-compatibleArrayDims 选项,否则会报错。
mex -compatibleArrayDims /***/spm12/src/spm_global.c
类似于下图的错误。
- 这里有个比较特殊的文件,它需要依赖额外被保存在其它文件夹中的库函数,mex函数需要定制一下,否则会提示找不到jama中的库函数。
mex -compatibleArrayDims -O -I/***/vistasoft/mrDiffusion/src/jama /******/vistasoft/mrDiffusion/src/dtiFiberTracker.cxx
2)在Matlab中调用系统环境软件,解决command not found,no license
调通了上面的步骤,系统还是会报错,虽然当时很崩溃,但现在看来也就是两个steps了。
1)在matlab中,会找不到FSL/MRtrix/FreeSurfer的命令,会弹出 zsh: command not found。
实际上,这是因为matlab和系统之间的环境变脸并不通用,需要在matlab中重新设置环境变量,如下所示。
setenv('PATH', [getenv('PATH') ':/usr/local/fsl/bin']);
2)比较搞笑的是matlab中添加Freesurfer 的license和官方教程中还有一些不同,不是只把license复制到FREESURFER_HOME中就可以。
在这里纠结了好大一会,因为官方的文档似乎不管用;还好大佬给了提示,通过设置FS_LICENCE变量,然后就没问题,顺利得到神经纤维束的图。
setenv('FS_LICENSE', [getenv('FS_LICENSE') '/Applications/freesurfer/7.2.0/license.txt']);
3) 集群配置
我们的集群基于slurm架构,用的是centos7系统,实际上更容易安装和配置,几乎没有遇到问题,除了vistasoft的一个版本问题。
module load *
setenv('PATH', [getenv('PATH') ':/public/software/apps/fsl/bin']);
****
run('babyAFQ_demo.m')
然后即可。
Happy :)
感谢上海科技大学黄忠锐和顾金晨两位同学协助。