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]
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'
#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)
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)
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')