@@ -1237,8 +1237,10 @@ def _run_interface(self, runtime):
12371237class EddyQuadInputSpec (FSLCommandInputSpec ):
12381238 base_name = traits .Str (
12391239 'eddy_corrected' ,
1240+ usedefault = True ,
12401241 argstr = '%s' ,
1241- desc = "Basename (including path) specified when running EDDY" ,
1242+ desc = ("Basename (including path) for EDDY output files, i.e., "
1243+ "corrected images and QC files" ),
12421244 position = 0 ,
12431245 )
12441246 idx_file = File (
@@ -1268,31 +1270,26 @@ class EddyQuadInputSpec(FSLCommandInputSpec):
12681270 )
12691271 bvec_file = File (
12701272 exists = True ,
1271- mandatory = False ,
12721273 argstr = "--bvecs=%s" ,
12731274 desc = ("b-vectors file - only used when <base_name>.eddy_residuals "
12741275 "file is present" )
12751276 )
12761277 output_dir = traits .Str (
1277- 'eddy_corrected.qc' ,
1278- mandatory = True ,
1279- usedefault = True ,
1278+ name_template = '%s.qc' ,
1279+ name_source = ['base_name' ],
12801280 argstr = '--output-dir=%s' ,
12811281 desc = "Output directory - default = '<base_name>.qc'" ,
12821282 )
12831283 field = File (
1284- mandatory = False ,
12851284 argstr = '--field=%s' ,
12861285 desc = "TOPUP estimated field (in Hz)" ,
12871286 )
1288- slspec = File (
1289- mandatory = False ,
1287+ slice_spec = File (
12901288 argstr = '--slspec=%s' ,
12911289 desc = "Text file specifying slice/group acquisition" ,
12921290 )
12931291 verbose = traits .Bool (
12941292 False ,
1295- mandatory = False ,
12961293 argstr = '--verbose' ,
12971294 desc = "Display debug messages" ,
12981295 )
@@ -1321,7 +1318,7 @@ class EddyQuadOutputSpec(TraitedSpec):
13211318 )
13221319 )
13231320
1324- out_avg_b0_png = traits .List (
1321+ out_avg_b0_pe_png = traits .List (
13251322 File (
13261323 exists = True ,
13271324 mandatory = False ,
@@ -1399,52 +1396,41 @@ class EddyQuad(FSLCommand):
13991396 input_spec = EddyQuadInputSpec
14001397 output_spec = EddyQuadOutputSpec
14011398
1402- def __init__ (self , ** inputs ):
1403- super (EddyQuad , self ).__init__ (** inputs )
1404-
14051399 def _list_outputs (self ):
1406- from glob import glob
1400+ import json
14071401 outputs = self .output_spec ().get ()
1408- out_dir = self .inputs .output_dir
1409- outputs ['out_qc_json' ] = os .path .abspath (
1410- os .path .join (out_dir , 'qc.json' )
1411- )
1412- outputs ['out_qc_pdf' ] = os .path .abspath (
1413- os .path .join (out_dir , 'qc.pdf' )
1414- )
1415-
1416- outputs ['out_avg_b0_png' ] = glob (os .path .abspath (
1417- os .path .join (out_dir , 'avg_b0_pe*.png' )
1418- ))
1419-
1420- outputs ['out_avg_b_png' ] = [b for b in glob (os .path .abspath (
1421- os .path .join (out_dir , 'avg_b*.png' )
1422- )) if b not in outputs ['out_avg_b0_png' ]]
1402+ out_dir = os .path .abspath (self .inputs .output_dir )
1403+ outputs ['out_qc_json' ] = os .path .join (out_dir , 'qc.json' )
1404+ outputs ['out_qc_pdf' ] = os .path .join (out_dir , 'qc.pdf' )
14231405
1424- outputs ['out_cnr_png' ] = glob (os .path .abspath (
1425- os .path .join (out_dir , 'cnr*.png' )
1426- ))
1406+ with open (outputs ['out_qc_json' ]) as fp :
1407+ qc = json .load (fp )
14271408
1428- vdm = os .path .abspath (
1429- os .path .join (out_dir , 'vdm.png' )
1430- )
1409+ outputs ['out_avg_b_png' ] = [
1410+ os .path .join (out_dir , 'avg_b{bval:d}.png' .format (bval = bval ))
1411+ for bval in list (set ([0 ] + qc .get ('data_unique_bvals' )))
1412+ ]
14311413
1432- if os .path .exists (vdm ):
1433- outputs ['out_vdm_png' ] = vdm
1414+ if qc .get ('qc_field_flag' ):
1415+ outputs ['out_avg_b0_pe_png' ] = [
1416+ os .path .join (out_dir , 'avg_b0_pe{i:d}' .format (i = i ))
1417+ for i in range (qc .get ('data_no_PE_dirs' ))
1418+ ]
14341419
1435- residuals = os .path .abspath (
1436- os .path .join (out_dir , 'eddy_msr.txt' )
1437- )
1420+ outputs ['out_vdm_png' ] = os .path .join (out_dir , 'vdm.png' )
14381421
1439- if os .path .exists (residuals ):
1440- outputs ['out_residuals' ] = residuals
1422+ if qc .get ('qc_cnr_flag' ):
1423+ outputs ['out_cnr_png' ] = [
1424+ os .path .join (out_dir , 'cnr{i:04d}.nii.gz.png' )
1425+ for i , _ in enumerate (qc .get ('qc_cnr_avg' ))
1426+ ]
14411427
1442- outlier_vols = os .path .abspath (
1443- os .path .join (out_dir , 'vols_no_outliers.txt' )
1444- )
1428+ if qc .get ('qc_rss_flag' ):
1429+ outputs ['out_residuals' ] = os .path .join (out_dir , 'eddy_msr.txt' )
14451430
1446- if os .path .exists (outlier_vols ):
1447- outputs ['out_clean_volumes' ] = outlier_vols
1431+ if qc .get ('qc_ol_flag' ):
1432+ outputs ['out_clean_volumes' ] = os .path .join (out_dir ,
1433+ 'vols_no_outliers.txt' )
14481434
14491435 return outputs
14501436
0 commit comments