Skip to content

Commit 46f0b74

Browse files
authored
Merge pull request #1985 from oesteban/enh/antsRegistrationMinorAdd
[ENH] Add "profiling" outputs to ants.Registration
2 parents 32966e7 + 6909149 commit 46f0b74

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

CHANGES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
Upcoming release
22
================
33

4+
* ENH: Add elapsed_time and final metric_value to ants.Registration (https://github.com/nipy/nipype/pull/1985)
45
* ENH: Improve terminal_output feature (https://github.com/nipy/nipype/pull/2209)
56
* ENH: Simple interface to FSL std2imgcoords (https://github.com/nipy/nipype/pull/2209, prev #1398)
67
* ENH: Centralize virtual/physical $DISPLAYs (https://github.com/nipy/nipype/pull/#2203)

nipype/interfaces/ants/registration.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,8 @@ class RegistrationOutputSpec(TraitedSpec):
416416
warped_image = File(desc="Outputs warped image")
417417
inverse_warped_image = File(desc="Outputs the inverse of the warped image")
418418
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')
419421

420422

421423
class Registration(ANTSCommand):
@@ -535,10 +537,12 @@ class Registration(ANTSCommand):
535537
>>> outputs = reg4._list_outputs()
536538
>>> pprint.pprint(outputs) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE +ALLOW_UNICODE
537539
{'composite_transform': '.../nipype/testing/data/output_Composite.h5',
540+
'elapsed_time': <undefined>,
538541
'forward_invert_flags': [],
539542
'forward_transforms': [],
540543
'inverse_composite_transform': '.../nipype/testing/data/output_InverseComposite.h5',
541544
'inverse_warped_image': <undefined>,
545+
'metric_value': <undefined>,
542546
'reverse_invert_flags': [],
543547
'reverse_transforms': [],
544548
'save_state': '.../nipype/testing/data/trans.mat',
@@ -560,11 +564,13 @@ class Registration(ANTSCommand):
560564
>>> outputs = reg4b._list_outputs()
561565
>>> pprint.pprint(outputs) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE +ALLOW_UNICODE
562566
{'composite_transform': <undefined>,
567+
'elapsed_time': <undefined>,
563568
'forward_invert_flags': [False, False],
564569
'forward_transforms': ['.../nipype/testing/data/output_0GenericAffine.mat',
565570
'.../nipype/testing/data/output_1Warp.nii.gz'],
566571
'inverse_composite_transform': <undefined>,
567572
'inverse_warped_image': <undefined>,
573+
'metric_value': <undefined>,
568574
'reverse_invert_flags': [True, False],
569575
'reverse_transforms': ['.../nipype/testing/data/output_0GenericAffine.mat', \
570576
'.../nipype/testing/data/output_1InverseWarp.nii.gz'],
@@ -683,6 +689,29 @@ class Registration(ANTSCommand):
683689
_quantilesDone = False
684690
_linear_transform_names = ['Rigid', 'Affine', 'Translation', 'CompositeAffine', 'Similarity']
685691

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+
686715
def _format_metric(self, index):
687716
"""
688717
Format the antsRegistration -m metric argument(s).
@@ -1033,6 +1062,10 @@ def _list_outputs(self):
10331062
outputs['inverse_warped_image'] = os.path.abspath(inv_out_filename)
10341063
if len(self.inputs.save_state):
10351064
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
10361069
return outputs
10371070

10381071

nipype/interfaces/ants/tests/test_auto_Registration.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,12 @@ def test_Registration_inputs():
137137

138138
def test_Registration_outputs():
139139
output_map = dict(composite_transform=dict(),
140+
elapsed_time=dict(),
140141
forward_invert_flags=dict(),
141142
forward_transforms=dict(),
142143
inverse_composite_transform=dict(),
143144
inverse_warped_image=dict(),
145+
metric_value=dict(),
144146
reverse_invert_flags=dict(),
145147
reverse_transforms=dict(),
146148
save_state=dict(),

0 commit comments

Comments
 (0)