@@ -493,79 +493,6 @@ def checkenv(exitonfail=False):
493
493
else :
494
494
print ("Warning: " + msg )
495
495
496
- def center_volume (in_file ):
497
- import SimpleITK as sitk
498
- import os
499
- img = sitk .ReadImage (in_file )
500
- size = img .GetSize ()
501
- origin = img .GetOrigin ()
502
- new_origin = [0 ,0 ,0 ]
503
- for i , xx in enumerate (origin ):
504
- new_origin [i ] = float (size [i ])/ 2
505
- if xx < 0 :
506
- new_origin [i ] = - new_origin [i ]
507
- img .SetOrigin (new_origin )
508
- out_file = os .path .abspath (os .path .basename (in_file ))
509
- sitk .WriteImage (img , out_file )
510
- return out_file
511
-
512
-
513
- def recodeLabelMap (in_file , out_file , recode_file ):
514
- """This function has been adapted from BRAINSTools and serves
515
- as a means to recode a label map based upon an input csv
516
- file."""
517
- import SimpleITK as sitk
518
- import os
519
- import csv
520
- import sys
521
-
522
- # Convert csv to RECODE_TABLE
523
- CSVFile = open (recode_file , 'rb' )
524
- reader = csv .reader (CSVFile )
525
- header = reader .next ()
526
- n_cols = len (header )
527
- if n_cols == 4 :
528
- # ignore label names
529
- label_keys = (0 , 2 )
530
- elif n_cols == 2 :
531
- # no label names present
532
- label_keys = (0 , 1 )
533
- else :
534
- # csv does not match format requirements
535
- print ("ERROR: input csv file for label recoding does meet requirements" )
536
- sys .exit ()
537
-
538
- # read csv file
539
- RECODE_TABLE = list ()
540
- for line in reader :
541
- RECODE_TABLE .append ((int (line [label_keys [0 ]]), int (line [label_keys [1 ]])))
542
-
543
- def minimizeSizeOfImage (outlabels ):
544
- """This function will find the largest integer value in the labelmap, and
545
- cast the image to the smallest possible integer size so that no loss of data
546
- results."""
547
- measureFilt = sitk .StatisticsImageFilter ()
548
- measureFilt .Execute (outlabels )
549
- imgMin = measureFilt .GetMinimum ()
550
- imgMax = measureFilt .GetMaximum ()
551
- if imgMax < (2 ** 8 )- 1 :
552
- outlabels = sitk .Cast ( outlabels , sitk .sitkUInt8 )
553
- elif imgMax < (2 ** 16 )- 1 :
554
- outlabels = sitk .Cast ( outlabels , sitk .sitkUInt16 )
555
- elif imgMax < (2 ** 32 )- 1 :
556
- outlabels = sitk .Cast ( outlabels , sitk .sitkUInt32 )
557
- elif imgMax < (2 ** 64 )- 1 :
558
- outlabels = sitk .Cast ( outlabels , sitk .sitkUInt64 )
559
- return outlabels
560
-
561
- LabelImage = sitk .Cast (sitk .ReadImage (in_file ), sitk .sitkUInt32 )
562
- for (old , new ) in RECODE_TABLE :
563
- LabelImage = sitk .Cast ((LabelImage == old ), sitk .sitkUInt32 )* (new - old )+ LabelImage
564
- LabelImage = minimizeSizeOfImage (LabelImage )
565
- out_file = os .path .abspath (out_file )
566
- sitk .WriteImage (LabelImage , out_file )
567
- return out_file
568
-
569
496
570
497
def create_recoding_wf (in_file , out_file = None ):
571
498
wf = nipype .Workflow (name = "RecodeLabels" )
@@ -729,139 +656,3 @@ def createsrcsubj(source_directory):
729
656
rh_entorhinal_exvivo_thresh = 'label/rh.entorhinal_exvivo.thresh.label' ,
730
657
rh_perirhinal_exvivo_thresh = 'label/rh.perirhinal_exvivo.thresh.label' )
731
658
return datasource , outfields
732
-
733
- def source_long_files_workflow (name = "Source_Longitudinal_Files" ):
734
- """Creates a workflow to source the longitudinal files from a freesurfer directory.
735
- This should only be used when the files are not in a prexisting workflow"""
736
-
737
- wf = Workflow (name = name )
738
-
739
- inputspec = Node (IdentityInterface (fields = ['subject_id' ,
740
- 'subjects_dir' ,
741
- 'timepoints' ]),
742
- name = "inputspec" )
743
-
744
- # TODO: Create outputspec
745
-
746
- # grab files from the initial single session run
747
- grab_inittp_files = pe .Node (nio .DataGrabber (), name = "Grab_Initial_Files" ,
748
- infields = ['subject_id' ],
749
- outfileds = ['inputvols' , 'iscales' , 'ltas' ])
750
- grab_inittp_files .inputs .template = '*'
751
- grab_inittp_files .inputs .base_directory = config ['subjects_dir' ]
752
- grab_inittp_files .inputs .field_template = dict (inputvols = '%s/mri/orig/0*.mgz' ,
753
- iscales = '%s/mri/orig/0*-iscale.txt' ,
754
- ltas = '%s/mri/orig/0*.lta' )
755
-
756
- grab_inittp_files .inputs .template_args = dict (inputvols = [['subject_id' ]],
757
- iscales = [['subject_id' ]],
758
- ltas = [['subject_id' ]])
759
-
760
- wf .connect ([(grab_inittp_files , outputspec , [('inputvols' , 'inputspec.in_T1s' ),
761
- ('iscales' , 'inputspec.iscales' ),
762
- ('ltas' , 'inputspec.ltas' )])])
763
-
764
- merge_norms = pe .Node (Merge (len (config ['timepoints' ])), name = "Merge_Norms" )
765
- merge_segs = pe .Node (Merge (len (config ['timepoints' ])), name = "Merge_Segmentations" )
766
- merge_segs_noCC = pe .Node (Merge (len (config ['timepoints' ])), name = "Merge_Segmentations_noCC" )
767
- merge_template_ltas = pe .Node (Merge (len (config ['timepoints' ])), name = "Merge_Template_ltas" )
768
-
769
- for i , tp in enumerate (config ['timepoints' ]):
770
- # datasource timepoint files
771
- tp_data_source = pe .Node (FreeSurferSource (), name = "{0}_DataSource" .format (tp ))
772
- tp_data_source .inputs .subject_id = tp
773
- tp_data_source .inputs .subjects_dir = config ['subjects_dir' ]
774
-
775
- tp_data_grabber = pe .Node (nio .DataGrabber (), name = "{0}_DataGrabber" .format (tp ),
776
- infields = ['tp' , 'long_tempate' ],
777
- outfileds = ['subj_to_template_lta' , 'seg_noCC' , 'seg_presurf' ])
778
- tp_data_grabber .inputs .template = '*'
779
- tp_data_grabber .inputs .base_directory = config ['subjects_dir' ]
780
- tp_data_grabber .inputs .field_template = dict (
781
- subj_to_template_lta = '%s/mri/transforms/%s_to_%s.lta' ,
782
- seg_noCC = '%s/mri/aseg.auto_noCCseg.mgz' ,
783
- seg_presurf = '%s/mri/aseg.presurf.mgz' ,)
784
-
785
- tp_data_grabber .inputs .template_args = dict (
786
- subj_to_template_lta = [['long_template' , 'tp' , 'long_template' ]],
787
- seg_noCC = [['tp' ]],
788
- seg_presurf = [['tp' ]])
789
-
790
- wf .connect ([(tp_data_source , merge_norms , [('norm' ,
791
- 'in{0}' .format (i ))]),
792
- (tp_data_grabber , merge_segs , [('seg_presurf' ,
793
- 'in{0}' .format (i ))]),
794
- (tp_data_grabber , merge_segs_noCC , [('seg_noCC' ,
795
- 'in{0}' .format (i ))]),
796
- (tp_data_grabber , merge_template_ltas , [('subj_to_template_lta' ,
797
- 'in{0}' .format (i ))])])
798
-
799
- if tp == config ['subject_id' ]:
800
- wf .connect ([(tp_data_source , outputspec , [('wm' , 'inputspec.init_wm' )]),
801
- (tp_data_grabber , outputspec , [('subj_to_template_lta' ,
802
- 'inputspec.subj_to_template_lta' )]),
803
- (tp_data_grabber , outputspec , [('subj_to_template_lta' ,
804
- 'inputspec.subj_to_template_lta' )])])
805
-
806
- wf .connect ([(merge_norms , outputspec , [('out' , 'inputspec.alltps_norms' )]),
807
- (merge_segs , outputspec , [('out' , 'inputspec.alltps_segs' )]),
808
- (merge_template_ltas , outputspec , [('out' , 'inputspec.alltps_to_template_ltas' )]),
809
- (merge_segs_noCC , outputspec , [('out' , 'inputspec.alltps_segs_noCC' )])])
810
-
811
-
812
-
813
- # datasource files from the template run
814
- ds_template_files = pe .Node (FreeSurferSource (), name = "Datasource_Template_Files" )
815
- ds_template_files .inputs .subject_id = config ['subject_id' ]
816
- ds_template_files .inputs .subjects_dir = config ['subjects_dir' ]
817
-
818
- wf .connect ([(ds_template_files , ar1_wf , [('brainmask' , 'inputspec.template_brainmask' )]),
819
- (ds_template_files , outputspec , [('aseg' , 'inputspec.template_aseg' )])])
820
-
821
- # grab files from template run
822
- grab_template_files = pe .Node (nio .DataGrabber (), name = "Grab_Template_Files" ,
823
- infields = ['subject_id' , 'long_template' ],
824
- outfields = ['template_talairach_xfm' ,
825
- 'template_talairach_lta' ,
826
- 'template_talairach_m3z' ,
827
- 'template_label_intensities' ,
828
- 'template_lh_white' ,
829
- 'template_rh_white' ,
830
- 'template_lh_pial' ,
831
- 'template_rh_pial' ])
832
- grab_template_files .inputs .template = '*'
833
- grab_template_files .inputs .base_directory = config ['subjects_dir' ]
834
- grab_template_files .inputs .subject_id = config ['subject_id' ]
835
- grab_template_files .inputs .long_template = config ['long_template' ]
836
- grab_template_files .inputs .field_template = dict (
837
- template_talairach_xfm = '%s/mri/transfroms/talairach.xfm' ,
838
- template_talairach_lta = '%s/mri/transfroms/talairach.lta' ,
839
- template_talairach_m3z = '%s/mri/transfroms/talairach.m3z' ,
840
- template_label_intensities = '%s/mri/aseg.auto_noCCseg.label_intensities.txt' ,
841
- template_lh_white = '%s/surf/lh.white' ,
842
- template_rh_white = '%s/surf/rh.white' ,
843
- template_lh_pial = '%s/surf/lh.pial' ,
844
- template_rh_pial = '%s/surf/rh.pial' )
845
-
846
- grab_template_files .inputs .template_args = dict (
847
- template_talairach_xfm = [['long_template' ]],
848
- template_talairach_lta = [['long_template' ]],
849
- template_talairach_m3z = [['long_template' ]],
850
- template_lh_white = [['long_template' ]],
851
- template_rh_white = [['long_template' ]],
852
- template_lh_pial = [['long_template' ]],
853
- template_rh_pial = [['long_template' ]])
854
- wf .connect ([(grab_template_files , outputspec , [('template_talairach_xfm' ,
855
- 'inputspec.template_talairach_xfm' ),
856
- ('template_talairach_lta' ,
857
- 'inputspec.template_talairach_lta' ),
858
- ('template_talairach_m3z' ,
859
- 'inputspec.template_talairach_m3z' ),
860
- ('template_label_intensities' ,
861
- 'inputspec.template_label_intensities' ),
862
- ('template_lh_white' , 'inputspec.template_lh_white' ),
863
- ('template_rh_white' , 'inputspec.template_rh_white' ),
864
- ('template_lh_pial' , 'inputspec.template_lh_pial' ),
865
- ('template_rh_pial' , 'inputspec.template_rh_pial' )])
866
- ])
867
- return wf
0 commit comments