@@ -2592,7 +2592,9 @@ class EulerNumberInputSpec(FSTraitedSpec):
2592
2592
2593
2593
2594
2594
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" )
2596
2598
2597
2599
2598
2600
class EulerNumber (FSCommand ):
@@ -2612,9 +2614,22 @@ class EulerNumber(FSCommand):
2612
2614
input_spec = EulerNumberInputSpec
2613
2615
output_spec = EulerNumberOutputSpec
2614
2616
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
+
2615
2629
def _list_outputs (self ):
2616
2630
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 )
2618
2633
return outputs
2619
2634
2620
2635
0 commit comments