How to specifiy input to 'roi_excl' parameter to compute tractography

#Summary of what happened:
Hello, I am trying to run a custom reconstruction pipeline using mrtrix_multishell_msmt (with FAST).
I want to give a binary mask to the “roi_excl” parameter.
My mask is in the same space as the dwi. However, it throws me an error.
How do I make qsiprep and nipype read my binary mask correctly?

Could you please help?
Thank you
Best,
Apoorva

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

docker run -ti \
-v /Users/neurouser1/Documents/test_nimhdata/bids_directory/sub-TMSA02/:/data \
-v /Users/neurouser1/Documents/test_nimhdata/qsiprep_mrtrix/sub-TMSA02/:/out \
-v /Users/neurouser1/Documents/fs_files/:/license \
-v /Users/neurouser1/Documents/test_nimhdata/scratch/:/scratch \
-v /Users/neurouser1/Documents/test_nimhdata/qsiprep_out/sub-TMSA02/qsiprep/:/recon_input \
-v /Users/neurouser1/Documents/test_nimhdata/:/recon_spec \
pennbbl/qsiprep:0.13.0RC1 \
/data /out participant \
--participant_label sub-HCA6010538 \
--recon_input /recon_input/ \
--recon_only \
--recon_spec /recon_spec/mrtrix_multishell_msmt_updated.json \
--fs-license-file /license/license.txt \
-w /scratch/ \
--output-resolution 1.3 \
--n_cpus 15 \
--omp-nthreads 8 \
--mem_mb 150000 \

Version:

pennbbl/qsiprep:0.13.0RC1 due to legacy data matching.
Also tried it with pennlinc/qsirecon:0.23.2 with mrtrix_multishell_msmt_ACT-FAST but it gave same error.
Currently, using FAST even though I know hsvs is better due to legacy data matching requirement.

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

Docker

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

Yes, qsiprep starts successfully

Relevant log outputs (up to 20 lines):

250620-15:50:05,455 nipype.workflow IMPORTANT:

    Running qsirecon version 0.13.0RC1:
      * BIDS dataset path: /data.
      * Participant list: ['HCA6010538'].
      * Run identifier: 20250620-155005_b733a6f1-86e7-478e-83c4-3102f714d619.

250620-15:50:05,843 nipype.workflow INFO:
         found ['/recon_input/sub-HCA6010538/ses-dir99/dwi/sub-HCA6010538_ses-dir99_space-T1w_desc-preproc_dwi.nii.gz'] in /recon_input
Process Process-2:
Traceback (most recent call last):
  File "/usr/local/miniconda/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/usr/local/miniconda/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/miniconda/lib/python3.7/site-packages/qsiprep/cli/run.py", line 1114, in build_recon_workflow
    sloppy=opts.sloppy
  File "/usr/local/miniconda/lib/python3.7/site-packages/qsiprep/workflows/recon/base.py", line 95, in init_qsirecon_wf
    sloppy=sloppy
  File "/usr/local/miniconda/lib/python3.7/site-packages/qsiprep/workflows/recon/base.py", line 221, in init_single_subject_wf
    omp_nthreads=omp_nthreads)
  File "/usr/local/miniconda/lib/python3.7/site-packages/qsiprep/workflows/recon/build_workflow.py", line 132, in init_dwi_recon_workflow
    node_spec)
  File "/usr/local/miniconda/lib/python3.7/site-packages/qsiprep/workflows/recon/build_workflow.py", line 244, in workflow_from_spec
    return init_mrtrix_tractography_wf(omp_nthreads, has_transform, **kwargs)
  File "/usr/local/miniconda/lib/python3.7/site-packages/qsiprep/workflows/recon/mrtrix.py", line 418, in init_mrtrix_tractography_wf
    tracking = pe.Node(TckGen(**tracking_params), name='tractography')
  File "/usr/local/miniconda/lib/python3.7/site-packages/nipype/interfaces/base/core.py", line 710, in __init__
    super(CommandLine, self).__init__(**inputs)
  File "/usr/local/miniconda/lib/python3.7/site-packages/nipype/interfaces/base/core.py", line 191, in __init__
    self.inputs.trait_set(**inputs)
  File "/usr/local/miniconda/lib/python3.7/site-packages/traits/has_traits.py", line 1543, in trait_set
    setattr( self, name, value )
  File "/usr/local/miniconda/lib/python3.7/site-packages/traits/trait_handlers.py", line 172, in error
    value )
