Commit 892470c1 by Peter Eastman

Preliminary support for adding missing residues

parent f8d71ec9
import simtk.openmm.app as app import simtk.openmm.app as app
from simtk.openmm.app.internal.pdbstructure import PdbStructure
from pdbfixer import PDBFixer, substitutions from pdbfixer import PDBFixer, substitutions
import uiserver import uiserver
import webbrowser import webbrowser
...@@ -7,19 +8,17 @@ from cStringIO import StringIO ...@@ -7,19 +8,17 @@ from cStringIO import StringIO
def startPageCallback(parameters, handler): def startPageCallback(parameters, handler):
if 'pdbfile' in parameters: if 'pdbfile' in parameters:
global fixer global fixer
pdb = app.PDBFile(parameters['pdbfile'].value.splitlines()) pdb = PdbStructure(parameters['pdbfile'].value.splitlines())
fixer = PDBFixer(pdb) fixer = PDBFixer(pdb)
displayConvertResiduesPage() displayConvertResiduesPage()
def convertResiduesPageCallback(parameters, handler): def convertResiduesPageCallback(parameters, handler):
global nonstandard fixer.nonstandardResidues = [residue for i, residue in enumerate(fixer.nonstandardResidues) if 'convert'+str(i) in parameters]
nonstandard = [residue for i, residue in enumerate(nonstandard) if 'convert'+str(i) in parameters] fixer.replaceNonstandardResidues()
fixer.replaceNonstandardResidues(nonstandard)
nonstandard = []
displayMissingAtomsPage() displayMissingAtomsPage()
def missingAtomsPageCallback(parameters, handler): def missingAtomsPageCallback(parameters, handler):
fixer.addMissingAtoms(missingAtoms, missingTerminals) fixer.addMissingAtoms()
displayDownloadPage() displayDownloadPage()
def downloadPageCallback(parameters, handler): def downloadPageCallback(parameters, handler):
...@@ -50,9 +49,9 @@ PDB File: <input type="file" name="pdbfile"/> ...@@ -50,9 +49,9 @@ PDB File: <input type="file" name="pdbfile"/>
def displayConvertResiduesPage(): def displayConvertResiduesPage():
uiserver.setCallback(convertResiduesPageCallback) uiserver.setCallback(convertResiduesPageCallback)
global nonstandard fixer.findMissingResidues()
nonstandard = fixer.findNonstandardResidues() fixer.findNonstandardResidues()
if len(nonstandard) == 0: if len(fixer.nonstandardResidues) == 0:
displayMissingAtomsPage() displayMissingAtomsPage()
return return
indexInChain = {} indexInChain = {}
...@@ -60,7 +59,7 @@ def displayConvertResiduesPage(): ...@@ -60,7 +59,7 @@ def displayConvertResiduesPage():
for i, residue in enumerate(chain.residues()): for i, residue in enumerate(chain.residues()):
indexInChain[residue] = i+1 indexInChain[residue] = i+1
table = "" table = ""
for i, residue in enumerate(nonstandard): for i, residue in enumerate(fixer.nonstandardResidues):
table += ' <tr><td>%d</td><td>%s %d</td><td>%s</td><td><input type="checkbox" name="convert%d" checked></td></tr>\n' % (residue.chain.index+1, residue.name, indexInChain[residue], substitutions[residue.name], i) table += ' <tr><td>%d</td><td>%s %d</td><td>%s</td><td><input type="checkbox" name="convert%d" checked></td></tr>\n' % (residue.chain.index+1, residue.name, indexInChain[residue], substitutions[residue.name], i)
uiserver.setContent(""" uiserver.setContent("""
<html> <html>
...@@ -82,10 +81,8 @@ This PDB file contains non-standard residues. Do you want to convert them to th ...@@ -82,10 +81,8 @@ This PDB file contains non-standard residues. Do you want to convert them to th
def displayMissingAtomsPage(): def displayMissingAtomsPage():
uiserver.setCallback(missingAtomsPageCallback) uiserver.setCallback(missingAtomsPageCallback)
global missingAtoms fixer.findMissingAtoms()
global missingTerminals allResidues = list(set(fixer.missingAtoms.iterkeys()).union(fixer.missingTerminals.iterkeys()))
missingAtoms, missingTerminals = fixer.findMissingAtoms()
allResidues = list(set(missingAtoms.iterkeys()).union(missingTerminals.iterkeys()))
allResidues.sort(key=lambda x: x.index) allResidues.sort(key=lambda x: x.index)
if len(allResidues) == 0: if len(allResidues) == 0:
displayDownloadPage() displayDownloadPage()
...@@ -97,10 +94,10 @@ def displayMissingAtomsPage(): ...@@ -97,10 +94,10 @@ def displayMissingAtomsPage():
table = "" table = ""
for residue in allResidues: for residue in allResidues:
atoms = [] atoms = []
if residue in missingAtoms: if residue in fixer.missingAtoms:
atoms.extend(atom.name for atom in missingAtoms[residue]) atoms.extend(atom.name for atom in fixer.missingAtoms[residue])
if residue in missingTerminals: if residue in fixer.missingTerminals:
atoms.extend(atom for atom in missingTerminals[residue]) atoms.extend(atom for atom in fixer.missingTerminals[residue])
table += ' <tr><td>%d</td><td>%s %d</td><td>%s</td></tr>\n' % (residue.chain.index+1, residue.name, indexInChain[residue], ', '.join(atoms)) table += ' <tr><td>%d</td><td>%s %d</td><td>%s</td></tr>\n' % (residue.chain.index+1, residue.name, indexInChain[residue], ', '.join(atoms))
uiserver.setContent(""" uiserver.setContent("""
<html> <html>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment