Hi @tsalo. Thank you for this. I’ve re-built the singularity image (it seems to have pulled your changes…I did a “diff” on base.py from each). I get the same error, this time the full output:
250714-21:53:32,917 nipype.workflow IMPORTANT:
Running QSIRecon version 1.1.1.dev7+g7e2d198.d20250714
License NOTICE ##################################################
QSIRecon 1.1.1.dev7+g7e2d198.d20250714
Copyright The PennLINC Developers.
This product includes software developed by
the NiPreps Community (https://nipreps.org/).
Portions of this software were developed at the Department of
Psychology at Stanford University, Stanford, CA, US.
This software is also distributed as a Docker container image.
The bootstrapping file for the image ("Dockerfile") is licensed
under the MIT License.
This software may be distributed through an add-on package called
"Docker Wrapper" that is under the BSD 3-clause License.
#################################################################
250714-21:53:32,929 nipype.workflow IMPORTANT:
Building QSIRecon's workflow:
* BIDS dataset path: /gpfs/nvme1/0/genr/GenR_MRI/bids.upgrade/derivatives/dwi/qsiprep.
* Participant list: ['1115'].
* Run identifier: 20250714-215329_cf320a1d-1776-4912-bb32-e08c6e1ad392.
* Pre-run FreeSurfer's SUBJECTS_DIR: /gpfs/nvme1/0/genr/software/qsiprep/freesurfer.
250714-21:53:36,311 nipype.utils INFO:
Collected anatomical data:
acpc_aparc: null
acpc_aseg: null
acpc_brain_mask: null
acpc_csf_probseg: null
acpc_gm_probseg: null
acpc_preproc: null
acpc_seg: null
acpc_to_template_xfm: null
acpc_wm_probseg: null
orig_to_acpc_xfm: null
template_to_acpc_xfm: null
250714-21:53:36,313 nipype.utils WARNING:
No preprocessed anatomical image or brain mask found.
250714-21:53:36,313 nipype.utils WARNING:
No anat-to-template or template-to-anat transforms found.
250714-21:53:36,314 nipype.workflow INFO:
Anatomical data available for /gpfs/nvme1/0/genr/GenR_MRI/bids.upgrade/derivatives/dwi/qsiprep/sub-1115/anat/sub-1115_space-ACPC_desc-preproc_T1w.nii.gz:
acpc_aparc: null
acpc_aseg: null
acpc_brain_mask: null
acpc_csf_probseg: null
acpc_gm_probseg: null
acpc_preproc: null
acpc_seg: null
acpc_to_template_xfm: null
acpc_wm_probseg: null
orig_to_acpc_xfm: null
template_to_acpc_xfm: null
250714-21:53:36,317 nipype.workflow INFO:
Found high-res anatomical data in preprocessed inputs for 1115.
250714-21:53:36,317 nipype.workflow DEBUG:
(recon_anatomical_wf_0.inputnode, recon_anatomical_wf_0.outputnode): No edge data
250714-21:53:36,317 nipype.workflow DEBUG:
(recon_anatomical_wf_0.inputnode, recon_anatomical_wf_0.outputnode): new edge data: {'connect': [('acpc_aparc', 'acpc_aparc'), ('acpc_seg', 'acpc_seg'), ('acpc_aseg', 'acpc_aseg'), ('acpc_brain_mask', 'acpc_brain_mask'), ('acpc_preproc', 'acpc_preproc'), ('acpc_csf_probseg', 'acpc_csf_probseg'), ('acpc_gm_probseg', 'acpc_gm_probseg'), ('acpc_wm_probseg', 'acpc_wm_probseg'), ('orig_to_acpc_xfm', 'orig_to_acpc_xfm'), ('template_to_acpc_xfm', 'template_to_acpc_xfm'), ('acpc_to_template_xfm', 'acpc_to_template_xfm')]}
250714-21:53:36,317 nipype.workflow INFO:
Freesurfer directory /gpfs/nvme1/0/genr/software/qsiprep/freesurfer/sub-1115 exists for 1115
250714-21:53:36,317 nipype.workflow INFO:
acpc_aparc (<class 'str'>): None (<class 'NoneType'>)
250714-21:53:36,317 nipype.workflow DEBUG:
[Node] anat_ingress_node_0 - setting input acpc_aparc = None
250714-21:53:36,317 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): No edge data
250714-21:53:36,317 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): new edge data: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc')]}
250714-21:53:36,317 nipype.workflow INFO:
acpc_seg (<class 'str'>): None (<class 'NoneType'>)
250714-21:53:36,318 nipype.workflow DEBUG:
[Node] anat_ingress_node_0 - setting input acpc_seg = None
250714-21:53:36,318 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): Edge data exists: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc')]}
250714-21:53:36,318 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): new edge data: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg')]}
250714-21:53:36,318 nipype.workflow INFO:
acpc_aseg (<class 'str'>): None (<class 'NoneType'>)
250714-21:53:36,318 nipype.workflow DEBUG:
[Node] anat_ingress_node_0 - setting input acpc_aseg = None
250714-21:53:36,318 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): Edge data exists: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg')]}
250714-21:53:36,318 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): new edge data: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg')]}
250714-21:53:36,318 nipype.workflow INFO:
acpc_brain_mask (<class 'str'>): None (<class 'NoneType'>)
250714-21:53:36,318 nipype.workflow DEBUG:
[Node] anat_ingress_node_0 - setting input acpc_brain_mask = None
250714-21:53:36,318 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): Edge data exists: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg')]}
250714-21:53:36,318 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): new edge data: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask')]}
250714-21:53:36,318 nipype.workflow INFO:
acpc_preproc (<class 'str'>): None (<class 'NoneType'>)
250714-21:53:36,318 nipype.workflow DEBUG:
[Node] anat_ingress_node_0 - setting input acpc_preproc = None
250714-21:53:36,318 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): Edge data exists: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask')]}
250714-21:53:36,318 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): new edge data: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc')]}
250714-21:53:36,318 nipype.workflow INFO:
acpc_csf_probseg (<class 'str'>): None (<class 'NoneType'>)
250714-21:53:36,318 nipype.workflow DEBUG:
[Node] anat_ingress_node_0 - setting input acpc_csf_probseg = None
250714-21:53:36,318 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): Edge data exists: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc')]}
250714-21:53:36,318 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): new edge data: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc'), ('acpc_csf_probseg', 'inputnode.acpc_csf_probseg')]}
250714-21:53:36,318 nipype.workflow INFO:
acpc_gm_probseg (<class 'str'>): None (<class 'NoneType'>)
250714-21:53:36,318 nipype.workflow DEBUG:
[Node] anat_ingress_node_0 - setting input acpc_gm_probseg = None
250714-21:53:36,318 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): Edge data exists: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc'), ('acpc_csf_probseg', 'inputnode.acpc_csf_probseg')]}
250714-21:53:36,319 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): new edge data: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc'), ('acpc_csf_probseg', 'inputnode.acpc_csf_probseg'), ('acpc_gm_probseg', 'inputnode.acpc_gm_probseg')]}
250714-21:53:36,319 nipype.workflow INFO:
acpc_wm_probseg (<class 'str'>): None (<class 'NoneType'>)
250714-21:53:36,319 nipype.workflow DEBUG:
[Node] anat_ingress_node_0 - setting input acpc_wm_probseg = None
250714-21:53:36,319 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): Edge data exists: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc'), ('acpc_csf_probseg', 'inputnode.acpc_csf_probseg'), ('acpc_gm_probseg', 'inputnode.acpc_gm_probseg')]}
250714-21:53:36,319 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): new edge data: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc'), ('acpc_csf_probseg', 'inputnode.acpc_csf_probseg'), ('acpc_gm_probseg', 'inputnode.acpc_gm_probseg'), ('acpc_wm_probseg', 'inputnode.acpc_wm_probseg')]}
250714-21:53:36,319 nipype.workflow INFO:
orig_to_acpc_xfm (<class 'str'>): None (<class 'NoneType'>)
250714-21:53:36,319 nipype.workflow DEBUG:
[Node] anat_ingress_node_0 - setting input orig_to_acpc_xfm = None
250714-21:53:36,319 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): Edge data exists: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc'), ('acpc_csf_probseg', 'inputnode.acpc_csf_probseg'), ('acpc_gm_probseg', 'inputnode.acpc_gm_probseg'), ('acpc_wm_probseg', 'inputnode.acpc_wm_probseg')]}
250714-21:53:36,319 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): new edge data: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc'), ('acpc_csf_probseg', 'inputnode.acpc_csf_probseg'), ('acpc_gm_probseg', 'inputnode.acpc_gm_probseg'), ('acpc_wm_probseg', 'inputnode.acpc_wm_probseg'), ('orig_to_acpc_xfm', 'inputnode.orig_to_acpc_xfm')]}
250714-21:53:36,319 nipype.workflow INFO:
template_to_acpc_xfm (<class 'str'>): None (<class 'NoneType'>)
250714-21:53:36,319 nipype.workflow DEBUG:
[Node] anat_ingress_node_0 - setting input template_to_acpc_xfm = None
250714-21:53:36,319 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): Edge data exists: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc'), ('acpc_csf_probseg', 'inputnode.acpc_csf_probseg'), ('acpc_gm_probseg', 'inputnode.acpc_gm_probseg'), ('acpc_wm_probseg', 'inputnode.acpc_wm_probseg'), ('orig_to_acpc_xfm', 'inputnode.orig_to_acpc_xfm')]}
250714-21:53:36,319 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): new edge data: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc'), ('acpc_csf_probseg', 'inputnode.acpc_csf_probseg'), ('acpc_gm_probseg', 'inputnode.acpc_gm_probseg'), ('acpc_wm_probseg', 'inputnode.acpc_wm_probseg'), ('orig_to_acpc_xfm', 'inputnode.orig_to_acpc_xfm'), ('template_to_acpc_xfm', 'inputnode.template_to_acpc_xfm')]}
250714-21:53:36,319 nipype.workflow INFO:
acpc_to_template_xfm (<class 'str'>): None (<class 'NoneType'>)
250714-21:53:36,319 nipype.workflow DEBUG:
[Node] anat_ingress_node_0 - setting input acpc_to_template_xfm = None
250714-21:53:36,319 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): Edge data exists: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc'), ('acpc_csf_probseg', 'inputnode.acpc_csf_probseg'), ('acpc_gm_probseg', 'inputnode.acpc_gm_probseg'), ('acpc_wm_probseg', 'inputnode.acpc_wm_probseg'), ('orig_to_acpc_xfm', 'inputnode.orig_to_acpc_xfm'), ('template_to_acpc_xfm', 'inputnode.template_to_acpc_xfm')]}
250714-21:53:36,319 nipype.workflow DEBUG:
(sub-1115_hbcd_postproc_beta.anat_ingress_node_0, sub-1115_hbcd_postproc_beta.recon_anatomical_wf_0): new edge data: {'connect': [('acpc_aparc', 'inputnode.acpc_aparc'), ('acpc_seg', 'inputnode.acpc_seg'), ('acpc_aseg', 'inputnode.acpc_aseg'), ('acpc_brain_mask', 'inputnode.acpc_brain_mask'), ('acpc_preproc', 'inputnode.acpc_preproc'), ('acpc_csf_probseg', 'inputnode.acpc_csf_probseg'), ('acpc_gm_probseg', 'inputnode.acpc_gm_probseg'), ('acpc_wm_probseg', 'inputnode.acpc_wm_probseg'), ('orig_to_acpc_xfm', 'inputnode.orig_to_acpc_xfm'), ('template_to_acpc_xfm', 'inputnode.template_to_acpc_xfm'), ('acpc_to_template_xfm', 'inputnode.acpc_to_template_xfm')]}
250714-21:53:36,319 nipype.workflow INFO:
Found 1 high-res anatomicals to process
Traceback (most recent call last):
File "/opt/conda/envs/qsiprep/bin/qsirecon", line 8, in <module>
sys.exit(main())
File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/qsirecon/cli/run.py", line 84, in main
retval = build_workflow(str(config_file), {})
File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/qsirecon/cli/workflow.py", line 133, in build_workflow
retval["workflow"] = init_qsirecon_wf()
File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/qsirecon/workflows/base.py", line 44, in init_qsirecon_wf
single_subject_wf = init_single_subject_recon_wf(subject_id=subject_id)
File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/qsirecon/workflows/base.py", line 251, in init_single_subject_recon_wf
dwi_anat_wfs[dwi_file], dwi_available_anatomical_data = init_dwi_recon_anatomical_workflow(
File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/qsirecon/workflows/recon/anatomical.py", line 406, in init_dwi_recon_anatomical_workflow
GetTemplate(
File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/core.py", line 567, in __init__
super().__init__(
File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/nipype/interfaces/base/core.py", line 204, in __init__
self.inputs.trait_set(**inputs)
File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/traits/has_traits.py", line 1520, in trait_set
setattr(self, name, value)
File "/opt/conda/envs/qsiprep/lib/python3.10/site-packages/traits/base_trait_handler.py", line 74, in error
raise TraitError(
traits.trait_errors.TraitError: The 'template_name' trait of a _GetTemplateInputSpec instance must be a string, but a value of None <class 'NoneType'> was specified.
Thanks again for thinking along here. Let me know if you have other advice on something else I can try.