Skip to content

Commit 5e44d21

Browse files
authored
FIX: Write out Freesurfer-derived outputs (#3512)
Closes #3511. I don't think I accounted for the versions of aseg and aparcaseg that get written out to the func directory, and I haven't thought about precomputed derivatives at all. ## Changes proposed in this pull request - Add Freesurfer-related section from sMRIPrep's `init_anat_preproc_wf` to `init_single_subject_wf`
2 parents bef209a + 8cdb4ec commit 5e44d21

File tree

5 files changed

+68
-3
lines changed

5 files changed

+68
-3
lines changed

.circleci/ds005_fasttrack_outputs.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,23 @@ logs/CITATION.md
1010
logs/CITATION.tex
1111
sub-01
1212
sub-01/anat
13+
sub-01/anat/sub-01_desc-aparcaseg_dseg.nii.gz
14+
sub-01/anat/sub-01_desc-aseg_dseg.nii.gz
1315
sub-01/anat/sub-01_desc-ribbon_mask.json
1416
sub-01/anat/sub-01_desc-ribbon_mask.nii.gz
1517
sub-01/anat/sub-01_hemi-L_desc-cortex_mask.json
1618
sub-01/anat/sub-01_hemi-L_desc-cortex_mask.label.gii
19+
sub-01/anat/sub-01_hemi-L_desc-preproc_curv.shape.gii
20+
sub-01/anat/sub-01_hemi-L_desc-preproc_inflated.surf.gii
1721
sub-01/anat/sub-01_hemi-L_desc-preproc_sphere.surf.gii
1822
sub-01/anat/sub-01_hemi-L_desc-preproc_white.surf.gii
1923
sub-01/anat/sub-01_hemi-L_space-fsLR_desc-msmsulc_sphere.surf.gii
2024
sub-01/anat/sub-01_hemi-L_space-fsLR_desc-reg_sphere.surf.gii
2125
sub-01/anat/sub-01_hemi-L_space-fsaverage_desc-reg_sphere.surf.gii
2226
sub-01/anat/sub-01_hemi-R_desc-cortex_mask.json
2327
sub-01/anat/sub-01_hemi-R_desc-cortex_mask.label.gii
28+
sub-01/anat/sub-01_hemi-R_desc-preproc_curv.shape.gii
29+
sub-01/anat/sub-01_hemi-R_desc-preproc_inflated.surf.gii
2430
sub-01/anat/sub-01_hemi-R_desc-preproc_sphere.surf.gii
2531
sub-01/anat/sub-01_hemi-R_desc-preproc_white.surf.gii
2632
sub-01/anat/sub-01_hemi-R_space-fsLR_desc-msmsulc_sphere.surf.gii

.circleci/ds005_outputs.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ logs/CITATION.md
1010
logs/CITATION.tex
1111
sub-01
1212
sub-01/anat
13+
sub-01/anat/sub-01_desc-aparcaseg_dseg.nii.gz
14+
sub-01/anat/sub-01_desc-aseg_dseg.nii.gz
1315
sub-01/anat/sub-01_desc-brain_mask.json
1416
sub-01/anat/sub-01_desc-brain_mask.nii.gz
1517
sub-01/anat/sub-01_desc-preproc_T1w.json
@@ -21,8 +23,10 @@ sub-01/anat/sub-01_from-fsnative_to-T1w_mode-image_xfm.txt
2123
sub-01/anat/sub-01_from-MNI152NLin2009cAsym_to-T1w_mode-image_xfm.h5
2224
sub-01/anat/sub-01_from-T1w_to-fsnative_mode-image_xfm.txt
2325
sub-01/anat/sub-01_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5
26+
sub-01/anat/sub-01_hemi-L_curv.shape.gii
2427
sub-01/anat/sub-01_hemi-L_desc-cortex_mask.json
2528
sub-01/anat/sub-01_hemi-L_desc-cortex_mask.label.gii
29+
sub-01/anat/sub-01_hemi-L_inflated.surf.gii
2630
sub-01/anat/sub-01_hemi-L_midthickness.surf.gii
2731
sub-01/anat/sub-01_hemi-L_pial.surf.gii
2832
sub-01/anat/sub-01_hemi-L_space-fsLR_desc-msmsulc_sphere.surf.gii
@@ -32,8 +36,10 @@ sub-01/anat/sub-01_hemi-L_sphere.surf.gii
3236
sub-01/anat/sub-01_hemi-L_sulc.shape.gii
3337
sub-01/anat/sub-01_hemi-L_thickness.shape.gii
3438
sub-01/anat/sub-01_hemi-L_white.surf.gii
39+
sub-01/anat/sub-01_hemi-R_curv.shape.gii
3540
sub-01/anat/sub-01_hemi-R_desc-cortex_mask.json
3641
sub-01/anat/sub-01_hemi-R_desc-cortex_mask.label.gii
42+
sub-01/anat/sub-01_hemi-R_inflated.surf.gii
3743
sub-01/anat/sub-01_hemi-R_midthickness.surf.gii
3844
sub-01/anat/sub-01_hemi-R_pial.surf.gii
3945
sub-01/anat/sub-01_hemi-R_space-fsLR_desc-msmsulc_sphere.surf.gii

.circleci/ds005_partial_fasttrack_outputs.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@ logs/CITATION.md
1010
logs/CITATION.tex
1111
sub-01
1212
sub-01/anat
13+
sub-01/anat/sub-01_desc-aparcaseg_dseg.nii.gz
14+
sub-01/anat/sub-01_desc-aseg_dseg.nii.gz
1315
sub-01/anat/sub-01_desc-ribbon_mask.json
1416
sub-01/anat/sub-01_desc-ribbon_mask.nii.gz
1517
sub-01/anat/sub-01_hemi-L_desc-cortex_mask.json
1618
sub-01/anat/sub-01_hemi-L_desc-cortex_mask.label.gii
19+
sub-01/anat/sub-01_hemi-L_desc-preproc_curv.shape.gii
20+
sub-01/anat/sub-01_hemi-L_desc-preproc_inflated.surf.gii
1721
sub-01/anat/sub-01_hemi-L_desc-preproc_sphere.surf.gii
1822
sub-01/anat/sub-01_hemi-L_desc-preproc_white.surf.gii
1923
sub-01/anat/sub-01_hemi-L_space-fsLR_den-32k_desc-preproc_midthickness.surf.gii
@@ -24,6 +28,8 @@ sub-01/anat/sub-01_hemi-L_space-fsLR_desc-reg_sphere.surf.gii
2428
sub-01/anat/sub-01_hemi-L_space-fsaverage_desc-reg_sphere.surf.gii
2529
sub-01/anat/sub-01_hemi-R_desc-cortex_mask.json
2630
sub-01/anat/sub-01_hemi-R_desc-cortex_mask.label.gii
31+
sub-01/anat/sub-01_hemi-R_desc-preproc_curv.shape.gii
32+
sub-01/anat/sub-01_hemi-R_desc-preproc_inflated.surf.gii
2733
sub-01/anat/sub-01_hemi-R_desc-preproc_sphere.surf.gii
2834
sub-01/anat/sub-01_hemi-R_desc-preproc_white.surf.gii
2935
sub-01/anat/sub-01_hemi-R_space-fsLR_den-32k_desc-preproc_midthickness.surf.gii

.circleci/ds005_partial_outputs.txt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ logs/CITATION.md
1010
logs/CITATION.tex
1111
sub-01
1212
sub-01/anat
13+
sub-01/anat/sub-01_desc-aparcaseg_dseg.nii.gz
14+
sub-01/anat/sub-01_desc-aseg_dseg.nii.gz
1315
sub-01/anat/sub-01_desc-brain_mask.json
1416
sub-01/anat/sub-01_desc-brain_mask.nii.gz
1517
sub-01/anat/sub-01_desc-preproc_T1w.json
@@ -23,8 +25,10 @@ sub-01/anat/sub-01_from-MNI152NLin6Asym_to-T1w_mode-image_xfm.h5
2325
sub-01/anat/sub-01_from-T1w_to-fsnative_mode-image_xfm.txt
2426
sub-01/anat/sub-01_from-T1w_to-MNI152NLin2009cAsym_mode-image_xfm.h5
2527
sub-01/anat/sub-01_from-T1w_to-MNI152NLin6Asym_mode-image_xfm.h5
28+
sub-01/anat/sub-01_hemi-L_curv.shape.gii
2629
sub-01/anat/sub-01_hemi-L_desc-cortex_mask.json
2730
sub-01/anat/sub-01_hemi-L_desc-cortex_mask.label.gii
31+
sub-01/anat/sub-01_hemi-L_inflated.surf.gii
2832
sub-01/anat/sub-01_hemi-L_midthickness.surf.gii
2933
sub-01/anat/sub-01_hemi-L_pial.surf.gii
3034
sub-01/anat/sub-01_hemi-L_space-fsLR_den-32k_midthickness.surf.gii
@@ -37,8 +41,10 @@ sub-01/anat/sub-01_hemi-L_sphere.surf.gii
3741
sub-01/anat/sub-01_hemi-L_sulc.shape.gii
3842
sub-01/anat/sub-01_hemi-L_thickness.shape.gii
3943
sub-01/anat/sub-01_hemi-L_white.surf.gii
40-
sub-01/anat/sub-01_hemi-L_desc-cortex_mask.json
41-
sub-01/anat/sub-01_hemi-L_desc-cortex_mask.label.gii
44+
sub-01/anat/sub-01_hemi-R_curv.shape.gii
45+
sub-01/anat/sub-01_hemi-R_desc-cortex_mask.json
46+
sub-01/anat/sub-01_hemi-R_desc-cortex_mask.label.gii
47+
sub-01/anat/sub-01_hemi-R_inflated.surf.gii
4248
sub-01/anat/sub-01_hemi-R_midthickness.surf.gii
4349
sub-01/anat/sub-01_hemi-R_pial.surf.gii
4450
sub-01/anat/sub-01_hemi-R_space-fsLR_den-32k_midthickness.surf.gii

fmriprep/workflows/base.py

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ def init_single_subject_wf(subject_id: str):
214214
if 't2w' in config.workflow.ignore:
215215
subject_data['t2w'] = []
216216

217+
freesurfer = config.workflow.run_reconall
217218
anat_only = config.workflow.anat_only
218219
# Make sure we always go through these two checks
219220
if not anat_only and not subject_data['bold']:
@@ -319,7 +320,7 @@ def init_single_subject_wf(subject_id: str):
319320
anat_fit_wf = init_anat_fit_wf(
320321
bids_root=bids_root,
321322
output_dir=fmriprep_dir,
322-
freesurfer=config.workflow.run_reconall,
323+
freesurfer=freesurfer,
323324
hires=config.workflow.hires,
324325
fs_no_resume=config.workflow.fs_no_resume,
325326
longitudinal=config.workflow.longitudinal,
@@ -419,6 +420,46 @@ def init_single_subject_wf(subject_id: str):
419420
]),
420421
]) # fmt:skip
421422

