def test_EstimateFOD_inputs(): input_map = dict(args=dict(argstr='%s', ), bval_scale=dict(argstr='-bvalue_scaling %s', ), environ=dict(nohash=True, usedefault=True, ), grad_file=dict(argstr='-grad %s', ), grad_fsl=dict(argstr='-fslgrad %s %s', ), ignore_exception=dict(nohash=True, usedefault=True, ), in_bval=dict(), in_bvec=dict(argstr='-fslgrad %s %s', ), in_dirs=dict(argstr='-directions %s', ), in_file=dict(argstr='%s', mandatory=True, position=-3, ), in_mask=dict(argstr='-mask %s', ), max_sh=dict(argstr='-lmax %d', ), n_iter=dict(argstr='-niter %d', ), neg_lambda=dict(argstr='-neg_lambda %f', ), nthreads=dict(argstr='-nthreads %d', nohash=True, ), out_file=dict(argstr='%s', mandatory=True, position=-1, usedefault=True, ), response=dict(argstr='%s', mandatory=True, position=-2, ), sh_filter=dict(argstr='-filter %s', ), shell=dict(argstr='-shell %s', sep=',', ), terminal_output=dict(nohash=True, ), thres=dict(argstr='-threshold %f', ), ) inputs = EstimateFOD.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 test_EstimateFOD_outputs(): output_map = dict(out_file=dict(), ) outputs = EstimateFOD.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 fod_pipeline(self, **name_maps): # @UnusedVariable """ Estimates the fibre orientation distribution (FOD) using constrained spherical deconvolution Parameters ---------- """ # inputs=[FilesetSpec('bias_correct', nifti_gz_format), # FilesetSpec('grad_dirs', fsl_bvecs_format), # FilesetSpec('bvalues', fsl_bvals_format), # FilesetSpec('wm_response', text_format), # FilesetSpec('brain_mask', nifti_gz_format)], # outputs=[FilesetSpec('fod', nifti_gz_format)], pipeline = self.new_pipeline( name='fod', desc=("Estimates the fibre orientation distribution in each" " voxel"), references=[mrtrix_cite], name_maps=name_maps) if self.branch('fod_algorithm', 'msmt_csd'): pipeline.add_input(FilesetSpec('gm_response', text_format)) pipeline.add_input(FilesetSpec('csf_response', text_format)) # Create fod fit node dwi2fod = pipeline.add( 'dwi2fod', EstimateFOD(), requirements=[mrtrix_req.v('3.0rc3')]) dwi2fod.inputs.algorithm = self.parameter('fod_algorithm') # Gradient merge node fsl_grads = pipeline.add("fsl_grads", MergeTuple(2)) # Connect nodes pipeline.connect(fsl_grads, 'out', dwi2fod, 'grad_fsl') # Connect to inputs pipeline.connect_input('grad_dirs', fsl_grads, 'in1') pipeline.connect_input('bvalues', fsl_grads, 'in2') pipeline.connect_input('bias_correct', dwi2fod, 'in_file') pipeline.connect_input('wm_response', dwi2fod, 'wm_txt') pipeline.connect_input('brain_mask', dwi2fod, 'mask_file') # Connect to outputs pipeline.connect_output('wm_odf', dwi2fod, 'wm_odf') # If multi-tissue if self.multi_tissue: pipeline.connect_input('gm_response', dwi2fod, 'gm_txt') pipeline.connect_input('csf_response', dwi2fod, 'csf_txt') dwi2fod.inputs.gm_odf = 'gm.mif' dwi2fod.inputs.csf_odf = 'csf.mif' pipeline.connect_output('gm_odf', dwi2fod, 'gm_odf') pipeline.connect_output('csf_odf', dwi2fod, 'csf_odf') # Check inputs/output are connected return pipeline
def fod_pipeline(self, **name_maps): # @UnusedVariable """ Estimates the fibre orientation distribution (FOD) using constrained spherical deconvolution Parameters ---------- """ pipeline = self.new_pipeline( name='fod', desc=("Estimates the fibre orientation distribution in each" " voxel"), citations=[mrtrix_cite], name_maps=name_maps) if self.branch('fod_algorithm', 'msmt_csd'): pipeline.add_input(FilesetSpec('gm_response', text_format)) pipeline.add_input(FilesetSpec('csf_response', text_format)) # Create fod fit node dwi2fod = pipeline.add( 'dwi2fod', EstimateFOD(algorithm=self.parameter('fod_algorithm')), inputs={ 'in_file': (self.series_preproc_spec_name, nifti_gz_format), 'wm_txt': ('wm_response', text_format), 'mask_file': (self.brain_mask_spec_name, nifti_gz_format), 'grad_fsl': self.fsl_grads(pipeline) }, outputs={'wm_odf': ('wm_odf', nifti_gz_format)}, requirements=[mrtrix_req.v('3.0rc3')]) if self.multi_tissue: dwi2fod.inputs.gm_odf = 'gm.mif', dwi2fod.inputs.csf_odf = 'csf.mif', pipeline.connect_input('gm_response', dwi2fod, 'gm_txt', text_format), pipeline.connect_input('csf_response', dwi2fod, 'csf_txt', text_format), pipeline.connect_output('gm_odf', dwi2fod, 'gm_odf', nifti_gz_format), pipeline.connect_output('csf_odf', dwi2fod, 'csf_odf', nifti_gz_format), # Check inputs/output are connected return pipeline
def fod_pipeline(self, **kwargs): # @UnusedVariable """ Estimates the fibre orientation distribution (FOD) using constrained spherical deconvolution Parameters ---------- """ inputs = [ DatasetSpec('bias_correct', nifti_gz_format), DatasetSpec('grad_dirs', fsl_bvecs_format), DatasetSpec('bvalues', fsl_bvals_format), DatasetSpec('wm_response', text_format), DatasetSpec('brain_mask', nifti_gz_format) ] outputs = [DatasetSpec('wm_odf', mrtrix_format)] if self.multi_tissue: inputs.append(DatasetSpec('gm_response', text_format)) inputs.append(DatasetSpec('csf_response', text_format)) outputs.append(DatasetSpec('gm_odf', mrtrix_format)) outputs.append(DatasetSpec('csf_odf', mrtrix_format)) algorithm = 'msmt_csd' else: algorithm = 'csd' pipeline = self.create_pipeline( name='fod', inputs=inputs, outputs=outputs, desc=("Estimates the fibre orientation distribution in each" " voxel"), version=1, citations=[mrtrix_cite], **kwargs) # Create fod fit node dwi2fod = pipeline.create_node(EstimateFOD(), name='dwi2fod', requirements=[mrtrix3_req]) dwi2fod.inputs.algorithm = algorithm # Gradient merge node fsl_grads = pipeline.create_node(MergeTuple(2), name="fsl_grads") # Connect nodes pipeline.connect(fsl_grads, 'out', dwi2fod, 'grad_fsl') # Connect to inputs pipeline.connect_input('grad_dirs', fsl_grads, 'in1') pipeline.connect_input('bvalues', fsl_grads, 'in2') pipeline.connect_input('bias_correct', dwi2fod, 'in_file') pipeline.connect_input('wm_response', dwi2fod, 'wm_txt') pipeline.connect_input('brain_mask', dwi2fod, 'mask_file') # Connect to outputs pipeline.connect_output('wm_odf', dwi2fod, 'wm_odf') # If multi-tissue if self.multi_tissue: pipeline.connect_input('gm_response', dwi2fod, 'gm_txt') pipeline.connect_input('csf_response', dwi2fod, 'csf_txt') dwi2fod.inputs.gm_odf = 'gm.mif' dwi2fod.inputs.csf_odf = 'csf.mif' pipeline.connect_output('gm_odf', dwi2fod, 'gm_odf') pipeline.connect_output('csf_odf', dwi2fod, 'csf_odf') # Check inputs/output are connected return pipeline