Summary of what happened:
Hi there,
I am trying to run a custom set up of the amico noddi spec, primarily adjusting the dPar values. I created a JSON to pass to the recon-spec argument, and it did work successfully.
However, the files are not being moved from the working dir to the output dir. I have been trying to find some resources regarding JSON formats in case I’m missing a node.
Please let me know if I’m missing something! Thank you very much!
Command used (and if a helper script was used, a link to the helper script or the command generated):
JSON
{
"description": "Custom AMICO NODDI",
"name": "amico_noddi_custom",
"space": "T1w",
"nodes": [
{
"name": "fit_noddi",
"action": "fit_noddi",
"input": "qsiprep",
"software": "AMICO",
"output_suffix": "NODDI",
"parameters": {
"dIso": 3.0E-3,
"dPar": 1.1E-3,
"isExvivo": false
}
}
],
"output_nodes": {
"fit_noddi": {
"type": "NODDI",
"space": "T1w",
"outputs": [
{
"suffix": "ICVF",
"map_type": "scalar",
"filename": "FIT_ICVF.nii.gz"
},
{
"suffix": "OD",
"map_type": "scalar",
"filename": "FIT_OD.nii.gz"
},
{
"suffix": "ISOVF",
"map_type": "scalar",
"filename": "FIT_ISOVF.nii.gz"
}
]
}
}
}
Slurm script:
#!/bin/bash -l
#SBATCH --partition=high-moby
#SBATCH --array=7
#SBATCH --nodes=1
#SBATCH --cpus-per-task=6
#SBATCH --mem-per-cpu=4096
#SBATCH --time=18:00:00
#SBATCH --job-name noddi_SPINR
#SBATCH --output=/*********/%x_%A_%a.out
#SBATCH --error=******/%x_%A_%a.err
STUDY="*****"
sublist="/******/subject_list.txt"
index() {
head -n $SLURM_ARRAY_TASK_ID $sublist \
| tail -n 1
}
BIDS_DIR=/****/data/bids
QSI_OUT=/****/QSIPREP/output/qsiprep
OUT_DIR=/****/QSIPREP/output/custom_noddi
TMP_DIR=/****/QSIPREP/output/tmp
WORK_DIR=${TMP_DIR}/${STUDY}/qsirecon_custom
FS_LICENSE=/*****freesurfer/.license
CODE_DIR=/*****/QSIPREP/code
SING_CONTAINER="/*****/containers/qsiprep-0.22.0.sif"
mkdir -p $BIDS_DIR $OUT_DIR $TMP_DIR $WORK_DIR
# Get the current participant label
PARTICIPANT_LABEL=$(index)
singularity run \
-H ${TMP_DIR} \
-B ${BIDS_DIR}:/bids \
-B ${QSI_OUT}:/qsiprep \
-B ${OUT_DIR}:/out \
-B ${CODE_DIR}:/code \
-B ${WORK_DIR}:/work \
-B ${FS_LICENSE}:/li \
${SING_CONTAINER} \
/bids /out participant \
--skip-bids-validation \
--participant_label $PARTICIPANT_LABEL \
--n_cpus 4 --omp-nthreads 2 \
--recon-only \
--recon-input /qsiprep \
--recon-spec /code/amico_noddi_custom.json \
--output-resolution 1.7 \
--fs-license-file /li \
-w /work \
--notrack
Version:
0.22,0
Environment (Docker, Singularity / Apptainer, custom installation):
Singularity
Data formatted according to a validatable standard? Please provide the output of the validator:
PASTE VALIDATOR OUTPUT HERE
Relevant log outputs (up to 20 lines):
250707-05:58:36,540 nipype.workflow INFO:
Running recon-only mode: --recon-input was used.
250707-05:58:36,542 nipype.workflow WARNING:
Argument --recon-only is not needed if --recon-input is specified.
250707-05:58:36,543 nipype.workflow IMPORTANT:
Running QSIRecon version 0.22.1.dev0+gd9279db.d20240719
License NOTICE ##################################################
QSIPrep 0.22.1.dev0+gd9279db.d20240719
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.
#################################################################
250707-05:58:36,807 nipype.workflow IMPORTANT:
Building QSIRecon's workflow:
* BIDS dataset path: /bids.
* Participant list: ['CMH050001'].
* Run identifier: 20250707-055812_670c4c20-5b68-4778-857c-393cd8f3139c.
250707-05:58:40,451 nipype.workflow INFO:
found ['/qsiprep/sub-CMH050001/ses-01/dwi/sub-CMH050001_ses-01_space-T1w_desc-preproc_dwi.nii.gz'] in /qsiprep
250707-05:58:40,453 nipype.workflow INFO:
CHECKING /qsiprep/sub-CMH050001/anat/sub-CMH050001_desc-brain_mask.nii.gz: True
250707-05:58:40,454 nipype.workflow INFO:
CHECKING /qsiprep/sub-CMH050001/anat/sub-CMH050001_desc-preproc_T1w.nii.gz: True
250707-05:58:40,454 nipype.workflow INFO:
Found usable QSIPrep-preprocessed T1w image and mask.
250707-05:58:40,455 nipype.workflow INFO:
CHECKING /qsiprep/sub-CMH050001/anat/sub-CMH050001_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5: True
250707-05:58:40,456 nipype.workflow INFO:
CHECKING /qsiprep/sub-CMH050001/anat/sub-CMH050001_from-MNI152NLin2009cAsym_to-T1w_mode-image_xfm.h5: True
250707-05:58:40,456 nipype.workflow INFO:
Found high-res anatomical data in preprocessed inputs for CMH050001.
250707-05:58:40,457 nipype.workflow INFO:
Anatomical (T1w) available for recon: {'has_qsiprep_5tt_hsvs': False, 'has_freesurfer_5tt_hsvs': False, 'has_freesurfer': False, 'has_qsiprep_t1w': True, 'has_qsiprep_t1w_transforms': True}
[{'bids_dwi_file': '/qsiprep/sub-CMH050001/ses-01/dwi/sub-CMH050001_ses-01_space-T1w_desc-preproc_dwi.nii.gz'}]
{'has_qsiprep_5tt_hsvs': False, 'has_freesurfer_5tt_hsvs': False, 'has_freesurfer': False, 'has_qsiprep_t1w': True, 'has_qsiprep_t1w_transforms': True}
250707-05:58:40,465 nipype.workflow INFO:
Transforming ODF ROIs into DWI space for visual report.
250707-05:58:44,322 nipype.workflow INFO:
QSIRecon workflow graph with 25 nodes built successfully.
250707-05:59:00,946 nipype.workflow IMPORTANT:
QSIRecon started!
250707-05:59:06,757 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_ingressed_dwi_data" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_ingressed_dwi_data".
250707-05:59:06,797 nipype.workflow INFO:
[Node] Executing "sub_CMH050001_ses_01_space_T1w_desc_preproc_ingressed_dwi_data" <qsiprep.interfaces.ingress.QsiReconDWIIngress>
250707-05:59:06,809 nipype.workflow INFO:
[Node] Finished "sub_CMH050001_ses_01_space_T1w_desc_preproc_ingressed_dwi_data", elapsed time 0.006643s.
250707-05:59:06,855 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.recon_anatomical_wf.qsiprep_anat_ingress" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/recon_anatomical_wf/qsiprep_anat_ingress".
250707-05:59:06,897 nipype.workflow INFO:
[Node] Executing "qsiprep_anat_ingress" <qsiprep.interfaces.anatomical.QsiprepAnatomicalIngress>
250707-05:59:06,912 nipype.workflow INFO:
[Node] Finished "qsiprep_anat_ingress", elapsed time 0.009539s.
250707-05:59:07,306 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf.resample_mask" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf/resample_mask".
250707-05:59:07,314 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf.output_grid_wf.voxel_size_chooser" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf/output_grid_wf/voxel_size_chooser".
250707-05:59:07,368 nipype.workflow INFO:
[Node] Executing "voxel_size_chooser" <qsiprep.interfaces.anatomical.VoxelSizeChooser>
250707-05:59:07,372 nipype.workflow INFO:
[Node] Finished "voxel_size_chooser", elapsed time 0.000763s.
250707-05:59:07,375 nipype.workflow INFO:
[Node] Executing "resample_mask" <nipype.interfaces.ants.resampling.ApplyTransforms>
250707-05:59:07,400 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf.odf_rois" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf/odf_rois".
250707-05:59:07,443 nipype.workflow INFO:
[Node] Executing "odf_rois" <nipype.interfaces.ants.resampling.ApplyTransforms>
250707-05:59:08,425 nipype.workflow INFO:
[Node] Finished "resample_mask", elapsed time 0.772619s.
250707-05:59:08,487 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf.output_grid_wf.autobox_template" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf/output_grid_wf/autobox_template".
250707-05:59:08,598 nipype.workflow INFO:
[Node] Executing "autobox_template" <nipype.interfaces.afni.utils.Autobox>
250707-05:59:10,512 nipype.workflow INFO:
[Node] Finished "autobox_template", elapsed time 1.91147s.
250707-05:59:11,272 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf.output_grid_wf.deoblique_autobox" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf/output_grid_wf/deoblique_autobox".
250707-05:59:11,318 nipype.workflow INFO:
[Node] Executing "deoblique_autobox" <nipype.interfaces.afni.preprocess.Warp>
250707-05:59:12,541 nipype.workflow INFO:
[Node] Finished "deoblique_autobox", elapsed time 1.221979s.
250707-05:59:13,362 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf.output_grid_wf.resample_to_voxel_size" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_dwi_specific_anat_wf/output_grid_wf/resample_to_voxel_size".
250707-05:59:15,991 nipype.workflow INFO:
[Node] Executing "resample_to_voxel_size" <nipype.interfaces.afni.utils.Resample>
250707-05:59:16,584 nipype.workflow INFO:
[Node] Finished "resample_to_voxel_size", elapsed time 0.588333s.
250707-05:59:22,526 nipype.workflow INFO:
[Node] Finished "odf_rois", elapsed time 14.760302s.
250707-05:59:25,905 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_inputs" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_inputs".
250707-05:59:25,972 nipype.workflow INFO:
[Node] Executing "sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_inputs" <qsiprep.interfaces.interchange.ReconWorkflowInputs>
250707-05:59:25,984 nipype.workflow INFO:
[Node] Finished "sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_inputs", elapsed time 0.001708s.
250707-05:59:27,319 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_wf.fit_noddi.recon_noddi" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_wf/fit_noddi/recon_noddi".
250707-05:59:27,381 nipype.workflow INFO:
[Node] Executing "recon_noddi" <qsiprep.interfaces.amico.NODDI>
-> Rounding b-values to nearest multiple of 50.0
-> Writing scheme file to [ /work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_wf/fit_noddi/recon_noddi/study/subject/sub-CMH050001_ses-01_space-T1w_desc-preproc_dwi.scheme ]
e[0;32m
-> Loading data:e[0m
* DWI signal
- dim = 95 x 116 x 101 x 104
- pixdim = 1.700 x 1.700 x 1.700
* Acquisition scheme
- 104 samples, 4 shells
- 8 @ b=0 , 60 @ b=3000.0 , 15 @ b=2000.0 , 15 @ b=1000.0 , 6 @ b=500.0
* Binary mask
- dim = 95 x 116 x 101
- pixdim = 1.700 x 1.700 x 1.700
- voxels = 294966
e[0;32m [ 3.3 seconds ]e[0m
e[0;32m
-> Preprocessing:e[0m
* Normalizing to b0... [ min=0.00, mean=0.43, max=262.38 ]
* Keeping all b0 volume(s)
e[0;32m [ 1.1 seconds ]e[0m
250707-05:59:31,898 nipype.interface INFO:
Fitting NODDI Model.
e[0;32m
-> Creating LUT for "NODDI" model:e[0m
e[0;32m [ 347.1 seconds ]e[0m
e[0;32m
-> Resampling LUT for subject "subject":e[0m
e[0;32m [ 82.9 seconds ]e[0m
e[0;32m
-> Fitting "NODDI" model to 294966 voxels (using 2 jobs):e[0m
e[0;32m [ 00h 13m 12s ]e[0m
e[0;32m
-> Saving output to "AMICO/NODDI/*":e[0m
- configuration [OK]
- FIT_dir.nii.gz [OK]
- FIT_ICVF.nii.gz [OK]
- FIT_OD.nii.gz [OK]
- FIT_ISOVF.nii.gz [OK]
e[0;32m [ DONE ]e[0m
250707-06:19:56,405 nipype.workflow INFO:
[Node] Finished "recon_noddi", elapsed time 1229.02102s.
250707-06:20:00,989 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_wf.fit_noddi.convert_to_fibgz" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_wf/fit_noddi/convert_to_fibgz".
250707-06:20:01,71 nipype.workflow INFO:
[Node] Executing "convert_to_fibgz" <qsiprep.interfaces.converters.NODDItoFIBGZ>
250707-06:20:01,693 nipype.workflow INFO:
Detecting Peaks
250707-06:20:02,678 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_wf.scalar_gatherer" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_wf/scalar_gatherer".
250707-06:20:02,733 nipype.workflow INFO:
[Node] Executing "scalar_gatherer" <nipype.interfaces.utility.base.Merge>
250707-06:20:02,737 nipype.workflow INFO:
[Node] Finished "scalar_gatherer", elapsed time 0.00096s.
250707-06:20:04,340 nipype.workflow INFO:
[Node] Finished "convert_to_fibgz", elapsed time 3.266878s.
250707-06:20:04,681 nipype.workflow INFO:
[Node] Setting-up "qsirecon_0_22_wf.sub-CMH050001_amico_noddi_custom.sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_wf.fit_noddi.plot_peaks" in "/work/qsirecon_0_22_wf/sub-CMH050001_amico_noddi_custom/sub_CMH050001_ses_01_space_T1w_desc_preproc_recon_wf/fit_noddi/plot_peaks".
250707-06:20:04,767 nipype.workflow INFO:
[Node] Executing "plot_peaks" <qsiprep.interfaces.reports.CLIReconPeaksReport>
250707-06:20:51,286 nipype.workflow INFO:
[Node] Finished "plot_peaks", elapsed time 46.405633s.
250707-06:24:55,39 nipype.workflow IMPORTANT:
QSIPrep finished successfully!