Skip to content
This repository was archived by the owner on Dec 27, 2022. It is now read-only.

Commit 93e8b8b

Browse files
committed
ENH: add arg for eddy_cuda and update outputs for eddy quad workflow
1 parent e12543b commit 93e8b8b

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

dmriprep/run.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,12 @@ def get_dmriprep_pe_workflow():
363363
eddy.inputs.residuals = True
364364
import multiprocessing
365365
eddy.inputs.num_threads = multiprocessing.cpu_count()
366+
import numba.cuda
367+
try:
368+
if numba.cuda.gpus:
369+
eddy.inputs.use_cuda = True
370+
except:
371+
eddy.inputs.use_cuda = False
366372

367373
topup = prep.get_node('peb_correction.topup')
368374
topup.inputs.checksize = True
@@ -374,12 +380,14 @@ def get_dmriprep_pe_workflow():
374380

375381
eddy_quad = pe.Node(fsl.EddyQuad(verbose=True, checksize=True), name="eddy_quad")
376382
get_path = lambda x: x.split('.nii.gz')[0].split('_fix')[0]
377-
wf.connect(prep, ('fsl_eddy.out_corrected', get_path), eddy_quad, "base_name")
383+
get_qc_path = lambda x: x.split('.nii.gz')[0] + '.qc'
384+
wf.connect(prep, ('fsl_eddy.out_corrected', get_path), eddy_quad, 'base_name')
378385
wf.connect(inputspec, 'bval_file', eddy_quad, 'bval_file')
379386
wf.connect(prep, 'Rotate_Bvec.out_file', eddy_quad, 'bvec_file')
380387
wf.connect(prep, 'peb_correction.topup.out_field', eddy_quad, 'field')
381388
wf.connect(prep, 'gen_index.out_file', eddy_quad, 'idx_file')
382389
wf.connect(prep, 'peb_correction.topup.out_enc_file', eddy_quad, 'param_file')
390+
wf.connect(prep, ('fsl_eddy.out_corrected', get_qc_path), eddy_quad, 'output_dir')
383391

384392
# need a mask file for eddy_quad. lets get it from the B0.
385393
def get_b0_mask_fn(b0_file):
@@ -396,7 +404,6 @@ def get_b0_mask_fn(b0_file):
396404
return mask_file
397405

398406

399-
400407
def id_outliers_fn(outlier_report, threshold, dwi_file):
401408
"""Get list of scans that exceed threshold for number of outliers
402409
@@ -596,6 +603,7 @@ def apply_transform_to_bvecs_fn(bvec_file, reg_mat_file):
596603
import numpy as np
597604
import nipype.utils.filemanip as fm
598605
import os
606+
599607
aff = np.loadtxt(reg_mat_file)
600608
bvecs = np.loadtxt(bvec_file)
601609
bvec_trans = []
@@ -654,6 +662,7 @@ def binarize_aparc(aparc_aseg):
654662
import nibabel as nib
655663
from nipype.utils.filemanip import fname_presuffix
656664
import os.path as op
665+
657666
img = nib.load(aparc_aseg)
658667
data, aff = img.get_data(), img.affine
659668
outfile = fname_presuffix(
@@ -746,13 +755,13 @@ def binarize_aparc(aparc_aseg):
746755
wf.connect(scale_tensor_eddy, "out_file", datasink, "dmriprep.dti_eddy.@scaled_tensor")
747756

748757
# all the eddy_quad stuff
749-
wf.connect(eddy_quad, 'out_qc_json', datasink, "dmriprep.qc.@eddyquad_json")
750-
wf.connect(eddy_quad, 'out_qc_pdf', datasink, "dmriprep.qc.@eddyquad_pdf")
751-
wf.connect(eddy_quad, 'out_avg_b_png', datasink, "dmriprep.qc.@eddyquad_bpng")
752-
wf.connect(eddy_quad, 'out_avg_b0_pe_png', datasink, "dmriprep.qc.@eddyquad_b0png")
753-
wf.connect(eddy_quad, 'out_cnr_png', datasink, "dmriprep.qc.@eddyquad_cnr")
754-
wf.connect(eddy_quad, 'out_vdm_png', datasink, "dmriprep.qc.@eddyquad_vdm")
755-
wf.connect(eddy_quad, 'out_residuals', datasink, 'dmriprep.qc.@eddyquad_resid')
758+
wf.connect(eddy_quad, 'qc_json', datasink, "dmriprep.qc.@eddyquad_json")
759+
wf.connect(eddy_quad, 'qc_pdf', datasink, "dmriprep.qc.@eddyquad_pdf")
760+
wf.connect(eddy_quad, 'avg_b_png', datasink, "dmriprep.qc.@eddyquad_bpng")
761+
wf.connect(eddy_quad, 'avg_b0_pe_png', datasink, "dmriprep.qc.@eddyquad_b0png")
762+
wf.connect(eddy_quad, 'cnr_png', datasink, "dmriprep.qc.@eddyquad_cnr")
763+
wf.connect(eddy_quad, 'vdm_png', datasink, "dmriprep.qc.@eddyquad_vdm")
764+
wf.connect(eddy_quad, 'residuals', datasink, 'dmriprep.qc.@eddyquad_resid')
756765

757766
# anatomical registration stuff
758767
wf.connect(bbreg, "min_cost_file", datasink, "dmriprep.reg.@mincost")
@@ -784,7 +793,7 @@ def report_fn(dwi_corrected_file, eddy_rms, eddy_report,
784793

785794
# for the report, lets show the eddy corrected (full volume) image
786795
wf.connect(voltransform, "transformed_file", report_node, 'dwi_corrected_file')
787-
wf.connect(eddy_quad, 'out_qc_json', report_node, 'eddy_qc_file')
796+
wf.connect(eddy_quad, 'qc_json', report_node, 'eddy_qc_file')
788797

789798
# add the rms movement output from eddy
790799
wf.connect(prep, "fsl_eddy.out_movement_rms", report_node, 'eddy_rms')
@@ -802,6 +811,7 @@ def report_fn(dwi_corrected_file, eddy_rms, eddy_report,
802811
# its super annoying.
803812
def name_files_nicely(dwi_file, subject_id):
804813
import os.path as op
814+
805815
dwi_fname = op.split(dwi_file)[1].split(".nii.gz")[0]
806816
substitutions = [
807817
("vol0000_flirt_merged.nii.gz", dwi_fname + '.nii.gz'),

0 commit comments

Comments
 (0)