Skip to content

numpy.AxisError: axis 1 is out of bounds for array of dimension 1 #670

@andrew-yian-sun

Description

@andrew-yian-sun

Summary

Description of issue: using heudiconv to convert some participants' sessions ("vis") results in a numpy.AxisError: axis 1 is out of bounds for array of dimension 1 error. The same heuristic was successfully used on other participants, but I'm not seeing the difference between participant data that is successfully converted and the data that runs into the error.

commands:

time docker run --rm 
--volume /Volumes/LCproject/LC_aging/data_mri:/base nipy/heudiconv:latest 
--dicom_dir_template /base/data_BAP/{subject}_Session*{session}_*/*/* 
--outdir /base/data_BAP_BIDS 
--heuristic /base/data_BAP_BIDS/code/heuristic_postUpdate.py 
--subjects BAP120 
--ses vis 
--converter dcm2niix 
--bids 
--overwrite

command-line output:

INFO: Running heudiconv version 0.10.0 latest 0.12.2
INFO: Need to process 1 study sessions
INFO: PROCESSING STARTS: {'subject': 'BAP120', 'outdir': '/base/data_BAP_BIDS/', 'session': 'vis'}
INFO: Processing 1370 dicoms
INFO: Analyzing 1370 dicoms
/opt/miniconda-latest/lib/python3.7/site-packages/nibabel/nicom/dicomwrappers.py:536: UserWarning: Derived images found and removed
  warnings.warn("Derived images found and removed")
Traceback (most recent call last):
  File "/opt/miniconda-latest/bin/heudiconv", line 8, in <module>
    sys.exit(main())
  File "/opt/miniconda-latest/lib/python3.7/site-packages/heudiconv/cli/run.py", line 24, in main
    workflow(**kwargs)
  File "/opt/miniconda-latest/lib/python3.7/site-packages/heudiconv/main.py", line 351, in workflow
    grouping=grouping,)
  File "/opt/miniconda-latest/lib/python3.7/site-packages/heudiconv/convert.py", line 177, in prep_conversion
    custom_grouping=getattr(heuristic, 'grouping', None))
  File "/opt/miniconda-latest/lib/python3.7/site-packages/heudiconv/dicoms.py", line 202, in group_dicoms_into_seqinfos
    mwinfo = validate_dicom(filename, dcmfilter)
  File "/opt/miniconda-latest/lib/python3.7/site-packages/heudiconv/dicoms.py", line 106, in validate_dicom
    del mw.series_signature[sig]
  File "/opt/miniconda-latest/lib/python3.7/site-packages/nibabel/onetime.py", line 142, in __get__
    val = self.getter(obj)
  File "/opt/miniconda-latest/lib/python3.7/site-packages/nibabel/nicom/dicomwrappers.py", line 642, in series_signature
    signature['image_shape'] = (self.image_shape, eq)
  File "/opt/miniconda-latest/lib/python3.7/site-packages/nibabel/onetime.py", line 142, in __get__
    val = self.getter(obj)
  File "/opt/miniconda-latest/lib/python3.7/site-packages/nibabel/nicom/dicomwrappers.py", line 557, in image_shape
    frame_indices = np.delete(frame_indices, stackid_dim_idx, axis=1)
  File "<__array_function__ internals>", line 6, in delete
  File "/opt/miniconda-latest/lib/python3.7/site-packages/numpy/lib/function_base.py", line 4392, in delete
    axis = normalize_axis_index(axis, ndim)
numpy.AxisError: axis 1 is out of bounds for array of dimension 1

heuristic:

import os


def create_key(template, outtype=('nii.gz',), annotation_classes=None):
    if template is None or not template:
        raise ValueError('Template must be a valid format string')
    return template, outtype, annotation_classes


def infotodict(seqinfo):
    t1w_lowres = create_key('sub-{subject}/{session}/anat/sub-{subject}_{session}_acq-lowres_T1w')
    fmri_vis = create_key('sub-{subject}/{session}/func/sub-{subject}_{session}_task-vis_run-{item:01d}_bold')
    epi_AP_vis = create_key('sub-{subject}/{session}/fmap/sub-{subject}_{session}_acq-vis_dir-AP_epi')
    epi_PA_vis = create_key('sub-{subject}/{session}/fmap/sub-{subject}_{session}_acq-vis_dir-PA_epi')
    diff_HCPish_AP = create_key('sub-{subject}/{session}/dwi/sub-{subject}_{session}_acq-hcpish_dir-AP_dwi')
    diff_HCPish_PA = create_key('sub-{subject}/{session}/fmap/sub-{subject}_{session}_acq-hcpish_dir-PA_epi')

    info = {
        t1w_lowres: [], fmri_vis: [], epi_AP_vis: [], epi_PA_vis: [], diff_HCPish_AP: [], diff_HCPish_PA: []
        }

    for s in seqinfo:
        if 't1_mprage_low_res' == s.protocol_name:
            info[t1w_lowres].append(s.series_id)
        if 'visual_fMRI' in s.protocol_name and s.series_files == 245: # 245 ensures only full runs (not restarts) are bidsified
            info[fmri_vis].append(s.series_id)
        if 'visual_SE_EPI_Encoding_AP' in s.protocol_name:
            info[epi_AP_vis].append(s.series_id)
        if 'visual_SE_EPI_Encoding_PA' in s.protocol_name:
            info[epi_PA_vis].append(s.series_id)
        if 'diff_HCPish_AP' in s.protocol_name and 'TRACEW' not in s.image_type:
            info[diff_HCPish_AP].append(s.series_id)
        if 'diff_HCPish_PA' in s.protocol_name:
            info[diff_HCPish_PA].append(s.series_id)
    return info

Platform details:

Choose one:

  • Local environment
  • Container

Docker
tag: nipy/heudiconv:latest
image ID: 0d55d3d24064

  • Heudiconv version: 0.10.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions