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()
         

Reply via email to