Source code for AFQ.models.fwdti

import os
import os.path as op

import numpy as np
import nibabel as nib

from dipy.reconst import fwdti

import AFQ.utils.models as ut


__all__ = ["fit_fwdti"]


def _fit(data, gtab, mask):
    fwmodel = fwdti.FreeWaterTensorModel(gtab)
    fwfit = fwmodel.fit(data, mask=mask)
    return fwfit


[docs]def fit_fwdti(data_files, bval_files, bvec_files, mask=None, out_dir=None, b0_threshold=50): """ Fit the free water DTI model [1]_, save files with derived maps Parameters ---------- data_files : str or list Files containing DWI data. If this is a str, that's the full path to a single file. If it's a list, each entry is a full path. bval_files : str or list Equivalent to `data_files`. bvec_files : str or list Equivalent to `data_files`. mask : ndarray, optional Binary mask, set to True or 1 in voxels to be processed. Default: Process all voxels. out_dir : str, optional A full path to a directory to store the maps that get computed. Default: maps get stored in the same directory as the last DWI file in `data_files`. b0_threshold : float Returns ------- file_paths : a dict with the derived maps that were computed and full-paths to the files containing these maps. Note ---- ..[1] R. Neto Henriques, A. Rokem, E. Garyfallidis, S. St-Jean, E.T. Peterson, M. Correia (2017). [Re] Optimization of a free water elimination two-compartment model for diffusion tensor imaging. *ReScience* """ img, data, gtab, mask = ut.prepare_data(data_files, bval_files, bvec_files, mask=mask, b0_threshold=b0_threshold) fwfit = _fit(data, gtab, mask) FA = fwfit.fa MD = fwfit.md AD = fwfit.ad RD = fwfit.rd fwvf = fwfit.f params = fwfit.model_params maps = [FA, MD, AD, RD, fwvf, params] names = ['FA', 'MD', 'AD', 'RD', 'FWVF', 'params'] if out_dir is None: if isinstance(data_files, list): out_dir = op.join(op.split(data_files[0])[0], 'fwdti') else: out_dir = op.join(op.split(data_files)[0], 'fwdti') if not op.exists(out_dir): os.makedirs(out_dir) aff = img.affine file_paths = {} for m, n in zip(maps, names): file_paths[n] = op.join(out_dir, 'fwdti_%s.nii.gz' % n) nib.save(nib.Nifti1Image(m, aff), file_paths[n]) return file_paths