Get Coordinates I: Difference between revisions
(alternatives) |
No edit summary |
||
Line 1: | Line 1: | ||
There are several ways to extract or load atomic coordinates in PyMOL using the python API. | |||
== Extract coordinates using [[Get_Model|get_model]] == | |||
This is the fastest method to extract coordinates. It considers the object rotation matrix. | |||
<source lang="python"> | <source lang="python"> | ||
xyz = cmd.get_model('sele', 1).get_coord_list() | |||
</source> | |||
== Extract coordinates using [[iterate_state]] == | |||
This is much slower than the first method. It does '''not''' consider the object rotation matrix. | |||
<source lang="python"> | |||
xyz = [] | |||
cmd.iterate_state(1, 'sele', 'xyz.append([x,y,z])', space=locals(), atomic=0) | |||
</source> | |||
== Load coordinates using [[Alter_State|alter_state]] == | |||
This is the most convenient way to load coordinates and works equivalent to '''iterate_state'''. | |||
<source lang="python"> | |||
cmd. | xyz = [...] # some Nx3 list with coordinates | ||
xyz_iter = iter(xyz) | |||
cmd.alter_state(1, 'sele', '(x,y,z) = xyz_iter.next()', space=locals()) | |||
</source> | </source> | ||
== Load coordinates using [[update]] == | |||
This example gets a copy of the coordinates in Python, rotates the object about the Z axis, and then updates the coordinates in the original object. | |||
<source lang="python"> | <source lang="python"> | ||
model = cmd.get_model('pept') | |||
for a in model.atom: | |||
a.coord = [ -a.coord[1], a.coord[0], a.coord[2]] | |||
cmd.load_model(model, "_tmp") | |||
cmd.update("pept", "_tmp") | |||
cmd.delete("_tmp") | |||
</source> | </source> | ||
== Load coordinates using load_coords == | |||
This method is experimental and buggy, but it's the fastest method to load coordinates. There is a count mistake in the state argument (must use state+1). The xyz argument '''must''' be a list of lists (no tuples). It only works for complete objects, not atom selections. | |||
<source lang="python"> | <source lang="python"> | ||
import pymol.experimenting | |||
pymol.experimenting.loadable = cmd.loadable | |||
pymol.experimenting.load_coords(xyz, object, state+1) | |||
</source> | </source> | ||
[[Category:Script_Library|Get Coordinates I]] | [[Category:Script_Library|Get Coordinates I]] | ||
[[Category:ObjSel_Scripts]] | [[Category:ObjSel_Scripts]] |
Revision as of 07:29, 2 April 2012
There are several ways to extract or load atomic coordinates in PyMOL using the python API.
Extract coordinates using get_model
This is the fastest method to extract coordinates. It considers the object rotation matrix.
xyz = cmd.get_model('sele', 1).get_coord_list()
Extract coordinates using iterate_state
This is much slower than the first method. It does not consider the object rotation matrix.
xyz = []
cmd.iterate_state(1, 'sele', 'xyz.append([x,y,z])', space=locals(), atomic=0)
Load coordinates using alter_state
This is the most convenient way to load coordinates and works equivalent to iterate_state.
xyz = [...] # some Nx3 list with coordinates
xyz_iter = iter(xyz)
cmd.alter_state(1, 'sele', '(x,y,z) = xyz_iter.next()', space=locals())
Load coordinates using update
This example gets a copy of the coordinates in Python, rotates the object about the Z axis, and then updates the coordinates in the original object.
model = cmd.get_model('pept')
for a in model.atom:
a.coord = [ -a.coord[1], a.coord[0], a.coord[2]]
cmd.load_model(model, "_tmp")
cmd.update("pept", "_tmp")
cmd.delete("_tmp")
Load coordinates using load_coords
This method is experimental and buggy, but it's the fastest method to load coordinates. There is a count mistake in the state argument (must use state+1). The xyz argument must be a list of lists (no tuples). It only works for complete objects, not atom selections.
import pymol.experimenting
pymol.experimenting.loadable = cmd.loadable
pymol.experimenting.load_coords(xyz, object, state+1)