示例#1
0
def volstats (invol, groupname, groupsize, outdir=''):

    slicesdir = os.path.dirname(invol)

    if not outdir:
        outdir = slicesdir

    base      = os.path.basename(au.remove_ext(invol))
    outmeanf  = outdir + os.path.sep + base + '_' + au.mean_str()
    outvarf   = outdir + os.path.sep + base + '_' + au.var_str()
    outstdf   = outdir + os.path.sep + base + '_' + au.std_str()
    outsumsf  = outdir + os.path.sep + base + '_' + au.sums_str()

    vol = nib.load(invol).get_data()
    aff = nib.load(invol).get_affine()

    if not os.path.exists(outmeanf):
        mean = np.mean(vol, axis=3)
        au.save_nibabel(outmeanf, mean, aff)

    if not os.path.exists(outstdf):
        std = np.std(vol, axis=3)
        au.save_nibabel(outstdf, std, aff)

    if not os.path.exists(outvarf):
        var = np.var(vol, axis=3)
        au.save_nibabel(outvarf, var, aff)

    if not os.path.exists(outsumsf):
        sums = np.sum(vol, axis=3)
        au.save_nibabel(outsumsf, sums, aff)

    return [outsumsf,outmeanf,outvarf,outstdf]
def volstats(invol, groupname, groupsize, outdir=''):

    slicesdir = os.path.dirname(invol)

    if not outdir:
        outdir = slicesdir

    base = os.path.basename(au.remove_ext(invol))
    outmeanf = outdir + os.path.sep + base + '_' + au.mean_str()
    outvarf = outdir + os.path.sep + base + '_' + au.var_str()
    outstdf = outdir + os.path.sep + base + '_' + au.std_str()
    outsumsf = outdir + os.path.sep + base + '_' + au.sums_str()

    vol = nib.load(invol).get_data()
    aff = nib.load(invol).get_affine()

    if not os.path.exists(outmeanf):
        mean = np.mean(vol, axis=3)
        au.save_nibabel(outmeanf, mean, aff)

    if not os.path.exists(outstdf):
        std = np.std(vol, axis=3)
        au.save_nibabel(outstdf, std, aff)

    if not os.path.exists(outvarf):
        var = np.var(vol, axis=3)
        au.save_nibabel(outvarf, var, aff)

    if not os.path.exists(outsumsf):
        sums = np.sum(vol, axis=3)
        au.save_nibabel(outsumsf, sums, aff)

    return [outsumsf, outmeanf, outvarf, outstdf]
示例#3
0
def do_matlab_svm_bdopt (temporal_filtering=True, global_nuis_correction=True):
    wd, xd, dd, labelsf, phenof, dataf, masks, dilmasks, templates, pipe = get_filepaths(temporal_filtering, global_nuis_correction)

    au.setup_logger(2, logfname=None)

    for fi in range(len(dataf)):

        myfile = au.remove_ext(subjsf) + '.mat'
示例#4
0
    #setting command paths
    svm_class = 'svm_perf_classify'
    svm_learn = 'svm_perf_learn'
    if svmdir:
        svm_class = svmdir + os.path.sep + svm_class
        svm_learn = svmdir + os.path.sep + svm_learn

    train_fname = featsf
    test_fname = testf

    #creating output filename
    if expname:
        ofname = os.path.basename(expname)
    else:
        ofname = au.remove_ext(os.path.basename(train_fname))

    modelf = outdir + os.path.sep + ofname + '.model.dat'
    predsf = outdir + os.path.sep + ofname + '.preds.txt'
    logf = outdir + os.path.sep + ofname + '.log.txt'
    resf = outdir + os.path.sep + ofname + '.results.txt'

    if redoing:
        if os.path.exists(resf):
            au.log.info('The results already are in ' + resf)
            return 0

    modelf = au.add_pluses_if_exist(modelf)
    predsf = au.add_pluses_if_exist(predsf)
    logf = au.add_pluses_if_exist(logf)
