Example #1
0
 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
Example #2
0
    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
Example #3
0
    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']
Example #4
0
    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
Example #5
0
    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']
Example #6
0
    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
Example #7
0
    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