Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
pymolfile
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
nomad-lab
pymolfile
Commits
fe013941
Commit
fe013941
authored
7 years ago
by
Berk Onat
Browse files
Options
Downloads
Patches
Plain Diff
Adding WriteTrajMol class for python interface.
parent
2c31d23f
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
pymolfile/pymolfile.py
+149
-0
149 additions, 0 deletions
pymolfile/pymolfile.py
with
149 additions
and
0 deletions
pymolfile/pymolfile.py
+
149
−
0
View file @
fe013941
...
@@ -309,6 +309,123 @@ class Topology(object):
...
@@ -309,6 +309,123 @@ class Topology(object):
#if self.pluginhandle is not None:
#if self.pluginhandle is not None:
# libpymolfile.close_file_read(self.pluginhandle)
# libpymolfile.close_file_read(self.pluginhandle)
class
WriteMolfile
(
object
):
def
__init__
(
self
,
molfile_handle
):
self
.
handle
=
molfile_handle
def
__enter__
(
self
):
if
self
.
handle
.
foutOpen
is
False
:
global
MOLFILE_PLUGINS
global
C_MOLFILE_PLUGINS
#numlist = libpymolfile.molfile_init()
self
.
handle
.
wplugin
=
libpymolfile
.
get_plugin
(
C_MOLFILE_PLUGINS
,
self
.
handle
.
wfplugin
[
0
])
self
.
handle
.
wpluginhandle
=
None
if
self
.
handle
.
topology
:
self
.
handle
.
natoms
=
self
.
handle
.
topology
.
natoms
#if self.handle.trajectory:
# rtn = self.handle.trajectory.iread()
# if self.handle.trajectory.atoms is not None and rtn is not None:
# self.handle.natoms = len(self.handle.trajectory.atoms["coords"])
if
self
.
handle
.
kwords
[
"
silent
"
]:
with
stdout_redirected
():
self
.
handle
.
wpluginhandle
=
libpymolfile
.
open_file_write
(
self
.
handle
.
wplugin
,
self
.
handle
.
wfname
,
self
.
handle
.
wtype
,
self
.
handle
.
natoms
)
self
.
handle
.
foutOpen
=
True
else
:
self
.
handle
.
wpluginhandle
=
libpymolfile
.
open_file_write
(
self
.
handle
.
wplugin
,
self
.
handle
.
wfname
,
self
.
handle
.
wtype
,
self
.
handle
.
natoms
)
self
.
handle
.
foutOpen
=
True
if
self
.
handle
.
wpluginhandle
is
not
None
:
return
self
else
:
return
None
def
__exit__
(
self
,
type
,
value
,
traceback
):
if
self
.
handle
.
foutEOF
:
if
self
.
handle
.
foutOpen
:
if
self
.
handle
.
wpluginhandle
is
not
None
:
rtn
=
libpymolfile
.
close_file_write
(
self
.
handle
.
wpluginhandle
)
if
rtn
:
self
.
handle
.
wpluginhandle
=
None
def
write_topology
(
self
):
status
=
False
bstatus
=
False
astatus
=
False
if
self
.
handle
.
topology
.
bonds
is
not
None
:
if
self
.
handle
.
wfplugin
[
1
][
7
]
>
0
:
bstatus
=
libpymolfile
.
write_fill_bonds
(
self
.
handle
.
wpluginhandle
,
self
.
handle
.
topology
.
bonds
)
if
self
.
handle
.
topology
.
angles
is
not
None
:
if
self
.
handle
.
wfplugin
[
1
][
8
]
>
0
:
astatus
=
libpymolfile
.
write_fill_angles
(
self
.
handle
.
wpluginhandle
,
self
.
handle
.
topology
.
angles
)
if
self
.
handle
.
wfplugin
[
1
][
6
]
>
0
and
self
.
handle
.
topology
.
structure
is
not
None
:
prototype
=
molfile_prototype
(
self
.
handle
.
wtype
)
newstructure
=
[
(
str
(
item
[
0
]),
str
(
item
[
1
]),
str
(
item
[
2
]),
int
(
item
[
3
]),
str
(
item
[
4
]),
str
(
item
[
5
]),
str
(
item
[
6
]),
str
(
item
[
7
]),
float
(
item
[
8
]),
float
(
item
[
9
]),
float
(
item
[
10
]),
float
(
item
[
11
]),
float
(
item
[
12
]),
int
(
item
[
13
])
)
if
len
(
item
)
<
15
else
(
str
(
item
[
0
]),
str
(
item
[
1
]),
str
(
item
[
2
]),
int
(
item
[
3
]),
str
(
item
[
4
]),
str
(
item
[
5
]),
str
(
item
[
6
]),
str
(
item
[
7
]),
float
(
item
[
8
]),
float
(
item
[
9
]),
float
(
item
[
10
]),
float
(
item
[
11
]),
float
(
item
[
12
]),
int
(
item
[
13
]),
int
(
item
[
14
])
)
for
item
in
self
.
handle
.
topology
.
structure
]
thestructure
=
np
.
array
(
newstructure
,
dtype
=
prototype
.
dtype
)
status
=
libpymolfile
.
write_fill_structure
(
self
.
handle
.
wpluginhandle
,
thestructure
)
else
:
status
=
True
return
status
def
write_trajectory
(
self
):
if
self
.
handle
.
wfplugin
[
1
][
9
]
>
0
and
self
.
handle
.
trajectory
:
rtnOut
=
None
done
=
False
print
(
"
Writing Trajectory
"
)
if
self
.
handle
.
trajectory
.
atoms
is
not
None
:
rtnOut
=
libpymolfile
.
write_fill_timestep
(
self
.
handle
.
wpluginhandle
,
self
.
handle
.
trajectory
.
atoms
)
while
done
is
False
:
rtn
=
self
.
handle
.
trajectory
.
iread
()
if
self
.
handle
.
trajectory
.
atoms
is
not
None
and
rtn
is
not
None
:
print
(
"
Writing Trajectory
"
)
rtnOut
=
libpymolfile
.
write_fill_timestep
(
self
.
handle
.
wpluginhandle
,
self
.
handle
.
trajectory
.
atoms
)
else
:
print
(
"
Done
"
)
done
=
True
self
.
handle
.
foutEOF
=
True
return
True
else
:
self
.
handle
.
foutEOF
=
True
return
True
class
OpenMolTraj
(
object
):
class
OpenMolTraj
(
object
):
def
__init__
(
self
,
traj_handle
):
def
__init__
(
self
,
traj_handle
):
...
@@ -496,8 +613,12 @@ def read_topology(file_name, file_format, plugin, silent):
...
@@ -496,8 +613,12 @@ def read_topology(file_name, file_format, plugin, silent):
if
(
topo
.
structure
is
not
None
or
if
(
topo
.
structure
is
not
None
or
topo
.
bonds
is
not
None
or
topo
.
bonds
is
not
None
or
topo
.
angles
is
not
None
):
topo
.
angles
is
not
None
):
if
topo
.
pluginhandle
is
not
None
:
libpymolfile
.
close_file_read
(
topo
.
pluginhandle
)
return
topo
return
topo
else
:
else
:
if
topo
.
pluginhandle
is
not
None
:
libpymolfile
.
close_file_read
(
topo
.
pluginhandle
)
del
topo
del
topo
return
None
return
None
...
@@ -651,11 +772,39 @@ class OpenMolfile(object):
...
@@ -651,11 +772,39 @@ class OpenMolfile(object):
warnings
.
warn
(
"
Pymolfile can not find a plugin to open the
'"
+
self
.
kwords
[
"
file_format
"
]
+
warnings
.
warn
(
"
Pymolfile can not find a plugin to open the
'"
+
self
.
kwords
[
"
file_format
"
]
+
"'
file format of the file
"
+
self
.
kwords
[
"
file_name
"
])
"'
file format of the file
"
+
self
.
kwords
[
"
file_name
"
])
def
save
(
self
,
wfname
,
wtype
=
None
):
self
.
wfname
=
wfname
if
wtype
is
None
:
file_dir
,
file_base
,
file_ext
=
get_dir_base_extension
(
wfname
)
if
file_ext
:
self
.
wtype
=
file_ext
else
:
self
.
wtype
=
file_base
else
:
self
.
wtype
=
wtype
self
.
wfplugin
=
get_plugin_with_ext
(
wtype
)
if
self
.
wfplugin
:
done
=
False
structOK
=
False
with
WriteMolfile
(
self
)
as
f
:
if
f
:
if
self
.
wfplugin
[
1
][
6
]
>
0
:
structOK
=
f
.
write_topology
()
if
self
.
wfplugin
[
1
][
9
]
>
0
:
done
=
f
.
write_trajectory
()
def
initialize_settings
(
self
):
def
initialize_settings
(
self
):
self
.
foutEOF
=
False
self
.
foutOpen
=
False
self
.
trajectory
=
None
self
.
trajectory
=
None
self
.
topology
=
None
self
.
topology
=
None
self
.
fplugin
=
None
self
.
fplugin
=
None
self
.
tplugin
=
None
self
.
tplugin
=
None
self
.
wfname
=
None
self
.
wtype
=
None
self
.
wplugin
=
None
self
.
wfplugin
=
None
self
.
natoms
=
None
self
.
smolplugin
=
None
self
.
smolplugin
=
None
self
.
cmolplugin
=
None
self
.
cmolplugin
=
None
self
.
kwords
=
{
self
.
kwords
=
{
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment