36
36
from niworkflows .nipype import logging
37
37
from niworkflows .nipype .utils .filemanip import split_filename
38
38
from niworkflows .nipype .pipeline import engine as pe
39
- from niworkflows .nipype .interfaces import ants , afni , c3 , fsl
39
+ from niworkflows .nipype .interfaces import ants , afni , fsl
40
40
from niworkflows .nipype .interfaces import utility as niu
41
41
from niworkflows .nipype .interfaces import freesurfer as fs
42
42
@@ -173,7 +173,7 @@ def init_func_preproc_wf(bold_file, ignore, freesurfer,
173
173
FreeSurfer SUBJECTS_DIR
174
174
subject_id
175
175
FreeSurfer subject ID
176
- fs_2_t1_transform
176
+ t1_2_fsnative_reverse_transform
177
177
Affine transform from FreeSurfer subject space to T1w space
178
178
179
179
@@ -245,7 +245,7 @@ def init_func_preproc_wf(bold_file, ignore, freesurfer,
245
245
inputnode = pe .Node (niu .IdentityInterface (
246
246
fields = ['bold_file' , 't1_preproc' , 't1_brain' , 't1_mask' , 't1_seg' , 't1_tpms' ,
247
247
't1_2_mni_forward_transform' , 't1_2_mni_reverse_transform' ,
248
- 'subjects_dir' , 'subject_id' , 'fs_2_t1_transform ' ]),
248
+ 'subjects_dir' , 'subject_id' , 't1_2_fsnative_reverse_transform ' ]),
249
249
name = 'inputnode' )
250
250
inputnode .inputs .bold_file = bold_file
251
251
@@ -320,16 +320,17 @@ def init_func_preproc_wf(bold_file, ignore, freesurfer,
320
320
(inputnode , bold_reference_wf , [('bold_file' , 'inputnode.bold_file' )]),
321
321
(bold_reference_wf , bold_hmc_wf , [
322
322
('outputnode.raw_ref_image' , 'inputnode.raw_ref_image' )]),
323
- (inputnode , bold_reg_wf , [('bold_file' , 'inputnode.name_source' ),
324
- ('t1_preproc' , 'inputnode.t1_preproc' ),
325
- ('t1_brain' , 'inputnode.t1_brain' ),
326
- ('t1_mask' , 'inputnode.t1_mask' ),
327
- ('t1_seg' , 'inputnode.t1_seg' ),
328
- # Undefined if --no-freesurfer, but this is safe
329
- ('subjects_dir' , 'inputnode.subjects_dir' ),
330
- ('subject_id' , 'inputnode.subject_id' ),
331
- ('fs_2_t1_transform' , 'inputnode.fs_2_t1_transform' )
332
- ]),
323
+ (inputnode , bold_reg_wf , [
324
+ ('bold_file' , 'inputnode.name_source' ),
325
+ ('t1_preproc' , 'inputnode.t1_preproc' ),
326
+ ('t1_brain' , 'inputnode.t1_brain' ),
327
+ ('t1_mask' , 'inputnode.t1_mask' ),
328
+ ('t1_seg' , 'inputnode.t1_seg' ),
329
+ # Undefined if --no-freesurfer, but this is safe
330
+ ('subjects_dir' , 'inputnode.subjects_dir' ),
331
+ ('subject_id' , 'inputnode.subject_id' ),
332
+ ('t1_2_fsnative_reverse_transform' , 'inputnode.t1_2_fsnative_reverse_transform' )
333
+ ]),
333
334
(inputnode , bold_confounds_wf , [('t1_tpms' , 'inputnode.t1_tpms' ),
334
335
('t1_mask' , 'inputnode.t1_mask' )]),
335
336
(bold_hmc_wf , bold_reg_wf , [('outputnode.bold_split' , 'inputnode.bold_split' ),
@@ -859,17 +860,13 @@ def init_bold_reg_wf(freesurfer, bold2t1w_dof, bold_file_size_gb, omp_nthreads,
859
860
FreeSurfer SUBJECTS_DIR
860
861
subject_id
861
862
FreeSurfer subject ID
862
- fs_2_t1_transform
863
+ t1_2_fsnative_reverse_transform
863
864
Affine transform from FreeSurfer subject space to T1w space
864
865
fieldwarp
865
866
a :abbr:`DFM (displacements field map)` in ITK format
866
867
867
868
Outputs
868
869
869
- mat_bold_to_t1
870
- Affine transform from ``ref_bold_brain`` to T1 space (FSL format)
871
- mat_t1_to_bold
872
- Affine transform from T1 space to BOLD space (FSL format)
873
870
itk_bold_to_t1
874
871
Affine transform from ``ref_bold_brain`` to T1 space (ITK format)
875
872
itk_t1_to_bold
@@ -878,25 +875,22 @@ def init_bold_reg_wf(freesurfer, bold2t1w_dof, bold_file_size_gb, omp_nthreads,
878
875
Motion-corrected BOLD series in T1 space
879
876
bold_mask_t1
880
877
BOLD mask in T1 space
881
- fs_reg_file
882
- Affine transform from ``ref_bold_brain`` to T1 space (FreeSurfer ``reg`` format)
883
878
out_report
884
879
Reportlet visualizing quality of registration
885
880
886
881
"""
887
882
workflow = pe .Workflow (name = name )
888
883
inputnode = pe .Node (
889
- niu .IdentityInterface (fields = [ 'name_source' , 'ref_bold_brain' , 'ref_bold_mask' ,
890
- 't1_preproc ' , 't1_brain ' , 't1_mask ' ,
891
- 't1_seg ' , 'bold_split ' , 'hmc_xforms ' ,
892
- 'subjects_dir ' , 'subject_id ' , 'fs_2_t1_transform ' ,
893
- 'fieldwarp' ]),
884
+ niu .IdentityInterface (
885
+ fields = [ 'name_source ' , 'ref_bold_brain ' , 'ref_bold_mask ' ,
886
+ 't1_preproc ' , 't1_brain ' , 't1_mask ' ,
887
+ 't1_seg ' , 'bold_split ' , 'hmc_xforms ' ,
888
+ 'subjects_dir' , 'subject_id' , 't1_2_fsnative_reverse_transform' , 'fieldwarp' ]),
894
889
name = 'inputnode'
895
890
)
896
891
outputnode = pe .Node (
897
- niu .IdentityInterface (fields = ['mat_bold_to_t1' , 'mat_t1_to_bold' ,
898
- 'itk_bold_to_t1' , 'itk_t1_to_bold' ,
899
- 'bold_t1' , 'bold_mask_t1' , 'fs_reg_file' ,
892
+ niu .IdentityInterface (fields = ['itk_bold_to_t1' , 'itk_t1_to_bold' ,
893
+ 'bold_t1' , 'bold_mask_t1' ,
900
894
'out_report' ]),
901
895
name = 'outputnode'
902
896
)
@@ -906,37 +900,17 @@ def init_bold_reg_wf(freesurfer, bold2t1w_dof, bold_file_size_gb, omp_nthreads,
906
900
else :
907
901
bbr_wf = init_fsl_bbr_wf (bold2t1w_dof , report = True )
908
902
909
- # make equivalent warp fields
910
- invt_bbr = pe .Node (fsl .ConvertXFM (invert_xfm = True ), name = 'invt_bbr' ,
911
- mem_gb = DEFAULT_MEMORY_MIN_GB )
912
-
913
- # BOLD to T1 transform matrix is from fsl, using c3 tools to convert to
914
- # something ANTs will like.
915
- fsl2itk_fwd = pe .Node (c3 .C3dAffineTool (fsl2ras = True , itk_transform = True ),
916
- name = 'fsl2itk_fwd' , mem_gb = DEFAULT_MEMORY_MIN_GB )
917
- fsl2itk_inv = pe .Node (c3 .C3dAffineTool (fsl2ras = True , itk_transform = True ),
918
- name = 'fsl2itk_inv' , mem_gb = DEFAULT_MEMORY_MIN_GB )
919
-
920
903
workflow .connect ([
921
- (inputnode , bbr_wf , [('ref_bold_brain' , 'inputnode.in_file' ),
922
- ('fs_2_t1_transform' , 'inputnode.fs_2_t1_transform' ),
923
- ('subjects_dir' , 'inputnode.subjects_dir' ),
924
- ('subject_id' , 'inputnode.subject_id' ),
925
- ('t1_seg' , 'inputnode.t1_seg' ),
926
- ('t1_brain' , 'inputnode.t1_brain' )]),
927
- (inputnode , fsl2itk_fwd , [('t1_preproc' , 'reference_file' ),
928
- ('ref_bold_brain' , 'source_file' )]),
929
- (inputnode , fsl2itk_inv , [('ref_bold_brain' , 'reference_file' ),
930
- ('t1_preproc' , 'source_file' )]),
931
- (bbr_wf , invt_bbr , [('outputnode.out_matrix_file' , 'in_file' )]),
932
- (bbr_wf , fsl2itk_fwd , [('outputnode.out_matrix_file' , 'transform_file' )]),
933
- (invt_bbr , fsl2itk_inv , [('out_file' , 'transform_file' )]),
934
- (bbr_wf , outputnode , [('outputnode.out_matrix_file' , 'mat_bold_to_t1' ),
935
- ('outputnode.out_reg_file' , 'fs_reg_file' ),
904
+ (inputnode , bbr_wf , [
905
+ ('ref_bold_brain' , 'inputnode.in_file' ),
906
+ ('t1_2_fsnative_reverse_transform' , 'inputnode.t1_2_fsnative_reverse_transform' ),
907
+ ('subjects_dir' , 'inputnode.subjects_dir' ),
908
+ ('subject_id' , 'inputnode.subject_id' ),
909
+ ('t1_seg' , 'inputnode.t1_seg' ),
910
+ ('t1_brain' , 'inputnode.t1_brain' )]),
911
+ (bbr_wf , outputnode , [('outputnode.itk_bold_to_t1' , 'itk_bold_to_t1' ),
912
+ ('outputnode.itk_t1_to_bold' , 'itk_t1_to_bold' ),
936
913
('outputnode.out_report' , 'out_report' )]),
937
- (invt_bbr , outputnode , [('out_file' , 'mat_t1_to_bold' )]),
938
- (fsl2itk_fwd , outputnode , [('itk_transform' , 'itk_bold_to_t1' )]),
939
- (fsl2itk_inv , outputnode , [('itk_transform' , 'itk_t1_to_bold' )]),
940
914
])
941
915
942
916
gen_ref = pe .Node (GenerateSamplingReference (), name = 'gen_ref' ,
@@ -952,7 +926,7 @@ def init_bold_reg_wf(freesurfer, bold2t1w_dof, bold_file_size_gb, omp_nthreads,
952
926
(inputnode , gen_ref , [('ref_bold_brain' , 'moving_image' ),
953
927
('t1_brain' , 'fixed_image' )]),
954
928
(gen_ref , mask_t1w_tfm , [('out_file' , 'reference_image' )]),
955
- (fsl2itk_fwd , mask_t1w_tfm , [('itk_transform ' , 'transforms' )]),
929
+ (bbr_wf , mask_t1w_tfm , [('outputnode.itk_bold_to_t1 ' , 'transforms' )]),
956
930
(inputnode , mask_t1w_tfm , [('ref_bold_mask' , 'input_image' )]),
957
931
(mask_t1w_tfm , outputnode , [('output_image' , 'bold_mask_t1' )])
958
932
])
@@ -977,7 +951,7 @@ def init_bold_reg_wf(freesurfer, bold2t1w_dof, bold_file_size_gb, omp_nthreads,
977
951
merge = pe .Node (Merge (compress = use_compression ), name = 'merge' , mem_gb = bold_file_size_gb * 3 )
978
952
979
953
workflow .connect ([
980
- (fsl2itk_fwd , merge_xforms , [('itk_transform ' , 'in1' )]),
954
+ (bbr_wf , merge_xforms , [('outputnode.itk_bold_to_t1 ' , 'in1' )]),
981
955
(merge_xforms , bold_to_t1w_transform , [('out' , 'transforms' )]),
982
956
(inputnode , merge , [('name_source' , 'header_source' )]),
983
957
(merge , outputnode , [('out_file' , 'bold_t1' )]),
0 commit comments