Skip to content

Commit da3a4b8

Browse files
committed
Further cleanup, reverted input names changes in ApplyTrasforms, renamed
antsRegistration.
1 parent f34fd73 commit da3a4b8

File tree

5 files changed

+34
-216
lines changed

5 files changed

+34
-216
lines changed

nipype/interfaces/ants/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
"""Top-level namespace for ants."""
55

66
# Registraiton programs
7-
from .registration import ANTS, antsRegistration
7+
from .registration import ANTS, Registration
88
# deprecated
9-
from .legacy import antsIntroduction, ApplyTransforms, buildtemplateparallel
9+
from .legacy import antsIntroduction, buildtemplateparallel
1010

1111
# Resampling Programs
12-
from resampling import antsApplyTransforms, WarpImageMultiTransform, WarpTimeSeriesImageMultiTransform
12+
from resampling import ApplyTransforms, WarpImageMultiTransform, WarpTimeSeriesImageMultiTransform
1313

1414

1515
# Segmentation Programs

nipype/interfaces/ants/legacy.py

Lines changed: 1 addition & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -11,93 +11,14 @@
1111
>>> os.chdir(datadir)
1212
"""
1313
# Local imports
14-
from ..base import (TraitedSpec, File, traits, InputMultiPath,
15-
isdefined)
14+
from ..base import TraitedSpec, File, traits
1615
from ...utils.filemanip import split_filename
1716
from .base import ANTSCommand, ANTSCommandInputSpec
1817
import os
1918
from glob import glob
2019
from nipype.interfaces.base import OutputMultiPath
2120

2221

23-
class ApplyTransformsInputSpec(ANTSCommandInputSpec):
24-
dimension = traits.Enum(3, 2, argstr='--dimensionality %d', usedefault=True,
25-
desc='image dimension (2 or 3)')
26-
input_image = File(argstr='--input %s', mandatory=True,
27-
desc=('image to apply transformation to (generally a '
28-
'coregistered functional)'))
29-
output_image = traits.Str(argstr='--output %s',
30-
desc=('output file name'), genfile=True,
31-
hash_file=False)
32-
reference_image = File(argstr='--reference-image %s',
33-
desc='reference image space that you wish to warp INTO')
34-
interpolation = traits.Str(argstr='--interpolation %s',
35-
desc='Use nearest neighbor interpolation')
36-
transformation_files = InputMultiPath(File(exists=True), argstr='%s',
37-
desc='transformation file(s) to be applied',
38-
mandatory=True)
39-
invert_transforms = traits.List(traits.Int,
40-
desc=('List of Affine transformations to invert. '
41-
'E.g.: [1,4,5] inverts the 1st, 4th, and 5th Affines '
42-
'found in transformation_series'))
43-
default_value = traits.Float(argstr="--default-value %g", desc="Default " +
44-
"voxel value to be used with input images only. Specifies the voxel value " +
45-
"when the input point maps outside the output domain")
46-
47-
48-
class ApplyTransformsOutputSpec(TraitedSpec):
49-
output_image = File(exists=True, desc='Warped image')
50-
51-
52-
class ApplyTransforms(ANTSCommand):
53-
"""antsApplyTransforms, applied to an input image, transforms it according to a
54-
reference image and a transform (or a set of transforms).
55-
56-
Examples
57-
--------
58-
59-
>>> from nipype.interfaces.ants import ApplyTransforms
60-
>>> atms = ApplyTransforms()
61-
>>> atms.inputs.input_image = 'structural.nii'
62-
>>> atms.inputs.reference_image = 'ants_deformed.nii.gz'
63-
>>> atms.inputs.transformation_files = ['ants_Warp.nii.gz','ants_Affine.txt']
64-
>>> atms.cmdline
65-
'antsApplyTransforms --dimensionality 3 --input structural.nii --output structural_trans.nii --reference-image ants_deformed.nii.gz --transform ants_Warp.nii.gz --transform ants_Affine.txt'
66-
67-
"""
68-
69-
_cmd = 'antsApplyTransforms'
70-
input_spec = ApplyTransformsInputSpec
71-
output_spec = ApplyTransformsOutputSpec
72-
73-
def _gen_filename(self, name):
74-
if name == 'output_image':
75-
output = self.inputs.output_image
76-
if not isdefined(output):
77-
_, name, ext = split_filename(self.inputs.input_image)
78-
output = name + '_trans' + ext
79-
return output
80-
return None
81-
82-
def _format_arg(self, opt, spec, val):
83-
if opt == 'transformation_files':
84-
series = []
85-
tmpl = "--transform "
86-
for i, transformation_file in enumerate(val):
87-
tmpl
88-
if isdefined(self.inputs.invert_transforms) and i + 1 in self.inputs.invert_transforms:
89-
series.append(tmpl + "[%s,1]" % transformation_file)
90-
else:
91-
series.append(tmpl + "%s" % transformation_file)
92-
return ' '.join(series)
93-
return super(ApplyTransforms, self)._format_arg(opt, spec, val)
94-
95-
def _list_outputs(self):
96-
outputs = self._outputs().get()
97-
outputs['output_image'] = os.path.abspath(self._gen_filename('output_image'))
98-
return outputs
99-
100-
10122
class antsIntroductionInputSpec(ANTSCommandInputSpec):
10223
dimension = traits.Enum(3, 2, argstr='-d %d', usedefault=True,
10324
desc='image dimension (2 or 3)', position=1)
@@ -150,7 +71,6 @@ class antsIntroductionOutputSpec(TraitedSpec):
15071
input_file = File(exists=True, desc='input image (prefix_repaired.nii)')
15172
output_file = File(exists=True, desc='output image (prefix_deformed.nii)')
15273

153-
15474
class antsIntroduction(ANTSCommand):
15575
"""Uses ANTS to generate matrices to warp data from one space to another.
15676

