That’s not quite right: it doesn’t try to maximise uniformity across shells, only within shells. The reason for this is that I don’t see the need for uniformity across shells: if each shell is adequately sampled, there is no further information to be gained by modifying the sample point positions to avoid the same sampling points as in the other shells - quite the opposite in fact, it would lead to a less uniform distribution than would otherwise be obtained.
The way I rationalise this is to consider the case of 2D Cartesian space: if the signal is properly sampled (above the Nyquist rate), shifting the sampling points in any one row does not add any information, it will still be perfectly sampled. Here, if x corresponds to the angular domain and y to the b-value domain, you can see that the same considerations apply. Assuming the signal is sufficiently sampled in the angular domain, there is nothing to be gained by moving the sample points around - but plenty to lose.
The only caveat to that is that if the signal is undersampled, and the reconstruction imposes a strong model that links between shells, then there may be benefits in such a strategy - but my personal opinion is that if you are operating in that regime, you will probably be lacking in SNR anyway (at least for most higher-order models). But that’s just my 2 cents…
I’m not sure what you mean here… I assume this relates to the previous point, about providing uniformity across shells…? It does estimate the bipolar energy at various points, but only does so per shell.
I think your best bet may be dirorder: it orders the directions in the set in a way that ensures near-uniformity upon truncation. It’s not guaranteed to be the optimal solution though, given the way it operates - you should be able to do better than that since you know how many directions you want (dirorder tries to find an order that’s OK for any arbitrary truncation, and even then doesn’t try that hard to find the optimal order).
Yes, dirsplit is not designed for this, although it’s otherwise doing pretty much what you’d need. It’s a brute-force search through lots of combinations to find a split of the data that provides near-uniformity for each subset - but it does expect to split the directions into equal sized subsets. It wouldn’t take a huge amount of effort to make it do something like what you need, but that would require a bit of coding…
However, it would still not guarantee that the directions are also uniformly spread over the whole sphere (I assume you need this to avoid biases due to eddy-currents, as recommended by the FSL eddy page?) - that’s fundamentally incompatible with ensuring uniformity under a bipolar model. What
gen_scheme does is to first obtain the most uniform direction set per shell under a bipolar model (using
dirgen), then modify these directions by inverting some of them (which does not change the energy in a bipolar model) so as to minimise the energy assuming a unipolar model (using
dirflip). I’m not sure how I’d manage to balance the two cost functions involved in selecting a subset of your existing directions that is uniform under both bipolar and unipolar models – pretty sure I’d overwhelmingly prioritise the bipolar model though, and totally ignore uniformity under a unipolar model: if it turns out to be vaguely spread out over the sphere, that’s great, otherwise I’d rather have the most uniform set of directions I can get from a bipolar point of view, since that is what determines the stability of my reconstruction.
Not sure that helps you hugely, but hopefully there’s some useful information in there… (?)