Skip to content

Commit ff2f983

Browse files
committed
ENH: Adding new ants command line feature.
A newer version of ANTs has a command line feature added that allows for more optimized processing in multi-stage registrations. ENH: Added new state saving interface to ANTs In order to improve registration efficiency, it is important that we can save and restore the state of a registration so taht continuation may occur from a previous state. ENH: Make transform writing mutually exclusive Writing composite or non-composite transforms needs to be mutually exclusive in the new version of ants.
1 parent 4346f29 commit ff2f983

File tree

1 file changed

+83
-80
lines changed

1 file changed

+83
-80
lines changed

nipype/interfaces/ants/registration.py

Lines changed: 83 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -647,8 +647,9 @@ def _format_arg(self, opt, spec, val):
647647
if not self._quantilesDone:
648648
return self._formatWinsorizeImageIntensities()
649649
return '' # Must return something for argstr!
650-
elif opt == 'collapse_linear_transforms_to_fixed_image_header':
651-
return '' # Command no longer exist, so return empty string for backwards compatibility
650+
# This feature was removed from recent versions of antsRegistration due to corrupt outputs.
651+
#elif opt == 'collapse_linear_transforms_to_fixed_image_header':
652+
# return self._formatCollapseLinearTransformsToFixedImageHeader()
652653
return super(Registration, self)._format_arg(opt, spec, val)
653654

654655
def _outputFileNames(self, prefix, count, transform, inverse=False):
@@ -684,91 +685,93 @@ def _list_outputs(self):
684685
if isdefined(self.inputs.invert_initial_moving_transform):
685686
invert_initial_moving_transform = self.inputs.invert_initial_moving_transform
686687

