# ΔΔG Calculation of a Mutation with PyRosetta

8 posts / 0 new
ΔΔG Calculation of a Mutation with PyRosetta
#1

Hi everyone,

We are trying to replicate the experiment by Alford et al. (2017) in our lab to calculate the ΔΔG of T193V mutation for the RT-RH-derived peptide bound to HIV-1 protease (PDB entry 1kjg). However, we have been getting values that are different from the reported ΔΔG of –4.95 kcal/mol and it’s likely due to errors in our code.

We are using PyRosetta to perform the calculations, but the code provided by the authors in the supplementary information is based on  C++, so we were wondering if we got the Python-based code correctly.

Below is the protocol of the calculation provided by Alford et al. (2017), following which is our Python code:

ΔΔG of Mutation. The coordinate file for 1kjg was downloaded from the Protein Data Bank and cleaned to remove any non-canonical amino acids. The PDB was refined with fast relax constrained to native coordinates using Cartesian-space refinement and the REF2015 energy function using the following command line:

relax.linuxgccrelease –s 1kgj.pdb –use_input_sc –constrain_relax_to_start_coords –ignore_unrecognized_res –nstruct 1000 –relax:coord_constrain_to_sidechains –relax:ramp_constraints false –relax:cartesian –relax:min_type lbfgs_armijo_nonmonotone


After refinement, the lowest scoring model was used to generate five structures of the native conformation and five structures of the T193V mutated conformation using a Cartesian version of Rosetta’s ddg protocol.

cartesian_ddg.linuxgccrelease –s 1kgj_refined_lowest.pdb –ddg:mut_file \$MUT_FILE –ddg:iterations 5 –optimization:default -max_cycles 200 –bbnbr 1 –relax:min_type lbfgs_armijo_nonmonotone –fa_max_dis 9.0

The energies were averaged for each ensemble of five structures. The ΔΔG was then calculated as thedifference between the average energy of the mutated ensemble and the average energy of the native ensemble.

Our Python code:

This is the first run of PyRosetta to fast relax to start coordinates and save a .pdb file for the second run.

from pyrosetta.rosetta import *
from pyrosetta import *
from pyrosetta.toolbox import *
init(extra_options = "-beta_nov16_cart -in:file:s 1kjg.clean.pdb -use_input_sc -constrain_relax_to_start_coords -ignore_unrecognized_res -relax:coord_constrain_sidechains -relax:ramp_constraints false -relax:cartesian -relax:min_type lbfgs_armijo_nonmonotone")
pose = Pose()
pose = pose_from_pdb("1kjg.clean.pdb")
scorefxn = ScoreFunction()
scorefxn = get_fa_scorefxn()
scorefxn(pose)
mutate_residue(pose,201,'V')
relax = pyrosetta.rosetta.protocols.relax.FastRelax()
relax.constrain_relax_to_start_coords(True)
relax.coord_constrain_sidechains(True)
relax.ramp_down_constraints(False)
relax.cartesian(True)
relax.min_type("lbfgs_armijo_nonmonotone")
relax.set_scorefxn(scorefxn)
relax.apply(pose)
pose.dump_pdb("1kjg.T193V.pdb")
print(scorefxn(pose))

Here we loaded the produced .pdb file and obtained energy values, which were used to calculate the ΔΔG of mutation T193V.

from pyrosetta.rosetta import *
from pyrosetta import *
from pyrosetta.toolbox import *
init(extra_options = "-beta_nov16_cart -in:file:s 1kjg.T193V.pdb -ddg:mut_file -ddg:iterations 5 -max_cycles 200 -relax:min_type lbfgs_armijo_nonmonotone -fa_max_dis 9.0")
pose = Pose()
pose = pose_from_pdb("1kjg.T193V.pdb")
scorefxn = ScoreFunction()
scorefxn = get_fa_scorefxn()
relax = pyrosetta.rosetta.protocols.relax.FastRelax()
relax.constrain_relax_to_start_coords(True)
relax.coord_constrain_sidechains(True)
relax.ramp_down_constraints(False)
relax.cartesian(True)
relax.min_type("lbfgs_armijo_nonmonotone")
relax.set_scorefxn(scorefxn)
scorefxn(pose)


Could someone please let us know if we're doing this correctly or if we need to modify our PyRosetta code? We are aware that we're using the beta_nov16 Cartesian function, whereas the authors used the REF2015 Cartesian scoring function, but we were hoping to see improved ΔΔG prediction that matches the experiementally determined value of -1.11 kcal/mol more closely.

Category:
Post Situation:
Fri, 2018-03-09 01:44
akaashvenkat
Fri, 2018-03-09 03:28
ac.research

Additionally, is it correct to run the ddg and relax protocols separately to obtain the ΔΔG of mutation or should they be combined into one run with PyRosetta?

Sat, 2018-03-10 18:14
akaashvenkat

I contacted the Primary Author on the paper - you are using the -beta_nov16 scorefunction (which has also not been published) on a protocol on which the ddG values were calcuated with REF2015 (the current default).

Mon, 2018-03-12 12:48

As for the ddG prediction being closer to the experimentally determined value with -beta_nov16, I think you answered your own question here...

Mon, 2018-03-12 12:51

Using the -beta_nov16 scoring function with Cartesian refinement, we observed a slighlty closer ΔΔG prediction to experimental value (-4.29 kcal/mol) compared with the reported value of -4.95 kcal/mol with only the first run of the Python code (i.e. without the -ddg:mut_file flag), so would this function be a better predictor of ΔΔG of mutation for other proteins as well?

Also, with the optimized parameters of the -beta_nov16_cart function, wouldn't it be more efficient in sampling the global minimum as compared with the -beta_nov15 scoring function with Cartesian refinement utilized by Alford et al. (https://www.biorxiv.org/content/biorxiv/suppl/2017/02/07/106054.DC1/106054-1.pdf)?

Mon, 2018-03-12 16:03
Sazhnyev

You are asking a question here that we don't know the answer to.  Perhaps try it with a few other proteins?  Benchmark.  You could even contact Rebecca to collaborate perhaps.

Again, the beta score function has not been published yet. It is unclear if it is quicker or better.  Without data how do we know?  Perhaps the creator of the scorefunction could tell you - but being a developer of Rosetta, I have yet to hear much about it. Perhaps I missed a paper?  I don't know, but personally I've just been using REF2015 as it was heavily benchmarked for many different tasks in Rosetta.

Mon, 2018-03-12 20:26