@@ -280,6 +280,7 @@ def init_bold_wf(
280
280
spaces = config .workflow .spaces
281
281
nonstd_spaces = set (spaces .get_nonstandard ())
282
282
freesurfer_spaces = spaces .get_fs_spaces ()
283
+ surf_std = [x for x in spaces .get_standard (dim = (2 ,)) if x .space != 'fsaverage' ]
283
284
284
285
#
285
286
# Resampling outputs workflow:
@@ -537,103 +538,6 @@ def init_bold_wf(
537
538
]),
538
539
]) # fmt:skip
539
540
540
- surf_std = spaces .get_standard (dim = (2 ,))
541
- if surf_std and config .workflow .run_reconall and config .workflow .cifti_output :
542
- workflow .__postdesc__ += """\
543
- Non-gridded (surface) resamplings were performed using the Connectome
544
- Workbench.
545
- """
546
- config .loggers .workflow .debug ('Creating BOLD surface workbench resampling workflow.' )
547
- from smriprep .workflows .surfaces import init_resample_surfaces_wf
548
-
549
- from .resampling import (
550
- init_wb_surf_surf_wf ,
551
- init_wb_vol_surf_wf ,
552
- )
553
-
554
- wb_vol_surf_wf = init_wb_vol_surf_wf (
555
- omp_nthreads = omp_nthreads ,
556
- mem_gb = mem_gb ['resampled' ],
557
- dilate = True ,
558
- )
559
- workflow .connect ([
560
- (inputnode , wb_vol_surf_wf ,[
561
- ('white' , 'inputnode.white' ),
562
- ('pial' , 'inputnode.pial' ),
563
- ('midthickness' , 'inputnode.midthickness' ),
564
- ]),
565
- (bold_anat_wf , wb_vol_surf_wf , [
566
- ('outputnode.bold_file' , 'inputnode.bold_file' ),
567
- ]),
568
- ]) # fmt:skip
569
-
570
- if config .workflow .project_goodvoxels :
571
- workflow .connect ([
572
- (goodvoxels_bold_mask_wf , wb_vol_surf_wf , [
573
- ('outputnode.goodvoxels_mask' , 'inputnode.volume_roi' ),
574
- ]),
575
- ]) # fmt:skip
576
-
577
- for ref_ in surf_std :
578
- template = ref_ .space
579
- density = ref_ .spec .get ('density' ) or ref_ .spec .get ('den' ) or None
580
- if density is None :
581
- config .loggers .warning (f'Cannot resample { ref_ } without density specified.' )
582
- continue
583
-
584
- resample_surfaces_wb_wf = init_resample_surfaces_wf (
585
- name = f'resample_surfaces_wb_wf_{ template } _{ density } ' ,
586
- surfaces = ['midthickness' ],
587
- template = template ,
588
- density = density ,
589
- )
590
-
591
- wb_surf_surf_wf = init_wb_surf_surf_wf (
592
- template = template ,
593
- density = density ,
594
- omp_nthreads = omp_nthreads ,
595
- mem_gb = mem_gb ['resampled' ],
596
- )
597
-
598
- ds_bold_surf_wb = pe .Node (
599
- DerivativesDataSink (
600
- base_directory = fmriprep_dir ,
601
- hemi = ['L' , 'R' ],
602
- dismiss_entities = dismiss_echo (),
603
- space = template ,
604
- density = density ,
605
- suffix = 'bold' ,
606
- TaskName = all_metadata [0 ].get ('TaskName' ),
607
- extension = '.func.gii' ,
608
- ** prepare_timing_parameters (all_metadata [0 ]),
609
- ),
610
- iterfield = ('in_file' , 'hemi' ),
611
- name = f'ds_bold_surf_wb_{ template } _{ density } ' ,
612
- run_without_submitting = True ,
613
- )
614
- ds_bold_surf_wb .inputs .source_file = bold_file
615
-
616
- workflow .connect ([
617
- (inputnode , resample_surfaces_wb_wf , [
618
- ('midthickness' , 'inputnode.midthickness' ),
619
- ('sphere_reg_fsLR' , 'inputnode.sphere_reg_fsLR' ),
620
- ]),
621
- (wb_vol_surf_wf , wb_surf_surf_wf , [
622
- ('outputnode.bold_fsnative' , 'inputnode.bold_fsnative' ),
623
- ]),
624
- (inputnode , wb_surf_surf_wf , [
625
- ('midthickness' , 'inputnode.midthickness' ),
626
- ('sphere_reg_fsLR' , 'inputnode.sphere_reg_fsLR' ),
627
- ]),
628
- (resample_surfaces_wb_wf , wb_surf_surf_wf , [
629
- ('outputnode.midthickness' , 'inputnode.midthickness_resampled' ),
630
- ]),
631
- (wb_surf_surf_wf , ds_bold_surf_wb , [
632
- ('outputnode.bold_resampled' , 'in_file' ),
633
- # TODO: json metadata?
634
- ]),
635
- ]) # fmt:skip
636
-
637
541
if config .workflow .run_reconall and freesurfer_spaces :
638
542
workflow .__postdesc__ += """\
639
543
Non-gridded (surface) resamplings were performed using `mri_vol2surf`
@@ -770,6 +674,104 @@ def init_bold_wf(
770
674
]),
771
675
]) # fmt:skip
772
676
677
+ if surf_std :
678
+ from smriprep .workflows .surfaces import init_resample_surfaces_wf
679
+
680
+ from .resampling import (
681
+ init_wb_surf_surf_wf ,
682
+ init_wb_vol_surf_wf ,
683
+ )
684
+ workflow .__postdesc__ += (
685
+ 'Non-gridded (surface) resamplings were performed using the Connectome Workbench.'
686
+ )
687
+ config .loggers .workflow .debug ('Creating BOLD surface workbench resampling workflow.' )
688
+
689
+ wb_vol_surf_wf = init_wb_vol_surf_wf (
690
+ omp_nthreads = omp_nthreads ,
691
+ mem_gb = mem_gb ['resampled' ],
692
+ dilate = True ,
693
+ )
694
+ workflow .connect ([
695
+ (inputnode , wb_vol_surf_wf ,[
696
+ ('white' , 'inputnode.white' ),
697
+ ('pial' , 'inputnode.pial' ),
698
+ ('midthickness' , 'inputnode.midthickness' ),
699
+ ]),
700
+ (bold_anat_wf , wb_vol_surf_wf , [
701
+ ('outputnode.bold_file' , 'inputnode.bold_file' ),
702
+ ]),
703
+ ]) # fmt:skip
704
+
705
+ if config .workflow .project_goodvoxels :
706
+ workflow .connect ([
707
+ (goodvoxels_bold_mask_wf , wb_vol_surf_wf , [
708
+ ('outputnode.goodvoxels_mask' , 'inputnode.volume_roi' ),
709
+ ]),
710
+ ]) # fmt:skip
711
+
712
+ for ref_ in surf_std :
713
+ template = ref_ .space
714
+ density = ref_ .spec .get ('density' ) or ref_ .spec .get ('den' ) or None
715
+ if density is None :
716
+ config .loggers .warning (f'Cannot resample { ref_ } without density specified.' )
717
+ continue
718
+
719
+ resample_surfaces_wf = init_resample_surfaces_wf (
720
+ name = f'resample_surfaces_wf_{ template } _{ density } ' ,
721
+ surfaces = ['midthickness' ],
722
+ template = template ,
723
+ density = density ,
724
+ )
725
+
726
+ wb_surf_surf_wf = init_wb_surf_surf_wf (
727
+ template = template ,
728
+ density = density ,
729
+ omp_nthreads = omp_nthreads ,
730
+ mem_gb = mem_gb ['resampled' ],
731
+ )
732
+
733
+ ds_bold_surf_wb = pe .Node (
734
+ DerivativesDataSink (
735
+ base_directory = fmriprep_dir ,
736
+ hemi = ['L' , 'R' ],
737
+ dismiss_entities = dismiss_echo (),
738
+ space = template ,
739
+ density = density ,
740
+ suffix = 'bold' ,
741
+ TaskName = all_metadata [0 ].get ('TaskName' ),
742
+ extension = '.func.gii' ,
743
+ ** prepare_timing_parameters (all_metadata [0 ]),
744
+ ),
745
+ iterfield = ('in_file' , 'hemi' ),
746
+ name = f'ds_bold_surf_wb_{ template } _{ density } ' ,
747
+ run_without_submitting = True ,
748
+ )
749
+ ds_bold_surf_wb .inputs .source_file = bold_file
750
+
751
+ workflow .connect ([
752
+ (inputnode , resample_surfaces_wf , [
753
+ ('midthickness' , 'inputnode.midthickness' ),
754
+ ('sphere_reg_fsLR' , 'inputnode.sphere_reg_fsLR' ),
755
+ ]),
756
+ (wb_vol_surf_wf , wb_surf_surf_wf , [
757
+ ('outputnode.bold_fsnative' , 'inputnode.bold_fsnative' ),
758
+ ]),
759
+ (inputnode , wb_surf_surf_wf , [
760
+ ('midthickness' , 'inputnode.midthickness' ),
761
+ ('sphere_reg_fsLR' , 'inputnode.sphere_reg_fsLR' ),
762
+ ]),
763
+ (resample_surfaces_wf , wb_surf_surf_wf , [
764
+ (
765
+ f'outputnode.midthickness_{ template } ' ,
766
+ 'inputnode.midthickness_resampled'
767
+ ),
768
+ ]),
769
+ (wb_surf_surf_wf , ds_bold_surf_wb , [
770
+ ('outputnode.bold_resampled' , 'in_file' ),
771
+ # TODO: json metadata?
772
+ ]),
773
+ ]) # fmt:skip
774
+
773
775
bold_confounds_wf = init_bold_confs_wf (
774
776
mem_gb = mem_gb ['largemem' ],
775
777
metadata = all_metadata [0 ],
0 commit comments