Skip to content

Declare_chemical_bond between 2 SG atoms on the sidechain of 2 Cys residues #106

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
lelaihoangson opened this issue Mar 13, 2025 · 4 comments

Comments

@lelaihoangson
Copy link

lelaihoangson commented Mar 13, 2025

I want to cyclize my 14-mer peptide in the complex with another protein. I received the complex from AlphaFold-2 multimer model, and the peptide was linear there. I want to form a disulfide bond between 2 SG atoms on these 2 Cys at 2 ends of the peptide to cyclize that peptide before local docking using Rosetta. However, I faced this error:

File: /home/benchmark/rosetta/source/src/core/conformation/Conformation.cc:1756
[ ERROR ] UtilityExitException
ERROR: CYS:NtermProteinFull doesnt have connection at SG

The script I used to declare bond is here:

from pyrosetta import *
init()

pose = pose_from_pdb("/rosetta/Son/project/znrf3/inputs/global_dock/30_2.pdb")
SG_B1_resID = pose.pdb_info().pdb2pose('B', 1)
SG_B14_resID = pose.pdb_info().pdb2pose('B', 14)
pose.conformation().declare_chemical_bond(SG_B1_resID, "SG" , SG_B14_resID, "SG")

I tried to change SG into C and N, it worked. So I was stuck here. I tried to cyclize it with simple_cycpep_predict of Rosetta and it worked but the conformation changed, which is the thing I don't want.

What should I do to solve this problem? Thank you

@roccomoretti
Copy link
Member

Creating a chemical bond is a two-step process. First you need to change the residue identity (ResidueType) to be one which has all the annotations that it's able to accept a connection at the atom you're interested in. Only afterward can you call declare_chemical_bond() telling the Conformation which connection points (identified by residues & atoms) should be connected together.

Luckily, for disulfide bonds there's a shortcut. There's a Conformation.add_disulfide_bond() function which takes two residue IDs and will automatically change those residues to the correct types with the disulfide connection points and then connect them together.

@lelaihoangson
Copy link
Author

Thank you for your quick response.

I tried this according to the Pyrosetta docs
pose.conformation().add_disulfide_bond(SG_B1_resID, SG_B14_resID)

However, it just returned the boolean value True without changing anything (I checked the exported pose with PyMOL).

@roccomoretti
Copy link
Member

If the function returns true, it should have changed the Conformation.

Note, though, that the function only annotates the disulfide bond being present. It does not actually change any of the coordinates. You'll only see the effect of the disulfide once you do some sort of coordinate manipulation (like packing or minimization) -- the scorefunction you use has the disulfide term on, which will penalize structures where the two cysteines are in a bad conformation with respect to each other. As such, when you sample their structure the "more disulfide like" conformations will be lower in energy and dominate the sampling.

@lelaihoangson
Copy link
Author

I got it. Thank you so much.

Also, do you have the example script for creating a chemical bond via a two-step process you mentioned? I want to also connect a ligand to the SG atom for some of the future work, but the docs I read was a bit obscure in terms of the params file (it said I needed to add CONNECT part but no example was provided, so I was not sure how to do it).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants