In [1]:
import nipype

from nipype.interfaces import fsl
from nipype.interfaces import ants
from nipype.interfaces import freesurfer
import os

In [2]:
def pathfinder(subject, foldername, filename):
    from os.path import join as opj
    struct_path = opj(foldername, subject, filename)
    return struct_path

In [3]:
data_dir = os.path.abspath('examples/')
subject_list =sorted(next(os.walk(data_dir))[1])
T1_identifier = 't1w.nii.gz'

In [4]:
subject_list


Out[4]:
['another_guy', 'myself', 'yet_another']

In [5]:
CORES=4
TASKS=2

In [6]:
infosource = nipype.Node(nipype.IdentityInterface(fields=['subject_id']),name="infosource")
infosource.iterables = ('subject_id', subject_list)

In [7]:
sink = nipype.Node(interface=nipype.DataSink(),name='sink')
sink.inputs.base_directory = data_dir

substitutions=[]
for i in range(len(subject_list)):
    substitutions+= [("_neck_remove"+str(i),"")]
substitutions+= [("_subject_id_", "")]
sink.inputs.substitutions =substitutions

In [8]:
sink2 = nipype.Node(interface=nipype.DataSink(),name='sink2')
sink.inputs.base_directory = data_dir

substitutions=[]
for i in range(len(subject_list)):
    substitutions+= [("_N4_FC"+str(i), "")]
substitutions+= [("_subject_id_", "")]
sink.inputs.substitutions =substitutions

In [9]:
# Neck removal by FSL robustfov
neck_remove=nipype.MapNode(interface=fsl.RobustFOV(), name='neck_remove', iterfield=['in_file'])
neck_remove.inputs.out_roi="t1w_fov.nii.gz"

In [10]:
# Field Inhomogenity estimation (if any) and removal by ANTs N4BiasFieldCorrection
N4_FC=nipype.MapNode(interface=ants.N4BiasFieldCorrection(), name="N4_FC", iterfield=['input_image'])
N4_FC.inputs.dimension = 3
N4_FC.inputs.output_image="t1w_fov_N4.nii.gz"
N4_FC.inputs.num_threads=CORES

In [11]:
workflow = nipype.Workflow('workflow')
workflow.connect([(infosource, neck_remove, [(('subject_id', pathfinder,data_dir, T1_identifier), 'in_file')]),
                  (neck_remove, sink, [('out_roi', '@in_file')]),
                  (neck_remove, N4_FC, [('out_roi', 'input_image')]),
                  (N4_FC, sink2, [('output_image', '@in_file')])
                 ])

In [12]:
#workflow.run()
workflow.run('MultiProc', plugin_args={'n_procs': TASKS})


170927-19:27:37,849 workflow INFO:
	 Workflow workflow settings: ['check', 'execution', 'logging']
170927-19:27:37,929 workflow INFO:
	 Running in parallel.
170927-19:27:37,933 workflow INFO:
	 Executing: neck_remove.a2 ID: 0
170927-19:27:37,937 workflow INFO:
	 Executing: neck_remove.a0 ID: 2
170927-19:27:37,941 workflow INFO:
	 Executing node neck_remove.a2 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpHhzLBN/workflow/_subject_id_yet_another/neck_remove
170927-19:27:37,944 workflow INFO:
	 Executing node neck_remove.a0 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpl51Wzz/workflow/_subject_id_another_guy/neck_remove
170927-19:27:37,963 workflow INFO:
	 Executing node _neck_remove0 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpHhzLBN/workflow/_subject_id_yet_another/neck_remove/mapflow/_neck_remove0
170927-19:27:37,973 workflow INFO:
	 Executing node _neck_remove0 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpl51Wzz/workflow/_subject_id_another_guy/neck_remove/mapflow/_neck_remove0
170927-19:27:37,974 workflow INFO:
	 Running: robustfov -i /Users/poggiali/GitHub/dementiawindow/examples/yet_another/t1w.nii.gz -r t1w_fov.nii.gz -m t1w_to_ROI.nii.gz
170927-19:27:37,985 workflow INFO:
	 Running: robustfov -i /Users/poggiali/GitHub/dementiawindow/examples/another_guy/t1w.nii.gz -r t1w_fov.nii.gz -m t1w_to_ROI.nii.gz
