def methods_write_json_redcap_ants_ct_instrument(ants_ct_info, verbose): """ Write ANTs CT Instrument to JSON output file""" df_stats = labels.properties(ants_ct_info['segment']['segment']) dict_redcap = OrderedDict( (('subject_id', ants_ct_info['base']['subject_id']), ('ants_ct_analyst', getpass.getuser()), ('ants_ct_datetime', '{:%Y-%b-%d %H:%M:%S}'.format(datetime.datetime.now())), ('ants_ct_csf_volume_mm3', '{0:4.3f}'.format(df_stats.iloc[0]['volume_mm3'])), ('ants_ct_gm_cortical_volume_mm3', '{0:4.3f}'.format(df_stats.iloc[1]['volume_mm3'])), ('ants_ct_wm_volume_mm3', '{0:4.3f}'.format(df_stats.iloc[2]['volume_mm3'])), ('ants_ct_gm_subcortical_volume_mm3', '{0:4.3f}'.format(df_stats.iloc[3]['volume_mm3'])), ('ants_ct_brainstem_volume_mm3', '{0:4.3f}'.format(df_stats.iloc[4]['volume_mm3'])), ('ants_ct_cerebellum_volume_mm3', '{0:4.3f}'.format(df_stats.iloc[5]['volume_mm3'])))) with open(ants_ct_info['results']['json'], 'w') as outfile: json.dump(dict_redcap, outfile, indent=4, ensure_ascii=True, sort_keys=False) if verbose: print( json.dumps(dict_redcap, indent=4, ensure_ascii=True, sort_keys=False)) return
def methods_03_stats(input_dir, lower_threshold=0.5, upper_threshold=numpy.inf, min_lesion_volume_voxels=10, verbose=False): 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') wm_lesions_pmap_stats_filename = os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_pmap.csv') # Mask LPA Probability Mask and remove NaN command = [['fslmaths', 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'), '-nan', os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_pmap.nii.gz') ]] for ii in command: util.iw_subprocess(ii, verbose, verbose, False) # Create labels file from LPA probability map labels.label_connected_components( os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_pmap.nii.gz'), os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_labels.nii.gz'), lower_threshold, upper_threshold ) # Measure properties of labels labels.properties(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_voxels, 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 labels.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) Create a WM Lesions mask # 2) Mask LPA Registered T2 FLAIR command = [ ['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) # Measure Pmaps stats labels df_pmap_measure = labels.measure( os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_labels.nii.gz'), os.path.join(cenc_dirs['wmlesions']['dirs']['stats'], 'wmlesions_lpa_pmap.nii.gz')) df_pmap_measure.to_csv(wm_lesions_pmap_stats_filename, index=False) # Write out JSON file with RedCap Instrument methods_write_json_redcap_instrument(input_dir, wm_lesions_stats_filename, wm_lesions_pmap_stats_filename, verbose)