@@ -416,6 +416,8 @@ class RegistrationOutputSpec(TraitedSpec):
416
416
warped_image = File (desc = "Outputs warped image" )
417
417
inverse_warped_image = File (desc = "Outputs the inverse of the warped image" )
418
418
save_state = File (desc = "The saved registration state to be restored" )
419
+ metric_value = traits .Float (desc = 'the final value of metric' )
420
+ elapsed_time = traits .Float (desc = 'the total elapsed time as reported by ANTs' )
419
421
420
422
421
423
class Registration (ANTSCommand ):
@@ -535,10 +537,12 @@ class Registration(ANTSCommand):
535
537
>>> outputs = reg4._list_outputs()
536
538
>>> pprint.pprint(outputs) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE +ALLOW_UNICODE
537
539
{'composite_transform': '.../nipype/testing/data/output_Composite.h5',
540
+ 'elapsed_time': <undefined>,
538
541
'forward_invert_flags': [],
539
542
'forward_transforms': [],
540
543
'inverse_composite_transform': '.../nipype/testing/data/output_InverseComposite.h5',
541
544
'inverse_warped_image': <undefined>,
545
+ 'metric_value': <undefined>,
542
546
'reverse_invert_flags': [],
543
547
'reverse_transforms': [],
544
548
'save_state': '.../nipype/testing/data/trans.mat',
@@ -560,11 +564,13 @@ class Registration(ANTSCommand):
560
564
>>> outputs = reg4b._list_outputs()
561
565
>>> pprint.pprint(outputs) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE +ALLOW_UNICODE
562
566
{'composite_transform': <undefined>,
567
+ 'elapsed_time': <undefined>,
563
568
'forward_invert_flags': [False, False],
564
569
'forward_transforms': ['.../nipype/testing/data/output_0GenericAffine.mat',
565
570
'.../nipype/testing/data/output_1Warp.nii.gz'],
566
571
'inverse_composite_transform': <undefined>,
567
572
'inverse_warped_image': <undefined>,
573
+ 'metric_value': <undefined>,
568
574
'reverse_invert_flags': [True, False],
569
575
'reverse_transforms': ['.../nipype/testing/data/output_0GenericAffine.mat', \
570
576
'.../nipype/testing/data/output_1InverseWarp.nii.gz'],
@@ -683,6 +689,29 @@ class Registration(ANTSCommand):
683
689
_quantilesDone = False
684
690
_linear_transform_names = ['Rigid' , 'Affine' , 'Translation' , 'CompositeAffine' , 'Similarity' ]
685
691
692
+ def __init__ (self , ** inputs ):
693
+ super (Registration , self ).__init__ (** inputs )
694
+ self ._elapsed_time = None
695
+ self ._metric_value = None
696
+
697
+ def _run_interface (self , runtime , correct_return_codes = (0 ,)):
698
+ runtime = super (Registration , self )._run_interface (runtime )
699
+
700
+ # Parse some profiling info
701
+ output = runtime .stdout or runtime .merged
702
+ if output :
703
+ lines = output .split ('\n ' )
704
+ for l in lines [::- 1 ]:
705
+ # This should be the last line
706
+ if l .strip ().startswith ('Total elapsed time:' ):
707
+ self ._elapsed_time = float (l .strip ().replace (
708
+ 'Total elapsed time: ' , '' ))
709
+ elif 'DIAGNOSTIC' in l :
710
+ self ._metric_value = float (l .split (',' )[2 ])
711
+ break
712
+
713
+ return runtime
714
+
686
715
def _format_metric (self , index ):
687
716
"""
688
717
Format the antsRegistration -m metric argument(s).
@@ -1033,6 +1062,10 @@ def _list_outputs(self):
1033
1062
outputs ['inverse_warped_image' ] = os .path .abspath (inv_out_filename )
1034
1063
if len (self .inputs .save_state ):
1035
1064
outputs ['save_state' ] = os .path .abspath (self .inputs .save_state )
1065
+ if self ._metric_value :
1066
+ outputs ['metric_value' ] = self ._metric_value
1067
+ if self ._elapsed_time :
1068
+ outputs ['elapsed_time' ] = self ._elapsed_time
1036
1069
return outputs
1037
1070
1038
1071
0 commit comments