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
6dc44c0e
Commit
6dc44c0e
authored
Mar 03, 2015
by
peastman
Browse files
Added keepIds flag to PDBFile.writeFile()
parent
8d276c26
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
20 additions
and
8 deletions
+20
-8
wrappers/python/simtk/openmm/app/pdbfile.py
wrappers/python/simtk/openmm/app/pdbfile.py
+20
-8
No files found.
wrappers/python/simtk/openmm/app/pdbfile.py
View file @
6dc44c0e
...
...
@@ -229,16 +229,19 @@ class PDBFile(object):
map
[
atom
.
attrib
[
id
]]
=
name
@
staticmethod
def
writeFile
(
topology
,
positions
,
file
=
sys
.
stdout
,
modelIndex
=
Non
e
):
def
writeFile
(
topology
,
positions
,
file
=
sys
.
stdout
,
keepIds
=
Fals
e
):
"""Write a PDB file containing a single model.
Parameters:
- topology (Topology) The Topology defining the model to write
- positions (list) The list of atomic positions to write
- file (file=stdout) A file to write to
- keepIds (bool=False) If True, keep the residue and chain IDs specified in the Topology rather than generating
new ones. Warning: It is up to the caller to make sure these are valid IDs that satisfy the requirements of
the PDB format. Otherwise, the output file will be invalid.
"""
PDBFile
.
writeHeader
(
topology
,
file
)
PDBFile
.
writeModel
(
topology
,
positions
,
file
)
PDBFile
.
writeModel
(
topology
,
positions
,
file
,
keepIds
=
keepIds
)
PDBFile
.
writeFooter
(
topology
,
file
)
@
staticmethod
...
...
@@ -262,7 +265,7 @@ class PDBFile(object):
print
>>
file
,
"CRYST1%9.3f%9.3f%9.3f%7.2f%7.2f%7.2f P 1 1 "
%
(
a_length
,
b_length
,
c_length
,
alpha
,
beta
,
gamma
)
@
staticmethod
def
writeModel
(
topology
,
positions
,
file
=
sys
.
stdout
,
modelIndex
=
None
):
def
writeModel
(
topology
,
positions
,
file
=
sys
.
stdout
,
modelIndex
=
None
,
keepIds
=
False
):
"""Write out a model to a PDB file.
Parameters:
...
...
@@ -270,6 +273,9 @@ class PDBFile(object):
- positions (list) The list of atomic positions to write
- file (file=stdout) A file to write the model to
- modelIndex (int=None) If not None, the model will be surrounded by MODEL/ENDMDL records with this index
- keepIds (bool=False) If True, keep the residue and chain IDs specified in the Topology rather than generating
new ones. Warning: It is up to the caller to make sure these are valid IDs that satisfy the requirements of
the PDB format. Otherwise, the output file will be invalid.
"""
if
len
(
list
(
topology
.
atoms
()))
!=
len
(
positions
):
raise
ValueError
(
'The number of positions must match the number of atoms'
)
...
...
@@ -284,6 +290,9 @@ class PDBFile(object):
if
modelIndex
is
not
None
:
print
>>
file
,
"MODEL %4d"
%
modelIndex
for
(
chainIndex
,
chain
)
in
enumerate
(
topology
.
chains
()):
if
keepIds
:
chainName
=
chain
.
id
else
:
chainName
=
chr
(
ord
(
'A'
)
+
chainIndex
%
26
)
residues
=
list
(
chain
.
residues
())
for
(
resIndex
,
res
)
in
enumerate
(
residues
):
...
...
@@ -291,6 +300,10 @@ class PDBFile(object):
resName
=
res
.
name
[:
3
]
else
:
resName
=
res
.
name
if
keepIds
:
resId
=
res
.
id
else
:
resId
=
"%4d"
%
((
resIndex
+
1
)
%
10000
)
for
atom
in
res
.
atoms
():
if
len
(
atom
.
name
)
<
4
and
atom
.
name
[:
1
].
isalpha
()
and
(
atom
.
element
is
None
or
len
(
atom
.
element
.
symbol
)
<
2
):
atomName
=
' '
+
atom
.
name
...
...
@@ -303,16 +316,15 @@ class PDBFile(object):
symbol
=
atom
.
element
.
symbol
else
:
symbol
=
' '
line
=
"ATOM %5d %-4s %3s %s%4d %s%s%s 1.00 0.00 %2s "
%
(
atomIndex
%
100000
,
atomName
,
resName
,
chainName
,
(
resIndex
+
1
)
%
10000
,
_format_83
(
coords
[
0
]),
line
=
"ATOM %5d %-4s %3s %s%4s %s%s%s 1.00 0.00 %2s "
%
(
atomIndex
%
100000
,
atomName
,
resName
,
chainName
,
resId
,
_format_83
(
coords
[
0
]),
_format_83
(
coords
[
1
]),
_format_83
(
coords
[
2
]),
symbol
)
assert
len
(
line
)
==
80
,
'Fixed width overflow detected'
print
>>
file
,
line
posIndex
+=
1
atomIndex
+=
1
if
resIndex
==
len
(
residues
)
-
1
:
print
>>
file
,
"TER %5d %3s %s%4
d
"
%
(
atomIndex
,
resName
,
chainName
,
resI
ndex
+
1
)
print
>>
file
,
"TER %5d %3s %s%4
s
"
%
(
atomIndex
,
resName
,
chainName
,
resI
d
)
atomIndex
+=
1
if
modelIndex
is
not
None
:
print
>>
file
,
"ENDMDL"
...
...
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