@@ -1237,8 +1237,10 @@ def _run_interface(self, runtime):
1237
1237
class EddyQuadInputSpec (FSLCommandInputSpec ):
1238
1238
base_name = traits .Str (
1239
1239
'eddy_corrected' ,
1240
+ usedefault = True ,
1240
1241
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" ),
1242
1244
position = 0 ,
1243
1245
)
1244
1246
idx_file = File (
@@ -1268,31 +1270,26 @@ class EddyQuadInputSpec(FSLCommandInputSpec):
1268
1270
)
1269
1271
bvec_file = File (
1270
1272
exists = True ,
1271
- mandatory = False ,
1272
1273
argstr = "--bvecs=%s" ,
1273
1274
desc = ("b-vectors file - only used when <base_name>.eddy_residuals "
1274
1275
"file is present" )
1275
1276
)
1276
1277
output_dir = traits .Str (
1277
- 'eddy_corrected.qc' ,
1278
- mandatory = True ,
1279
- usedefault = True ,
1278
+ name_template = '%s.qc' ,
1279
+ name_source = ['base_name' ],
1280
1280
argstr = '--output-dir=%s' ,
1281
1281
desc = "Output directory - default = '<base_name>.qc'" ,
1282
1282
)
1283
1283
field = File (
1284
- mandatory = False ,
1285
1284
argstr = '--field=%s' ,
1286
1285
desc = "TOPUP estimated field (in Hz)" ,
1287
1286
)
1288
- slspec = File (
1289
- mandatory = False ,
1287
+ slice_spec = File (
1290
1288
argstr = '--slspec=%s' ,
1291
1289
desc = "Text file specifying slice/group acquisition" ,
1292
1290
)
1293
1291
verbose = traits .Bool (
1294
1292
False ,
1295
- mandatory = False ,
1296
1293
argstr = '--verbose' ,
1297
1294
desc = "Display debug messages" ,
1298
1295
)
@@ -1321,7 +1318,7 @@ class EddyQuadOutputSpec(TraitedSpec):
1321
1318
)
1322
1319
)
1323
1320
1324
- out_avg_b0_png = traits .List (
1321
+ out_avg_b0_pe_png = traits .List (
1325
1322
File (
1326
1323
exists = True ,
1327
1324
mandatory = False ,
@@ -1399,52 +1396,41 @@ class EddyQuad(FSLCommand):
1399
1396
input_spec = EddyQuadInputSpec
1400
1397
output_spec = EddyQuadOutputSpec
1401
1398
1402
- def __init__ (self , ** inputs ):
1403
- super (EddyQuad , self ).__init__ (** inputs )
1404
-
1405
1399
def _list_outputs (self ):
1406
- from glob import glob
1400
+ import json
1407
1401
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' )
1423
1405
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 )
1427
1408
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
+ ]
1431
1413
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
+ ]
1434
1419
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' )
1438
1421
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
+ ]
1441
1427
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' )
1445
1430
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' )
1448
1434
1449
1435
return outputs
1450
1436
0 commit comments