``````

In [1]:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set(style="ticks", color_codes=True, font_scale=1.5)
sns.set_style({"xtick.direction": "in", "ytick.direction": "in"})
%matplotlib inline

``````

## Thermodynamic definitions in the FES model

We start by importing the `thermo` module from the `prefur` package.

``````

In [2]:

from prefur import thermo

``````

Next we produce an instance of the `FES` class, for which we only need the protein sequence length.

``````

In [3]:

FES = thermo.FES(65)

``````

We then use functions for producing the thermodynamic functions as a function of the model order parameter \$n\$.

``````

In [4]:

FES.gen_entropy()
FES.gen_enthalpy()
FES.gen_heatcap()

``````
``````

In [5]:

fig, ax = plt.subplots(1,3, figsize=(10,3.))
ax[0].plot(FES.nat, FES.DSconf)
ax[1].plot(FES.nat, FES.DHo)
ax[2].plot(FES.nat, FES.DCp)
ax[0].set_xlabel("\$n\$")
ax[1].set_xlabel("\$n\$")
ax[2].set_xlabel("\$n\$")
ax[0].set_ylabel('\$\Delta S^{conf}(n)\$ (kJ/mol/K)')
ax[1].set_ylabel('\$\Delta H^{o}(n)\$ (kJ/mol)')
ax[2].set_ylabel('\$\Delta C_p(n)\$ (kJ/mol/K)')
plt.tight_layout()

``````
``````

``````

Using the thermodynamic functions above we can generate free energy profiles at any target temperature.

``````

In [6]:

fig, ax = plt.subplots(1,3, figsize=(10,3.2))
for i, t in enumerate(range(285,390,10)):
FES.gen_free(temp=t)
#ax[0].plot(FES.nat, FES.DSconf)
#ax[0].plot(FES.nat, FES.DHo)
ax[0].plot(FES.nat, FES.DS, color=plt.cm.brg(i/11.))
ax[1].plot(FES.nat, FES.DH, color=plt.cm.brg(i/11.))
ax[2].plot(FES.nat, FES.DG, \
color=plt.cm.brg(i/11.))
ax[0].set_xlabel("\$n\$")
ax[1].set_xlabel("\$n\$")
ax[2].set_xlabel("\$n\$")
ax[0].set_ylabel('\$\Delta S(T, n)\$ (kJ/mol/K)')
ax[1].set_ylabel('\$\Delta H(T, n)\$ (kJ/mol)')
ax[2].set_ylabel('\$\Delta G(T, n)\$ (kJ/mol/K)')

``````
``````

``````

Additionally, we can introduce chemical denaturation effects at any target temperature by incorporating denaturating an empirical functional form \$m\$.

``````

In [7]:

fig, ax = plt.subplots(1,2, figsize=(7,3.2))

denaturant = range(0,30,5)
for i,d in enumerate(denaturant):
FES.denature(d)
ax[1].plot(FES.nat, FES.DGdenat, color=plt.cm.brg(i/5.))
ax[0].plot(FES.nat, FES.mdenat, color='green', lw=3)
ax[0].set_xlabel("\$n\$")
ax[1].set_xlabel("\$F_D\$")
ax[0].set_ylabel('\$m\$', fontsize=18)
ax[1].set_ylabel('\$\Delta G(F_D,n)\$', fontsize=18)

plt.tight_layout()

``````
``````

``````
``````

In [8]:

fig, ax = plt.subplots(1,3, figsize=(12,3.5))

ax[0].plot(FES.nat, -FES.DSconf, c='darkred', lw=3)
axalt1 = ax[0].twinx()
axalt1.plot(FES.nat, FES.DHo, c='darkblue', lw=3)
for i, t in enumerate(range(285,390,10)):
FES.gen_free(temp=t)
ax[1].plot(FES.nat, FES.DG, \
color=plt.cm.RdYlBu_r(i/10.))

