You are here

About missing disulfide partners for residue...

4 posts / 0 new
Last post
About missing disulfide partners for residue...
#1

Dear experts,

I'm trying to evaluate the energy of a 12 residues loop (residues 48-59) without considerint its environment. This loop contains one disulfide bond between residues 48 and 111. Since this bond links one loop CYS with another CYS located outside, when I trim the loop (dummy) from the full structure (pose) with grafting functions:
rosetta.protocols.grafting.delete_region(dummy,60,pose.total_residue())
rosetta.protocols.grafting.delete_region(dummy,1,47)

and I evaluate energy:
scorefxn(dummy)

some error appears inmediately:
ERROR: Could not find disulfide partner for residue 1

Any idea to fix this?

Note I'm not interested at all in disulfide bonds. At this moment it does not matter if the loop CYS is not forming a disulfide bond. I've tried to disable disulfide bond detection using "-rebuild_disulf false -detect_disulf false" options without any success:
init(extra_options = "-rebuild_disulf false -detect_disulf false")

Thanks a lot!
- Mon

Category: 
Post Situation: 
Wed, 2014-12-17 05:37
Mon

Hi Mon, I wrote the delete_region function and a good portion of the grafting stuff.

By default, the disulfide bonds should be detected through distance after the residues are deleted. However, it may depend on what version of PyRosetta you are using. The versions are all screwy right now.

Either it is a problem where the disulfides are not being detected (in that case use pose.conformation().detect_disulfides() ), or the disulfide detection needs to turn off. In this case, to delete your residues manually:

pose.conformation().delete_residue_range_slow(start, end);
pose.pdb_info().obsolete(false);

See if either of those work. In addition, you may be able to force mutation of the CYD to CYS to remove the disulfide bond. Rocco might know about that.

Note you may also want to use the function return_region (also in the grafting namespace) instead, which will essentially copy the loop your interested in into a new pose. Again, it should detect disulfides after the piece is created.

///@brief Returns a region of the pose including start and end as a new pose. Has a simple foldtree.
return_region(pose, start, end);

-Jared

Wed, 2014-12-17 09:25
jadolfbr

Thanks for the quick response!

I've checked all of your proposed solutions to help in debugging.

The first one (disulfides are not being detected) solved the problem, thanks! I simply added the following line after my "delete_region" lines:
dummy.conformation().detect_disulfides()

The second one:
dummy = Pose()
dummy.assign(pose) # full copy of "pose"
dummy.conformation().delete_residue_range_slow(end+1,pose.total_residue())
dummy.conformation().delete_residue_range_slow(1,start-1)
dummy.pdb_info().obsolete(false)

dumps this error:
    dummy.pdb_info().obsolete(false)
NameError: name 'false' is not defined

Trying the third proposed solution, i.e. using "return_region" method:
dummy = rosetta.protocols.grafting.return_region(pose, start, end)

instead of "delete_region" method:
dummy = Pose()
dummy.assign(pose) # full copy of "pose"
rosetta.protocols.grafting.delete_region(dummy,end+1,pose.total_residue())
rosetta.protocols.grafting.delete_region(dummy,1,start-1)

PyRosetta dumps this error:
AttributeError: 'NoneType' object has no attribute 'chain'

when chain id is requested later:
chain = info.chain(dummy.residue(1).chain())

If possible, I would like to use the "return_region" method. It seems more efficient.

Cheers,
- Mon

PS: The PyRosetta tar file I'm using is: PyRosetta.Ubuntu-12.04LTS.64Bit.monolith.mode=release.branch=release-r24.tar
and it was downloaded on 8th October 2014. (Sorry, but I don't know how to specify PyRosetta version in a better way)

Thu, 2014-12-18 04:10
Mon

Glad the first worked! That version is unfortunately from June or something ridiculous. I think if you try to download again it should be newer.

For the second - C++ boolean is false, while python is False, so just use False. I had copied it from the C++ code.
For the third - in newer Rosetta versions I have an option to copy the PDBInfo (which holds resnums and chain information from the PDB) over to the new pose. In the code you are using, there is no PDBInfo created at all in the new pose. This added code was done sometime in July (adds a boolean option to the return_region function). The r stands for which week the version is. So 24 is week 24 of 2014.

So, besides waiting, you can either do this manually after you return the pose or just use the delete region function for now.

The code to copy pdbinfo from your starting pose to the returned pose (piece) translated to PyRosetta:

//Create subpose results in a NULL PDB_Info. We now need a new one.
from rosetta.core.pose import *
pdb_info = PDBInfo(piece.total_residue())
piece.pdb_info(pdb_info);

piece.pdb_info().copy(pose.pdb_info(), start, end, 1)
piece.pdb_info().obsolete(False);

Thu, 2014-12-18 09:37
jadolfbr