Re: [PyMOL] Distance measure between pseudo atoms does not update over states

2023-07-19 Thread Istvan Kolossvary
Hi Jarrett,

Thank you very much for the fix, it works perfectly.

Best regards,

   Istvan


On Wed, Jul 19, 2023 at 9:02 PM Jarrett Johnson <
jarrett.john...@schrodinger.com> wrote:

> Hi Istvan,
>
> I can reproduce the same issue. Seems to be some unintended behavior with
> how this multistate pseudoatom object is created. I've attached a modified
> center_of_mass.py script so that it should behave the way you expect. Let
> me know if this works for you.
>
> Example that I tried with this:
>
> fetch 1nmr
> run center_of_mass_states_joined.py
> com 1nmr, object=COM
> wizard distance
> # created distances between traj atom and pseudoatom
>
> Hope that helps,
> Jarrett J.
>
> On Tue, Jul 18, 2023 at 12:52 PM Istvan Kolossvary 
> wrote:
>
>> Hi,
>>
>> I have a simulation trajectory loaded in Pymol and I want to display
>> certain interatomic distances interactively. This works perfectly fine with
>> normal atoms, I can see how these selected distances change over the course
>> of the simulation using the wizard and playing the movie. However, it seems
>> that this feature doesn't work with pseudo atoms. I defined a couple of
>> center-of-mass pseudo atoms using this script
>> http://www.pymolwiki.org/index.php/center_of_mass. The script creates
>> separate objects corresponding to the different COMs and each COM object
>> has the same number of states as the trajectory object. I can use the
>> wizard, select the distances, which show on the display, but when I play
>> the movie, the distance values are not updated while the pseudo atoms do
>> move around. The first thing I figured was that maybe the COM objects
>> should be merged in a single object. So, I did that but to no avail, the
>> distances are not updated while I play the movie. I must be overlooking
>> something, can you tell me why this is not working?
>>
>> Thank you very much,
>>
>>Istvan
>> ___
>> PyMOL-users mailing list
>> Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net
>> Unsubscribe:
>> https://sourceforge.net/projects/pymol/lists/pymol-users/unsubscribe
>
>
>
> --
>
> *Jarrett Johnson* | Senior Developer, PyMOL
>
>
___
PyMOL-users mailing list
Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net
Unsubscribe: 
https://sourceforge.net/projects/pymol/lists/pymol-users/unsubscribe

Re: [PyMOL] Distance measure between pseudo atoms does not update over states

2023-07-19 Thread Jarrett Johnson
Hi Istvan,

I can reproduce the same issue. Seems to be some unintended behavior with
how this multistate pseudoatom object is created. I've attached a modified
center_of_mass.py script so that it should behave the way you expect. Let
me know if this works for you.

Example that I tried with this:

fetch 1nmr
run center_of_mass_states_joined.py
com 1nmr, object=COM
wizard distance
# created distances between traj atom and pseudoatom

Hope that helps,
Jarrett J.

On Tue, Jul 18, 2023 at 12:52 PM Istvan Kolossvary 
wrote:

> Hi,
>
> I have a simulation trajectory loaded in Pymol and I want to display
> certain interatomic distances interactively. This works perfectly fine with
> normal atoms, I can see how these selected distances change over the course
> of the simulation using the wizard and playing the movie. However, it seems
> that this feature doesn't work with pseudo atoms. I defined a couple of
> center-of-mass pseudo atoms using this script
> http://www.pymolwiki.org/index.php/center_of_mass. The script creates
> separate objects corresponding to the different COMs and each COM object
> has the same number of states as the trajectory object. I can use the
> wizard, select the distances, which show on the display, but when I play
> the movie, the distance values are not updated while the pseudo atoms do
> move around. The first thing I figured was that maybe the COM objects
> should be merged in a single object. So, I did that but to no avail, the
> distances are not updated while I play the movie. I must be overlooking
> something, can you tell me why this is not working?
>
> Thank you very much,
>
>Istvan
> ___
> PyMOL-users mailing list
> Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net
> Unsubscribe:
> https://sourceforge.net/projects/pymol/lists/pymol-users/unsubscribe