示例#5
0
def do_darya_localizations ():
    import scipy.io as sio

    sys.path.append('/home/alexandre/Dropbox/Documents/work/visualize_volume')
    import visualize_volume as vis

    import aizkolari_utils as au
    au.setup_logger()

    locd = '/home/alexandre/Dropbox/ELM 2013/ELM-2013-Darya/localization'

    wd, xd, dd, labelsf, phenof, dataf, masks, dilmasks, templates, pipe = get_filepaths()

    maskf          = dilmasks[0]
    mask, hdr, aff = au.get_nii_data(maskf)
    indices        = np.array(np.where(mask > 0))

    tmpltf         = templates[0]
    tmplt, _, _    = au.get_nii_data(tmpltf)

    flist = os.listdir(locd)
    flist = au.find(flist, '.mat')
    flist.sort()

    for f in flist:
        data = sio.loadmat(os.path.join(locd, f))

        name = au.remove_ext(f)

        if f.find('cobre') >= 0:
            p = data['pearson'].squeeze()
            locs = p > 0
            lidx = indices[:, locs].squeeze()

            if f.find('reho') >= 0:
                preho = p.copy()
            elif f.find('alff') >= 0:
                palff = p.copy()

        else:
            locs = data[name].squeeze()
            locs -= 1
            if f.find('pearson') >= 0:

                if f.find('reho') >= 0:
                    lidx = indices[:, preho > 0]
                elif f.find('alff') >= 0:
                    lidx = indices[:, palff > 0]

                lidx = lidx[:, locs]
            else:
                lidx = indices[:, locs].squeeze()

        locvol = np.zeros_like(mask, dtype=np.float)
        locvol[tuple(lidx)] = 1

        #save nifti volume
        au.save_nibabel (os.path.join(locd, name + '.nii.gz'), locvol, aff, hdr)

        #save image
        fig = vis.show_many_slices(tmplt, locvol, volaxis=1, vol2_colormap=plt.cm.autumn, figtitle=name)
        aizc.save_fig_to_png(fig, os.path.join(locd, name + '.png'))
        if os.access (os.path.join(xd,'innercrop'), os.X_OK):
            au.exec_command (os.path.join(xd,'innercrop') + ' -o white ' + fig2name + ' ' + fig2name)
      return 0

   ilst     = args.input.strip().split()
   odir     = args.outdir.strip()
   threshs  = args.threshs.strip().split()
   maskf    = args.mask.strip()
   ext      = args.ext.strip()

   au.setup_logger(args.verbosity)

   mask = nib.load(maskf).get_data()

   for i in ilst:
      im    = nib.load(i)
      ivol  = im.get_data()
      ifnom = au.remove_ext(os.path.basename(imf))

      if mask.shape != ivol.shape:
         au.log.error ("Mask file " + maskf + " and input " + i + " do not have the same shape. Skipping...")
         continue

      for t in threshs:
         au.log.info ("Thresholding " + i + " with " + str(t) + " robust lower bound.")
         out = au.threshold_robust_range (ivol, t)

         if odir:
            of = odir
         else:
            of = os.path.dirname(i)

         of += os.path.sep + ifnom + "_" + str(t) + "thrP" + ext
   #setting command paths
   svm_class = 'svm_perf_classify'
   svm_learn = 'svm_perf_learn'
   if svmdir:
      svm_class = svmdir + os.path.sep + svm_class
      svm_learn = svmdir + os.path.sep + svm_learn

   train_fname = featsf
   test_fname  = testf

   #creating output filename
   if expname:
      ofname = os.path.basename(expname)
   else:
      ofname = au.remove_ext(os.path.basename(train_fname))

   modelf = outdir + os.path.sep + ofname + '.model.dat'
   predsf = outdir + os.path.sep + ofname + '.preds.txt'
   logf   = outdir + os.path.sep + ofname + '.log.txt'
   resf   = outdir + os.path.sep + ofname + '.results.txt'

   if redoing:
      if os.path.exists(resf):
         au.log.info('The results already are in ' + resf)
         return 0

   modelf = au.add_pluses_if_exist (modelf)
   predsf = au.add_pluses_if_exist (predsf)
   logf   = au.add_pluses_if_exist (logf)
示例#8
0
def slice_and_merge (subsfname, labelsfname, checkfname, outdir='', maskfname='', outbase=''):

   check_data (subsfname, labelsfname, outdir, maskfname, outbase)

   nsubs = au.file_len(subsfname)
   nlabs = au.file_len(labelsfname)

   if not outdir:
      outdir = os.getcwd()

   slicesdir = outdir + os.path.sep + au.slices_str()
   tempdir = outdir + os.path.sep + au.temp_str()
   tmpdirlst = os.listdir(tempdir)

   fpath = ''
   olddir = os.getcwd()

   if not au.is_done (checkfname, au.preslicingdata_str()):
      #slicing subjects
      au.log.info ('Slicing all subjects: takes a while')
      subsfile = open(subsfname, 'r')
      for line in subsfile:
         fpath  = line.strip()
         isfile = os.path.basename(fpath)
         osfile = tempdir + os.path.sep + isfile

         #test if file has been sliced
         fdim3 = au.fslval(fpath, 'dim3')
         regex = au.remove_ext(isfile) + '*'
         nslices = au.count_match (tmpdirlst, regex)
         if fdim3 != nslices:
            #if not, then slice it in tempdir
            au.log.debug('Slicing ' + isfile)
            os.chdir (tempdir)

            shutil.copy (fpath, tempdir)
            au.fslslice (osfile)

            os.remove(osfile)
            os.chdir (olddir)
         else:
            au.log.debug(isfile + ' previously sliced')

      subsfile.close()
      au.checklist_add (checkfname, au.preslicingdata_str())

   if not au.is_done (checkfname, au.premergingdata_str()):
      #merging each slice
      if not outbase:
         outbase = au.data_str()

      if not fpath:
         subsfile = open(subsfname, 'r')
         for line in subsfile:
            fpath = line.strip()
            break

      au.log.info ('Merging all subject slices: takes a while')

      nslices  = int(au.fslval(fpath,'dim3'))
      for slice in range(nslices):
         slicezp = au.zeropad(slice)

         mergeout  = outbase + '_slice_' + slicezp
         outdata   = slicesdir + os.path.sep + mergeout
         #check if data file exists
         if not au.imtest(outdata):
            #if not, then create it, merging all the corresponding slices
            au.log.debug('Merging slice ' + slicezp)

            imglob   = ''
            subsfile = open(subsfname, 'r')
            for line in subsfile:
               fpath   = line.strip()
               isfile  = au.remove_ext(os.path.basename(fpath)).strip()
               isfile  = tempdir + os.path.sep + isfile + '_slice_' + slicezp
               imglob += isfile + ' '

            os.system('fslmerge -t ' + outdata + ' ' + imglob)

            for f in imglob.split():
               au.imrm(f)
         else:
            au.log.debug('Slice ' + slicezp + ' previously done')

         au.checklist_add (checkfname, au.premergingdata_str())

   #slicing mask
   if maskfname:
      if os.path.exists(maskfname) and not au.is_done (checkfname, au.preslicingmask_str()):
         au.log.info('Slicing mask ' + maskfname)

         au.imcp (maskfname, slicesdir + os.path.sep + au.mask_str())
         os.chdir (slicesdir)
         au.fslslice (au.mask_str())
         au.imrm     (au.mask_str())

         au.checklist_add (checkfname, au.preslicingmask_str())
         os.chdir (olddir)

   au.log.debug('Done preprocessing')