def create_menus(self, parent, session): mbar = Tkinter.Frame(parent) m = tkutil.menu(mbar, 'Show') m.button.pack(side = 'left') add_button = pyutil.precompose(self.add_menu_button, m) add_button('Select strip spectra...', 'ss', select_strip_spectra) add_button('Set strip width...', 'sw', choose_strip_width) m.add_separator() add_button('Add selected peak strips', 'sk', add_peak_strips) add_button('All assigned strips', 'sn', add_assigned_strips) m.add_separator() add_button('Zoom strips in', 'si', zoom_in_strips) add_button('Zoom strips out', 'so', zoom_out_strips) add_button('Copy view strip options', 'sv', copy_view_options) m.add_separator() add_button('Delete selected strip', 'sd', delete_view_strip) add_button('Delete all strips', 'sD', delete_all_strips) m.add_separator() m.add_button('Help', sputil.help_cb(self.session, 'StripPlot')) m.add_button('Close', self.close_cb) m = tkutil.menu(mbar, 'Find') m.button.pack(side = 'left') add_button = pyutil.precompose(self.add_menu_button, m) add_button('Go to assigned peak strip', 'sj', goto_assigned_strip) m.add_separator() add_button('Strip matching tolerances...', 'sT', matching_strips_setup) add_button('Add strips matching peaks', 'sm', add_matching_strips) add_button('Delete matched strips', 'sM', delete_matched_strips) return mbar
def __init__(self, session): self.session = session tkutil.Dialog.__init__(self, session.tk, 'Pick Atoms') cb = tkutil.checkbutton(self.top, 'Show atom labels?', 0) self.show_label = cb.variable cb.button.pack(side='top', anchor='w') cb = tkutil.checkbutton(self.top, 'Show distances?', 0) self.show_distance = cb.variable cb.button.pack(side='top', anchor='w') cb = tkutil.checkbutton(self.top, 'Show peaks?', 0) self.show_peak = cb.variable cb.button.pack(side='top', anchor='w') cb = tkutil.checkbutton(self.top, 'Show assigned atoms?', 0) self.show_assigned = cb.variable cb.button.pack(side='top', anchor='w') cb.add_callback(pyutil.precompose(color_assigned_atoms, session)) self.status_line = Tkinter.Label(self.top, anchor='nw') self.status_line.pack(side='top', anchor='w') br = tkutil.button_row( self.top, ('Close', self.close_cb), ('Help', sputil.help_cb(session, 'MidasPick')), ) br.frame.pack(side='top', anchor='w') self.pick_cb = self.atom_pick_cb midas.process(self.session).add_atom_pick_callback(self.pick_cb)
def run_peaks2ucsf(self, save_path, msize, origin, nuclei, sfreq, swidth, gaussians): # # Use my subprocess code instead of popen because I want to not block # waiting for subprocess to finish and I want to be notified when it # has finished # p2u_path = os.path.join(sparky.installation_path(), 'bin', 'peaks2ucsf') proc = subprocess.subprocess(p2u_path, save_path) p2u = proc.to_process p2u.write('%d' % len(msize) + ' # dimension\n') p2u.write(pyutil.sequence_string(msize, '%d ') + '# matrix size\n') p2u.write(pyutil.sequence_string(origin, '%.6f ') + '# ppm origin\n') p2u.write(pyutil.sequence_string(nuclei, '%s ') + '# nuclei\n') p2u.write(pyutil.sequence_string(sfreq, '%.9f ') + '# spectometer freq\n') p2u.write(pyutil.sequence_string(swidth, '%.3f ') + '# spectrum width\n') for ppm_center, height, linewidth in gaussians: p2u.write(pyutil.sequence_string(ppm_center, '%8.5f ') + '%10.4g' % height + pyutil.sequence_string(linewidth, '%8.2f ') + '\n') p2u.close() message = ('%d unassigned resonances\n' % self.unassigned + '%d unknown linewidths\n' % self.nolinewidth + 'Writing ' + os.path.basename(save_path)) report_finished = pyutil.precompose(self.report_finished, proc, message) tkutil.call_me_when(self.top, report_finished, proc.exitted)
def __init__(self, session): self.session = session tkutil.Dialog.__init__(self, session.tk, 'Pick Atoms') cb = tkutil.checkbutton(self.top, 'Show atom labels?', 0) self.show_label = cb.variable cb.button.pack(side = 'top', anchor = 'w') cb = tkutil.checkbutton(self.top, 'Show distances?', 0) self.show_distance = cb.variable cb.button.pack(side = 'top', anchor = 'w') cb = tkutil.checkbutton(self.top, 'Show peaks?', 0) self.show_peak = cb.variable cb.button.pack(side = 'top', anchor = 'w') cb = tkutil.checkbutton(self.top, 'Show assigned atoms?', 0) self.show_assigned = cb.variable cb.button.pack(side = 'top', anchor = 'w') cb.add_callback(pyutil.precompose(color_assigned_atoms, session)) self.status_line = Tkinter.Label(self.top, anchor = 'nw') self.status_line.pack(side = 'top', anchor = 'w') br = tkutil.button_row(self.top, ('Close', self.close_cb), ('Help', sputil.help_cb(session, 'MidasPick')), ) br.frame.pack(side = 'top', anchor = 'w') self.pick_cb = self.atom_pick_cb midas.process(self.session).add_atom_pick_callback(self.pick_cb)
def add_spectrum(self, spectrum, table, row): if spectrum.dimension != 3: return # # Make spectrum checkbutton # cb = tkutil.checkbutton(table.frame, spectrum.name, 0) cb.button['selectcolor'] = sputil.spectrum_color(spectrum) choose_cb = pyutil.precompose(sputil.choose_spectrum_cb, spectrum, table.chosen_spectra) cb.add_callback(choose_cb) cb.button.grid(row = row, column = 0, sticky = 'w') table.spectrum_to_checkbutton[spectrum] = cb # # Make axis order menu. Set default xyz axis order for triple # resonance spectra to HCN. # hcn_order = pyutil.order(('1H', '13C', '15N'), spectrum.nuclei) aom = axes.axis_order_menu(table.frame, spectrum.nuclei, initial_order = hcn_order) aom.frame.grid(row = row, column = 1, sticky = 'w') table.axis_order_menu[spectrum] = aom
def show_peaks(self): self.noesy = self.noesy_format.get() name_to_spect = pyutil.precompose(sputil.name_to_spectrum, self.session) peaks = self.assigned_peaks(self.spectrum_list) self.show_assignments(peaks)
def add_spectrum(self, spectrum, table, row): pat_name, pat_axes = expectedpeaks.recall_pattern(spectrum) # # Make spectrum checkbutton # cb = tkutil.checkbutton(table.frame, spectrum.name, 0) cb.button['selectcolor'] = sputil.spectrum_color(spectrum) choose_cb = pyutil.precompose(sputil.choose_spectrum_cb, spectrum, table.chosen_spectra) cb.add_callback(choose_cb) cb.button.grid(row=row, column=0, sticky='w') if pat_name: cb.set_state(1) table.spectrum_to_checkbutton[spectrum] = cb # # Make peak pattern menu # epeak_types = expectedpeaks.expected_peak_descriptions.keys() pm = tkutil.option_menu(table.frame, '', epeak_types) pm.frame.grid(row=row, column=1, sticky='w') table.spectrum_epeak_menus[spectrum] = pm # # Get default spectrum peak pattern and axis order # if pat_name == None: pat_name = expectedpeaks.default_spectrum_pattern_name(spectrum) if pat_name == None: pat_name = pm.get() pat_list = expectedpeaks.expected_peak_descriptions[pat_name] pat_nuclei = expectedpeaks.pattern_nuclei(pat_list[0]) pat_axes = pyutil.order(pat_nuclei, spectrum.nuclei) # # Make axis order menu # aom = axes.axis_order_menu(table.frame, spectrum.nuclei, initial_order=pat_axes) aom.frame.grid(row=row, column=2, sticky='w') table.axis_order_menu[spectrum] = aom # # Register a callback to limit the menu choices for axis order. # def restrict_axis_order_cb(pat_name, aom=aom): import expectedpeaks pat_list = expectedpeaks.expected_peak_descriptions[pat_name] pat_nuclei = expectedpeaks.pattern_nuclei(pat_list[0]) aom.restrict_menu_permutations(pat_nuclei) pm.add_callback(restrict_axis_order_cb) pm.set(pat_name)
def call_me_when(widget, callback, predicate): ms_delay = 5000 def check(widget, predicate, callback): if predicate(): callback() else: call_me_when(widget, callback, predicate) cb = pyutil.precompose(check, widget, predicate, callback) widget.after(ms_delay, cb)
def __init__(self, session): self.session = session tkutil.Dialog.__init__(self, session.tk, 'Peak Linewidth Plot') self.top.columnconfigure(0, weight=1) r = 0 sw = sputil.spectrum_menu(session, self.top, 'Spectrum: ') sw.frame.grid(row=r, sticky='w') r = r + 1 self.spectrum_widget = sw af = tkutil.entry_field(self.top, 'Spectrum axis: ', '1', 3) af.frame.grid(row=r, sticky='w') r = r + 1 self.axis_variable = af.variable self.lw_ranges = [None, None] er = tkutil.entry_row(self.top, 'Linewidth range (hz): ', ('min', '0', 3), ('max', '50', 3), ('step', '5', 3)) (self.lw_ranges[0], self.lw_ranges[1], self.lw_step) = er.variables er.frame.grid(row=r, sticky='w') r = r + 1 e = tkutil.entry_field(self.top, 'Atoms: ', '', 30) self.atoms = e.variable e.frame.grid(row=r, sticky='w') r = r + 1 c = tkutil.scrollable_canvas(self.top) c.frame.grid(row=r, sticky='news') self.top.rowconfigure(r, weight=1) r = r + 1 self.canvas = c.canvas progress_label = Tkinter.Label(self.top, anchor='nw') progress_label.grid(row=r, sticky='w') r = r + 1 postscript_cb = pyutil.precompose(tkutil.postscript_cb, self.canvas) br = tkutil.button_row( self.top, ('Update', self.update_cb), ('Postscript', postscript_cb), ('Stop', self.stop_cb), ('Close', self.close_cb), ('Help', sputil.help_cb(session, 'LinewidthPlot')), ) br.frame.grid(row=r, sticky='w') r = r + 1 tkutil.Stoppable.__init__(self, progress_label, br.buttons[2])
def add_spectrum(self, spectrum, table, row): pat_name, pat_axes = expectedpeaks.recall_pattern(spectrum) # # Make spectrum checkbutton # cb = tkutil.checkbutton(table.frame, spectrum.name, 0) cb.button['selectcolor'] = sputil.spectrum_color(spectrum) choose_cb = pyutil.precompose(sputil.choose_spectrum_cb, spectrum, table.chosen_spectra) cb.add_callback(choose_cb) cb.button.grid(row = row, column = 0, sticky = 'w') if pat_name: cb.set_state(1) table.spectrum_to_checkbutton[spectrum] = cb # # Make peak pattern menu # epeak_types = expectedpeaks.expected_peak_descriptions.keys() pm = tkutil.option_menu(table.frame, '', epeak_types) pm.frame.grid(row = row, column = 1, sticky = 'w') table.spectrum_epeak_menus[spectrum] = pm # # Get default spectrum peak pattern and axis order # if pat_name == None: pat_name = expectedpeaks.default_spectrum_pattern_name(spectrum) if pat_name == None: pat_name = pm.get() pat_list = expectedpeaks.expected_peak_descriptions[pat_name] pat_nuclei = expectedpeaks.pattern_nuclei(pat_list[0]) pat_axes = pyutil.order(pat_nuclei, spectrum.nuclei) # # Make axis order menu # aom = axes.axis_order_menu(table.frame, spectrum.nuclei, initial_order = pat_axes) aom.frame.grid(row = row, column = 2, sticky = 'w') table.axis_order_menu[spectrum] = aom # # Register a callback to limit the menu choices for axis order. # def restrict_axis_order_cb(pat_name, aom=aom): import expectedpeaks pat_list = expectedpeaks.expected_peak_descriptions[pat_name] pat_nuclei = expectedpeaks.pattern_nuclei(pat_list[0]) aom.restrict_menu_permutations(pat_nuclei) pm.add_callback(restrict_axis_order_cb) pm.set(pat_name)
def __init__(self, session): self.session = session tkutil.Dialog.__init__(self, session.tk, 'Chemical Shift Plot') self.top.columnconfigure(0, weight=1) r = 0 self.condition_widget = sputil.condition_menu(session, self.top, 'Condition: ') self.condition_widget.frame.grid(row=r, sticky='w') r = r + 1 self.ppm_range_widget = [None, None] er = tkutil.entry_row(self.top, 'PPM range: ', ('min', '0', 3), ('max', '12', 3), ('step', '1', 3)) (self.ppm_range_widget[0], self.ppm_range_widget[1], self.ppm_step_widget) = er.variables er.frame.grid(row=r, sticky='w') r = r + 1 e = tkutil.entry_field(self.top, 'Atoms: ', '', 30) self.atoms = e.variable e.frame.grid(row=r, sticky='w') r = r + 1 t = tkutil.checkbutton(self.top, 'Show typical amino acid shifts?', 0) self.typical_range = t.variable t.button.grid(row=r, sticky='w') r = r + 1 c = tkutil.scrollable_canvas(self.top) c.frame.grid(row=r, sticky='news') self.top.rowconfigure(r, weight=1) r = r + 1 self.canvas = c.canvas progress_label = Tkinter.Label(self.top, anchor='nw') progress_label.grid(row=r, sticky='w') r = r + 1 postscript_cb = pyutil.precompose(tkutil.postscript_cb, self.canvas) br = tkutil.button_row( self.top, ('Update', self.update_cb), ('Postscript', postscript_cb), ('Stop', self.stop_cb), ('Close', self.close_cb), ('Help', sputil.help_cb(session, 'ChemShiftPlot')), ) br.frame.grid(row=r, sticky='w') r = r + 1 tkutil.Stoppable.__init__(self, progress_label, br.buttons[2])
def add_spectrum(self, spectrum, table, row): pat_name, pat_axes = expectedpeaks.recall_pattern(spectrum) # Make spectrum check button cb = tkutil.checkbutton(table.frame, spectrum.name, 0) choose_cb = pyutil.precompose(sputil.choose_spectrum_cb, spectrum, table.chosen_spectra) cb.add_callback(choose_cb) cb.button.grid(row = row, column = 0, sticky = 'w') if pat_name: cb.set_state(1) table.spectrum_to_checkbutton[spectrum] = cb
def add_spect(self, spectrum, table, row): # # Make spectrum checkbutton # cb = tkutil.checkbutton(table.frame, spectrum.name, 0) cb.button['selectcolor'] = spectrum_color(spectrum) choose_cb = pyutil.precompose(choose_spectrum_cb, spectrum, table.chosen_spectra) cb.add_callback(choose_cb) cb.button.grid(row=row, column=0, sticky='w') table.spectrum_to_checkbutton[spectrum] = cb
def call_me_when(widget, callback, predicate): ms_delay = 5000 def check(widget, predicate, callback): if predicate(): callback() else: call_me_when(widget, callback, predicate) cb = pyutil.precompose(check, widget, predicate, callback) widget.after(ms_delay, cb)
def add_spect(self, spectrum, table, row): # # Make spectrum checkbutton # cb = tkutil.checkbutton(table.frame, spectrum.name, 0) cb.button['selectcolor'] = spectrum_color(spectrum) choose_cb = pyutil.precompose(choose_spectrum_cb, spectrum, table.chosen_spectra) cb.add_callback(choose_cb) cb.button.grid(row = row, column = 0, sticky = 'w') table.spectrum_to_checkbutton[spectrum] = cb
def __init__(self, session): self.session = session tkutil.Dialog.__init__(self, session.tk, 'Chemical Shift Plot') self.top.columnconfigure(0, weight = 1) r = 0 self.condition_widget = sputil.condition_menu(session, self.top, 'Condition: ') self.condition_widget.frame.grid(row = r, sticky = 'w') r = r + 1 self.ppm_range_widget = [None, None] er = tkutil.entry_row(self.top, 'PPM range: ', ('min', '0', 3), ('max', '12', 3), ('step', '1', 3)) (self.ppm_range_widget[0], self.ppm_range_widget[1], self.ppm_step_widget) = er.variables er.frame.grid(row = r, sticky = 'w') r = r + 1 e = tkutil.entry_field(self.top, 'Atoms: ', '', 30) self.atoms = e.variable e.frame.grid(row = r, sticky = 'w') r = r + 1 t = tkutil.checkbutton(self.top, 'Show typical amino acid shifts?', 0) self.typical_range = t.variable t.button.grid(row = r, sticky = 'w') r = r + 1 c = tkutil.scrollable_canvas(self.top) c.frame.grid(row = r, sticky = 'news') self.top.rowconfigure(r, weight = 1) r = r + 1 self.canvas = c.canvas progress_label = Tkinter.Label(self.top, anchor = 'nw') progress_label.grid(row = r, sticky = 'w') r = r + 1 postscript_cb = pyutil.precompose(tkutil.postscript_cb, self.canvas) br = tkutil.button_row(self.top, ('Update', self.update_cb), ('Postscript', postscript_cb), ('Stop', self.stop_cb), ('Close', self.close_cb), ('Help', sputil.help_cb(session, 'ChemShiftPlot')), ) br.frame.grid(row = r, sticky = 'w') r = r + 1 tkutil.Stoppable.__init__(self, progress_label, br.buttons[2])
def __init__(self, session): self.session = session tkutil.Dialog.__init__(self, session.tk, 'Peak Linewidth Plot') self.top.columnconfigure(0, weight = 1) r = 0 sw = sputil.spectrum_menu(session, self.top, 'Spectrum: ') sw.frame.grid(row = r, sticky = 'w') r = r + 1 self.spectrum_widget = sw af = tkutil.entry_field(self.top, 'Spectrum axis: ', '1', 3) af.frame.grid(row = r, sticky = 'w') r = r + 1 self.axis_variable = af.variable self.lw_ranges = [None, None] er = tkutil.entry_row(self.top, 'Linewidth range (hz): ', ('min', '0', 3), ('max', '50', 3), ('step', '5', 3)) (self.lw_ranges[0], self.lw_ranges[1], self.lw_step) = er.variables er.frame.grid(row = r, sticky = 'w') r = r + 1 e = tkutil.entry_field(self.top, 'Atoms: ', '', 30) self.atoms = e.variable e.frame.grid(row = r, sticky = 'w') r = r + 1 c = tkutil.scrollable_canvas(self.top) c.frame.grid(row = r, sticky = 'news') self.top.rowconfigure(r, weight = 1) r = r + 1 self.canvas = c.canvas progress_label = Tkinter.Label(self.top, anchor = 'nw') progress_label.grid(row = r, sticky = 'w') r = r + 1 postscript_cb = pyutil.precompose(tkutil.postscript_cb, self.canvas) br = tkutil.button_row(self.top, ('Update', self.update_cb), ('Postscript', postscript_cb), ('Stop', self.stop_cb), ('Close', self.close_cb), ('Help', sputil.help_cb(session, 'LinewidthPlot')), ) br.frame.grid(row = r, sticky = 'w') r = r + 1 tkutil.Stoppable.__init__(self, progress_label, br.buttons[2])
def __init__(self, session): # Initialize variables self.session = session self.canvas = None self.selected_group = None self.selected_atom = None self.selected_groupatom = None self.selected_group_prev = None self.selected_group_next = None self.selected_spectrum = self.session.selected_spectrum() self.selected_index = -1 self.sequences = [] self.groups = [] self.label_list = None self.selected_atom_obj = None tkutil.Dialog.__init__(self, session.tk, 'Pine Graph Assigner') keypress_cb = pyutil.precompose(sputil.command_keypress_cb, session) self.top.bind('<KeyPress>', keypress_cb) self.InitSequences() # set selected # spectrum self.InitSpectrum() # group&atom self.InitGroupAtom() # Setting up locations for each component self.canvas_frame = Tkinter.Frame(self.top, width = 600, height = 400) self.canvas_frame.pack(side='top', anchor='w') self.CreateCanvas(self.canvas_frame) # Create Scrollable Canvas self.spectra_frame = Tkinter.Frame(self.top, width = 120, height = 200) self.spectra_frame.pack(side='left', anchor = 'nw') self.CreateSpectraList(self.spectra_frame) # Create check boxes for spectra self.button_frame = Tkinter.Frame(self.top, width = 480, height = 30) self.button_frame.pack(side='top', anchor = 'nw') self.CreateButtonList(self.button_frame) # Create buttons self.label_frame = Tkinter.Frame(self.top, width = 480, height = 170) self.label_frame.pack(side='top', anchor = 'nw') self.CreateLabelList(self.label_frame) # Create peak lists # Updating components self.UpdateCanvas() self.UpdateSpectraList() self.UpdateLabelList()
def __init__(self, session): # Initialize variables self.peak = None self.graph_dialog = None self.spectrum_text = None self.peak_text = None self.label_box = None self.label_list = None self.br = None self.br2 = None self.progress_label = None tkutil.Dialog.__init__(self, session.tk, 'Pine Assigner') #self.top.grab_set() #self.top.focus_set() keypress_cb = pyutil.precompose(sputil.command_keypress_cb, session) self.top.bind('<KeyPress>', keypress_cb) self.session = session self.UpdateDialog()
def __init__(self, session): # Initialize variables self.peak = None self.graph_dialog = None self.spectrum_text = None self.peak_text = None self.label_box = None self.label_list = None self.br = None self.br2 = None self.progress_label = None tkutil.Dialog.__init__(self, session.tk, 'Pine Assigner') #self.top.grab_set() #self.top.focus_set() keypress_cb = pyutil.precompose(sputil.command_keypress_cb, session) self.top.bind('<KeyPress>', keypress_cb) self.session = session self.UpdateDialog()
def add_menu_button(self, menu, menu_text, accel, func): cb = pyutil.precompose(func, self.session) menu.add_button(menu_text + (' (%s)' % accel), cb) self.session.add_command(accel, '', cb)
def add_command(accel, menu_text, module_name, func_name, session): cb = pyutil.precompose(invoke_module_function, session, module_name, func_name, (session, )) session.add_command(accel, menu_text, cb)
def add_entry(self, name): set_variable_cb = pyutil.precompose(self.variable.set, name) self.menu.add_command(label=name, command=set_variable_cb)
def map_widget(self, popup): self.add_callback(pyutil.precompose(self.show_widget_cb, popup))
def variable_set_callback(widget, variable, callback): python_cb = pyutil.precompose(variable_set_cb, variable, callback) tcl_cb_name = widget._register(python_cb) variable._tk.call('trace', 'variable', str(variable), 'w', tcl_cb_name)
def add_command(accel, menu_text, module_name, func_name, session): cb = pyutil.precompose(invoke_module_function, session, module_name, func_name, (session,)) session.add_command(accel, menu_text, cb)
def variable_set_callback(widget, variable, callback): python_cb = pyutil.precompose(variable_set_cb, variable, callback) tcl_cb_name = widget._register(python_cb) variable._tk.call('trace', 'variable', str(variable), 'w', tcl_cb_name)
def show_peaks(self): self.noesy = self.noesy_format.get() name_to_spect = pyutil.precompose(sputil.name_to_spectrum, self.session) peaks = self.assigned_peaks(self.spectrum_list) self.show_assignments(peaks)
def add_entry(self, name): set_variable_cb = pyutil.precompose(self.variable.set, name) self.menu.add_command(label = name, command = set_variable_cb)
def map_widget(self, popup): self.add_callback(pyutil.precompose(self.show_widget_cb, popup))