170927-19:28:05,184 interface INFO:
	 stdout 2017-09-27T19:28:05.183740:Final FOV is: 
170927-19:28:05,186 interface INFO:
	 stdout 2017-09-27T19:28:05.183740:0.000000 180.000000 0.000000 448.000000 101.000000 346.000000 
170927-19:28:05,188 interface INFO:
	 stdout 2017-09-27T19:28:05.183740:
170927-19:28:05,720 workflow INFO:
	 [Job finished] jobname: neck_remove.a2 jobid: 0
170927-19:28:05,723 workflow INFO:
	 Executing: sink.a2 ID: 1
170927-19:28:05,732 workflow INFO:
	 Executing node sink.a2 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpLveZOh/workflow/_subject_id_yet_another/sink
170927-19:28:05,746 interface INFO:
	 sub: /Users/poggiali/GitHub/dementiawindow/examples/_subject_id_yet_another/_neck_remove0/t1w_fov.nii.gz -> /Users/poggiali/GitHub/dementiawindow/examples/yet_another/_neck_remove0/t1w_fov.nii.gz
170927-19:28:05,765 workflow INFO:
	 [Job finished] jobname: sink.a2 jobid: 1
170927-19:28:05,769 workflow INFO:
	 Executing: N4_FC.a2 ID: 4
170927-19:28:05,780 workflow INFO:
	 Executing node N4_FC.a2 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpNSt9Kd/workflow/_subject_id_yet_another/N4_FC
170927-19:28:05,791 workflow INFO:
	 Executing node _N4_FC0 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpNSt9Kd/workflow/_subject_id_yet_another/N4_FC/mapflow/_N4_FC0
170927-19:28:05,799 workflow INFO:
	 Running: N4BiasFieldCorrection -d 3 --input-image /private/var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpHhzLBN/workflow/_subject_id_yet_another/neck_remove/mapflow/_neck_remove0/t1w_fov.nii.gz --output t1w_fov_N4.nii.gz
170927-19:28:07,735 interface INFO:
	 stdout 2017-09-27T19:28:07.734670:Final FOV is: 
170927-19:28:07,737 interface INFO:
	 stdout 2017-09-27T19:28:07.734670:0.000000 180.000000 0.000000 448.000000 101.000000 346.000000 
170927-19:28:07,739 interface INFO:
	 stdout 2017-09-27T19:28:07.734670:
170927-19:28:08,283 workflow INFO:
	 [Job finished] jobname: neck_remove.a0 jobid: 2
170927-19:28:08,287 workflow INFO:
	 Executing: N4_FC.a0 ID: 3
170927-19:28:08,300 workflow INFO:
	 Executing node N4_FC.a0 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpuy6vRs/workflow/_subject_id_another_guy/N4_FC
170927-19:28:08,316 workflow INFO:
	 Executing node _N4_FC0 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpuy6vRs/workflow/_subject_id_another_guy/N4_FC/mapflow/_N4_FC0
170927-19:28:08,329 workflow INFO:
	 Running: N4BiasFieldCorrection -d 3 --input-image /private/var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpl51Wzz/workflow/_subject_id_another_guy/neck_remove/mapflow/_neck_remove0/t1w_fov.nii.gz --output t1w_fov_N4.nii.gz
170927-19:30:42,393 workflow INFO:
	 [Job finished] jobname: N4_FC.a2 jobid: 4
170927-19:30:42,396 workflow INFO:
	 Executing: sink2.a2 ID: 5
170927-19:30:42,402 workflow INFO:
	 Executing node sink2.a2 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmp6jApB4/workflow/_subject_id_yet_another/sink2
170927-19:30:42,419 workflow INFO:
	 [Job finished] jobname: sink2.a2 jobid: 5
170927-19:30:42,422 workflow INFO:
	 Executing: sink.a0 ID: 7
170927-19:30:42,435 workflow INFO:
	 Executing node sink.a0 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpaUKmVU/workflow/_subject_id_another_guy/sink
