Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
cd68d924
Commit
cd68d924
authored
Apr 03, 2013
by
Peter Eastman
Browse files
Modeller.addHydrogens() allows the user to provide an XML file with additional residue definitions
parent
47b2ac75
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
23 deletions
+35
-23
wrappers/python/simtk/openmm/app/modeller.py
wrappers/python/simtk/openmm/app/modeller.py
+35
-23
No files found.
wrappers/python/simtk/openmm/app/modeller.py
View file @
cd68d924
...
...
@@ -487,7 +487,30 @@ class Modeller(object):
self
.
variants
=
variants
self
.
terminal
=
terminal
def
addHydrogens
(
self
,
forcefield
,
pH
=
7.0
,
variants
=
None
):
def
_loadHydrogenDefinitions
(
self
,
file
):
residueHydrogens
=
{}
tree
=
etree
.
parse
(
file
)
infinity
=
float
(
'Inf'
)
for
residue
in
tree
.
getroot
().
findall
(
'Residue'
):
resName
=
residue
.
attrib
[
'name'
]
data
=
Modeller
.
_ResidueData
(
resName
)
residueHydrogens
[
resName
]
=
data
for
variant
in
residue
.
findall
(
'Variant'
):
data
.
variants
.
append
(
variant
.
attrib
[
'name'
])
for
hydrogen
in
residue
.
findall
(
'H'
):
maxph
=
infinity
if
'maxph'
in
hydrogen
.
attrib
:
maxph
=
float
(
hydrogen
.
attrib
[
'maxph'
])
atomVariants
=
None
if
'variant'
in
hydrogen
.
attrib
:
atomVariants
=
hydrogen
.
attrib
[
'variant'
].
split
(
','
)
terminal
=
None
if
'terminal'
in
hydrogen
.
attrib
:
terminal
=
hydrogen
.
attrib
[
'terminal'
]
data
.
hydrogens
.
append
(
Modeller
.
_Hydrogen
(
hydrogen
.
attrib
[
'name'
],
hydrogen
.
attrib
[
'parent'
],
maxph
,
atomVariants
,
terminal
))
return
residueHydrogens
def
addHydrogens
(
self
,
forcefield
,
pH
=
7.0
,
variants
=
None
,
hydrogenDefinitions
=
None
):
"""Add missing hydrogens to the model.
Some residues can exist in multiple forms depending on the pH and properties of the local environment. These
...
...
@@ -531,6 +554,9 @@ class Modeller(object):
- variants (list=None) an optional list of variants to use. If this is specified, its length must equal the number
of residues in the model. variants[i] is the name of the variant to use for residue i (indexed starting at 0).
If an element is None, the standard rules will be followed to select a variant for that residue.
- hydrogenDefinitions (File=None) an optional XML file containing definitions for hydrogens to add. The built in
hydrogens.xml file contains definitions for standard amino acids and nucleotides. This parameter can be used to
provide additional definitions for other residue types.
Returns: a list of what variant was actually selected for each residue, in the same format as the variants parameter
"""
# Check the list of variants.
...
...
@@ -546,26 +572,12 @@ class Modeller(object):
# Load the residue specifications.
if
Modeller
.
_residueHydrogens
is
None
:
Modeller
.
_residueHydrogens
=
{}
tree
=
etree
.
parse
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'data'
,
'hydrogens.xml'
))
infinity
=
float
(
'Inf'
)
for
residue
in
tree
.
getroot
().
findall
(
'Residue'
):
resName
=
residue
.
attrib
[
'name'
]
data
=
Modeller
.
_ResidueData
(
resName
)
Modeller
.
_residueHydrogens
[
resName
]
=
data
for
variant
in
residue
.
findall
(
'Variant'
):
data
.
variants
.
append
(
variant
.
attrib
[
'name'
])
for
hydrogen
in
residue
.
findall
(
'H'
):
maxph
=
infinity
if
'maxph'
in
hydrogen
.
attrib
:
maxph
=
float
(
hydrogen
.
attrib
[
'maxph'
])
atomVariants
=
None
if
'variant'
in
hydrogen
.
attrib
:
atomVariants
=
hydrogen
.
attrib
[
'variant'
].
split
(
','
)
terminal
=
None
if
'terminal'
in
hydrogen
.
attrib
:
terminal
=
hydrogen
.
attrib
[
'terminal'
]
data
.
hydrogens
.
append
(
Modeller
.
_Hydrogen
(
hydrogen
.
attrib
[
'name'
],
hydrogen
.
attrib
[
'parent'
],
maxph
,
atomVariants
,
terminal
))
Modeller
.
_residueHydrogens
=
self
.
_loadHydrogenDefinitions
(
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'data'
,
'hydrogens.xml'
))
if
hydrogenDefinitions
is
None
:
residueHydrogens
=
Modeller
.
_residueHydrogens
else
:
residueHydrogens
=
Modeller
.
_residueHydrogens
.
copy
()
residueHydrogens
.
update
(
self
.
_loadHydrogenDefinitions
(
hydrogenDefinitions
))
# Make a list of atoms bonded to each atom.
...
...
@@ -601,10 +613,10 @@ class Modeller(object):
newResidue
=
newTopology
.
addResidue
(
residue
.
name
,
newChain
)
isNTerminal
=
(
residue
==
chain
.
_residues
[
0
])
isCTerminal
=
(
residue
==
chain
.
_residues
[
-
1
])
if
residue
.
name
in
Modeller
.
_
residueHydrogens
:
if
residue
.
name
in
residueHydrogens
:
# Add hydrogens. First select which variant to use.
spec
=
Modeller
.
_
residueHydrogens
[
residue
.
name
]
spec
=
residueHydrogens
[
residue
.
name
]
variant
=
variants
[
residue
.
index
]
if
variant
is
None
:
if
residue
.
name
==
'CYS'
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment