Skip to content

Commit 6771823

Browse files
committed
Merge pull request #1196 from satra/fix/antsunified
fix: address multimodal and unimodal inputs
2 parents 46bee3b + f47d0ff commit 6771823

File tree

4 files changed

+22
-20
lines changed

4 files changed

+22
-20
lines changed

examples/fmri_ants_openfmri.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ def create_reg_workflow(name='registration'):
236236

237237
merge = pe.Node(niu.Merge(2), iterfield=['in2'], name='mergexfm')
238238
register.connect(convert2itk, 'itk_transform', merge, 'in2')
239-
register.connect(reg, ('composite_transform', pickfirst), merge, 'in1')
239+
register.connect(reg, 'composite_transform', merge, 'in1')
240240

241241
"""
242242
Transform the mean image. First to anatomical and then to target
@@ -429,7 +429,7 @@ def create_fs_reg_workflow(name='registration'):
429429
reg.inputs.use_histogram_matching = [False] * 2 + [True]
430430
reg.inputs.winsorize_lower_quantile = 0.005
431431
reg.inputs.winsorize_upper_quantile = 0.995
432-
reg.inputs.args = '--float'
432+
reg.inputs.float = True
433433
reg.inputs.output_warped_image = 'output_warped_image.nii.gz'
434434
reg.inputs.num_threads = 4
435435
reg.plugin_args = {'qsub_args': '-pe orte 4',
@@ -445,7 +445,7 @@ def create_fs_reg_workflow(name='registration'):
445445

446446
merge = Node(Merge(2), iterfield=['in2'], name='mergexfm')
447447
register.connect(convert2itk, 'itk_transform', merge, 'in2')
448-
register.connect(reg, ('composite_transform', pickfirst), merge, 'in1')
448+
register.connect(reg, 'composite_transform', merge, 'in1')
449449

450450
"""
451451
Transform the mean image. First to anatomical and then to target

examples/rsfmri_vol_surface_preprocessing.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ def create_reg_workflow(name='registration'):
517517
reg.inputs.use_histogram_matching = [False] * 2 + [True]
518518
reg.inputs.winsorize_lower_quantile = 0.005
519519
reg.inputs.winsorize_upper_quantile = 0.995
520-
reg.inputs.args = '--float'
520+
reg.inputs.float = True
521521
reg.inputs.output_warped_image = 'output_warped_image.nii.gz'
522522
reg.inputs.num_threads = 4
523523
reg.plugin_args = {'qsub_args': '-l nodes=1:ppn=4'}
@@ -528,11 +528,9 @@ def create_reg_workflow(name='registration'):
528528
Concatenate the affine and ants transforms into a list
529529
"""
530530

531-
pickfirst = lambda x: x[0]
532-
533531
merge = Node(Merge(2), iterfield=['in2'], name='mergexfm')
534532
register.connect(convert2itk, 'itk_transform', merge, 'in2')
535-
register.connect(reg, ('composite_transform', pickfirst), merge, 'in1')
533+
register.connect(reg, 'composite_transform', merge, 'in1')
536534

537535
"""
538536
Transform the mean image. First to anatomical and then to target

examples/rsfmri_vol_surface_preprocessing_nipy.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ def create_reg_workflow(name='registration'):
498498
reg.inputs.use_histogram_matching = [False] * 2 + [True]
499499
reg.inputs.winsorize_lower_quantile = 0.005
500500
reg.inputs.winsorize_upper_quantile = 0.995
501-
reg.inputs.args = '--float'
501+
reg.inputs.float = True
502502
reg.inputs.output_warped_image = 'output_warped_image.nii.gz'
503503
reg.inputs.num_threads = 4
504504
reg.plugin_args = {'sbatch_args': '-c%d' % 4}
@@ -510,11 +510,9 @@ def create_reg_workflow(name='registration'):
510510
Concatenate the affine and ants transforms into a list
511511
"""
512512

513-
pickfirst = lambda x: x[0]
514-
515513
merge = Node(Merge(2), iterfield=['in2'], name='mergexfm')
516514
register.connect(convert2itk, 'itk_transform', merge, 'in2')
517-
register.connect(reg, ('composite_transform', pickfirst), merge, 'in1')
515+
register.connect(reg, 'composite_transform', merge, 'in1')
518516

519517

520518
"""

