FSL EddyInputError bvecs file

Hello all,

I´m struggling with running eddy_openmp algorithm. I have 4D DWI images input (2 volumes for b=0 and b=10) and I already run topup to create the field map.

When running

eddy_openmp --imain=data --mask=my_hifi_b0_brain_mask --acqp=acqparams.txt --index=index.txt --bvecs=bvecs --bvals=bvals --topup=my_topup_results --repol --out=eddy_corrected_data

the error message displays:

EddyInputError: Error when attempting to read --bvecs file. Terminating program. The algorithm is working neither in the command line nor in GUI.

My bvecs file:

0 1
0 1
0 1

My bvals file: 0 1

I used these bvecs and bvals files to run DTIFIT and it´s working without any problem.

When “adjusting” the bvecs file (changing the values, adding lines, removing lines…) the error message "Error when attempting to read --bvecs file. Terminating program. " keeps still popping up.

Please, what´s wrong? Is there any problem with my bvecs file I created or any problem with eddy_openmp? How can I address this issue?

Any help would be highly appreciated.

Many thanks in advance
Regards
Adam

OK, this is a FSL command, and as such, I’d suggest you should ask on the FSL forum… We would support any issues arising out of our own scripts that interface with FSL (dwipreproc, 5ttgen, …), but this doesn’t seem to be the case here.

Nonetheless, I’d hazard a guess that the problem is that your bvecs/bvals don’t actually represent a DTI protocol. You’ve only got a single b=0 and a single b=1 s/mm² volume in your acquisition, which is just enough for a single ADC fit, nothing more. You can’t use this for DTI, and you certainly can’t use it for anything more involved like CSD. I’m guessing eddy is simply reporting the fact that your acquisition (as reported by your bvecs/bvals) is not sufficient to do anything with. As stated on the FSL eddy wiki:

For eddy to work well there also needs to be a minimum number of diffusion directions. The reason for this is that the concept of “close” and “distant” vectors becomes a little pointless when there are only a handful of vectors. The “minimum number” will depend on the b -value (with a larger number of directions needed for higher b -values), but it appears that the minimum is ~10-15 directions for a b -value of 1500 and ~30-40 directions for a b -value of 5000.

OK. Thanks a lot for your answer. I used a larger input data set (more different “b” values) and it´s working. However, there is another error I still can´t overcome. I know you are not a FSL member but I don´t have any response from the FSL team yet and moreover, I haven´t found any problem simmilar to my… Please, could you have a look at my problem? Have you already encoutered with this problem?

Here is my question from the FSL forum:

Hello all,

I use FSL 6.0.1. and I am trying to rund eddy_openmp. I successfully ran topup command without any error (two b=0 volumes AP, PA with diferent phase gradient direction).

I have 4D MR DWI input data that consists of 10 volumes (10 different “b” values). Here are my parameters:

text file with information about the acquisition of the images:

0 -1 0 0.0646
0 1 0 0.0646

bvals: 0 10 20 30 50 100 200 500 1000 2000

bvecs:

0 1 1 1 1 1 1 1 1 1 
0 1 1 1 1 1 1 1 1 1 
0 1 1 1 1 1 1 1 1 1

My command line: eddy_openmp --imain=data --mask=my_hifi_b0_brain_mask --acqp=acqparams.txt --index=index.txt --bvecs=bvecs --bvals=bvals --topup=my_topup_results --out=eddy_corrected_data --data_is_shelled --verbose

And here is the error message:

Reading images
Performing volume-to-volume registration
Running Register
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 0, Total mss = 110.108
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 1, Total mss = 110.108
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 2, Total mss = 110.108
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 3, Total mss = 110.108
Loading prediction maker
Evaluating prediction maker model
Calculating parameter updates
Iter: 4, Total mss = 110.108
Running sm.ApplyB0LocationReference
Running Register
Loading prediction maker
Evaluating prediction maker model
Estimated hyperparameters: -nan
0.450000
0.000000
-nan
-nan
-nan
-nan

Calculating parameter updates
Iter: 0, Total mss = 4277.756814

error: solve(): solution not found

solve(): solution not found
EDDY:::  ECScanClasses.cpp:::  void EDDY::ECScanManager::SeparateFieldOffsetFromMovement(EDDY::ScanType, EDDY::OffsetModel):  Exception thrown
EDDY:::  eddy.cpp:::  EDDY::ReplacementManager* EDDY::Register(const EDDY::EddyCommandLineOptions&, EDDY::ScanType, unsigned int, const std::vector<float, std::allocator<float> >&, EDDY::SecondLevelECModel, bool, EDDY::ECScanManager&, EDDY::ReplacementManager*, NEWMAT::Matrix&, NEWMAT::Matrix&):  Exception thrown
EDDY::: Eddy failed with message EDDY:::  eddy.cpp:::  EDDY::ReplacementManager* EDDY::DoVolumeToVolumeRegistration(const EDDY::EddyCommandLineOptions&, EDDY::ECScanManager&):  Exception thrown

Total mss=110.108 is the same for all iterations - do you know how it is possible? It might be the problem…

I removed a bottom slice for each volume - should I add another extra flag due to that?

Thanks a lot for your time
Regards
Adam

I’m not sure – but it’s pretty clear to me that your acquisition is not a HARDI acquisition: every one of your b-values is unique. There’s no way that can be interpreted as being consistent with a shell structure. My guess is if you removed the option above, eddy would immediately (and rightly) abort with a message telling you your data are not shelled. Given what you’re showing here, your data are fundamentally incompatible with any form of multi-shell processing or analysis…