I implemented the coordinate transformation and the selection of atoms outside PyMol, in R. In principle it works, but there seems to be some error, since too many atoms are selected, corresponding roughly, but not completely to an enlarged clipping corridor between the planes defined by get_view, matrix elements (6,1) and (6,2).  Or could it be that not the complete slab is visualized in PyMol? However, the missing atoms are completely shadowed.

Do I understand the rows of the view matrix well (see http://www.pymolwiki.org/index.php/Get_View), by computing the following coordinate transformation?:
1) Translation of the original pdb coordinates by subtracting row 5 of the view matrix (translation of the coordinate origin to the rotation center).
2) Rotation of the coordinates by rows 1-3 of the view matrix.
3) Test: view[4,3] + view[6,1]) <= z <= view[4,3] + view[6,2].

Sorry for this simple question of affine geometry, but I hope I did not make a logical mistake in this domain...


Tsjerk Wassenaar wrote:

Hi Johannes,

It's not that hard. The clipping planes are defined by the z coordinate (in the viewing matrix). So you can get the atoms for a selection, transform to get the new z coordinate only, and check whether it's in between the planes:

m = cmd.get_model(selection).atom
v = cmd.get_view()
m = [ i for i in m if clipped(i,v) ]

So clipped should do the transform and check whether the atom is clipped. The trick then is to turn m back into a selection.

Hope it helps,


On Feb 25, 2011 5:18 PM, "Johannes Wollbold" <jwollbold@gmx.de> wrote:

Jason Vertrees wrote: > Having said this, you can however, can get the clipping information > from P...

Hi Jason,

thank you again for the hint. First I looked if I can select atoms
according to their coordinates, or store new coordinates after a
rotation / shift. But implicitly you already said that such
functionalities are not yet implemented. If clipping is performed with
the original camera view, the task is simple. get_view gives the output
(see above link to the help page):

set_view (\
    1.000000000,    0.000000000,    0.000000000,\
    0.000000000,    1.000000000,    0.000000000,\
    0.000000000,    0.000000000,    1.000000000,\
    0.000000000,    0.000000000, -320.337890625,\
   74.147140503,   74.174217224,   74.123344421,\
  317.145324707,  323.530487061,  -20.000000000 )

According to (4,3), the camera is shifted by -320 A in z direction only.
Since (6,1) and (6,2) indicate the camera distances of the slab planes,
I can select, in the pdb file, the atoms with (74 - 320 + 317 ) <= z <=
(74 - 320 + 323).

For different views, coordinate transformations with the rotation matrix
of the first 3 lines are needed. This should not be very difficult, but
perhaps somebody has already a solution?

Best regards

> On Thu, Feb 24, 2011 at 3:50 AM, Johannes Wollbold <jwollbold@gmx.de> wrote: > >> Hello, >> >>...