The PyRosetta community uses PyMOL so much, we decided to streamline the visualization of output by creating a PyMOL_Mover
. This Mover allows you to observe structural and score change instantaneously, which greatly aids the understanding of any protocol and the development of novel algorithms. This page accompanies the workshops found on the Tutorials page.
PyMOL
After loading PyMOL, click in the upper window command line (Tk Window Upper Command Line) and run the script PyMOLPyRosettaServer.py
to start the listener:
cd /your/path/to/PyRosetta
run PyMOLPyRosettaServer.py
The file PyMOLPyRosettaServer.py
is found in the main directory of PyRosetta. No further work is required to view PyMOL_Mover output from the same computer. We recommend adding this to your .pymolrc
(and to make a .pymolrc
if you don't have one), which should be located in your home
directory on a Mac or Linux machine.
However if want to run PyMOL on one machine (say your desktop computer) and PyRosetta on other then you will need to change the default setup. By default PyMOLPyRosettaServer.py
script is listening for connects at 127.0.0.1
address which will allow only connections from a local machine. In order to accept connection from non-local machines we will need to change that. This can be done by (a) allow PyMOL-server to accept connections on all network addresses assigned to the host by using empty string ('') as IP address. Or (b) we explicitly specifying IP address we want to listen-to. In for instance if our machine have IP address '187.1.3.37' on the local network and we want server to listen to port 9001 we can put the following line into .pymolrc to automatically start the listener on that address:
cmd.start_rosetta_server("187.1.3.37","9001")
Be sure that the connection is to an IP address that is reachable from machine running PyMOL_Mover
and that PyMOL_Mover is configured to output to that address.
PyRosetta
In Rosetta and PyRosetta, a macromolecule (and information on a single conformation) is stored in a Pose
object. To explore the PyMOL_Mover
, you will want to start PyRosetta and create a Pose
object from a PDB file.
from rosetta import*
init()
pose = pose_from_pdb("your_favorite.pdb")
When the PyMOL_Mover
> is applied to a Pose
, the Pose
coordinate data is sent to PyMOL, rendering an image of the structure.
pymover = PyMOL_Mover()
pymover.apply(pose)
The PyMOL_Mover
method send_energy()
commands PyMOL to color the loaded structure based on the relative residue energies. Make sure the pose has been scored before calling the method.
scorefxn = get_fa_scorefxn()
scorefxn(pose)
pymover.send_energy(pose)
The default color spectrum spans from blue (low score/favorable energy) to red (high score/unfavorable energy). Rosetta scores are determined using a weighted sum of various score terms. The send_energy()
method can accept the name of any score term and color residues based on this term. (If the input term had a zero weight in the last score function applied to the pose, i.e., is not used, no relevant coloring will occur.) The example here would color the residues based on the value of its (full-atom) Van der Waals attractive energy.
pymover.send_energy(pose, fa_atr)
The PyMOL_Mover
features an update_energy
option that, when true, automatically colors residues by energy when you apply the PyMOL_Mover
.
pymover.update_energy(True)
pymover.apply(pose)
You can set the PyMOL_Mover
to send a specific score term when it is applied (if update_energy
is set to true) with the energy_type
option. The example here would here would color the residues based on the value of its (full-atom) solvation energy every time you apply the PyMOL_Mover
:
pymover.update_energy(True)
pymover.energy_type(fa_sol)
pymover.apply(pose)
To send PyMOL_Mover
output to a PyMOL instance on a different computer, change the PyMOL_Mover
link
options to the new computer's IP address and port:
pymover.link.udp_ip = "127.0.0.1"
pymover.link.udp_port = 65000
If the PyMOL_Mover
's keep_history
> option is set to true, PyMOL will load structures with the same name into successive states. You can then view the states intuitively by cycling through the PyMOL object states or creating a movie using PyMOL's frame features.
pymover.keep_history(True)
pymover.apply(pose)
other_mover.apply(pose)
pymover.apply(pose)
The color of a PyMOL molecular object is independent of its state, so if you view a series of structures sent from Rosetta — and their respective energy colorings — with the same name, the only accessible residue coloring will be the last one performed. An alternate method to accurately view intermediate changes of a Rosetta structure that avoids this complication is to change the Pose
's name before sending structural data. This causes PyMOL to load these structures into different objects, thus allowing PyMOL to remember multiple colorings. This is particularly useful when you want to inspect energy changes during a protocol. The example here would change the Pose
name — and thus the name of the structure in PyMOL — to "new_name"
.
pose.pdb_info().name("new_name")
So far, all the commands to PyMOL have been manual, relying on usage of PyMOL_Mover.apply
. The PyMOL_Observer
object automatically monitors Pose
s for conformational changes and, when triggered, applies its own PyMOL_Mover
. Since a PyMOL_Observer
has a PyMOL_Mover
, all of the PyMOL_Mover
options are available.
pyobs = PyMOL_Observer()
pyobs.add_observer(pose)
scorefxn(pose)
pyobs.pymol.update_energy(True)
scorefxn(pose)