# Calculate average coordinate of several peaks (sparky script)

(diff) ←Older revision | Current revision (diff) | Newer revision→ (diff)

## 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 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!)
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()```