12
12
import os
13
13
from nipype .interfaces .base import InputMultiPath
14
14
from nipype .interfaces .traits_extension import isdefined
15
+ import numpy as np
15
16
16
17
17
18
class ANTSInputSpec (ANTSCommandInputSpec ):
@@ -397,6 +398,7 @@ class Registration(ANTSCommand):
397
398
input_spec = RegistrationInputSpec
398
399
output_spec = RegistrationOutputSpec
399
400
_quantilesDone = False
401
+ _linear_transform_names = np .array ( [ 'Rigid' , 'Affine' , 'Translation' , 'CompositeAffine' , 'Similarity' ] )
400
402
401
403
def _formatMetric (self , index ):
402
404
"""
@@ -644,10 +646,18 @@ def _list_outputs(self):
644
646
outputs ['reverse_invert_flags' ].insert (0 , not self .inputs .invert_initial_moving_transform ) # Prepend
645
647
transformCount += 1
646
648
elif isdefined (self .inputs .initial_moving_transform_com ):
647
- #forwardFileName, _ = self._outputFileNames(self.inputs.output_transform_prefix,
648
- # transformCount,
649
- # 'Initial')
650
- #outputs['forward_transforms'].append(forwardFileName)
649
+ forwardFileName , forwardInverseMode = self ._outputFileNames (self .inputs .output_transform_prefix ,
650
+ transformCount ,
651
+ 'Initial' )
652
+ reverseFileName , reverseInverseMode = self ._outputFileNames (self .inputs .output_transform_prefix ,
653
+ transformCount ,
654
+ 'Initial' ,
655
+ True )
656
+ outputs ['forward_transforms' ].append (forwardFileName )
657
+ outputs ['forward_invert_flags' ].append ( forwardInverseMode )
658
+ outputs ['reverse_transforms' ].insert ( 0 ,
659
+ os .path .abspath (reverseFileName ))
660
+ outputs ['reverse_invert_flags' ].insert (0 , reverseInverseMode )
651
661
transformCount += 1
652
662
653
663
for count in range (len (self .inputs .transforms )):
@@ -665,7 +675,19 @@ def _list_outputs(self):
665
675
transformCount += 1
666
676
else :
667
677
transformCount = 0
668
- for transform in ['GenericAffine' , 'SyN' ]: # Only files returned by collapse_output_transforms
678
+ isLinear = [ any ( self ._linear_transform_names == t ) for t in self .inputs .transforms ]
679
+ collapse_list = []
680
+
681
+ if isdefined (self .inputs .initial_moving_transform ) or \
682
+ isdefined (self .inputs .initial_moving_transform_com ):
683
+ isLinear .insert (0 , True )
684
+
685
+ if any ( isLinear ): # Only files returned by collapse_output_transforms
686
+ collapse_list .append ( 'GenericAffine' )
687
+ if not all ( isLinear ):
688
+ collapse_list .append ( 'SyN' )
689
+
690
+ for transform in collapse_list :
669
691
forwardFileName , forwardInverseMode = self ._outputFileNames (self .inputs .output_transform_prefix , transformCount , transform )
670
692
reverseFileName , reverseInverseMode = self ._outputFileNames (self .inputs .output_transform_prefix , transformCount , transform , True )
671
693
outputs ['forward_transforms' ].append (
0 commit comments