def test_changedt(create_files_in_directory_plus_output_type): files, testdir, out_ext = create_files_in_directory_plus_output_type # Get some fslmaths cdt = fsl.ChangeDataType() # Test that we got what we wanted assert cdt.cmd == "fslmaths" # Test that it needs a mandatory argument with pytest.raises(ValueError): cdt.run() # Set an in file and out file cdt.inputs.in_file = "a.nii" cdt.inputs.out_file = "b.nii" # But it still shouldn't work with pytest.raises(ValueError): cdt.run() # Now test that we can set the various data types dtypes = ["float", "char", "int", "short", "double", "input"] cmdline = "fslmaths a.nii b.nii -odt {}" for dtype in dtypes: foo = fsl.MathsCommand(in_file="a.nii", out_file="b.nii", output_datatype=dtype) assert foo.cmdline == cmdline.format(dtype)
def test_changedt(fsl_output_type=None): prev_type = set_output_type(fsl_output_type) files, testdir, origdir, out_ext = create_files_in_directory() # Get some fslmaths cdt = fsl.ChangeDataType() # Test that we got what we wanted yield assert_equal, cdt.cmd, "fslmaths" # Test that it needs a mandatory argument yield assert_raises, ValueError, cdt.run # Set an in file and out file cdt.inputs.in_file = "a.nii" cdt.inputs.out_file = "b.nii" # But it still shouldn't work yield assert_raises, ValueError, cdt.run # Now test that we can set the various data types dtypes = ["float", "char", "int", "short", "double", "input"] cmdline = "fslmaths a.nii b.nii -odt %s" for dtype in dtypes: foo = fsl.MathsCommand(in_file="a.nii", out_file="b.nii", output_datatype=dtype) yield assert_equal, foo.cmdline, cmdline % dtype # Clean up our mess clean_directory(testdir, origdir) set_output_type(prev_type)
def test_maths_base(fsl_output_type=None): prev_type = set_output_type(fsl_output_type) files, testdir, origdir, out_ext = create_files_in_directory() # Get some fslmaths maths = fsl.MathsCommand() # Test that we got what we wanted yield assert_equal, maths.cmd, "fslmaths" # Test that it needs a mandatory argument yield assert_raises, ValueError, maths.run # Set an in file maths.inputs.in_file = "a.nii" out_file = "a_maths%s" % out_ext # Now test the most basic command line yield assert_equal, maths.cmdline, "fslmaths a.nii %s" % os.path.join( testdir, out_file) # Now test that we can set the various data types dtypes = ["float", "char", "int", "short", "double", "input"] int_cmdline = "fslmaths -dt %s a.nii " + os.path.join(testdir, out_file) out_cmdline = "fslmaths a.nii " + os.path.join(testdir, out_file) + " -odt %s" duo_cmdline = "fslmaths -dt %s a.nii " + os.path.join( testdir, out_file) + " -odt %s" for dtype in dtypes: foo = fsl.MathsCommand(in_file="a.nii", internal_datatype=dtype) yield assert_equal, foo.cmdline, int_cmdline % dtype bar = fsl.MathsCommand(in_file="a.nii", output_datatype=dtype) yield assert_equal, bar.cmdline, out_cmdline % dtype foobar = fsl.MathsCommand(in_file="a.nii", internal_datatype=dtype, output_datatype=dtype) yield assert_equal, foobar.cmdline, duo_cmdline % (dtype, dtype) # Test that we can ask for an outfile name maths.inputs.out_file = "b.nii" yield assert_equal, maths.cmdline, "fslmaths a.nii b.nii" # Clean up our mess clean_directory(testdir, origdir) set_output_type(prev_type)
def test_maths_base(create_files_in_directory_plus_output_type): files, testdir, out_ext = create_files_in_directory_plus_output_type # Get some fslmaths maths = fsl.MathsCommand() # Test that we got what we wanted assert maths.cmd == "fslmaths" # Test that it needs a mandatory argument with pytest.raises(ValueError): maths.run() # Set an in file maths.inputs.in_file = "a.nii" out_file = "a_maths{}".format(out_ext) # Now test the most basic command line assert maths.cmdline == "fslmaths a.nii {}".format( os.path.join(testdir, out_file)) # Now test that we can set the various data types dtypes = ["float", "char", "int", "short", "double", "input"] int_cmdline = "fslmaths -dt {} a.nii " + os.path.join(testdir, out_file) out_cmdline = "fslmaths a.nii " + os.path.join(testdir, out_file) + " -odt {}" duo_cmdline = ("fslmaths -dt {} a.nii " + os.path.join(testdir, out_file) + " -odt {}") for dtype in dtypes: foo = fsl.MathsCommand(in_file="a.nii", internal_datatype=dtype) assert foo.cmdline == int_cmdline.format(dtype) bar = fsl.MathsCommand(in_file="a.nii", output_datatype=dtype) assert bar.cmdline == out_cmdline.format(dtype) foobar = fsl.MathsCommand(in_file="a.nii", internal_datatype=dtype, output_datatype=dtype) assert foobar.cmdline == duo_cmdline.format(dtype, dtype) # Test that we can ask for an outfile name maths.inputs.out_file = "b.nii" assert maths.cmdline == "fslmaths a.nii b.nii"
def qap_mask_workflow(workflow, resource_pool, config): import os import sys import nipype.interfaces.io as nio import nipype.pipeline.engine as pe import nipype.interfaces.utility as niu import nipype.interfaces.fsl.maths as fsl from nipype.interfaces.fsl.base import Info from qap_workflows_utils import select_thresh, \ slice_head_mask from workflow_utils import check_input_resources, \ check_config_settings # check_input_resources(resource_pool, 'anatomical_reorient') # check_input_resources(resource_pool, 'ants_affine_xfm') if 'template_skull_for_anat' not in config: config['template_skull_for_anat'] = Info.standard_image( 'MNI152_T1_2mm.nii.gz') check_config_settings(config, 'template_skull_for_anat') if 'flirt_affine_xfm' not in resource_pool.keys(): from anatomical_preproc import flirt_anatomical_linear_registration workflow, resource_pool = \ flirt_anatomical_linear_registration(workflow, resource_pool, config) if 'anatomical_reorient' not in resource_pool.keys(): from anatomical_preproc import anatomical_reorient_workflow workflow, resource_pool = \ anatomical_reorient_workflow(workflow, resource_pool, config) select_thresh = pe.Node(niu.Function(input_names=['input_skull'], output_names=['thresh_out'], function=select_thresh), name='qap_headmask_select_thresh', iterfield=['input_skull']) mask_skull = pe.Node(fsl.Threshold(args='-bin'), name='qap_headmask_thresh') dilate_node = pe.Node( fsl.MathsCommand(args='-dilM -dilM -dilM -dilM -dilM -dilM'), name='qap_headmask_dilate') erode_node = pe.Node( fsl.MathsCommand(args='-eroF -eroF -eroF -eroF -eroF -eroF'), name='qap_headmask_erode') slice_head_mask = pe.Node(niu.Function( input_names=['infile', 'transform', 'standard'], output_names=['outfile_path'], function=slice_head_mask), name='qap_headmask_slice_head_mask') combine_masks = pe.Node(fsl.BinaryMaths(operation='add', args='-bin'), name='qap_headmask_combine_masks') if len(resource_pool['anatomical_reorient']) == 2: node, out_file = resource_pool['anatomical_reorient'] workflow.connect([(node, select_thresh, [(out_file, 'input_skull')]), (node, mask_skull, [(out_file, 'in_file')]), (node, slice_head_mask, [(out_file, 'infile')])]) else: select_thresh.inputs.input_skull = resource_pool['anatomical_reorient'] mask_skull.inputs.in_file = resource_pool['anatomical_reorient'] # convert_fsl_xfm.inputs.infile = # resource_pool['anatomical_reorient'] slice_head_mask.inputs.infile = resource_pool['anatomical_reorient'] if len(resource_pool['flirt_affine_xfm']) == 2: node, out_file = resource_pool['flirt_affine_xfm'] workflow.connect(node, out_file, slice_head_mask, 'transform') else: slice_head_mask.inputs.transform = resource_pool['flirt_affine_xfm'] # convert_fsl_xfm.inputs.standard = config['template_skull_for_anat'] slice_head_mask.inputs.standard = config['template_skull_for_anat'] workflow.connect([ (select_thresh, mask_skull, [('thresh_out', 'thresh')]), # (convert_fsl_xfm, slice_head_mask, [('converted_xfm', 'transform')]) (mask_skull, dilate_node, [('out_file', 'in_file')]), (dilate_node, erode_node, [('out_file', 'in_file')]), (erode_node, combine_masks, [('out_file', 'in_file')]), (slice_head_mask, combine_masks, [('outfile_path', 'operand_file')]) ]) resource_pool['qap_head_mask'] = (combine_masks, 'out_file') return workflow, resource_pool