You are here

Fix corrupted Backbone

8 posts / 0 new
Last post
Fix corrupted Backbone
#1

Hello people,

I have a protein topology with a strange backbone (attached).

You can see that there is structure (several helices), but the backbone itself is not good enough to be able to do anything computationally with it, if ported into PyRosetta, PyRosetta it gets confused. So my question is how can I fix this backbone, nothing fancy just replace each position with Glycine or Valine or Alenine, but the proper ideal structure of the amino acid that will not result in clashed nor atoms occupying the same space?

I tried relaxing the structure, but that denatured that whole topology and did not fix the backbone.
I tried mutating each residue, but that only replaced the side chain and did now add a new residue with the correct backbone
I tried pyrosetta.rosetta.protocols.forge.remodel.RemodelMover() but that ended up in an infinite loop (it ran for 24 hours without stopping), but I ran it "raw" without a blueprint file, so maybe it need some more spesifications?

Any advice how I can fix this backbone without making majore changes to the topology? I am not interested in the sidechain because I have other methods to deal with them, but the backbone.

 

My simple code:

from pyrosetta import *
from pyrosetta.toolbox import *
init()

pose = pose_from_pdb('Backbone.pdb')

mover = pyrosetta.rosetta.protocols.forge.remodel.RemodelMover()
mover.apply(pose)

pose.dump_pdb('test.pdb')

 

AttachmentSize
1.png107.69 KB
2.png64.88 KB
Category: 
Post Situation: 
Mon, 2018-03-05 12:48
ac.research

It would be a bit easier if you could attach the actual backbone PDB. That said... I think the issue you may be facing (when you say that the "whole topology was denatured") is that Rosetta isn't recognizing this as being a single continuous chain?

Among the things you should try:

  1. Use the "AddConstraintsToCurrentConformationMover" (I think that's the name; it's something similar) to keep the input structure constrained to what it currently looks like -- then use FastRelax or the MinMover or something
  2. Consider Cartesian minimization, which won't care about possibly screwed up kinematics. (Also use constraints in this situation.)
  3. If the FoldTree is messed up (print pose.fold_tree()) then fix it (we can discuss how).

 

Post the PDB and I'll be able to debug pretty quickly.

Mon, 2018-03-05 13:04
everyday847

It's a little hard to say without more details on what you mean by "PyRosetta gets confused", but I agree that probably the easiest solution would be to add Calpha coordinate constraints with the AddConstraintsToCurrentConformationMover and then run a Cartesian FastRelax on the structure. That should fix up all the bad geometries while keeping things more-or-less the same structure.

Mon, 2018-03-05 13:28
rmoretti

everyday847

 

Thank you for your prompt reply. Attached is the PDB file.

 

It is my attempt at De Novo Design, but the method I am coding (not related to Rosetta/PyRosetta) screws up the atoms of the backbone.

File attachments: 
Mon, 2018-03-05 13:26
ac.research

I can confirm that a cartesian-enabled FastRelax with the AddConstraintsToCurrentConformationMover Calpha coordinate constraints does clean up the internal coordinates of the protein. (At least when done through the commandline version.)

You may, however, need to play around with the constraint weights and the `-relax::ramp_constraints false` option.  (And don't forget to use a scorefunction with the appropriate constraint terms turned on, as well as the cart_bonded term for the Cartesian relax.)  If you're interested in the positions of more than the Calpha atoms, you can probably attempt to use the full backbone constraints, but that might require more futzing with the constraint weights to make sure you get a good balance between good geometry and matching the structure. (I tried it with the default weights, and it seemed to do a decent job with internal geometry, while simultaneously doing a better job than the just-Calpha constraints in matching the carbonyl/nitrogen positioning.)

Mon, 2018-03-05 15:34
rmoretti

So I tried your approaches, and I see differences in the result coming about of the FastRelax, but the backbone issue remains the same.

 

I am not sure if I am setting up the code correctly or not, I have attached it here. You can see I have several comments in and out to test the best combination, but I am not sure if there are other commands I need.

import os
from pyrosetta import *
from pyrosetta.toolbox import *
init()

pose = pose_from_pdb('Backbone.pdb')

mover = pyrosetta.rosetta.protocols.simple_moves.AddConstraintsToCurrentConformationMover()
mover.CA_only()
mover.generate_constraints(pose)
mover.apply(pose)

scorefxn = pyrosetta.rosetta.core.scoring.ScoreFunctionFactory.create_score_function('fldsgn_cen')
scorefxn.set_weight(rosetta.core.scoring.atom_pair_constraint , 1.0)
#scorefxn.set_weight(rosetta.core.scoring.cart_bonded_angle , 1.0)
#scorefxn.set_weight(rosetta.core.scoring.cart_bonded_improper , 1.0)
#scorefxn.set_weight(rosetta.core.scoring.cart_bonded_length , 1.0)
#scorefxn.set_weight(rosetta.core.scoring.cart_bonded_proper , 1.0)
#scorefxn.set_weight(rosetta.core.scoring.cart_bonded_ring , 1.0)
#scorefxn.set_weight(rosetta.core.scoring.cart_bonded_torsion , 1.0)

relax = pyrosetta.rosetta.protocols.relax.FastRelax()
relax.set_scorefxn(scorefxn)
relax.cartesian()
relax.ramp_down_constraints(False)
relax.apply(pose)

 

I have attached also some results I got, you can see some results are completely bad, some are too compact and some successfully maintain the original topology. But none of them fixes the backbone. Do you two get similar results?

 

Are you sure the best approach is FastRelax with CA constraints rather than using the RemodelMover()?

 

 

File attachments: 
Tue, 2018-03-06 04:07
ac.research

I believe that the way you're using the "AddConstraintsToCurrentConformationalMover", it's using coordinate constraints, not atom pair constraints.  However, you turned on atom pair  constraints in the scoring function, not coordinate constraints. (i.e. you're not acutally using constraints).

One other thing I noticed with your code (that is not likely the culprit here, just pointing it out), when you call "relax.cartesian()", you're asking the relax mover whether it's using cartesian minimization, you're not setting it to True.

Hope this helps

(Full disclosure, I've only stayed at a holiday inn express a couple times, and an not a current Rosetta developer, so take my answers with the requisit pound of salt).

Tue, 2018-03-06 07:27
SenyorDrew

Ahhh ok, thank you very much, that actually made it work very nicely, will be bench marking it on several structures just to make sure.

 

Thank you all again :-)

Tue, 2018-03-06 11:06
ac.research