You are here

How to get the Ligand RMSD

2 posts / 0 new
Last post
How to get the Ligand RMSD

Hello! I want to get the RMSD between the original ligand nd the one i designed. both the ligands are peptides of different lenght (the one i designed is smaller).
I tried to use calc_Lrmsd(pose1,pose2) but i got the following error:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Boost.Python.ArgumentError: Python argument types in
rosetta.protocols.docking.__docking_all_at_once_.calc_Lrmsd(Pose, Pose)
did not match C++ signature:
calc_Lrmsd(core::pose::Pose pose, core::pose::Pose native_pose, utility::vector1<int, std::allocator<int> > movable_jumps)
I guess the syntax is wrong, I found the following syntax: calc_Lrmsd(pose1,pose2,Vect([1])), but I cudnt find out what that vector was meant to be. any help?

this is the version of pyrosetta i am using: PyRosetta.Ubuntu-12.04LTS-r55981.64Bit

Thanks in advance

Post Situation: 
Wed, 2014-06-25 09:26

The calc_Lrmsd() function is a docking-specific function which uses a "DockJumps" structure to determine which residues over which to compute the rmsd. (As you only want to calculate the rmsd over the portion which is mobile during docking.) DockJumps is used because that's what's used in the automated docking protocol to determine what is movable and not. It's not necessarily a specification you'll want to use in other cases.

Since you have better understanding of which residues you want to calculate the rmsd over, I might recommend using the various rmsd functions in the core.scoring namespace instead. The problem you're going to run into is that most of the rmsd functions in the core.scoring namespace are going to give you rmsd with-superposition, which is probably not what you want for docking. The other problem is that most of them are set up to assume that the two poses being compared are matched up residue-to-residue. There are functions which take an explicit mapping, but they tend to be more difficult to access from PyRosetta.

So it doesn't look like we have a simple function for easy non-superposition CA_rmsd calculation on arbitrary residue mapping. But it's very easy to roll your own. Simply loop through the residues you want to compare, pull out the CA coordinates for those residues., using something like pose.residue(position).xyz("CA"). Then you can do a calpha1_pos.distance_squared( calpha2_pos ) to get the squared distance. Then you just sum the squared distances across all the atoms you wish to compare, divide by the total number of atoms, and then take the square root to get the root-mean-squared-deviation for the atoms you want. It's only if you want superposition that it gets tricky.

Note that for any rmsd calculation you'll need to have an equal number of atoms on one side as the other, so you're going to have to decide on a way of "ignoring" particular residues on the longer peptide.

Tue, 2014-07-01 11:42