% update gradients from an initial gradient set, such that the updated gradients are evenly distributed.
%
% USAGE:
% [grad, xopt, fopt, retcode] = OptimalSamplingSingleShellCNLO(gradInitial, param)
%
% INPUT
% gradInitial : N x 3 gradient matrix, where each row is a point in sphere.
% param.cartesian : true: use cartesian coordinate (with unit equality constraint);
% false: use spherical coordinate (no unit equality constraint)
%
%
% OUTPUT
% grad : updated N x 3 gradient matrix.
%
%
% Reference:
% 1. "Single- and Multiple-Shell Uniform Sampling Schemes for Diffusion MRI Using Spherical Codes",
% Jian Cheng, Dinggang Shen, Pew-Thian Yap, Peter J. Basser, IEEE Transactions on Medical Imaging, 2017.
% 2. "Novel single and multiple shell uniform sampling schemes for diffusion MRI using spherical codes",
% Jian Cheng, Dinggang Shen, Pew-Thian Yap, Peter J. Basser, MICCAI 2015.
%
% Copyright (c) 2014, Jian Cheng <jian.cheng.1983@gmail.com>
%