Skip to content

Commit ad4ac3d

Browse files
committed
Merge pull request #877 from satra/fix/fnirtflow
Fix/fnirtflow
2 parents dd8626a + c2ef807 commit ad4ac3d

File tree

3 files changed

+44
-31
lines changed

3 files changed

+44
-31
lines changed

CHANGES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Next Release
77
* ENH: New data grabbing interface that works over SSH connections, SSHDataGrabber
88
* ENH: New color mode for write_graph
99
* FIX: MRTrix tracking algorithms were ignoring mask parameters.
10+
* FIX: FNIRT registration pathway and associated OpenFMRI example script
1011

1112
Release 0.9.2 (January 31, 2014)
1213
============

examples/fmri_openfmri.py

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -305,33 +305,41 @@ def num_copes(files):
305305
wf.connect(preproc, 'outputspec.mean', registration, 'inputspec.mean_image')
306306
wf.connect(datasource, 'anat', registration, 'inputspec.anatomical_image')
307307
registration.inputs.inputspec.target_image = fsl.Info.standard_image('MNI152_T1_2mm.nii.gz')
308+
registration.inputs.inputspec.target_image_brain = fsl.Info.standard_image('MNI152_T1_2mm_brain.nii.gz')
309+
registration.inputs.inputspec.config_file = 'T1_2_MNI152_2mm'
308310

309-
def merge_files(copes, varcopes):
311+
def merge_files(copes, varcopes, zstats):
310312
out_files = []
311313
splits = []
312314
out_files.extend(copes)
313315
splits.append(len(copes))
314316
out_files.extend(varcopes)
315317
splits.append(len(varcopes))
318+
out_files.extend(zstats)
319+
splits.append(len(zstats))
316320
return out_files, splits
317321