axalt2 = ax[2].twinx()
for i in range(0,30,5):
FES.denature(i)
ax[2].plot(FES.nat, FES.DGdenat, color=plt.cm.RdYlBu_r(i/20.))
axalt2.plot(FES.nat, FES.mdenat, color='green', lw=3)

ax[0].set_xlabel("\$n\$", fontsize=18)
ax[1].set_xlabel("\$n\$", fontsize=18)
ax[2].set_xlabel("\$n\$", fontsize=18)

ax[0].set_ylabel('\$-\Delta S^{conf}(n)\$', fontsize=18)
ax[1].set_ylabel('\$\Delta G(n)\$', fontsize=18)
axalt1.set_ylabel('\$\Delta H^{o}(n)\$', fontsize=18)
axalt2.set_ylabel('\$m\$', fontsize=18)
ax[2].set_ylabel('\$\Delta G(n)\$', fontsize=18)

ax[0].yaxis.label.set_color('darkred')
axalt1.yaxis.label.set_color('darkblue')
axalt2.yaxis.label.set_color('green')

ax[0].set_ylim(-1.2,0)
ax[0].set_yticks(np.arange(-1,0.2,0.5))
ax[0].set_xticks(np.arange(0,1.2,0.5))
ax[1].set_xticks(np.arange(0,1.2,0.5))
ax[2].set_xticks(np.arange(0,1.2,0.5))
axalt1.set_yticks(range(0,500,200))

ax[0].annotate("A", xy=(0.8, 0.85), fontsize=24, xycoords=ax[0].get_window_extent)
ax[1].annotate("B", xy=(0.1, 0.85), fontsize=24, xycoords=ax[1].get_window_extent)
ax[2].annotate("C", xy=(0.1, 0.85), fontsize=24, xycoords=ax[2].get_window_extent)

#fig.savefig("thermo_fun.png", dpi=300)

``````
``````

``````
``````

In [9]:

fig, ax = plt.subplots(1, 2, figsize=(10,3.5))

temps = range(280,390,5)
pf = []
pu = []
DGeqT = []
for i, t in enumerate(temps):
FES.gen_free(temp=t)
a,b,c = thermo.stability(FES.nat, FES.DG)
pf.append(a)
pu.append(b)
DGeqT.append(c)
ax[0].plot(temps, DGeqT, '-', lw=3)
#axalt0 = ax[0].twinx()
#axalt0.plot(temps, pf, temps, pu)

denat = range(0,30,2)
pf = []
pu = []
DGeqD = []
for i in denat:
FES.denature(i)
a,b,c = thermo.stability(FES.nat, FES.DGdenat)
pf.append(a)
pu.append(b)
DGeqD.append(c)
ax[1].plot(denat, DGeqD, '-', lw=3)
#axalt1 = ax[1].twinx()
#axalt1.plot(denat, pf, denat, pu)

ax[0].set_xlim(280,360)
ax[1].set_xlim(0,25)
ax[0].set_xticks(range(280,370,20))
ax[0].set_ylim(-15,10)
ax[1].set_ylim(-15,10)
ax[0].axhline(0, 0, 500, ls='dashed', c='k', alpha=0.5)
ax[1].axhline(0, 0, 30, ls='dashed', c='k', alpha=0.5)
ax[0].set_ylabel('\$\Delta G_{eq}(T)\$', fontsize=18)
ax[0].set_xlabel('\$T\$ (K)', fontsize=18)
ax[1].set_ylabel('\$\Delta G_{eq}(F_D)\$', fontsize=18)
ax[1].set_xlabel('\$F_D\$ (kJ/mol)', fontsize=18)

ax[0].annotate("D", xy=(0.9, 0.85), fontsize=24, xycoords=ax[0].get_window_extent)
ax[1].annotate("E", xy=(0.9, 0.85), fontsize=24, xycoords=ax[1].get_window_extent)

#fig.savefig("thermo_free.png", dpi=300)

``````
``````

``````
``````

In [ ]:

``````