@@ -2592,7 +2592,9 @@ class EulerNumberInputSpec(FSTraitedSpec):
25922592
25932593
25942594class 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
25982600class 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