You are here

Atom mapping in RMSD functions

2 posts / 0 new
Last post
Atom mapping in RMSD functions

I'm trying to calculate the common heavy atom RMSD between a polypeptide fragment and a variant, but in reading through the various RMSD functions in pyrosetta.rosetta.core.scoring it isn't clear why all_atom RMSD functions don't fail when given two poses which differ by amino acid identity - can anybody explain what's going on under the hood here or direct me to some documentation that details it? Also, do/how can any of the protein RMSD functions specify heavy atoms only as a predicate?

Thanks, I'd appreciate any assistance.

Post Situation: 
Tue, 2022-02-15 15:48

The core.scoring.all_atom_rmsd() function(s) are specific for heavyatoms, not truly *all* atoms.

The rmsd functions tend to be set up for Calpha/backbone rmsd. A such, they don't necessarily have any checks for amino acid identity. (Which is actually a good thing when you're attempting to look at the backbone rmsd between a design and the starting structure.)  The all atom functions are a layer ontop of the general rmsd functionality, where everything is matched up 1:1 in order. (That is, the Nth residue in the experimental pose is matched up with the Nth residue in the reference pose. And the Ith atom in the Nth residue is matched up with the Ith atom of the Nth residue in the other structure.) That tends to work for most sitatuations where your structures are properly set up to be compared with each other.  -- For speed, Rosetta assumes that the people using the rmsd functions have set up their systems such that a comparsion is reasonable with the atom sets involved.  It's not immediately obvious how one should compute a heavyatom rmsd when the number of heavyatoms in both structures is different.

There also exists a rms_at_corresponding_heavy_atoms() function which attempts to be more robust to residue type mismatches, and only matches up atoms in the two poses if they have the same name. This should be a bit better behaved for identity mapping, at the cost of being slower to compute.

Regarding predicates, the machinery which uses the predicate functions use the C++ templating feature, so cannot be wrapped for PyRosetta.

Fri, 2022-02-18 10:23