318-
mergefunc = pe.Node(niu.Function(input_names=['copes', 'varcopes'],
322+
mergefunc = pe.Node(niu.Function(input_names=['copes', 'varcopes',
323+
'zstats'],
319324
output_names=['out_files', 'splits'],
320325
function=merge_files),
321326
name='merge_files')
322327
wf.connect([(fixed_fx.get_node('outputspec'), mergefunc,
323328
[('copes', 'copes'),
324329
('varcopes', 'varcopes'),
330+
('zstats', 'zstats'),
325331
])])
326332
wf.connect(mergefunc, 'out_files', registration, 'inputspec.source_files')
327333

328334
def split_files(in_files, splits):
329-
copes = in_files[:splits[1]]
330-
varcopes = in_files[splits[1]:]
331-
return copes, varcopes
335+
copes = in_files[:splits[0]]
336+
varcopes = in_files[splits[0]:(splits[0] + splits[1])]
337+
zstats = in_files[(splits[0] + splits[1]):]
338+
return copes, varcopes, zstats
332339

333340
splitfunc = pe.Node(niu.Function(input_names=['in_files', 'splits'],
334-
output_names=['copes', 'varcopes'],
341+
output_names=['copes', 'varcopes',
342+
'zstats'],
335343
function=split_files),
336344
name='split_files')
337345
wf.connect(mergefunc, 'splits', splitfunc, 'splits')
@@ -347,7 +355,7 @@ def get_subs(subject_id, conds, model_id, task_id):
347355
subs = [('_subject_id_%s_' % subject_id, '')]
348356
subs.append(('_model_id_%d' % model_id, 'model%03d' %model_id))
349357
subs.append(('task_id_%d/' % task_id, '/task%03d_' % task_id))
350-
subs.append(('bold_dtype_mcf_mask_smooth_mask_gms_tempfilt_mean_warp_warp',
358+
subs.append(('bold_dtype_mcf_mask_smooth_mask_gms_tempfilt_mean_warp',
351359
'mean'))
352360
subs.append(('bold_dtype_mcf_mask_smooth_mask_gms_tempfilt_mean_flirt',
353361
'affine'))
@@ -358,10 +366,12 @@ def get_subs(subject_id, conds, model_id, task_id):
358366
subs.append(('_flameo%d/zstat1.' % i, 'zstat%02d.' % (i + 1)))
359367
subs.append(('_flameo%d/tstat1.' % i, 'tstat%02d.' % (i + 1)))
360368
subs.append(('_flameo%d/res4d.' % i, 'res4d%02d.' % (i + 1)))
361-
subs.append(('_warpall%d/cope1_warp_warp.' % i,
369+
subs.append(('_warpall%d/cope1_warp.' % i,
362370
'cope%02d.' % (i + 1)))
363-
subs.append(('_warpall%d/varcope1_warp_warp.' % (len(conds) + i),
371+
subs.append(('_warpall%d/varcope1_warp.' % (len(conds) + i),
364372
'varcope%02d.' % (i + 1)))
373+
subs.append(('_warpall%d/zstat1_warp.' % (2 * len(conds) + i),
374+
'zstat%02d.' % (i + 1)))
365375
return subs
366376

367377
subsgen = pe.Node(niu.Function(input_names=['subject_id', 'conds',
@@ -388,6 +398,7 @@ def get_subs(subject_id, conds, model_id, task_id):
388398
wf.connect([(splitfunc, datasink,
389399
[('copes', 'copes.mni'),
390400
('varcopes', 'varcopes.mni'),
401+
('zstats', 'zstats.mni'),
391402
])])
392403
wf.connect(registration, 'outputspec.transformed_mean', datasink, 'mean.mni')
393404
wf.connect(registration, 'outputspec.func2anat_transform', datasink, 'xfm.mean2anat')

nipype/workflows/fmri/fsl/preprocess.py

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,7 +1104,9 @@ def create_reg_workflow(name='registration'):
11041104
inputnode = pe.Node(interface=util.IdentityInterface(fields=['source_files',
11051105
'mean_image',
11061106
'anatomical_image',
1107-
'target_image']),
1107+
'target_image',
1108+
'target_image_brain',
1109+
'config_file']),
11081110
name='inputspec')
11091111
outputnode = pe.Node(interface=util.IdentityInterface(fields=['func2anat_transform',
11101112
'anat2target_transform',
@@ -1154,15 +1156,20 @@ def create_reg_workflow(name='registration'):
11541156
register.connect(inputnode, 'mean_image', mean2anatbbr, 'in_file')
11551157
register.connect(binarize, 'out_file', mean2anatbbr, 'wm_seg')
11561158
register.connect(inputnode, 'anatomical_image', mean2anatbbr, 'reference')
1157-
register.connect(mean2anat, 'out_matrix_file', mean2anatbbr, 'in_matrix_file')
1159+
register.connect(mean2anat, 'out_matrix_file',
1160+
mean2anatbbr, 'in_matrix_file')
11581161

11591162
"""
11601163
Calculate affine transform from anatomical to target
11611164
"""
11621165

11631166
anat2target_affine = pe.Node(fsl.FLIRT(), name='anat2target_linear')
1164-
register.connect(inputnode, 'anatomical_image', anat2target_affine, 'in_file')
1165-
register.connect(inputnode, 'target_image', anat2target_affine, 'reference')
1167+
anat2target_affine.inputs.searchr_x = [-180, 180]
1168+
anat2target_affine.inputs.searchr_y = [-180, 180]
1169+
anat2target_affine.inputs.searchr_z = [-180, 180]
1170+
register.connect(stripper, 'out_file', anat2target_affine, 'in_file')
1171+
register.connect(inputnode, 'target_image_brain',
1172+
anat2target_affine, 'reference')
11661173

11671174
"""
11681175
Calculate nonlinear transform from anatomical to target
@@ -1172,22 +1179,20 @@ def create_reg_workflow(name='registration'):
11721179
anat2target_nonlinear.inputs.fieldcoeff_file=True
11731180
register.connect(anat2target_affine, 'out_matrix_file',
11741181
anat2target_nonlinear, 'affine_file')
1175-
anat2target_nonlinear.inputs.warp_resolution = (8, 8, 8)
1176-
register.connect(inputnode, 'anatomical_image', anat2target_nonlinear, 'in_file')
1182+
register.connect(inputnode, 'anatomical_image',
1183+
anat2target_nonlinear, 'in_file')
1184+
register.connect(inputnode, 'config_file',
1185+
anat2target_nonlinear, 'config_file')
11771186
register.connect(inputnode, 'target_image',
11781187
anat2target_nonlinear, 'ref_file')
11791188

11801189
"""
11811190
Transform the mean image. First to anatomical and then to target
11821191
"""
11831192

1184-
warp2anat = pe.Node(fsl.ApplyWarp(interp='spline'), name='warp2anat')
1185-
register.connect(inputnode, 'mean_image', warp2anat, 'in_file')
1186-
register.connect(inputnode, 'anatomical_image', warp2anat, 'ref_file')
1187-
register.connect(mean2anatbbr, 'out_matrix_file', warp2anat, 'premat')
1188-
1189-
warpmean = warp2anat.clone(name='warpmean')
1190-
register.connect(warp2anat, 'out_file', warpmean, 'in_file')
1193+
warpmean = pe.Node(fsl.ApplyWarp(interp='spline'), name='warpmean')
1194+
register.connect(inputnode, 'mean_image', warpmean, 'in_file')
1195+
register.connect(mean2anatbbr, 'out_matrix_file', warpmean, 'premat')
11911196
register.connect(inputnode, 'target_image', warpmean, 'ref_file')
11921197
register.connect(anat2target_nonlinear, 'fieldcoeff_file',
11931198
warpmean, 'field_file')
@@ -1196,15 +1201,11 @@ def create_reg_workflow(name='registration'):
11961201
Transform the remaining images. First to anatomical and then to target
11971202
"""
11981203

1199-
warpall2anat = pe.MapNode(fsl.ApplyWarp(interp='spline'),
1200-
iterfield=['in_file'],
1201-
name='warpall2anat')
1202-
register.connect(inputnode, 'source_files', warpall2anat, 'in_file')
1203-
register.connect(inputnode, 'anatomical_image', warpall2anat, 'ref_file')
1204-
register.connect(mean2anatbbr, 'out_matrix_file', warpall2anat, 'premat')
1205-
1206-
warpall = warpall2anat.clone(name='warpall')
1207-
register.connect(warpall2anat, 'out_file', warpall, 'in_file')
1204+
warpall = pe.MapNode(fsl.ApplyWarp(interp='spline'),
1205+
iterfield=['in_file'],
1206+
name='warpall')
1207+
register.connect(inputnode, 'source_files', warpall, 'in_file')
1208+
register.connect(mean2anatbbr, 'out_matrix_file', warpall, 'premat')
12081209
register.connect(inputnode, 'target_image', warpall, 'ref_file')
12091210
register.connect(anat2target_nonlinear, 'fieldcoeff_file',
12101211
warpall, 'field_file')

0 commit comments

Comments
 (0)