Hello There,
I noticed that my "button" command reassignments in $HOME/.pymolrc
are ignored/overruled when loading session files either from
the load command or from the command line.
These are the assignments that get reset when loading session files:
button m,None,PkAt
button m,Ctrl,Move
Also, I would like to propose that on the density wizard
an option for "Track & Center" (using the brand new center
command) be added to the distro.
IMHO it works better than either of the other tracking options
since it put the subject in the center of the screen without
changing zoom/slab settings. I've attached a modified version
of the wizard which works as a drop-in replacement and which
adds this functionality.
Best regards,
zac
from pymol.wizard import Wizard
from pymol import cmd
import pymol
import copy
default_map = [ '', '', '']
default_level = [ 1.0, 3.0, 1.0]
default_radius = 8.0
default_track = 1
class Density(Wizard):
def __init__(self):
Wizard.__init__(self)
# mode selection subsystem
self.radius = default_radius
self.map = copy.deepcopy(default_map)
self.level = copy.deepcopy(default_level)
self.track = copy.deepcopy(default_track)
self.avail_maps = []
self.menu['radius'] = [
[1, '4.0 A
Radius','cmd.get_wizard().set_radius(4)'],
[1, '5.0 A
Radius','cmd.get_wizard().set_radius(5)'],
[1, '6.0 A
Radius','cmd.get_wizard().set_radius(6)'],
[1, '8.0 A
Radius','cmd.get_wizard().set_radius(8)'],
[1, '10.0 A
Radius','cmd.get_wizard().set_radius(10)'],
[1, '15.0 A
Radius','cmd.get_wizard().set_radius(15)'],
[1, '20.0 A
Radius','cmd.get_wizard().set_radius(20)'],
[1, '50.0 A
Radius','cmd.get_wizard().set_radius(50)'],
]
self.menu['map0'] = []
self.menu['map1'] = []
self.menu['map2'] = []
level_menu = lambda x:[ [1, '1.0
sigma','cmd.get_wizard().set_level(%d,1.0)'%x],
[1, '1.5
sigma','cmd.get_wizard().set_level(%d,1.5)'%x],
[1, '2.0
sigma','cmd.get_wizard().set_level(%d,2.0)'%x],
[1, '3.0
sigma','cmd.get_wizard().set_level(%d,3.0)'%x],
[1, '5.0
sigma','cmd.get_wizard().set_level(%d,5.0)'%x]]
self.menu['level0'] = level_menu(0)
self.menu['level1'] = level_menu(1)
self.menu['level2'] = level_menu(2)
self.menu['track'] = [
[ 1, "Track Off", 'cmd.get_wizard().set_track(0)'],
[ 1, "Track & Center", 'cmd.get_wizard().set_track(1)'],
[ 1, "Track & Origin", 'cmd.get_wizard().set_track(2)'],
[ 1, "Track & Zoom", 'cmd.get_wizard().set_track(3)'],
]
if (self.map[0] == '') and (self.map[1] == '') and (self.map[2]==''):
for a in cmd.get_names(): # automatically load first map we find
if cmd.get_type(a)=='object:map':
self.map[0]=a
break
self.update_map_menus()
def update_map_menus(self):
self.avail_maps = []
for a in cmd.get_names('objects'):
if cmd.get_type(a)=='object:map':
self.avail_maps.append(a)
c = 0
for a in self.map:
map_kee = 'map'+str(c)
level_kee = 'level'+str(c)
self.menu[map_kee] = [[2,'Select Map','']]
for a in self.avail_maps:
self.menu[map_kee].append([
1,a,'cmd.get_wizard().set_map(%d,"%s")'%(c,a) ])
self.menu[map_kee].append([1,'(none)','cmd.get_wizard().set_map(%d,"")'%c])
c = c + 1
def set_track(self,track):
self.track = track
cmd.refresh_wizard()
def set_level(self,map,level):
self.level[map] = level
self.update_maps()
cmd.refresh_wizard()
def set_map(self,map,map_name):
self.map[map] = map_name
cmd.refresh_wizard()
def set_radius(self,radius):
self.radius = radius
self.update_maps()
cmd.refresh_wizard()
def update_maps(self):
if 'pk1' in cmd.get_names('selections'):
save = cmd.get_setting_text('auto_zoom')
save = cmd.set('auto_zoom',0,quiet=1)
c = 0
for a in self.map:
oname = 'w'+str(c+1)+'_'+a
if oname not in cmd.get_names():
color = 1
else:
color = 0
if len(a):
if cmd.get_type(a)=='object:map':
cmd.isomesh(oname,a,self.level[c],
"(pk1)",self.radius,state=1)
if color:
if c == 0:
cmd.color('blue',oname)
elif c == 1:
cmd.color('white',oname)
else:
cmd.color('magenta',oname)
c = c + 1
save = cmd.set('auto_zoom',save,quiet=1)
if self.track == 1:
cmd.center("(pk1)",-1,1)
elif self.track == 2:
cmd.origin("(pk1)")
elif self.track == 3:
cmd.zoom("(pk1)",self.radius)
cmd.clip("slab",self.radius-1)
cmd.refresh_wizard()
# generic set routines
def zoom(self):
if 'pk1' in cmd.get_names('selections'):
cmd.zoom("(pk1)",self.radius)
cmd.clip("slab",self.radius-1)
else:
c = 0
for a in self.map:
oname = 'w'+str(c+1)+'_'+a
if len(a):
if a in cmd.get_names('objects'):
cmd.zoom(oname)
cmd.clip("slab",self.radius-1)
c = c + 1
def get_panel(self):
self.update_map_menus()
return [
[ 1, 'Density Map Wizard',''],
[ 2, 'Update Maps' , 'cmd.get_wizard().update_maps()'],
[ 2, 'Zoom' , 'cmd.get_wizard().zoom()'],
[ 3, "Radius: %3.1f A"%self.radius,'radius'],
[ 3, "Map 1: "+self.map[0],'map0'],
[ 3, " @ "+str(self.level[0])+" sigma",'level0'],
[ 3, "Map 2: "+self.map[1],'map1'],
[ 3, " @ "+str(self.level[1])+" sigma",'level1'],
[ 3, "Map 3: "+self.map[2],'map2'],
[ 3, " @ "+str(self.level[2])+" sigma",'level2'],
[ 3, self.menu['track'][self.track][1], 'track' ],
[ 2, 'Done','cmd.set_wizard()'],
]
def cleanup(self):
global default_radius,default_map,default_level
default_radius = self.radius
default_map = self.map
default_level = self.level
default_track = self.track
self.clear()
def clear(self):
pass
def do_pick(self,bondFlag):
global dist_count
if not bondFlag:
if self.track > 0:
self.update_maps()