diff --git a/.circleci/ds005_partial_fasttrack_outputs.txt b/.circleci/ds005_partial_fasttrack_outputs.txt index faa1fc7ad..899352a35 100644 --- a/.circleci/ds005_partial_fasttrack_outputs.txt +++ b/.circleci/ds005_partial_fasttrack_outputs.txt @@ -61,6 +61,7 @@ sub-01/anat/sub-01_space-MNI152NLin6Asym_label-CSF_desc-preproc_probseg.nii.gz sub-01/anat/sub-01_space-MNI152NLin6Asym_label-GM_desc-preproc_probseg.nii.gz sub-01/anat/sub-01_space-MNI152NLin6Asym_label-WM_desc-preproc_probseg.nii.gz sub-01/fmap +sub-01/fmap/sub-01_run-02_fmapid-auto00000_desc-brain_mask.nii.gz sub-01/fmap/sub-01_run-02_fmapid-auto00000_desc-coeff_fieldmap.nii.gz sub-01/fmap/sub-01_run-02_fmapid-auto00000_desc-magnitude_fieldmap.nii.gz sub-01/fmap/sub-01_run-02_fmapid-auto00000_desc-preproc_fieldmap.json @@ -76,8 +77,8 @@ sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-hmc_boldref.json sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-hmc_boldref.nii.gz sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-T1w_mode-image_desc-coreg_xfm.json sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-T1w_mode-image_desc-coreg_xfm.txt -sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-auto00000_mode-image_xfm.json -sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-auto00000_mode-image_xfm.txt +sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.json +sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.txt sub-01/func/sub-01_task-mixedgamblestask_run-02_from-orig_to-boldref_mode-image_desc-hmc_xfm.json sub-01/func/sub-01_task-mixedgamblestask_run-02_from-orig_to-boldref_mode-image_desc-hmc_xfm.txt sub-01/func/sub-01_task-mixedgamblestask_run-02_hemi-L_space-fsaverage5_bold.func.gii diff --git a/.circleci/ds005_partial_outputs.txt b/.circleci/ds005_partial_outputs.txt index 319a04496..ba934e6fd 100644 --- a/.circleci/ds005_partial_outputs.txt +++ b/.circleci/ds005_partial_outputs.txt @@ -83,6 +83,7 @@ sub-01/anat/sub-01_space-MNI152NLin6Asym_label-CSF_probseg.nii.gz sub-01/anat/sub-01_space-MNI152NLin6Asym_label-GM_probseg.nii.gz sub-01/anat/sub-01_space-MNI152NLin6Asym_label-WM_probseg.nii.gz sub-01/fmap +sub-01/fmap/sub-01_run-02_fmapid-auto00000_desc-brain_mask.nii.gz sub-01/fmap/sub-01_run-02_fmapid-auto00000_desc-coeff_fieldmap.nii.gz sub-01/fmap/sub-01_run-02_fmapid-auto00000_desc-magnitude_fieldmap.nii.gz sub-01/fmap/sub-01_run-02_fmapid-auto00000_desc-preproc_fieldmap.json @@ -96,8 +97,8 @@ sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-coreg_boldref.json sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-coreg_boldref.nii.gz sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-hmc_boldref.json sub-01/func/sub-01_task-mixedgamblestask_run-02_desc-hmc_boldref.nii.gz -sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-auto00000_mode-image_xfm.json -sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-auto00000_mode-image_xfm.txt +sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.json +sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.txt sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-T1w_mode-image_desc-coreg_xfm.json sub-01/func/sub-01_task-mixedgamblestask_run-02_from-boldref_to-T1w_mode-image_desc-coreg_xfm.txt sub-01/func/sub-01_task-mixedgamblestask_run-02_from-orig_to-boldref_mode-image_desc-hmc_xfm.json diff --git a/.circleci/ds054_fasttrack_outputs.txt b/.circleci/ds054_fasttrack_outputs.txt index c9327680f..c806b68e9 100644 --- a/.circleci/ds054_fasttrack_outputs.txt +++ b/.circleci/ds054_fasttrack_outputs.txt @@ -18,6 +18,7 @@ sub-100185/anat/sub-100185_space-MNI152NLin2009cAsym_res-2_label-CSF_desc-prepro sub-100185/anat/sub-100185_space-MNI152NLin2009cAsym_res-2_label-GM_desc-preproc_probseg.nii.gz sub-100185/anat/sub-100185_space-MNI152NLin2009cAsym_res-2_label-WM_desc-preproc_probseg.nii.gz sub-100185/fmap +sub-100185/fmap/sub-100185_fmapid-auto00000_desc-brain_mask.nii.gz sub-100185/fmap/sub-100185_fmapid-auto00000_desc-coeff_fieldmap.nii.gz sub-100185/fmap/sub-100185_fmapid-auto00000_desc-magnitude_fieldmap.nii.gz sub-100185/fmap/sub-100185_fmapid-auto00000_desc-preproc_fieldmap.json @@ -33,8 +34,8 @@ sub-100185/func/sub-100185_task-machinegame_run-01_desc-hmc_boldref.json sub-100185/func/sub-100185_task-machinegame_run-01_desc-hmc_boldref.nii.gz sub-100185/func/sub-100185_task-machinegame_run-01_desc-preproc_bold.json sub-100185/func/sub-100185_task-machinegame_run-01_desc-preproc_bold.nii.gz -sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-auto00000_mode-image_xfm.json -sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-auto00000_mode-image_xfm.txt +sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.json +sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.txt sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-T1w_mode-image_desc-coreg_xfm.json sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-T1w_mode-image_desc-coreg_xfm.txt sub-100185/func/sub-100185_task-machinegame_run-01_from-orig_to-boldref_mode-image_desc-hmc_xfm.json @@ -61,8 +62,8 @@ sub-100185/func/sub-100185_task-machinegame_run-02_desc-hmc_boldref.json sub-100185/func/sub-100185_task-machinegame_run-02_desc-hmc_boldref.nii.gz sub-100185/func/sub-100185_task-machinegame_run-02_desc-preproc_bold.json sub-100185/func/sub-100185_task-machinegame_run-02_desc-preproc_bold.nii.gz -sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-auto00000_mode-image_xfm.json -sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-auto00000_mode-image_xfm.txt +sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.json +sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.txt sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-T1w_mode-image_desc-coreg_xfm.json sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-T1w_mode-image_desc-coreg_xfm.txt sub-100185/func/sub-100185_task-machinegame_run-02_from-orig_to-boldref_mode-image_desc-hmc_xfm.json diff --git a/.circleci/ds054_outputs.txt b/.circleci/ds054_outputs.txt index 1340f33be..f50701f6f 100644 --- a/.circleci/ds054_outputs.txt +++ b/.circleci/ds054_outputs.txt @@ -28,6 +28,7 @@ sub-100185/anat/sub-100185_space-MNI152NLin2009cAsym_res-2_label-CSF_probseg.nii sub-100185/anat/sub-100185_space-MNI152NLin2009cAsym_res-2_label-GM_probseg.nii.gz sub-100185/anat/sub-100185_space-MNI152NLin2009cAsym_res-2_label-WM_probseg.nii.gz sub-100185/fmap +sub-100185/fmap/sub-100185_fmapid-auto00000_desc-brain_mask.nii.gz sub-100185/fmap/sub-100185_fmapid-auto00000_desc-coeff_fieldmap.nii.gz sub-100185/fmap/sub-100185_fmapid-auto00000_desc-magnitude_fieldmap.nii.gz sub-100185/fmap/sub-100185_fmapid-auto00000_desc-preproc_fieldmap.json @@ -43,8 +44,8 @@ sub-100185/func/sub-100185_task-machinegame_run-01_desc-hmc_boldref.json sub-100185/func/sub-100185_task-machinegame_run-01_desc-hmc_boldref.nii.gz sub-100185/func/sub-100185_task-machinegame_run-01_desc-preproc_bold.json sub-100185/func/sub-100185_task-machinegame_run-01_desc-preproc_bold.nii.gz -sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-auto00000_mode-image_xfm.json -sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-auto00000_mode-image_xfm.txt +sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.json +sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.txt sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-T1w_mode-image_desc-coreg_xfm.json sub-100185/func/sub-100185_task-machinegame_run-01_from-boldref_to-T1w_mode-image_desc-coreg_xfm.txt sub-100185/func/sub-100185_task-machinegame_run-01_from-orig_to-boldref_mode-image_desc-hmc_xfm.json @@ -71,8 +72,8 @@ sub-100185/func/sub-100185_task-machinegame_run-02_desc-hmc_boldref.json sub-100185/func/sub-100185_task-machinegame_run-02_desc-hmc_boldref.nii.gz sub-100185/func/sub-100185_task-machinegame_run-02_desc-preproc_bold.json sub-100185/func/sub-100185_task-machinegame_run-02_desc-preproc_bold.nii.gz -sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-auto00000_mode-image_xfm.json -sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-auto00000_mode-image_xfm.txt +sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.json +sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.txt sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-T1w_mode-image_desc-coreg_xfm.json sub-100185/func/sub-100185_task-machinegame_run-02_from-boldref_to-T1w_mode-image_desc-coreg_xfm.txt sub-100185/func/sub-100185_task-machinegame_run-02_from-orig_to-boldref_mode-image_desc-hmc_xfm.json diff --git a/.circleci/ds210_fasttrack_outputs.txt b/.circleci/ds210_fasttrack_outputs.txt index 2bc78e426..e5361b1f8 100644 --- a/.circleci/ds210_fasttrack_outputs.txt +++ b/.circleci/ds210_fasttrack_outputs.txt @@ -17,6 +17,7 @@ sub-02/anat/sub-02_space-MNI152NLin2009cAsym_label-CSF_desc-preproc_probseg.nii. sub-02/anat/sub-02_space-MNI152NLin2009cAsym_label-GM_desc-preproc_probseg.nii.gz sub-02/anat/sub-02_space-MNI152NLin2009cAsym_label-WM_desc-preproc_probseg.nii.gz sub-02/fmap +sub-02/fmap/sub-02_run-01_fmapid-auto00000_desc-brain_mask.nii.gz sub-02/fmap/sub-02_run-01_fmapid-auto00000_desc-coeff_fieldmap.nii.gz sub-02/fmap/sub-02_run-01_fmapid-auto00000_desc-magnitude_fieldmap.nii.gz sub-02/fmap/sub-02_run-01_fmapid-auto00000_desc-preproc_fieldmap.json @@ -36,8 +37,8 @@ sub-02/func/sub-02_task-cuedSGT_run-01_echo-2_desc-preproc_bold.json sub-02/func/sub-02_task-cuedSGT_run-01_echo-2_desc-preproc_bold.nii.gz sub-02/func/sub-02_task-cuedSGT_run-01_echo-3_desc-preproc_bold.json sub-02/func/sub-02_task-cuedSGT_run-01_echo-3_desc-preproc_bold.nii.gz -sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-auto00000_mode-image_xfm.json -sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-auto00000_mode-image_xfm.txt +sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.json +sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.txt sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-T1w_mode-image_desc-coreg_xfm.json sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-T1w_mode-image_desc-coreg_xfm.txt sub-02/func/sub-02_task-cuedSGT_run-01_from-orig_to-boldref_mode-image_desc-hmc_xfm.json diff --git a/.circleci/ds210_outputs.txt b/.circleci/ds210_outputs.txt index b1fc5226e..b0439969b 100644 --- a/.circleci/ds210_outputs.txt +++ b/.circleci/ds210_outputs.txt @@ -27,6 +27,7 @@ sub-02/anat/sub-02_space-MNI152NLin2009cAsym_label-CSF_probseg.nii.gz sub-02/anat/sub-02_space-MNI152NLin2009cAsym_label-GM_probseg.nii.gz sub-02/anat/sub-02_space-MNI152NLin2009cAsym_label-WM_probseg.nii.gz sub-02/fmap +sub-02/fmap/sub-02_run-01_fmapid-auto00000_desc-brain_mask.nii.gz sub-02/fmap/sub-02_run-01_fmapid-auto00000_desc-coeff_fieldmap.nii.gz sub-02/fmap/sub-02_run-01_fmapid-auto00000_desc-magnitude_fieldmap.nii.gz sub-02/fmap/sub-02_run-01_fmapid-auto00000_desc-preproc_fieldmap.json @@ -46,8 +47,8 @@ sub-02/func/sub-02_task-cuedSGT_run-01_echo-2_desc-preproc_bold.json sub-02/func/sub-02_task-cuedSGT_run-01_echo-2_desc-preproc_bold.nii.gz sub-02/func/sub-02_task-cuedSGT_run-01_echo-3_desc-preproc_bold.json sub-02/func/sub-02_task-cuedSGT_run-01_echo-3_desc-preproc_bold.nii.gz -sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-auto00000_mode-image_xfm.json -sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-auto00000_mode-image_xfm.txt +sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.json +sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-auto00000_mode-image_desc-fmap_xfm.txt sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-T1w_mode-image_desc-coreg_xfm.json sub-02/func/sub-02_task-cuedSGT_run-01_from-boldref_to-T1w_mode-image_desc-coreg_xfm.txt sub-02/func/sub-02_task-cuedSGT_run-01_from-orig_to-boldref_mode-image_desc-hmc_xfm.json diff --git a/fmriprep/workflows/bold/base.py b/fmriprep/workflows/bold/base.py index bc7586416..d1f1733b7 100644 --- a/fmriprep/workflows/bold/base.py +++ b/fmriprep/workflows/bold/base.py @@ -314,6 +314,7 @@ def init_bold_wf( if boldref_out or echos_out: ds_bold_native_wf = init_ds_bold_native_wf( + source_file=bold_series, bids_root=str(config.execution.bids_dir), output_dir=fmriprep_dir, bold_output=boldref_out, @@ -372,9 +373,14 @@ def init_bold_wf( for node in workflow.list_node_names(): if node.split('.')[-1].startswith('ds_report'): workflow.get_node(node).inputs.base_directory = fmriprep_dir - workflow.get_node(node).inputs.source_file = bold_file return workflow + # Pass along BOLD reference as a source file for provenance + merge_bold_sources = pe.Node( + niu.Merge(2), name='merge_bold_sources', run_without_submitting=True + ) + merge_bold_sources.inputs.in1 = bold_series + # Resample to anatomical space bold_anat_wf = init_bold_volumetric_resample_wf( metadata=all_metadata[0], @@ -404,18 +410,19 @@ def init_bold_wf( ('outputnode.bold_minimal', 'inputnode.bold_file'), ('outputnode.motion_xfm', 'inputnode.motion_xfm'), ]), + (bold_fit_wf, merge_bold_sources, [('outputnode.coreg_boldref', 'in2')]), ]) # fmt:skip # Full derivatives, including resampled BOLD series if nonstd_spaces.intersection(('anat', 'T1w')): ds_bold_t1_wf = init_ds_volumes_wf( + source_file=bold_file, bids_root=str(config.execution.bids_dir), output_dir=fmriprep_dir, multiecho=multiecho, metadata=all_metadata[0], name='ds_bold_t1_wf', ) - ds_bold_t1_wf.inputs.inputnode.source_files = bold_series ds_bold_t1_wf.inputs.inputnode.space = 'T1w' workflow.connect([ @@ -431,6 +438,7 @@ def init_bold_wf( ('outputnode.bold_file', 'inputnode.bold'), ('outputnode.resampling_reference', 'inputnode.ref_file'), ]), + (merge_bold_sources, ds_bold_t1_wf, [('out', 'inputnode.source_files')]), ]) # fmt:skip if spaces.cached.get_spaces(nonstandard=False, dim=(3,)): @@ -446,13 +454,13 @@ def init_bold_wf( name='bold_std_wf', ) ds_bold_std_wf = init_ds_volumes_wf( + source_file=bold_file, bids_root=str(config.execution.bids_dir), output_dir=fmriprep_dir, multiecho=multiecho, metadata=all_metadata[0], name='ds_bold_std_wf', ) - ds_bold_std_wf.inputs.inputnode.source_files = bold_series workflow.connect([ (inputnode, bold_std_wf, [ @@ -492,6 +500,7 @@ def init_bold_wf( ('outputnode.bold_file', 'inputnode.bold'), ('outputnode.resampling_reference', 'inputnode.ref_file'), ]), + (merge_bold_sources, ds_bold_std_wf, [('out', 'inputnode.source_files')]), ]) # fmt:skip if config.workflow.run_reconall and freesurfer_spaces: diff --git a/fmriprep/workflows/bold/fit.py b/fmriprep/workflows/bold/fit.py index 4017aa2bf..0586cde92 100644 --- a/fmriprep/workflows/bold/fit.py +++ b/fmriprep/workflows/bold/fit.py @@ -348,6 +348,7 @@ def init_bold_fit_wf( ) func_fit_reports_wf = init_func_fit_reports_wf( + source_file=bold_file, sdc_correction=fieldmap_id is not None, freesurfer=config.workflow.run_reconall, output_dir=config.execution.fmriprep_dir, @@ -368,7 +369,6 @@ def init_bold_fit_wf( ('hmc_xforms', 'motion_xfm'), ]), (inputnode, func_fit_reports_wf, [ - ('bold_file', 'inputnode.source_file'), ('t1w_preproc', 'inputnode.t1w_preproc'), # May not need all of these ('t1w_mask', 'inputnode.t1w_mask'), @@ -399,6 +399,7 @@ def init_bold_fit_wf( hmc_boldref_wf.inputs.inputnode.dummy_scans = config.workflow.dummy_scans ds_hmc_boldref_wf = init_ds_boldref_wf( + source_file=bold_file, bids_root=layout.root, output_dir=config.execution.fmriprep_dir, desc='hmc', @@ -407,12 +408,12 @@ def init_bold_fit_wf( ds_hmc_boldref_wf.inputs.inputnode.source_files = [bold_file] workflow.connect([ + (hmc_boldref_wf, ds_hmc_boldref_wf, [('outputnode.boldref', 'inputnode.boldref')]), + (ds_hmc_boldref_wf, hmcref_buffer, [('outputnode.boldref', 'boldref')]), (hmc_boldref_wf, hmcref_buffer, [ ('outputnode.bold_file', 'bold_file'), - ('outputnode.boldref', 'boldref'), ('outputnode.skip_vols', 'dummy_scans'), ]), - (hmcref_buffer, ds_hmc_boldref_wf, [('boldref', 'inputnode.boldref')]), (hmc_boldref_wf, summary, [('outputnode.algo_dummy_scans', 'algo_dummy_scans')]), (hmc_boldref_wf, func_fit_reports_wf, [ ('outputnode.validation_report', 'inputnode.validation_report'), @@ -445,6 +446,7 @@ def init_bold_fit_wf( ) ds_hmc_wf = init_ds_hmc_wf( + source_file=bold_file, bids_root=layout.root, output_dir=config.execution.fmriprep_dir, ) @@ -508,23 +510,32 @@ def init_bold_fit_wf( ) itk_mat2txt = pe.Node(ConcatenateXFMs(out_fmt='itk'), name='itk_mat2txt') + fmapreg_source_files = pe.Node( + niu.Merge(2), name='fmapreg_source_files', run_without_submitting=True + ) ds_fmapreg_wf = init_ds_registration_wf( + source_file=bold_file, bids_root=layout.root, output_dir=config.execution.fmriprep_dir, source='boldref', dest=re.sub(r'[^a-zA-Z0-9]', '', fieldmap_id), + desc='fmap', name='ds_fmapreg_wf', ) - ds_fmapreg_wf.inputs.inputnode.source_files = [bold_file] workflow.connect([ (fmap_select, fmapreg_wf, [ ('fmap_ref', 'inputnode.fmap_ref'), ('fmap_mask', 'inputnode.fmap_mask'), ]), + (fmapref_buffer, fmapreg_source_files, [('out', 'in1')]), + (fmap_select, fmapreg_source_files, [ + ('fmap_ref', 'in2'), + ]), (fmapreg_wf, itk_mat2txt, [('outputnode.target2fmap_xfm', 'in_xfms')]), (itk_mat2txt, ds_fmapreg_wf, [('out_xfm', 'inputnode.xform')]), + (fmapreg_source_files, ds_fmapreg_wf, [('out', 'inputnode.source_files')]), (ds_fmapreg_wf, fmapreg_buffer, [('outputnode.xform', 'boldref2fmap_xfm')]), ]) # fmt:skip else: @@ -538,7 +549,7 @@ def init_bold_fit_wf( if not coreg_boldref: config.loggers.workflow.info('Stage 4: Adding coregistration boldref workflow') - # Select initial boldref, enhance contrast, and generate mask + # If sbref files are available, add them to the list of sources if sbref_files and nb.load(sbref_files[0]).ndim > 3: raw_sbref_wf = init_raw_boldref_wf( name='raw_sbref_wf', @@ -548,26 +559,30 @@ def init_bold_fit_wf( workflow.connect(raw_sbref_wf, 'outputnode.boldref', fmapref_buffer, 'sbref_files') enhance_boldref_wf = init_enhance_and_skullstrip_bold_wf(omp_nthreads=omp_nthreads) + coreg_ref_source_files = pe.Node( + niu.Merge(3), name='coreg_ref_source_files', run_without_submitting=True + ) ds_coreg_boldref_wf = init_ds_boldref_wf( + source_file=bold_file, bids_root=layout.root, output_dir=config.execution.fmriprep_dir, desc='coreg', name='ds_coreg_boldref_wf', ) ds_boldmask_wf = init_ds_boldmask_wf( + source_file=bold_file, output_dir=config.execution.fmriprep_dir, desc='brain', name='ds_boldmask_wf', ) - ds_boldmask_wf.inputs.inputnode.source_files = [bold_file] workflow.connect([ (fmapref_buffer, enhance_boldref_wf, [('out', 'inputnode.in_file')]), - (hmc_boldref_source_buffer, ds_coreg_boldref_wf, [ - ('in_file', 'inputnode.source_files'), - ]), + (fmapref_buffer, coreg_ref_source_files, [('out', 'in1')]), + (coreg_ref_source_files, ds_coreg_boldref_wf, [('out', 'inputnode.source_files')]), (ds_coreg_boldref_wf, regref_buffer, [('outputnode.boldref', 'boldref')]), + (ds_coreg_boldref_wf, ds_boldmask_wf, [('outputnode.boldref', 'inputnode.source_files')]), (ds_boldmask_wf, regref_buffer, [('outputnode.boldmask', 'boldmask')]), ]) # fmt:skip @@ -610,6 +625,8 @@ def init_bold_fit_wf( (skullstrip_bold_wf, ds_boldmask_wf, [ ('outputnode.mask_file', 'inputnode.boldmask'), ]), + (fmapreg_buffer, coreg_ref_source_files, [('boldref2fmap_xfm', 'in2')]), + (fmap_select, coreg_ref_source_files, [('fmap_coeff', 'in3')]), ]) # fmt:skip if not boldref2fmap_xform: @@ -660,10 +677,12 @@ def init_bold_fit_wf( ) ds_boldreg_wf = init_ds_registration_wf( + source_file=bold_file, bids_root=layout.root, output_dir=config.execution.fmriprep_dir, source='boldref', dest='T1w', + desc='coreg', name='ds_boldreg_wf', ) diff --git a/fmriprep/workflows/bold/outputs.py b/fmriprep/workflows/bold/outputs.py index d2785942f..ae4e1db2f 100644 --- a/fmriprep/workflows/bold/outputs.py +++ b/fmriprep/workflows/bold/outputs.py @@ -141,6 +141,7 @@ def prepare_timing_parameters(metadata: dict): def init_func_fit_reports_wf( *, + source_file: str, sdc_correction: bool, freesurfer: bool, output_dir: str, @@ -151,6 +152,8 @@ def init_func_fit_reports_wf( Parameters ---------- + source_file : :class:`str` + Input BOLD image, for entity extraction only freesurfer : :obj:`bool` FreeSurfer was enabled output_dir : :obj:`str` @@ -160,9 +163,6 @@ def init_func_fit_reports_wf( Inputs ------ - source_file - Input BOLD images - std_t1w T1w image resampled to standard space std_mask @@ -192,7 +192,6 @@ def init_func_fit_reports_wf( workflow = pe.Workflow(name=name) inputfields = [ - 'source_file', 'sdc_boldref', 'coreg_boldref', 'bold_mask', @@ -214,6 +213,7 @@ def init_func_fit_reports_wf( ds_summary = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc='summary', datatype='figures', @@ -226,6 +226,7 @@ def init_func_fit_reports_wf( ds_validation = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc='validation', datatype='figures', @@ -269,11 +270,9 @@ def init_func_fit_reports_wf( workflow.connect([ (inputnode, ds_summary, [ - ('source_file', 'source_file'), ('summary_report', 'in_file'), ]), (inputnode, ds_validation, [ - ('source_file', 'source_file'), ('validation_report', 'in_file'), ]), (inputnode, t1w_boldref, [ @@ -339,6 +338,7 @@ def init_func_fit_reports_wf( ds_sdcreg_report = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc='fmapCoreg', suffix='bold', @@ -361,6 +361,7 @@ def init_func_fit_reports_wf( ds_sdc_report = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc='sdc', suffix='bold', @@ -387,14 +388,12 @@ def init_func_fit_reports_wf( ]), (fmapref_boldref, sdcreg_report, [('output_image', 'moving')]), (fmap_boldref, sdcreg_report, [('output_image', 'fieldmap')]), - (inputnode, ds_sdcreg_report, [('source_file', 'source_file')]), (sdcreg_report, ds_sdcreg_report, [('out_report', 'in_file')]), (inputnode, sdc_report, [ ('sdc_boldref', 'before'), ('coreg_boldref', 'after'), ]), (boldref_wm, sdc_report, [('output_image', 'wm_seg')]), - (inputnode, ds_sdc_report, [('source_file', 'source_file')]), (sdc_report, ds_sdc_report, [('out_report', 'in_file')]), ]) # fmt:skip @@ -413,6 +412,7 @@ def init_func_fit_reports_wf( ds_epi_t1_report = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc='coreg', suffix='bold', @@ -426,7 +426,6 @@ def init_func_fit_reports_wf( (inputnode, epi_t1_report, [('coreg_boldref', 'after')]), (t1w_boldref, epi_t1_report, [('output_image', 'before')]), (boldref_wm, epi_t1_report, [('output_image', 'wm_seg')]), - (inputnode, ds_epi_t1_report, [('source_file', 'source_file')]), (epi_t1_report, ds_epi_t1_report, [('out_report', 'in_file')]), ]) # fmt:skip @@ -435,6 +434,7 @@ def init_func_fit_reports_wf( def init_ds_boldref_wf( *, + source_file: str, bids_root, output_dir, desc: str, @@ -459,6 +459,7 @@ def init_ds_boldref_wf( ds_boldref = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc=desc, suffix='boldref', @@ -471,8 +472,7 @@ def init_ds_boldref_wf( workflow.connect([ (inputnode, sources, [('source_files', 'in1')]), - (inputnode, ds_boldref, [('boldref', 'in_file'), - ('source_files', 'source_file')]), + (inputnode, ds_boldref, [('boldref', 'in_file')]), (sources, ds_boldref, [('out', 'Sources')]), (ds_boldref, outputnode, [('out_file', 'boldref')]), ]) # fmt:skip @@ -482,6 +482,7 @@ def init_ds_boldref_wf( def init_ds_boldmask_wf( *, + source_file: str, output_dir, desc: str, name='ds_boldmask_wf', @@ -506,6 +507,7 @@ def init_ds_boldmask_wf( ds_boldmask = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc=desc, suffix='mask', @@ -520,7 +522,6 @@ def init_ds_boldmask_wf( (inputnode, sources, [('source_files', 'in1')]), (inputnode, ds_boldmask, [ ('boldmask', 'in_file'), - ('source_files', 'source_file'), ]), (sources, ds_boldmask, [('out', 'Sources')]), (ds_boldmask, outputnode, [('out_file', 'boldmask')]), @@ -531,11 +532,13 @@ def init_ds_boldmask_wf( def init_ds_registration_wf( *, + source_file: str, bids_root: str, output_dir: str, source: str, dest: str, name: str, + desc: str | None = None, ) -> pe.Workflow: workflow = pe.Workflow(name=name) @@ -556,8 +559,10 @@ def init_ds_registration_wf( ds_xform = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, mode='image', + desc=desc, suffix='xfm', extension='.txt', dismiss_entities=dismiss_echo(['part']), @@ -572,7 +577,6 @@ def init_ds_registration_wf( (inputnode, sources, [('source_files', 'in1')]), (inputnode, ds_xform, [ ('xform', 'in_file'), - ('source_files', 'source_file'), ('metadata', 'meta_dict'), ]), (sources, ds_xform, [('out', 'Sources')]), @@ -584,6 +588,7 @@ def init_ds_registration_wf( def init_ds_hmc_wf( *, + source_file: str, bids_root, output_dir, name='ds_hmc_wf', @@ -607,6 +612,7 @@ def init_ds_hmc_wf( ds_xforms = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc='hmc', suffix='xfm', @@ -621,8 +627,7 @@ def init_ds_hmc_wf( workflow.connect([ (inputnode, sources, [('source_files', 'in1')]), - (inputnode, ds_xforms, [('xforms', 'in_file'), - ('source_files', 'source_file')]), + (inputnode, ds_xforms, [('xforms', 'in_file')]), (sources, ds_xforms, [('out', 'Sources')]), (ds_xforms, outputnode, [('out_file', 'xforms')]), ]) # fmt:skip @@ -632,6 +637,7 @@ def init_ds_hmc_wf( def init_ds_bold_native_wf( *, + source_file: str, bids_root: str, output_dir: str, multiecho: bool, @@ -678,6 +684,7 @@ def init_ds_bold_native_wf( if bold_output: ds_bold = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc='preproc', compress=True, @@ -691,7 +698,6 @@ def init_ds_bold_native_wf( ) workflow.connect([ (inputnode, ds_bold, [ - ('source_files', 'source_file'), ('bold', 'in_file'), ]), (sources, ds_bold, [('out', 'Sources')]), @@ -705,6 +711,7 @@ def init_ds_bold_native_wf( } ds_t2star = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, space='boldref', suffix='T2starmap', @@ -718,7 +725,6 @@ def init_ds_bold_native_wf( ) workflow.connect([ (inputnode, ds_t2star, [ - ('source_files', 'source_file'), ('t2star', 'in_file'), ]), (sources, ds_t2star, [('out', 'Sources')]), @@ -727,6 +733,7 @@ def init_ds_bold_native_wf( if echo_output: ds_bold_echos = pe.MapNode( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc='preproc', compress=True, @@ -742,7 +749,6 @@ def init_ds_bold_native_wf( ds_bold_echos.inputs.meta_dict = [{'EchoTime': md['EchoTime']} for md in all_metadata] workflow.connect([ (inputnode, ds_bold_echos, [ - ('source_files', 'source_file'), ('bold_echos', 'in_file'), ]), ]) # fmt:skip @@ -752,6 +758,7 @@ def init_ds_bold_native_wf( def init_ds_volumes_wf( *, + source_file: str, bids_root: str, output_dir: str, multiecho: bool, @@ -800,6 +807,7 @@ def init_ds_volumes_wf( # BOLD is pre-resampled ds_bold = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc='preproc', compress=True, @@ -827,7 +835,6 @@ def init_ds_volumes_wf( ('boldref2anat_xfm', 'in2'), ]), (inputnode, ds_bold, [ - ('source_files', 'source_file'), ('bold', 'in_file'), ('space', 'space'), ('cohort', 'cohort'), @@ -855,6 +862,7 @@ def init_ds_volumes_wf( ds_ref = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, suffix='boldref', compress=True, @@ -866,6 +874,7 @@ def init_ds_volumes_wf( ) ds_mask = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, desc='brain', suffix='mask', @@ -895,6 +904,7 @@ def init_ds_volumes_wf( ) ds_t2star = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=output_dir, suffix='T2starmap', compress=True, @@ -919,7 +929,6 @@ def init_ds_volumes_wf( for resampler in resamplers ] + [ (inputnode, datasink, [ - ('source_files', 'source_file'), ('space', 'space'), ('cohort', 'cohort'), ('resolution', 'resolution'), @@ -940,6 +949,7 @@ def init_ds_volumes_wf( def init_bold_preproc_report_wf( mem_gb: float, reportlets_dir: str, + source_file: str, name: str = 'bold_preproc_report_wf', ): """ @@ -954,10 +964,15 @@ def init_bold_preproc_report_wf( :simple_form: yes from fmriprep.workflows.bold.resampling import init_bold_preproc_report_wf - wf = init_bold_preproc_report_wf(mem_gb=1, reportlets_dir='.') + wf = init_bold_preproc_report_wf( + source_file='sub-01_task-nback_bold.nii.gz', + mem_gb=1, + reportlets_dir='.') Parameters ---------- + source_file : :class:`str` + Input BOLD image, for entity extraction only mem_gb : :obj:`float` Size of BOLD file in GB reportlets_dir : :obj:`str` @@ -994,6 +1009,7 @@ def init_bold_preproc_report_wf( bold_rpt = pe.Node(SimpleBeforeAfterRPT(), name='bold_rpt', mem_gb=0.1) ds_report_bold = pe.Node( DerivativesDataSink( + source_file=source_file, base_directory=reportlets_dir, desc='preproc', datatype='figures', diff --git a/pixi.lock b/pixi.lock index cf4275945..20d82039b 100644 --- a/pixi.lock +++ b/pixi.lock @@ -298,7 +298,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/91/53/c5ad0140e2e4c4d92ae45558587e26b2ebc62e39eafa30b74cb052d9375b/nipype-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/23/f87d9328c96e0107fed479ec564ce645b033ae0d6cedad2672bddeb0e065/nireports-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/a4/c8fbd097440fdb4fb1ef86bbd5789cfc7b2545bf626ac54cbd0e93399e19/nitransforms-25.0.1-py3-none-any.whl - - pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6f223eaa76ec6df17c6725a2b2fd566ad8fe4db7 + - pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6586b42542f1c5c16b3999dd6c2d31cafdde6979 - pypi: https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/24/552ebea28f0570b9e65e62b50287a273804c9f997cc1c2dcd4e2d64b9e7d/nvidia_ml_py-12.575.51-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/ae/ec06af4fe3ee72d16973474f122541746196aaa16cea6f66d18b963c6177/prometheus_client-0.22.1-py3-none-any.whl @@ -322,7 +322,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/17/4f0c142525f655729e5710b2763d8306a64b78efaa4488eab5750f45d18d/robustica-0.1.4.tar.gz - - pypi: https://files.pythonhosted.org/packages/fb/d5/2a6cdfbcacdda4e48aad8d92da937c6771c99f43ec9b6e10c8906eb86e67/sdcflows-2.13.2-py3-none-any.whl + - pypi: git+https://github.com/nipreps/sdcflows.git?rev=main#d95377b9b94df3597c64a919912ae863f639e3c6 - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/bd/400b0bd372a5666addf2540c7358bfc3841b9ce5cdbc5cc4ad2f61627ad8/simplejson-3.20.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -649,7 +649,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/91/53/c5ad0140e2e4c4d92ae45558587e26b2ebc62e39eafa30b74cb052d9375b/nipype-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/23/f87d9328c96e0107fed479ec564ce645b033ae0d6cedad2672bddeb0e065/nireports-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/a4/c8fbd097440fdb4fb1ef86bbd5789cfc7b2545bf626ac54cbd0e93399e19/nitransforms-25.0.1-py3-none-any.whl - - pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6f223eaa76ec6df17c6725a2b2fd566ad8fe4db7 + - pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6586b42542f1c5c16b3999dd6c2d31cafdde6979 - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/24/552ebea28f0570b9e65e62b50287a273804c9f997cc1c2dcd4e2d64b9e7d/nvidia_ml_py-12.575.51-py3-none-any.whl @@ -677,7 +677,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/17/4f0c142525f655729e5710b2763d8306a64b78efaa4488eab5750f45d18d/robustica-0.1.4.tar.gz - pypi: https://files.pythonhosted.org/packages/47/09/25033198bff89b24d734e6479e39b1968e4c992e82262d61cdccaf11afb9/ruff-0.12.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/fb/d5/2a6cdfbcacdda4e48aad8d92da937c6771c99f43ec9b6e10c8906eb86e67/sdcflows-2.13.2-py3-none-any.whl + - pypi: git+https://github.com/nipreps/sdcflows.git?rev=main#d95377b9b94df3597c64a919912ae863f639e3c6 - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/bd/400b0bd372a5666addf2540c7358bfc3841b9ce5cdbc5cc4ad2f61627ad8/simplejson-3.20.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -1005,7 +1005,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/91/53/c5ad0140e2e4c4d92ae45558587e26b2ebc62e39eafa30b74cb052d9375b/nipype-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/23/f87d9328c96e0107fed479ec564ce645b033ae0d6cedad2672bddeb0e065/nireports-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/a4/c8fbd097440fdb4fb1ef86bbd5789cfc7b2545bf626ac54cbd0e93399e19/nitransforms-25.0.1-py3-none-any.whl - - pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6f223eaa76ec6df17c6725a2b2fd566ad8fe4db7 + - pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6586b42542f1c5c16b3999dd6c2d31cafdde6979 - pypi: https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/24/552ebea28f0570b9e65e62b50287a273804c9f997cc1c2dcd4e2d64b9e7d/nvidia_ml_py-12.575.51-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/ae/ec06af4fe3ee72d16973474f122541746196aaa16cea6f66d18b963c6177/prometheus_client-0.22.1-py3-none-any.whl @@ -1030,7 +1030,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/17/4f0c142525f655729e5710b2763d8306a64b78efaa4488eab5750f45d18d/robustica-0.1.4.tar.gz - pypi: https://files.pythonhosted.org/packages/53/97/d2cbbaa10c9b826af0e10fdf836e1bf344d9f0abb873ebc34d1f49642d3f/roman_numerals_py-3.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/d5/2a6cdfbcacdda4e48aad8d92da937c6771c99f43ec9b6e10c8906eb86e67/sdcflows-2.13.2-py3-none-any.whl + - pypi: git+https://github.com/nipreps/sdcflows.git?rev=main#d95377b9b94df3597c64a919912ae863f639e3c6 - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/bd/400b0bd372a5666addf2540c7358bfc3841b9ce5cdbc5cc4ad2f61627ad8/simplejson-3.20.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -1387,7 +1387,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/91/53/c5ad0140e2e4c4d92ae45558587e26b2ebc62e39eafa30b74cb052d9375b/nipype-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/23/f87d9328c96e0107fed479ec564ce645b033ae0d6cedad2672bddeb0e065/nireports-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/a4/c8fbd097440fdb4fb1ef86bbd5789cfc7b2545bf626ac54cbd0e93399e19/nitransforms-25.0.1-py3-none-any.whl - - pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6f223eaa76ec6df17c6725a2b2fd566ad8fe4db7 + - pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6586b42542f1c5c16b3999dd6c2d31cafdde6979 - pypi: https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/24/552ebea28f0570b9e65e62b50287a273804c9f997cc1c2dcd4e2d64b9e7d/nvidia_ml_py-12.575.51-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/7a/8d6fe30d424329ced46a738faaea4150efb8eee656599b88a791cf7ad07e/osfclient-0.0.5-py2.py3-none-any.whl @@ -1417,7 +1417,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/17/4f0c142525f655729e5710b2763d8306a64b78efaa4488eab5750f45d18d/robustica-0.1.4.tar.gz - pypi: https://files.pythonhosted.org/packages/6d/4f/d073e09df851cfa251ef7840007d04db3293a0482ce607d2b993926089be/s3transfer-0.13.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/d5/2a6cdfbcacdda4e48aad8d92da937c6771c99f43ec9b6e10c8906eb86e67/sdcflows-2.13.2-py3-none-any.whl + - pypi: git+https://github.com/nipreps/sdcflows.git?rev=main#d95377b9b94df3597c64a919912ae863f639e3c6 - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/36/3d/742617a7c644deb0c1628dcf6bb2d2165ab7c6aab56fe5222758994007f8/sentry_sdk-2.35.0-py2.py3-none-any.whl @@ -1746,7 +1746,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/91/53/c5ad0140e2e4c4d92ae45558587e26b2ebc62e39eafa30b74cb052d9375b/nipype-1.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/23/f87d9328c96e0107fed479ec564ce645b033ae0d6cedad2672bddeb0e065/nireports-25.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/a4/c8fbd097440fdb4fb1ef86bbd5789cfc7b2545bf626ac54cbd0e93399e19/nitransforms-25.0.1-py3-none-any.whl - - pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6f223eaa76ec6df17c6725a2b2fd566ad8fe4db7 + - pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6586b42542f1c5c16b3999dd6c2d31cafdde6979 - pypi: https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/24/552ebea28f0570b9e65e62b50287a273804c9f997cc1c2dcd4e2d64b9e7d/nvidia_ml_py-12.575.51-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl @@ -1775,7 +1775,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/17/4f0c142525f655729e5710b2763d8306a64b78efaa4488eab5750f45d18d/robustica-0.1.4.tar.gz - - pypi: https://files.pythonhosted.org/packages/fb/d5/2a6cdfbcacdda4e48aad8d92da937c6771c99f43ec9b6e10c8906eb86e67/sdcflows-2.13.2-py3-none-any.whl + - pypi: git+https://github.com/nipreps/sdcflows.git?rev=main#d95377b9b94df3597c64a919912ae863f639e3c6 - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/bd/400b0bd372a5666addf2540c7358bfc3841b9ce5cdbc5cc4ad2f61627ad8/simplejson-3.20.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -2868,8 +2868,8 @@ packages: requires_python: '>=3.9' - pypi: ./ name: fmriprep - version: 25.2.0.dev152+g6a101c015.d20250926 - sha256: 6f6fe42fa6b76b0f4203f004adde722b30d49e084537d0d7e13593fc409942af + version: 25.2.0.dev162+gacd563a39.d20250926 + sha256: 14bc8886f6c27f5ddf8e7bccd60cb282a91cac70a2a265cd14e5fc7cf6fbbc19 requires_dist: - acres>=0.2.0 - apscheduler>=3.10 @@ -2887,7 +2887,7 @@ packages: - psutil>=5.4 - pybids>=0.16 - requests>=2.27 - - sdcflows>=2.13.1 + - sdcflows @ git+https://github.com/nipreps/sdcflows.git@main - smriprep @ git+https://github.com/nipreps/smriprep.git@master - tedana>=25.0.0 - templateflow>=24.2.2 @@ -2939,8 +2939,8 @@ packages: editable: true - pypi: ./ name: fmriprep - version: 25.2.0.dev152+g6a101c015.d20250926 - sha256: 6f6fe42fa6b76b0f4203f004adde722b30d49e084537d0d7e13593fc409942af + version: 25.2.0.dev162+gacd563a39.d20250926 + sha256: 14bc8886f6c27f5ddf8e7bccd60cb282a91cac70a2a265cd14e5fc7cf6fbbc19 requires_dist: - acres>=0.2.0 - apscheduler>=3.10 @@ -2958,7 +2958,7 @@ packages: - psutil>=5.4 - pybids>=0.16 - requests>=2.27 - - sdcflows>=2.13.1 + - sdcflows @ git+https://github.com/nipreps/sdcflows.git@main - smriprep @ git+https://github.com/nipreps/smriprep.git@master - tedana>=25.0.0 - templateflow>=24.2.2 @@ -5774,9 +5774,9 @@ packages: - nitransforms[test] ; extra == 'tests' - nitransforms[test] ; extra == 'all' requires_python: '>=3.10' -- pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6f223eaa76ec6df17c6725a2b2fd566ad8fe4db7 +- pypi: git+https://github.com/nipreps/niworkflows.git?rev=master#6586b42542f1c5c16b3999dd6c2d31cafdde6979 name: niworkflows - version: 1.15.0.dev12+g6f223eaa7 + version: 1.14.2 requires_dist: - acres - attrs>=20.1 @@ -6828,27 +6828,26 @@ packages: - pkg:pypi/scipy?source=hash-mapping size: 17064784 timestamp: 1739791925628 -- pypi: https://files.pythonhosted.org/packages/fb/d5/2a6cdfbcacdda4e48aad8d92da937c6771c99f43ec9b6e10c8906eb86e67/sdcflows-2.13.2-py3-none-any.whl +- pypi: git+https://github.com/nipreps/sdcflows.git?rev=main#d95377b9b94df3597c64a919912ae863f639e3c6 name: sdcflows - version: 2.13.2 - sha256: 5ca08e4266778301103d8b069fc245f64bcc4f5ea179af311eacbef457921abe + version: 25.0.0.dev1+gd95377b9b requires_dist: - - acres>=0.2.0 + - acres>=0.5.0 - attrs>=20.1.0 - migas>=0.4.0 - - nibabel>=3.0 - - nipype>=1.8.5 + - nibabel>=5.1.1 + - nipype>=1.9.0 - nireports>=25.0.1 - - nitransforms>=24.1.0 - - niworkflows>=1.11.0 - - numpy>=1.23 + - nitransforms>=25.0.1 + - niworkflows>=1.14.2 + - numpy>=2.0 - pybids>=0.16.4 - - scikit-image>=0.18 - - scipy>=1.8.1 + - scikit-image>=0.23 + - scipy>=1.10 - templateflow>=23.1 - toml>=0.10 - attrs>=20.1.0 ; extra == 'all' - - coverage[toml]>=5.2.1 ; extra == 'all' + - coverage[toml]>=7 ; extra == 'all' - furo ; extra == 'all' - importlib-resources ; extra == 'all' - ipykernel ; extra == 'all' @@ -6862,7 +6861,7 @@ packages: - pytest-cov>=2.11 ; extra == 'all' - pytest-env ; extra == 'all' - pytest-xdist>=2.5 ; extra == 'all' - - pytest>=6 ; extra == 'all' + - pytest>=8.1 ; extra == 'all' - ruff ; extra == 'all' - sphinx-argparse ; extra == 'all' - sphinx>=7.2.2 ; extra == 'all' @@ -6894,17 +6893,17 @@ packages: - sphinx>=7.2.2 ; extra == 'docs' - sphinxcontrib-apidoc ; extra == 'docs' - psutil ; extra == 'mem' - - coverage[toml]>=5.2.1 ; extra == 'test' + - coverage[toml]>=7 ; extra == 'test' - pytest-cov>=2.11 ; extra == 'test' - pytest-env ; extra == 'test' - pytest-xdist>=2.5 ; extra == 'test' - - pytest>=6 ; extra == 'test' - - coverage[toml]>=5.2.1 ; extra == 'tests' + - pytest>=8.1 ; extra == 'test' + - coverage[toml]>=7 ; extra == 'tests' - pytest-cov>=2.11 ; extra == 'tests' - pytest-env ; extra == 'tests' - pytest-xdist>=2.5 ; extra == 'tests' - - pytest>=6 ; extra == 'tests' - requires_python: '>=3.9' + - pytest>=8.1 ; extra == 'tests' + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl name: seaborn version: 0.13.2 diff --git a/pyproject.toml b/pyproject.toml index aee0a4da8..b51d934c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,7 @@ dependencies = [ "psutil >= 5.4", "pybids >= 0.16", "requests >= 2.27", - "sdcflows >= 2.13.1", + "sdcflows @ git+https://github.com/nipreps/sdcflows.git@main", "smriprep @ git+https://github.com/nipreps/smriprep.git@master", "tedana >= 25.0.0", "templateflow >= 24.2.2",