nipype/interfaces/ants/registration.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@
77
>>> os.chdir(datadir)
88
"""
99

10-
from ..base import (TraitedSpec, File, traits)
10+
from ..base import (TraitedSpec, File, traits, InputMultiPath)
1111
from .base import ANTSCommand, ANTSCommandInputSpec
1212
import os
13-
from nipype.interfaces.base import InputMultiPath
14-
from nipype.interfaces.traits_extension import isdefined
13+
from ..traits_extension import isdefined
1514
import numpy as np
1615

1716

@@ -458,15 +457,22 @@ class Registration(ANTSCommand):
458457
459458
>>> # Test multiple metrics per stage
460459
>>> reg5 = copy.deepcopy(reg)
461-
>>> reg5.inputs.fixed_image = [ 'fixed1.nii', 'fixed2.nii' ]
462-
>>> reg5.inputs.moving_image = [ 'moving1.nii', 'moving2.nii' ]
460+
>>> reg5.inputs.fixed_image = 'fixed1.nii'
461+
>>> reg5.inputs.moving_image = 'moving1.nii'
463462
>>> reg5.inputs.metric = ['Mattes', ['Mattes', 'CC']]
464463
>>> reg5.inputs.metric_weight = [1, [.5,.5]]
465-
>>> reg5.inputs.radius_or_number_of_bins = [32, [32,4] ]
464+
>>> reg5.inputs.radius_or_number_of_bins = [32, [32, 4] ]
466465
>>> reg5.inputs.sampling_strategy = ['Random', None] # use default strategy in second stage
467466
>>> reg5.inputs.sampling_percentage = [0.05, [0.05, 0.10]]
468467
>>> reg5.cmdline
469-
'antsRegistration --collapse-output-transforms 0 --dimensionality 3 --initial-moving-transform [ trans.mat, 1 ] --initialize-transforms-per-stage 0 --interpolation Linear --output [ output_, output_warped_image.nii.gz ] --restore-state trans.mat --save-state trans.mat --transform Affine[ 2.0 ] --metric Mattes[ fixed1.nii, moving1.nii, 1, 32, Random, 0.05 ] --convergence [ 1500x200, 1e-08, 20 ] --smoothing-sigmas 1.0x0.0vox --shrink-factors 2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --transform SyN[ 0.25, 3.0, 0.0 ] --metric Mattes[ fixed1.nii, moving1.nii, 0.5, 32, None, 0.05 ] --metric CC[ fixed2.nii, moving2.nii, 0.5, 4, None, 0.1 ] --convergence [ 100x50x30, 1e-09, 20 ] --smoothing-sigmas 2.0x1.0x0.0vox --shrink-factors 3x2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --winsorize-image-intensities [ 0.0, 1.0 ] --write-composite-transform 1'
468+
'antsRegistration --collapse-output-transforms 0 --dimensionality 3 --initial-moving-transform [ trans.mat, 1 ] --initialize-transforms-per-stage 0 --interpolation Linear --output [ output_, output_warped_image.nii.gz ] --restore-state trans.mat --save-state trans.mat --transform Affine[ 2.0 ] --metric Mattes[ fixed1.nii, moving1.nii, 1, 32, Random, 0.05 ] --convergence [ 1500x200, 1e-08, 20 ] --smoothing-sigmas 1.0x0.0vox --shrink-factors 2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --transform SyN[ 0.25, 3.0, 0.0 ] --metric Mattes[ fixed1.nii, moving1.nii, 0.5, 32, None, 0.05 ] --metric CC[ fixed1.nii, moving1.nii, 0.5, 4, None, 0.1 ] --convergence [ 100x50x30, 1e-09, 20 ] --smoothing-sigmas 2.0x1.0x0.0vox --shrink-factors 3x2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --winsorize-image-intensities [ 0.0, 1.0 ] --write-composite-transform 1'
469+
470+
>>> # Test multiple inputs
471+
>>> reg6 = copy.deepcopy(reg5)
472+
>>> reg6.inputs.fixed_image = ['fixed1.nii', 'fixed2.nii']
473+
>>> reg6.inputs.moving_image = ['moving1.nii', 'moving2.nii']
474+
>>> reg6.cmdline
475+
'antsRegistration --collapse-output-transforms 0 --dimensionality 3 --initial-moving-transform [ trans.mat, 1 ] --initialize-transforms-per-stage 0 --interpolation Linear --output [ output_, output_warped_image.nii.gz ] --restore-state trans.mat --save-state trans.mat --transform Affine[ 2.0 ] --metric Mattes[ fixed1.nii, moving1.nii, 1, 32, Random, 0.05 ] --convergence [ 1500x200, 1e-08, 20 ] --smoothing-sigmas 1.0x0.0vox --shrink-factors 2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --transform SyN[ 0.25, 3.0, 0.0 ] --metric Mattes[ fixed1.nii, moving1.nii, 0.5, 32, None, 0.05 ] --metric CC[ fixed2.nii, moving2.nii, 0.5, 4, None, 0.1 ] --convergence [ 100x50x30, 1e-09, 20 ] --smoothing-sigmas 2.0x1.0x0.0vox --shrink-factors 3x2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --write-composite-transform 1'
470476
"""
471477
DEF_SAMPLING_STRATEGY = 'None'
472478
"""The default sampling strategy argument."""
@@ -520,12 +526,12 @@ def _formatMetric(self, index):
520526
specs = list()
521527
for i in indexes:
522528
temp = dict([(k, v[i]) for k, v in items])
523-
if i > len( self.inputs.fixed_image ):
529+
if len(self.inputs.fixed_image) == 1:
524530
temp["fixed_image"] = self.inputs.fixed_image[0]
525531
else:
526532
temp["fixed_image"] = self.inputs.fixed_image[i]
527533

528-
if i > len( self.inputs.moving_image ):
534+
if len(self.inputs.moving_image) == 1:
529535
temp["moving_image"] = self.inputs.moving_image[0]
530536
else:
531537
temp["moving_image"] = self.inputs.moving_image[i]

0 commit comments

Comments
 (0)