nipype/interfaces/ants/registration.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ def _list_outputs(self):
158158
#outputs['metaheader_raw'] = os.path.abspath(self.inputs.output_transform_prefix + 'velocity.raw')
159159
return outputs
160160

161-
class antsRegistrationInputSpec(ANTSCommandInputSpec):
161+
class RegistrationInputSpec(ANTSCommandInputSpec):
162162
# Initial inputs
163163
fixed_image_mask = File(mandatory=False, desc=(''), requires=['moving_image_mask'], exists=True)
164164
moving_image_mask = File(argstr='%s', mandatory=False, desc='', requires=['fixed_image_mask'], exists=True)
@@ -212,7 +212,7 @@ class antsRegistrationInputSpec(ANTSCommandInputSpec):
212212
output_inverse_warped_image = traits.Either(traits.Bool, File(), hash_files=False, requires=['output_warped_image'], desc="")
213213

214214

215-
class antsRegistrationOutputSpec(TraitedSpec):
215+
class RegistrationOutputSpec(TraitedSpec):
216216
forward_transforms = traits.List(File(exists=True), desc='List of output transforms for forward registration')
217217
reverse_transforms = traits.List(File(exists=True), desc='List of output transforms for reverse registration')
218218
forward_invert_flags = traits.List(traits.Bool(), desc='List of flags corresponding to the forward transforms')
@@ -221,12 +221,12 @@ class antsRegistrationOutputSpec(TraitedSpec):
221221
inverse_composite_transform = traits.List(File(exists=True), desc='Inverse composite transform file')
222222

223223