traits.trait_errors.TraitError: The 'roi_incl' trait of a TckGenInputSpec instance must be a pathlike object or string representing an existing file or a tuple of the form: (a float, a float, a float, a float), but a value of '/Users/neurouser1/Documents/test_nimhdata/qsiprep_out/sub-TMSA02/qsiprep/sub-HCA6010538/ses-dir99/dwi/sub-HCA6010538_lesion_binarized_dwispace.nii.gz' <class 'str'> was specified.

Screenshots / relevant information:

I also tried giving it a tuple but that gave me a syntax and JSON not read error.
If I give the same path (‘/Users/neurouser1/Documents/test_nimhdata/qsiprep_out/sub-TMSA02/qsiprep/sub-HCA6010538/ses-dir99/dwi/sub-HCA6010538.txt’) to " out_seeds" it starts qsiprep without error. I didn’t run it completely so don’t know if it completes without issues.

Attaching the JSON file I used.

{
  "name": "mrtrix_multishell_msmt_updated",
  "space": "T1w",
  "atlases": [
    "schaefer100x7",
    "schaefer100x17",
    "schaefer200x7",
    "schaefer200x17",
    "schaefer400x7",
    "schaefer400x17",
    "brainnetome246",
    "aicha384",
    "gordon333",
    "aal116",
    "power264"
  ],
  "anatomical": [
    "mrtrix_5tt"
  ],
  "nodes": [
    {
      "name": "msmt_csd",
      "software": "MRTrix3",
      "action": "csd",
      "output_suffix": "msmtcsd",
      "input": "qsiprep",
      "parameters": {
        "mtnormalize": true,
        "response": {
          "algorithm": "dhollander"
        },
        "fod": {
          "algorithm": "msmt_csd",
          "max_sh": [
            4,
            8,
            8
          ]
        }
      }
    },
    {
      "name": "track_ifod2",
      "software": "MRTrix3",
      "action": "tractography",
      "output_suffix": "ifod2",
      "input": "msmt_csd",
      "parameters": {
        "use_5tt": true,
        "use_sift2": true,
        "tckgen": {
          "algorithm": "iFOD2",
          "select": 10000000,
          "max_length": 250,
          "min_length": 30,
          "power": 0.33,
          "crop_at_gmwmi": true,
          "backtrack": true,
          "roi_excl":"/Users/neurouser1/Documents/test_nimhdata/qsiprep_out/sub-TMSA02/qsiprep/sub-HCA6010538/ses-dir99/dwi/sub-HCA6010538_lesion_binarized_dwispace.nii.gz"
        },
        "sift2": {}
      }
    },
    {
      "name": "mrtrix_conn",
      "software": "MRTrix3",
      "action": "connectivity",
      "output_suffix": "msmtconnectome",
      "input": "track_ifod2",
      "parameters": {
        "tck2connectome": [
          {
            "zero_diagonal": false,
            "search_radius": 2,
            "scale_invnodevol": true,
            "symmetric": true,
            "use_sift_weights": true,
            "stat_edge": "sum",
            "measure": "sift_invnodevol_radius2_count"
          },
          {
            "zero_diagonal": false,
            "search_radius": 2,
            "scale_invnodevol": false,
            "symmetric": true,
            "length_scale": "length",
            "use_sift_weights": false,
            "stat_edge": "mean",
            "measure": "radius2_meanlength"
          },
          {
            "zero_diagonal": false,
            "search_radius": 2,
            "scale_invnodevol": false,
            "symmetric": true,
            "use_sift_weights": false,
            "stat_edge": "sum",
            "measure": "radius2_count"
          },
          {
            "zero_diagonal": false,
            "search_radius": 2,
            "scale_invnodevol": false,
            "symmetric": true,
            "use_sift_weights": true,
            "stat_edge": "sum",
            "measure": "sift_radius2_count"
          }
        ]
      }
    }
  ]
}


Hi @apoorvakelkar,

I am not sure there is a way to do it without modifying qsiprep source code. That version is also very old and the software has changed so much since then that we cannot properly support it here. You might be best off postprocessing manually.

Best,
Steven

Hi @Steven,

Thank you so much.
I also tried it with a newer qsiprep version pennlinc/qsirecon:0.23.2 but it didn’t work.
I will process it manually.

Thank you
Best,
Apoorva