Error when using csdsi_3dshore recon ... possible spec fix?

I’m trying to run csdsi_3dshore on some qsiprep outputs, using this commmand:

apptainer run --containall --cleanenv -B /mystudy/bids:/bids -B /mystudy/output_csdsi:/output -B /mystudy/work_csdsi_recon:/work -B freesurfer_license.txt:/opt/freesurfer/license.txt qsiprep_latest.sif /bids /output participant  --fs-license-file /opt/freesurfer/license.txt --freesurfer-input=/bids/derivatives/freesurfer --work-dir=/work --output-resolution 1.8 --recon-spec=csdsi_3dshore --recon-only --recon-input=/output/qsiprep --write-graph

and I get the following error:

Traceback (most recent call last):
  File "/usr/local/miniconda/lib/python3.10/multiprocessing/", line 314, in _bootstrap
  File "/usr/local/miniconda/lib/python3.10/multiprocessing/", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/miniconda/lib/python3.10/site-packages/qsiprep/cli/", line 1215, in build_recon_workflow
    retval['workflow'] = init_qsirecon_wf(
  File "/usr/local/miniconda/lib/python3.10/site-packages/qsiprep/workflows/recon/", line 99, in init_qsirecon_wf
    single_subject_wf = init_single_subject_wf(
  File "/usr/local/miniconda/lib/python3.10/site-packages/qsiprep/workflows/recon/", line 272, in init_single_subject_wf
    dwi_recon_wfs[dwi_file] = init_dwi_recon_workflow(
  File "/usr/local/miniconda/lib/python3.10/site-packages/qsiprep/workflows/recon/", line 50, in init_dwi_recon_workflow
    new_node = workflow_from_spec(
  File "/usr/local/miniconda/lib/python3.10/site-packages/qsiprep/workflows/recon/", line 153, in workflow_from_spec
    return init_dsi_studio_connectivity_wf(**kwargs)
  File "/usr/local/miniconda/lib/python3.10/site-packages/qsiprep/workflows/recon/", line 408, in init_dsi_studio_connectivity_wf
    DSIStudioAtlasGraph(num_threads=omp_nthreads, **params),
  File "/usr/local/miniconda/lib/python3.10/site-packages/nipype/interfaces/base/", line 563, in __init__
    super(SimpleInterface, self).__init__(
  File "/usr/local/miniconda/lib/python3.10/site-packages/nipype/interfaces/base/", line 202, in __init__
  File "/usr/local/miniconda/lib/python3.10/site-packages/traits/", line 1520, in trait_set
    setattr(self, name, value)
traits.trait_errors.TraitError: Cannot set the undefined 'output_trk' attribute of a 'DSIStudioAtlasGraphInputSpec' object.

I see some references to others with the same error, but the fix provided didn’t solve the problem. I did notice that in the csdsi_3dshore.json qsiprep/qsiprep/data/pipelines/csdsi_3dshore.json at master · PennLINC/qsiprep · GitHub, the node list includes:

  "nodes": [
    {"name": "csdsi_3dshore", "software": "Dipy", "action": "3dSHORE_reconstruction", "input": "qsiprep", "output_suffix": "3dSHORE", .... },
    {"name": "streamline_connectivity", "software": "DSI Studio", "action": "connectivity", "input": "csdsi_3dshore", ... },
    {"name": "controlability", "input": "streamline_connectivity", "action": "controllability", "output_suffix": "rec-3dshore_control", ... },
    {"name": "msmt_csd", "software": "MRTrix3", "action": "csd", "output_suffix": "msmtcsd", "input":"csdsi_3dshore", ... }
    ... [some more mrtrix steps]

The error seems to come from the streamline_connectivity step. I’m new to qsiprep, but I’m confused about what the streamline_connectivity and controlability nodes do in this case. The streamline_connectivity seems to be a node that would run AFTER dsi_studio tractography, which is not being run here at all. And I’m not sure what the controlability node means at all.

If I create a custom .json without those two nodes, the pipeline runs. (running mrtrix3 tckgen now… presumably it will complete).

Are those two nodes needed for something? If this is just a bug, I’m happy to submit a PR. I’m just not sure if I’m missing something.

Those nodes are outdated and should have been removed. A PR would be greatly appreciated!

Done! [FIX] remove old nodes from csdsi_3dshore.json by kjamison · Pull Request #733 · PennLINC/qsiprep · GitHub