def test_DTIRecon_outputs(): output_map = dict(ADC=dict(), B0=dict(), FA=dict(), FA_color=dict(), L1=dict(), L2=dict(), L3=dict(), V1=dict(), V2=dict(), V3=dict(), exp=dict(), tensor=dict(), ) outputs = DTIRecon.output_spec() for key, metadata in output_map.items(): for metakey, value in metadata.items(): yield assert_equal, getattr(outputs.traits()[key], metakey), value
def test_DTIRecon_inputs(): input_map = dict(DWI=dict(argstr='%s', mandatory=True, position=1, ), args=dict(argstr='%s', ), b0_threshold=dict(argstr='-b0_th', ), bvals=dict(mandatory=True, ), bvecs=dict(argstr='-gm %s', mandatory=True, ), environ=dict(nohash=True, usedefault=True, ), ignore_exception=dict(nohash=True, usedefault=True, ), image_orientation_vectors=dict(argstr='-iop %f', ), n_averages=dict(argstr='-nex %s', ), oblique_correction=dict(argstr='-oc', ), out_prefix=dict(argstr='%s', position=2, usedefault=True, ), output_type=dict(argstr='-ot %s', usedefault=True, ), terminal_output=dict(mandatory=True, nohash=True, ), ) inputs = DTIRecon.input_spec() for key, metadata in input_map.items(): for metakey, value in metadata.items(): yield assert_equal, getattr(inputs.traits()[key], metakey), value
def _run_interface(self, runtime): # Loading required packages from BrainTypes_additional_interfaces import DipyDenoise from nipype.interfaces.diffusion_toolkit.dti import DTIRecon import nipype.interfaces.fsl as fsl import nipype.pipeline.engine as pe import nipype.interfaces.io as nio import nipype.interfaces.utility as util from nipype.algorithms.misc import Gunzip from nipype.interfaces.fsl.maths import ApplyMask import os # ============================================================== # Processing of diffusion-weighted data # Extract b0 image fslroi = pe.Node(interface=fsl.ExtractROI(), name='extract_b0') fslroi.inputs.in_file = self.inputs.dwi fslroi.inputs.t_min = 0 fslroi.inputs.t_size = 1 # Create a brain mask bet = pe.Node(interface=fsl.BET(frac=0.3, robust=False, mask=True, no_output=False), name='bet') # Eddy-current and motion correction eddy = pe.Node(interface=fsl.epi.Eddy(args='-v'), name='eddy') eddy.inputs.in_acqp = self.inputs.acqparams eddy.inputs.in_bvec = self.inputs.bvecs eddy.inputs.in_bval = self.inputs.bvals eddy.inputs.in_file = self.inputs.dwi eddy.inputs.in_index = self.inputs.index_file # Denoising dwi_denoise = pe.Node(interface=DipyDenoise(), name='dwi_denoise') dwi_denoise.inputs.in_file = self.inputs.dwi # Fitting the diffusion tensor model dtifit = pe.Node(interface=DTIRecon(), name='dtifit') dtifit.inputs.out_prefix = self.inputs.subject_id dtifit.inputs.bvals = self.inputs.bvals dtifit.inputs.bvecs = self.inputs.bvecs # Applying the mask FA_applymask = pe.Node(interface=ApplyMask(), name='FA_applymask') # Renaming the outputs b0_rename = pe.Node(interface=util.Rename(keep_ext=True), name='b0_rename') b0_rename.inputs.format_string = self.inputs.subject_id + '_b0' colourFA_rename = pe.Node(interface=util.Rename(keep_ext=True), name='colourFA_rename') colourFA_rename.inputs.format_string = self.inputs.subject_id + '_colourFA' FA_rename = pe.Node(interface=util.Rename(keep_ext=True), name='FA_rename') FA_rename.inputs.format_string = self.inputs.subject_id + '_FA' dwi_rename = pe.Node(interface=util.Rename(keep_ext=True), name='dwi_rename') dwi_rename.inputs.format_string = self.inputs.subject_id + '_dwi' mask_rename = pe.Node(interface=util.Rename(keep_ext=True), name='mask_rename') mask_rename.inputs.format_string = self.inputs.subject_id + '_mask' # Collect everything datasink = pe.Node(nio.DataSink(), name='sinker') datasink.inputs.parameterization = False datasink.inputs.base_directory = self.inputs.out_directory + '/_subject_id_' + self.inputs.subject_id # ============================================================== # Setting up the workflow dwi_preproc = pe.Workflow(name='dwi_preproc') # Diffusion data # Preprocessing dwi_preproc.connect(fslroi, 'roi_file', bet, 'in_file') dwi_preproc.connect(bet, 'mask_file', eddy, 'in_mask') dwi_preproc.connect(eddy, 'out_corrected', dwi_denoise, 'in_file') # Calculate diffusion measures dwi_preproc.connect(dwi_denoise, 'out_file', dtifit, 'DWI') # Applying the mask to the scalar images dwi_preproc.connect(dtifit, 'FA', FA_applymask, 'in_file') dwi_preproc.connect(bet, 'mask_file', FA_applymask, 'mask_file') # Renaming dwi_preproc.connect(fslroi, 'roi_file', b0_rename, 'in_file') dwi_preproc.connect(dwi_denoise, 'out_file', dwi_rename, 'in_file') dwi_preproc.connect(FA_applymask, 'out_file', FA_rename, 'in_file') dwi_preproc.connect(dtifit, 'FA_color', colourFA_rename, 'in_file') dwi_preproc.connect(bet, 'mask_file', mask_rename, 'in_file') # Moving the results to the datasink dwi_preproc.connect(b0_rename, 'out_file', datasink, 'preprocessed.@b0') dwi_preproc.connect(colourFA_rename, 'out_file', datasink, 'preprocessed.@colourFA') dwi_preproc.connect(dwi_rename, 'out_file', datasink, 'preprocessed.@dwi') dwi_preproc.connect(FA_rename, 'out_file', datasink, 'preprocessed.@FA') dwi_preproc.connect(mask_rename, 'out_file', datasink, 'preprocessed.@mask') # ============================================================== # Running the workflow dwi_preproc.base_dir = os.path.abspath(self.inputs.out_directory + '_subject_id_' + self.inputs.subject_id) dwi_preproc.write_graph() dwi_preproc.run() return runtime