Calculate average coordinate of several peaks (sparky script)
From NMR Wiki
(Difference between revisions)
(→Installation) |
(→Installation) |
||
Line 10: | Line 10: | ||
peak_menu = ( | peak_menu = ( | ||
('hc', 'HC peaks', ('hcpeaks','show_dialog')), | ('hc', 'HC peaks', ('hcpeaks','show_dialog')), | ||
- | + | ('af', 'Calculate average frequenies', ('calc_ave_freq','show_dialog')), | |
</source> | </source> | ||
*when you open some file in sparky, select some peaks and type 'af' average frequencies should be shown in a pop-up window | *when you open some file in sparky, select some peaks and type 'af' average frequencies should be shown in a pop-up window |
Revision as of 04:41, 27 April 2008
Contents |
Overview
Select several peaks and calculate average coordinate in Hertz
Installation
- with plain text editor create file calc_ave_freq.py in python/sparky directory which is located in the root of sparky installation
- paste code below into that file, save and close file
- open file sparky_site.py
- find peak_menu array in the file and add line highligthed in red into that array as shown below
peak_menu = ( ('hc', 'HC peaks', ('hcpeaks','show_dialog')), ('af', 'Calculate average frequenies', ('calc_ave_freq','show_dialog')),
- when you open some file in sparky, select some peaks and type 'af' average frequencies should be shown in a pop-up window
Bugs
Info window won't go away when "ok" button is clicked.
Code
Please feel free to improve the code.
import Tkinter import string import noesy import pyutil import sputil import tkutil def show_dialog(session): tk = session.tk window = Tkinter.Toplevel(tk) view = session.selected_view() spectrum = view.spectrum peaks = spectrum.selected_peaks() num_peaks = len(peaks) if num_peaks <= 1 : message = 'Select two or more peaks!' else: dim = len(peaks[0].position) ave = [0,0,0] for i in range(dim): ave[i] = 0 for p in peaks: for i in range(dim): ave[i] = ave[i] + p.position[i] npeaks = len(peaks) for i in range(dim): ave[i] = ave[i]/npeaks message = '' lbl = ('F1:','F2:','F3:') for i in range(dim): #x y z must correspond to actual xyz (axis order!) #print hertz instead of ppms ppm = spectrum.hz_per_ppm[i] ave[i] = ave[i]*ppm output = '%.2f' % ave[i] message = message + lbl[i] + str(output) + '\n' lbl = Tkinter.Label(window,text=message) lbl.pack() btn = Tkinter.Button(window,text='ok') btn.pack()