NODDI dwi data - error converting to BIDS with heudiconv

Summary of what happened:


I’ve been using heudiconv to convert NODDI diffusion-weighted scans to nifti so as to ensure files are compatible with BIDS. I’ve just tested it on one subject so far and have tried validating it on BIDS:

However, I keep receiving an error saying there was a mismatch between the number of volumes in the scan and the bvec value (Screenshot below).

Any suggestions of why this is happening would be much appreciated!

Command used (and if a helper script was used, a link to the helper script or the command generated):



Environment (Docker, Singularity / Apptainer, custom installation):

Data formatted according to a validatable standard? Please provide the output of the validator:


Relevant log outputs (up to 20 lines):


Screenshots / relevant information:

Hi @cl_lancaster, and welcome to neurostars!

How many volumes are in your DWI nifti, and how many items are there in your bval file?


Given that the file size is 776kb, I would suggest that this file has a single volume, and is either a b=0 image or a derived image (TRACE, ADC, etc). It is clumsy that BIDS requires a bvec/bval file for these non-directional images. This is a duplicate of a previous issue and you can therefore use the inheritance principle to add a single bvec file ( a text file with three rows, each with 0) and a single bval file (a text file with a single character, 0) in the top level of your BIDS folder. The Stroke Outcome Optimization Project (SOOP) on OpenNeuro illustrates this solution.

See also related Github and neurostars issues

Thank you both for your suggestions. The NODDI sequence includes the following: 65 vols for B2600 and 33 vols for B800.

I tried adding a bvec and bval file to the higher-level folder (as in the SOOP project) with no success.
I wonder if I need to select out various NODDI components in the heudiconv heuristic?

At present, I’ve just used the one line of code:
dwi = create_key(‘sub-{subject}/{session}/dwi/sub-{subject}_{session}_dwi’)

Just to let you know I’ve fixed the issue. I saved the b=0 reverse-phase encoded image as a field map, and then separated out the NODDI images by b-values.

Here is the code for my heuristic file:

#DIFFUSION-WEIGHTED IMAGES (64 dirs, 30 dirs, reverse phase-encoding)
    dwi_64 = create_key('sub-{subject}/{session}/dwi/sub-{subject}_{session}_acq-64dirs_dwi')
    dwi_30 = create_key('sub-{subject}/{session}/dwi/sub-{subject}_{session}_acq-30dirs_dwi')    
    #dwi = create_key('sub-{subject}/{session}/dwi/sub-{subject}_{session}_dir-AP_dwi')

    fmap_rev_phase = create_key('sub-{subject}/{session}/fmap/sub-{subject}_{session}_dir-PA_epi') #extract b0 dwi image as field map