-- 

*Jarrett Johnson* | Senior Developer, PyMOL
'''
See more here: http://www.pymolwiki.org/index.php/center_of_mass

DESCRIPTION

   Places a pseudoatom at the center of mass

   Author: Sean Law
   Michigan State University
   slaw (at) msu . edu

SEE ALSO

   pseudoatom, get_com
'''

from __future__ import print_function
from pymol import cmd


def com(selection, state=None, mass=None, object=None, quiet=1, **kwargs):
quiet = int(quiet)
if (object == None):
try:
object = cmd.get_legal_name(selection)
object = cmd.get_unused_name(object + "_COM", 0)
except AttributeError:
object = 'COM'
cmd.delete(object)

if (state != None):
x, y, z = get_com(selection, mass=mass, quiet=quiet)
if not quiet:
print("%f %f %f" % (x, y, z))
cmd.pseudoatom(object, pos=[x, y, z], **kwargs)
cmd.show("spheres", object)
else:
for i in range(cmd.count_states()):
x, y, z = get_com(selection, mass=mass, state=i + 1, quiet=quiet)
if not quiet:
print("State %d:%f %f %f" % (i + 1, x, y, z))
obj_name = f"_COM{object}{i}"
cmd.pseudoatom(obj_name, pos=[x, y, z], **kwargs)
cmd.show("spheres", 'last ' + obj_name)
cmd.join_states(object, f"_COM{object}*")
cmd.delete(f"_COM{object}*")

cmd.extend("com", com)


def get_com(selection, state=1, mass=None, quiet=1):
"""
 DESCRIPTION

Calculates the center of mass

Author: Sean Law
Michigan State University
slaw (at) msu . edu
"""
quiet = int(quiet)

totmass = 0.0
if mass != None and not quiet:
print("Calculating mass-weighted COM")

state = int(state)
model = cmd.get_model(selection, state)
x, y, z = 0, 0, 0
for a in model.atom:
if (mass != None):
m = a.get_mass()
x += a.coord[0] * m
y += a.coord[1] * m
z += a.coord[2] * m
totmass += m
else:
x += a.coord[0]
y += a.coord[1]
z += a.coord[2]

if (mass != None):
return x / totmass, y / totmass, z / totmass
else:
return x / len(model.atom), y / len(model.atom), z / len(model.atom)

cmd.extend("get_com", get_com)

# vi:expandtab:sw=3
___
PyMOL-users mailing list
Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net
Unsubscribe: 
https://sourceforge.net/projects/pymol/lists/pymol-users/unsubscribe

[PyMOL] Distance measure between pseudo atoms does not update over states

2023-07-18 Thread Istvan Kolossvary
Hi,

I have a simulation trajectory loaded in Pymol and I want to display
certain interatomic distances interactively. This works perfectly fine with
normal atoms, I can see how these selected distances change over the course
of the simulation using the wizard and playing the movie. However, it seems
that this feature doesn't work with pseudo atoms. I defined a couple of
center-of-mass pseudo atoms using this script
http://www.pymolwiki.org/index.php/center_of_mass. The script creates
separate objects corresponding to the different COMs and each COM object
has the same number of states as the trajectory object. I can use the
wizard, select the distances, which show on the display, but when I play
the movie, the distance values are not updated while the pseudo atoms do
move around. The first thing I figured was that maybe the COM objects
should be merged in a single object. So, I did that but to no avail, the
distances are not updated while I play the movie. I must be overlooking
something, can you tell me why this is not working?

Thank you very much,

   Istvan
___
PyMOL-users mailing list
Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net
Unsubscribe: 
https://sourceforge.net/projects/pymol/lists/pymol-users/unsubscribe