PyRosetta.notebooks icon indicating copy to clipboard operation
PyRosetta.notebooks copied to clipboard

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

Open lelaihoangson opened this issue 9 months ago • 4 comments

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

lelaihoangson avatar Mar 13 '25 15:03 lelaihoangson

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.

roccomoretti avatar Mar 13 '25 17:03 roccomoretti

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).

lelaihoangson avatar Mar 13 '25 17:03 lelaihoangson

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.

roccomoretti avatar Mar 13 '25 18:03 roccomoretti

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).

lelaihoangson avatar Mar 13 '25 18:03 lelaihoangson