170927-19:30:42,443 interface INFO:
	 sub: /Users/poggiali/GitHub/dementiawindow/examples/_subject_id_another_guy/_neck_remove0/t1w_fov.nii.gz -> /Users/poggiali/GitHub/dementiawindow/examples/another_guy/_neck_remove0/t1w_fov.nii.gz
170927-19:30:42,452 workflow INFO:
	 [Job finished] jobname: sink.a0 jobid: 7
170927-19:30:42,454 workflow INFO:
	 Executing: neck_remove.a1 ID: 8
170927-19:30:42,458 workflow INFO:
	 Executing node neck_remove.a1 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpa17dNl/workflow/_subject_id_myself/neck_remove
170927-19:30:42,466 workflow INFO:
	 Executing node _neck_remove0 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpa17dNl/workflow/_subject_id_myself/neck_remove/mapflow/_neck_remove0
170927-19:30:42,473 workflow INFO:
	 Running: robustfov -i /Users/poggiali/GitHub/dementiawindow/examples/myself/t1w.nii.gz -r t1w_fov.nii.gz -m t1w_to_ROI.nii.gz
170927-19:30:44,903 workflow INFO:
	 [Job finished] jobname: N4_FC.a0 jobid: 3
170927-19:30:44,908 workflow INFO:
	 Executing: sink2.a0 ID: 6
170927-19:30:44,917 workflow INFO:
	 Executing node sink2.a0 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpGRVJ8F/workflow/_subject_id_another_guy/sink2
170927-19:30:44,949 workflow INFO:
	 [Job finished] jobname: sink2.a0 jobid: 6
170927-19:31:00,972 interface INFO:
	 stdout 2017-09-27T19:31:00.972118:Final FOV is: 
170927-19:31:00,974 interface INFO:
	 stdout 2017-09-27T19:31:00.972118:0.000000 180.000000 0.000000 560.000000 140.000000 396.000000 
170927-19:31:00,976 interface INFO:
	 stdout 2017-09-27T19:31:00.972118:
170927-19:31:01,521 workflow INFO:
	 [Job finished] jobname: neck_remove.a1 jobid: 8
170927-19:31:01,524 workflow INFO:
	 Executing: sink.a1 ID: 9
170927-19:31:01,531 workflow INFO:
	 Executing: N4_FC.a1 ID: 10
170927-19:31:01,533 workflow INFO:
	 Executing node sink.a1 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpWUgSBz/workflow/_subject_id_myself/sink
170927-19:31:01,544 workflow INFO:
	 Executing node N4_FC.a1 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpsuHivo/workflow/_subject_id_myself/N4_FC
170927-19:31:01,550 interface INFO:
	 sub: /Users/poggiali/GitHub/dementiawindow/examples/_subject_id_myself/_neck_remove0/t1w_fov.nii.gz -> /Users/poggiali/GitHub/dementiawindow/examples/myself/_neck_remove0/t1w_fov.nii.gz
170927-19:31:01,558 workflow INFO:
	 Executing node _N4_FC0 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpsuHivo/workflow/_subject_id_myself/N4_FC/mapflow/_N4_FC0
170927-19:31:01,570 workflow INFO:
	 Running: N4BiasFieldCorrection -d 3 --input-image /private/var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmpa17dNl/workflow/_subject_id_myself/neck_remove/mapflow/_neck_remove0/t1w_fov.nii.gz --output t1w_fov_N4.nii.gz
170927-19:31:01,579 workflow INFO:
	 [Job finished] jobname: sink.a1 jobid: 9
170927-19:33:31,968 workflow INFO:
	 [Job finished] jobname: N4_FC.a1 jobid: 10
170927-19:33:31,971 workflow INFO:
	 Executing: sink2.a1 ID: 11
170927-19:33:31,983 workflow INFO:
	 Executing node sink2.a1 in dir: /var/folders/5_/33p0sl3j2_ngqn_gghyy2zj00000gn/T/tmplr2uEu/workflow/_subject_id_myself/sink2
170927-19:33:31,999 workflow INFO:
	 [Job finished] jobname: sink2.a1 jobid: 11
Out[12]:
<networkx.classes.digraph.DiGraph at 0x1124e2a50>

In [ ]: