def sdt_ms(gtab, data, affine, mask, ratio, sphere, min_angle=25.0, relative_peak_th=0.1): gd1, gd2, gd3 = prepare_data_for_multi_shell(gtab, data, mask) coeffs = [] invBs = [] for gd in [gd1, gd2, gd3]: response, ratio = estimate_response(gd[0], gd[1], affine, mask, fa_thr=0.7) model = ConstrainedSDTModel(gd[0], ratio, sh_order=8) peaks = pfm(model, gd[1], mask, sphere, False, min_angle, relative_peak_th) coeffs.append(peaks.shm_coeff) invBs.append(peaks.invB) #print(peaks.invB) coeffs3 = np.array(coeffs) best_coeffs = max_abs(coeffs3) odf = np.dot(best_coeffs, peaks.invB) new_peaks = PeaksAndMetrics() new_peaks.peak_dirs = dirs_from_odf(odf, sphere, min_separation_angle = min_angle, relative_peak_threshold = relative_peak_th) new_peaks.invB = peaks.invB new_peaks.shm_coeff = best_coeffs return new_peaks
def csd_ms(gtab, data, affine, mask, response, sphere): gd1, gd2, gd3 = prepare_data_for_multi_shell(gtab, data, mask) coeffs = [] invBs = [] for gd in [gd1, gd2, gd3]: response, ratio = estimate_response(gd[0], gd[1], affine, mask, fa_thr=0.7) model = ConstrainedSphericalDeconvModel(gd[0], response, sh_order=8) peaks = pfm(model, gd[1], mask, sphere) coeffs.append(peaks.shm_coeff) invBs.append(peaks.invB) #print(peaks.invB) coeffs3 = np.array(coeffs) best_coeffs = max_abs(coeffs3) odf = np.dot(best_coeffs, peaks.invB) new_peaks = PeaksAndMetrics() new_peaks.peak_dirs = dirs_from_odf(odf, sphere) new_peaks.invB = peaks.invB new_peaks.shm_coeff = best_coeffs return new_peaks