224-
class antsRegistration(ANTSCommand):
224+
class Registration(ANTSCommand):
225225
"""
226226
Examples
227227
--------
228-
>>> from nipype.interfaces.ants import antsRegistration
229-
>>> reg = antsRegistration()
228+
>>> from nipype.interfaces.ants import Registration
229+
>>> reg = Registration()
230230
>>> reg.inputs.fixed_image = ['fixed1.nii', 'fixed2.nii']
231231
>>> reg.inputs.moving_image = ['moving1.nii', 'moving2.nii']
232232
>>> reg.inputs.output_transform_prefix = "t1_average_BRAINSABC_To_template_t1_clipped"
@@ -249,11 +249,11 @@ class antsRegistration(ANTSCommand):
249249
>>> reg.inputs.use_histogram_matching = [True, True] # This is the default
250250
>>> reg.inputs.output_warped_image = 't1_average_BRAINSABC_To_template_t1_clipped_INTERNAL_WARPED.nii.gz'
251251
>>> reg.cmdline
252-
'antsRegistration --dimensionality 3 --initial-moving-transform [trans.mat,0] --output [t1_average_BRAINSABC_To_template_t1_clipped,t1_average_BRAINSABC_To_template_t1_clipped_INTERNAL_WARPED.nii.gz] --transform Affine[2.0] --metric Mattes[fixed1.nii,moving1.nii,1,32,Random,0.05] --convergence [1500x200,1e-08,20] --smoothing-sigmas 1x0 --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,1,32] --convergence [100x50x30,1e-09,20] --smoothing-sigmas 2x1x0 --shrink-factors 3x2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --write-composite-transform 1'
252+
'Registration --dimensionality 3 --initial-moving-transform [trans.mat,0] --output [t1_average_BRAINSABC_To_template_t1_clipped,t1_average_BRAINSABC_To_template_t1_clipped_INTERNAL_WARPED.nii.gz] --transform Affine[2.0] --metric Mattes[fixed1.nii,moving1.nii,1,32,Random,0.05] --convergence [1500x200,1e-08,20] --smoothing-sigmas 1x0 --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,1,32] --convergence [100x50x30,1e-09,20] --smoothing-sigmas 2x1x0 --shrink-factors 3x2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --write-composite-transform 1'
253253
"""
254-
_cmd = 'antsRegistration'
255-
input_spec = antsRegistrationInputSpec
256-
output_spec = antsRegistrationOutputSpec
254+
_cmd = 'Registration'
255+
input_spec = RegistrationInputSpec
256+
output_spec = RegistrationOutputSpec
257257

258258

259259
def _optionalMetricParameters(self, index):
@@ -328,7 +328,7 @@ def _format_arg(self, opt, spec, val):
328328
return '--output [%s,%s]' % (self.inputs.output_transform_prefix, self.inputs.output_warped_image )
329329
else:
330330
return '--output %s' % self.inputs.output_transform_prefix
331-
return super(antsRegistration, self)._format_arg(opt, spec, val)
331+
return super(Registration, self)._format_arg(opt, spec, val)
332332

