No data gets written when converting DICOM to BIDS using `heudiconv`

Hello,
thanks for developing and maintaining heudiconv !

Summary of what happened:

I have a dMRI dataset from a collaborator that I would like to convert to BIDS using heudiconv. The data contains a single subject with DICOM data corresponding to the following:

  • The AP/PA acquisitions dMRI acquisitions.
  • The T1w MP-RAGE.
  • The AP/PA field maps.

When trying to convert that to BIDS using heudiconv, there is a number of warnings: most notably, no SeriesNumber is detected. I assume the warnings (see below the trace) are making it in such a way that no data gets effectively converted: I only get the following output:

.heudiconv
CHANGES
dataset_description.json
participants.json
participants.tsv
README
scans.json
.bidsignore

so no subject folder, and no NIfTI file.

However, the DICOM data seems to be correctly detected (e.g. number of files in the series, TR, TE, protocol_name, seriesUID, etc.) according to what I can see in the /{path_to}/Investigators/{investigator_name}/.heudiconv/{sub_id}/info/dicominfo.tsv file.

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

heudiconv -f reproin --bids -o {path_to} --files ./{in_data_path}

Version:

heudiconv 0.13.1

Environment (Docker, Singularity, custom installation):

Ubuntu 22.04 LTS. Python 3.10. Pip installed heudiconv.

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

No effective output data was generated, so I am not running the BIDS validator.

Relevant log outputs (up to 20 lines):

INFO: Running heudiconv version 0.13.1 latest 0.13.1
INFO: Analyzing 336 dicoms
INFO: Filtering out 0 dicoms based on their filename
WARNING: Ignoring ./{my_data}/DWI_AP.bval since not quite a "normal" DICOM: 'FileDataset' object has no attribute 'SeriesNumber'
WARNING: Ignoring ./{my_data}/DWI_AP.bvec since not quite a "normal" DICOM: 'FileDataset' object has no attribute 'SeriesNumber'
WARNING: Ignoring ./{my_data}/DWI_AP.json since not quite a "normal" DICOM: 'FileDataset' object has no attribute 'SeriesNumber'
WARNING: Ignoring ./{my_data}/DWI_PA.bval since not quite a "normal" DICOM: 'FileDataset' object has no attribute 'SeriesNumber'
WARNING: Ignoring ./{my_data}/DWI_PA.bvec since not quite a "normal" DICOM: 'FileDataset' object has no attribute 'SeriesNumber'
WARNING: Ignoring ./{my_data}/DWI_PA.json since not quite a "normal" DICOM: 'FileDataset' object has no attribute 'SeriesNumber'
INFO: Generated sequence info for 1 studies with 5 entries total
INFO: Processing sequence infos to deduce study/session
INFO: Study session for StudySessionInfo(locator='Investigators/{investigator_name}', session=None, subject='{sub_id}')
INFO: Need to process 1 study sessions
INFO: PROCESSING STARTS: {'subject': '{sub_id}', 'outdir': '/{path_to}/Investigators/{investigator_name}, 'session': None}
INFO: Processing 5 pre-sorted seqinfo entries
INFO: Processing 5 seqinfo entries
WARNING: Could not determine the series name by looking at protocol_name, series_description fields
WARNING: Could not determine the series name by looking at protocol_name, series_description fields
WARNING: Could not determine the series name by looking at protocol_name, series_description fields
WARNING: Could not determine the series name by looking at protocol_name, series_description fields
WARNING: Could not determine the series name by looking at protocol_name, series_description fields
WARNING: Could not figure out where to stick 5 sequences: ['7-MEMPRAGE_gr2', '34-SpinEchoFieldMap_AP', '35-SpinEchoFieldMap_PA', '37-dMRI_dir99_AP', '40-dMRI_dir99_PA']
INFO: Doing conversion using dcm2niix
INFO: Populating template files under /{sub_id}/Investigators/{investigator_name}
INFO: PROCESSING DONE: {'subject': '{sub_id}', 'outdir': '/{path_to}/Investigators/{investigator_name}', 'session': None}

The Investigators/{investigator_name} seems to be an artifact as the study_description at issue contains a string Investigators^{investigator_name}.

Screenshots / relevant information:

The Could not figure out where to stick {N} sequences warning is also mentioned in this PR:
Reproin fix for Philips by cni-md · Pull Request #343 · nipy/heudiconv · GitHub

But there does not seem to prevent success in that case.

quick one:

so you are trying to use reproin heuristic, but your sequence names are not following that heuristic, as described e.g. in https://github.com/nipy/heudiconv/blob/master/heudiconv/heuristics/reproin.py#L26. To address that you would need to remap your names into reproin names within your “custom heuristic” like shown in heuristic option: sequence names remappings and other control · Issue #18 · ReproNim/reproin · GitHub .

alternative – is to use heudiconv in two stages with e.g. convertall heuristic and then provide desired names in the conversion file.

Thanks for the reply Yarik. Will give it a try and report back.

All useful pointers Yarik ! Gave it a try, understood better the heuristics, and the data seems to be correctly written and laid out. Thanks.

1 Like