Skip to content

Commit e530d44

Browse files
committed
ENH: Detect values for EulerNumber interface
1 parent f77a5bd commit e530d44

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

nipype/interfaces/freesurfer/utils.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2592,7 +2592,9 @@ class EulerNumberInputSpec(FSTraitedSpec):
25922592

25932593

25942594
class EulerNumberOutputSpec(TraitedSpec):
2595-
out_file = File(exists=False, desc="Output file for EulerNumber")
2595+
euler = traits.Int(desc="Euler number of cortical surface. A value of 2 signals a "
2596+
"topologically correct surface model with no holes")
2597+
defects = traits.Int(desc="Number of defects")
25962598

25972599

25982600
class EulerNumber(FSCommand):
@@ -2612,9 +2614,22 @@ class EulerNumber(FSCommand):
26122614
input_spec = EulerNumberInputSpec
26132615
output_spec = EulerNumberOutputSpec
26142616

2617+
def _run_interface(self, runtime):
2618+
runtime = super()._run_interface(runtime)
2619+
self._parse_output(runtime.stdout, runtime.stderr)
2620+
return runtime
2621+
2622+
def _parse_output(self, stdout, stderr):
2623+
"""Parse stdout / stderr and extract defects"""
2624+
m = re.search(r'(?<=total defect index = )\d+', stdout or stderr)
2625+
if m is None:
2626+
raise RuntimeError("Could not fetch defect index")
2627+
self._defects = int(m.group())
2628+
26152629
def _list_outputs(self):
26162630
outputs = self._outputs().get()
2617-
outputs["out_file"] = os.path.abspath(self.inputs.in_file)
2631+
outputs["defects"] = self._defects
2632+
outputs["euler"] = 2 - (2 * self._defects)
26182633
return outputs
26192634

26202635

0 commit comments

Comments
 (0)