Commit 6f03c13b authored by Matheus Müller's avatar Matheus Müller

Desenho de perfil na janela principal, com draw, shift, scale, normalize e clear.

Problemas para mostrar o perfil, somente apos primeiro uso do botao direito funciona normal
parent d3c0e4cb
......@@ -3,6 +3,7 @@ import Tkinter as tk
from PTE import *
from pylab import *
from layers import *
from profile import *
from numpy import zeros
import os
import tkFileDialog
......@@ -18,6 +19,7 @@ Edict = dict()
Ebuttons = list()
Labentrys = list()
Frames = list()
Control = dict(drawing=False, shifting=False, scaling=False, x=0., y=0.)
i = 0
Econtrol = 0
......@@ -53,16 +55,15 @@ def elem_select(i, button, grafico, f, a, t):
Labentrys[10].insert(0, Edict[int(Econtrol)]['LineShape'])
Labentrys[11].insert(0, Edict[int(Econtrol)]['profundidademax'])
Edict[i]['dist'] = np.loadtxt(Edict[i]['symbol']+".prof")
grafico.set_xdata(range(len(Edict[i]['dist'])))
grafico.set_ydata(Edict[i]['dist'])
grafico.set_xdata(Edict[i]['dist'].axisdepth())
grafico.set_ydata(Edict[i]['dist'].data)
t.set_text('%s' %Edict[i]['symbol'])
a.relim()
a.autoscale_view()
a.set_ylim(0,1)
a.set_xlim(0,Edict[int(Econtrol)]['profundidademax'])
f.canvas.draw()
##############################################################################
##############################################################################
# Init
def ewin_build(window, OFlabentries, mainwindow, calcbutton, distvar, modevar, Labelframe, grafico, f, a):
......@@ -72,7 +73,7 @@ def ewin_build(window, OFlabentries, mainwindow, calcbutton, distvar, modevar, L
# Element addition
def create():
global i, Edict, Ebuttons
Edict[i]=dict(name="New Element",symbol="Hf",mass=178.,Z=72,dist=zeros(int(10./float(OFlabentries[17].get()))),LineShape=200.,profundidademax=2.)
Edict[i]=dict(name="New Element",symbol="Hf",mass=178.,Z=72,dist=profile(200,0.01),LineShape=200.,profundidademax=2.)
Ebuttons.insert(i, tk.Button(Eframe, text=i, width=1, height=1, command = lambda i=i : elem_select(i,Ebuttons,grafico,f,a,t)) )
Ebuttons[i].grid(row = ((len(Ebuttons)-1)%6), column = int(math.floor((len(Ebuttons)-1)/6)))
i = i+1
......@@ -94,14 +95,8 @@ def ewin_build(window, OFlabentries, mainwindow, calcbutton, distvar, modevar, L
if Econtrol == i:
Econtrol = Econtrol -1
Ebuttons[Econtrol]['relief']='sunken'
elem_select(0, Ebuttons, grafico, f)
##############################################################################
# Hotkeys
elem_select(0, Ebuttons, grafico, f, a, t)
#cidclick = f.canvas.mpl_connect('button_press_event', key_4)
#cidmotion = f.canvas.mpl_connect('motion_notify_event', key_5)
#cidrelease = f.canvas.mpl_connect('button_release_event', key_6)
##############################################################################
# Element Frames
......@@ -134,9 +129,9 @@ def ewin_build(window, OFlabentries, mainwindow, calcbutton, distvar, modevar, L
Labentrys[4].configure(text = 'Line Shape α - %f' %Edict[i]['LineShape'])
Edict[i]['profundidademax'] = float(Labentrys[11].get())
Labentrys[5].configure(text = 'Max Depht - %f' %Edict[i]['profundidademax'])
Edict[i]['dist'] = np.loadtxt(Edict[i]['symbol']+".prof")
Edict[i]['dist'].resize(int(100*Edict[i]['profundidademax']))
elem_select(i,Ebuttons,grafico,f,a,t)
for i in range(3):
Frames.insert(i, tk.Frame(Labelprop) )
......@@ -175,19 +170,99 @@ def ewin_build(window, OFlabentries, mainwindow, calcbutton, distvar, modevar, L
Labentrys.insert(4, tk.Label(Frames[3], width=23, pady=2, text='Line Shape α - %f' %Edict[int(Econtrol)]['LineShape']) )
Labentrys.insert(5, tk.Label(Frames[3], width=23, pady=2, text='Max Depht - %f' %Edict[int(Econtrol)]['profundidademax']) )
for i in arange(6, 13):
Labentrys.insert(i, tk.Entry(Frames[4], width=17) )
for j in arange(6, 13):
Labentrys.insert(j, tk.Entry(Frames[4], width=17) )
Labentrys.insert(13, tk.Label(Frames[3], width=23, pady=2, text='Resonance energy') )
for i in range(14):
Labentrys[i].pack()
for j in range(14):
Labentrys[j].pack()
# Declaration of interpolation and distribution method variables
methodvar = tk.StringVar()
methodvar.set('step')
##############################################################################
# Distribution Hotkeys #
##############################################################################
def cursor_draw_click(event):
global Econtrol
if event.inaxes != a.axes: return
if event.button == 1:
Control['drawing']=True
elif event.button == 2:
Control['scaling']=True
elif event.button == 3:
Control['shifting']=True
Control['x'] = float(event.xdata)
Control['y'] = float(event.ydata)
if Control['y'] > 1:
Control['y'] = 1.
def cursor_draw_motion(event):
global Econtrol
if event.inaxes != a.axes: return
if Control['drawing']:
Edict[Econtrol]['dist'].drawline(Control['x'], float(event.xdata), Control['y'], float(event.ydata))
Control['x'] = float(event.xdata)
Control['y'] = float(event.ydata)
elif Control['scaling']:
Edict[Econtrol]['dist'].soma(float(event.ydata) - Control['y'])
Control['y'] = float(event.ydata)
elif Control['shifting']:
Edict[Econtrol]['dist'].shiftx(Control['x'],float(event.xdata))
Control['x'] = float(event.xdata)
grafico.set_xdata(Edict[Econtrol]['dist'].axisdepth())
grafico.set_ydata(Edict[Econtrol]['dist'].data)
f.canvas.draw()
def cursor_draw_release(event):
Control['drawing']=False
Control['scaling']=False
Control['shifting']=False
def abrupt(event):pass
def smooth(event): # N funciona
global Econtrol
Edict[Econtrol]['dist'].smooth(5)
f.canvas.draw()
def normalize(event):
global Econtrol, i
Normalizator = list()
for j in range(i):
for k in range(Edict[j]['dist'].size):
if k >= len(Normalizator):
Normalizator.insert(k,0.)
Normalizator[k] = Normalizator[k] + Edict[j]['dist'].data[k]
for j in range(i):
for k in range(Edict[j]['dist'].size):
if Normalizator [k] > 0:
Edict[j]['dist'].data[k] = Edict[j]['dist'].data[k]/Normalizator[k]
f.canvas.draw()
del Normalizator
def clear(event):
global Econtrol
Edict[Econtrol]['dist'].clear()
f.canvas.draw()
f.canvas.mpl_connect('button_press_event', cursor_draw_click)
f.canvas.mpl_connect('motion_notify_event', cursor_draw_motion)
f.canvas.mpl_connect('button_release_event', cursor_draw_release)
mainwindow.bind_all("<Alt-KeyPress-a>", abrupt)
mainwindow.bind_all("<Alt-KeyPress-s>", smooth)
mainwindow.bind_all("<Alt-KeyPress-n>", normalize)
mainwindow.bind_all("<Alt-KeyPress-c>", clear)
##############################################################################
# #
##############################################################################
# Load/Save sample
def LOADSAMPLE():
......@@ -199,13 +274,13 @@ def ewin_build(window, OFlabentries, mainwindow, calcbutton, distvar, modevar, L
for n in arange(21,25):
OFlabentries[n].delete(0,'end')
OFlabentries[n].insert(0,float(arquivo.readline()))
f = loadtxt(arquivo.name + '.elm', dtype="string")
els = f[:, 0]
eln = f[:, 1]
elm = f[:, 2]
elz = f[:, 3]
LSs = f[:, 4]
eld = f[:, 5]
fil = loadtxt(arquivo.name + '.elm', dtype="string")
els = fil[:, 0]
eln = fil[:, 1]
elm = fil[:, 2]
elz = fil[:, 3]
LSs = fil[:, 4]
eld = fil[:, 5]
Edict.clear()
for n in range(len(Ebuttons)):
Ebuttons[n].destroy()
......@@ -223,7 +298,7 @@ def ewin_build(window, OFlabentries, mainwindow, calcbutton, distvar, modevar, L
Ebuttons[n]['text'] = str(els[n])
shutil.copy(arquivo.name + '-' + Edict[n]['symbol'] + '.dat' , Edict[n]['symbol']+'.dat')
shutil.copy(arquivo.name + '-' + Edict[n]['symbol'] + '.prof' , Edict[n]['symbol']+'.prof')
elem_select(0,Ebuttons,grafico, f)
elem_select(0,Ebuttons,grafico, f, a, t)
arquivo.close()
def SAVESAMPLE():
......@@ -369,13 +444,14 @@ def ewin_build(window, OFlabentries, mainwindow, calcbutton, distvar, modevar, L
Rrrna = tk.Radiobutton(Labelframe, text="Resonant RNA", variable=modevar, value=1, width=20, command=lambda i=i :changemode2())
Rrrna.pack()
##############################################################################
##############################################################################
# Init
Rions.invoke()
RDra.invoke()
RS.select()
Ebuttons[0].invoke()
elem_select(0,Ebuttons,grafico, f, a, t)
##############################################################################
No preview for this file type
......@@ -66,7 +66,7 @@ Iframee = tk.Frame(Label3)
Iframee.pack(side='right')
Dframe = tk.Frame(MasterFrame2, bd=2)
Dframe.pack(side='bottom')
Dframe.pack(side='bottom',fill='both', expand=1)
##############################################################################
##############################################################################
......
......@@ -4,5 +4,6 @@ Tkinter
scipy
numpy
pylab
shutil (to save files)
To run simply type on the terminal >> python OpenFlatus.py
......@@ -85,7 +85,6 @@ def calc(p, modelo, ion, OFlabentries, LScontrol, CGausscontrol, metodo, espectr
# É multiplicada pelo passo para manter a escala do gráfico independente do mesmo.
# Bessel:
# Ainda falta incluir a delta de Dirac na origem
# Existe um valor máximo em energia no qual a função de Bessel pode ser computada em função
# da precisão numérica. Uma possível solução pode ser trabalhar em outras unidades que não
# resultem em argumentos tão grandes para a função exponencial.
......
......@@ -11,16 +11,21 @@ class profile:
self.xmin = 0.
self.xmax = N*x
self.stepsize = x
self.data = ones(N)
self.data = zeros(N)
self.size = N
self.contam = 0.
def axisdepth(self):
return arange(self.contam, self.size*self.stepsize, self.stepsize)
return arange(self.contam, self.size*self.stepsize+self.contam, self.stepsize)
def clear(self):
self.data = zeros(self.size)
def soma(self, qt):
for j in range(self.size):
if self.data[j] > 0:
self.data[j] = self.data[j] + qt
def resize(self, size):
N = self.size
M = size
......@@ -34,6 +39,18 @@ class profile:
self.size = M
self.xmax = M*self.stepsize
def shiftx(self, x, x2):
self.data = list(self.data)
if x < x2:
for y in arange(int(x/self.stepsize), int(x2/self.stepsize)):
self.data.insert(y,0)
self.data.pop()
elif x > x2: # funciona mal
for y in arange(int(x2/self.stepsize), int(self.xmax/self.stepsize)):
if y < self.size-1:
self.data[y] = self.data[y+1]
self.data[self.size-1] = 0
def setcontam(self, newcontam):
delta = newcontam-self.contam
dx = math.ceil(delta/self.stepsize)
......@@ -63,23 +80,23 @@ class profile:
if (xb < 0):
xb = 0
if (xa < xb):
for i in arange(math.floor(xa/stepsize), math.floor(xb/stepsize)):
for i in arange(math.floor(xa/stepsize), math.floor(xb/stepsize),1):
if (i > math.floor(contam/stepsize)):
a = (cb - ca) / (xb - xa)
b = -a*xa + ca
conc = a*(1.*i*stepsize) + b
if (conc < 0):
conc = 0.
self.data[i] = conc;
self.data[int(i)] = conc;
if (xb < xa):
for i in arange(math.floor(xb/stepsize), math.floor(xa/stepsize)):
for i in arange(math.floor(xb/stepsize), math.floor(xa/stepsize),1):
if (i > math.floor(contam/stepsize)):
a = (ca - cb) / (xa - xb)
b = -a*xb + cb
conc = a*(1.*i*stepsize) + b
if(conc < 0):
conc = 0
self.data[i] = conc
self.data[int(i)] = conc
def adderfc(self, qtd, sigma):
xsigma = self.xmax
......
0.0 3.70718065198e-16
20.0 4.09706824462e-16
40.0 4.52796067332e-16
60.0 5.00417045435e-16
80.0 5.53046365524e-16
100.0 6.11210759524e-16
120.0 6.75492356241e-16
140.0 7.465345075e-16
160.0 8.25048227029e-16
180.0 9.11819306523e-16
200.0 1.00771618011e-15
220.0 1.11369861593e-15
240.0 1.23082732183e-15
260.0 1.36027456126e-15
280.0 1.5033358857e-15
300.0 1.66144310097e-15
320.0 1.83617859723e-15
340.0 2.02929118606e-15
360.0 2.24271360314e-15
380.0 2.47858185176e-15
400.0 2.73925658063e-15
420.0 3.02734671006e-15
440.0 3.34573554289e-15
460.0 3.69760962158e-15
480.0 4.08649062017e-15
500.0 4.5162705904e-15
520.0 4.99125091467e-15
540.0 5.51618535571e-15
560.0 6.09632763384e-15
580.0 6.73748400798e-15
600.0 7.44607138662e-15
620.0 8.22918155041e-15
640.0 9.09465212908e-15
660.0 1.00511450431e-14
680.0 1.1108233195e-14
700.0 1.22764962783e-14
720.0 1.35676266626e-14
740.0 1.49945464148e-14
760.0 1.65715366274e-14
780.0 1.83143803484e-14
800.0 2.02405205437e-14
820.0 2.23692346716e-14
840.0 2.47218276186e-14
860.0 2.73218449258e-14
880.0 3.01953084402e-14
900.0 3.33709767504e-14
920.0 3.68806330123e-14
940.0 4.07594030454e-14
960.0 4.50461068839e-14
980.0 4.97836473006e-14
1000.0 5.50194391924e-14
1020.0 6.08058841243e-14
1040.0 6.7200894782e-14
1060.0 7.42684745817e-14
1080.0 8.20793582376e-14
1100.0 9.07117196985e-14
1120.0 1.00251954539e-13
1140.0 1.10795544637e-13
1160.0 1.22448013785e-13
1180.0 1.35325983812e-13
1200.0 1.49558341769e-13
1220.0 1.65287529878e-13
1240.0 1.82670971142e-13
1260.0 2.01882644883e-13
1280.0 2.23114827989e-13
1300.0 2.46580019285e-13
1320.0 2.72513066292e-13
1340.0 3.01173515662e-13
1360.0 3.32848210804e-13
1380.0 3.67854162714e-13
1400.0 4.06541722724e-13
1420.0 4.49298088939e-13
1440.0 4.96551181443e-13
1460.0 5.48773925067e-13
1480.0 6.06488982582e-13
1500.0 6.70273985683e-13
1520.0 7.40767316119e-13
1540.0 8.18674494836e-13
1560.0 9.04775243063e-13
1580.0 9.99931286028e-13
1600.0 1.10509497739e-12
1620.0 1.22131883073e-12
1640.0 1.34976605342e-12
1660.0 1.49172218844e-12
1680.0 1.64860798051e-12
1700.0 1.82199359537e-12
1720.0 2.01361433452e-12
1740.0 2.22538800274e-12
1760.0 2.45943410206e-12
1780.0 2.71809504452e-12
1800.0 3.00395959577e-12
1820.0 3.31988878431e-12
1840.0 3.66904453567e-12
1860.0 4.05492131795e-12
1880.0 4.48138111568e-12
1900.0 4.95269208186e-12
1920.0 5.47357125506e-12
1940.0 6.04923176911e-12
1960.0 6.68543502791e-12
1980.0 7.38854836754e-12
2000.0 8.1656087826e-12
2020.0 9.02439335491e-12
2040.0 9.97349708912e-12
2060.0 1.10224189344e-11
2080.0 1.21816568532e-11
2100.0 1.34628128881e-11
2120.0 1.48787092794e-11
2140.0 1.64435167941e-11
2160.0 1.81728965517e-11
2180.0 2.00841567662e-11
2200.0 2.2196425972e-11
2220.0 2.45308444695e-11
2240.0 2.71107759035e-11
2260.0 2.99620410951e-11
2280.0 3.31131764644e-11
2300.0 3.65957196336e-11
2320.0 4.04445250651e-11
2340.0 4.46981128974e-11
2360.0 4.9399054467e-11
2380.0 5.45943983774e-11
2400.0 6.03361413765e-11
2420.0 6.66817487582e-11
2440.0 7.3694729494e-11
2460.0 8.14452718522e-11
2480.0 9.00109458659e-11
2500.0 9.94774796794e-11
2520.0 1.09939617545e-10
2540.0 1.21502068055e-10
2560.0 1.34280552101e-10
2580.0 1.48402961045e-10
2600.0 1.64010636703e-10
2620.0 1.81259785939e-10
2640.0 2.00323044037e-10
2660.0 2.2139120249e-10
2680.0 2.4467511851e-10
2700.0 2.70407825354e-10
2720.0 2.98846864601e-10
2740.0 3.30276863715e-10
2760.0 3.65012384691e-10
2780.0 4.03401072298e-10
2800.0 4.45827133424e-10
2820.0 4.92715182349e-10
2840.0 5.44534490427e-10
2860.0 6.01803682709e-10
2880.0 6.65095928521e-10
2900.0 7.35044677932e-10
2920.0 8.12350001536e-10
2940.0 8.97785596997e-10
2960.0 9.92206532468e-10
2980.0 1.09655780441e-09
3000.0 1.21188379542e-09
3020.0 1.33933872679e-09
3040.0 1.4801982103e-09
3060.0 1.63587201501e-09
3080.0 1.80791817668e-09
3100.0 1.99805859113e-09
3120.0 2.20819624752e-09
3140.0 2.44043427417e-09
3160.0 2.69709698729e-09
3180.0 2.98075315358e-09
3200.0 3.2942416993e-09
3220.0 3.64070012317e-09
3240.0 4.02359589757e-09
3260.0 4.44676117208e-09
3280.0 4.91443112701e-09
3300.0 5.43128636046e-09
3320.0 6.00249973332e-09
3340.0 6.63378814102e-09
3360.0 7.33146973013e-09
3380.0 8.10252713249e-09
3400.0 8.95467734975e-09
3420.0 9.89644898769e-09
3440.0 1.09372676134e-08
3460.0 1.20875500896e-08
3480.0 1.33588088298e-08
3500.0 1.47637670188e-08
3520.0 1.63164859504e-08
3540.0 1.80325057576e-08
3560.0 1.99290009433e-08
3580.0 2.20249522688e-08
3600.0 2.43413367195e-08
3620.0 2.69013374495e-08
3640.0 2.97305758065e-08
3660.0 3.2857367759e-08
3680.0 3.63130072918e-08
3700.0 4.01320796068e-08
3720.0 4.43528072633e-08
3740.0 4.90174327224e-08
3760.0 5.41726411235e-08
3780.0 5.98700275251e-08
3800.0 6.61666132851e-08
3820.0 7.31254167503e-08
3840.0 8.08160839646e-08
3860.0 8.93155857104e-08
3880.0 9.8708987858e-08
3900.0 1.09090302733e-07
3920.0 1.20563430025e-07
3940.0 1.33243196647e-07
3960.0 1.47256505966e-07
3980.0 1.62743607891e-07
4000.0 1.79859502544e-07
4020.0 1.98775491551e-07
4040.0 2.19680892488e-07
4060.0 2.42784933635e-07
4080.0 2.68318848e-07
4100.0 2.96538187581e-07
4120.0 3.27725381014e-07
4140.0 3.62192560211e-07
4160.0 4.00284684289e-07
4180.0 4.42382992027e-07
4200.0 4.8890881744e-07
4220.0 5.40327806625e-07
4240.0 5.9715457811e-07
4260.0 6.59957873323e-07
4280.0 7.29366248752e-07
4300.0 8.06074366746e-07
4320.0 8.90849947934e-07
4340.0 9.84541454826e-07
4360.0 1.08808658351e-06
4380.0 1.20252164845e-06
4400.0 1.32899195422e-06
4420.0 1.46876325816e-06
4440.0 1.62323443846e-06
4460.0 1.7939514946e-06
4480.0 1.98262302027e-06
4500.0 2.19113730351e-06
4520.0 2.42158122535e-06
4540.0 2.67626114602e-06
4560.0 2.95772598775e-06
4580.0 3.2687927453e-06
4600.0 3.61257467933e-06
4620.0 3.99251247497e-06
4640.0 4.41240867739e-06
4660.0 4.87646574891e-06
4680.0 5.38932812869e-06
4700.0 5.9561287158e-06
4720.0 6.58254024101e-06
4740.0 7.27483204143e-06
4760.0 8.03993280608e-06
4780.0 8.88549992056e-06
4800.0 9.81999610476e-06
4820.0 1.08527741106e-05
4840.0 1.19941703275e-05
4860.0 1.32556082324e-05
4880.0 1.46497127198e-05
4900.0 1.61904364561e-05
4920.0 1.78931995223e-05
4940.0 1.97750437433e-05
4960.0 2.18548032488e-05
4980.0 2.41532929708e-05
5000.0 2.66935169671e-05
5020.0 2.95008986532e-05
5040.0 3.26035352486e-05
5060.0 3.60324789832e-05
5080.0 3.98220478784e-05
5100.0 4.40101692135e-05
5120.0 4.86387591143e-05
5140.0 5.37541420644e-05
5160.0 5.94075145357e-05
5180.0 6.565545738e-05
5200.0 7.25605021094e-05
5220.0 8.01917567322e-05
5240.0 8.86255974099e-05
5260.0 9.79464328545e-05
5280.0 0.00010824754912
5300.0 0.00011963204324
5320.0 0.000132213855059
5340.0 0.000146118907578
5360.0 0.000161486367236
5380.0 0.000178470036735
5400.0 0.000197239894348
5420.0 0.000217983795117
5440.0 0.000240909350976
5460.0 0.000266246008591
5480.0 0.000294247345748
5500.0 0.000325193609242
5520.0 0.000359394519678
5540.0 0.000397192371264
5560.0 0.000438965457603
5580.0 0.000485131857782
5600.0 0.000536153620653
5620.0 0.000592541389166
5640.0 0.000654859511063
5660.0 0.000723731687052
5680.0 0.00079984721302
5700.0 0.000883967878733
5720.0 0.000976935592089
5740.0 0.00107968080521
5760.0 0.00119323182672
5780.0 0.00131872511342
5800.0 0.00145741664428
5820.0 0.00161069449078
5840.0 0.00178009270912
5860.0 0.00196730669359
5880.0 0.00217421014469
5900.0 0.0024028738217
5920.0 0.00265558626755
5940.0 0.00293487671334
5960.0 0.00324354039172
5980.0 0.00358466651253
6000.0 0.00396166918065
6020.0 0.00437832156549
6040.0 0.00483879366416
6060.0 0.0053476940362
6080.0 0.00591011592757
6100.0 0.00653168824561
6120.0 0.00721863189499
6140.0 0.00797782203863
6160.0 0.00881685690668
6180.0 0.0097441338421
6200.0 0.0107689333441
6220.0 0.0119015119506
6240.0 0.013153204889
6260.0 0.0145365395228
6280.0 0.01606536073
6300.0 0.0177549694672
6320.0 0.0196222759065
6340.0 0.0216859686783
6360.0 0.0239667019135
6380.0 0.026487301957
6400.0 0.0292729958212
6420.0 0.0323516636666
6440.0 0.0357541178356
6460.0 0.0395144112334
6480.0 0.04367017814
6500.0 0.0482630108675
6520.0 0.0533388760296
6540.0 0.0589485745907
6560.0 0.0651482502997
6580.0 0.0719999515947
6600.0 0.0795722526054
6620.0 0.0879409394652
6640.0 0.0971897688052
6660.0 0.107411306018
6680.0 0.118707851684
6700.0 0.131192465428
6720.0 0.144990097462
6740.0 0.160238839124
6760.0 0.177091304946
6780.0 0.19571616007
6800.0 0.216299808307
6820.0 0.239048257726
6840.0 0.264189182455
6860.0 0.29197420132
6880.0 0.322681396127
6900.0 0.356618094804
6920.0 0.394123947236
6940.0 0.435574324603
6960.0 0.481384076212
6980.0 0.532011681454
7000.0 0.587963838419
7020.0 0.649800535101
7040.0 0.718140653944
7060.0 0.793668165826
7080.0 0.877138975474
7100.0 0.969388486804
7120.0 1.07133996393
7140.0 1.18401377151
7160.0 1.30853758688
7180.0 1.44615768622
7200.0 1.59825141777
7220.0 1.76634098669
7240.0 1.95210868989
7260.0 2.15741375299
7280.0 2.38431093806
7300.0 2.6350711084
7320.0 2.91220395606
7340.0 3.21848311975
7360.0 3.55697394426
7380.0 3.93106415955
7400.0 4.34449778622
7420.0 4.80141260698
7440.0 5.30638157891
7460.0 5.86445860123
7480.0 6.48122909633
7500.0 7.16286591065
7520.0 7.91619109453
7540.0 8.74874417961
7560.0 9.66885763698
7580.0 10.6857402714
7600.0 11.8095693861
7620.0 13.0515926405
7640.0 14.4242406208
7660.0 15.9412512495
7680.0 17.6178072786
7700.0 19.4706882446
7720.0 21.5184384029
7740.0 23.7815523253
7760.0 26.2826800166
7780.0 29.0468536034
7800.0 32.1017378641
7820.0 35.4779071071
7840.0 39.2091511689
7860.0 43.3328135943
7880.0 47.8901653828
7900.0 52.9268180429
7920.0 58.4931800873
7940.0 64.6449615383
7960.0 71.4437314922
7980.0 78.957534324
8000.0 87.2615706979
8020.0 96.4389502009
8040.0 106.581523132
8060.0 117.790799769
8080.0 130.178966322
8100.0 143.870007724
8120.0 159.00094852
8140.0 175.723224251
8160.0 194.204197073
8180.0 214.628830773
8200.0 237.201541951
8220.0 262.148245887
8240.0 289.718617579
8260.0 320.188590573
8280.0 353.863118601
8300.0 391.079227657
8320.0 432.20938907
8340.0 477.66524732
8360.0 527.901739913
8380.0 583.421650554
8400.0 644.780641167
8420.0 712.592813156
8440.0 787.53685353
8460.0 870.362827434
8480.0 961.899685055
8500.0 1063.06355803
8520.0 1174.8669284
8540.0 1298.42876188
8560.0 1434.98570682
8580.0 1585.90447103
8600.0 1752.69550023
8620.0 1937.02809509
8640.0 2140.74711819
8660.0 2365.89145798
8680.0