687-
if not self.inputs.collapse_output_transforms:
688-
transformCount = 0
689-
if isdefined(self.inputs.initial_moving_transform):
690-
outputs['forward_transforms'].append(
691-
self.inputs.initial_moving_transform)
692-
outputs['forward_invert_flags'].append(
693-
invert_initial_moving_transform)
694-
outputs['reverse_transforms'].insert(
695-
0, self.inputs.initial_moving_transform)
696-
outputs['reverse_invert_flags'].insert(
697-
0, not invert_initial_moving_transform) # Prepend
698-
transformCount += 1
699-
elif isdefined(self.inputs.initial_moving_transform_com):
700-
forwardFileName, forwardInverseMode = self._outputFileNames(
701-
self.inputs.output_transform_prefix,
702-
transformCount,
703-
'Initial')
704-
reverseFileName, reverseInverseMode = self._outputFileNames(
705-
self.inputs.output_transform_prefix,
706-
transformCount,
707-
'Initial',
708-
True)
709-
outputs['forward_transforms'].append(os.path.abspath(forwardFileName))
710-
outputs['forward_invert_flags'].append(False)
711-
outputs['reverse_transforms'].insert(0,
712-
os.path.abspath(reverseFileName))
713-
outputs['reverse_invert_flags'].insert(0, True)
714-
transformCount += 1
715-
716-
for count in range(len(self.inputs.transforms)):
717-
forwardFileName, forwardInverseMode = self._outputFileNames(
718-
self.inputs.output_transform_prefix, transformCount,
719-
self.inputs.transforms[count])
720-
reverseFileName, reverseInverseMode = self._outputFileNames(
721-
self.inputs.output_transform_prefix, transformCount,
722-
self.inputs.transforms[count], True)
723-
outputs['forward_transforms'].append(
724-
os.path.abspath(forwardFileName))
725-
outputs['forward_invert_flags'].append(forwardInverseMode)
726-
outputs['reverse_transforms'].insert(
727-
0, os.path.abspath(reverseFileName))
728-
outputs[
729-
'reverse_invert_flags'].insert(0, reverseInverseMode)
730-
transformCount += 1
731-
elif not self.inputs.write_composite_transform:
732-
transformCount = 0
733-
isLinear = [any(self._linear_transform_names == t)
734-
for t in self.inputs.transforms]
735-
collapse_list = []
736-
737-
if isdefined(self.inputs.initial_moving_transform) or \
738-
isdefined(self.inputs.initial_moving_transform_com):
739-
isLinear.insert(0, True)
740-
741-
# Only files returned by collapse_output_transforms
742-
if any(isLinear):
743-
collapse_list.append('GenericAffine')
744-
if not all(isLinear):
745-
collapse_list.append('SyN')
746-
747-
for transform in collapse_list:
748-
forwardFileName, forwardInverseMode = self._outputFileNames(
749-
self.inputs.output_transform_prefix,
750-
transformCount,
751-
transform,
752-
inverse=False)
753-
reverseFileName, reverseInverseMode = self._outputFileNames(
754-
self.inputs.output_transform_prefix,
755-
transformCount,
756-
transform,
757-
inverse=True)
758-
outputs['forward_transforms'].append(os.path.abspath(
759-
forwardFileName))
760-
outputs['forward_invert_flags'].append(forwardInverseMode)
761-
outputs['reverse_transforms'].append(
762-
os.path.abspath(reverseFileName))
763-
outputs['reverse_invert_flags'].append(reverseInverseMode)
764-
transformCount += 1
765688
if self.inputs.write_composite_transform:
766689
fileName = self.inputs.output_transform_prefix + 'Composite.h5'
767690
outputs['composite_transform'] = [os.path.abspath(fileName)]
768691
fileName = self.inputs.output_transform_prefix + \
769692
'InverseComposite.h5'
770693
outputs['inverse_composite_transform'] = [
771694
os.path.abspath(fileName)]
695+
else: # If composite transforms are written, then individuals are not written (as of 2014-10-26
696+
if not self.inputs.collapse_output_transforms:
697+
transformCount = 0
698+
if isdefined(self.inputs.initial_moving_transform):
699+
outputs['forward_transforms'].append(
700+
self.inputs.initial_moving_transform)
701+
outputs['forward_invert_flags'].append(
702+
invert_initial_moving_transform)
703+
outputs['reverse_transforms'].insert(
704+
0, self.inputs.initial_moving_transform)
705+
outputs['reverse_invert_flags'].insert(
706+
0, not invert_initial_moving_transform) # Prepend
707+
transformCount += 1
708+
elif isdefined(self.inputs.initial_moving_transform_com):
709+
forwardFileName, forwardInverseMode = self._outputFileNames(
710+
self.inputs.output_transform_prefix,
711+
transformCount,
712+
'Initial')
713+
reverseFileName, reverseInverseMode = self._outputFileNames(
714+
self.inputs.output_transform_prefix,
715+
transformCount,
716+
'Initial',
717+
True)
718+
outputs['forward_transforms'].append(os.path.abspath(forwardFileName))
719+
outputs['forward_invert_flags'].append(False)
720+
outputs['reverse_transforms'].insert(0,
721+
os.path.abspath(reverseFileName))
722+
outputs['reverse_invert_flags'].insert(0, True)
723+
transformCount += 1
724+
725+
for count in range(len(self.inputs.transforms)):
726+
forwardFileName, forwardInverseMode = self._outputFileNames(
727+
self.inputs.output_transform_prefix, transformCount,
728+
self.inputs.transforms[count])
729+
reverseFileName, reverseInverseMode = self._outputFileNames(
730+
self.inputs.output_transform_prefix, transformCount,
731+
self.inputs.transforms[count], True)
732+
outputs['forward_transforms'].append(
733+
os.path.abspath(forwardFileName))
734+
outputs['forward_invert_flags'].append(forwardInverseMode)
735+
outputs['reverse_transforms'].insert(
736+
0, os.path.abspath(reverseFileName))
737+
outputs[
738+
'reverse_invert_flags'].insert(0, reverseInverseMode)
739+
transformCount += 1
740+
else:
741+
transformCount = 0
742+
isLinear = [any(self._linear_transform_names == t)
743+
for t in self.inputs.transforms]
744+
collapse_list = []
745+
746+
if isdefined(self.inputs.initial_moving_transform) or \
747+
isdefined(self.inputs.initial_moving_transform_com):
748+
isLinear.insert(0, True)
749+
750+
# Only files returned by collapse_output_transforms
751+
if any(isLinear):
752+
collapse_list.append('GenericAffine')
753+
if not all(isLinear):
754+
collapse_list.append('SyN')
755+
756+
for transform in collapse_list:
757+
forwardFileName, forwardInverseMode = self._outputFileNames(
758+
self.inputs.output_transform_prefix,
759+
transformCount,
760+
transform,
761+
inverse=False)
762+
reverseFileName, reverseInverseMode = self._outputFileNames(
763+
self.inputs.output_transform_prefix,
764+
transformCount,
765+
transform,
766+
inverse=True)
767+
outputs['forward_transforms'].append(os.path.abspath(
768+
forwardFileName))
769+
outputs['forward_invert_flags'].append(forwardInverseMode)
770+
outputs['reverse_transforms'].append(
771+
os.path.abspath(reverseFileName))
772+
outputs['reverse_invert_flags'].append(reverseInverseMode)
773+
transformCount += 1
774+
772775
out_filename = self._get_outputfilenames(inverse=False)
773776
inv_out_filename = self._get_outputfilenames(inverse=True)
774777
if out_filename:

0 commit comments

Comments
 (0)