333333
def _outputFileNames(self, prefix, count, transform, inverse=False):
334334
self.transformMap = {'Rigid':'Rigid.mat',

nipype/interfaces/ants/resampling.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ def _list_outputs(self):
189189
return outputs
190190

191191

192-
class antsApplyTransformsInputSpec(ANTSCommandInputSpec):
192+
class ApplyTransformsInputSpec(ANTSCommandInputSpec):
193193
dimension = traits.Enum(3, 2, argstr='--dimensionality %d', usedefault=True,
194194
desc='image dimension (2 or 3)')
195195
input_image = File(argstr='--input %s', mandatory=True,
@@ -216,37 +216,37 @@ class antsApplyTransformsInputSpec(ANTSCommandInputSpec):
216216
# interpolation_sigma = traits.Float(requires=['interpolation'])
217217
# interpolation_alpha = traits.Float(requires=['interpolation_sigma'])
218218
# bspline_order = traits.Int(3, requires=['interpolation'])
219-
transforms = traits.List(File(exists=True), argstr='%s', mandatory=True, desc=(''))
220-
invert_transforms_flags = traits.List(traits.Bool(), requires=["transforms"])
219+
transformation_files = traits.List(File(exists=True), argstr='%s', mandatory=True, desc=(''))
220+
invert_transforms = traits.List(traits.Bool(), requires=["transformation_files"])
221221
default_value = traits.Int(argstr='--default-value %d', mandatory = True)
222222
print_out_composite_warp_file = traits.Enum(0, 1, requires=["output_image"], desc=('')) # TODO: Change to boolean
223223

224-
class antsApplyTransformsOutputSpec(TraitedSpec):
224+
class ApplyTransformsOutputSpec(TraitedSpec):
225225
output_image = File(exists=True, desc='Warped image')
226226

227-
class antsApplyTransforms(ANTSCommand):
228-
"""antsApplyTransforms, applied to an input image, transforms it according to a
227+
class ApplyTransforms(ANTSCommand):
228+
"""ApplyTransforms, applied to an input image, transforms it according to a
229229
reference image and a transform (or a set of transforms).
230230
231231
Examples
232232
--------
233233
234-
>>> from nipype.interfaces.ants import antsApplyTransforms
235-
>>> at = antsApplyTransforms()
234+
>>> from nipype.interfaces.ants import ApplyTransforms
235+
>>> at = ApplyTransforms()
236236
>>> at.inputs.dimension = 3
237237
>>> at.inputs.input_image = 'moving1.nii'
238238
>>> at.inputs.reference_image = 'fixed1.nii'
239239
>>> at.inputs.interpolation = 'Linear'
240240
>>> at.inputs.default_value = 0
241-
>>> at.inputs.transforms = ['trans.mat', 'ants_Warp.nii.gz']
241+
>>> at.inputs.transformation_files = ['trans.mat', 'ants_Warp.nii.gz']
242242
>>> at.cmdline
243-
'antsApplyTransforms --default-value 0 --dimensionality 3 --input moving1.nii --interpolation Linear --output moving1_trans.nii --reference-image fixed1.nii --transform trans.mat --transform ants_Warp.nii.gz'
243+
'ApplyTransforms --default-value 0 --dimensionality 3 --input moving1.nii --interpolation Linear --output moving1_trans.nii --reference-image fixed1.nii --transform trans.mat --transform ants_Warp.nii.gz'
244244
245245
246246
"""
247-
_cmd = 'antsApplyTransforms'
248-
input_spec = antsApplyTransformsInputSpec
249-
output_spec = antsApplyTransformsOutputSpec
247+
_cmd = 'ApplyTransforms'
248+
input_spec = ApplyTransformsInputSpec
249+
output_spec = ApplyTransformsOutputSpec
250250

251251
def _gen_filename(self, name):
252252
if name == 'output_image':
@@ -259,14 +259,14 @@ def _gen_filename(self, name):
259259

260260
def _getTransformFileNames(self):
261261
retval = []
262-
for ii in range(len(self.inputs.transforms)):
263-
if isdefined(self.inputs.invert_transforms_flags):
264-
if len(self.inputs.transforms) == len(self.inputs.invert_transforms_flags):
265-
retval.append("--transform [%s,%s]"%(self.inputs.transforms[ii], self.inputs.invert_transforms_flags[ii]))
262+
for ii in range(len(self.inputs.transformation_files)):
263+
if isdefined(self.inputs.invert_transforms):
264+
if len(self.inputs.transformation_files) == len(self.inputs.invert_transforms):
265+
retval.append("--transform [%s,%s]"%(self.inputs.transformation_files[ii], self.inputs.invert_transforms[ii]))
266266
else:
267267
raise Exception("ERROR: The useInverse list must have the same number of entries as the transformsFileName list.")
268268
else:
269-
retval.append("--transform %s" % self.inputs.transforms[ii])
269+
retval.append("--transform %s" % self.inputs.transformation_files[ii])
270270
return " ".join(retval)
271271

272272
def _getOutputWarpedFileName(self):
@@ -278,12 +278,12 @@ def _getOutputWarpedFileName(self):
278278
def _format_arg(self, opt, spec, val):
279279
if opt == "output_image":
280280
return self._getOutputWarpedFileName()
281-
elif opt == "transforms":
281+
elif opt == "transformation_files":
282282
return self._getTransformFileNames()
283283
elif opt == 'interpolation':
284284
# TODO: handle multilabel, gaussian, and bspline options
285285
return '--interpolation %s' % self.inputs.interpolation
286-
return super(antsApplyTransforms, self)._format_arg(opt, spec, val)
286+
return super(ApplyTransforms, self)._format_arg(opt, spec, val)
287287

288288
def _list_outputs(self):
289289
outputs = self._outputs().get()

nipype/interfaces/ants/utils.py

Lines changed: 0 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -289,105 +289,3 @@ def _list_outputs(self):
289289
self.inputs.out_postfix,
290290
ext)))
291291
return outputs
292-
293-
294-
class antsApplyTransformsInputSpec(ANTSCommandInputSpec):
295-
dimension = traits.Enum(3, 2, argstr='--dimensionality %d', usedefault=True,
296-
desc='image dimension (2 or 3)')
297-
input_image = File(argstr='--input %s', mandatory=True,
298-
desc=('image to apply transformation to (generally a '
299-
'coregistered functional)'),
300-
exists=True)
301-
output_image = traits.Str(argstr='--output %s',
302-
desc=('output file name'), genfile=True,
303-
hash_file=False)
304-
reference_image = File(argstr='--reference-image %s', mandatory=True,
305-
desc='reference image space that you wish to warp INTO',
306-
exists=True)
307-
interpolation = traits.Enum('Linear',
308-
'NearestNeighbor',
309-
'CosineWindowedSinc',
310-
'WelchWindowedSinc',
311-
'HammingWindowedSinc',
312-
'LanczosWindowedSinc',
313-
# 'MultiLabel',
314-
# 'Gaussian',
315-
# 'BSpline',
316-
argstr='%s', mandatory = True)
317-
# TODO: Implement these options for multilabel, gaussian, and bspline
318-
# interpolation_sigma = traits.Float(requires=['interpolation'])
319-
# interpolation_alpha = traits.Float(requires=['interpolation_sigma'])
320-
# bspline_order = traits.Int(3, requires=['interpolation'])
321-
transforms = traits.List(File(exists=True), argstr='%s', mandatory=True, desc=(''))
322-
invert_transforms_flags = traits.List(traits.Bool(), requires=["transforms"])
323-
default_value = traits.Int(argstr='--default-value %d', mandatory = True)
324-
print_out_composite_warp_file = traits.Enum(0, 1, requires=["output_image"], desc=('')) # TODO: Change to boolean
325-
326-
class antsApplyTransformsOutputSpec(TraitedSpec):
327-
output_image = File(exists=True, desc='Warped image')
328-
329-
class antsApplyTransforms(ANTSCommand):
330-
"""antsApplyTransforms, applied to an input image, transforms it according to a
331-
reference image and a transform (or a set of transforms).
332-
333-
Examples
334-
--------
335-
336-
>>> from nipype.interfaces.ants import antsApplyTransforms
337-
>>> at = antsApplyTransforms()
338-
>>> at.inputs.dimension = 3
339-
>>> at.inputs.input_image = 'moving1.nii'
340-
>>> at.inputs.reference_image = 'fixed1.nii'
341-
>>> at.inputs.interpolation = 'Linear'
342-
>>> at.inputs.default_value = 0
343-
>>> at.inputs.transforms = ['trans.mat', 'ants_Warp.nii.gz']
344-
>>> at.cmdline
345-
'antsApplyTransforms --default-value 0 --dimensionality 3 --input moving1.nii --interpolation Linear --output moving1_trans.nii --reference-image fixed1.nii --transform trans.mat --transform ants_Warp.nii.gz'
346-
347-
348-
"""
349-
_cmd = 'antsApplyTransforms'
350-
input_spec = antsApplyTransformsInputSpec
351-
output_spec = antsApplyTransformsOutputSpec
352-
353-
def _gen_filename(self, name):
354-
if name == 'output_image':
355-
output = self.inputs.output_image
356-
if not isdefined(output):
357-
_, name, ext = split_filename(self.inputs.input_image)
358-
output = name + '_trans' + ext
359-
return output
360-
return None
361-
362-
def _getTransformFileNames(self):
363-
retval = []
364-
for ii in range(len(self.inputs.transforms)):
365-
if isdefined(self.inputs.invert_transforms_flags):
366-
if len(self.inputs.transforms) == len(self.inputs.invert_transforms_flags):
367-
retval.append("--transform [%s,%s]"%(self.inputs.transforms[ii], self.inputs.invert_transforms_flags[ii]))
368-
else:
369-
raise Exception("ERROR: The useInverse list must have the same number of entries as the transformsFileName list.")
370-
else:
371-
retval.append("--transform %s" % self.inputs.transforms[ii])
372-
return " ".join(retval)
373-
374-
def _getOutputWarpedFileName(self):
375-
if isdefined(self.inputs.print_out_composite_warp_file):
376-
return "--output [%s,%s]"%(self._gen_filename("output_image"), self.inputs.print_out_composite_warp_file)
377-
else:
378-
return "--output %s"%(self._gen_filename("output_image"))
379-
380-
def _format_arg(self, opt, spec, val):
381-
if opt == "output_image":
382-
return self._getOutputWarpedFileName()
383-
elif opt == "transforms":
384-
return self._getTransformFileNames()
385-
elif opt == 'interpolation':
386-
# TODO: handle multilabel, gaussian, and bspline options
387-
return '--interpolation %s' % self.inputs.interpolation
388-
return super(antsApplyTransforms, self)._format_arg(opt, spec, val)
389-
390-
def _list_outputs(self):
391-
outputs = self._outputs().get()
392-
outputs['output_image'] = os.path.abspath(self._gen_filename('output_image'))
393-
return outputs

0 commit comments

Comments
 (0)