Sparse and Optimal Acquisition (SOA) Design for Diffusion MRI and Beyond
Generating any SOA design is not a trivial task. It is can be computationally expensive as well. To avoid wasting any resources, I have decided to share some tabulated data and left other designs that have not yet been computed to interested users to run the software themselves. The software is now available! The most optimum 9x9 square design can be found here. This text file contains the "pointset" stored as a 81 x 3 matrix. The "design array" is a single array of length 9 (or 9 columns or 9 shells) and each column contains 9 points. The text file also contains the initial and final energies computed using Eq.(2) in the article. If you run the software and get a lower final energy value, I would really appreciate an email from you; please attach the final grid with the email. So, the values of the final grid range from 0 to 80 for this particular case. The final grid indicates how points in the "pointset" should be arranged. If you are interested in visualizing the point set, here is a Mathematica file I used for generating graphics similar to those appeared in the article.
(Double click the image to view the animation)
SOA Design Software [Please download the software from Run My Code website]
If you are interested in using the software, please take a look at the screen shot below and explore further information about the inputs and outputs.
The software takes in the following inputs:
(1) Design array should be of the form, for example: 10, 9, 30, 9, 5, 4
Note that the inputs are positive integers and the numbers should be separated by commas. Now, it is not required that the numbers be arranged in descending order but internally the software will sort the array in descending order. Here the length of design array refers to the number of columns (or shells) in the context of diffusion MRI. Each element in the design array refers to the number of points in that shell.
(2) Number of threads. If more than 1 thread is chosen, the software will attempt to run the search for the most optimal SOA design simultaneously with the prescribed number of threads. If the number of threads selected is more than twice the number of computing cores in your computer, the threads take turns to use the computing cores for some fixed amount time. So, don't use too many threads or your computer will slow down significantly.
(3) The maximum number of iterations is referred to the maximum number of times Step 4b will be invoked before exiting the search algorithm. The default value is 1000000. Do reduce the maximum number of iterations to 10000 or less if the number of points is very large, say greater than 300.
(4) The maximum number of iterations allowed within each level of the effective temperatures surveyed by the simulated annealing algorithm. The default value is 100*N where N is the total number of points. Do reduce this number to 5000 or less if the number of points is very large, say greater than 300.
Suggestion: Try running the search algorithm with many threads but with small values in items (3) and (4), say any number from 100 to 500 for both slots. This should give you an idea how long the search algorithm would take.
ALERT: It may take many hours or even days if the values in items (3) and (4) are very large.
To use this software, please download the jar file, and type the command "java -jar SparseAndOptimalAcquisitionDesign.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.
A typical printout is shown below (double click on the image to see the enlarged version):
ALERT: Beware of the "E" notation in Java printout, e.g., 1.0E-6 is 1 over 1 million.
THE OUTPUTS FROM THE SOFTWARE:
From the example above, the total number of points are 3+2+4 =9.
pointset: the point set is arranged as shown above with the number of rows equal to the number of points and there are three columns, which refer to the x, y and z coordinates of the point set.
OriginalDesignArray: While the original design array is 3,2,4, the software uses the sorted design array for efficient manipulations.
SortedDesignArray: The sort design array is always in the descending order.
DesignArrayOrdering: The ordering gives the position of original design array in the sorted array. For example, The position of the value "4" in the original design array is 2. Therefore, 2 shows up as the first element in the ordering. This ordering is needed when interested users need to convert the output here to the scaled diffusion directions suitable for MR scanners.
finalGrid: the final Grid shows the positions of the point set and how the points in pointset should be arranged in order to achieve the desired SOA design.
The outputs from the software can be used to generate equispaced (in b-value) diffusion gradient directions as follows:
Note that design arrays such as {4,3,2} and other combinations are essentially the same with respect to the SOA objective function. The differences are in the generation of diffusion gradient directions from the design arrays. In effect, one can use {4,3,2} to run the SOA software and then change the DesignArrayOrdering to get the desired diffusion gradient direction set, say with 4 points on the outer shell. Finally, the square SOA design does not have this kind of problem.
CURRENT BEST RESULTS:
Results from other square designs will be added soon.
Upon trying out the software and if you stumble upon any design below with a lower final energy than the one reported here, I would be very interested to hear from you. Please send me the printout through email ( cgkoay AT uwalumni DOT com (replace "AT" with "@" and "DOT" with "." )). As a token of appreciation, I will put your name next to the SOA design :)
5x5 SOA Design: finalEnergy = 0.012933930551368326
6x6 SOA Design: finalEnergy = 0.01669394263237894
7x7 SOA Design: finalEnergy = 0.008830356220592792
8x8 SOA Design: finalEnergy = 0.005859723459404534
9x9 SOA Design: finalEnergy = 0.003066241281615113
10x10 SOA Design: finalEnergy = 0.0036352778629238952
11x11 SOA Design: finalEnergy =
12x12 SOA Design: finalEnergy =
13x13 SOA Design: finalEnergy =
14x14 SOA Design: finalEnergy =
15x15 SOA Design: finalEnergy =
16x16 SOA Design: finalEnergy =
17x17 SOA Design: finalEnergy =
18x18 SOA Design: finalEnergy =
19x19 SOA Design: finalEnergy =
20x20 SOA Design: finalEnergy =
21x21 SOA Design: finalEnergy =
22x22 SOA Design: finalEnergy =
23x23 SOA Design: finalEnergy =
24x24 SOA Design: finalEnergy =
25x25 SOA Design: finalEnergy =
Here is my mathematical art work on a mutated strain of an avian flu using the SOA design :)
Interesting visual connection between a particular SOA design and a mutated strain of an avian flu.
A SOA design of 110 nonantipodal points with 80 points (red in color; Hemagglutinin) in one column and 30 points (blue in color; Neuraminidase ) in another column, please refer to our work for further information.
An image showing a mutated (white in color) strain of an avian flu. (Photo Credit: MedicalRF.com)
REFERENCE:
Koay CG, Özarslan E, Johnson KM, Meyerand ME. Sparse and optimal acquisition design for diffusion MRI and beyond. Medical Physics 2012; 39(5):2499-2511.