Esempio n. 1
0
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
Esempio n. 2
0
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)