Optimal Ordering of Diffusion MRI Measurements and Related Problems

This site contains two WebStart applications (GUI for retrieving the optimally ordered point set [or unit-length diffusion gradient directions] on the sphere with and without antipodal symmetry). Optimality of the ordering is described in Ref. [3].

I. Optimally Ordered Antipodally Symmetric Point Set Generator

To use this GUI, please download the jar file, and type the command "java -jar OptimallyOrderedAntipodallySymmetricPointSet.jar. Alternatively, you can just click here through Java Web Start.

Please make sure the version of your java is at least 1.6. Here is a link to Java download site.

If your operating system is properly configured, a double-click on the jar file will also run the application.

II. Optimally Ordered Non-Antipodally Symmetric Point Set Generator

Similar to the above, please download the other jar file, and type the command "java -jar OptimallyOrderedNonAntipodallySymmetricPointSet.jar. Alternatively, you can just click here through Java Web Start.

Please make sure the version of your java is at least 1.6. Here is a link to Java download site.

If your operating system is properly configured, a double-click on the jar file will also run the application.

If you find the software useful and use the software in your research work, please spread the words by citation or word of mouth. Thanks.

Here is a simple means you can do to make your browser in your linux system to recognize the jnlp file extension. Just make sure that the jnlp file is opened with javaws (usually located in the bin folder of the java directory)

Note:

(a) In the couse of my research, I have computed and obtained the first 365 point sets via iterative optimization; you can get these point sets from the GUIs above or as text files from the jar file. Other numerical results related to these point sets can obtained from these links, antipodal point sets and non-antipodal point sets. Consequently, the first 365 optimally ordered point sets are based on these iteratively optimized point sets. For large sample beyond 365, iterative optimization will become very time-consuming. Therefore, for N>365, the software uses techniques proposed in Ref.[1] or Ref.[2], depending on whether antipodal symmetry is involved, and then uses the deterministic approach proposed in Ref.[3] (using the original potential energy rather than the modified potential energy for the case when antipodal symmetry is not needed) to generate the optimally ordered point set.

(b) The convention used in the text files (for N=1 to N=365) that are kept in the jar file is as follows:

(i) The value on the first line refers to the number of points on the upper hemisphere.

(ii) The value on the second line refers to the value of the modified potential energy of this point set.

(iii) The listing of the point set in Cartesian coordinate system begins on the third line and onward.

(iv) At the end of the file, it lists the sequence of energies to facilitate the computation of the original (or modified) potential energy of each intermediate subset.

ALERT: Beware of the "E" notation in Java printout, e.g., 1.0E-6 is 1 over 1 million.

References:

[1]. Koay CG. Analytically exact spiral scheme for generating uniformly distributed points on the unit sphere. Journal of Computational Science 2011; 2: 88-91.

[2]. Koay CG. A simple scheme for generating nearly uniform distribution of antipodally symmetric points on the unit sphere. Journal of Computational Science. 2011; 2: 376-380.

[3]. Koay CG, Hurley SA, Meyerand ME. Extremely efficient and deterministic approach to generating optimal ordering of diffusion MRI measurements. Medical Physics 2011; 38 (8): 4795-4801.

Non-GUI Command in Java and Matlab (You will need the jar file, see https://sites.google.com/site/hispeedpackets/ )

For the complete Java code, download the Java file here .

// JAVA CODE SNIPPET

// N is the desired number of points on the upper hemisphere.

int N = 2000;

// you may use any antipodally symmetric point set of your choice or from within HI-SPEED software, for example:

double[][] r = new UniformPointSet(N).getAntipodalPointSet();

// Here, r is a double array of N by 3 in Cartesian coordinates.

// compute the electrostatic potential energy of the point set

double energy = AntipodalIterativeOptimization.modifiedElectrostaticEnergy(r);

// create an object from the OptimalOrderingWithAntipodalSymmetry class. The input is the antipodally symmetric point set.

OptimalOrderingWithAntipodalSymmetry rc = new OptimalOrderingWithAntipodalSymmetry( r );

// get the ordered point set.

double[][] ops = rc.getOrderedPointSet();

// You can print it out onto the screen

System.out.println(MAT.toString(ops));

// or store the ordered point set in a text file, see the Java file here.

//END JAVA CODE SNIPPET

----------------------------------------------------

%% MATLAB CODE SNIPPET

%% Get the full path to the jar file, which is within the hispeed folder under JarFile folder.

% if you use linux, use this example and change where it's needed.

%%javaaddpath /home/hispeed/JarFile/hispeed.jar

% if you use Windows, use this example and change where it's needed.

% this example shows that the STBBFolder is directly under C drive (c:\).

javaaddpath C:\Users\Guan\Desktop\hispeed\JarFile\hispeed.jar

%% imports package, this should be correct: No need to change here

import cgk.pointset.*

import cgk.*

N = 2000;

ups = UniformPointSet(N);

r = ups.getAntipodalPointSet();

energy = AntipodalIterativeOptimization.modifiedElectrostaticEnergy(r);

OptimalOrderingWithAntipodalSymmetry rc = new OptimalOrderingWithAntipodalSymmetry( r );

ops = rc.getOrderedPointSet();

%% END MATLAB CODE SNIPPET