3
$\begingroup$

What I want to do

I have a list of almost 200 PDB entries that I need to visually inspect. Luckily, the thumbnail image displayed on the PDB website (examples with RCSB or PDBe for a well-known structure) is enough to figure out whether I want to exclude an entry for subsequent use of the resulting cleaned-up list of entries.

Now, looking up these entries one by one on the website is easy to do, but is very slow and error-prone. I need to be careful copy/pasting accession codes, and it takes a lot of time to go to my list, copy an accession code, go to the website, paste, search, and have my answer once the result page has loaded fully.

In other words, I'm lazy and I think my time would be better spent doing something more interesting than copy/pasting 200 times.

Attempt at a solution

I figured it shouldn't be too difficult to use PyMOL with a bit of scripting to automatically fetch each entry and generate a small image (faster than ray-tracing, which I don't need for this quick inspection). Here is my attempt:

pdb_entries = ['1m18', '1eqz'] # The real list has almost 200 entries, but 2 are enough to test the script

for entry in pdb_entries:
    cmd.fetch(entry, async = 0, path = "./pdb-files")
    filename = "./pdb-imgs/" + entry
    cmd.png(filename, width = 600, dpi = 100, ray = 0, quiet = 0)
    cmd.delete(entry)

Problem

When I save this script as fetch-all.py and run it from within PyMOL with the command run fetch-all.py, the structure files are correctly downloaded in the ./pdb-files directory and images with names matching the PDB accession codes are generated in the ./pdb-imgs directory. So, it seems everything works. Except these images are just black, not showing anything of the structure.

I tried to add cmd.center(entry) and cmd.show("cartoon", entry) before saving the PNG files, but it did not change anything. I also looked up the help page for cmd.png(), thinking I was missing something, but I couldn't find anything I would be obviously missing there.

Any idea? Thank you all in advance.

Edit: I forgot to mention that this problem of black images happens with the latest PyMOL (2.2.0) and also with an older version (1.7.4).

Edit: when I run the commands inside the loop one by one at the PyMOL prompt, everything works fine, I get images correctly saved. It seems it doesn't work in the context of the loop only. I double checked the loop syntax and it looks fine to me (but I might be missing something; I don't know python very well).

Edit: I also tried cmd.save() instead of cmd.png(), but it did not solve the problem.

$\endgroup$
  • $\begingroup$ Could it be that as all your structures have different x, y and z coordinates. Therefore whereever pymol is centered it isnt in a position where the protein is? $\endgroup$ – pazchem Aug 7 '18 at 4:38
  • $\begingroup$ Therefore could be fixed by aligning all the structures so they all appear in the same x, y and z range $\endgroup$ – pazchem Aug 7 '18 at 4:40
  • $\begingroup$ I tried to add cmd.center(entry) in the loop that processes each entry, to make sure that each entry gets properly centered before saving a picture. That didn't solve the problem. $\endgroup$ – Guillaume Aug 7 '18 at 16:25
  • $\begingroup$ Have you tried using cmd.orient ? $\endgroup$ – pazchem Aug 7 '18 at 19:17
  • $\begingroup$ I just gave it a try, it did not solve the problem of the black images. $\endgroup$ – Guillaume Aug 8 '18 at 17:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.