You are here

Freezing arbitrary backbone dihedral angles...

8 posts / 0 new
Last post
Freezing arbitrary backbone dihedral angles...

Dear PyRosetta staff,

I'm using your set_bb_true_range() method of the MoveMap class to define the mobile degrees of freedom for some loop. Then, I use a MinMover (min_type="dfpmin") to minimize the loop according to some score function. I want that both backbone dihedral angles (PHI and PSI) were frozen at the Nt end. Unfortunately, it seems that PyRosetta only freezes the PHI angle while keeping mobile the N-terminal (Nt) PSI. In the C-terminal end, the PHI angle is mobile and the PSI is frozen.

Is it possible to freeze (or keep mobile) arbitrary angles in the backbone during minimizations?

- Mon

Post Situation: 
Thu, 2015-09-03 07:45

Hi again,

After checking PyRosetta's help ("help(MoveMap.set)") deeper, it seems that it is possible to freeze any DoF using the "set" method from MoveMap class. Unfortunately, I haven't found how to do it yet... Would you help me, please?

I've copied here some relevant lines from the help about the method "set":

set(...) method of rosetta.core.kinematics.MoveMap instance
set( (MoveMap)arg1, (DOF_ID)id, (bool)setting) -> None :
set for an individual DoF, e.g., "PHI of Atom 3 in Residue 5"

For example, how would I set mobile (or fixed) the PSI dihedral angle of residue 4? Thanks!

Fri, 2015-09-04 08:37

There's a number of different ways to use the set() function in MoveMap (it's overloaded on the C++ level).

The DOF_ID usage certainly could be applied to your purposes. To use it, you would want to instantiate a object with the settings you want. The constructor for the DOF_ID takes a object and a setting. The DOF_Type is a constant that specifies PHI/THETA/D for dihedral/angle/distance. (It would be PHI (dihedral) for your purposes.) The AtomID object specifies the residue number and atom number of the atom which is build from the particular degree of freedom you're setting. This would be the fourth atom of the dihedral. So for PSI dihedrals, it would typically be the N atom of the *next* residue, though that can vary based on how, exactly the FoldTree and AtomTree are structured.

While using the DOF_ID is the most flexible way of setting MoveMap information, an easier way is probably to use the version which takes a instead of a DOF_ID. From the documentation:

TorsionID(253, BB, 1) # Phi backbone torsion of residue 253.
TorsionID(253, BB, 2) # Psi backbone torsion of residue 253.
TorsionID(253, BB, 3) # Omega backbone torsion of residue 253.

Note for the TorsionID setting, it should be the residue number where most of the atoms in the Phi/Psi actually are. (That is, the residue number you would normally expect it to be, in contrast to the DOF_ID usage, which can bleed over into adjacent residues.)

Fri, 2015-09-04 10:14

Thanks a lot for the response!

I've tried, for example:
> mm=MoveMap()
> mm.set(TorsionID(4, BB, 2), True)

but when I do:

Nothing appears to be "TRUE".

Is there any method in MoveMap class to check the status of all DoFs?

Fri, 2015-09-04 11:16

It's set, it's just not listed in the show() output. It looks like the TorsionID settings are overlooked, and there isn't really a good method to show them. They should still be used in minimization ,etc, though.

Fri, 2015-09-04 13:30

What you said worked fine!

One related question more. Is there any simple way to set mobile (or freeze) all side-chain dihedral angles (not only Chi) or should I use the DOF_ID stuff you've commented above instead?

Thanks a lot!

Mon, 2015-09-07 07:23

This is one of Rosetta's nomenclature quirks - all non-backbone dihedrals are called "chis". For amino acids they're numbered out from the Calpha. So the rotation around the bond defined by Calpha-Cbeta is Chi 1; around the bond between C-beta-Cgamma is Chi 2, etc. There's also "proton chis" for groups with rotatable hydrogens (i.e. Ser, Thr, and Cys) - though things with symmetric hydrogens like methyl groups and the nitrogen of lysine aren't considered to be a "chi".

The complication is that there's also a chi backbone torsion on nucleic acids. On the Pose object this is accessed by the functions which don't take a chi number, and the functions which do take a chi number are for the sidechain chis.

But the "chi" functions of the MoveMap are all for the sidechain chis, rather than the nucleic acid backbone chi. So using the set_chi() functions on the MoveMap is the best way to set all sidechain torsions to movable/immobile.

Wed, 2015-09-09 07:56

Excellent answer! Thanks a lot!

Thu, 2015-09-10 01:46