def dki_signal(gtab, dt, kt, S0=150, snr=None): r""" Simulated signal based on the diffusion and diffusion kurtosis tensors of a single voxel. Simulations are preformed assuming the DKI model. Parameters ---------- gtab : GradientTable Measurement directions. dt : (6,) ndarray Elements of the diffusion tensor. kt : (15, ) ndarray Elements of the diffusion kurtosis tensor. S0 : float (optional) Strength of signal in the presence of no diffusion gradient. snr : float (optional) Signal to noise ratio, assuming Rician noise. None implies no noise. Returns ------- S : (N,) ndarray Simulated signal based on the DKI model: .. math:: S=S_{0}e^{-bD+\frac{1}{6}b^{2}D^{2}K} References ---------- .. [1] R. Neto Henriques et al., "Exploring the 3D geometry of the diffusion kurtosis tensor - Impact on the development of robust tractography procedures and novel biomarkers", NeuroImage (2015) 111, 85-99. """ dt = np.array(dt) kt = np.array(kt) A = dki_design_matrix(gtab) # define vector of DKI parameters MD = (dt[0] + dt[2] + dt[5]) / 3 X = np.concatenate((dt, kt * MD * MD, np.array([-np.log(S0)])), axis=0) # Compute signals based on the DKI model S = np.exp(dot(A, X)) S = add_noise(S, snr, S0) return S
def DKI_signal(gtab, dt, kt, S0=150, snr=None): r""" Simulated signal based on the diffusion and diffusion kurtosis tensors of a single voxel. Simulations are preformed assuming the DKI model. Parameters ----------- gtab : GradientTable Measurement directions. dt : (6,) ndarray Elements of the diffusion tensor. kt : (15, ) ndarray Elements of the diffusion kurtosis tensor. S0 : float (optional) Strength of signal in the presence of no diffusion gradient. snr : float (optional) Signal to noise ratio, assuming Rician noise. None implies no noise. Returns -------- S : (N,) ndarray Simulated signal based on the DKI model: .. math:: S=S_{0}e^{-bD+\frac{1}{6}b^{2}D^{2}K} References ---------- .. [1] R. Neto Henriques et al., "Exploring the 3D geometry of the diffusion kurtosis tensor - Impact on the development of robust tractography procedures and novel biomarkers", NeuroImage (2015) 111, 85-99. """ dt = np.array(dt) kt = np.array(kt) A = dki_design_matrix(gtab) # define vector of DKI parameters MD = (dt[0] + dt[2] + dt[5]) / 3 X = np.concatenate((dt, kt*MD*MD, np.array([np.log(S0)])), axis=0) # Compute signals based on the DKI model S = np.exp(dot(A, X)) S = add_noise(S, snr, S0) return S