def loadModels(self): #print self.modelsfile if self.modelsfile != '': try: Fitting.loadModelsFile(self.modelsfile) except: pass #print Fitting.currentmodels.keys() return
def fitElwellSchellman(self,E=None, d=None, xy=None,transwidth=50, invert=False,show=True,figname=None): """Fit entire raw data simultaneously to the three main thermodynamic parameters using Elwell/Schellman method""" if E !=None: ek = E.getDataset(d) x,y,a, xerr,yerr = ek.getAll() elif xy!=None: x,y = xy else: return if invert == True: y = [max(y)-i for i in y[:]] f=plt.figure(figsize=(10,5)) ax=f.add_subplot(121) p=ax.plot(x,y,'o',alpha=0.5) ax.set_xlabel('T');ax.set_xlabel('mdeg') ax.set_title('raw data') x1,y1,x,y = self.transformCD(x,y,transwidth,ax) t=[];dg=[] R=8.3144e-3 for T,fu in zip(x,y): if fu>=1 or fu<=0: continue K = fu/(1-fu) deltaGt = -R * T * math.log(K) dg.append(deltaGt) t.append(T) ax1=f.add_subplot(122) p=ax1.plot(t,dg,'x',mew=2,color='black') ax1.set_xlabel('T'); ax1.set_ylabel('dG(T)') ax.set_title('stability curve') A,X=Fitting.doFit(expdata=zip(t,dg),model='schellman',grad=1e-9,conv=1e-9) fity = X.getFitLine(t) p=ax1.plot(t,fity,'r',lw=2) fd=X.getFitDict() self.drawParams(ax1,fd) deltaH=fd['deltaH']; deltacp=fd['deltacp']; Tm=fd['Tm'] f.suptitle("Method 2 - deltaH: %2.2f deltaCp: %2.2e Tm: %2.2f" %(deltaH,deltacp,Tm),size=18) if show == True: self.showTkFigure(f) if figname == None: figname = d figname = figname.replace('.','_') fname = figname+'m1'+'.png' f.savefig(fname,dpi=300) print 'plot saved to %s' %os.path.abspath(fname) if E!=None: fdata = Fitting.makeFitData(X.name,vrs=X.variables) E.insertDataset(xydata=[t,dg], newname=d+'_vanthoff2',replace=True,fit=fdata) #E.saveProject() return deltaH, Tm, deltacp
def findBestModel(self): """Determine best fit model using SS F-test""" models = self.modelselector.getcurselection() if len(models)<2: print 'select 2 or more models' return fitters= [] for m in models: model = self.modelsdict[m] X = self.createFitter(model, m) fitters.append(X) Fitting.updateModels(self.modelsdict) self.previewer.findBestModel(models) return
def testFitter(self): """Parse the entry fields and create the fitter""" self.currentmodel = self.parseValues() X = self.createFitter(self.currentmodel, self.currentname) X.guess_start() if self.previewer.plotfunctionvar.get() == 1: self.previewer.plotframe.clearData() self.previewer.plotframe.updateFit(X, showfitvars=True) else: X.fit(rounds=60) self.updateModelsDict() #update the global fitting models since the plotter uses them Fitting.updateModels(self.modelsdict) self.previewer.finishFit(X) return
def __init__(self, parent=None): self.parent=parent if not self.parent: Frame.__init__(self) self.main=self.master else: self.main=Toplevel() #self.master=self.main self.main.title('Model Design') ws = self.main.winfo_screenwidth() hs = self.main.winfo_screenheight() w = 900; h=600 x = (ws/2)-(w/2); y = (hs/2)-(h/2) self.main.geometry('%dx%d+%d+%d' % (w,h,x,y)) self.main.protocol('WM_DELETE_WINDOW',self.quit) self.tableformat = {'cellwidth':50, 'thefont':"Arial 10", 'rowheight':16, 'editable':False, 'rowselectedcolor':'yellow'} self.filename = None self.modelsdict = Fitting.createModels() self.setupGUI() self.currentname = 'Linear' self.loadModel(self.currentname) return
def breslauerMethod(self,E=None, d=None, xy=None,invert=False, show=True,figname=None): """Finds slope of trans region and plugs this in to equation http://www.springerlink.com/content/r34n0201g30563u7/ """ if E !=None: ek = E.getDataset(d) x,y,a, xerr,yerr = ek.getAll() elif xy!=None: x,y = xy else: return f=plt.figure(figsize=(10,6)) ax=f.add_subplot(111) ax.set_xlabel('T') p=ax.plot(x,y,'o',alpha=0.5) d50 = self.guessMidpoint(x,y) A,X=Fitting.doFit(expdata=zip(x,y),model='Unfolding',conv=1e-7,noiter=60, guess=False,startvalues=[1,1,1,1,1,d50]) fity = X.getFitLine(x) p=ax.plot(x,fity,'r',lw=2) fd=X.getFitDict() self.drawParams(ax,fd) Tm = fd['d50']; m = fd['m'] R = 8.3144e-3 deltaH = R * math.pow(Tm,2) * m f.suptitle("Method 4 - deltaH: %2.2f Tm: %2.2f" %(deltaH,Tm),size=18) if show == True: self.showTkFigure(f) if figname != None: figname = figname.replace('.','_') f.savefig(figname) plt.close() return deltaH, Tm
def createFitter(self, model, name): """Create fitter from the current model entry values""" fitclass = Fitting.createClass(**model) x,y = self.previewer.getCurrentData() X = fitclass(exp_data=zip(x,y),variables=None, callback=self.previewer.updateFit, name=name) return X
def findBestModel(self, models, callback=None): """Determine best fit model using SS F-test""" dset = self.datasets[self.dsindex] ek = self.E.getDataset(dset) fitdata,p = Fitting.findBestModel(ek, models=models, silent=True) best = fitdata['model'] text = 'Best model is %s with p value=%2.2e' %(best,p) tkMessageBox.showinfo('Best fit model result',text) return
def finishFit(self, X): """Call when fitting done""" d = self.datasets[self.dsindex] model = X.getResult()['model'] fitdata = Fitting.makeFitData(model, X.variables, X.getError()) self.E.setFitData(d, fitdata) self.replot() self.stop = False return
def findVariableName(self, model, i=0): """Find a parameter name for the given model at index i, used so we don't cause an error when doing processFits when no variable is given in the conf file""" X = Fitting.getFitter(model) if X == None: print 'no fitter found for this model name' return 'a' varname = X.getVarNames()[i] return varname
def findVariableName(self, model, i=0): """Find a parameter name for the given model at index i, used so we don't cause an error when doing processFits when no variable is given in the conf file""" X = Fitting.getFitter(model) if X==None: print 'no fitter found for this model name' return 'a' varname = X.getVarNames()[i] return varname
def transformCD(self, x, y, transwidth=None, ax=None): """Transform raw data into fraction unfolded per temp value, by fitting to a general unfolding equation that extracts baseline/slopes""" #fit baseline slopes and get intercepts d50 = self.guessMidpoint(x, y) print 'fitting to get baseline slopes and intercepts..' print 'midpoint is %s' % d50 A, X = Fitting.doFit(expdata=zip(x, y), model='Unfolding', noiter=50, silent=True, guess=False, startvalues=[1, 1, 1, 1, 1, d50]) #print X.getResult() fity = X.getFitLine(x) fd = X.getFitDict() if ax != None: p = ax.plot(x, fity, 'r', lw=2) self.drawParams(ax, fd) #we then use slopes and intercepts get frac unfolded at each temp mn = fd['bn'] mu = fd['bd'] #slopes #if mu>0.01: mu = 0.01 yn = fd['an'] yu = fd['ad'] #intercepts d50 = fd['d50'] m = fd['m'] t = [] f = [] #print mu, mn for T, yo in zip(x, y): fu = (yo - (yn + mn * T)) / ((yu + mu * T) - (yn + mn * T)) #print fu, (yo-(yn+mn*T)), (m), mu, mn #if f>0: f.append(fu) t.append(T) #try to take useful transition region of data at, af = t, f diff = 1e5 if transwidth != None: for i in t: d = abs(i - d50) if d < diff: mid = t.index(i) diff = d L = int(mid - transwidth) U = int(mid + transwidth) t, f = t[L:U], f[L:U] return at, af, t, f
def simulateCD(self,noise=1.0): """Simulate some CD spec data""" x=list(numpy.arange(290,380,0.2)); y=[] X=Fitting.getFitter(model='Unfolding', vrs=[-16, 0.01, -11.6, 0.01, 2.7, 324]) fity = X.getFitLine(x) for i in fity: noise=numpy.random.normal(i, 1.0/2) y.append(i+noise) cw=csv.writer(open('cd.csv','w')) for row in zip(x,y): cw.writerow(row) return x,y
def simulateCD(self, noise=1.0): """Simulate some CD spec data""" x = list(numpy.arange(290, 380, 0.2)) y = [] X = Fitting.getFitter(model='Unfolding', vrs=[-16, 0.01, -11.6, 0.01, 2.7, 324]) fity = X.getFitLine(x) for i in fity: noise = numpy.random.normal(i, 1.0 / 2) y.append(i + noise) cw = csv.writer(open('cd.csv', 'w')) for row in zip(x, y): cw.writerow(row) return x, y
def breslauerMethod(self, E=None, d=None, xy=None, invert=False, show=True, figname=None): """Finds slope of trans region and plugs this in to equation http://www.springerlink.com/content/r34n0201g30563u7/ """ if E != None: ek = E.getDataset(d) x, y, a, xerr, yerr = ek.getAll() elif xy != None: x, y = xy else: return f = plt.figure(figsize=(10, 6)) ax = f.add_subplot(111) ax.set_xlabel('T') p = ax.plot(x, y, 'o', alpha=0.5) d50 = self.guessMidpoint(x, y) A, X = Fitting.doFit(expdata=zip(x, y), model='Unfolding', conv=1e-7, noiter=60, guess=False, startvalues=[1, 1, 1, 1, 1, d50]) fity = X.getFitLine(x) p = ax.plot(x, fity, 'r', lw=2) fd = X.getFitDict() self.drawParams(ax, fd) Tm = fd['d50'] m = fd['m'] R = 8.3144e-3 deltaH = R * math.pow(Tm, 2) * m f.suptitle("Method 4 - deltaH: %2.2f Tm: %2.2f" % (deltaH, Tm), size=18) if show == True: self.showTkFigure(f) if figname != None: figname = figname.replace('.', '_') f.savefig(figname) plt.close() return deltaH, Tm
def transformCD(self,x,y,transwidth=None,ax=None): """Transform raw data into fraction unfolded per temp value, by fitting to a general unfolding equation that extracts baseline/slopes""" #fit baseline slopes and get intercepts d50 = self.guessMidpoint(x,y) print 'fitting to get baseline slopes and intercepts..' print 'midpoint is %s' %d50 A,X=Fitting.doFit(expdata=zip(x,y),model='Unfolding',noiter=50,silent=True, guess=False,startvalues=[1,1,1,1,1,d50]) #print X.getResult() fity = X.getFitLine(x) fd=X.getFitDict() if ax!=None: p=ax.plot(x,fity,'r',lw=2) self.drawParams(ax,fd) #we then use slopes and intercepts get frac unfolded at each temp mn = fd['bn']; mu = fd['bd'] #slopes #if mu>0.01: mu = 0.01 yn = fd['an']; yu = fd['ad'] #intercepts d50 = fd['d50']; m = fd['m'] t=[]; f=[] #print mu, mn for T,yo in zip(x,y): fu = (yo-(yn+mn*T)) / ((yu+mu*T)-(yn+mn*T)) #print fu, (yo-(yn+mn*T)), (m), mu, mn #if f>0: f.append(fu) t.append(T) #try to take useful transition region of data at,af=t,f diff=1e5 if transwidth != None: for i in t: d=abs(i-d50) if d<diff: mid = t.index(i) diff=d L=int(mid-transwidth); U=int(mid+transwidth) t,f = t[L:U], f[L:U] return at,af,t,f
def fitElwellSchellman(self, E=None, d=None, xy=None, transwidth=50, invert=False, show=True, figname=None): """Fit entire raw data simultaneously to the three main thermodynamic parameters using Elwell/Schellman method""" if E != None: ek = E.getDataset(d) x, y, a, xerr, yerr = ek.getAll() elif xy != None: x, y = xy else: return if invert == True: y = [max(y) - i for i in y[:]] f = plt.figure(figsize=(10, 5)) ax = f.add_subplot(121) p = ax.plot(x, y, 'o', alpha=0.5) ax.set_xlabel('T') ax.set_xlabel('mdeg') ax.set_title('raw data') x1, y1, x, y = self.transformCD(x, y, transwidth, ax) t = [] dg = [] R = 8.3144e-3 for T, fu in zip(x, y): if fu >= 1 or fu <= 0: continue K = fu / (1 - fu) deltaGt = -R * T * math.log(K) dg.append(deltaGt) t.append(T) ax1 = f.add_subplot(122) p = ax1.plot(t, dg, 'x', mew=2, color='black') ax1.set_xlabel('T') ax1.set_ylabel('dG(T)') ax.set_title('stability curve') A, X = Fitting.doFit(expdata=zip(t, dg), model='schellman', grad=1e-9, conv=1e-9) fity = X.getFitLine(t) p = ax1.plot(t, fity, 'r', lw=2) fd = X.getFitDict() self.drawParams(ax1, fd) deltaH = fd['deltaH'] deltacp = fd['deltacp'] Tm = fd['Tm'] f.suptitle("Method 2 - deltaH: %2.2f deltaCp: %2.2e Tm: %2.2f" % (deltaH, deltacp, Tm), size=18) if show == True: self.showTkFigure(f) if figname == None: figname = d figname = figname.replace('.', '_') fname = figname + 'm1' + '.png' f.savefig(fname, dpi=300) print 'plot saved to %s' % os.path.abspath(fname) if E != None: fdata = Fitting.makeFitData(X.name, vrs=X.variables) E.insertDataset(xydata=[t, dg], newname=d + '_vanthoff2', replace=True, fit=fdata) #E.saveProject() return deltaH, Tm, deltacp
def fitDifferentialCurve(self, E=None, d=None, xy=None, smooth=0, invert=False, show=True, figname=None): """Derive differential denaturation curve and fit to get deltaH We smooth the unfolding curve and then differentiate and finally fit to a 3 parameter equation. See http://www.ncbi.nlm.nih.gov/pubmed/10933511""" if E != None: ek = E.getDataset(d) x, y, a, xerr, yerr = ek.getAll() elif xy != None: x, y = xy else: return if invert == True: y = [max(y) - i for i in y[:]] leg = [] lines = [] f = plt.figure(figsize=(10, 5)) ax = f.add_subplot(121) p = ax.plot(x, y, 'x', color='black', mew=3, alpha=0.5) leg.append(p) lines.append('original') #smooth if smooth == 0: smooth = int(len(x) / 15.0) s = self.smoothListGaussian(y, smooth) p = ax.plot(x[:len(s) - 1], s[:-1], lw=3) leg.append(p) lines.append('smoothed') ax.set_title("original data") ax.set_xlabel('T') ax1 = f.add_subplot(122) #differentiate dx, ds = self.differentiate(x[:len(s)], s) #ds = [i/max(ds) for i in ds] ds = [i * 10 for i in ds] cw = csv.writer(open('diffcd.csv', 'w')) for row in zip(dx, ds): cw.writerow(row) p = ax1.plot(dx, ds, '-', lw=1.5, alpha=0.7, color='black') leg.append(p) lines.append('differential') ax1.set_title("differential denaturation") ax1.set_xlabel('T') ax1.set_ylabel('dsignal/dT') A, X = Fitting.doFit(expdata=zip(dx, ds), model='diffDenaturation', grad=1e-9, conv=1e-10) fity = X.getFitLine(dx) p = ax1.plot(dx, fity, 'r', lw=2) leg.append(p) lines.append('fit') t = X.getFitDict() self.drawParams(ax1, t) dHkcal = t['deltaH'] / 4.184 f.suptitle('Method 3 - deltaH: %2.2f kJ/mol (%2.2f kcal) Tm: %2.2f' % (t['deltaH'], dHkcal, t['Tm']), size=18) ax.legend(leg, lines, loc='best', prop=FontProperties(size="smaller")) #f.subplots_adjust(hspace=0.8) if show == True: self.showTkFigure(f) if figname != None: figname = figname.replace('.', '_') f.savefig(figname + 'm3', dpi=300) plt.close() if E != None: fdata = Fitting.makeFitData(X.name, vrs=X.variables) E.insertDataset(xydata=[dx, ds], newname=d + '_diff', replace=True, fit=fdata) #E.saveProject() return t['deltaH'], t['Tm']
def fitDifferentialCurve(self, E=None, d=None, xy=None,smooth=0, invert=False,show=True,figname=None): """Derive differential denaturation curve and fit to get deltaH We smooth the unfolding curve and then differentiate and finally fit to a 3 parameter equation. See http://www.ncbi.nlm.nih.gov/pubmed/10933511""" if E !=None: ek = E.getDataset(d) x,y,a, xerr,yerr = ek.getAll() elif xy!=None: x,y = xy else: return if invert == True: y = [max(y)-i for i in y[:]] leg=[]; lines=[] f=plt.figure(figsize=(10,5)) ax=f.add_subplot(121) p=ax.plot(x,y,'x',color='black',mew=3,alpha=0.5) leg.append(p); lines.append('original') #smooth if smooth == 0: smooth=int(len(x)/15.0) s=self.smoothListGaussian(y,smooth) p=ax.plot(x[:len(s)-1],s[:-1],lw=3) leg.append(p); lines.append('smoothed') ax.set_title("original data") ax.set_xlabel('T') ax1=f.add_subplot(122) #differentiate dx,ds = self.differentiate(x[:len(s)],s) #ds = [i/max(ds) for i in ds] ds = [i*10 for i in ds] cw=csv.writer(open('diffcd.csv','w')) for row in zip(dx,ds): cw.writerow(row) p=ax1.plot(dx,ds,'-',lw=1.5,alpha=0.7,color='black') leg.append(p); lines.append('differential') ax1.set_title("differential denaturation") ax1.set_xlabel('T'); ax1.set_ylabel('dsignal/dT') A,X=Fitting.doFit(expdata=zip(dx,ds),model='diffDenaturation',grad=1e-9,conv=1e-10) fity = X.getFitLine(dx) p=ax1.plot(dx,fity,'r',lw=2) leg.append(p); lines.append('fit') t=X.getFitDict() self.drawParams(ax1,t) dHkcal=t['deltaH']/4.184 f.suptitle('Method 3 - deltaH: %2.2f kJ/mol (%2.2f kcal) Tm: %2.2f' %(t['deltaH'],dHkcal,t['Tm']),size=18) ax.legend(leg,lines,loc='best',prop=FontProperties(size="smaller")) #f.subplots_adjust(hspace=0.8) if show == True: self.showTkFigure(f) if figname != None: figname = figname.replace('.','_') f.savefig(figname+'m3',dpi=300) plt.close() if E!=None: fdata = Fitting.makeFitData(X.name,vrs=X.variables) E.insertDataset(xydata=[dx,ds], newname=d+'_diff',replace=True,fit=fdata) #E.saveProject() return t['deltaH'],t['Tm']
def do_search(self, globalop, proteinop, proteins, residues, nucleus, pka): """Do searches for the various parameters, name, pka etc""" import re, urllib from PEATDB.PEATTables import PEATTableModel import PEATDB.Ekin.Fitting as Fitting from PEATDB.Ekin.Web import EkinWeb DB = self.DB EW = EkinWeb() ekincols = DB.ekintypes found=[] protlist = proteins.split(' ') residuelist = residues.split(' ') def createPhrase(items, op): if op == 'or': logicsymbol = '|' else: logicsymbol = '+' itemlist = items.split(' ') phrase ='' c=1 for i in itemlist: if c == len(itemlist): phrase = phrase + i else: phrase = phrase + i + logicsymbol c=c+1 return re.compile(phrase, re.IGNORECASE) #if there is a protein name entered, get the list of proteins/records to use #otherwise use all records to search for the other keys names = [] keywords = {} for p in DB.getRecs(): name = DB[p].name names.append((name,p)) if hasattr(DB[p], 'keywords'): keywords[name] = DB[p].keywords else: keywords[name] = '' names.sort() #create search expressions s_protein = createPhrase(proteins, proteinop) s_residue = createPhrase(residues, 'or') pkarange = pka.split('-') #do search for name in names: proteinname = name[0] protein = name[1] if s_protein.search(proteinname) or s_protein.search(keywords[proteinname]): found.append(protein) if len(found)==0: print '<h2>Sorry, no proteins found that match this name. <h2>' return elif residues == '' and pka == '': self.show_DB(selected=found) return found #now search for the other keys inside selected proteins if needed ekinfound={}; foundfits={} ignore =['__fit_matches__', '__Exp_Meta_Dat__', '__datatabs_fits__'] kys = list(DB.getRecs()) kys.sort() if len(found) == 0 or globalop == 'or': found = DB.getRecs() print '<table id="mytable" cellspacing=0 align=center>' '''search recs for residue and pkarange and add dataset names to new ekinfound dict''' for protein in found: for col in DB[protein].keys(): if nucleus != 'any': if nucleus not in col: continue E = DB[protein][col] if DB['userfields'].has_key(col): fieldtype=DB['userfields'][col]['field_type'] else: fieldtype=None if fieldtype in ekincols: dk = E.datasets fits = E.__datatabs_fits__ for k in dk: meta = E.getMetaData(k) try: thisres = meta['residue'] except: thisres = k if thisres == None: thisres = k if residues != '': if s_residue.search(thisres) and not k in ignore: if not ekinfound.has_key(protein+'$'+col): ekinfound[protein+'$'+col]=[] ekinfound[protein+'$'+col].append(k) if pka != '': foundpka = 0 if k in fits.keys(): if fits[k] == None: continue if fits[k].has_key('model'): model = fits[k]['model'] else: continue if not foundfits.has_key(protein+'$'+col): foundfits[protein+'$'+col]={} X = Fitting.getFitter(model) pnames = X.varnames i=0 #check if first num is larger, then swap try: pk1=float(pkarange[0]) pk2=float(pkarange[1]) except: print '<h2> Error: pka values are not valid </h2>' return if pk1 > pk2: tmp = pk1 pk1 = pk2 pk2 = tmp #iterate thru parameter names and match any pK fields #this code is not that efficient! for p in pnames: if 'pK' in p: pka = fits[k][i] if pka >= pk1 and pka <= pk2: foundpka=1 i=i+1 #if match is 'ANY', just append dataset if not there already #also for case if no residue value entered if globalop == 'or' or residues == '': if foundpka == 1: if not ekinfound.has_key(protein+'$'+col): ekinfound[protein+'$'+col]=[] if not k in ekinfound[protein+'$'+col]: ekinfound[protein+'$'+col].append(k) #if match is 'ALL', need to check dataset already found #and if no pka found, remove it. if both are true keep it elif globalop == 'and': if foundpka == 0: if ekinfound.has_key(protein+'$'+col) and k in ekinfound[protein+'$'+col]: #print 'removing', protein, col ekinfound[protein+'$'+col].remove(k) foundfits[protein+'$'+col][k]=fits[k] #check for empty fields in ekinfound dict and delete them.. for d in ekinfound.keys(): if len(ekinfound[d])==0: del(ekinfound[d]) #if no results, just say that and return if len(ekinfound)==0: print '<h2> Sorry, no records found that match these parameters. </h2>' return #top display button and options print '<form name="resultsform" action="%s/main.cgi" METHOD="POST" ENCTYPE="multipart/form-data">' %self.bindir self.write_sessionkey('show_datasets') print '<td valign=top align=right colspan=3> <input type=submit value="display selected" name=submit>' print '<label><input type=checkbox name="plotoption" value=3>single graph</label>' print '<label><input type=checkbox name="normalise" value=1>normalise</label>' print '<label><input type=checkbox name="logx" value=1>log-x</label>' print '<label><input type=checkbox name="logy" value=1>log-y</label>' print '<label><input type=checkbox name="legend" value=1>legend</label>' print '<input type=button value="Check All" onClick="checkAll(document.resultsform.residue)">' print '<input type=button value="Uncheck All" onClick="uncheckAll(document.resultsform.residue)"></td>' print '</tr>' #header cols=['protein','column','residues'] for c in cols: print '<th>'+c+'</th>' print '</tr>' ekys = ekinfound.keys() ekys.sort() r=1 for k in ekys: if r % 2 == 0: cls = "spec" else: cls = "" fields = k.split('$') protein = fields[0] column = fields[1] proteinname = DB[protein]['name'] print '<tr>' print '<th class="spec">%s</th> <td> %s </td>' %(proteinname, column) print '<td>' for residue in ekinfound[k]: residuefield = k+"$"+residue fithtml = '' try: print '<input type=checkbox id="residue" name="residue" value=%s>' %("'"+residuefield+"'") except: print 'UnicodeEncodeError' continue urlfields = urllib.urlencode({'login':self.user,'project':self.project, 'residue': residuefield,'action': 'show_datasets'}) print '<a href="/cgi-bin/titration_db/main.cgi?%s" target="_blank">%s</a>'\ % (urlfields, residue) print '</tr>' r=r+1 print '</form>' print '</table>' self.footer() return
def fitVantHoff(self, E=None, d=None, xy=None, transwidth=80, invert=False, show=True, figname=None): """Derive fraction unfolded, get K and fit to Van't Hoff. see http://www.jbc.org/content/277/43/40717.full or http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2144003/ """ if E != None: if not d in E.datasets: print 'no such dataset, %s' % d print 'available datasets:', E.datasets return ek = E.getDataset(d) x, y = ek.getxySorted() elif xy != None: x, y = xy if 'Convert Celsius-Kelvin' in self.conversions.getcurselection(): x = [i + 273 for i in x] if invert == True: y = [max(y) - i for i in y[:]] f = plt.figure(figsize=(18, 6)) ax = f.add_subplot(131) p = ax.plot(x, y, 'o', alpha=0.6) ax.set_xlabel('T(K)') ax.set_ylabel('mdeg') ax.set_title('raw data') x1, y1, x, y = self.transformCD(x, y, transwidth, ax) cw = csv.writer(open('frac_unfolded_' + d + '.csv', 'w')) cw.writerow(['temp', 'frac']) for i in zip(x1, y1): cw.writerow(i) #derive lnK vs 1/T t = [] k = [] for T, fu in zip(x, y): if fu >= 1 or fu <= 0: continue K = fu / (1 - fu) klog = math.log(K) k.append(klog) t.append(1 / T) if len(t) < 2: return None, None, None ax = f.add_subplot(132) p = ax.plot(x1, y1, 'o', color='g', alpha=0.6) ax.set_xlabel('T(K)') ax.set_ylabel('fu') ax.set_title('fraction unfolded') ax = f.add_subplot(133) p = ax.plot(t, k, 'x', mew=2, color='black') ax.set_xlabel('1/T') #(r'$1/T ($K^-1)$') ax.set_ylabel('ln K') formatter = matplotlib.ticker.ScalarFormatter() formatter.set_scientific(True) formatter.set_powerlimits((0, 0)) ax.xaxis.set_major_formatter(formatter) for l in ax.get_xticklabels(): l.set_rotation(30) #fit this van't hoff plot A, X = Fitting.doFit(expdata=zip(t, k), model='Linear') fitk = X.getFitLine(t) p = ax.plot(t, fitk, 'r', lw=2) fd = X.getFitDict() #self.drawParams(ax,fd) #slope is deltaH/R/1000 in kJ deltaH = -fd['a'] * self.R / 1000 deltaS = fd['b'] * self.R / 1000 f.suptitle("Method 1 - deltaH: %2.2f deltaS: %2.2f" % (deltaH, deltaS), size=18) f.subplots_adjust(bottom=0.15, top=0.85) if show == True: self.showTkFigure(f) if figname == None: figname = d figname = figname.replace('.', '_') fname = figname + 'm1' + '.png' f.savefig(fname, dpi=300) print 'plot saved to %s' % os.path.abspath(fname) #plt.close() if E != None: fdata = Fitting.makeFitData(X.name, vrs=X.variables) E.insertDataset(xydata=[t, k], newname=d + '_vanthoff', replace=True, fit=fdata) #E.saveProject() return deltaH, deltaS, ax
def fitVantHoff(self, E=None, d=None, xy=None, transwidth=80, invert=False, show=True, figname=None): """Derive fraction unfolded, get K and fit to Van't Hoff. see http://www.jbc.org/content/277/43/40717.full or http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2144003/ """ if E != None: if not d in E.datasets: print 'no such dataset, %s' %d print 'available datasets:', E.datasets return ek = E.getDataset(d) x,y = ek.getxySorted() elif xy!=None: x,y = xy if 'Convert Celsius-Kelvin' in self.conversions.getcurselection(): x = [i+273 for i in x] if invert == True: y = [max(y)-i for i in y[:]] f=plt.figure(figsize=(18,6)) ax=f.add_subplot(131) p=ax.plot(x,y,'o',alpha=0.6) ax.set_xlabel('T(K)'); ax.set_ylabel('mdeg') ax.set_title('raw data') x1,y1,x,y = self.transformCD(x,y,transwidth,ax) cw=csv.writer(open('frac_unfolded_'+d+'.csv','w')) cw.writerow(['temp','frac']) for i in zip(x1,y1): cw.writerow(i) #derive lnK vs 1/T t=[]; k=[] for T,fu in zip(x,y): if fu>=1 or fu<=0: continue K = fu/(1-fu) klog = math.log(K) k.append(klog) t.append(1/T) if len(t)<2: return None, None, None ax=f.add_subplot(132) p=ax.plot(x1,y1,'o',color='g',alpha=0.6) ax.set_xlabel('T(K)'); ax.set_ylabel('fu') ax.set_title('fraction unfolded') ax=f.add_subplot(133) p=ax.plot(t,k,'x',mew=2,color='black') ax.set_xlabel('1/T')#(r'$1/T ($K^-1)$') ax.set_ylabel('ln K') formatter = matplotlib.ticker.ScalarFormatter() formatter.set_scientific(True) formatter.set_powerlimits((0,0)) ax.xaxis.set_major_formatter(formatter) for l in ax.get_xticklabels(): l.set_rotation(30) #fit this van't hoff plot A,X=Fitting.doFit(expdata=zip(t,k),model='Linear') fitk = X.getFitLine(t) p=ax.plot(t,fitk,'r',lw=2) fd=X.getFitDict() #self.drawParams(ax,fd) #slope is deltaH/R/1000 in kJ deltaH = -fd['a']*self.R/1000 deltaS = fd['b']*self.R/1000 f.suptitle("Method 1 - deltaH: %2.2f deltaS: %2.2f" %(deltaH,deltaS),size=18) f.subplots_adjust(bottom=0.15,top=0.85) if show==True: self.showTkFigure(f) if figname == None: figname = d figname = figname.replace('.','_') fname = figname+'m1'+'.png' f.savefig(fname,dpi=300) print 'plot saved to %s' %os.path.abspath(fname) #plt.close() if E!=None: fdata = Fitting.makeFitData(X.name,vrs=X.variables) E.insertDataset(xydata=[t,k], newname=d+'_vanthoff',replace=True,fit=fdata) #E.saveProject() return deltaH, deltaS, ax