102 lines
2.8 KiB
Python
102 lines
2.8 KiB
Python
# This wizard contributed by Ezequiel "Zac" Panepucci 011114
|
|
# modified by Warren L. DeLano
|
|
# modified by Thomas Holder
|
|
|
|
from pymol.wizard import Wizard
|
|
from pymol.exporting import _resn_to_aa as one_letter
|
|
from pymol import cmd
|
|
|
|
class Label(Wizard):
|
|
|
|
atom=None
|
|
messages=1
|
|
mode = 0
|
|
mode_names = [
|
|
'{resn}-{resi}',
|
|
'{onelettercode}{resi}',
|
|
'{chain}/{resn}`{resi}',
|
|
'{chain}/{resn}`{resi}/{name}`{alt}',
|
|
'/{model}/{segi}/{chain}/{resn}`{resi}/{name}`{alt}',
|
|
'{chain}',
|
|
'{resn}',
|
|
'{resi}',
|
|
'{name}',
|
|
]
|
|
|
|
field_names = ('model', 'segi', 'chain', 'resn', 'resi', 'name', 'alt',
|
|
'b', 'x', 'y', 'z', 'label')
|
|
fields_str_tuple = '(' + ','.join(field_names) + ')'
|
|
|
|
def __init__(self,_self=cmd):
|
|
Wizard.__init__(self,_self)
|
|
self.cmd.unpick()
|
|
self.cmd.deselect()
|
|
self.cmd.set('mouse_selection_mode', 0)
|
|
|
|
self.menu = {
|
|
'mode': [
|
|
[2, 'Mode', ''],
|
|
] + [
|
|
[1, name, 'cmd.get_wizard().set_mode(%d)' % i]
|
|
for (i, name) in enumerate(self.mode_names)
|
|
]
|
|
}
|
|
|
|
def get_event_mask(self):
|
|
return Wizard.event_mask_pick + Wizard.event_mask_select
|
|
|
|
def set_mode(self, i):
|
|
self.mode = i
|
|
self.cmd.refresh_wizard()
|
|
|
|
def get_prompt(self):
|
|
self.prompt = []
|
|
if (not self.messages):
|
|
return None
|
|
|
|
if (self.atom is None):
|
|
self.prompt = ['Click atoms...']
|
|
else:
|
|
self.prompt = [
|
|
'/%s/%s/%s/%s`%s/%s`%s B = %.2f XYZ = %.3f %.3f %.3f' % self.atom[:-1]
|
|
]
|
|
|
|
return self.prompt
|
|
|
|
def toggle_messages(self):
|
|
self.messages = not self.messages
|
|
self.cmd.refresh_wizard()
|
|
|
|
def get_panel(self):
|
|
messages_str = 'On' if self.messages else 'Off'
|
|
return [
|
|
[ 1, 'Labeling',''],
|
|
[ 3, 'Mode: ' + self.mode_names[self.mode], 'mode' ],
|
|
[ 2, 'Messages: ' + messages_str, 'cmd.get_wizard().toggle_messages()'],
|
|
[ 2, 'Done','cmd.set_wizard()'],
|
|
]
|
|
|
|
def do_pick(self,bondFlag):
|
|
self.do_select('pk1')
|
|
self.cmd.unpick()
|
|
|
|
def do_select(self, sele):
|
|
self.atom = None
|
|
n = self.cmd.iterate_state(-1, 'first ?' + sele,
|
|
'self.atom = ' + self.fields_str_tuple,
|
|
space=locals())
|
|
|
|
if n == 0:
|
|
return
|
|
|
|
if self.atom[-1]:
|
|
label = ''
|
|
else:
|
|
d = dict(zip(self.field_names, self.atom))
|
|
d['onelettercode'] = one_letter.get(d['resn'], d['resn'])
|
|
label = repr(self.mode_names[self.mode].format(**d))
|
|
|
|
self.cmd.label('first ?' + sele, label)
|
|
self.cmd.deselect()
|
|
self.cmd.refresh_wizard()
|