Skip to content

Commit df3f9b3

Browse files
author
David Ellis
committed
FIX: Freesurfer workflow fixes
1 parent 918f4f0 commit df3f9b3

File tree

6 files changed

+48
-25
lines changed

6 files changed

+48
-25
lines changed

examples/smri_fsreconall.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"""
2525
Assign the tutorial directory
2626
"""
27+
2728
tutorial_dir = os.path.abspath('smri_fsreconall_tutorial')
2829
if not os.path.isdir(tutorial_dir):
2930
os.mkdir(tutorial_dir)

nipype/workflows/smri/freesurfer/autorecon2.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,7 @@ def create_AutoRecon2(name="AutoRecon2", longitudinal=False,
637637

638638
hemi_wf.connect([(extract_main_component, hemi_outputspec, [('out_file', 'orig_nofix')]),
639639
(inflate1, hemi_outputspec, [('out_file', 'inflated_nofix')]),
640+
(smooth1, hemi_outputspec, [('out_file', 'smoothwm_nofix')]),
640641
(qsphere, hemi_outputspec, [('out_file', 'qsphere_nofix')]),
641642
(remove_intersection, hemi_outputspec, [('out_file', 'orig')]),
642643
(make_surfaces, hemi_outputspec, [('out_white', 'white'),
@@ -695,7 +696,8 @@ def create_AutoRecon2(name="AutoRecon2", longitudinal=False,
695696
(wm_seg, outputspec, [('out_file', 'wm_seg')]),
696697
(edit_wm, outputspec, [('out_file', 'wm_aseg')]),
697698
(pretess, outputspec, [('out_file', 'wm')]),
698-
(fill, outputspec, [('out_file', 'filled')]),
699+
(fill, outputspec, [('out_file', 'filled'),
700+
('log_file', 'ponscc.cut.log')]),
699701
])
700702

701703
for hemi, hemi_wf in [('lh', ar2_lh), ('rh', ar2_rh)]:

nipype/workflows/smri/freesurfer/autorecon3.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
from .utils import createsrcsubj
88
from nipype.interfaces.io import DataGrabber
99

10-
def create_AutoRecon3(name="AutoRecon3", qcache=False, plugin_args=None):
10+
def create_AutoRecon3(name="AutoRecon3", qcache=False, plugin_args=None,
11+
th3=True):
1112

1213
# AutoRecon3
1314
# Workflow
@@ -252,7 +253,8 @@ def create_AutoRecon3(name="AutoRecon3", qcache=False, plugin_args=None):
252253
(ar3_divide, hemi_outputspec1, [('out_file', 'area_mid')]),
253254
(ar3_volume, hemi_outputspec1, [('out_file', 'volume')]),
254255
(ar3_parcellation, hemi_outputspec1, [('out_file', 'aparc_annot')]),
255-
(ar3_paint, hemi_outputspec1, [('out_file', 'jacobian_white')]),
256+
(ar3_jacobian, hemi_outputspec1, [('out_file', 'jacobian_white')]),
257+
(ar3_paint, hemi_outputspec1, [('out_file', 'avg_curv')]),
256258
(ar3_surfreg, hemi_outputspec1, [('out_file', 'sphere_reg')]),
257259
(ar3_sphere, hemi_outputspec1, [('out_file', 'sphere')])
258260
])
@@ -335,6 +337,7 @@ def create_AutoRecon3(name="AutoRecon3", qcache=False, plugin_args=None):
335337
parcellation_stats_white = pe.Node(
336338
ParcellationStats(), name="Parcellation_Stats_{0}_White".format(hemisphere) )
337339
parcellation_stats_white.inputs.mgz = True
340+
parcellation_stats_white.inputs.th3 = th3
338341
parcellation_stats_white.inputs.tabular_output = True
339342
parcellation_stats_white.inputs.surface = 'white'
340343
parcellation_stats_white.inputs.hemisphere = hemisphere
@@ -360,6 +363,7 @@ def create_AutoRecon3(name="AutoRecon3", qcache=False, plugin_args=None):
360363
parcellation_stats_pial = pe.Node(ParcellationStats(),
361364
name="Parcellation_Stats_{0}_Pial".format(hemisphere))
362365
parcellation_stats_pial.inputs.mgz = True
366+
parcellation_stats_pial.inputs.th3 = th3
363367
parcellation_stats_pial.inputs.tabular_output = True
364368
parcellation_stats_pial.inputs.surface = 'pial'
365369
parcellation_stats_pial.inputs.hemisphere = hemisphere
@@ -492,11 +496,16 @@ def create_AutoRecon3(name="AutoRecon3", qcache=False, plugin_args=None):
492496
hemiwf2.connect([(contrast, hemi_outputspec2, [('out_contrast', 'wg_pct_mgh'),
493497
('out_stats', 'wg_pct_stats'),
494498
('out_log', 'pctsurfcon_log')]),
495-
(parcellation_stats_white_3, hemi_outputspec2, [('out_color', 'aparc_DKTatlas40_ctab'),
496-
('out_table', 'aparc_DKTatlas40_stats')]),
497-
(cortical_parcellation_3, hemi_outputspec2, [('out_file', 'aparc_DKTatlas40_annot')]),
498-
(parcellation_stats_white_2, hemi_outputspec2, [('out_color', 'aparc_a2009s_ctab'),
499-
('out_table', 'aparc_a2009s_stats')]),
499+
(parcellation_stats_white_3, hemi_outputspec2, [('out_color',
500+
'aparc_DKTatlas40_annot_ctab'),
501+
('out_table',
502+
'aparc_DKTatlas40_annot_stats')]),
503+
(cortical_parcellation_3, hemi_outputspec2, [('out_file',
504+
'aparc_DKTatlas40_annot')]),
505+
(parcellation_stats_white_2, hemi_outputspec2, [('out_color',
506+
'aparc_a2009s_annot_ctab'),
507+
('out_table',
508+
'aparc_a2009s_annot_stats')]),
500509
(cortical_parcellation_2, hemi_outputspec2, [('out_file', 'aparc_a2009s_annot')]),
501510
(parcellation_stats_white, hemi_outputspec2, [('out_color', 'aparc_annot_ctab'),
502511
('out_table', 'aparc_stats')]),
@@ -692,7 +701,7 @@ def create_AutoRecon3(name="AutoRecon3", qcache=False, plugin_args=None):
692701
])
693702

694703
# add brodman area maps to the workflow
695-
ba_WF = create_ba_maps_wf()
704+
ba_WF = create_ba_maps_wf(th3=th3)
696705

697706
ar3_wf.connect([(ar3_lh_wf1, ba_WF, [('outputspec.sphere_reg', 'inputspec.lh_sphere_reg'),
698707
('outputspec.thickness_pial', 'inputspec.lh_thickness'),

nipype/workflows/smri/freesurfer/ba_maps.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from nipype.interfaces.io import DataGrabber
77
from nipype.interfaces.utility import Merge
88

9-
def create_ba_maps_wf():
9+
def create_ba_maps_wf(name="Brodmann_Area_Maps", th3=True):
1010
# Brodmann Area Maps (BA Maps) and Hinds V1 Atlas
1111
inputs = ['lh_sphere_reg',
1212
'rh_sphere_reg',
@@ -30,7 +30,7 @@ def create_ba_maps_wf():
3030
inputspec = pe.Node(IdentityInterface(fields=inputs),
3131
name="inputspec")
3232

33-
ba_WF = pe.Workflow(name="Brodmann_Area_Maps")
33+
ba_WF = pe.Workflow(name=name)
3434

3535
outputSpec = pe.Node(IdentityInterface(fields=['lh_table',
3636
'lh_color',
@@ -96,6 +96,7 @@ def create_ba_maps_wf():
9696
stats_node = pe.Node(ParcellationStats(), name=node_name + '_Stats')
9797
stats_node.inputs.hemisphere = hemisphere
9898
stats_node.inputs.mgz = True
99+
stats_node.inputs.th3 = th3
99100
stats_node.inputs.surface = 'white'
100101
stats_node.inputs.tabular_output = True
101102
stats_node.inputs.copy_inputs = True

nipype/workflows/smri/freesurfer/recon.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ def create_reconall_workflow(name="ReconAll", plugin_args=None):
131131
inputspec.inputs.rh_classifier1 = defaultconfig['rh_classifier']
132132
inputspec.inputs.lh_classifier2 = defaultconfig['lh_classifier2']
133133
inputspec.inputs.rh_classifier2 = defaultconfig['rh_classifier2']
134+
inputspec.inputs.lh_classifier3 = defaultconfig['lh_classifier3']
134135
inputspec.inputs.rh_classifier3 = defaultconfig['rh_classifier3']
135136
inputspec.inputs.src_subject_id = defaultconfig['src_subject_id']
136137
inputspec.inputs.src_subject_dir = defaultconfig['src_subject_dir']
@@ -159,7 +160,7 @@ def create_reconall_workflow(name="ReconAll", plugin_args=None):
159160
('outputspec.talairach', 'inputspec.transform'),
160161
('outputspec.orig', 'inputspec.orig')])])
161162
# create AutoRecon3
162-
ar3_wf, ar3_outputs = create_AutoRecon3(plugin_args=plugin_args)
163+
ar3_wf, ar3_outputs = create_AutoRecon3(plugin_args=plugin_args, th3=defaultconfig['th3'])
163164
# connect inputs for AutoRecon3
164165
reconall.connect([(inputspec, ar3_wf, [('lh_atlas', 'inputspec.lh_atlas'),
165166
('rh_atlas', 'inputspec.rh_atlas'),
@@ -301,7 +302,6 @@ def getDSTransformPath(subjects_dir, subject_id):
301302
('lh_curv', 'surf.@lh_curv'),
302303
('lh_area', 'surf.@lh_area'),
303304
('lh_cortex', 'surf.@lh_cortex'),
304-
('lh_thickness', 'surf.@lh_thickness'),
305305
('lh_smoothwm', 'surf.@lh_smoothwm'),
306306
('lh_sulc', 'surf.@lh_sulc'),
307307
('lh_inflated', 'surf.@lh_inflated'),
@@ -319,7 +319,6 @@ def getDSTransformPath(subjects_dir, subject_id):
319319
('rh_curv', 'surf.@rh_curv'),
320320
('rh_area', 'surf.@rh_area'),
321321
('rh_cortex', 'surf.@rh_cortex'),
322-
('rh_thickness', 'surf.@rh_thickness'),
323322
('rh_smoothwm', 'surf.@rh_smoothwm'),
324323
('rh_sulc', 'surf.@rh_sulc'),
325324
('rh_inflated', 'surf.@rh_inflated'),
@@ -369,16 +368,26 @@ def getDSTransformPath(subjects_dir, subject_id):
369368
('rh_aparc_pial_stats', 'stats.@rh_aparc_pial_stats'),
370369
('lh_aparc_a2009s_annot', 'label.@lh_aparc_a2009s_annot'),
371370
('rh_aparc_a2009s_annot', 'label.@rh_aparc_a2009s_annot'),
372-
('lh_aparc_a2009s_annot_ctab', 'label.@lh_aparc_a2009s_annot_ctab'),
373-
('rh_aparc_a2009s_annot_ctab', 'label.@rh_aparc_a2009s_annot_ctab'),
374-
('lh_aparc_a2009s_annot_stats', 'stats.@lh_aparc_a2009s_annot_stats'),
375-
('rh_aparc_a2009s_annot_stats', 'stats.@rh_aparc_a2009s_annot_stats'),
376-
('lh_aparc_DKTatlas40_annot', 'label.@lh_aparc_DKTatlas40_annot'),
377-
('rh_aparc_DKTatlas40_annot', 'label.@rh_aparc_DKTatlas40_annot'),
378-
('lh_aparc_DKTatlas40_annot_ctab', 'label.@lh_aparc_DKTatlas40_annot_ctab'),
379-
('rh_aparc_DKTatlas40_annot_ctab', 'label.@rh_aparc_DKTatlas40_annot_ctab'),
380-
('lh_aparc_DKTatlas40_annot_stats', 'stats.@lh_aparc_DKTatlas40_annot_stats'),
381-
('rh_aparc_DKTatlas40_annot_stats', 'stats.@rh_aparc_DKTatlas40_annot_stats'),
371+
('lh_aparc_a2009s_annot_ctab',
372+
'label.@lh_aparc_a2009s_annot_ctab'),
373+
('rh_aparc_a2009s_annot_ctab',
374+
'label.@rh_aparc_a2009s_annot_ctab'),
375+
('lh_aparc_a2009s_annot_stats',
376+
'stats.@lh_aparc_a2009s_annot_stats'),
377+
('rh_aparc_a2009s_annot_stats',
378+
'stats.@rh_aparc_a2009s_annot_stats'),
379+
('lh_aparc_DKTatlas40_annot',
380+
'label.@lh_aparc_DKTatlas40_annot'),
381+
('rh_aparc_DKTatlas40_annot',
382+
'label.@rh_aparc_DKTatlas40_annot'),
383+
('lh_aparc_DKTatlas40_annot_ctab',
384+
'label.@lh_aparc_DKTatlas40_annot_ctab'),
385+
('rh_aparc_DKTatlas40_annot_ctab',
386+
'label.@rh_aparc_DKTatlas40_annot_ctab'),
387+
('lh_aparc_DKTatlas40_annot_stats',
388+
'stats.@lh_aparc_DKTatlas40_annot_stats'),
389+
('rh_aparc_DKTatlas40_annot_stats',
390+
'stats.@rh_aparc_DKTatlas40_annot_stats'),
382391
('lh_wg_pct_mgh', 'surf.@lh_wg_pct_mgh'),
383392
('rh_wg_pct_mgh', 'surf.@rh_wg_pct_mgh'),
384393
('lh_wg_pct_stats', 'stats.@lh_wg_pct_stats'),

nipype/workflows/smri/freesurfer/utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,8 @@ def getdefaultconfig():
432432
'qcache' : False,
433433
'queue' : None,
434434
'recoding_file' : None,
435-
'src_subject_id' : 'fsaverage'}
435+
'src_subject_id' : 'fsaverage',
436+
'th3' : True}
436437

437438
config['src_subject_dir'] = os.path.join(config['fs_home'], 'subjects',
438439
config['src_subject_id'])

0 commit comments

Comments
 (0)