423+
if freesurfer:
424+
from smriprep.workflows.outputs import init_ds_fs_segs_wf, init_ds_surface_metrics_wf
425+
from smriprep.workflows.surfaces import init_surface_derivatives_wf
426+
427+
ds_fs_segs_wf = init_ds_fs_segs_wf(bids_root=bids_root, output_dir=fmriprep_dir)
428+
surface_derivatives_wf = init_surface_derivatives_wf()
429+
ds_surfaces_wf = init_ds_surfaces_wf(output_dir=fmriprep_dir, surfaces=['inflated'])
430+
ds_curv_wf = init_ds_surface_metrics_wf(
431+
bids_root=bids_root,
432+
output_dir=fmriprep_dir,
433+
metrics=['curv'],
434+
name='ds_curv_wf',
435+
)
436+
437+
workflow.connect([
438+
(anat_fit_wf, surface_derivatives_wf, [
439+
('outputnode.t1w_preproc', 'inputnode.reference'),
440+
('outputnode.subjects_dir', 'inputnode.subjects_dir'),
441+
('outputnode.subject_id', 'inputnode.subject_id'),
442+
('outputnode.fsnative2t1w_xfm', 'inputnode.fsnative2anat_xfm'),
443+
]),
444+
(anat_fit_wf, ds_surfaces_wf, [
445+
('outputnode.t1w_valid_list', 'inputnode.source_files'),
446+
]),
447+
(surface_derivatives_wf, ds_surfaces_wf, [
448+
('outputnode.inflated', 'inputnode.inflated'),
449+
]),
450+
(anat_fit_wf, ds_curv_wf, [
451+
('outputnode.t1w_valid_list', 'inputnode.source_files'),
452+
]),
453+
(surface_derivatives_wf, ds_curv_wf, [('outputnode.curv', 'inputnode.curv')]),
454+
(anat_fit_wf, ds_fs_segs_wf, [
455+
('outputnode.t1w_valid_list', 'inputnode.source_files'),
456+
]),
457+
(surface_derivatives_wf, ds_fs_segs_wf, [
458+
('outputnode.out_aseg', 'inputnode.anat_fs_aseg'),
459+
('outputnode.out_aparc', 'inputnode.anat_fs_aparc'),
460+
]),
461+
]) # fmt:skip
462+
422463
# Thread MNI152NLin6Asym standard outputs to CIFTI subworkflow, skipping
423464
# the iterator, which targets only output spaces.
424465
# This can lead to duplication in the working directory if people actually

0 commit comments

Comments
 (0)