Automated rendering of PDB proteins using PyMol
Downloading the .pdb file
As the RCSB offers direct HTTP acess, this step is trivial.
You can use this shell script to download any protein:
#!/bin/bash
# donwload-pdb.sh
wget http://www.rcsb.org/pdb/files/$1.pdb
Call it with the PDB ID to download, e.g. 1ULI
:
./download-pdb.sh 1ULI
Rendering using PyMol
First, install PyMol: Either download it from the website or just use your preferred package manager, e.g.:
sudo apt-get install pymol
By calling PyMol with a script instead of in interactive mode, we can automate the process of rendering an image - manual tuning of the perspective etc is likely to improve the results, however.
The following script integrates both the automatic download and the renderer. A temporary .pml
(PyMol script) file is created with static settings
#!/bin/bash
# render-pymol.sh
if [ $# -eq 0 ]
then
echo "Usage: render-pymol.sh <PDB ID>"
exit
fi
#Download
wget -qO $1.pdb http://www.rcsb.org/pdb/files/$1.pdb
#Create the rasmol script
echo "load $1.pdb;" > $1.pml
echo "set ray_opaque_background, on;" >> $1.pml
echo "show cartoon;" >> $1.pml
echo "color purple, ss h;" >> $1.pml
echo "color yellow, ss s;" >> $1.pml
echo "ray 1500,1500;" >> $1.pml
echo "png $1.png;" >> $1.pml
echo "quit;" >> $1.pml
#Execute PyMol
pymol -qxci $1.pml
#Remove temporary files
rm -rf $1.pml $1.pdb
Call it like this:
./render-pymol.sh 1ULI
This command will render the result and store it in 1ULI.png
Customizing the render style
In order to change the size of the generated PNG image, change this line:
echo "ray 1500,1500;" >> $1.pml
The numbers represent the width and height of the generated image. Note that increasing the image size will significantly increase the CPU time required to render the image, especially for complex proteins. Running render-pymol.sh
with 1500x1500px to render the 1ULI took 209 seconds on my Notebook as opposed to 33 seconds for 500x500.
These lines define the style of the rendered protein:
echo "show cartoon;" >> $1.pml
echo "color purple, ss h;" >> $1.pml
echo "color yellow, ss s;" >> $1.pml
while this line set the background color to transparent:
echo "set ray_opaque_background, off;" >> $1.pml
If you prefer a white (non-transparent) background instead, you can add this line right after the line containing load $1.pdb
:
echo "bg_color white;" >> $1.pml
echo "set ray_opaque_background, off;" >> $1.pml
Results