def create_workflow(wf_base_dir, input_anat, oasis_path): ''' Method to create the nipype workflow that is executed for preprocessing the data Parameters ---------- wf_base_dir : string filepath to the base directory to run the workflow input_anat : string filepath to the input file to run antsCorticalThickness.sh on oasis_path : string filepath to the oasis Returns ------- wf : nipype.pipeline.engine.Workflow instance the workflow to be ran for preprocessing ''' # Import packages from act_interface import antsCorticalThickness import nipype.interfaces.io as nio import nipype.pipeline.engine as pe import nipype.interfaces.utility as util from nipype.interfaces.utility import Function from nipype import logging as np_logging from nipype import config import os # Init variables oasis_trt_20 = os.path.join(oasis_path, 'OASIS-TRT-20_jointfusion_DKT31_CMA_labels_in_OASIS-30.nii') # Setup nipype workflow if not os.path.exists(wf_base_dir): os.makedirs(wf_base_dir) wf = pe.Workflow(name='thickness_workflow') wf.base_dir = wf_base_dir # Init log directory log_dir = wf_base_dir # Define antsCorticalThickness node thickness = pe.Node(antsCorticalThickness(), name='thickness') # Set antsCorticalThickness inputs thickness.inputs.dimension = 3 thickness.inputs.segmentation_iterations = 1 thickness.inputs.segmentation_weight = 0.25 thickness.inputs.input_skull = input_anat #-a thickness.inputs.template = oasis_path + 'T_template0.nii.gz' #-e thickness.inputs.brain_prob_mask = oasis_path + \ 'T_template0_BrainCerebellumProbabilityMask.nii.gz' #-m thickness.inputs.brain_seg_priors = oasis_path + \ 'Priors2/priors%d.nii.gz' #-p thickness.inputs.intensity_template = oasis_path + \ 'T_template0_BrainCerebellum.nii.gz' #-t thickness.inputs.extraction_registration_mask = oasis_path + \ 'T_template0_BrainCerebellumExtractionMask.nii.gz' #-f thickness.inputs.out_prefix = 'OUTPUT_' #-o thickness.inputs.keep_intermediate_files = 0 #-k # Node to run ANTs 3dROIStats ROIstats = pe.Node(util.Function(input_names=['mask','thickness_normd'], output_names=['roi_stats_file'], function=roi_func), name='ROIstats') wf.connect(thickness, 'cortical_thickness_normalized', ROIstats, 'thickness_normd') ROIstats.inputs.mask = oasis_trt_20 # Create datasink node datasink = pe.Node(nio.DataSink(), name='sinker') datasink.inputs.base_directory = wf_base_dir # Connect thickness outputs to datasink wf.connect(thickness, 'brain_extraction_mask', datasink, 'output.@brain_extr_mask') wf.connect(thickness, 'brain_segmentation', datasink, 'output.@brain_seg') wf.connect(thickness, 'brain_segmentation_N4', datasink, 'output.@brain_seg_N4') wf.connect(thickness, 'brain_segmentation_posteriors_1', datasink, 'output.@brain_seg_post_1') wf.connect(thickness, 'brain_segmentation_posteriors_2', datasink, 'output.@brain_seg_post_2') wf.connect(thickness, 'brain_segmentation_posteriors_3', datasink, 'output.@brain_seg_post_3') wf.connect(thickness, 'brain_segmentation_posteriors_4', datasink, 'output.@brain_seg_post_4') wf.connect(thickness, 'brain_segmentation_posteriors_5', datasink, 'output.@brain_seg_post_5') wf.connect(thickness, 'brain_segmentation_posteriors_6', datasink, 'output.@brain_seg_post_6') wf.connect(thickness, 'cortical_thickness', datasink, 'output.@cortical_thickness') wf.connect(thickness, 'cortical_thickness_normalized', datasink,'output.@cortical_thickness_normalized') # Connect ROI stats output text file to datasink wf.connect(ROIstats, 'roi_stats_file', datasink, 'output.@ROIstats') # Setup crashfile directory and logging wf.config['execution'] = {'hash_method': 'timestamp', 'crashdump_dir': '/home/ubuntu/crashes'} config.update_config({'logging': {'log_directory': log_dir, 'log_to_file': True}}) np_logging.update_logging(config) # Return the workflow return wf
'https://s3.amazonaws.com/ndar-data/' + s3_log_path, 'N/A', 'N/A') # And quit sys.exit() # --- Image file successfully extracted, setup workflow for processing --- # Setup nipype workflow wf_base_dir = base_path + 'work-dirs/' + img03_id_str if not os.path.exists(wf_base_dir): os.makedirs(wf_base_dir) wf = pe.Workflow(name='thickness_workflow') wf.base_dir = wf_base_dir # Crash directory crash_dir = wf_base_dir + '/crashes/' log_dir = wf_base_dir # Define antsCorticalThickness node thickness = pe.Node(antsCorticalThickness(), name='thickness') # Set antsCorticalThickness inputs thickness.inputs.dimension = 3 thickness.inputs.segmentation_iterations = 1 thickness.inputs.segmentation_weight = 0.25 thickness.inputs.input_skull = nifti_file #-a thickness.inputs.template = oasis_path + 'T_template0.nii.gz' #-e thickness.inputs.brain_prob_mask = oasis_path + 'T_template0_BrainCerebellumProbabilityMask.nii.gz' #-m thickness.inputs.brain_seg_priors = oasis_path + 'Priors2/priors%d.nii.gz' #-p thickness.inputs.intensity_template = oasis_path + 'T_template0_BrainCerebellum.nii.gz' #-t thickness.inputs.extraction_registration_mask = oasis_path + 'T_template0_BrainCerebellumExtractionMask.nii.gz' #-f thickness.inputs.out_prefix = 'OUTPUT_' #-o thickness.inputs.keep_intermediate_files = 0 #-k # Node to run ANTs 3dROIStats ROIstats = pe.Node(util.Function(input_names=['mask','thickness_normd'], output_names=['roi_stats_file'],