diff --git a/dipy/io/image.py b/dipy/io/image.py index 85ba58a016..d14fd1176e 100644 --- a/dipy/io/image.py +++ b/dipy/io/image.py @@ -8,7 +8,7 @@ def load_nifti(fname, return_img=False, return_voxsize=False, img = nib.load(fname) data = img.get_data() vox_size = img.header.get_zooms()[:3] - + ret_val = [data, img.affine] if return_img: diff --git a/dipy/workflows/denoise.py b/dipy/workflows/denoise.py index 97cc50821a..c6af05cf25 100644 --- a/dipy/workflows/denoise.py +++ b/dipy/workflows/denoise.py @@ -3,8 +3,7 @@ import logging import shutil -import nibabel as nib - +from dipy.io.image import load_nifti, save_nifti from dipy.denoise.nlmeans import nlmeans from dipy.denoise.noise_estimate import estimate_sigma from dipy.workflows.workflow import Workflow @@ -43,8 +42,7 @@ def run(self, input_files, sigma=0, out_dir='', logging.warning('Denoising skipped for now.') else: logging.info('Denoising {0}'.format(fpath)) - image = nib.load(fpath) - data = image.get_data() + data, affine, image = load_nifti(fpath, return_img=True) if sigma == 0: logging.info('Estimating sigma') @@ -52,8 +50,6 @@ def run(self, input_files, sigma=0, out_dir='', logging.debug('Found sigma {0}'.format(sigma)) denoised_data = nlmeans(data, sigma) - denoised_image = nib.Nifti1Image( - denoised_data, image.affine, image.header) + save_nifti(odenoised, denoised_data, affine, image.header) - denoised_image.to_filename(odenoised) logging.info('Denoised volume saved as {0}'.format(odenoised)) diff --git a/dipy/workflows/mask.py b/dipy/workflows/mask.py index 3d52189331..9e8770dd72 100644 --- a/dipy/workflows/mask.py +++ b/dipy/workflows/mask.py @@ -1,7 +1,6 @@ #!/usr/bin/env python from __future__ import division -import inspect import logging import numpy as np diff --git a/dipy/workflows/reconst.py b/dipy/workflows/reconst.py index d45ec750f3..54888a0615 100644 --- a/dipy/workflows/reconst.py +++ b/dipy/workflows/reconst.py @@ -12,6 +12,7 @@ from dipy.data import get_sphere from dipy.io.gradients import read_bvals_bvecs from dipy.io.peaks import save_peaks, peaks_to_niftis +from dipy.io.image import load_nifti, save_nifti from dipy.reconst.csdeconv import (ConstrainedSphericalDeconvModel, auto_response) from dipy.reconst.dti import (TensorModel, color_fa, fractional_anisotropy, @@ -31,7 +32,7 @@ class ReconstMAPMRIFlow(Workflow): def get_short_name(cls): return 'mapmri' - def run(self, data_file, data_bvals, data_bvecs, small_delta, big_delta, + def run(self, data_files, bvals_files, bvecs_files, small_delta, big_delta, b0_threshold=50.0, laplacian=True, positivity=True, bval_threshold=2000, save_metrics=[], laplacian_weighting=0.05, radial_order=6, out_dir='', @@ -115,9 +116,8 @@ def run(self, data_file, data_bvals, data_bvecs, small_delta, big_delta, out_rtap, out_rtpp, out_ng, out_perng, out_parng) in io_it: logging.info('Computing MAPMRI metrics for {0}'.format(dwi)) - img = nib.load(dwi) - data = img.get_data() - affine = img.affine + data, affine = load_nifti(dwi) + bvals, bvecs = read_bvals_bvecs(bval, bvec) if b0_threshold < bvals.min(): warn("b0_threshold (value: {0}) is too low, increase your " @@ -173,48 +173,39 @@ def run(self, data_file, data_bvals, data_bvecs, small_delta, big_delta, if 'rtop' in save_metrics: r = mapfit_aniso.rtop() - rtop = nib.nifti1.Nifti1Image(r.astype(np.float32), affine) - nib.save(rtop, out_rtop) + save_nifti(out_rtop, r.astype(np.float32), affine) if 'laplacian_signal' in save_metrics: ll = mapfit_aniso.norm_of_laplacian_signal() - lap = nib.nifti1.Nifti1Image(ll.astype(np.float32), affine) - nib.save(lap, out_lapnorm) + save_nifti(out_lapnorm, ll.astype(np.float32), affine) if 'msd' in save_metrics: m = mapfit_aniso.msd() - msd = nib.nifti1.Nifti1Image(m.astype(np.float32), affine) - nib.save(msd, out_msd) + save_nifti(out_msd, m.astype(np.float32), affine) if 'qiv' in save_metrics: q = mapfit_aniso.qiv() - qiv = nib.nifti1.Nifti1Image(q.astype(np.float32), affine) - nib.save(qiv, out_qiv) + save_nifti(out_qiv, q.astype(np.float32), affine) if 'rtap' in save_metrics: r = mapfit_aniso.rtap() - rtap = nib.nifti1.Nifti1Image(r.astype(np.float32), affine) - nib.save(rtap, out_rtap) + save_nifti(out_rtap, r.astype(np.float32), affine) if 'rtpp' in save_metrics: r = mapfit_aniso.rtpp() - rtpp = nib.nifti1.Nifti1Image(r.astype(np.float32), affine) - nib.save(rtpp, out_rtpp) + save_nifti(out_rtpp, r.astype(np.float32), affine) if 'ng' in save_metrics: n = mapfit_aniso.ng() - ng = nib.nifti1.Nifti1Image(n.astype(np.float32), affine) - nib.save(ng, out_ng) + save_nifti(out_ng, n.astype(np.float32), affine) if 'perng' in save_metrics: n = mapfit_aniso.ng_perpendicular() - ng = nib.nifti1.Nifti1Image(n.astype(np.float32), affine) - nib.save(ng, out_perng) + save_nifti(out_perng, n.astype(np.float32), affine) if 'parng' in save_metrics: n = mapfit_aniso.ng_parallel() - ng = nib.nifti1.Nifti1Image(n.astype(np.float32), affine) - nib.save(ng, out_parng) + save_nifti(out_parng, n.astype(np.float32), affine) logging.info('MAPMRI saved in {0}'. format(os.path.dirname(out_dir))) @@ -225,9 +216,8 @@ class ReconstDtiFlow(Workflow): def get_short_name(cls): return 'dti' - def run(self, input_files, bvalues, bvectors, mask_files, b0_threshold=50, - bvecs_tol=0.01, - save_metrics=[], + def run(self, input_files, bvalues_files, bvectors_files, mask_files, + b0_threshold=50, bvecs_tol=0.01, save_metrics=[], out_dir='', out_tensor='tensors.nii.gz', out_fa='fa.nii.gz', out_ga='ga.nii.gz', out_rgb='rgb.nii.gz', out_md='md.nii.gz', out_ad='ad.nii.gz', out_rd='rd.nii.gz', out_mode='mode.nii.gz', @@ -314,9 +304,7 @@ def run(self, input_files, bvalues, bvectors, mask_files, b0_threshold=50, omode, oevecs, oevals in io_it: logging.info('Computing DTI metrics for {0}'.format(dwi)) - img = nib.load(dwi) - data = img.get_data() - affine = img.affine + data, affine = load_nifti(dwi) if mask is not None: mask = nib.load(mask).get_data().astype(np.bool) @@ -336,60 +324,42 @@ def run(self, input_files, bvalues, bvectors, mask_files, b0_threshold=50, tensor_vals = lower_triangular(tenfit.quadratic_form) correct_order = [0, 1, 3, 2, 4, 5] tensor_vals_reordered = tensor_vals[..., correct_order] - fiber_tensors = nib.Nifti1Image(tensor_vals_reordered.astype( - np.float32), affine) - nib.save(fiber_tensors, otensor) + + save_nifti(otensor, tensor_vals_reordered.astype(np.float32), + affine) if 'fa' in save_metrics: - fa_img = nib.Nifti1Image(FA.astype(np.float32), - affine) - nib.save(fa_img, ofa) + save_nifti(ofa, FA.astype(np.float32), affine) if 'ga' in save_metrics: GA = geodesic_anisotropy(tenfit.evals) - ga_img = nib.Nifti1Image(GA.astype(np.float32), - affine) - nib.save(ga_img, oga) + save_nifti(oga, GA.astype(np.float32), affine) if 'rgb' in save_metrics: RGB = color_fa(FA, tenfit.evecs) - rgb_img = nib.Nifti1Image(np.array(255 * RGB, 'uint8'), - affine) - nib.save(rgb_img, orgb) + save_nifti(orgb, np.array(255 * RGB, 'uint8'), affine) if 'md' in save_metrics: MD = mean_diffusivity(tenfit.evals) - md_img = nib.Nifti1Image(MD.astype(np.float32), - affine) - nib.save(md_img, omd) + save_nifti(omd, MD.astype(np.float32), affine) if 'ad' in save_metrics: AD = axial_diffusivity(tenfit.evals) - ad_img = nib.Nifti1Image(AD.astype(np.float32), - affine) - nib.save(ad_img, oad) + save_nifti(oad, AD.astype(np.float32), affine) if 'rd' in save_metrics: RD = radial_diffusivity(tenfit.evals) - rd_img = nib.Nifti1Image(RD.astype(np.float32), - affine) - nib.save(rd_img, orad) + save_nifti(orad, RD.astype(np.float32), affine) if 'mode' in save_metrics: MODE = get_mode(tenfit.quadratic_form) - mode_img = nib.Nifti1Image(MODE.astype(np.float32), - affine) - nib.save(mode_img, omode) + save_nifti(omode, MODE.astype(np.float32), affine) if 'evec' in save_metrics: - evecs_img = nib.Nifti1Image(tenfit.evecs.astype(np.float32), - affine) - nib.save(evecs_img, oevecs) + save_nifti(oevecs, tenfit.evecs.astype(np.float32), affine) if 'eval' in save_metrics: - evals_img = nib.Nifti1Image(tenfit.evals.astype(np.float32), - affine) - nib.save(evals_img, oevals) + save_nifti(oevals, tenfit.evals.astype(np.float32), affine) dname_ = os.path.dirname(oevals) if dname_ == '': @@ -420,14 +390,9 @@ class ReconstCSDFlow(Workflow): def get_short_name(cls): return 'csd' - def run(self, input_files, bvalues, bvectors, mask_files, - b0_threshold=50.0, - bvecs_tol=0.01, - roi_center=None, - roi_radius=10, - fa_thr=0.7, - frf=None, extract_pam_values=False, - sh_order=8, + def run(self, input_files, bvalues_files, bvectors_files, mask_files, + b0_threshold=50.0, bvecs_tol=0.01, roi_center=None, roi_radius=10, + fa_thr=0.7, frf=None, extract_pam_values=False, sh_order=8, odf_to_sh_order=8, out_dir='', out_pam='peaks.pam5', out_shm='shm.nii.gz', @@ -506,9 +471,7 @@ def run(self, input_files, bvalues, bvectors, mask_files, opeaks_indices, ogfa) in io_it: logging.info('Loading {0}'.format(dwi)) - img = nib.load(dwi) - data = img.get_data() - affine = img.affine + data, affine = load_nifti(dwi) bvals, bvecs = read_bvals_bvecs(bval, bvec) print(b0_threshold, bvals.min()) @@ -554,9 +517,8 @@ def run(self, input_files, bvalues, bvectors, mask_files, ratio = l01[1] / l01[0] response = (response, ratio) - logging.info( - 'Eigenvalues for the frf of the input data are :{0}' - .format(response[0])) + logging.info("Eigenvalues for the frf of the input" + " data are :{0}".format(response[0])) logging.info('Ratio for smallest to largest eigen value is {0}' .format(ratio)) @@ -601,8 +563,8 @@ class ReconstCSAFlow(Workflow): def get_short_name(cls): return 'csa' - def run(self, input_files, bvalues, bvectors, mask_files, sh_order=6, - odf_to_sh_order=8, b0_threshold=50.0, bvecs_tol=0.01, + def run(self, input_files, bvalues_files, bvectors_files, mask_files, + sh_order=6, odf_to_sh_order=8, b0_threshold=50.0, bvecs_tol=0.01, extract_pam_values=False, out_dir='', out_pam='peaks.pam5', out_shm='shm.nii.gz', @@ -656,7 +618,6 @@ def run(self, input_files, bvalues, bvectors, mask_files, sh_order=6, out_gfa : string, optional Name of the generalise fa volume to be saved (default 'gfa.nii.gz') - References ---------- .. [1] Aganj, I., et al. 2009. ODF Reconstruction in Q-Ball Imaging @@ -668,9 +629,7 @@ def run(self, input_files, bvalues, bvectors, mask_files, sh_order=6, opeaks_values, opeaks_indices, ogfa) in io_it: logging.info('Loading {0}'.format(dwi)) - vol = nib.load(dwi) - data = vol.get_data() - affine = vol.affine + data, affine = load_nifti(dwi) bvals, bvecs = read_bvals_bvecs(bval, bvec) if b0_threshold < bvals.min(): @@ -723,8 +682,8 @@ class ReconstDkiFlow(Workflow): def get_short_name(cls): return 'dki' - def run(self, input_files, bvalues, bvectors, mask_files, b0_threshold=50.0, - save_metrics=[], + def run(self, input_files, bvalues_files, bvectors_files, mask_files, + b0_threshold=50.0, save_metrics=[], out_dir='', out_dt_tensor='dti_tensors.nii.gz', out_fa='fa.nii.gz', out_ga='ga.nii.gz', out_rgb='rgb.nii.gz', out_md='md.nii.gz', out_ad='ad.nii.gz', out_rd='rd.nii.gz', out_mode='mode.nii.gz', @@ -813,9 +772,7 @@ def run(self, input_files, bvalues, bvectors, mask_files, b0_threshold=50.0, omode, oevecs, oevals, odk_tensor, omk, oak, ork) in io_it: logging.info('Computing DKI metrics for {0}'.format(dwi)) - img = nib.load(dwi) - data = img.get_data() - affine = img.affine + data, affine = load_nifti(dwi) if mask is not None: mask = nib.load(mask).get_data().astype(np.bool) @@ -837,72 +794,53 @@ def run(self, input_files, bvalues, bvectors, mask_files, b0_threshold=50.0, tensor_vals = lower_triangular(dkfit.quadratic_form) correct_order = [0, 1, 3, 2, 4, 5] tensor_vals_reordered = tensor_vals[..., correct_order] - fiber_tensors = nib.Nifti1Image(tensor_vals_reordered.astype( - np.float32), affine) - nib.save(fiber_tensors, otensor) + save_nifti(otensor, tensor_vals_reordered.astype(np.float32), + affine) if 'dk_tensor' in save_metrics: - kt_img = nib.Nifti1Image(dkfit.kt.astype(np.float32), affine) - nib.save(kt_img, odk_tensor) + save_nifti(odk_tensor, dkfit.kt.astype(np.float32), affine) if 'fa' in save_metrics: - fa_img = nib.Nifti1Image(FA.astype(np.float32), affine) - nib.save(fa_img, ofa) + save_nifti(ofa, FA.astype(np.float32), affine) if 'ga' in save_metrics: GA = geodesic_anisotropy(dkfit.evals) - ga_img = nib.Nifti1Image(GA.astype(np.float32), affine) - nib.save(ga_img, oga) + save_nifti(oga, GA.astype(np.float32), affine) if 'rgb' in save_metrics: RGB = color_fa(FA, dkfit.evecs) - rgb_img = nib.Nifti1Image(np.array(255 * RGB, 'uint8'), affine) - nib.save(rgb_img, orgb) + save_nifti(orgb, np.array(255 * RGB, 'uint8'), affine) if 'md' in save_metrics: MD = mean_diffusivity(dkfit.evals) - md_img = nib.Nifti1Image(MD.astype(np.float32), affine) - nib.save(md_img, omd) + save_nifti(omd, MD.astype(np.float32), affine) if 'ad' in save_metrics: AD = axial_diffusivity(dkfit.evals) - ad_img = nib.Nifti1Image(AD.astype(np.float32), affine) - nib.save(ad_img, oad) + save_nifti(oad, AD.astype(np.float32), affine) if 'rd' in save_metrics: RD = radial_diffusivity(dkfit.evals) - rd_img = nib.Nifti1Image(RD.astype(np.float32), affine) - nib.save(rd_img, orad) + save_nifti(orad, RD.astype(np.float32), affine) if 'mode' in save_metrics: MODE = get_mode(dkfit.quadratic_form) - mode_img = nib.Nifti1Image(MODE.astype(np.float32), affine) - nib.save(mode_img, omode) + save_nifti(omode, MODE.astype(np.float32), affine) if 'evec' in save_metrics: - evecs_img = nib.Nifti1Image(dkfit.evecs.astype(np.float32), - affine) - nib.save(evecs_img, oevecs) + save_nifti(oevecs, dkfit.evecs.astype(np.float32), affine) if 'eval' in save_metrics: - evals_img = nib.Nifti1Image(dkfit.evals.astype(np.float32), - affine) - nib.save(evals_img, oevals) + save_nifti(oevals, dkfit.evals.astype(np.float32), affine) if 'mk' in save_metrics: - mk_img = nib.Nifti1Image(dkfit.mk().astype(np.float32), - affine) - nib.save(mk_img, omk) + save_nifti(omk, dkfit.mk().astype(np.float32), affine) if 'ak' in save_metrics: - ak_img = nib.Nifti1Image(dkfit.ak().astype(np.float32), - affine) - nib.save(ak_img, oak) + save_nifti(oak, dkfit.ak().astype(np.float32), affine) if 'rk' in save_metrics: - rk_img = nib.Nifti1Image(dkfit.rk().astype(np.float32), - affine) - nib.save(rk_img, ork) + save_nifti(ork, dkfit.rk().astype(np.float32), affine) logging.info('DKI metrics saved in {0}'. format(os.path.dirname(oevals))) diff --git a/dipy/workflows/stats.py b/dipy/workflows/stats.py index 9a6c5cc9ec..2dfe3e5828 100755 --- a/dipy/workflows/stats.py +++ b/dipy/workflows/stats.py @@ -1,15 +1,13 @@ #!/usr/bin/env python import logging -import shutil import numpy as np -import nibabel as nib -import sys import os import json from scipy.ndimage.morphology import binary_dilation from dipy.io import read_bvals_bvecs +from dipy.io.image import load_nifti, save_nifti from dipy.core.gradients import gradient_table from dipy.segment.mask import median_otsu from dipy.reconst.dti import TensorModel @@ -26,25 +24,24 @@ class SNRinCCFlow(Workflow): def get_short_name(cls): return 'snrincc' - def run(self, data_file, data_bvals, data_bvecs, mask=None, - bbox_threshold=(0.6, 1, 0, 0.1, 0, 0.1), out_dir='', + def run(self, data_files, bvals_files, bvecs_files, mask_files, + bbox_threshold=[0.6, 1, 0, 0.1, 0, 0.1], out_dir='', out_file='product.json', out_mask_cc='cc.nii.gz', out_mask_noise='mask_noise.nii.gz'): - """ Workflow for computing the signal-to-noise ratio in the - corpus callosum + """Compute the signal-to-noise ratio in the corpus callosum. Parameters ---------- - data_file : string + data_files : string Path to the dwi.nii.gz file. This path may contain wildcards to process multiple inputs at once. - data_bvals : string + bvals_files : string Path of bvals. - data_bvecs : string + bvecs_files : string Path of bvecs. - mask : string, optional - Path of mask if desired. (default None) - bbox_threshold : string, optional + mask_files : string + Path of brain mask + bbox_threshold : variable float, optional Threshold for bounding box, values separated with commas for ex. [0.6,1,0,0.1,0,0.1]. (default (0.6, 1, 0, 0.1, 0, 0.1)) out_dir : string, optional @@ -56,39 +53,21 @@ def run(self, data_file, data_bvals, data_bvecs, mask=None, out_mask_noise : string, optional Name of the mask noise volume to be saved (default 'mask_noise.nii.gz') - """ - - if not isinstance(bbox_threshold, tuple): - b = bbox_threshold.replace("[", "") - b = b.replace("]", "") - b = b.replace("(", "") - b = b.replace(")", "") - b = b.replace(" ", "") - b = b.split(",") - for i in range(len(b)): - b[i] = float(b[i]) - bbox_threshold = tuple(b) + """ io_it = self.get_io_iterator() - for data_path, data_bvals_path, data_bvecs_path, out_path, \ + for dwi_path, bvals_path, bvecs_path, mask_path, out_path, \ cc_mask_path, mask_noise_path in io_it: - img = nib.load('{0}'.format(data_path)) - bvals, bvecs = read_bvals_bvecs('{0}'.format( - data_bvals_path), '{0}'.format(data_bvecs_path)) - gtab = gradient_table(bvals, bvecs) - - data = img.get_data() - affine = img.affine + data, affine = load_nifti(dwi_path) + bvals, bvecs = read_bvals_bvecs(bvals_path, bvecs_path) + gtab = gradient_table(bvals=bvals, bvecs=bvecs) logging.info('Computing brain mask...') - b0_mask, calc_mask = median_otsu(data) + _, calc_mask = median_otsu(data) - if mask is None: - mask = calc_mask - else: - mask = nib.load(mask).get_data().astype(bool) - mask = np.array(calc_mask == mask).astype(int) + mask, affine = load_nifti(mask_path) + mask = np.array(calc_mask == mask.astype(bool)).astype(int) logging.info('Computing tensors...') tenmodel = TensorModel(gtab) @@ -96,7 +75,6 @@ def run(self, data_file, data_bvals, data_bvecs, mask=None, logging.info( 'Computing worst-case/best-case SNR using the CC...') - threshold = bbox_threshold if np.ndim(data) == 4: CC_box = np.zeros_like(data[..., 0]) @@ -116,22 +94,22 @@ def run(self, data_file, data_bvals, data_bvecs, mask=None, bounds_min[1]:bounds_max[1], bounds_min[2]:bounds_max[2]] = 1 - mask_cc_part, cfa = segment_from_cfa(tensorfit, CC_box, threshold, + if len(bbox_threshold) != 6: + raise IOError('bbox_threshold should have 6 float values') + + mask_cc_part, cfa = segment_from_cfa(tensorfit, CC_box, + bbox_threshold, return_cfa=True) - cfa_img = nib.Nifti1Image((cfa*255).astype(np.uint8), affine) - mask_cc_part_img = nib.Nifti1Image( - mask_cc_part.astype(np.uint8), affine) - nib.save(mask_cc_part_img, cc_mask_path) + save_nifti(cc_mask_path, mask_cc_part.astype(np.uint8), affine) logging.info('CC mask saved as {0}'.format(cc_mask_path)) mean_signal = np.mean(data[mask_cc_part], axis=0) mask_noise = binary_dilation(mask, iterations=10) mask_noise[..., :mask_noise.shape[-1]//2] = 1 mask_noise = ~mask_noise - mask_noise_img = nib.Nifti1Image( - mask_noise.astype(np.uint8), affine) - nib.save(mask_noise_img, mask_noise_path) + + save_nifti(mask_noise_path, mask_noise.astype(np.uint8), affine) logging.info('Mask noise saved as {0}'.format(mask_noise_path)) noise_std = np.std(data[mask_noise, :]) @@ -169,5 +147,5 @@ def run(self, data_file, data_bvals, data_bvecs, mask=None, str(SNR_directions[2]) }) - with open(os.path.join(out_dir, out_file), 'w') as myfile: + with open(os.path.join(out_dir, out_path), 'w') as myfile: json.dump(data, myfile) diff --git a/dipy/workflows/tests/test_io.py b/dipy/workflows/tests/test_io.py index 3106e4565f..671a559ef1 100644 --- a/dipy/workflows/tests/test_io.py +++ b/dipy/workflows/tests/test_io.py @@ -34,5 +34,6 @@ def test_io_info(): pass file.close() + if __name__ == '__main__': test_io_info() diff --git a/dipy/workflows/tests/test_reconst_mapmri.py b/dipy/workflows/tests/test_reconst_mapmri.py index d2fba821ac..65d0e06b2f 100644 --- a/dipy/workflows/tests/test_reconst_mapmri.py +++ b/dipy/workflows/tests/test_reconst_mapmri.py @@ -40,8 +40,8 @@ def reconst_mmri_core(flow, lap, pos): volume = vol_img.get_data() mmri_flow = flow() - mmri_flow.run(data_file=data_path, data_bvals=bval_path, - data_bvecs=bvec_path, small_delta=0.0129, + mmri_flow.run(data_files=data_path, bvals_files=bval_path, + bvecs_files=bvec_path, small_delta=0.0129, big_delta=0.0218, laplacian=lap, positivity=pos, out_dir=out_dir) diff --git a/dipy/workflows/tests/test_stats.py b/dipy/workflows/tests/test_stats.py index e31bef730e..6f24fe1ad1 100755 --- a/dipy/workflows/tests/test_stats.py +++ b/dipy/workflows/tests/test_stats.py @@ -8,7 +8,7 @@ import numpy as np -from nose.tools import assert_true, assert_equal +from nose.tools import assert_true from dipy.data import get_data from dipy.workflows.stats import SNRinCCFlow @@ -25,7 +25,7 @@ def test_stats(): nib.save(mask_img, mask_path) snr_flow = SNRinCCFlow(force=True) - args = [data_path, bval_path, bvec_path] + args = [data_path, bval_path, bvec_path, mask_path] snr_flow.run(*args, out_dir=out_dir) assert_true(os.path.exists(os.path.join(out_dir, 'product.json'))) @@ -38,7 +38,7 @@ def test_stats(): out_dir, 'mask_noise.nii.gz')).st_size != 0) snr_flow._force_overwrite = True - snr_flow.run(*args, mask=mask_path, out_dir=out_dir) + snr_flow.run(*args, out_dir=out_dir) assert_true(os.path.exists(os.path.join(out_dir, 'product.json'))) assert_true(os.stat(os.path.join( out_dir, 'product.json')).st_size != 0)