Hello everyone!

I constructed phi/psi plot using only rama energy term and noticed a strange thing (attached file). In a place where the angle accepts value 0 score function gives minimum value. Example with alanine chain:

pose1.set_phi(4, 10);

core::Real t(0.0);

pose1.set_psi(4, t);

(*scorefx)( pose1 );

std::cout << std::scientific << t << '\t' << pose1.energies().total_energy() << std::endl;

t = std::numeric_limits<double>::min();

pose1.set_psi(4, t);

(*scorefx)( pose1 );

std::cout << std::scientific << t << '\t' << pose1.energies().total_energy() << std::endl;

This code gives:

0.000000e+00 5.435180e+00

2.225074e-308 1.424486e+01

Is it actually correct? As I know some others energy terms do not react to explicit zero in such way.

Python code to reproduce picture:

from rosetta import *

import matplotlib.pyplot as plt

import numpy as np

rosetta.init()

scorefxn = ScoreFunction()

scorefxn.set_weight(rama, 1)

p=Pose()

make_pose_from_sequence(p, "AAAAAAAAAA","fa_standard")

def evaluate(p, a, b):

p.set_phi(4, a)

p.set_psi(4, b)

scorefxn(p)

return p.energies().total_energy()

for i in range(1,p.total_residue()):

p.set_phi(i, -135.0)

p.set_psi(i, 135.0)

p.set_omega(i, 180.0)

p.dump_pdb("init.pdb")

x = np.arange(-180.0, 180.0, 2.5)

y = np.arange(-180.0, 180.0, 2.5)

values = np.zeros(shape=(len(x),len(y)))

for i in range(len(x)):

for j in range(len(y)):

values[i][j] = evaluate(p, x[i], y[j])

plt.imshow(values);

plt.colorbar();

plt.axis('equal')

plt.show()

Thank you in advance.

Attachment | Size |
---|---|

rama_phi_psi.png | 136 KB |

Older versions of the ramachandran term are known to behave poorly in uninhabited regions of the plot and near boundaries - this is certainly true for the rama that's in score12. You're probably hitting one of those boundary issues. Rama is not a function in the traditional sense, it's a table lookup with some sort of smoothing or interpolation between the points actually in the table, so points that are close in "rama space" may be in different bins.

I know that development of replacement terms has been underway for a while; I'm not sure which terms are in Talaris13 and Talaris14. Roland Dunbrack has given several fantastic presentations showing the wacky stuff our rama/dunbrack/p_aa_pp terms do near boundaries (which is what motivated getting them fixed; his lab has been participating). I think you've rediscovered this problem.

As it is presented in weight files both Talaris13 and Talaris14 are calibrated with rama/fa_dun/p_aa_pp terms. As far as I know using such terms is a main feature of the Rosetta force-field. Anyway it is hard to imagine where I can encounter explicit assignment of zero during calculations. Thank you for your explanation.