#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"
}
]
}
}
]
}