.. |pymol_github_00| image:: ./images/pymol_github_00.png
.. |pymol_github_01| image:: ./images/pymol_github_01.png
.. |pymol_rotation| image:: ./images/pymol_rotation.png
.. |pymol_translation| image:: ./images/pymol_translation.png
.. |pymol_zoom| image:: ./images/pymol_zoom.png
.. |pymol_clip| image:: ./images/pymol_clip.png
.. |pymol_selection| image:: ./images/pymol_selection.png
.. |pymol_command_lines| image:: ./images/pymol_command_lines.png
.. |pymol_wiki_screenshot| image:: ./images/pymol_wiki_screenshot.png
=====
PyMOL
=====
.. contents::
:depth: 2
:local:
Installation
------------
Below are instructions for installing PyMOL on a Linux computer. There
are also easy instructions to install PyMOL on your personal computer
`here `_.
Another thing to note is that the Paton group has a license to use
PyMOL, so as you set it up you can ask Alex or Jake (Oct 2024) for
the license file.
Linux
......
We can install two flavors of PyMOL, the "Free for academic use" and the
"Open source". Here we will see how to set up a new conda environment with the
appropriate libraries to compile the open source version of PyMOL.
.. note::
For the next steps it will be assumed that you use a UNIX-based OS.
If you want to use windows... try to google "stackoverflow create a new
conda environment in Windows".
First we open a new terminal and we create a new conda environment with python 3.8
and the python requisites:
.. code:: shell
conda create -n pymol python=3.8
or alternatively (we strongly encourage this one)
.. code:: shell
conda create -p path/to/venv/pymol python=3.8
After creating the environment we need to activate it.
.. code:: shell
conda activate pymol
or if you followed the encouraged creation:
.. code:: shell
conda activate path/to/venv/pymol
Next we are going to install some python packages using pip
.. code:: shell
python -m pip install wheel
python -m pip install pmw
.. warning::
Be careful :code:`pmw` or in other words :code:`Python MegaWidgets` is not
the same package as :code:`pwm` or in other words :code:`password manager`.
As pymol is not a pure python program, it does require some external libraries.
As we might not have admin permissions to install the required libraries and
programs system-wide we will install them in our conda environment:
.. code:: shell
conda install -c anaconda msgpack-python pyqt
conda install -c conda-forge glew freeglut libxml2 glm libpng hdf5 libnetcdf
.. note::
If you ever want to compile code using gcc, make, cmake, g++, ninja you will
need to install them in a similar fashion in your conda environment (even if
they are already available system-wide, otherwise the compilers will be
unable to find the appropriate libraries of the conda environment)
Now we have the environment ready for compiling pymol. I usually have a folder
in my home directory named 'compiled_software'. If you want to a different setup
change the appropriate paths. We will create the folders where we will have
the installation of pymol as well as the source code.
.. code:: shell
cd $HOME
cd compiled_software
mkdir pymol
Now we download the source code from the
`pymol github repository `__.
You can get whichever version you prefer. I do not recommend to download the
current development code, but instead any of the released versions.
.. centered:: |pymol_github_00|
Now download your preferred release. Currently the "Free for academic use"
binary corresponds to the :code:`v2.4.0` version so we will proceed with the
latest release :code:`v2.5.0`
.. centered:: |pymol_github_01|
Both .zip and .tar.gz correspond to compressed folders, so the next step that we
will do is to uncompress the contents into $HOME/compiled_software/pymol/source
and then we cd into the folder.
For zip:
.. code:: shell
unzip $HOME/Downloads/pymol-open-source-2.5.0.zip -d $HOME/compiled_software/pymol
mv $HOME/compiled_software/pymol/pymol-open-source-2.5.0 $HOME/compiled_software/pymol/source
cd $HOME/compiled_software/pymol/source
for tar:
.. code:: shell
cd $HOME/compiled_software/pymol
tar -xvzf $HOME/Downloads/pymol-open-source-2.5.0.tar.gz
mv pymol-open-source-2.5.0 source
cd source
Now we proceed to compile pymol
.. code:: shell
python setup.py install --prefix=$HOME/compiled_software/pymol/installation
Congrats! now you have sucessfully compiled pymol in your conda environment.
Usually we could just add the path to the pymol binary to our PATH variable and
we would be prepared. However if we don't have the environment active we will
see pymol but it will crash inmediatly. What we are going to do is tweak our
conda environment so that pymol will only be found when we are in this specific
conda environment.
First we switch to the base conda environment and move to the folder where the
files of our environment are.
.. note::
**Yes, here's were you will be grateful of following the advice** of creating
the conda environment with the -p beacause it is the same path that you
specified. Otherwise the files will be wherever your system hosts the base
conda environment... and **you shouldn't** be modifying any of the files of the
base environment in loki, falcon, fireball, buzzsaw, acme... **unless you know
what you are doing**.
.. code:: shell
conda activate
cd path/to/venv/pymol
cd etc
Now we will create a conda folder so that we can have a custom setup of global
environment variables specific for our conda environment.
.. code:: shell
mkdir conda
cd conda
mkdir activate.d deactivate.d
touch activate.d/env_vars.sh
touch deactivate.d/env_vars.sh
Use now your favorite text editor to write the following contents in
`activate.d/env_vars.sh`:
.. code:: shell
#!/bin/sh
export MYOLDPATH=${PATH};
export PATH=${PATH}:${HOME}/compiled_software/pymol/installation/bin;
and in `deactivate.d/env_vars.sh`:
.. code:: shell
#!/bin/sh
export PATH=${MYOLDPATH};
unset MYOLDPATH;
Finally lets test that you can access pymol in your environment:
.. code:: shell
cd $HOME
conda activate path/to/venv/pymol
pymol --help
Pymol Basics
------------
Basic controls
..............
+---------------------------------------+----------------------------------------+
| .. centered:: Rotation | .. centered:: Translate |
+---------------------------------------+----------------------------------------+
| | |
| .. centered:: |pymol_rotation| | .. centered:: |pymol_translation| |
+---------------------------------------+----------------------------------------+
| .. centered:: Zoom | .. centered:: Clip |
+---------------------------------------+----------------------------------------+
| | |
| .. centered:: |pymol_zoom| | .. centered:: |pymol_clip| |
+---------------------------------------+----------------------------------------+
+---------------------------------------+
| .. centered:: Selection |
+---------------------------------------+
| |
| .. centered:: |pymol_selection| |
+---------------------------------------+
Basic commands
..............
One of the first commands that we end up requiring when we are using pymol
is the command :code:`set_name`. Giving names to atom selections allows us to
more easily change the representations of our molecules but the default name of
our selection when we use the mouse to select the atoms is *sele*.
.. centered:: |pymol_command_lines|
We can type commands in any of the pymol command lines, I do recommend using the
top one, since pushing :code:`Esc` in the bottom one will switch the view of our
molecule for a list of commands (We can easily go back by pressing the same button)
Here we will only need to type the command and the first parameter of the
command and any second, third or fourth parameter will be separated by a comma.
In the specific case of :code:`set_name`:
.. code:: none
PyMOL> set_name sele, fragment_A
Now we move to another of the most useful command-line commands of pymol,
:code:`select`. As the name of the command hint it allows to create an atom
selection from the command line. This can be specially useful when we have a huge
quantity of atoms that we want to select. It is its own conditional language and
we a more detailed description in the
`Selection Algebra `__ section
of the pymol documentation.
Now as example we will select the atoms of our molecule that we did not select
previously and we will name that selection as :code:`fragment_B`.
.. code:: none
PyMOL> select fragment_B, all and not fragment_A
Now lets say that we want to visualize :code:`fragment_A` using a VdW spheres
representation and :code:`fragment_B` using a ball and stick model. We can do
that with the mouse using the appropriate menus, but let's do it with the
command line!
.. code:: none
PyMOL> show spheres, fragment_A
PyMOL> preset.ball_and_stick('fragment_B')
Now lets create a new color (which we will call :code:`gurei`) and color everything by atom with the carbons in
that specific color.
.. code:: none
PyMOL> set_color gurey, [0.66,0.66,0.66]
PyMOL> util.cba('gurey')
.. note::
more information about coloring can be found in the `color `__
and `Advanced coloring `__
sections of the pymol wiki.
Now we are going to ray_trace our molecule. Ray-tracing a 3D model involves
calculating and adding to the final figure the appropriate lighting and shadows
of the 3D model. In other words, making your figure prettier than what it
usually looks in the normal viewer.
.. code:: none
PyMOL> ray
If we use ray by default the dimensions of the figure are going to be dependent
on our screen and the size of the window where we are visualizing the molecule.
If we want a higher resolution we have the option of buying a new screen with a
really high resolution, resizing the window until the limits of our screen, or
actually spend 30 seconds of our life understanding the syntax of the ray
command in the `pymol documentation `__.
It's your choice! but as I'm very picky with my figures and you are reading my
tutorial, lets behave like homo sapiens sapiens for once. We will render a
figure of 800x600 px (width x height).
.. code:: none
PyMOL> ray 800, 600
Great! now let me present to you the ray_trace_mode variable. If we change the
value of this variable the type of rendering and ray-tracing of our molecule
will change. It is very well documented in the pymol wiki but feel free to play
with it a bit. Here's the syntax to change its value and ray-trace afterwards.
.. code:: none
PyMOL> set ray_trace_mode, 1
PyMOL> ray 800, 600
After the ray trace, we can go to the File menu and export the image
appropriatedly but what fun is it to do it with the mouse when we have arrived
so far away using the command line? Let's write it instead!
.. code:: none
PyMOL> png my_frankenstein_molecule.png
Hurray!
PyMOL Scripts and Command Line Rendering
........................................
Our next step in this journey is to translate everything that we did to a python
script. You may wonder why? well I suggest you try to render a protein in cartoon
mode with a 4000x4000 resolution.
As you curse me in the event that you actually attempted that, now you know why
sometimes it is very usefull to run pymol without GUI. Especially when your
group has some fairly powerfull computers (falcon, buzzsaw, fireball, loki...)
**and no one is using them at that moment**
First let's show the syntax to run a python script with pymol through the
command line without the GUI:
.. code:: shell
pymol -c -r path/to/my/python_script.py
Simple right? remember that the it will run in the foreground and as a
consecuence it will lock your terminal until it finishes. If you want to run it
in the background:
.. code:: shell
pymol -c -r path/to/my/python_script.py &
and if you want to be able to log out of the computer but maintain the process
running:
.. code:: shell
nohup pymol -c -r path/to/my/python_script.py &
And now let's see how a python script that loads a molecule from a file,
colors it by atom (with 'gurey' carbons) renders and saves it, looks like:
.. code:: python
from pymol import cmd, stored, util
ifile = 'mymolecule.xyz' # .pse files can also be loaded
cmd.load(ifile)
cmd.do("preset.ball_and_stick('all')")
carbon_color = [0.666,0.666,0.666]
cmd.set_color('gurey',carbon_color)
util.cba('gurey','all')
width, height = 2751, 2286
cmd.ray(width,height)
cmd.png('mymolecule.png')
If you read the previous section, you can probably start tying things together
and see how, in general, translating from pymol commands to their python
counterpart can be relatively easy.
In case I might not have been clear enough regarding how well done the pymol
documentation is written, let me insist on it. In the following picture we can
see how beautifully and easily we can find the syntax in pymol as well as the
syntax in python for the same pymol command with all their parameters explained.
.. centered:: |pymol_wiki_screenshot|
.. note::
You might not believe it, but they happen to have a similar scheme for all
their commands in the wiki. I know it's crazy right?? and even with such a
wonderfully crafted documentation there is people who would rather enlarge
the window to increase the quality of the rendered figure over checking the
documentation. People are crazy!
Standard Group Designs
........................
The Paton group has a general template for creating figures in
PyMOL. There is a script called ``pymol_style.py`` located
on the `Theory Suite GitHub `_.
This script, when called in your ``.pymolrc`` gives you access to
a lot of the style tools used in the Paton and Kim groups.
.. note::
You must be a member of the Theory Suite GitHub organization to
access the GitHub repository with the script mentioned above.
To use this script, download the script to your computer and add
the line
.. code:: shell
run /file/location/pymol_style.py
in your ``.pymolrc`` (which you can reach with ``File>Edit pymolrc``).
So now, you can create the common Paton Group molecule figures
with the command ``BallnStick all``.
Additionally, if there are other preset commands you would like to include,
this is a good place to put them. For example, I have included
.. code:: shell
set label_distance_digits,2
to ensure that any measurements I make give me the correct number of
significant figures.