Protein conformational changes

Consider these two states of a model protein, a native and a denatured (straight chain) state, obtained from a simulation. Here the conformational change could be of any kind. We load the structures of the two states:

using PDBTools
native_state = read_pdb(PDBTools.MJC_NATIVE, "protein")
desnat_state = read_pdb(PDBTools.MJC_DESNAT, "protein")
   Vector{Atom{Nothing}} with 1007 atoms with fields:
   index name resname chain   resnum  residue        x        y        z occup  beta model segname index_pdb
       1    N     SER     A        1        1   -0.132    2.450   -0.112  0.80  0.00     1       A         1
       2    C     SER     A        1        1    0.350    0.332   -1.257  0.80  0.00     1       A         2
⋮
    1006  CD2     HIS     A       69       69  -43.020 -137.591  -42.249  0.80  0.00     1       A      1006
    1007  HD2     HIS     A       69       69  -42.287 -137.082  -41.638  0.50  0.00     1       A      1007

The denatured state has a greater surface area than the native state. Thus, cosolvents that bind preferentially to the surface, as urea, should promote a stabilization of the denatured state. This is obtained with:

m = mvalue(native_state, desnat_state, "urea"; model=MoeserHorinek)
PDBTools.MValue{MoeserHorinek} - 69 residues - cosolvent: "urea"
    Total m-value: -1.2157167 kcal mol⁻¹
    Backbone contributions: -0.713593 kcal mol⁻¹
    Side-chain contributions: -0.5021237 kcal mol⁻¹

Where the tot, bb and sc fields contain, respectively, the total, backbone and side-chain contributions. The MValue object contains, additionally, the contribution of the side chain and backbone of each amino acid residue type for the m-value, in the residue_contributions_bb and residue_contributions_sc fields.

We can set the beta fields (for example) of the atoms as the residue contributions:

for (ir, r) in enumerate(eachresidue(native_state)) # iterate over residues
    # total contribution of residue ir
    c_residue = m.residue_contributions_sc[ir] + m.residue_contributions_bb[ir]
    for at in r # iterate over atoms in residue
        at.beta = c_residue
    end
end
write_pdb("contrib.pdb", native_state)

And with that get an image (here produced with VMD) of the contributions of the residues to the transfer free energies: