def methods_02_stats(config, verbose=False): input_dir = config['dirs']['input'] util.mkcd_dir([config['methods']['results']['dir']], True) command = [ 'fslmaths', os.path.join(config['dirs']['methods']['01-register'], 'nu_brain.nii.gz'), '-bin', os.path.join(config['dirs']['methods']['results'], 'brain_mask.nii.gz') ] util.iw_subprocess(command, verbose, verbose, False) for ii in ['swi', 'swi_magnitude', 'swi_phase']: command = [ 'fslmaths', os.path.join(config['dirs']['methods']['01-register'], 'swi_Affine_nu__' + ii + '.nii.gz'), '-mas', 'brain_mask.nii.gz', ii + '.nii.gz' ] util.iw_subprocess(command, verbose, verbose, False) util.force_hard_link( os.path.join(config['methods']['input']['dir'], 'nu.nii.gz'), 'nu.nii.gz') util.force_hard_link( os.path.join(config['methods']['input']['dir'], 'nu_brain.nii.gz'), 'nu_brain.nii.gz')
def methods_02_lpa(input_dir, verbose): cenc_dirs = cenc.directories(input_dir) wm_lesions_dir = cenc_dirs['wmlesions']['dirs']['root'] wm_lesions_lpa_dir = cenc_dirs['wmlesions']['dirs']['lpa'] util.mkcd_dir([cenc_dirs['wmlesions']['dirs']['lpa']], True) util.copy_inputs([ os.path.join(cenc_dirs['wmlesions']['dirs']['register'], 't2flair_Affine_nu__t2flair_Warped.nii.gz') ], cenc_dirs['wmlesions']['dirs']['lpa']) glob_files = glob.glob('*.gz') for ii in glob_files: os.system('gunzip ' + ii) os.chmod(str.replace(ii, '.gz', ''), stat.S_IRUSR | stat.S_IRGRP | stat.S_IWUSR | stat.S_IWGRP) # Run Matlab command = ['cenc_wmlesions_run.sh', cenc_dirs['wmlesions']['dirs']['lpa']] util.iw_subprocess(command, verbose, verbose, False) os.chdir(cenc_dirs['wmlesions']['dirs']['lpa']) for ii in glob.glob('*.nii'): os.system('gzip ' + ii) os.chmod(str.replace(ii, '.nii', '.nii.gz'), stat.S_IRUSR | stat.S_IRGRP | stat.S_IWUSR | stat.S_IWGRP)
def results( input_dir ): """ Gather results and write the MagTran JSON output file""" cenc_dirs = cenc.directories( input_dir ) mt_input_dir = cenc_dirs['mt']['dirs']['input'] mt_01_register_dir = cenc_dirs['mt']['dirs']['register'] mt_results_dir = cenc_dirs['mt']['dirs']['results'] util.mkcd_dir( [ mt_results_dir ], True) result_files = [ [ os.path.join( cenc_dirs['mt']['dirs']['register'], 'mt_Affine_nu__mt_m0_Warped.nii.gz'), os.path.join( cenc_dirs['mt']['dirs']['results'], 'mt_Affine_nu__mt_m0.nii.gz')], [ os.path.join( cenc_dirs['mt']['dirs']['register'], 'mt_Affine_nu__mt_m1_Warped.nii.gz'), os.path.join( cenc_dirs['mt']['dirs']['results'], 'mt_Affine_nu__mt_m1.nii.gz')], [ os.path.join( cenc_dirs['mt']['dirs']['02-stats'], 'magtrans.json'), os.path.join( cenc_dirs['mt']['dirs']['results'], 'magtrans.json') ], [ os.path.join( cenc_dirs['mt']['dirs']['register'], 'mtr.nii.gz'), os.path.join( cenc_dirs['mt']['dirs']['results'], 'mtr.nii.gz') ], [ os.path.join( cenc_dirs['mt']['dirs']['input'], 'nu.nii.gz'), os.path.join( cenc_dirs['mt']['dirs']['results'], 'nu.nii.gz') ], [ os.path.join( cenc_dirs['mt']['dirs']['register'], 'mtr.nii.gz'), os.path.join( cenc_dirs['results']['dirs']['images'], 'mtr.nii.gz') ] ] for ii in result_files: util.force_hard_link( ii[0], ii[1]) return
def mt_link_inputs( input_dir, link_to_dir, change_to_dir = True ): cenc_dirs = cenc.directories( input_dir ) util.mkcd_dir( [ link_to_dir ], change_to_dir ) input_files = cenc_dirs['mt']['inputs'] label_files = cenc_dirs['mt']['labels'] util.link_inputs( input_files + label_files, link_to_dir )
def methods_02_stats(input_dir, verbose=False): # Register MT images to nu.nii.gz cenc_dirs = cenc.directories(input_dir) util.mkcd_dir( [ cenc_dirs['mt']['dirs']['02-stats'] ], True) methods_write_json_redcap_mt_instrument(input_dir, verbose) return
def prepare( cenc_participant_dir ): freesurfer_input_dir = os.path.join( cenc_participant_dir, 'freesurfer', 'input' ) util.mkcd_dir( [ freesurfer_input_dir ]) input_files = [ os.path.join( cenc_participant_dir, 'reorient', 't1w.nii.gz'), os.path.join( cenc_participant_dir, 'reorient', 't2flair.nii.gz'), os.path.join( cenc_participant_dir, 'reorient', 't2tse.nii.gz') ] util.link_inputs( input_files, freesurfer_input_dir) return
def prepare( input_dir ): cenc_dirs = cenc.directories( input_dir ) util.mkcd_dir( [ cenc_dirs['freesurfer']['input'] ]) input_files = [ os.path.join( cenc_dirs['cenc']['reorient'], 't1w.nii.gz'), os.path.join( cenc_dirs['cenc']['reorient'], 't2flair.nii.gz'), os.path.join( cenc_dirs['cenc']['reorient'], 't2tse.nii.gz') ] util.link_inputs( input_files, cenc_dirs['freesurfer']['input'] ) return
def results(cenc_participant_id, cenc_participant_dir, cenc_freesurfer_dir,cenc_results_dir, verbose): util.mkcd_dir( [ cenc_results_dir ], True) files_to_convert = [ os.path.join( cenc_freesurfer_dir, cenc_participant_id, 'mri', 'nu.mgz'), os.path.join( cenc_freesurfer_dir, cenc_participant_id, 'mri', 'aseg.mgz'), os.path.join( cenc_freesurfer_dir, cenc_participant_id, 'mri', 'brainmask.mgz'), os.path.join( cenc_freesurfer_dir, cenc_participant_id, 'mri', 'aparc.a2009s+aseg.mgz'), os.path.join( cenc_freesurfer_dir, cenc_participant_id, 'mri', 'wmparc.mgz') ] # Check if files exist print files_to_convert if util.check_files(files_to_convert, True) == False: sys.exit() # Create link to directory freesurfer_results_dir = os.path.abspath(os.path.join( cenc_participant_dir, 'freesurfer','results')) if not os.path.exists(freesurfer_results_dir): util.force_symbolic_link( os.path.join( cenc_freesurfer_dir, cenc_participant_id ), freesurfer_results_dir) # TODO use input node to run this instead of a loop mc = Node( fs.MRIConvert( out_type = 'niigz' ), name="mri_convert" ) mc.iterables = ( "in_file", files_to_convert ) reorient = Node( fsl.Reorient2Std(), name="reorient" ) workflow_convert = Workflow(name='cenc_freesurfer_nipype_workflow') workflow_convert.base_dir = cenc_results_dir workflow_convert.connect( [ (mc, reorient, [('out_file', 'in_file')] )] ) workflow_convert.run() # Create final brain mask. This takes forever. Speeding it up would be helpful. cenc.create_mask( os.path.join( cenc_results_dir, 'brainmask.nii.gz'), os.path.join( cenc_results_dir, 'aparc.a2009s+aseg.nii.gz'), os.path.join( cenc_results_dir, 'mask.nii.gz') )
def results(cenc_participant_id, cenc_participant_dir, cenc_freesurfer_dir,cenc_results_dir, verbose): util.mkcd_dir( [ cenc_results_dir ], True) files_to_convert = [ os.path.join( cenc_freesurfer_dir, cenc_participant_id, 'mri', 'nu.mgz'), os.path.join( cenc_freesurfer_dir, cenc_participant_id, 'mri', 'aseg.mgz'), os.path.join( cenc_freesurfer_dir, cenc_participant_id, 'mri', 'brainmask.mgz'), os.path.join( cenc_freesurfer_dir, cenc_participant_id, 'mri', 'aparc.a2009s+aseg.mgz'), os.path.join( cenc_freesurfer_dir, cenc_participant_id, 'mri', 'wmparc.mgz') ] # Check if files exist print files_to_convert if util.check_files(files_to_convert, True) == False: sys.exit() # Create link to directory freesurfer_results_dir = os.path.abspath(os.path.join( cenc_participant_dir, 'freesurfer','results')) if not os.path.exists(freesurfer_results_dir): util.force_symbolic_link( os.path.join( cenc_freesurfer_dir, cenc_participant_id ), freesurfer_results_dir) # TODO use input node to run this instead of a loop. The trick part is to have the files named correctly. for ii in files_to_convert: mc = fs.MRIConvert( in_file = ii, out_file = os.path.join( cenc_results_dir, str.replace( os.path.basename(ii),'.mgz','.nii.gz')), out_type = 'niigz' ) mc.run() reorient = fsl.Reorient2Std( in_file = mc.inputs.out_file, out_file = mc.inputs.out_file) reorient.run() # Create final brain mask. cenc.create_mask( os.path.join( cenc_results_dir, 'brainmask.nii.gz'), os.path.join( cenc_results_dir, 'aparc.a2009s+aseg.nii.gz'), os.path.join( cenc_results_dir, 'mask.nii.gz') ) # Extract labels for Further processing cenc_results_labels_dir = os.path.join(cenc_results_dir, 'labels') util.mkcd_dir( cenc_results_labels_dir, 'labels') )
def methods_00_input(config, verbose): """ Renames inputs from configureation file to standard naming convention""" if verbose: print print(config['config']['dirs']) print print(config['methods']['input']) print util.mkcd_dir([config['methods']['input']['dir']], True) input_output_pairs = zip(config['methods']['input']['inputs'], config['methods']['input']['outputs']) for ii in input_output_pairs: os.link(ii[0], ii[1])
def methods_01_register(input_dir, verbose): cenc_dirs = cenc.directories(input_dir) wm_lesions_dir = cenc_dirs['wmlesions']['dirs']['root'] wm_lesions_lpa_dir = cenc_dirs['wmlesions']['dirs']['lpa'] # Register util.mkcd_dir([cenc_dirs['wmlesions']['dirs']['register']], True) files = [ os.path.join(cenc_dirs['wmlesions']['dirs']['input'], 'nu.nii.gz'), os.path.join(cenc_dirs['wmlesions']['dirs']['input'], 't2flair.nii.gz'), os.path.join(cenc_dirs['results']['dirs']['labels'], 'mask.nii.gz') ] util.link_inputs(files, cenc_dirs['wmlesions']['dirs']['register']) ants_register('t2flair')
def prepare(input_dir): cenc_dirs = cenc.directories(input_dir) wm_lesions_dir = cenc_dirs['wmlesions']['dirs']['root'] wm_lesions_input_dir = cenc_dirs['wmlesions']['dirs']['input'] wm_lesions_lpa_dir = cenc_dirs['wmlesions']['dirs']['lpa'] # Create Input Directory if it doesn't exist and link files files = [ os.path.abspath( os.path.join(cenc_dirs['results']['dirs']['images'], 'nu.nii.gz')), os.path.abspath( os.path.join(cenc_dirs['results']['dirs']['labels'], 'mask.nii.gz')), os.path.abspath( os.path.join(cenc_dirs['cenc']['reorient'], 't2flair.nii.gz')) ] util.mkcd_dir(os.path.join(wm_lesions_input_dir)) util.link_inputs(files, wm_lesions_input_dir)
def results( input_dir, verbose): cenc_dirs = cenc.directories( input_dir ) cenc_freesurfer_dir = cenc_dirs['freesurfer']['mri'] util.mkcd_dir( [ cenc_dirs['results']['dirs']['root'], cenc_dirs['results']['dirs']['images'], cenc_dirs['results']['dirs']['labels'] ], True ) files_to_convert = [ os.path.join( cenc_freesurfer_dir, 'nu.mgz'), os.path.join( cenc_freesurfer_dir, 'aseg.mgz'), os.path.join( cenc_freesurfer_dir, 'brainmask.mgz'), os.path.join( cenc_freesurfer_dir, 'aparc.a2009s+aseg.mgz'), os.path.join( cenc_freesurfer_dir, 'wmparc.mgz') ] # Check if files exist if util.check_files(files_to_convert, True) == False: sys.exit() # Create link to directory if not os.path.exists(cenc_dirs['freesurfer']['results']): util.force_symbolic_link( cenc_dirs['freesurfer']['mri'], cenc_dirs['freesurfer']['results']) # TODO use input node to run this instead of a loop. The trick part is to have the files named correctly. for ii in files_to_convert: mc = fs.MRIConvert( in_file = ii, out_file = os.path.join( cenc_dirs['results']['dirs']['labels'], str.replace( os.path.basename(ii),'.mgz','.nii.gz')), out_type = 'niigz' ) mc.run() reorient = fsl.Reorient2Std( in_file = mc.inputs.out_file, out_file = mc.inputs.out_file) reorient.run() # Link nu.nii.gz to results/native/images result_files = [ [ os.path.join( cenc_dirs['results']['dirs']['labels'], 'nu.nii.gz'), os.path.join( cenc_dirs['results']['dirs']['images'], 'nu.nii.gz') ] ] for ii in result_files: util.force_hard_link( ii[0], ii[1]) # Create final brain mask. cenc.create_mask( os.path.join( cenc_dirs['results']['dirs']['labels'], 'brainmask.nii.gz'), os.path.join( cenc_dirs['results']['dirs']['labels'], 'aparc.a2009s+aseg.nii.gz'), os.path.join( cenc_dirs['results']['dirs']['labels'], 'mask.nii.gz') ) # Create macroscopic labels util.iw_subprocess( ['cenc_aseg_labels.sh'], True, True, False)
def methods_03_stats(input_dir, verbose=False, min_lesion_volume=10): cenc_dirs = cenc.directories(input_dir) wm_lesions_dir = cenc_dirs['wmlesions']['dirs']['root'] wm_lesions_lpa_dir = cenc_dirs['wmlesions']['dirs']['lpa'] util.mkcd_dir([cenc_dirs['wmlesions']['dirs']['stats']], True) wm_lesions_stats_filename = os.path.join( cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_labels.csv') # Create labels file from LPA probability map iw_labels_label.create( os.path.join(cenc_dirs['wmlesions']['dirs']['lpa'], 'ples_lpa_mt2flair_Affine_nu__t2flair_Warped.nii.gz'), os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_labels.nii.gz')) # Measure statistics of labels iw_labels_stats.measure( os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_labels.nii.gz'), None, False, ['volume_mm3'], wm_lesions_stats_filename, limits_volume_voxels=[min_lesion_volume, numpy.inf], limits_bb_volume_voxels=[0, numpy.inf], limits_fill_factor=[0, 1], sort='volume_mm3', verbose=verbose, verbose_nlines=20) # Keep labels greater than 10 mm^3. Limit is set above iw_labels_keep.keep( os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_labels.nii.gz'), [], wm_lesions_stats_filename, os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_labels.nii.gz')) # 1) # 2) Create a WM Lesions mask # 3) command = [[ 'fslmaths', os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_labels.nii.gz'), '-bin', '-mul', os.path.join(cenc_dirs['wmlesions']['dirs']['lpa'], 'ples_lpa_mt2flair_Affine_nu__t2flair_Warped.nii.gz'), '-mas', os.path.join(cenc_dirs['wmlesions']['dirs']['input'], 'mask.nii.gz'), os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_pmap.nii.gz') ], [ 'fslmaths', os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_labels.nii.gz'), '-bin', os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_mask.nii.gz') ], [ 'fslmaths', os.path.join(cenc_dirs['wmlesions']['dirs']['lpa'], 'mt2flair_Affine_nu__t2flair_Warped.nii.gz'), '-mas', os.path.join(cenc_dirs['wmlesions']['dirs']['input'], 'mask.nii.gz'), os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_t2flair.nii.gz') ]] for ii in command: util.iw_subprocess(ii, verbose, verbose, False) # Write out JSON file with RedCap Instrument methods_write_json_redcap_instrument(input_dir, wm_lesions_stats_filename, verbose)
def results(input_dir): cenc_dirs = cenc.directories(input_dir) util.mkcd_dir([cenc_dirs['wmlesions']['dirs']['results']], True) # Link Files link_result_files = [ [ os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_t2flair.nii.gz'), os.path.join(cenc_dirs['wmlesions']['dirs']['results'], 'wmlesions_lpa_t2flair.nii.gz') ], [ os.path.join(cenc_dirs['wmlesions']['dirs']['input'], 'nu.nii.gz'), os.path.join(cenc_dirs['wmlesions']['dirs']['results'], 'nu.nii.gz') ], [ os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_pmap.nii.gz'), os.path.join(cenc_dirs['wmlesions']['dirs']['results'], 'wmlesions_lpa_pmap.nii.gz') ], [ os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions.json'), os.path.join(cenc_dirs['wmlesions']['dirs']['results'], 'wmlesions.json') ], [ os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_labels.nii.gz'), os.path.join(cenc_dirs['wmlesions']['dirs']['results'], 'wmlesions_lpa_labels.nii.gz') ], [ os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_labels.csv'), os.path.join(cenc_dirs['wmlesions']['dirs']['results'], 'wmlesions_lpa_labels.csv') ], [ os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_mask.nii.gz'), os.path.join(cenc_dirs['wmlesions']['dirs']['results'], 'wmlesions_lpa_mask.nii.gz') ], [ os.path.join(cenc_dirs['wmlesions']['dirs']['results'], 'wmlesions_lpa_pmap.nii.gz'), os.path.join(cenc_dirs['results']['dirs']['images'], 'wmlesions_lpa_pmap.nii.gz') ], [ os.path.join(cenc_dirs['wmlesions']['dirs']['results'], 'wmlesions_lpa_mask.nii.gz'), os.path.join(cenc_dirs['results']['dirs']['labels'], 'wmlesions_lpa_mask.nii.gz') ], [ os.path.join(cenc_dirs['wmlesions']['dirs']['results'], 'wmlesions_lpa_labels.nii.gz'), os.path.join(cenc_dirs['results']['dirs']['labels'], 'wmlesions_lpa_labels.nii.gz') ] ] for ii in link_result_files: util.force_hard_link(ii[0], ii[1])
affine_out_iras_to_wras = stage1_output_files[0] affine_out_wras_to_wlps = stage1_output_files[1] affine_out_wlps_to_wctf = stage1_output_files[3] fiducials_out_iras = stage1_output_files[2] fiducials_out_wlps = stage1_output_files[4] fiducials_out_wctf = stage1_output_files[5] print stage1_output_files if inArgs.run and (1 in inArgs.run_stage): util.print_stage("Entering Stage 1 - Creating matrices", inArgs.verbose) util.verify_inputs(stage1_input_files, inArgs.verbose) util.mkcd_dir( stage1_directory ) util.link_inputs( stage1_input_files, stage1_directory) # # Save ITK affine matrix # if inArgs.verbose: print print "Image affine RAS image to RAS world matrix" print img_affine_matrix_ras print util.save_itk_affine_matrix( img_affine_matrix_ras, affine_out_iras_to_wras, inArgs.verbose )
tarball_filename = inArgs.tarball else: tarball_filename = id + '_fmri.tar.gz' if os.path.isfile(os.path.join(out_dir, tarball_filename)): sys.exit('fMRI tarball already exists for ' + id + '.') # Create Output Directory if it doesn't exist files = [ os.path.abspath(os.path.join(dicom_dir, 'dcmConvertAll.cfg')), os.path.abspath(os.path.join(dicom_dir, 'dcmConvert_cenc.cfg')), os.path.abspath(os.path.join(nifti_dir, 'rest.nii.gz')) ] util.mkcd_dir(out_dir) util.link_inputs(files, out_dir) files_to_be_tarred = glob.glob('*') # Create TarBall tarball = tarfile.open(tarball_filename, 'w:gz') for f in files_to_be_tarred: tarball.add(f) tarball.close() # Clean Directory
participant_dir = os.path.abspath(os.path.join(inArgs.cenc_dir, id)) reorient_dir = util.path_relative_to(participant_dir, inArgs.reorient_dir) wm_lesions_dir = util.path_relative_to(participant_dir, inArgs.out_dir) wm_lesions_input_dir = os.path.join(wm_lesions_dir, 'input') wm_lesions_lpa_dir = os.path.join(wm_lesions_dir, '01-lst_lpa') wm_lesions_lga_dir = os.path.join(wm_lesions_dir, '02-lst_lga') # Create Output Directory if it doesn't exist files = [ os.path.abspath(os.path.join(reorient_dir, 't1w.nii.gz')), os.path.abspath(os.path.join(reorient_dir, 't2flair.nii.gz')) ] util.mkcd_dir(os.path.join(wm_lesions_input_dir)) util.link_inputs(files, wm_lesions_input_dir) # util.mkcd_dir(os.path.join(wm_lesions_lpa_dir), False) util.mkcd_dir(os.path.join(wm_lesions_lga_dir), True) util.copy_inputs(files, wm_lesions_lga_dir) for ii in glob.glob('*.gz'): os.system('gunzip ' + ii) util.link_inputs(glob.glob('*.nii'), wm_lesions_lpa_dir)
] stage0_output_files = stage0_output_files + native_to_template + template_to_native if os.path.exists(reference_template): reference_template = util.path_relative_to( stage0_directory, 'reference_template.nii.gz' ) stage0_output_files = stage0_output_files + [ reference_template ] if inArgs.run and (0 in inArgs.run_stage): util.print_stage('Entering Stage 0 - Renaming input files to common working names', inArgs.verbose) util.verify_inputs(stage0_input_files, inArgs.verbose) util.mkcd_dir( stage0_directory ) for ii in range(0,len(stage0_input_files)): if os.path.exists( stage0_output_files[ii] ): os.unlink( stage0_output_files[ii] ) os.link(stage0_input_files[ii], stage0_output_files[ii] ) util.verify_outputs(stage0_output_files, inArgs.verbose) # # Stage 1 # stage1_directory = stage_directory[1];