I am working with protein which have isopeptide bonds in them and I am not sure how to handle them.
An isopeptide bond is when a lysine residue forms an amide bond with an aspartate or asparagine (same result). Isopeptide bonds —in bacteria at least— have an O or N atom missing from the Asp, Asn or Lys and a CONECT at the end of the file and to the best of my knowledge there is no special HETATOM O-lysylaspartyl double residue.
Attached is a pdb (from 2X5P) that has been cleaned up, sent through Relax and the isopeptide brutally readded (cf. in pymol `zoom resi 31+117`), so it is not a file thing.
I want to use isopeptide bonds in Relax, Remodel and Score. I can get away with K31A D117N in some applications, but for others there is no escape as the result is rather meaningless.
The problem is that a warning is raised and the residues separated. Adding a constrain does not seem to work as having an oxygen and a nitrogen superimposed messes up the scores. I tried making a lys to ornithine (Orn = C40 in the rotlib) as it would form a salt bridge and constraint the epsilon N of Orn and an O of CG of Asp. Unfortunately there is a bug in the code itself that makes it end up looking for a file with '//' error in the path name.
＄ ＄ROSETTA/relax.＄ROSETTAEXT -database ＄ROSETTADB -s 2X5Pmle2_C40_ATOM.pdb
core.pack.dunbrack.RotamerLibrary: Dunbrack 2010 library took 0.516341 seconds to load from binary
core.pack.rotamers.SingleNCAARotamerLibraryCreator: Reading in rot lib /Users/matteo/Coding/rosetta/main/database//rotamer/ncaa_rotlibs/ncaa_rotamer_libraries/alpha_amino_acid/C40.rotlib...
Segmentation fault: 11
So I was hoping to get some suggestions on how to tackle the problem of isopeptide bonds.
If you include the LINK record from the original PDB, this chemistry should be handled automatically. In general, since early 2016 you don't need to remove nearly as much data from PDBs before using them -- it'll only help to retain it 99% of the time.
Actually the LINK is why Relax crashes.
ERROR: No match found for unrecognized residue at position 31
Looking for branch-point residue with 3-letter code: LYS
ERROR:: Exit from: src/core/io/pose_from_sfr/PoseFromSFRBuilder.cc line: 425
The number is not the PDB resi but the counted, it crashes even when residue 1 is the first and there are no gaps.
The conjugated sidechain residues are not enabled by default. What you'll want to do is go into Rosetta/main/database/chemical/residue_type_sets/fa_standard/residue_types.txt and remove the '#' from the line containing residue_types/sidechain_conjugation/LYX.params
Alternatively (if you don't want to edit the database), you can add
to your commandline. (Adjust the path to the appropriate location of your Rosetta database.
I have uncommended the conjugated residue LYX in the database. But I still get the error as before
When I change the LINK and the ATOM entries for the LYS to LYX I get
With the flag $ROSETTADB/chemical/residue_type_sets/fa_standard/residue_types/sidechain_conjugation/LYX.params I get for both LYS and LYX structures
Which is a from a different code file (ResidueTypeSetCache.cc vs. PoseFromSFRBuilder.cc)
The lysine is labelled in the pdbs in the same as for the LYX.params minus the hydrogens. I have the PDB from the web (2X5P) and one where I have added a missing loop in Rosetta. For the clean structure with an isopeptide bond I have brutally copied the ATOM, LINK and CONECT from the former into the latter, so the hydrogens are missing.
Adding the hydrogens and making the labelling match (PyMol numbers sequentially while in the LYX.param it is Greek numbering) does not solve the issue. I deleted the extra hydrogen on the Nζ hydrogen that PyMol added (as the N is not charged).
Also, what about the ASX partner?
So I am still stuck sorry —thanks ever so much btw!
Sorry, I think I had things back to front. The LYX and ASX residues are used for conjugation, but not through the LINK record mechanism. Instead, those are handled through patches in the main/database/chemical/residue_type_sets/fa_standard/patches/branching/ directory - in your case the N-linked_conjugation (for Lysine and C40 ornithine) and sidechain_carboxyl_conjugation (for ASP and GLU) patches.
I think the issue you're having is that you're dealing with a somewhat older version of Rosetta, which doesn't have full LINK record functionality. I do get the same errors as you do ("Looking for branch-point residue with 3-letter code") with Rosetta 3.6, but Rosetta 3.7 is able to do things with no problem: when I download 2X5P directly from the PDB and remove everything but the ATOM lines and LINK records, Rosetta 3.7 is able to read things in with conjugation, with no extra effort on my part. (i.e. no mucking around with the database or adding extra params files.)
(Robust) Conjugation support is something that's just been recently added to Rosetta, so it may help to update to a more recent version, to make sure you get all the bells and whistles and bugfixes.
Thanks ever so much! SImply upgrading to 3.7 solved it! It runs without a glitch.
I am having the same issue as in this thread at the start. I am trying to add Lys-Asp isopeptide bonds in a collagen-like peptide triple helix and use rosetta to relax the structure, but I keep getting an error that says I am missing an Oxygen on my asp residue and rosetta replaces the oxygen and relaxes to the same structure I had before the covalent bond. I was trying to follow the guidelines on this thread but I am still getting the same problem, so I think I missed something on one of these steps.
So here are the commands in my flag file:
Please let me know if youneed anything else from me to help me solve this problem.
Which version of Rosetta are you using? I tried the from-RCSB version of 2X5P.pdb with Rosetta 3.9 and things worked, more or less.
One issue issue wass with atom naming. Rosetta assumes that the oxygen left with ASP sidechain conjugation is OD1, whereas the 2X5P had OD1 missing and OD2 present. (That's the oxygen atom issue - in regular ASP they're equivalent, but in a conjuated version it matters.) What you can do is manually edit the input PDB to change the OD2 on ASP 117 into OD1 before running it through Rosetta.
The other issue is that the conjugation geometry tends to pull apart during the relax. What you can do is use a "dualspace" relax, which has additional geometry constraints. To do this, simply add `-dualspace -score:weights ref2015_cart` to your commandline.
P.S. A couple of comments on your flags. You don't need the DLYX.params/DASX.params - not only is the LINK-based conjugation independent of the NNX params files, these are specific for the D chirality of the amino acids. The standard amino acid types are L chirality, so unless you're dealing with chiral variants, you don't want the D version, and also with recent versions of Rosetta, the D chirality should be automatically generated (in most cases) as a patch.
Also, with relax you often don't need the -ex flags (the relax proceedure does a good job of sampling off-rotamer without it.) -- you almost certainly don't need the -ex3 and -ex4 flags.
I am running Rosetta 3.8, which I know that you had said before that you did this successfully in Rosetta 3.7
I edited the pdb so now all my conjugated ASPs have only OD1.
I added that line you suggested and removed the DLYX, DASX, and all the -ex flags
Rosetta is now throwing an error "ERROR: ERROR: Multiple values specified for option -relax:dualspace"
I tried looking around the documentation to see what I did wrong to get this error, but I haven't been able to figure it out yet.
What's your full commandline (and option file, if you have one)?
I think the most likely cause is that the option after the -relax:dualspace specification is being set with an en-dash rather than a hyphen. Rosetta doesn't recognize the en-dash as the start of a new option, and thus thinks it's still part of the -relax:dualspace specification, which is an error because -relax:dualspace only takes a single value (not multiple ones.)
In the two years since my original post here where I could not get an isopeptide to work, I think I have got better at working with them. As a result I thought I'd share a pointer or two on isopeptides and Rosetta. These can be found at: https://blog.matteoferla.com/2018/09/everything-you-wanted-to-know-about.html
Thanks again for all the help along the way!
I am trying to perform a protein-protein docking run using a cyclic peptide that contains an isopeptide bond between a GLU/GLN and a lysine. Is this case supported by Rosetta? I have tried preparing the input PDB using relax with the -cyclic_peptide:cyclization_type sidechain_isopeptide flag but it gives the error:
ERROR: Illegal value specified for option -cyclic_peptide:cyclization_type : sidechain_isopeptide
If I try relax without the cyclic_peptide:cyclization_type flag, it complains about the missing OE2 atom in the GLU residue and repacks it as a native amino acid without the isopeptide bond. Any suggestions for making this chemistry work Rosetta? Matteo's blog post was very helpful, but it does mention that the acid needs to be a ASP, which is one carbon shorter than what I need.
My command-line input is:
ROSETTA/bin/relax.linuxgccrelease -database ROSETTA/../../main/database -relax:constrain_relax_to_start_coords -relax:coord_constrain_sidechains -relax:ramp_constraints false -s 5628-native-prebound.pdb -extra_patch_fa ~/3-hydroxy-tyrosine.txt -extra_res_fa ROSETTA/../database/chemical/residue_type_sets/fa_standard/residue_types/sidechain_conjugation/LYX.params -cyclic_peptide:cyclization_type sidechain_isopeptide
Alternately I would be perfectly happy if I could just fix the sidechain positions of the GLU and the LYS residues in question. Would fixing their chi angles in a MoveMap keep them moving in a protein-protein docking run?
My problem ended up being an invisible character in my LINK record. Glu/Lys isopeptide bond works perfectly.