69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
from pymol import cmd
|
|
from random import random
|
|
import time
|
|
|
|
# this shows how you can efficiently update the coordinates
|
|
# of an existing model for real-time viewing
|
|
|
|
# for asychronous execution, you want to run this using the "spawn"
|
|
# command from inside PyMOL or with the "-l" option from the unix shell
|
|
|
|
# WARNING: if you do not run this using "spawn" or the "-l" option,
|
|
# PyMOL will freeze, will not refresh the workspace, and might be difficult
|
|
# to recover.
|
|
|
|
# To run this script so that you can stop it, run with the global option:
|
|
#
|
|
# spawn chempy_model02.py, global
|
|
#
|
|
# Then you have access to the "cont" variable, and can stop the loop by
|
|
# simply setting it:
|
|
#
|
|
# cont = False
|
|
#
|
|
|
|
cont = True
|
|
# first we need a model
|
|
|
|
cmd.load("$PYMOL_PATH/test/dat/pept.pdb","demo")
|
|
|
|
# let's dress it up a little bit
|
|
|
|
cmd.show("sticks","demo")
|
|
|
|
cmd.show("spheres","resi 10")
|
|
|
|
cmd.color("yellow","resi 5 and element C")
|
|
|
|
# turn off some of the chatter about reloading the object...
|
|
|
|
cmd.feedback("disable","executive","actions")
|
|
|
|
# now loop, updating the coordinates and reloading the model into
|
|
# state 1 of the "demo" object
|
|
|
|
m = cmd.get_model()
|
|
while cont:
|
|
time.sleep(0.05)
|
|
try:
|
|
cmd.set("suspend_updates","1") # only necessary if multithreading...
|
|
for a in m.atom:
|
|
a.coord[0]+=(random()-0.5)*0.1
|
|
a.coord[1]+=(random()-0.5)*0.1
|
|
a.coord[2]+=(random()-0.5)*0.1
|
|
cmd.load_model(m,"demo",1)
|
|
cmd.set("suspend_updates","0") # only necessary if multithreading...
|
|
except:
|
|
cmd.set("suspend_updates","0") # only necessary if multithreading...
|
|
traceback.print_exc()
|
|
cmd.refresh()
|
|
|
|
# Summary: this is portable, safe, but inefficient. For real-time visualization
|
|
# of coordinate changes, there is a way to do this by passing in an opaque
|
|
# C data structure...
|
|
|
|
# Cheers, warren@delanoscientific.com
|
|
|
|
|
|
|