Extracting subset of directions


I have a dataset where the majority of subjects were scanned with 30 directions, and a few with 64 directions (same b-value). Is there any way to extract an optimal (or near enough) subset of 30 directions from the 64 directions?


I think dirmerge may get you closer to that - it should order your directions in such a way that they remain near-optimal upon truncation. But I don’t think there’s any guarantee that the first 30 directions in the reordered set will be the optimal subset of 30 directions you could actually pull out of your original 64… You can always check how well the subset performs against a properly dirgen-optimised one using dirstat, just to make sure it’s not too far off… You could also try different runs of dirmerge, I think the first volume is picked out at random, so you’ll likely get different answers each time, some of them may perform better than others.

dirorder would probably give the same answer as dirmerge, it’s just got less fat around the edges since it’s designed to operate on a single input direction set.

@Kerstin If you really wanted to put the effort in to get the best selection possible, I’d suggest actually starting with the dirsplit code. That tests a very large range of permutations of subset selection, whereas dirmerge and dirorder just start with one direction and iteratively select the best next direction to add to the set. You’d just need to modify the code to optimise selection of a single subset with a requested number of directions, rather than multiple equally-sized subsets as is currently done. Might not take too much effort, so up to you whether you consider it worthwhile.

Following up on this thread, I am trying to do the same thing… @Kerstin, did you end up implementing something or you simply used dirorder?

Also, I have a question about the format of the input and output or dirorder, @rsmith and @jdtournier… my dirs.txt file is a tab-delimited 3colums file but the output I get is only two columns (just like al the intermediate outputs of gen_scheme)… Am I missing something?

Thank you in advance for your help,

Giorgia Grisot

Hi Giorgia,

I ended up implementing something matlab. Happy to send it to you via email (can’t figure out how to upload it here), please let me know your email address.

Regarding your dirorder problem, I think all you have to do is use the option -cartesian, and it should give you a 3-column output.


Hi @Kerstin, thank you so much for getting back to me! My email is ggrisot@mit.edu

And you are probably right about the -cartesian flag! I didn’t think about that, thanks! :slight_smile:


Hi @Kerstin,

We recently proposed a method to solve this kind of single or multiple shell sub-sampling problems by using mixed integer linear programming (MILP).
It is to maximize the minimal separation angle between selected samples.

Please see the released tutorial
and some demos

Hope it works for you.

Jian Cheng

For future reference: there is also some ongoing discussion on this topic right here: Problems with gen_scheme generated multishell gradient table . Some aspects about which choices are to be preferred for multi-shell acquisitions are indeed debatable.