PDB Web Services Script
From PyMOLWiki
Overview
A short snippet of code utilizing the new PDB Web Services.
Notes:
- See PDB Web Services
- You need SOAP for Python installed
- The sequence of a chain fetched from the PDB does not always equal the sequence of a chain fetched from the PDB Web Services. I believe the PDB Web Services has the complete biological chain, not just what's in the structure.
- The offset is a hack; it uses a trick in PyMOL and may not be robust at all. Use at your own caution.
The Code
import pymol from pymol import stored, cmd import SOAPpy # define a mapping from three letters to one # Thanks to whomever posted this on the PyMOLWiki: # http://www.pymolwiki.org/index.php/Label one_letter ={'VAL':'V', 'ILE':'I', 'LEU':'L', 'GLU':'E', 'GLN':'Q', \ 'ASP':'D', 'ASN':'N', 'HIS':'H', 'TRP':'W', 'PHE':'F', 'TYR':'Y', \ 'ARG':'R', 'LYS':'K', 'SER':'S', 'THR':'T', 'MET':'M', 'ALA':'A', \ 'GLY':'G', 'PRO':'P', 'CYS':'C'} # fetch some molecule; yes, 1foo exists in the PDB cmd.fetch("1foo", async=0) # get the sequence from PyMOL stored.pyMOLSeq = [] cmd.iterate( "1foo and c. A and n. CA" , "stored.pyMOLSeq.append( one_letter[resn] )" ) # open up the PDB web services and make a connection stored.pyMOLSeq = ''.join( stored.pyMOLSeq ) server = SOAPpy.SOAPProxy("http://www.pdb.org/pdb/services/pdbws") # fetch the secondary structure assignment from the PDB & # split it up into an array of characters stored.ss = list( server.getKabschSander("1foo", "A") ) # get the sequence pdbSeq = server.getSequenceForStructureAndChain("1foo", "A") # danger: hackishly foolish, but worked for 1foo. offset = pdbSeq.find( stored.pyMOLSeq ) # make the assignment in PyMOL cmd.alter( "1foo and c. A and n. CA and i. " + str(offset) + "-", "ss=stored.ss.pop(0)" ) # show as cartoons cmd.as("cartoon")