nipype 笔记
什么是nipype?
-
功能
- 提供多种脑影像处理软件的统一接口(SPM, FSL, FreeSurfer, AFNI, ANTS, Camino, MRtrix, MNE, Slicer等)
- 允许使用任何软件包创建由多个处理步骤组成的工作流
- 通过并行执行插件来优化计算
-
组成(主要部分)
- 接口(interfaces):一个可以调用外部package的模块
- 工作流(workflow engine):
- 节点(Node/MapNode):包装(wrap)在工作流中调用的接口
- 工作流(workflow):连边是数据流的图
- 执行插件(execution plugins):描述工作流如何执行
接口
运行code的核心部分
帮助函数 xx.help
# xx–>命令
- 解释
- 输入参数
- 输出参数
错误提示
节点
-
以合理的顺序执行多个接口,可以更高效的分析——需要把接口放到节点中。
-
每个节点执行一个确定的函数,包括:
1、节点名;
2、接口类别;
3、至少一个输入数据;
4、至少一个输出数据。 -
设置节点的基本格式
nodename = Nodetype(interface_function(), name='labelname') # nodename --> python环境中,节点的变量名 # Nodetype --> 创造的节点类型:Node,MapNode,JoinNode【这几个类型有啥区别?】 # interface_function -->节点执行的具体函数,可以是用户自定义的,也可以是接口调用的 # labelname --> 工作流环境中,节点的标签名
-
示例
from nipype.interfaces.fsl import BET # Import BET from the FSL interface from nipype import Node # Import the Node module bet = Node(BET(frac=0.3), name='bet_node') # Create Node --> bet是节点名,Node是节点类型,BET是调用的接口函数,name是工作流中的标签名 bet.inputs.in_file = '/data/ds000114/sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz' bet.inputs.out_file = '/output/node_T1w_bet.nii.gz' # Specify node inputs --> 定义输入数据和输出文件名 res = bet.run() # 运行并输出结果
工作流
-
每一个节点按一定的顺序联系起来(上一个节点的输出作为下一个节点的输入)形成工作流。
-
安排串行和并行,根据每个节点(嵌入了接口)的输入和输出,决定哪些节点是串行的哪些是并行的。
-
对数据进行修改时,不涉及修改的部分会直接输出上个run的结果,可以节省计算时间
-
workflow中可以嵌入sub-workflow
-
示例:创建一个simple workflow
from nipype import Node, Workflow from nipype.interfaces import fsl # Import Node and Workflow object and FSL interface from os.path import abspath in_file = abspath("/data/ds000114/sub-01/ses-test/anat/sub-01_ses-test_T1w.nii.gz") # 此处使用绝对路径,与工作流base文件夹路径设置有关 For reasons that will later become clear, it's important to