Commit 8f391650 by Peter Eastman

Added option to add hydrogens

parent 24e12c12
...@@ -407,6 +407,12 @@ class PDBFixer(object): ...@@ -407,6 +407,12 @@ class PDBFixer(object):
self.topology = newTopology2 self.topology = newTopology2
self.positions = newPositions2 self.positions = newPositions2
def addMissingHydrogens(self, pH):
modeller = app.Modeller(self.topology, self.positions)
modeller.addHydrogens(pH=pH)
self.topology = modeller.topology
self.positions = modeller.positions
def _createForceField(self, newTopology): def _createForceField(self, newTopology):
forcefield = app.ForceField(os.path.join(os.path.dirname(__file__), 'soft.xml')) forcefield = app.ForceField(os.path.join(os.path.dirname(__file__), 'soft.xml'))
...@@ -472,4 +478,5 @@ if __name__=='__main__': ...@@ -472,4 +478,5 @@ if __name__=='__main__':
fixer.replaceNonstandardResidues() fixer.replaceNonstandardResidues()
fixer.findMissingAtoms() fixer.findMissingAtoms()
fixer.addMissingAtoms() fixer.addMissingAtoms()
fixer.addMissingHydrogens(7.0)
app.PDBFile.writeFile(fixer.topology, fixer.positions, open('output.pdb', 'w')) app.PDBFile.writeFile(fixer.topology, fixer.positions, open('output.pdb', 'w'))
...@@ -32,6 +32,12 @@ def convertResiduesPageCallback(parameters, handler): ...@@ -32,6 +32,12 @@ def convertResiduesPageCallback(parameters, handler):
def missingAtomsPageCallback(parameters, handler): def missingAtomsPageCallback(parameters, handler):
fixer.addMissingAtoms() fixer.addMissingAtoms()
displayAddHydrogensPage()
def addHydrogensPageCallback(parameters, handler):
if 'add' in parameters:
pH = float(parameters.getfirst('ph'))
fixer.addMissingHydrogens(pH)
displayDownloadPage() displayDownloadPage()
def downloadPageCallback(parameters, handler): def downloadPageCallback(parameters, handler):
...@@ -164,7 +170,7 @@ def displayMissingAtomsPage(): ...@@ -164,7 +170,7 @@ def displayMissingAtomsPage():
allResidues = list(set(fixer.missingAtoms.iterkeys()).union(fixer.missingTerminals.iterkeys())) allResidues = list(set(fixer.missingAtoms.iterkeys()).union(fixer.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() displayAddHydrogensPage()
return return
indexInChain = {} indexInChain = {}
for chain in fixer.topology.chains(): for chain in fixer.topology.chains():
...@@ -196,6 +202,23 @@ The following residues are missing heavy atoms, which will be added. ...@@ -196,6 +202,23 @@ The following residues are missing heavy atoms, which will be added.
<html> <html>
""" % table) """ % table)
def displayAddHydrogensPage():
uiserver.setCallback(addHydrogensPageCallback)
uiserver.setContent("""
<html>
<head><title>PDB Fixer</title></head>
<body>
Add missing hydrogen atoms?
<p>
<form method="post" action="/">
<input type="checkbox" name="add" checked> Add hydrogens appropriate for pH <input type="text" name="ph" value="7.0" size="5">
<p>
<input type="submit" value="Continue"/>
</form>
</body>
<html>
""")
def displayDownloadPage(): def displayDownloadPage():
uiserver.setCallback(downloadPageCallback) uiserver.setCallback(downloadPageCallback)
uiserver.setContent(""" uiserver.setContent("""
......
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