def _read_datafile(filename, dt, skip) : """ Read a data series and remove equilibration """ data = parsing.parse2ndarray(filename) data[:,0] = data[:,0] * dt # Make the time column to ps freq = data[1,0] - data[0,0] nskip = int(skip/freq) d = data[(nskip+1):,:] return d
def _read_datafile(filename, dt, skip): """ Read a data series and remove equilibration """ data = parsing.parse2ndarray(filename) data[:, 0] = data[:, 0] * dt # Make the time column to ps freq = data[1, 0] - data[0, 0] nskip = int(skip / freq) d = data[(nskip + 1):, :] return d
if args.ymax is not None and args.ymin is not None: for i, x in enumerate(args.vertical): if args.vstyle is not None: stl = colors.style(args.vstyle[i]) else: stl = colors.style(i + 1) a.plot([x, x], [args.ymin, args.ymax], stl, color='k') ylim = [10E10, -10E10] xlim = [10E10, -10E10] lines = [] for i, (filename, label, axis) in enumerate(zip(args.file, args.label, plotax)): data = parsing.parse2ndarray(filename) if args.skip < 1: n = int(np.floor(args.skip * data.shape[0])) else: n = args.skip data = data[n:, :] if args.multicol is not None: args.ycol = args.multicol[i] if data.shape[1] == 1: args.ycol = 0 y = data[n:, args.ycol] * args.yfactor if data.shape[1] > 1: x = data[n:, args.xcol] * args.xfactor else: x = np.arange(1, len(y) + 1) * args.xfactor if args.stride is not None: x = x[::args.stride]
# Author: Samuel Genheden [email protected] """ Script to calculate PMF properties, i.e. penetration and water/lipid barriers """ import sys import numpy as np from scipy.interpolate import interp1d from sgenlib import parsing from sgenlib import snum data = parsing.parse2ndarray(sys.argv[1]) x = data[:, 0] pmf = data[:, 1] err = data[:, 2] mini = np.argmin(pmf) dGdepth = pmf[mini] - pmf[-1] dGpen = pmf[0] - pmf[mini] errdepth = np.sqrt(err[mini]**2 + err[-1]**2) errpen = np.sqrt(err[0]**2 + err[mini]**2) kT = 300 * 0.00831446210 expav = np.exp(-pmf / kT) expstd = np.abs(expav * (-err / kT)) bndint, bndstd = snum.trapz(x, expav, expstd) freeint = np.trapz(np.ones(x.shape[0]), x)
a = figure.add_subplot(nrows, ncols, i) a.plot(data[:, 1], data[:, 0], ".", color=colors.color(i - 1)) tau, tpval = stats.kendalltau(data[:, 1], data[:, 0]) r, rpval = stats.pearsonr(data[:, 1], data[:, 0]) print "%s\t%.5f\t%.5f\t%.5f\t%5f" % (label, r, rpval, tau, tpval) a.plot([minv, maxv], [minv, maxv], "--k") a.set_xlim(minv, maxv) a.set_ylim(minv, maxv) a.set_xticks(ticks) a.set_yticks(ticks) if ilabels or a.is_first_col(): a.set_ylabel(ylabel) if ilabels or a.is_last_row(): a.set_xlabel(xlabel) a.text(0.05, 0.92, label, transform=a.transAxes) a.set_aspect('equal') figure.tight_layout() print "" if __name__ == '__main__': data = parsing.parse2ndarray(sys.argv[1]) figure = plt.figure(1, figsize=(7, 7)) _plot_data(figure, [data], [""], r'$\mathrm{log} D_\mathrm{AA}$', r'$\mathrm{log} D_\mathrm{exp.}$', ncols=1) figure.savefig(sys.argv[2], format="png", dpi=300)
# Author: Samuel Genheden [email protected] import sys import numpy as np from sgenlib import parsing if __name__ == '__main__' : data = parsing.parse2ndarray(sys.argv[1]) true_signs = (np.abs(data[:,0])>=1.96*data[:,1]).sum() print "Number of true signs is %d of %d, that is %d percent"%(true_signs, data.shape[0], float(true_signs)/float(data.shape[0])*100) print "Predictions with false signs %s"% \ ", ".join("%.1f+-%.2f"%tuple(d) for d in data[np.abs(data[:,0])<1.96*data[:,1],:])
def _dobar(filename): """ Read an oputput file from g_bar and return the dG in kcal/mol """ data = parsing.parse2ndarray(filename) return 1.987*0.3*data[:,1].sum()
def _dobar(filename): """ Read an oputput file from g_bar and return the dG in kcal/mol """ data = parsing.parse2ndarray(filename) return 1.987 * 0.3 * data[:, 1].sum()
x3 = x2*x hfex = hfecoeff[0]*x3+hfecoeff[1]*x2+hfecoeff[2]*x+hfecoeff[3] iodx = iodcoeff[0]*x3+iodcoeff[1]*x2+iodcoeff[2]*x+iodcoeff[3] hfediff = np.abs(np.divide(hfex - hfefit,hfefit)).sum() ioddiff = np.abs(np.divide(iodx - iodfit,iodfit)).sum() return hfediff + ioddiff if __name__ == '__main__' : parser = argparse.ArgumentParser(description="Optimize LJ parameters") parser.add_argument('-s','--scanfile',help="the data from the scans") parser.add_argument('-f','--fitfile',help="the data points to fit") args = parser.parse_args() scans = parsing.parse2ndarray(args.scanfile) fitpnt = parsing.parse2ndarray(args.fitfile) hfecoeff = np.polyfit(scans[:,0],scans[:,1],3) iodcoeff = np.polyfit(scans[:,0],scans[:,2],3) xmin = scans[:,0].min() xmax = scans[:,0].max() x0 = np.ones(fitpnt.shape[0])*scans[:,0].mean() arglst = (hfecoeff,iodcoeff,fitpnt[:,0],fitpnt[:,1]) bnds = np.ones((fitpnt.shape[0],2)) bnds[:,0] *= xmin bnds[:,1] *= xmax res = opt.minimize(objfunc,x0,args=arglst,bounds=bnds) optx = res.x
hfex = hfecoeff[0] * x3 + hfecoeff[1] * x2 + hfecoeff[2] * x + hfecoeff[3] iodx = iodcoeff[0] * x3 + iodcoeff[1] * x2 + iodcoeff[2] * x + iodcoeff[3] hfediff = np.abs(np.divide(hfex - hfefit, hfefit)).sum() ioddiff = np.abs(np.divide(iodx - iodfit, iodfit)).sum() return hfediff + ioddiff if __name__ == '__main__': parser = argparse.ArgumentParser(description="Optimize LJ parameters") parser.add_argument('-s', '--scanfile', help="the data from the scans") parser.add_argument('-f', '--fitfile', help="the data points to fit") args = parser.parse_args() scans = parsing.parse2ndarray(args.scanfile) fitpnt = parsing.parse2ndarray(args.fitfile) hfecoeff = np.polyfit(scans[:, 0], scans[:, 1], 3) iodcoeff = np.polyfit(scans[:, 0], scans[:, 2], 3) xmin = scans[:, 0].min() xmax = scans[:, 0].max() x0 = np.ones(fitpnt.shape[0]) * scans[:, 0].mean() arglst = (hfecoeff, iodcoeff, fitpnt[:, 0], fitpnt[:, 1]) bnds = np.ones((fitpnt.shape[0], 2)) bnds[:, 0] *= xmin bnds[:, 1] *= xmax res = opt.minimize(objfunc, x0, args=arglst, bounds=bnds) optx = res.x
parser.add_argument( '--extent', type=float, nargs=4, help="the extent (left, right, bottom, top) of the image") parser.add_argument('--nobar', action="store_true", help="don't draw a colorbar", default=False) parser.add_argument('--multiplot', action="store_true", help="draw more maps in subplots", default=False) parser.add_argument('-o', '--out', help="the output filename of the multiplot") args = parser.parse_args() all_mat = [parsing.parse2ndarray(filename) for filename in args.file] if not args.multiplot: for filename, mat in zip(args.file, all_mat): outname = os.path.splitext(filename)[0] + ".png" if args.out is not None and len(args.file) == 1: outname = args.out _draw_2dmap(mat, args.cutoff, args.max, args.ylabel, args.xlabel, args.extent, args.cblabel, args.nobar, outname) else: _draw_multi_2dmap(all_mat, args.cutoff, args.max, args.ylabel, args.xlabel, args.extent, args.cblabel, args.out)
# Author: Samuel Genheden [email protected] import sys import numpy as np from sgenlib import parsing if __name__ == '__main__': data = [] for filename in sys.argv[1:] : data.append(parsing.parse2ndarray(filename)) data = np.asarray(data) av = data.mean(axis=0) std = data.std(axis=0)/np.sqrt(data.shape[0]) for irow in range(data.shape[1]) : print data[0, irow, 0],"\t", print "\t".join("%.3f\t%.3f"%(a,s) for a, s in zip(av[irow, 1:], std[irow, 1:]))
default="w_rdf.txt") parser.add_argument('-p', '--phosphate', help="the phosphate density", default="p_rdf.txt") parser.add_argument('-g', '--glycerol', help="the glycerol density", default="g_rdf.txt") parser.add_argument('-t', '--tail', help="the tail density", default="t_rdf.txt") args = parser.parse_args() wdens = parsing.parse2ndarray(args.water) pdens = parsing.parse2ndarray(args.phosphate) gdens = parsing.parse2ndarray(args.glycerol) tdens = parsing.parse2ndarray(args.tail) n = int(np.round(pdens.shape[0] * 0.5)) leftmaxi = np.argmax(pdens[:n, 2]) rightmaxi = np.argmax(pdens[n:, 2]) + n midz = pdens[leftmaxi, 0] + 0.5 * (pdens[rightmaxi, 0] - pdens[leftmaxi, 0]) try: midi = np.where(pdens[:, 0] == midz)[0][0] except: midi = np.where(pdens[:, 0] == midz)[0] if len(midi) == 0: midi = int(leftmaxi + 0.5 * (rightmaxi - leftmaxi))
help="the temperature used in the simulation", default=300.0) args = parser.parse_args() if len(args.files) == 0: print "No files specified so nothing to do." quit() boltzmann = 0.001982923700 RT = args.temp * wham.KB[wham.KJMOL] const = args.apl * np.power(10, -24.0) / (786.14 * 1.66 * np.power(10, -27.0)) densities = [] if args.densities is not None: densities = [parsing.parse2ndarray(d) for d in args.densities] f = plt.figure(figsize=(3.33, 2.5)) #a = fig1.add_axes((0.15,0.2,0.8,0.75)) a = f.add_axes((0.18, 0.2, 0.75, 0.75)) max_pmf = -1000 min_pmf = 1000 pmfs = [] for i, (filename, label) in enumerate(zip(args.files, args.labels)): pmfs.append(wham.UmbrellaPmf()) pmfs[-1].read(filename) pmfs[-1].z *= 0.1 transfer_dg = pmfs[-1].transfer_dg() wat_barr = pmfs[-1].waterlipid_barrier() pen_barr = pmfs[-1].penetration_barrier()
# Author: Samuel Genheden [email protected] import sys import numpy as np from sgenlib import parsing if __name__ == '__main__': data = [] for filename in sys.argv[1:]: data.append(parsing.parse2ndarray(filename)) data = np.asarray(data) av = data.mean(axis=0) std = data.std(axis=0) / np.sqrt(data.shape[0]) for irow in range(data.shape[1]): print data[0, irow, 0], "\t", print "\t".join("%.3f\t%.3f" % (a, s) for a, s in zip(av[irow, 1:], std[irow, 1:]))
# Author: Samuel Genheden [email protected] """ Script to calculate PMF properties, i.e. penetration and water/lipid barriers """ import sys import numpy as np from scipy.interpolate import interp1d from sgenlib import parsing from sgenlib import snum data = parsing.parse2ndarray(sys.argv[1]) x = data[:,0] pmf = data[:,1] err = data[:,2] mini = np.argmin(pmf) dGdepth = pmf[mini] - pmf[-1] dGpen = pmf[0] - pmf[mini] errdepth = np.sqrt(err[mini]**2 + err[-1]**2) errpen = np.sqrt(err[0]**2 + err[mini]**2) kT = 300*0.00831446210 expav = np.exp(-pmf/kT) expstd = np.abs(expav*(-err/kT)) bndint, bndstd = snum.trapz(x, expav, expstd)
if args.twin : plotax[1] = a.twinx() if args.ymax is not None and args.ymin is not None : for i, x in enumerate(args.vertical) : if args.vstyle is not None : stl = colors.style(args.vstyle[i]) else : stl = colors.style(i+1) a.plot([x,x],[args.ymin,args.ymax], stl, color='k') ylim = [10E10, -10E10] xlim = [10E10, -10E10] lines = [] for i, (filename,label, axis) in enumerate(zip(args.file,args.label, plotax)) : data = parsing.parse2ndarray(filename) if args.skip < 1 : n = int(np.floor(args.skip * data.shape[0])) else : n = args.skip data = data[n:,:] if args.multicol is not None : args.ycol = args.multicol[i] if data.shape[1] == 1 : args.ycol = 0 y = data[n:,args.ycol]*args.yfactor if data.shape[1] > 1 : x = data[n:,args.xcol]*args.xfactor else: x = np.arange(1,len(y)+1)*args.xfactor if args.stride is not None : x = x[::args.stride]
if np.sum(data[idx,1]) > 0 and np.sum(data[idx,1]) != data.shape[0]: break scoreddata = croc.ScoredData(data[idx,:]) bedrocs[i] = croc.BEDROC(scoreddata,1.0)['BEDROC'] return bedrocs if __name__ == '__main__': argparser = argparse.ArgumentParser(description="Script to compute BEDROC analysis for a groups of solutes") argparser.add_argument('-f', '--file', help="the results") argparser.add_argument('-l', '--labels', help="the labels") argparser.add_argument('-g', '--groupfolder', help="the folder for groups") argparser.add_argument('--debug', action="store_true", help="turn on debugging", default=False) argparser.add_argument('--plot', action="store_true", help="turn on plotting", default=False) args = argparser.parse_args() data = parsing.parse2ndarray(args.file) with open(args.labels, 'r') as f: labels = [line.strip() for line in f.readlines()] solutegroups = [] for label in labels: with open(os.path.join(args.groupfolder, label+".groups"), 'r') as f: groups = [line.strip() for line in f.readlines()] solutegroups.append(groups) if args.debug: print "Unique basic groups and their counts" uniquelist = {} for g in solutegroups: for l in g : if l not in uniquelist : uniquelist[l] = 0