You are here

Bug with make_pose_from_sequence when incorporating non-standard ResidueTypes in PyRosetta

6 posts / 0 new
Last post
Bug with make_pose_from_sequence when incorporating non-standard ResidueTypes in PyRosetta

I've been trying to assemble a poly-peptoid sequence using the make_pose_from_sequence function, however there seems to be an error in the way the polymer gets connected in the pose. For instance, the command:

make_pose_from_sequence(pose, "AAX[P02]AA", "fa_standard")

has no problem executing (P02.params works in other rosetta applications). However, when outputting the pose to PyMol it looks like the image attached. It would appear that there is an issue connecting the C-term of the last 2 alanines to the P02 N-term and subsequently overlaps them. Any ideas on how to fix this?

Post Situation: 
Sun, 2012-03-18 12:27

Tim, not to put too fine a point on it, but who is possibly going to know more about peptoids than the Bonneau lab?

Is make_pose_from_sequence known to work with peptoids in C++? make_pose_from_sequence is *not* how PDB input or design work (which are the methods Doug used with NCAAs), so that's where I'd start.

Sun, 2012-03-18 12:57

This problem isn't only for peptoids, but other non-standard residue types such as in the sequence 'AAM[ZN]AA' - In this case it appears to again fail to properly connect the sequence and overlaps them.

Sun, 2012-03-18 13:45

make_pose_from_sequence is probably making a three-chain pose in that case, with jumps between AA(1), ZN, and AA(2). Since none of the three subcomponents are connected by bonds, it is probably using a zero-length jump to do the connecting, thus resulting in the overlap. You're only giving it a sequence; it's not smart enough to make good coordinates.

Sun, 2012-03-18 14:05

From a brief skim of the code, this looks to be more or less the case. Or rather, it's not so much that it's being appended by a zero-length jump, but instead it's being added at the default coordinates for the residue, which probably all end up at around the origin.

You don't see this when you build a peptide chain, as there's extra code that's invoked in that case which moves the bonded residue to the appropriate geometry for the chemical connection. That extra code is not invoked when you have a non-bonded connection. (The difference amounts to Conformation::append_residue_by_jump() versus Conformation::append_residue_by_bond() ).

The choice between the two is made within the make_pose_from_sequence() function, and there's an explicit check for residues with a core::chemical::AA type of aa_unk and aa_vrt, or certain modified termini, so even unnatural amino acids (of type AA UNK) which are supposed to be chemically bonded will suffer this fate.

It doesn't look like there's a way to bypass this check, so your best be would be to write your own function which builds the Residue objects like you want (see core.pose.residue_types_from_sequence() and conformation.ResidueFactory.create_residue() ), and then calls Pose.append_residue_by_bond() or Pose.append_residue_by_jump(), as appropriate.

Sun, 2012-03-18 16:01

Yeah, that works, thanks for the help!

Mon, 2012-03-19 06:21