Source code for AFQ.models.fwdti

import os
import os.path as op

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