From 0c9bf8ae3d756b11c482aa79a62fd9f3db7a51e0 Mon Sep 17 00:00:00 2001 From: dmayerich Date: Mon, 10 Dec 2012 14:44:10 -0600 Subject: [PATCH] Case-sensitive errors with the bessel functions. --- BESSEL.h | 51 --------------------------------------------------- BESSIK.CPP | 487 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- BESSJY.CPP | 706 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CBESSIK.CPP | 454 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CBESSJY.CPP | 716 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CMakeLists.txt | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------- EstimateMaterial.cpp | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------- FileIO.cpp | 388 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- FindCUDASDK.cmake | 284 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------- FindGLEW.cmake | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------- FindRTS.cmake | 28 ++++++++++++++-------------- GAMMA.cpp | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------- PerformanceData.h | 276 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------ README | 20 ++++++++++---------- SimulateSpectrum.cpp | 1180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- bessel.h | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ bessik.CPP | 487 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ bessjy.cpp | 706 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cbessik.cpp | 454 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cbessjy.cpp | 716 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ cudaKK.h | 360 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ cudaMain.cu | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------- eta_TolueneK.txt | 3200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- eta_TolueneN.txt | 3200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- globals.h | 218 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------- interactivemie.cpp | 24 ++++++++++++------------ interactivemie.h | 706 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- interactivemie.qrc | 8 ++++---- interactivemie.ui | 1908 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ kPMMA.txt | 6400 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- main.cpp | 642 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- qtSpectrumDisplay.cpp | 594 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- qtSpectrumDisplay.h | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------- rtsGUIConsole.cpp | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------- rtsGUIConsole.h | 24 ++++++++++++------------ 35 files changed, 12646 insertions(+), 12646 deletions(-) delete mode 100644 BESSEL.h delete mode 100644 BESSIK.CPP delete mode 100644 BESSJY.CPP delete mode 100644 CBESSIK.CPP delete mode 100644 CBESSJY.CPP create mode 100644 bessel.h create mode 100644 bessik.CPP create mode 100644 bessjy.cpp create mode 100644 cbessik.cpp create mode 100644 cbessjy.cpp diff --git a/BESSEL.h b/BESSEL.h deleted file mode 100644 index 194c0ac..0000000 --- a/BESSEL.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef bessH -#define bessH -#define _USE_MATH_DEFINES -#include -#include -using namespace std; -#define eps 1e-15 -#define el 0.5772156649015329 - -int msta1(double x,int mp); -int msta2(double x,int n,int mp); -int bessjy01a(double x,double &j0,double &j1,double &y0,double &y1, - double &j0p,double &j1p,double &y0p,double &y1p); -int bessjy01b(double x,double &j0,double &j1,double &y0,double &y1, - double &j0p,double &j1p,double &y0p,double &y1p); -int bessjyna(int n,double x,int &nm,double *jn,double *yn, - double *jnp,double *ynp); -int bessjynb(int n,double x,int &nm,double *jn,double *yn, - double *jnp,double *ynp); -int bessjyv(double v,double x,double &vm,double *jv,double *yv, - double *jvp,double *yvp); -int bessik01a(double x,double &i0,double &i1,double &k0,double &k1, - double &i0p,double &i1p,double &k0p,double &k1p); -int bessik01b(double x,double &i0,double &i1,double &k0,double &k1, - double &i0p,double &i1p,double &k0p,double &k1p); -int bessikna(int n,double x,int &nm,double *in,double *kn, - double *inp,double *knp); -int bessiknb(int n,double x,int &nm,double *in,double *kn, - double *inp,double *knp); -int bessikv(double v,double x,double &vm,double *iv,double *kv, - double *ivp,double *kvp); -int cbessjy01(complex z,complex &cj0,complex &cj1, - complex &cy0,complex &cy1,complex &cj0p, - complex &cj1p,complex &cy0p,complex &cy1p); -int cbessjyna(int n,complex z,int &nm,complex *cj, - complex *cy,complex *cjp,complex *cyp); -int cbessjynb(int n,complex z,int &nm,complex *cj, - complex *cy,complex *cjp,complex *cyp); -int cbessik01(complexz,complex&ci0,complex&ci1, - complex&ck0,complex&ck1,complex&ci0p, - complex&ci1p,complex&ck0p,complex&ck1p); -int cbessikna(int n,complex z,int &nm,complex *ci, - complex *ck,complex *cip,complex *ckp); -int cbessiknb(int n,complex z,int &nm,complex *ci, - complex *ck,complex *cip,complex *ckp); -int cbessjyva(double v,complex z,double &vm,complex*cjv, - complex*cyv,complex*cjvp,complex*cyvp); -int cbessikv(double v,complexz,double &vm,complex *civ, - complex *ckv,complex *civp,complex *ckvp); - -#endif diff --git a/BESSIK.CPP b/BESSIK.CPP deleted file mode 100644 index 73dee21..0000000 --- a/BESSIK.CPP +++ /dev/null @@ -1,487 +0,0 @@ -// bessik.cpp -- computation of modified Bessel functions In, Kn -// and their derivatives. Algorithms and coefficient values from -// "Computation of Special Functions", Zhang and Jin, John -// Wiley and Sons, 1996. -// -// (C) 2003, C. Bond. All rights reserved. -// -#define _USE_MATH_DEFINES -#include -#include "bessel.h" - -double gamma(double x); - -int bessik01a(double x,double &i0,double &i1,double &k0,double &k1, - double &i0p,double &i1p,double &k0p,double &k1p) -{ - double r,x2,ca,cb,ct,ww,w0,xr,xr2; - int k,kz; - static double a[] = { - 0.125, - 7.03125e-2, - 7.32421875e-2, - 1.1215209960938e-1, - 2.2710800170898e-1, - 5.7250142097473e-1, - 1.7277275025845, - 6.0740420012735, - 2.4380529699556e1, - 1.1001714026925e2, - 5.5133589612202e2, - 3.0380905109224e3}; - static double b[] = { - -0.375, - -1.171875e-1, - -1.025390625e-1, - -1.4419555664063e-1, - -2.7757644653320e-1, - -6.7659258842468e-1, - -1.9935317337513, - -6.8839142681099, - -2.7248827311269e1, - -1.2159789187654e2, - -6.0384407670507e2, - -3.3022722944809e3}; - static double a1[] = { - 0.125, - 0.2109375, - 1.0986328125, - 1.1775970458984e1, - 2.1461706161499e2, - 5.9511522710323e3, - 2.3347645606175e5, - 1.2312234987631e7}; - - if (x < 0.0) return 1; - if (x == 0.0) { - i0 = 1.0; - i1 = 0.0; - k0 = 1e308; - k1 = 1e308; - i0p = 0.0; - i1p = 0.5; - k0p = -1e308; - k1p = -1e308; - return 0; - } - x2 = x*x; - if (x <= 18.0) { - i0 = 1.0; - r = 1.0; - for (k=1;k<=50;k++) { - r *= 0.25*x2/(k*k); - i0 += r; - if (fabs(r/i0) < eps) break; - } - i1 = 1.0; - r = 1.0; - for (k=1;k<=50;k++) { - r *= 0.25*x2/(k*(k+1)); - i1 += r; - if (fabs(r/i1) < eps) break; - } - i1 *= 0.5*x; - } - else { - if (x >= 50.0) kz = 7; - else if (x >= 35.0) kz = 9; - else kz = 12; - ca = exp(x)/sqrt(2.0*M_PI*x); - i0 = 1.0; - xr = 1.0/x; - for (k=0;k 40.0) && (n < (int)(0.25*x))) { - h0 = bi0; - h1 = bi1; - for (k=2;k<=n;k++) { - h = -2.0*(k-1.0)*h1/x+h0; - in[k] = h; - h0 = h1; - h1 = h; - } - } - else { - m = msta1(x,200); - if (m < n) nm = m; - else m = msta2(x,n,15); - f0 = 0.0; - f1 = 1.0e-100; - for (k=m;k>=0;k--) { - f = 2.0*(k+1.0)*f1/x+f0; - if (x <= nm) in[k] = f; - f0 = f1; - f1 = f; - } - s0 = bi0/f; - for (k=0;k<=m;k++) { - in[k] *= s0; - } - } - g0 = bk0; - g1 = bk1; - for (k=2;k<=nm;k++) { - g = 2.0*(k-1.0)*g1/x+g0; - kn[k] = g; - g0 = g1; - g1 = g; - } - for (k=2;k<=nm;k++) { - inp[k] = in[k-1]-k*in[k]/x; - knp[k] = -kn[k-1]-k*kn[k]/x; - } - return 0; -} -int bessiknb(int n,double x,int &nm,double *in,double *kn, - double *inp,double *knp) -{ - double s0,bs,f,f0,f1,sk0,a0,bkl,vt,r,g,g0,g1; - int k,kz,m,l; - - if ((x < 0.0) || (n < 0)) return 1; - if (x < eps) { - for (k=0;k<=n;k++) { - in[k] = 0.0; - kn[k] = 1e308; - inp[k] = 0.0; - knp[k] = -1e308; - } - in[0] = 1.0; - inp[1] = 0.5; - return 0; - } - nm = n; - if (n == 0) nm = 1; - m = msta1(x,200); - if (m < nm) nm = m; - else m = msta2(x,nm,15); - bs = 0.0; - sk0 = 0.0; - f0 = 0.0; - f1 = 1.0e-100; - for (k=m;k>=0;k--) { - f = 2.0*(k+1.0)*f1/x+f0; - if (k <= nm) in[k] = f; - if ((k != 0) && (k == 2*(int)(k/2))) { - sk0 += 4.0*f/k; - } - bs += 2.0*f; - f0 = f1; - f1 = f; - } - s0 = exp(x)/(bs-f); - for (k=0;k<=nm;k++) { - in[k] *= s0; - } - if (x <= 8.0) { - kn[0] = -(log(0.5*x)+el)*in[0]+s0*sk0; - kn[1] = (1.0/x-in[1]*kn[0])/in[0]; - } - else { - a0 = sqrt(M_PI_2/x)*exp(-x); - if (x >= 200.0) kz = 6; - else if (x >= 80.0) kz = 8; - else if (x >= 25.0) kz = 10; - else kz = 16; - for (l=0;l<2;l++) { - bkl = 1.0; - vt = 4.0*l; - r = 1.0; - for (k=1;k<=kz;k++) { - r *= 0.125*(vt-pow(2.0*k-1.0,2))/(k*x); - bkl += r; - } - kn[l] = a0*bkl; - } - } - g0 = kn[0]; - g1 = kn[1]; - for (k=2;k<=nm;k++) { - g = 2.0*(k-1.0)*g1/x+g0; - kn[k] = g; - g0 = g1; - g1 = g; - } - inp[0] = in[1]; - knp[0] = -kn[1]; - for (k=1;k<=nm;k++) { - inp[k] = in[k-1]-k*in[k]/x; - knp[k] = -kn[k-1]-k*kn[k]/x; - } - return 0; -} - -// The following program computes the modified Bessel functions -// Iv(x) and Kv(x) for arbitrary positive order. For negative -// order use: -// -// I-v(x) = Iv(x) + 2/pi sin(v pi) Kv(x) -// K-v(x) = Kv(x) -// -int bessikv(double v,double x,double &vm,double *iv,double *kv, - double *ivp,double *kvp) -{ - double x2,v0,piv,vt,a1,v0p,gap,r,bi0,ca,sum; - double f,f1,f2,ct,cs,wa,gan,ww,w0,v0n; - double r1,r2,bk0,bk1,bk2,a2,cb; - int n,k,kz,m; - - if ((v < 0.0) || (x < 0.0)) return 1; - x2 = x*x; - n = (int)v; - v0 = v-n; - if (n == 0) n = 1; - if (x == 0.0) { - for (k=0;k<=n;k++) { - iv[k] = 0.0; - kv[k] = -1e308; - ivp[k] = 0.0; - kvp[k] = 1e308; - } - if (v0 == 0.0) { - iv[0] = 1.0; - ivp[1] = 0.5; - } - vm = v; - return 0; - } - piv = M_PI*v0; - vt = 4.0*v0*v0; - if (v0 == 0.0) { - a1 = 1.0; - } - else { - v0p = 1.0+v0; - gap = gamma(v0p); - a1 = pow(0.5*x,v0)/gap; - } - if (x >= 50.0) kz = 8; - else if (x >= 35.0) kz = 10; - else kz = 14; - if (x <= 18.0) { - bi0 = 1.0; - r = 1.0; - for (k=1;k<=30;k++) { - r *= 0.25*x2/(k*(k+v0)); - bi0 += r; - if (fabs(r/bi0) < eps) break; - } - bi0 *= a1; - } - else { - ca = exp(x)/sqrt(2.0*M_PI*x); - sum = 1.0; - r = 1.0; - for (k=1;k<=kz;k++) { - r *= -0.125*(vt-pow(2.0*k-1.0,2.0))/(k*x); - sum += r; - } - bi0 = ca*sum; - } - m = msta1(x,200); - if (m < n) n = m; - else m = msta2(x,n,15); - f2 = 0.0; - f1 = 1.0e-100; - for (k=m;k>=0;k--) { - f = 2.0*(v0+k+1.0)*f1/x+f2; - if (k <= n) iv[k] = f; - f2 = f1; - f1 = f; - } - cs = bi0/f; - for (k=0;k<=n;k++) { - iv[k] *= cs; - } - ivp[0] = v0*iv[0]/x+iv[1]; - for (k=1;k<=n;k++) { - ivp[k] = -(k+v0)*iv[k]/x+iv[k-1]; - } - ww = 0.0; - if (x <= 9.0) { - if (v0 == 0.0) { - ct = -log(0.5*x)-el; - cs = 0.0; - w0 = 0.0; - r = 1.0; - for (k=1;k<=50;k++) { - w0 += 1.0/k; - r *= 0.25*x2/(k*k); - cs += r*(w0+ct); - wa = fabs(cs); - if (fabs((wa-ww)/wa) < eps) break; - ww = wa; - } - bk0 = ct+cs; - } - else { - v0n = 1.0-v0; - gan = gamma(v0n); - a2 = 1.0/(gan*pow(0.5*x,v0)); - a1 = pow(0.5*x,v0)/gap; - sum = a2-a1; - r1 = 1.0; - r2 = 1.0; - for (k=1;k<=120;k++) { - r1 *= 0.25*x2/(k*(k-v0)); - r2 *= 0.25*x2/(k*(k+v0)); - sum += a2*r1-a1*r2; - wa = fabs(sum); - if (fabs((wa-ww)/wa) < eps) break; - ww = wa; - } - bk0 = M_PI_2*sum/sin(piv); - } - } - else { - cb = exp(-x)*sqrt(M_PI_2/x); - sum = 1.0; - r = 1.0; - for (k=1;k<=kz;k++) { - r *= 0.125*(vt-pow(2.0*k-1.0,2.0))/(k*x); - sum += r; - } - bk0 = cb*sum; - } - bk1 = (1.0/x-iv[1]*bk0)/iv[0]; - kv[0] = bk0; - kv[1] = bk1; - for (k=2;k<=n;k++) { - bk2 = 2.0*(v0+k-1.0)*bk1/x+bk0; - kv[k] = bk2; - bk0 = bk1; - bk1 = bk2; - } - kvp[0] = v0*kv[0]/x-kv[1]; - for (k=1;k<=n;k++) { - kvp[k] = -(k+v0)*kv[k]/x-kv[k-1]; - } - vm = n+v0; - return 0; -} diff --git a/BESSJY.CPP b/BESSJY.CPP deleted file mode 100644 index f1c1c74..0000000 --- a/BESSJY.CPP +++ /dev/null @@ -1,706 +0,0 @@ -// bessjy.cpp -- computation of Bessel functions Jn, Yn and their -// derivatives. Algorithms and coefficient values from -// "Computation of Special Functions", Zhang and Jin, John -// Wiley and Sons, 1996. -// -// (C) 2003, C. Bond. All rights reserved. -// -// Note that 'math.h' provides (or should provide) values for: -// pi M_PI -// 2/pi M_2_PI -// pi/4 M_PI_4 -// pi/2 M_PI_2 -// -#define _USE_MATH_DEFINES -#include -#include "bessel.h" - -double gamma(double x); -// -// INPUT: -// double x -- argument of Bessel function -// -// OUTPUT (via address pointers): -// double j0 -- Bessel function of 1st kind, 0th order -// double j1 -- Bessel function of 1st kind, 1st order -// double y0 -- Bessel function of 2nd kind, 0th order -// double y1 -- Bessel function of 2nd kind, 1st order -// double j0p -- derivative of Bessel function of 1st kind, 0th order -// double j1p -- derivative of Bessel function of 1st kind, 1st order -// double y0p -- derivative of Bessel function of 2nd kind, 0th order -// double y1p -- derivative of Bessel function of 2nd kind, 1st order -// -// RETURN: -// int error code: 0 = OK, 1 = error -// -// This algorithm computes the above functions using series expansions. -// -int bessjy01a(double x,double &j0,double &j1,double &y0,double &y1, - double &j0p,double &j1p,double &y0p,double &y1p) -{ - double x2,r,ec,w0,w1,r0,r1,cs0,cs1; - double cu,p0,q0,p1,q1,t1,t2; - int k,kz; - static double a[] = { - -7.03125e-2, - 0.112152099609375, - -0.5725014209747314, - 6.074042001273483, - -1.100171402692467e2, - 3.038090510922384e3, - -1.188384262567832e5, - 6.252951493434797e6, - -4.259392165047669e8, - 3.646840080706556e10, - -3.833534661393944e12, - 4.854014686852901e14, - -7.286857349377656e16, - 1.279721941975975e19}; - static double b[] = { - 7.32421875e-2, - -0.2271080017089844, - 1.727727502584457, - -2.438052969955606e1, - 5.513358961220206e2, - -1.825775547429318e4, - 8.328593040162893e5, - -5.006958953198893e7, - 3.836255180230433e9, - -3.649010818849833e11, - 4.218971570284096e13, - -5.827244631566907e15, - 9.476288099260110e17, - -1.792162323051699e20}; - static double a1[] = { - 0.1171875, - -0.1441955566406250, - 0.6765925884246826, - -6.883914268109947, - 1.215978918765359e2, - -3.302272294480852e3, - 1.276412726461746e5, - -6.656367718817688e6, - 4.502786003050393e8, - -3.833857520742790e10, - 4.011838599133198e12, - -5.060568503314727e14, - 7.572616461117958e16, - -1.326257285320556e19}; - static double b1[] = { - -0.1025390625, - 0.2775764465332031, - -1.993531733751297, - 2.724882731126854e1, - -6.038440767050702e2, - 1.971837591223663e4, - -8.902978767070678e5, - 5.310411010968522e7, - -4.043620325107754e9, - 3.827011346598605e11, - -4.406481417852278e13, - 6.065091351222699e15, - -9.833883876590679e17, - 1.855045211579828e20}; - - if (x < 0.0) return 1; - if (x == 0.0) { - j0 = 1.0; - j1 = 0.0; - y0 = -1e308; - y1 = -1e308; - j0p = 0.0; - j1p = 0.5; - y0p = 1e308; - y1p = 1e308; - return 0; - } - x2 = x*x; - if (x <= 12.0) { - j0 = 1.0; - r = 1.0; - for (k=1;k<=30;k++) { - r *= -0.25*x2/(k*k); - j0 += r; - if (fabs(r) < fabs(j0)*1e-15) break; - } - j1 = 1.0; - r = 1.0; - for (k=1;k<=30;k++) { - r *= -0.25*x2/(k*(k+1)); - j1 += r; - if (fabs(r) < fabs(j1)*1e-15) break; - } - j1 *= 0.5*x; - ec = log(0.5*x)+el; - cs0 = 0.0; - w0 = 0.0; - r0 = 1.0; - for (k=1;k<=30;k++) { - w0 += 1.0/k; - r0 *= -0.25*x2/(k*k); - r = r0 * w0; - cs0 += r; - if (fabs(r) < fabs(cs0)*1e-15) break; - } - y0 = M_2_PI*(ec*j0-cs0); - cs1 = 1.0; - w1 = 0.0; - r1 = 1.0; - for (k=1;k<=30;k++) { - w1 += 1.0/k; - r1 *= -0.25*x2/(k*(k+1)); - r = r1*(2.0*w1+1.0/(k+1)); - cs1 += r; - if (fabs(r) < fabs(cs1)*1e-15) break; - } - y1 = M_2_PI * (ec*j1-1.0/x-0.25*x*cs1); - } - else { - if (x >= 50.0) kz = 8; // Can be changed to 10 - else if (x >= 35.0) kz = 10; // " " 12 - else kz = 12; // " " 14 - t1 = x-M_PI_4; - p0 = 1.0; - q0 = -0.125/x; - for (k=0;k=0;k--) { - f = 2.0*(k+1.0)/x*f1-f2; - if (k <= nm) jn[k] = f; - f2 = f1; - f1 = f; - } - if (fabs(bj0) > fabs(bj1)) cs = bj0/f; - else cs = bj1/f2; - for (k=0;k<=nm;k++) { - jn[k] *= cs; - } - } - for (k=2;k<=nm;k++) { - jnp[k] = jn[k-1]-k*jn[k]/x; - } - f0 = yn[0]; - f1 = yn[1]; - for (k=2;k<=nm;k++) { - f = 2.0*(k-1.0)*f1/x-f0; - yn[k] = f; - f0 = f1; - f1 = f; - } - for (k=2;k<=nm;k++) { - ynp[k] = yn[k-1]-k*yn[k]/x; - } - return 0; -} -// -// Same input and output conventions as above. Different recurrence -// relations used for 'x' < 300. -// -int bessjynb(int n,double x,int &nm,double *jn,double *yn, - double *jnp,double *ynp) -{ - double t1,t2,f,f1,f2,bj0,bj1,bjk,by0,by1,cu,s0,su,sv; - double ec,bs,byk,p0,p1,q0,q1; - static double a[] = { - -0.7031250000000000e-1, - 0.1121520996093750, - -0.5725014209747314, - 6.074042001273483}; - static double b[] = { - 0.7324218750000000e-1, - -0.2271080017089844, - 1.727727502584457, - -2.438052969955606e1}; - static double a1[] = { - 0.1171875, - -0.1441955566406250, - 0.6765925884246826, - -6.883914268109947}; - static double b1[] = { - -0.1025390625, - 0.2775764465332031, - -1.993531733751297, - 2.724882731126854e1}; - - int i,k,m; - nm = n; - if ((x < 0.0) || (n < 0)) return 1; - if (x < 1e-15) { - for (i=0;i<=n;i++) { - jn[i] = 0.0; - yn[i] = -1e308; - jnp[i] = 0.0; - ynp[i] = 1e308; - } - jn[0] = 1.0; - jnp[1] = 0.5; - return 0; - } - if (x <= 300.0 || n > (int)(0.9*x)) { - if (n == 0) nm = 1; - m = msta1(x,200); - if (m < nm) nm = m; - else m = msta2(x,nm,15); - bs = 0.0; - su = 0.0; - sv = 0.0; - f2 = 0.0; - f1 = 1.0e-100; - for (k = m;k>=0;k--) { - f = 2.0*(k+1.0)/x*f1 - f2; - if (k <= nm) jn[k] = f; - if ((k == 2*(int)(k/2)) && (k != 0)) { - bs += 2.0*f; -// su += pow(-1,k>>1)*f/(double)k; - su += (-1)*((k & 2)-1)*f/(double)k; - } - else if (k > 1) { -// sv += pow(-1,k>>1)*k*f/(k*k-1.0); - sv += (-1)*((k & 2)-1)*(double)k*f/(k*k-1.0); - } - f2 = f1; - f1 = f; - } - s0 = bs+f; - for (k=0;k<=nm;k++) { - jn[k] /= s0; - } - ec = log(0.5*x) +0.5772156649015329; - by0 = M_2_PI*(ec*jn[0]-4.0*su/s0); - yn[0] = by0; - by1 = M_2_PI*((ec-1.0)*jn[1]-jn[0]/x-4.0*sv/s0); - yn[1] = by1; - } - else { - t1 = x-M_PI_4; - p0 = 1.0; - q0 = -0.125/x; - for (k=0;k<4;k++) { - p0 += a[k]*pow(x,-2*k-2); - q0 += b[k]*pow(x,-2*k-3); - } - cu = sqrt(M_2_PI/x); - bj0 = cu*(p0*cos(t1)-q0*sin(t1)); - by0 = cu*(p0*sin(t1)+q0*cos(t1)); - jn[0] = bj0; - yn[0] = by0; - t2 = x-0.75*M_PI; - p1 = 1.0; - q1 = 0.375/x; - for (k=0;k<4;k++) { - p1 += a1[k]*pow(x,-2*k-2); - q1 += b1[k]*pow(x,-2*k-3); - } - bj1 = cu*(p1*cos(t2)-q1*sin(t2)); - by1 = cu*(p1*sin(t2)+q1*cos(t2)); - jn[1] = bj1; - yn[1] = by1; - for (k=2;k<=nm;k++) { - bjk = 2.0*(k-1.0)*bj1/x-bj0; - jn[k] = bjk; - bj0 = bj1; - bj1 = bjk; - } - } - jnp[0] = -jn[1]; - for (k=1;k<=nm;k++) { - jnp[k] = jn[k-1]-k*jn[k]/x; - } - for (k=2;k<=nm;k++) { - byk = 2.0*(k-1.0)*by1/x-by0; - yn[k] = byk; - by0 = by1; - by1 = byk; - } - ynp[0] = -yn[1]; - for (k=1;k<=nm;k++) { - ynp[k] = yn[k-1]-k*yn[k]/x; - } - return 0; - -} - -// The following routine computes Bessel Jv(x) and Yv(x) for -// arbitrary positive order (v). For negative order, use: -// -// J-v(x) = Jv(x)cos(v pi) - Yv(x)sin(v pi) -// Y-v(x) = Jv(x)sin(v pi) + Yv(x)cos(v pi) -// -int bessjyv(double v,double x,double &vm,double *jv,double *yv, - double *djv,double *dyv) -{ - double v0,vl,vg,vv,a,a0,r,x2,bjv0,bjv1,bjvl,f,f0,f1,f2; - double r0,r1,ck,cs,cs0,cs1,sk,qx,px,byv0,byv1,rp,xk,rq; - double b,ec,w0,w1,bju0,bju1,pv0,pv1,byvk; - int j,k,l,m,n,kz; - - x2 = x*x; - n = (int)v; - v0 = v-n; - if ((x < 0.0) || (v < 0.0)) return 1; - if (x < 1e-15) { - for (k=0;k<=n;k++) { - jv[k] = 0.0; - yv[k] = -1e308; - djv[k] = 0.0; - dyv[k] = 1e308; - if (v0 == 0.0) { - jv[0] = 1.0; - djv[1] = 0.5; - } - else djv[0] = 1e308; - } - vm = v; - return 0; - } - if (x <= 12.0) { - for (l=0;l<2;l++) { - vl = v0 + l; - bjvl = 1.0; - r = 1.0; - for (k=1;k<=40;k++) { - r *= -0.25*x2/(k*(k+vl)); - bjvl += r; - if (fabs(r) < fabs(bjvl)*1e-15) break; - } - vg = 1.0 + vl; - a = pow(0.5*x,vl)/gamma(vg); - if (l == 0) bjv0 = bjvl*a; - else bjv1 = bjvl*a; - } - } - else { - if (x >= 50.0) kz = 8; - else if (x >= 35.0) kz = 10; - else kz = 11; - for (j=0;j<2;j++) { - vv = 4.0*(j+v0)*(j+v0); - px = 1.0; - rp = 1.0; - for (k=1;k<=kz;k++) { - rp *= (-0.78125e-2)*(vv-pow(4.0*k-3.0,2.0))* - (vv-pow(4.0*k-1.0,2.0))/(k*(2.0*k-1.0)*x2); - px += rp; - } - qx = 1.0; - rq = 1.0; - for (k=1;k<=kz;k++) { - rq *= (-0.78125e-2)*(vv-pow(4.0*k-1.0,2.0))* - (vv-pow(4.0*k+1.0,2.0))/(k*(2.0*k+1.0)*x2); - qx += rq; - } - qx *= 0.125*(vv-1.0)/x; - xk = x-(0.5*(j+v0)+0.25)*M_PI; - a0 = sqrt(M_2_PI/x); - ck = cos(xk); - sk = sin(xk); - - if (j == 0) { - bjv0 = a0*(px*ck-qx*sk); - byv0 = a0*(px*sk+qx*ck); - } - else if (j == 1) { - bjv1 = a0*(px*ck-qx*sk); - byv1 = a0*(px*sk+qx*ck); - } - } - } - jv[0] = bjv0; - jv[1] = bjv1; - djv[0] = v0*jv[0]/x-jv[1]; - djv[1] = -(1.0+v0)*jv[1]/x+jv[0]; - if ((n >= 2) && (n <= (int)(0.9*x))) { - f0 = bjv0; - f1 = bjv1; - for (k=2;k<=n;k++) { - f = 2.0*(k+v0-1.0)*f1/x-f0; - jv[k] = f; - f0 = f1; - f1 = f; - } - } - else if (n >= 2) { - m = msta1(x,200); - if (m < n) n = m; - else m = msta2(x,n,15); - f2 = 0.0; - f1 = 1.0e-100; - for (k=m;k>=0;k--) { - f = 2.0*(v0+k+1.0)*f1/x-f2; - if (k <= n) jv[k] = f; - f2 = f1; - f1 = f; - } - if (fabs(bjv0) > fabs(bjv1)) cs = bjv0/f; - else cs = bjv1/f2; - for (k=0;k<=n;k++) { - jv[k] *= cs; - } - } - for (k=2;k<=n;k++) { - djv[k] = -(k+v0)*jv[k]/x+jv[k-1]; - } - if (x <= 12.0) { - if (v0 != 0.0) { - for (l=0;l<2;l++) { - vl = v0 +l; - bjvl = 1.0; - r = 1.0; - for (k=1;k<=40;k++) { - r *= -0.25*x2/(k*(k-vl)); - bjvl += r; - if (fabs(r) < fabs(bjvl)*1e-15) break; - } - vg = 1.0-vl; - b = pow(2.0/x,vl)/gamma(vg); - if (l == 0) bju0 = bjvl*b; - else bju1 = bjvl*b; - } - pv0 = M_PI*v0; - pv1 = M_PI*(1.0+v0); - byv0 = (bjv0*cos(pv0)-bju0)/sin(pv0); - byv1 = (bjv1*cos(pv1)-bju1)/sin(pv1); - } - else { - ec = log(0.5*x)+el; - cs0 = 0.0; - w0 = 0.0; - r0 = 1.0; - for (k=1;k<=30;k++) { - w0 += 1.0/k; - r0 *= -0.25*x2/(k*k); - cs0 += r0*w0; - } - byv0 = M_2_PI*(ec*bjv0-cs0); - cs1 = 1.0; - w1 = 0.0; - r1 = 1.0; - for (k=1;k<=30;k++) { - w1 += 1.0/k; - r1 *= -0.25*x2/(k*(k+1)); - cs1 += r1*(2.0*w1+1.0/(k+1.0)); - } - byv1 = M_2_PI*(ec*bjv1-1.0/x-0.25*x*cs1); - } - } - yv[0] = byv0; - yv[1] = byv1; - for (k=2;k<=n;k++) { - byvk = 2.0*(v0+k-1.0)*byv1/x-byv0; - yv[k] = byvk; - byv0 = byv1; - byv1 = byvk; - } - dyv[0] = v0*yv[0]/x-yv[1]; - for (k=1;k<=n;k++) { - dyv[k] = -(k+v0)*yv[k]/x+yv[k-1]; - } - vm = n + v0; - return 0; -} - diff --git a/CBESSIK.CPP b/CBESSIK.CPP deleted file mode 100644 index d548004..0000000 --- a/CBESSIK.CPP +++ /dev/null @@ -1,454 +0,0 @@ -// cbessik.cpp -- complex modified Bessel functions. -// Algorithms and coefficient values from "Computation of Special -// Functions", Zhang and Jin, John Wiley and Sons, 1996. -// -// (C) 2003, C. Bond. All rights reserved. -// -#include -using namespace std; -#include "bessel.h" - -static complex cii(0.0,1.0); -static complex czero(0.0,0.0); -static complex cone(1.0,0.0); - -double gamma(double x); - -int cbessik01(complexz,complex&ci0,complex&ci1, - complex&ck0,complex&ck1,complex&ci0p, - complex&ci1p,complex&ck0p,complex&ck1p) -{ - complex z1,z2,zr,zr2,cr,ca,cb,cs,ct,cw; - double a0,w0; - int k,kz; - static double a[] = { - 0.125, - 7.03125e-2, - 7.32421875e-2, - 1.1215209960938e-1, - 2.2710800170898e-1, - 5.7250142097473e-1, - 1.7277275025845, - 6.0740420012735, - 2.4380529699556e1, - 1.1001714026925e2, - 5.5133589612202e2, - 3.0380905109224e3}; - static double b[] = { - -0.375, - -1.171875e-1, - -1.025390625e-1, - -1.4419555664063e-1, - -2.7757644653320e-1, - -6.7659258842468e-1, - -1.9935317337513, - -6.8839142681099, - -2.7248827311269e1, - -1.2159789187654e2, - -6.0384407670507e2, - -3.3022722944809e3}; - static double a1[] = { - 0.125, - 0.2109375, - 1.0986328125, - 1.1775970458984e1, - 2.1461706161499e2, - 5.9511522710323e3, - 2.3347645606175e5, - 1.2312234987631e7, - 8.401390346421e08, - 7.2031420482627e10}; - - a0 = abs(z); - z2 = z*z; - z1 = z; - if (a0 == 0.0) { - ci0 = cone; - ci1 = czero; - ck0 = complex (1e308,0); - ck1 = complex (1e308,0); - ci0p = czero; - ci1p = complex(0.5,0.0); - ck0p = complex(-1e308,0); - ck1p = complex(-1e308,0); - return 0; - } - if (real(z) < 0.0) z1 = -z; - if (a0 <= 18.0) { - ci0 = cone; - cr = cone; - for (k=1;k<=50;k++) { - cr *= 0.25*z2/(double)(k*k); - ci0 += cr; - if (abs(cr/ci0) < eps) break; - } - ci1 = cone; - cr = cone; - for (k=1;k<=50;k++) { - cr *= 0.25*z2/(double)(k*(k+1.0)); - ci1 += cr; - if (abs(cr/ci1) < eps) break; - } - ci1 *= 0.5*z1; - } - else { - if (a0 >= 50.0) kz = 7; - else if (a0 >= 35.0) kz = 9; - else kz = 12; - ca = exp(z1)/sqrt(2.0*M_PI*z1); - ci0 = cone; - zr = 1.0/z1; - for (k=0;k 0.0) { - ck0 -= cii*M_PI*ci0; - ck1 = -ck1-cii*M_PI*ci1; - } - ci1 = -ci1; - } - ci0p = ci1; - ci1p = ci0-1.0*ci1/z; - ck0p = -ck1; - ck1p = -ck0-1.0*ck1/z; - return 0; -} -int cbessikna(int n,complex z,int &nm,complex *ci, - complex *ck,complex *cip,complex *ckp) -{ - complex ci0,ci1,ck0,ck1,ckk,cf,cf1,cf2,cs; - double a0; - int k,m,ecode; - a0 = abs(z); - nm = n; - if (a0 < 1.0e-100) { - for (k=0;k<=n;k++) { - ci[k] = czero; - ck[k] = complex(-1e308,0); - cip[k] = czero; - ckp[k] = complex(1e308,0); - } - ci[0] = cone; - cip[1] = complex(0.5,0.0); - return 0; - } - ecode = cbessik01(z,ci[0],ci[1],ck[0],ck[1],cip[0],cip[1],ckp[0],ckp[1]); - if (n < 2) return 0; - ci0 = ci[0]; - ci1 = ci[1]; - ck0 = ck[0]; - ck1 = ck[1]; - m = msta1(a0,200); - if (m < n) nm = m; - else m = msta2(a0,n,15); - cf2 = czero; - cf1 = complex(1.0e-100,0.0); - for (k=m;k>=0;k--) { - cf = 2.0*(k+1.0)*cf1/z+cf2; - if (k <= nm) ci[k] = cf; - cf2 = cf1; - cf1 = cf; - } - cs = ci0/cf; - for (k=0;k<=nm;k++) { - ci[k] *= cs; - } - for (k=2;k<=nm;k++) { - if (abs(ci[k-1]) > abs(ci[k-2])) { - ckk = (1.0/z-ci[k]*ck[k-1])/ci[k-1]; - } - else { - ckk = (ci[k]*ck[k-2]+2.0*(k-1.0)/(z*z))/ci[k-2]; - } - ck[k] = ckk; - } - for (k=2;k<=nm;k++) { - cip[k] = ci[k-1]-(double)k*ci[k]/z; - ckp[k] = -ck[k-1]-(double)k*ck[k]/z; - } - return 0; -} -int cbessiknb(int n,complex z,int &nm,complex *ci, - complex *ck,complex *cip,complex *ckp) -{ - complex z1,cbs,csk0,cf,cf0,cf1,ca0,cbkl; - complex cg,cg0,cg1,cs0,cs,cr; - double a0,vt,fac; - int k,kz,l,m; - - a0 = abs(z); - nm = n; - if (a0 < 1.0e-100) { - for (k=0;k<=n;k++) { - ci[k] = czero; - ck[k] = complex(1e308,0); - cip[k] = czero; - ckp[k] = complex(-1e308,0); - } - ci[0] = complex(1.0,0.0); - cip[1] = complex(0.5,0.0); - return 0; - } - z1 = z; - if (real(z) < 0.0) z1 = -z; - if (n == 0) nm = 1; - m = msta1(a0,200); - if (m < nm) nm = m; - else m = msta2(a0,nm,15); - cbs = czero; - csk0 = czero; - cf0 = czero; - cf1 = complex(1.0e-100,0.0); - for (k=m;k>=0;k--) { - cf = 2.0*(k+1.0)*cf1/z1+cf0; - if (k <=nm) ci[k] = cf; - if ((k != 0) && (k == 2*(k>>1))) csk0 += 4.0*cf/(double)k; - cbs += 2.0*cf; - cf0 = cf1; - cf1 = cf; - } - cs0 = exp(z1)/(cbs-cf); - for (k=0;k<=nm;k++) { - ci[k] *= cs0; - } - if (a0 <= 9.0) { - ck[0] = -(log(0.5*z1)+el)*ci[0]+cs0*csk0; - ck[1] = (1.0/z1-ci[1]*ck[0])/ci[0]; - } - else { - ca0 = sqrt(M_PI_2/z1)*exp(-z1); - if (a0 >= 200.0) kz = 6; - else if (a0 >= 80.0) kz = 8; - else if (a0 >= 25.0) kz = 10; - else kz = 16; - for (l=0;l<2;l++) { - cbkl = cone; - vt = 4.0*l; - cr = cone; - for (k=1;k<=kz;k++) { - cr *= 0.125*(vt-pow(2.0*k-1.0,2.0))/((double)k*z1); - cbkl += cr; - } - ck[l] = ca0*cbkl; - } - } - cg0 = ck[0]; - cg1 = ck[1]; - for (k=2;k<=nm;k++) { - cg = 2.0*(k-1.0)*cg1/z1+cg0; - ck[k] = cg; - cg0 = cg1; - cg1 = cg; - } - if (real(z) < 0.0) { - fac = 1.0; - for (k=0;k<=nm;k++) { - if (imag(z) < 0.0) { - ck[k] = fac*ck[k]+cii*M_PI*ci[k]; - } - else { - ck[k] = fac*ck[k]-cii*M_PI*ci[k]; - } - ci[k] *= fac; - fac = -fac; - } - } - cip[0] = ci[1]; - ckp[0] = -ck[1]; - for (k=1;k<=nm;k++) { - cip[k] = ci[k-1]-(double)k*ci[k]/z; - ckp[k] = -ck[k-1]-(double)k*ck[k]/z; - } - return 0; -} -int cbessikv(double v,complexz,double &vm,complex *civ, - complex *ckv,complex *civp,complex *ckvp) -{ - complex z1,z2,ca1,ca,cs,cr,ci0,cbi0,cf,cf1,cf2; - complex ct,cp,cbk0,ca2,cr1,cr2,csu,cws,cb; - complex cg0,cg1,cgk,cbk1,cvk; - double a0,v0,v0p,v0n,vt,w0,piv,gap,gan; - int m,n,k,kz; - - a0 = abs(z); - z1 = z; - z2 = z*z; - n = (int)v; - v0 = v-n; - piv = M_PI*v0; - vt = 4.0*v0*v0; - if (n == 0) n = 1; - if (a0 < 1e-100) { - for (k=0;k<=n;k++) { - civ[k] = czero; - ckv[k] = complex(-1e308,0); - civp[k] = czero; - ckvp[k] = complex(1e308,0); - } - if (v0 == 0.0) { - civ[0] = cone; - civp[1] = complex (0.5,0.0); - } - vm = v; - return 0; - } - if (a0 >= 50.0) kz = 8; - else if (a0 >= 35.0) kz = 10; - else kz = 14; - if (real(z) <= 0.0) z1 = -z; - if (a0 < 18.0) { - if (v0 == 0.0) { - ca1 = cone; - } - else { - v0p = 1.0+v0; - gap = gamma(v0p); - ca1 = pow(0.5*z1,v0)/gap; - } - ci0 = cone; - cr = cone; - for (k=1;k<=50;k++) { - cr *= 0.25*z2/(k*(k+v0)); - ci0 += cr; - if (abs(cr/ci0) < eps) break; - } - cbi0 = ci0*ca1; - } - else { - ca = exp(z1)/sqrt(2.0*M_PI*z1); - cs = cone; - cr = cone; - for (k=1;k<=kz;k++) { - cr *= -0.125*(vt-pow(2.0*k-1.0,2.0))/((double)k*z1); - cs += cr; - } - cbi0 = ca*cs; - } - m = msta1(a0,200); - if (m < n) n = m; - else m = msta2(a0,n,15); - cf2 = czero; - cf1 = complex(1.0e-100,0.0); - for (k=m;k>=0;k--) { - cf = 2.0*(v0+k+1.0)*cf1/z1+cf2; - if (k <= n) civ[k] = cf; - cf2 = cf1; - cf1 = cf; - } - cs = cbi0/cf; - for (k=0;k<=n;k++) { - civ[k] *= cs; - } - if (a0 <= 9.0) { - if (v0 == 0.0) { - ct = -log(0.5*z1)-el; - cs = czero; - w0 = 0.0; - cr = cone; - for (k=1;k<=50;k++) { - w0 += 1.0/k; - cr *= 0.25*z2/(double)(k*k); - cp = cr*(w0+ct); - cs += cp; - if ((k >= 10) && (abs(cp/cs) < eps)) break; - } - cbk0 = ct+cs; - } - else { - v0n = 1.0-v0; - gan = gamma(v0n); - ca2 = 1.0/(gan*pow(0.5*z1,v0)); - ca1 = pow(0.5*z1,v0)/gap; - csu = ca2-ca1; - cr1 = cone; - cr2 = cone; - cws = czero; - for (k=1;k<=50;k++) { - cr1 *= 0.25*z2/(k*(k-v0)); - cr2 *= 0.25*z2/(k*(k+v0)); - csu += ca2*cr1-ca1*cr2; - if ((k >= 10) && (abs((cws-csu)/csu) < eps)) break; - cws = csu; - } - cbk0 = csu*M_PI_2/sin(piv); - } - } - else { - cb = exp(-z1)*sqrt(M_PI_2/z1); - cs = cone; - cr = cone; - for (k=1;k<=kz;k++) { - cr *= 0.125*(vt-pow(2.0*k-1.0,2.0))/((double)k*z1); - cs += cr; - } - cbk0 = cb*cs; - } - cbk1 = (1.0/z1-civ[1]*cbk0)/civ[0]; - ckv[0] = cbk0; - ckv[1] = cbk1; - cg0 = cbk0; - cg1 = cbk1; - for (k=2;k<=n;k++) { - cgk = 2.0*(v0+k-1.0)*cg1/z1+cg0; - ckv[k] = cgk; - cg0 = cg1; - cg1 = cgk; - } - if (real(z) < 0.0) { - for (k=0;k<=n;k++) { - cvk = exp((k+v0)*M_PI*cii); - if (imag(z) < 0.0) { - ckv[k] = cvk*ckv[k]+M_PI*cii*civ[k]; - civ[k] /= cvk; - } - else if (imag(z) > 0.0) { - ckv[k] = ckv[k]/cvk-M_PI*cii*civ[k]; - civ[k] *= cvk; - } - } - } - civp[0] = v0*civ[0]/z+civ[1]; - ckvp[0] = v0*ckv[0]/z-ckv[1]; - for (k=1;k<=n;k++) { - civp[k] = -(k+v0)*civ[k]/z+civ[k-1]; - ckvp[k] = -(k+v0)*ckv[k]/z-ckv[k-1]; - } - vm = n+v0; - return 0; -} diff --git a/CBESSJY.CPP b/CBESSJY.CPP deleted file mode 100644 index 645bc4c..0000000 --- a/CBESSJY.CPP +++ /dev/null @@ -1,716 +0,0 @@ -// cbessjy.cpp -- complex Bessel functions. -// Algorithms and coefficient values from "Computation of Special -// Functions", Zhang and Jin, John Wiley and Sons, 1996. -// -// (C) 2003, C. Bond. All rights reserved. -// -#include -using namespace std; -#include "bessel.h" -double gamma(double); - -static complex cii(0.0,1.0); -static complex cone(1.0,0.0); -static complex czero(0.0,0.0); - -int cbessjy01(complex z,complex &cj0,complex &cj1, - complex &cy0,complex &cy1,complex &cj0p, - complex &cj1p,complex &cy0p,complex &cy1p) -{ - complex z1,z2,cr,cp,cs,cp0,cq0,cp1,cq1,ct1,ct2,cu; - double a0,w0,w1; - int k,kz; - - static double a[] = { - -7.03125e-2, - 0.112152099609375, - -0.5725014209747314, - 6.074042001273483, - -1.100171402692467e2, - 3.038090510922384e3, - -1.188384262567832e5, - 6.252951493434797e6, - -4.259392165047669e8, - 3.646840080706556e10, - -3.833534661393944e12, - 4.854014686852901e14, - -7.286857349377656e16, - 1.279721941975975e19}; - static double b[] = { - 7.32421875e-2, - -0.2271080017089844, - 1.727727502584457, - -2.438052969955606e1, - 5.513358961220206e2, - -1.825775547429318e4, - 8.328593040162893e5, - -5.006958953198893e7, - 3.836255180230433e9, - -3.649010818849833e11, - 4.218971570284096e13, - -5.827244631566907e15, - 9.476288099260110e17, - -1.792162323051699e20}; - static double a1[] = { - 0.1171875, - -0.1441955566406250, - 0.6765925884246826, - -6.883914268109947, - 1.215978918765359e2, - -3.302272294480852e3, - 1.276412726461746e5, - -6.656367718817688e6, - 4.502786003050393e8, - -3.833857520742790e10, - 4.011838599133198e12, - -5.060568503314727e14, - 7.572616461117958e16, - -1.326257285320556e19}; - static double b1[] = { - -0.1025390625, - 0.2775764465332031, - -1.993531733751297, - 2.724882731126854e1, - -6.038440767050702e2, - 1.971837591223663e4, - -8.902978767070678e5, - 5.310411010968522e7, - -4.043620325107754e9, - 3.827011346598605e11, - -4.406481417852278e13, - 6.065091351222699e15, - -9.833883876590679e17, - 1.855045211579828e20}; - - a0 = abs(z); - z2 = z*z; - z1 = z; - if (a0 == 0.0) { - cj0 = cone; - cj1 = czero; - cy0 = complex(-1e308,0); - cy1 = complex(-1e308,0); - cj0p = czero; - cj1p = complex(0.5,0.0); - cy0p = complex(1e308,0); - cy1p = complex(1e308,0); - return 0; - } - if (real(z) < 0.0) z1 = -z; - if (a0 <= 12.0) { - cj0 = cone; - cr = cone; - for (k=1;k<=40;k++) { - cr *= -0.25*z2/(double)(k*k); - cj0 += cr; - if (abs(cr) < abs(cj0)*eps) break; - } - cj1 = cone; - cr = cone; - for (k=1;k<=40;k++) { - cr *= -0.25*z2/(k*(k+1.0)); - cj1 += cr; - if (abs(cr) < abs(cj1)*eps) break; - } - cj1 *= 0.5*z1; - w0 = 0.0; - cr = cone; - cs = czero; - for (k=1;k<=40;k++) { - w0 += 1.0/k; - cr *= -0.25*z2/(double)(k*k); - cp = cr*w0; - cs += cp; - if (abs(cp) < abs(cs)*eps) break; - } - cy0 = M_2_PI*((log(0.5*z1)+el)*cj0-cs); - w1 = 0.0; - cr = cone; - cs = cone; - for (k=1;k<=40;k++) { - w1 += 1.0/k; - cr *= -0.25*z2/(k*(k+1.0)); - cp = cr*(2.0*w1+1.0/(k+1.0)); - cs += cp; - if (abs(cp) < abs(cs)*eps) break; - } - cy1 = M_2_PI*((log(0.5*z1)+el)*cj1-1.0/z1-0.25*z1*cs); - } - else { - if (a0 >= 50.0) kz = 8; // can be changed to 10 - else if (a0 >= 35.0) kz = 10; // " " " 12 - else kz = 12; // " " " 14 - ct1 = z1 - M_PI_4; - cp0 = cone; - for (k=0;k 0.0) { - cy0 += 2.0*cii*cj0; - cy1 = -(cy1+2.0*cii*cj1); - } - cj1 = -cj1; - } - cj0p = -cj1; - cj1p = cj0-cj1/z; - cy0p = -cy1; - cy1p = cy0-cy1/z; - return 0; -} - -int cbessjyna(int n,complex z,int &nm,complex *cj, - complex *cy,complex *cjp,complex *cyp) -{ - complex cbj0,cbj1,cby0,cby1,cj0,cjk,cj1,cf,cf1,cf2; - complex cs,cg0,cg1,cyk,cyl1,cyl2,cylk,cp11,cp12,cp21,cp22; - complex ch0,ch1,ch2; - double a0,yak,ya1,ya0,wa; - int m,k,lb,lb0; - - if (n < 0) return 1; - a0 = abs(z); - nm = n; - if (a0 < 1.0e-100) { - for (k=0;k<=n;k++) { - cj[k] = czero; - cy[k] = complex (-1e308,0); - cjp[k] = czero; - cyp[k] = complex(1e308,0); - } - cj[0] = cone; - cjp[1] = complex(0.5,0.0); - return 0; - } - cbessjy01(z,cj[0],cj[1],cy[0],cy[1],cjp[0],cjp[1],cyp[0],cyp[1]); - cbj0 = cj[0]; - cbj1 = cj[1]; - cby0 = cy[0]; - cby1 = cy[1]; - if (n <= 1) return 0; - if (n < (int)0.25*a0) { - cj0 = cbj0; - cj1 = cbj1; - for (k=2;k<=n;k++) { - cjk = 2.0*(k-1.0)*cj1/z-cj0; - cj[k] = cjk; - cj0 = cj1; - cj1 = cjk; - } - } - else { - m = msta1(a0,200); - if (m < n) nm = m; - else m = msta2(a0,n,15); - cf2 = czero; - cf1 = complex (1.0e-100,0.0); - for (k=m;k>=0;k--) { - cf = 2.0*(k+1.0)*cf1/z-cf2; - if (k <=nm) cj[k] = cf; - cf2 = cf1; - cf1 = cf; - } - if (abs(cbj0) > abs(cbj1)) cs = cbj0/cf; - else cs = cbj1/cf2; - for (k=0;k<=nm;k++) { - cj[k] *= cs; - } - } - for (k=2;k<=nm;k++) { - cjp[k] = cj[k-1]-(double)k*cj[k]/z; - } - ya0 = abs(cby0); - lb = 0; - cg0 = cby0; - cg1 = cby1; - for (k=2;k<=nm;k++) { - cyk = 2.0*(k-1.0)*cg1/z-cg0; - yak = abs(cyk); - ya1 = abs(cg0); - if ((yak < ya0) && (yak < ya1)) lb = k; - cy[k] = cyk; - cg0 = cg1; - cg1 = cyk; - } - lb0 = 0; - if ((lb > 4) && (imag(z) != 0.0)) { - while (lb != lb0) { - ch2 = cone; - ch1 = czero; - lb0 = lb; - for (k=lb;k>=1;k--) { - ch0 = 2.0*k*ch1/z-ch2; - ch2 = ch1; - ch1 = ch0; - } - cp12 = ch0; - cp22 = ch2; - ch2 = czero; - ch1 = cone; - for (k=lb;k>=1;k--) { - ch0 = 2.0*k*ch1/z-ch2; - ch2 = ch1; - ch1 = ch0; - } - cp11 = ch0; - cp21 = ch2; - if (lb == nm) - cj[lb+1] = 2.0*lb*cj[lb]/z-cj[lb-1]; - if (abs(cj[0]) > abs(cj[1])) { - cy[lb+1] = (cj[lb+1]*cby0-2.0*cp11/(M_PI*z))/cj[0]; - cy[lb] = (cj[lb]*cby0+2.0*cp12/(M_PI*z))/cj[0]; - } - else { - cy[lb+1] = (cj[lb+1]*cby1-2.0*cp21/(M_PI*z))/cj[1]; - cy[lb] = (cj[lb]*cby1+2.0*cp22/(M_PI*z))/cj[1]; - } - cyl2 = cy[lb+1]; - cyl1 = cy[lb]; - for (k=lb-1;k>=0;k--) { - cylk = 2.0*(k+1.0)*cyl1/z-cyl2; - cy[k] = cylk; - cyl2 = cyl1; - cyl1 = cylk; - } - cyl1 = cy[lb]; - cyl2 = cy[lb+1]; - for (k=lb+1;k z,int &nm,complex *cj, - complex *cy,complex *cjp,complex *cyp) -{ - complex cf,cf0,cf1,cf2,cbs,csu,csv,cs0,ce; - complex ct1,cp0,cq0,cp1,cq1,cu,cbj0,cby0,cbj1,cby1; - complex cyy,cbjk,ct2; - double a0,y0; - int k,m; - static double a[] = { - -0.7031250000000000e-1, - 0.1121520996093750, - -0.5725014209747314, - 6.074042001273483}; - static double b[] = { - 0.7324218750000000e-1, - -0.2271080017089844, - 1.727727502584457, - -2.438052969955606e1}; - static double a1[] = { - 0.1171875, - -0.1441955566406250, - 0.6765925884246826, - -6.883914268109947}; - static double b1[] = { - -0.1025390625, - 0.2775764465332031, - -1.993531733751297, - 2.724882731126854e1}; - - y0 = abs(imag(z)); - a0 = abs(z); - nm = n; - if (a0 < 1.0e-100) { - for (k=0;k<=n;k++) { - cj[k] = czero; - cy[k] = complex (-1e308,0); - cjp[k] = czero; - cyp[k] = complex(1e308,0); - } - cj[0] = cone; - cjp[1] = complex(0.5,0.0); - return 0; - } - if ((a0 <= 300.0) || (n > (int)(0.25*a0))) { - if (n == 0) nm = 1; - m = msta1(a0,200); - if (m < nm) nm = m; - else m = msta2(a0,nm,15); - cbs = czero; - csu = czero; - csv = czero; - cf2 = czero; - cf1 = complex (1.0e-100,0.0); - for (k=m;k>=0;k--) { - cf = 2.0*(k+1.0)*cf1/z-cf2; - if (k <= nm) cj[k] = cf; - if (((k & 1) == 0) && (k != 0)) { - if (y0 <= 1.0) { - cbs += 2.0*cf; - } - else { - cbs += (-1)*((k & 2)-1)*2.0*cf; - } - csu += (double)((-1)*((k & 2)-1))*cf/(double)k; - } - else if (k > 1) { - csv += (double)((-1)*((k & 2)-1)*k)*cf/(double)(k*k-1.0); - } - cf2 = cf1; - cf1 = cf; - } - if (y0 <= 1.0) cs0 = cbs+cf; - else cs0 = (cbs+cf)/cos(z); - for (k=0;k<=nm;k++) { - cj[k] /= cs0; - } - ce = log(0.5*z)+el; - cy[0] = M_2_PI*(ce*cj[0]-4.0*csu/cs0); - cy[1] = M_2_PI*(-cj[0]/z+(ce-1.0)*cj[1]-4.0*csv/cs0); - } - else { - ct1 = z-M_PI_4; - cp0 = cone; - for (k=0;k<4;k++) { - cp0 += a[k]*pow(z,-2.0*k-2.0); - } - cq0 = -0.125/z; - for (k=0;k<4;k++) { - cq0 += b[k] *pow(z,-2.0*k-3.0); - } - cu = sqrt(M_2_PI/z); - cbj0 = cu*(cp0*cos(ct1)-cq0*sin(ct1)); - cby0 = cu*(cp0*sin(ct1)+cq0*cos(ct1)); - cj[0] = cbj0; - cy[0] = cby0; - ct2 = z-0.75*M_PI; - cp1 = cone; - for (k=0;k<4;k++) { - cp1 += a1[k]*pow(z,-2.0*k-2.0); - } - cq1 = 0.375/z; - for (k=0;k<4;k++) { - cq1 += b1[k]*pow(z,-2.0*k-3.0); - } - cbj1 = cu*(cp1*cos(ct2)-cq1*sin(ct2)); - cby1 = cu*(cp1*sin(ct2)+cq1*cos(ct2)); - cj[1] = cbj1; - cy[1] = cby1; - for (k=2;k<=n;k++) { - cbjk = 2.0*(k-1.0)*cbj1/z-cbj0; - cj[k] = cbjk; - cbj0 = cbj1; - cbj1 = cbjk; - } - } - cjp[0] = -cj[1]; - for (k=1;k<=nm;k++) { - cjp[k] = cj[k-1]-(double)k*cj[k]/z; - } - if (abs(cj[0]) > 1.0) - cy[1] = (cj[1]*cy[0]-2.0/(M_PI*z))/cj[0]; - for (k=2;k<=nm;k++) { - if (abs(cj[k-1]) >= abs(cj[k-2])) - cyy = (cj[k]*cy[k-1]-2.0/(M_PI*z))/cj[k-1]; - else - cyy = (cj[k]*cy[k-2]-4.0*(k-1.0)/(M_PI*z*z))/cj[k-2]; - cy[k] = cyy; - } - cyp[0] = -cy[1]; - for (k=1;k<=nm;k++) { - cyp[k] = cy[k-1]-(double)k*cy[k]/z; - } - - return 0; -} - -int cbessjyva(double v,complex z,double &vm,complex*cjv, - complex*cyv,complex*cjvp,complex*cyvp) -{ - complex z1,z2,zk,cjvl,cr,ca,cjv0,cjv1,cpz,crp; - complex cqz,crq,ca0,cck,csk,cyv0,cyv1,cju0,cju1,cb; - complex cs,cs0,cr0,cs1,cr1,cec,cf,cf0,cf1,cf2; - complex cfac0,cfac1,cg0,cg1,cyk,cp11,cp12,cp21,cp22; - complex ch0,ch1,ch2,cyl1,cyl2,cylk; - - double a0,v0,pv0,pv1,vl,ga,gb,vg,vv,w0,w1,ya0,yak,ya1,wa; - int j,n,k,kz,l,lb,lb0,m; - - a0 = abs(z); - z1 = z; - z2 = z*z; - n = (int)v; - - - v0 = v-n; - - pv0 = M_PI*v0; - pv1 = M_PI*(1.0+v0); - if (a0 < 1.0e-100) { - for (k=0;k<=n;k++) { - cjv[k] = czero; - cyv[k] = complex (-1e308,0); - cjvp[k] = czero; - cyvp[k] = complex (1e308,0); - - } - if (v0 == 0.0) { - cjv[0] = cone; - cjvp[1] = complex (0.5,0.0); - } - else { - cjvp[0] = complex (1e308,0); - } - vm = v; - return 0; - } - if (real(z1) < 0.0) z1 = -z; - if (a0 <= 12.0) { - for (l=0;l<2;l++) { - vl = v0+l; - cjvl = cone; - cr = cone; - for (k=1;k<=40;k++) { - cr *= -0.25*z2/(k*(k+vl)); - cjvl += cr; - if (abs(cr) < abs(cjvl)*eps) break; - } - vg = 1.0 + vl; - ga = gamma(vg); - ca = pow(0.5*z1,vl)/ga; - if (l == 0) cjv0 = cjvl*ca; - else cjv1 = cjvl*ca; - } - } - else { - if (a0 >= 50.0) kz = 8; - else if (a0 >= 35.0) kz = 10; - else kz = 11; - for (j=0;j<2;j++) { - vv = 4.0*(j+v0)*(j+v0); - cpz = cone; - crp = cone; - for (k=1;k<=kz;k++) { - crp = -0.78125e-2*crp*(vv-pow(4.0*k-3.0,2.0))* - (vv-pow(4.0*k-1.0,2.0))/(k*(2.0*k-1.0)*z2); - cpz += crp; - } - cqz = cone; - crq = cone; - for (k=1;k<=kz;k++) { - crq = -0.78125e-2*crq*(vv-pow(4.0*k-1.0,2.0))* - (vv-pow(4.0*k+1.0,2.0))/(k*(2.0*k+1.0)*z2); - cqz += crq; - } - cqz *= 0.125*(vv-1.0)/z1; - zk = z1-(0.5*(j+v0)+0.25)*M_PI; - ca0 = sqrt(M_2_PI/z1); - cck = cos(zk); - csk = sin(zk); - if (j == 0) { - cjv0 = ca0*(cpz*cck-cqz*csk); - cyv0 = ca0*(cpz*csk+cqz+cck); - } - else { - cjv1 = ca0*(cpz*cck-cqz*csk); - cyv1 = ca0*(cpz*csk+cqz*cck); - } - } - } - if (a0 <= 12.0) { - if (v0 != 0.0) { - for (l=0;l<2;l++) { - vl = v0+l; - cjvl = cone; - cr = cone; - for (k=1;k<=40;k++) { - cr *= -0.25*z2/(k*(k-vl)); - cjvl += cr; - if (abs(cr) < abs(cjvl)*eps) break; - } - vg = 1.0-vl; - gb = gamma(vg); - cb = pow(2.0/z1,vl)/gb; - if (l == 0) cju0 = cjvl*cb; - else cju1 = cjvl*cb; - } - cyv0 = (cjv0*cos(pv0)-cju0)/sin(pv0); - cyv1 = (cjv1*cos(pv1)-cju1)/sin(pv1); - } - else { - cec = log(0.5*z1)+el; - cs0 = czero; - w0 = 0.0; - cr0 = cone; - for (k=1;k<=30;k++) { - w0 += 1.0/k; - cr0 *= -0.25*z2/(double)(k*k); - cs0 += cr0*w0; - } - cyv0 = M_2_PI*(cec*cjv0-cs0); - cs1 = cone; - w1 = 0.0; - cr1 = cone; - for (k=1;k<=30;k++) { - w1 += 1.0/k; - cr1 *= -0.25*z2/(k*(k+1.0)); - cs1 += cr1*(2.0*w1+1.0/(k+1.0)); - } - cyv1 = M_2_PI*(cec*cjv1-1.0/z1-0.25*z1*cs1); - } - } - if (real(z) < 0.0) { - cfac0 = exp(pv0*cii); - cfac1 = exp(pv1*cii); - if (imag(z) < 0.0) { - cyv0 = cfac0*cyv0-2.0*cii*cos(pv0)*cjv0; - cyv1 = cfac1*cyv1-2.0*cii*cos(pv1)*cjv1; - cjv0 /= cfac0; - cjv1 /= cfac1; - } - else if (imag(z) > 0.0) { - cyv0 = cyv0/cfac0+2.0*cii*cos(pv0)*cjv0; - cyv1 = cyv1/cfac1+2.0*cii*cos(pv1)*cjv1; - cjv0 *= cfac0; - cjv1 *= cfac1; - } - } - cjv[0] = cjv0; - cjv[1] = cjv1; - if ((n >= 2) && (n <= (int)(0.25*a0))) { - cf0 = cjv0; - cf1 = cjv1; - for (k=2;k<= n;k++) { - cf = 2.0*(k+v0-1.0)*cf1/z-cf0; - cjv[k] = cf; - cf0 = cf1; - cf1 = cf; - } - } - else if (n >= 2) { - m = msta1(a0,200); - if (m < n) n = m; - else m = msta2(a0,n,15); - cf2 = czero; - cf1 = complex(1.0e-100,0.0); - for (k=m;k>=0;k--) { - cf = 2.0*(v0+k+1.0)*cf1/z-cf2; - if (k <= n) cjv[k] = cf; - cf2 = cf1; - cf1 = cf; - } - if (abs(cjv0) > abs(cjv1)) cs = cjv0/cf; - else cs = cjv1/cf2; - for (k=0;k<=n;k++) { - cjv[k] *= cs; - } - } - cjvp[0] = v0*cjv[0]/z-cjv[1]; - for (k=1;k<=n;k++) { - cjvp[k] = -(k+v0)*cjv[k]/z+cjv[k-1]; - } - cyv[0] = cyv0; - cyv[1] = cyv1; - ya0 = abs(cyv0); - lb = 0; - cg0 = cyv0; - cg1 = cyv1; - for (k=2;k<=n;k++) { - cyk = 2.0*(v0+k-1.0)*cg1/z-cg0; - yak = abs(cyk); - ya1 = abs(cg0); - if ((yak < ya0) && (yak< ya1)) lb = k; - cyv[k] = cyk; - cg0 = cg1; - cg1 = cyk; - } - lb0 = 0; - if ((lb > 4) && (imag(z) != 0.0)) { - while(lb != lb0) { - ch2 = cone; - ch1 = czero; - lb0 = lb; - for (k=lb;k>=1;k--) { - ch0 = 2.0*(k+v0)*ch1/z-ch2; - ch2 = ch1; - ch1 = ch0; - } - cp12 = ch0; - cp22 = ch2; - ch2 = czero; - ch1 = cone; - for (k=lb;k>=1;k--) { - ch0 = 2.0*(k+v0)*ch1/z-ch2; - ch2 = ch1; - ch1 = ch0; - } - cp11 = ch0; - cp21 = ch2; - if (lb == n) - cjv[lb+1] = 2.0*(lb+v0)*cjv[lb]/z-cjv[lb-1]; - if (abs(cjv[0]) > abs(cjv[1])) { - cyv[lb+1] = (cjv[lb+1]*cyv0-2.0*cp11/(M_PI*z))/cjv[0]; - cyv[lb] = (cjv[lb]*cyv0+2.0*cp12/(M_PI*z))/cjv[0]; - } - else { - cyv[lb+1] = (cjv[lb+1]*cyv1-2.0*cp21/(M_PI*z))/cjv[1]; - cyv[lb] = (cjv[lb]*cyv1+2.0*cp22/(M_PI*z))/cjv[1]; - } - cyl2 = cyv[lb+1]; - cyl1 = cyv[lb]; - for (k=lb-1;k>=0;k--) { - cylk = 2.0*(k+v0+1.0)*cyl1/z-cyl2; - cyv[k] = cylk; - cyl2 = cyl1; - cyl1 = cylk; - } - cyl1 = cyv[lb]; - cyl2 = cyv[lb+1]; - for (k=lb+1;k -#define PI 3.14159 - -double CalculateError(double* E) -{ - //Calculate the error between the Reference Spectrum and the Simulated Spectrum - double sumE = 0.0; - int nVals = RefSpectrum[currentSpec].size(); - double nu; - for(int i=0; i minMSE && j < maxFitIter) - { - //simulate a spectrum based on the current IR - SimulateSpectrum(); - - //calculate the error term - sumE = CalculateError(E); - - //estimate the new absorbance - EstimateK(E); - - //use Kramers-Kronig to compute n - - for(unsigned int i=0; i +#define PI 3.14159 + +double CalculateError(double* E) +{ + //Calculate the error between the Reference Spectrum and the Simulated Spectrum + double sumE = 0.0; + int nVals = RefSpectrum[currentSpec].size(); + double nu; + for(int i=0; i minMSE && j < maxFitIter) + { + //simulate a spectrum based on the current IR + SimulateSpectrum(); + + //calculate the error term + sumE = CalculateError(E); + + //estimate the new absorbance + EstimateK(E); + + //use Kramers-Kronig to compute n + + for(unsigned int i=0; i -#include -#include -using namespace std; - -vector LoadSpectrum(string filename) -{ - //load a spectrum from a file and resample to 2wn intervals - - //create the spectrum - vector S; - - //open the file - ifstream inFile(filename.c_str()); - - - SpecPair temp; - while(!inFile.eof()){ - inFile>>temp.nu; - inFile>>temp.A; - S.push_back(temp); - } - - //compute the minimum and maximum input wavenumbers - double inMin = S.front().nu; - double inMax = S.back().nu; - - int nuMin = (int)ceil(inMin); - int nuMax = (int)floor(inMax); - - //make sure both are either even or odd - if(nuMin % 2 != nuMax % 2) - nuMax--; - - //compute the number of values in the resampled spectrum - int nVals = (nuMax - nuMin)/2 + 1; - - //allocate space for the spectrum - vector outSpec; - - double nu, highVal, lowVal, a; - int j=1; - for(int i=0; i inMax) - temp.A = 0.0; - else - { - //move to the correct position in the input array - while(j < (int)S.size()-1 && S[j].nu <= nu) - j++; - - lowVal = S[j-1].nu; - highVal = S[j].nu; - a = (nu - lowVal)/(highVal - lowVal); - temp.A = S[j-1].A * (1.0 - a) + S[j].A * a; - } - outSpec.push_back(temp); - } - - - - return outSpec; -} - -vector SetReferenceSpectrum(char* text) -{ - stringstream inString(text); - - //create the spectrum - vector S; - - SpecPair temp; - while(!inString.eof()){ - inString>>temp.nu; - inString>>temp.A; - S.push_back(temp); - } - - return S; -} - -void SaveK(string fileName) -{ - ofstream outFile(fileName.c_str()); - for(unsigned int i=0; i>nuMin; - inFile>>nuMax; - inFile>>aMin; - inFile>>aMax; - inFile>>dNu; - - //material parameters - inFile>>radius; - inFile>>baseIR; - inFile>>cA; - - //optical parameters - inFile>>cNAi; - inFile>>cNAo; - inFile>>oNAi; - inFile>>oNAo; - - inFile.close(); - -} - -void SetDefaults() -{ - - nuMin = 800; - nuMax = 4000; - dNu = 2; - - aMin = 0; - aMax = 1; - - - //material parameters - radius = 4.0f; - baseIR = 1.49f; - cA = 1.0; - vector KMaterial; - vector NMaterial; - - //optical parameters - cNAi = 0.0; - cNAo = 0.6; - oNAi = 0.0; - oNAo = 0.6; +#include "globals.h" +#include +#include +#include +using namespace std; + +vector LoadSpectrum(string filename) +{ + //load a spectrum from a file and resample to 2wn intervals + + //create the spectrum + vector S; + + //open the file + ifstream inFile(filename.c_str()); + + + SpecPair temp; + while(!inFile.eof()){ + inFile>>temp.nu; + inFile>>temp.A; + S.push_back(temp); + } + + //compute the minimum and maximum input wavenumbers + double inMin = S.front().nu; + double inMax = S.back().nu; + + int nuMin = (int)ceil(inMin); + int nuMax = (int)floor(inMax); + + //make sure both are either even or odd + if(nuMin % 2 != nuMax % 2) + nuMax--; + + //compute the number of values in the resampled spectrum + int nVals = (nuMax - nuMin)/2 + 1; + + //allocate space for the spectrum + vector outSpec; + + double nu, highVal, lowVal, a; + int j=1; + for(int i=0; i inMax) + temp.A = 0.0; + else + { + //move to the correct position in the input array + while(j < (int)S.size()-1 && S[j].nu <= nu) + j++; + + lowVal = S[j-1].nu; + highVal = S[j].nu; + a = (nu - lowVal)/(highVal - lowVal); + temp.A = S[j-1].A * (1.0 - a) + S[j].A * a; + } + outSpec.push_back(temp); + } + + + + return outSpec; +} + +vector SetReferenceSpectrum(char* text) +{ + stringstream inString(text); + + //create the spectrum + vector S; + + SpecPair temp; + while(!inString.eof()){ + inString>>temp.nu; + inString>>temp.A; + S.push_back(temp); + } + + return S; +} + +void SaveK(string fileName) +{ + ofstream outFile(fileName.c_str()); + for(unsigned int i=0; i>nuMin; + inFile>>nuMax; + inFile>>aMin; + inFile>>aMax; + inFile>>dNu; + + //material parameters + inFile>>radius; + inFile>>baseIR; + inFile>>cA; + + //optical parameters + inFile>>cNAi; + inFile>>cNAo; + inFile>>oNAi; + inFile>>oNAo; + + inFile.close(); + +} + +void SetDefaults() +{ + + nuMin = 800; + nuMax = 4000; + dNu = 2; + + aMin = 0; + aMax = 1; + + + //material parameters + radius = 4.0f; + baseIR = 1.49f; + cA = 1.0; + vector KMaterial; + vector NMaterial; + + //optical parameters + cNAi = 0.0; + cNAo = 0.6; + oNAi = 0.0; + oNAo = 0.6; } \ No newline at end of file diff --git a/FindCUDASDK.cmake b/FindCUDASDK.cmake index 02bd1a7..f3bee90 100644 --- a/FindCUDASDK.cmake +++ b/FindCUDASDK.cmake @@ -1,142 +1,142 @@ -# -# The script defines the following variables: -# -############################################################################## -# Note: Removed everything related to CUDA_SDK_ROOT_DIR and only left this as -# a possible environment variable to set the SDK directory. -# Include file will be: CUDA_CUT_INCLUDE_DIR -# Cutil library: CUDA_CUT_LIBRARY -############################################################################## -# -# -# CUDA_SDK_ROOT_DIR -- Path to the CUDA SDK. Use this to find files in the -# SDK. This script will not directly support finding -# specific libraries or headers, as that isn't -# supported by NVIDIA. If you want to change -# libraries when the path changes see the -# FindCUDA.cmake script for an example of how to clear -# these variables. There are also examples of how to -# use the CUDA_SDK_ROOT_DIR to locate headers or -# libraries, if you so choose (at your own risk). -# -# This code is licensed under the MIT License. See the FindCUDASDK.cmake script -# for the text of the license. - -# The MIT License -# -# License for the specific language governing rights and limitations under -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -# DEALINGS IN THE SOFTWARE. -# -############################################################################### - -# FindCUDASDK.cmake - -# # Check to see if the CUDA_SDK_ROOT_DIR has changed, -# # if it has then clear the cache variable, so that it will be detected again. -# if(NOT "${CUDA_SDK_ROOT_DIR}" STREQUAL "${CUDA_SDK_ROOT_DIR_INTERNAL}") -# # No specific variables to catch. Use this kind of code before calling -# # find_package(CUDA) to clean up any variables that may depend on this path. -# -# # unset(MY_SPECIAL_CUDA_SDK_INCLUDE_DIR CACHE) -# # unset(MY_SPECIAL_CUDA_SDK_LIBRARY CACHE) -# endif() -# -# ######################## -# # Look for the SDK stuff -# find_path(CUDA_SDK_ROOT_DIR cutil.h -# PATH_SUFFIXES "common/inc" "C/common/inc" -# "$ENV{NVSDKCUDA_ROOT}" -# "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]" -# "/Developer/GPU\ Computing/C" -# ) -# -# # fallback method for determining CUDA_SDK_ROOT_DIR in case the previous one failed! -# if (NOT CUDA_SDK_ROOT_DIR) -# find_path(CUDA_SDK_ROOT_DIR C/common/inc/cutil.h -# "$ENV{NVSDKCUDA_ROOT}" -# "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]" -# "/Developer/GPU\ Computing/C" -# ) -# endif() - -# Keep the CUDA_SDK_ROOT_DIR first in order to be able to override the -# environment variables. -set(CUDA_SDK_SEARCH_PATH - "${CUDA_SDK_ROOT_DIR}" - "${CUDA_TOOLKIT_ROOT_DIR}/local/NVSDK0.2" - "${CUDA_TOOLKIT_ROOT_DIR}/NVSDK0.2" - "${CUDA_TOOLKIT_ROOT_DIR}/NV_SDK" - "${CUDA_TOOLKIT_ROOT_DIR}/NV_CUDA_SDK" - "$ENV{HOME}/NVIDIA_CUDA_SDK" - "$ENV{HOME}/NVIDIA_CUDA_SDK_MACOSX" - "$ENV{HOME}/NVIDIA_GPU_Computing_SDK" - "/Developer/CUDA" - ) - -# Find include file from the CUDA_SDK_SEARCH_PATH - -find_path(CUDA_CUT_INCLUDE_DIR - cutil.h - PATHS ${CUDA_SDK_SEARCH_PATH} - PATH_SUFFIXES "common/inc" "C/common/inc" - DOC "Location of cutil.h" - NO_DEFAULT_PATH - ) -# Now search system paths -find_path(CUDA_CUT_INCLUDE_DIR cutil.h DOC "Location of cutil.h") - -# mark_as_advanced(CUDA_CUT_INCLUDE_DIR) - - -# Example of how to find a library in the CUDA_SDK_ROOT_DIR - -# cutil library is called cutil64 for 64 bit builds on windows. We don't want -# to get these confused, so we are setting the name based on the word size of -# the build. - -# New library might be called cutil_x86_64 ! - -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(cuda_cutil_name cutil64) -else(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(cuda_cutil_name cutil32) -endif(CMAKE_SIZEOF_VOID_P EQUAL 8) - -find_library(CUDA_CUT_LIBRARY - NAMES ${cuda_cutil_name} cutil cutil_x86_64 cutil_i386 - PATHS ${CUDA_SDK_SEARCH_PATH} - # The new version of the sdk shows up in common/lib, but the old one is in lib - # The very newest installation Path of the SDK is in subdirectory 'C'. Please add this Path to the possible suffixes. - PATH_SUFFIXES "C/lib" "common/lib" "lib" "C/common/lib" "common/lib" - DOC "Location of cutil library" - NO_DEFAULT_PATH - ) -# # Now search system paths -# find_library(CUDA_CUT_LIBRARY NAMES cutil ${cuda_cutil_name} DOC "Location of cutil library") -mark_as_advanced(CUDA_CUT_LIBRARY) -set(CUDA_CUT_LIBRARIES ${CUDA_CUT_LIBRARY}) - -############################# -# Check for required components -if(CUDA_CUT_INCLUDE_DIR) - set(CUDASDK_FOUND TRUE) -endif(CUDA_CUT_INCLUDE_DIR) - -# set(CUDA_SDK_ROOT_DIR_INTERNAL "${CUDA_SDK_ROOT_DIR}" CACHE INTERNAL -# "This is the value of the last time CUDA_SDK_ROOT_DIR was set successfully." FORCE) +# +# The script defines the following variables: +# +############################################################################## +# Note: Removed everything related to CUDA_SDK_ROOT_DIR and only left this as +# a possible environment variable to set the SDK directory. +# Include file will be: CUDA_CUT_INCLUDE_DIR +# Cutil library: CUDA_CUT_LIBRARY +############################################################################## +# +# +# CUDA_SDK_ROOT_DIR -- Path to the CUDA SDK. Use this to find files in the +# SDK. This script will not directly support finding +# specific libraries or headers, as that isn't +# supported by NVIDIA. If you want to change +# libraries when the path changes see the +# FindCUDA.cmake script for an example of how to clear +# these variables. There are also examples of how to +# use the CUDA_SDK_ROOT_DIR to locate headers or +# libraries, if you so choose (at your own risk). +# +# This code is licensed under the MIT License. See the FindCUDASDK.cmake script +# for the text of the license. + +# The MIT License +# +# License for the specific language governing rights and limitations under +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +# +############################################################################### + +# FindCUDASDK.cmake + +# # Check to see if the CUDA_SDK_ROOT_DIR has changed, +# # if it has then clear the cache variable, so that it will be detected again. +# if(NOT "${CUDA_SDK_ROOT_DIR}" STREQUAL "${CUDA_SDK_ROOT_DIR_INTERNAL}") +# # No specific variables to catch. Use this kind of code before calling +# # find_package(CUDA) to clean up any variables that may depend on this path. +# +# # unset(MY_SPECIAL_CUDA_SDK_INCLUDE_DIR CACHE) +# # unset(MY_SPECIAL_CUDA_SDK_LIBRARY CACHE) +# endif() +# +# ######################## +# # Look for the SDK stuff +# find_path(CUDA_SDK_ROOT_DIR cutil.h +# PATH_SUFFIXES "common/inc" "C/common/inc" +# "$ENV{NVSDKCUDA_ROOT}" +# "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]" +# "/Developer/GPU\ Computing/C" +# ) +# +# # fallback method for determining CUDA_SDK_ROOT_DIR in case the previous one failed! +# if (NOT CUDA_SDK_ROOT_DIR) +# find_path(CUDA_SDK_ROOT_DIR C/common/inc/cutil.h +# "$ENV{NVSDKCUDA_ROOT}" +# "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]" +# "/Developer/GPU\ Computing/C" +# ) +# endif() + +# Keep the CUDA_SDK_ROOT_DIR first in order to be able to override the +# environment variables. +set(CUDA_SDK_SEARCH_PATH + "${CUDA_SDK_ROOT_DIR}" + "${CUDA_TOOLKIT_ROOT_DIR}/local/NVSDK0.2" + "${CUDA_TOOLKIT_ROOT_DIR}/NVSDK0.2" + "${CUDA_TOOLKIT_ROOT_DIR}/NV_SDK" + "${CUDA_TOOLKIT_ROOT_DIR}/NV_CUDA_SDK" + "$ENV{HOME}/NVIDIA_CUDA_SDK" + "$ENV{HOME}/NVIDIA_CUDA_SDK_MACOSX" + "$ENV{HOME}/NVIDIA_GPU_Computing_SDK" + "/Developer/CUDA" + ) + +# Find include file from the CUDA_SDK_SEARCH_PATH + +find_path(CUDA_CUT_INCLUDE_DIR + cutil.h + PATHS ${CUDA_SDK_SEARCH_PATH} + PATH_SUFFIXES "common/inc" "C/common/inc" + DOC "Location of cutil.h" + NO_DEFAULT_PATH + ) +# Now search system paths +find_path(CUDA_CUT_INCLUDE_DIR cutil.h DOC "Location of cutil.h") + +# mark_as_advanced(CUDA_CUT_INCLUDE_DIR) + + +# Example of how to find a library in the CUDA_SDK_ROOT_DIR + +# cutil library is called cutil64 for 64 bit builds on windows. We don't want +# to get these confused, so we are setting the name based on the word size of +# the build. + +# New library might be called cutil_x86_64 ! + +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(cuda_cutil_name cutil64) +else(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(cuda_cutil_name cutil32) +endif(CMAKE_SIZEOF_VOID_P EQUAL 8) + +find_library(CUDA_CUT_LIBRARY + NAMES ${cuda_cutil_name} cutil cutil_x86_64 cutil_i386 + PATHS ${CUDA_SDK_SEARCH_PATH} + # The new version of the sdk shows up in common/lib, but the old one is in lib + # The very newest installation Path of the SDK is in subdirectory 'C'. Please add this Path to the possible suffixes. + PATH_SUFFIXES "C/lib" "common/lib" "lib" "C/common/lib" "common/lib" + DOC "Location of cutil library" + NO_DEFAULT_PATH + ) +# # Now search system paths +# find_library(CUDA_CUT_LIBRARY NAMES cutil ${cuda_cutil_name} DOC "Location of cutil library") +mark_as_advanced(CUDA_CUT_LIBRARY) +set(CUDA_CUT_LIBRARIES ${CUDA_CUT_LIBRARY}) + +############################# +# Check for required components +if(CUDA_CUT_INCLUDE_DIR) + set(CUDASDK_FOUND TRUE) +endif(CUDA_CUT_INCLUDE_DIR) + +# set(CUDA_SDK_ROOT_DIR_INTERNAL "${CUDA_SDK_ROOT_DIR}" CACHE INTERNAL +# "This is the value of the last time CUDA_SDK_ROOT_DIR was set successfully." FORCE) diff --git a/FindGLEW.cmake b/FindGLEW.cmake index c355fff..9fe32e8 100644 --- a/FindGLEW.cmake +++ b/FindGLEW.cmake @@ -1,51 +1,51 @@ -# -# Try to find GLEW library and include path. -# Once done this will define -# -# GLEW_FOUND -# GLEW_INCLUDE_PATH -# GLEW_LIBRARY -# - -IF (WIN32) - FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h - $ENV{PROGRAMFILES}/GLEW/include - ${PROJECT_SOURCE_DIR}/src/nvgl/glew/include - DOC "The directory where GL/glew.h resides") - FIND_LIBRARY( GLEW_LIBRARY - NAMES glew GLEW glew32 glew32s - PATHS - $ENV{PROGRAMFILES}/GLEW/lib - ${PROJECT_SOURCE_DIR}/src/nvgl/glew/bin - ${PROJECT_SOURCE_DIR}/src/nvgl/glew/lib - DOC "The GLEW library") -ELSE (WIN32) - FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h - /usr/include - /usr/local/include - /sw/include - /opt/local/include - DOC "The directory where GL/glew.h resides") - FIND_LIBRARY( GLEW_LIBRARY - NAMES GLEW glew - PATHS - /usr/lib64 - /usr/lib - /usr/local/lib64 - /usr/local/lib - /sw/lib - /opt/local/lib - DOC "The GLEW library") -ENDIF (WIN32) - -IF (GLEW_INCLUDE_PATH) - SET( GLEW_FOUND 1 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise") -ELSE (GLEW_INCLUDE_PATH) - SET( GLEW_FOUND 0 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise") -ENDIF (GLEW_INCLUDE_PATH) - -MARK_AS_ADVANCED( - GLEW_FOUND - GLEW_INCLUDE_PATH - GLEW_LIBRARY +# +# Try to find GLEW library and include path. +# Once done this will define +# +# GLEW_FOUND +# GLEW_INCLUDE_PATH +# GLEW_LIBRARY +# + +IF (WIN32) + FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h + $ENV{PROGRAMFILES}/GLEW/include + ${PROJECT_SOURCE_DIR}/src/nvgl/glew/include + DOC "The directory where GL/glew.h resides") + FIND_LIBRARY( GLEW_LIBRARY + NAMES glew GLEW glew32 glew32s + PATHS + $ENV{PROGRAMFILES}/GLEW/lib + ${PROJECT_SOURCE_DIR}/src/nvgl/glew/bin + ${PROJECT_SOURCE_DIR}/src/nvgl/glew/lib + DOC "The GLEW library") +ELSE (WIN32) + FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h + /usr/include + /usr/local/include + /sw/include + /opt/local/include + DOC "The directory where GL/glew.h resides") + FIND_LIBRARY( GLEW_LIBRARY + NAMES GLEW glew + PATHS + /usr/lib64 + /usr/lib + /usr/local/lib64 + /usr/local/lib + /sw/lib + /opt/local/lib + DOC "The GLEW library") +ENDIF (WIN32) + +IF (GLEW_INCLUDE_PATH) + SET( GLEW_FOUND 1 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise") +ELSE (GLEW_INCLUDE_PATH) + SET( GLEW_FOUND 0 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise") +ENDIF (GLEW_INCLUDE_PATH) + +MARK_AS_ADVANCED( + GLEW_FOUND + GLEW_INCLUDE_PATH + GLEW_LIBRARY ) \ No newline at end of file diff --git a/FindRTS.cmake b/FindRTS.cmake index f3ff1f4..fbfcc44 100644 --- a/FindRTS.cmake +++ b/FindRTS.cmake @@ -1,14 +1,14 @@ -# Tries to find the RTS include directory - - FIND_PATH( RTS_INCLUDE_DIR NAMES rts_glShaderProgram.h - PATHS - ${CMAKE_CURRENT_SOURCE_DIR}/rts - ${RTS_ROOT_PATH} -) - -IF (RTS_FOUND) - #The following deprecated settings are for backwards compatibility with CMake1.4 - SET (RTS_INCLUDE_PATH ${RTS_INCLUDE_DIR}) -ENDIF(RTS_FOUND) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS(RTS REQUIRED_VARS TRUE RTS_INCLUDE_DIR) +# Tries to find the RTS include directory + + FIND_PATH( RTS_INCLUDE_DIR NAMES rts_glShaderProgram.h + PATHS + ${CMAKE_CURRENT_SOURCE_DIR}/rts + ${RTS_ROOT_PATH} +) + +IF (RTS_FOUND) + #The following deprecated settings are for backwards compatibility with CMake1.4 + SET (RTS_INCLUDE_PATH ${RTS_INCLUDE_DIR}) +ENDIF(RTS_FOUND) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(RTS REQUIRED_VARS TRUE RTS_INCLUDE_DIR) diff --git a/GAMMA.cpp b/GAMMA.cpp index ec461f7..150eb9c 100644 --- a/GAMMA.cpp +++ b/GAMMA.cpp @@ -1,82 +1,82 @@ -// gamma.cpp -- computation of gamma function. -// Algorithms and coefficient values from "Computation of Special -// Functions", Zhang and Jin, John Wiley and Sons, 1996. -// -// (C) 2003, C. Bond. All rights reserved. -// -// Returns gamma function of argument 'x'. -// -// NOTE: Returns 1e308 if argument is a negative integer or 0, -// or if argument exceeds 171. -// -#define _USE_MATH_DEFINES -#include -double gamma(double x) -{ - int i,k,m; - double ga,gr,r,z; - - static double g[] = { - 1.0, - 0.5772156649015329, - -0.6558780715202538, - -0.420026350340952e-1, - 0.1665386113822915, - -0.421977345555443e-1, - -0.9621971527877e-2, - 0.7218943246663e-2, - -0.11651675918591e-2, - -0.2152416741149e-3, - 0.1280502823882e-3, - -0.201348547807e-4, - -0.12504934821e-5, - 0.1133027232e-5, - -0.2056338417e-6, - 0.6116095e-8, - 0.50020075e-8, - -0.11812746e-8, - 0.1043427e-9, - 0.77823e-11, - -0.36968e-11, - 0.51e-12, - -0.206e-13, - -0.54e-14, - 0.14e-14}; - - if (x > 171.0) return 1e308; // This value is an overflow flag. - if (x == (int)x) { - if (x > 0.0) { - ga = 1.0; // use factorial - for (i=2;i 1.0) { - z = fabs(x); - m = (int)z; - r = 1.0; - for (k=1;k<=m;k++) { - r *= (z-k); - } - z -= m; - } - else - z = x; - gr = g[24]; - for (k=23;k>=0;k--) { - gr = gr*z+g[k]; - } - ga = 1.0/(gr*z); - if (fabs(x) > 1.0) { - ga *= r; - if (x < 0.0) { - ga = -M_PI/(x*ga*sin(M_PI*x)); - } - } - } - return ga; -} +// gamma.cpp -- computation of gamma function. +// Algorithms and coefficient values from "Computation of Special +// Functions", Zhang and Jin, John Wiley and Sons, 1996. +// +// (C) 2003, C. Bond. All rights reserved. +// +// Returns gamma function of argument 'x'. +// +// NOTE: Returns 1e308 if argument is a negative integer or 0, +// or if argument exceeds 171. +// +#define _USE_MATH_DEFINES +#include +double gamma(double x) +{ + int i,k,m; + double ga,gr,r,z; + + static double g[] = { + 1.0, + 0.5772156649015329, + -0.6558780715202538, + -0.420026350340952e-1, + 0.1665386113822915, + -0.421977345555443e-1, + -0.9621971527877e-2, + 0.7218943246663e-2, + -0.11651675918591e-2, + -0.2152416741149e-3, + 0.1280502823882e-3, + -0.201348547807e-4, + -0.12504934821e-5, + 0.1133027232e-5, + -0.2056338417e-6, + 0.6116095e-8, + 0.50020075e-8, + -0.11812746e-8, + 0.1043427e-9, + 0.77823e-11, + -0.36968e-11, + 0.51e-12, + -0.206e-13, + -0.54e-14, + 0.14e-14}; + + if (x > 171.0) return 1e308; // This value is an overflow flag. + if (x == (int)x) { + if (x > 0.0) { + ga = 1.0; // use factorial + for (i=2;i 1.0) { + z = fabs(x); + m = (int)z; + r = 1.0; + for (k=1;k<=m;k++) { + r *= (z-k); + } + z -= m; + } + else + z = x; + gr = g[24]; + for (k=23;k>=0;k--) { + gr = gr*z+g[k]; + } + ga = 1.0/(gr*z); + if (fabs(x) > 1.0) { + ga *= r; + if (x < 0.0) { + ga = -M_PI/(x*ga*sin(M_PI*x)); + } + } + } + return ga; +} diff --git a/PerformanceData.h b/PerformanceData.h index 2762511..9b5684e 100644 --- a/PerformanceData.h +++ b/PerformanceData.h @@ -1,138 +1,138 @@ -// add the following to a cpp file: -// PerformanceData PD; - - -#pragma once -#include -using namespace std; - -enum PerformanceDataType -{ - PD_DISPLAY=0, - PD_SPS, - PD_UNUSED0, - - //my stuff - SIMULATE_SPECTRUM, - SIMULATE_GPU, - KRAMERS_KRONIG, - - - - //end my stuff - PERFORMANCE_DATA_TYPE_COUNT -}; - -static char PDTypeNames[][255] = { - "Display ", - "Simulation Total ", - " ----------------- ", - //my stuff - "Simulate Spectrum ", - " GPU Portion ", - "Kramers-Kronig ", - - //end my stuff - -}; -#ifdef WIN32 -#include -#include -#include - -#include -#include - -//------------------------------------------------------------------------------- - -class PerformanceData -{ -public: - PerformanceData() { ClearAll(); QueryPerformanceFrequency(&cps); } - ~PerformanceData(){} - - void ClearAll() - { - for ( int i=0; i maxTime[type] ) maxTime[type] = t; - totalTime[type] -= times[type][ pos[type] ]; - times[type][ pos[type] ] = t; - totalTime[type] += t; - pos[type]++; - if ( pos[type] == 0 ) dataReady[type] = true; - } - - void PrintResult( ostream &os,int i=PERFORMANCE_DATA_TYPE_COUNT) - { - os.setf(ios::fixed); - if ((i=0)){ - double a = GetAvrgTime(i); - if ( a ) - os<< PDTypeNames[i]<<" : avrg="< +using namespace std; + +enum PerformanceDataType +{ + PD_DISPLAY=0, + PD_SPS, + PD_UNUSED0, + + //my stuff + SIMULATE_SPECTRUM, + SIMULATE_GPU, + KRAMERS_KRONIG, + + + + //end my stuff + PERFORMANCE_DATA_TYPE_COUNT +}; + +static char PDTypeNames[][255] = { + "Display ", + "Simulation Total ", + " ----------------- ", + //my stuff + "Simulate Spectrum ", + " GPU Portion ", + "Kramers-Kronig ", + + //end my stuff + +}; +#ifdef WIN32 +#include +#include +#include + +#include +#include + +//------------------------------------------------------------------------------- + +class PerformanceData +{ +public: + PerformanceData() { ClearAll(); QueryPerformanceFrequency(&cps); } + ~PerformanceData(){} + + void ClearAll() + { + for ( int i=0; i maxTime[type] ) maxTime[type] = t; + totalTime[type] -= times[type][ pos[type] ]; + times[type][ pos[type] ] = t; + totalTime[type] += t; + pos[type]++; + if ( pos[type] == 0 ) dataReady[type] = true; + } + + void PrintResult( ostream &os,int i=PERFORMANCE_DATA_TYPE_COUNT) + { + os.setf(ios::fixed); + if ((i=0)){ + double a = GetAvrgTime(i); + if ( a ) + os<< PDTypeNames[i]<<" : avrg="< -#include -#include -#include -#include "globals.h" -#include -//#include "cufft.h" -using namespace std; - -#define pi 3.14159 - -typedef complex scComplex; - -extern int cbessjyva(double v,complex z,double &vm,complex*cjv, - complex*cyv,complex*cjvp,complex*cyvp); -extern int bessjyv(double v,double x,double &vm,double *jv,double *yv, - double *djv,double *dyv); - -complex Jl_neg(complex x) -{ - //this function computes the bessel function of the first kind Jl(x) for l = -0.5 - return ( sqrt(2.0/pi) * cos(x) )/sqrt(x); -} - -double Jl_neg(double x) -{ - //this function computes the bessel function of the first kind Jl(x) for l = -0.5 - return ( sqrt(2.0/pi) * cos(x) )/sqrt(x); -} - -double Yl_neg(double x) -{ - //this function computes the bessel function of the second kind Yl(x) for l = -0.5; - return ( sqrt(2.0/pi) * sin(x) )/sqrt(x); -} - -void computeB(complex* B, double radius, complex refIndex, double lambda, int Nl) -{ - double k = (2*pi)/lambda; - int b = 2; - - //allocate space for the real bessel functions - double* jv = (double*)malloc(sizeof(double)*(Nl+b)); - double* yv = (double*)malloc(sizeof(double)*(Nl+b)); - double* jvp = (double*)malloc(sizeof(double)*(Nl+b)); - double* yvp = (double*)malloc(sizeof(double)*(Nl+b)); - - //allocate space for the complex bessel functions - complex* cjv = (complex*)malloc(sizeof(complex)*(Nl+b)); - complex* cyv = (complex*)malloc(sizeof(complex)*(Nl+b)); - complex* cjvp = (complex*)malloc(sizeof(complex)*(Nl+b)); - complex* cyvp = (complex*)malloc(sizeof(complex)*(Nl+b)); - - double kr = k*radius; - complex knr = k*refIndex*(double)radius; - complex n = refIndex; - - //compute the bessel functions for k*r - double vm;// = Nl - 1; - bessjyv((Nl)+0.5, kr, vm, jv, yv, jvp, yvp); - //cout<<"Nl: "< scale_knr = sqrt(pi/(2.0*knr)); - - complex numer, denom; - double j_kr; - double y_kr; - complex j_knr; - complex j_d_knr; - double j_d_kr; - complex h_kr; - complex h_d_kr; - complex h_neg; - complex h_pos; - - //cout<<"B coefficients:"<(j_kr, y_kr); - - //compute the derivatives - if(l == 0) - { - //spherical bessel functions for l=0 - j_d_kr = scale_kr * (Jl_neg(kr) - (jv[l] + kr*jv[l+1])/kr )/2.0; - j_d_knr = scale_knr * ( Jl_neg(knr) - (cjv[l] + knr*cjv[l+1])/knr )/2.0; - h_neg = complex(scale_kr*Jl_neg(kr), scale_kr*Yl_neg(kr)); - h_pos = complex(scale_kr*jv[l+1], scale_kr*yv[l+1]); - h_d_kr = (h_neg - (h_kr + kr*h_pos)/kr)/2.0; - } - else - { - //spherical bessel functions - j_d_kr = scale_kr * (jv[l-1] - (jv[l] + kr*jv[l+1])/kr )/2.0; - j_d_knr = scale_knr * ( cjv[l-1] - (cjv[l] + knr*cjv[l+1])/knr )/2.0; - h_neg = complex(scale_kr*jv[l-1], scale_kr*yv[l-1]); - h_pos = complex(scale_kr*jv[l+1], scale_kr*yv[l+1]); - h_d_kr = (h_neg - (h_kr + kr*h_pos)/kr)/2.0; - } - - numer = j_kr*j_d_knr*n - j_knr*j_d_kr; - denom = j_knr*h_d_kr - h_kr*j_d_knr*n; - B[l] = numer/denom; - - //B[l] = scComplex(temp.real(), temp.imag()); - //cout< integrateUi(double cAngleI, double cAngleO, double oAngleI, double oAngleO, double M = 2*pi) -{ - /*This function integrates the incident field of magnitude M in the far zone - in order to evaluate the field at the central pixel of a detector. - cNAi = condenser inner angle - cNAo = condenser outer angle - oNAi = objective inner angle - oNAo = objective outer angle - M = field magnitude*/ - - double alphaIn = max(cAngleI, oAngleI); - double alphaOut = min(cAngleO,oAngleO); - - complex Ui; - if(alphaIn > alphaOut) - Ui = complex(0.0, 0.0); - else - Ui = complex(M * 2 * pi * (cos(alphaIn) - cos(alphaOut)), 0.0f); - - return Ui; - -} - -void computeCondenserAlpha(double* alpha, int Nl, double cAngleI, double cAngleO) -{ - /*This function computes the condenser integral in order to build the field of incident light - alpha = list of Nl floating point values representing the condenser alpha as a function of l - Nl = number of orders in the incident field - cAngleI, cAngleO = inner and outer condenser angles (inner and outer NA)*/ - - //compute the Legendre polynomials for the condenser aperature - double* PcNAo = (double*)malloc(sizeof(double)*(Nl+1)); - Legendre(PcNAo, cos(cAngleO), Nl+1); - double* PcNAi = (double*)malloc(sizeof(double)*(Nl+1)); - Legendre(PcNAi, cos(cAngleI), Nl+1); - - for(int l=0; l integrateUs(double r, double lambda, complex eta, - double cAngleI, double cAngleO, double oAngleI, double oAngleO, double M = 2*pi) -{ - /*This function integrates the incident field of magnitude M in the far zone - in order to evaluate the field at the central pixel of a detector. - r = sphere radius - lambda = wavelength - eta = index of refraction - cNAi = condenser inner NA - cNAo = condenser outer NA - oNAi = objective inner NA - oNAo = objective outer NA - M = field magnitude*/ - - //compute the required number of orders - double k = 2*pi/lambda; - int Nl = (int)ceil( k + 4 * exp(log(k*r)/3) + 3 ); - - //compute the material coefficients B - complex* B = (complex*)malloc(sizeof(complex)*Nl); - //compute the Legendre polynomials for the condenser and objective aperatures - double* PcNAo = (double*)malloc(sizeof(double)*(Nl+1)); - Legendre(PcNAo, cos(cAngleO), Nl+1); - double* PcNAi = (double*)malloc(sizeof(double)*(Nl+1)); - Legendre(PcNAi, cos(cAngleI), Nl+1); - - double* PoNAo = (double*)malloc(sizeof(double)*(Nl+1)); - Legendre(PoNAo, cos(oAngleO), Nl+1); - double* PoNAi = (double*)malloc(sizeof(double)*(Nl+1)); - Legendre(PoNAi, cos(oAngleI), Nl+1); - - //store the index of refraction; - complex IR(eta.real(), eta.imag()); - - //compute the scattering coefficients - computeB(B, r, IR, lambda, Nl); - - //aperature terms for the condenser (alpha) and objective (beta) - double alpha; - double beta; - double c; - complex Us(0.0, 0.0); - - for(int l=0; l Ui = integrateUi(cAngleI, cAngleO, oAngleI, oAngleO, 2*pi); - double I0 = Ui.real() * Ui.real() + Ui.imag() * Ui.imag(); - I0 *= scaleI0; - - - - //double I; - SpecPair temp; - double nu; - complex eta; - complex Us, U; - - double vecLen = 0.0; - for(unsigned int i=0; i(EtaN[i].A, EtaK[i].A); - else - eta = complex(baseIR, 0.0); - - - //integrate the scattered field at the detector position - Us = integrateUs(radius, lambda, eta, cAngleI, cAngleO, oAngleI, oAngleO, 2*pi); - U = Us + Ui; - double I = U.real() * U.real() + U.imag() * U.imag(); - - temp.nu = nu; - - //set the spectrum value based on the current display type - if(dispSimType == AbsorbanceSpecType) - temp.A = -log10(I/I0); - else - temp.A = I; - - if(dispNormalize) - vecLen += temp.A * temp.A; - - SimSpectrum.push_back(temp); - } - vecLen = sqrt(vecLen); - - if(dispNormalize) - for(unsigned int i=0; i* B, int Nl, int nLambda) -{ - double nu; - complex eta; - double* Lambda = (double*)malloc(sizeof(double) * nLambda); - - //for each wavenumber nu - for(unsigned int i=0; i(EtaN[i].A, EtaK[i].A); - else - eta = complex(baseIR, 0.0); - - //allocate memory for the scattering coefficients - //complex* B = (complex*)malloc(sizeof(complex)*Nl); - - complex IR(eta.real(), eta.imag()); - computeB(&B[i * Nl], radius, IR, Lambda[i], Nl); - } -} - -void computeOpticalParameters(double& cAngleI, double& cAngleO, double& oAngleI, double& oAngleO, double& I0, double* alpha, int Nl) -{ - computeCassegrainAngles(cAngleI, cAngleO, oAngleI, oAngleO); - - //evaluate the incident field intensity - I0 = 0.0; - complex Ui; - - Ui = integrateUi(cAngleI, cAngleO, oAngleI, oAngleO, 2*pi); - I0 = Ui.real()*2*pi; - - //compute alpha (condenser integral) - computeCondenserAlpha(alpha, Nl, cAngleI, cAngleO); -} - -void gpuDetectorSpectrum(int numSamples) -{ - //integrate across the objective aperature and calculate the resulting intensity on a detector - PD.StartTimer(SIMULATE_SPECTRUM); - //clear the previous spectrum - SimSpectrum.clear(); - - //compute Nl (maximum order of the spectrum) - int Nl = computeNl(); - - double* alpha = (double*)malloc(sizeof(double)*(Nl + 1)); - double cAngleI, cAngleO, oAngleI, oAngleO, I0; - computeOpticalParameters(cAngleI, cAngleO, oAngleI, oAngleO, I0, alpha, Nl); - - //allocate space for a list of wavelengths - int nLambda = EtaK.size(); - - //allocate space for the 2D array (Nl x nu) of scattering coefficients - complex* B = (complex*)malloc(sizeof(complex) * Nl * nLambda); - computeBArray(B, Nl, nLambda); - - - //allocate temporary space for the spectrum - double* I = (double*)malloc(sizeof(double) * EtaK.size()); - - //compute the spectrum on the GPU - PD.StartTimer(SIMULATE_GPU); - cudaComputeSpectrum(I, (double*)B, alpha, Nl, nLambda, oAngleI, oAngleO, cAngleI, cAngleO, numSamples); - PD.EndTimer(SIMULATE_GPU); - - updateSpectrum(I, I0, nLambda); - - PD.EndTimer(SIMULATE_SPECTRUM); - -} - -void SimulateSpectrum() -{ - if(pointDetector) - pointSpectrum(); - else - gpuDetectorSpectrum(objectiveSamples); - //detectorSpectrum(objectiveSamples); -} - -double absorbanceDistortion(){ - - //compute the mean of the spectrum - double sumSim = 0.0; - for(unsigned int i=0; i* B = (complex*)malloc(sizeof(complex) * Nl * nLambda); - computeBArray(B, Nl, nLambda); - - - - double D; - double e = 0.001; - for(double i=0.0; i<=oNAo-step; i+=step) - { - - for(double o=oNAi+step; o<=1.0; o+=step) - { - - - //set the current optical parameters - cNAi = i; - cNAo = o; - - //compute the optical parameters - computeOpticalParameters(cAngleI, cAngleO, oAngleI, oAngleO, I0, alpha, Nl); - - //simulate the spectrum - cudaComputeSpectrum(I, (double*)B, alpha, Nl, nLambda, oAngleI, oAngleO, cAngleI, cAngleO, objectiveSamples); - updateSpectrum(I, I0, nLambda); - - if(dispSimType == AbsorbanceSpecType) - { - if(i + e >= o || i + e >= oNAo || oNAi + e >= o || oNAi + e >= oNAo) - D = 0.0; - else - D = absorbanceDistortion(); - } - else - { - if(i >= o || oNAi >= oNAo) - D=0; - else - D = intensityDistortion(); - } - outFile< +#include +#include +#include +#include "globals.h" +#include +//#include "cufft.h" +using namespace std; + +#define pi 3.14159 + +typedef complex scComplex; + +extern int cbessjyva(double v,complex z,double &vm,complex*cjv, + complex*cyv,complex*cjvp,complex*cyvp); +extern int bessjyv(double v,double x,double &vm,double *jv,double *yv, + double *djv,double *dyv); + +complex Jl_neg(complex x) +{ + //this function computes the bessel function of the first kind Jl(x) for l = -0.5 + return ( sqrt(2.0/pi) * cos(x) )/sqrt(x); +} + +double Jl_neg(double x) +{ + //this function computes the bessel function of the first kind Jl(x) for l = -0.5 + return ( sqrt(2.0/pi) * cos(x) )/sqrt(x); +} + +double Yl_neg(double x) +{ + //this function computes the bessel function of the second kind Yl(x) for l = -0.5; + return ( sqrt(2.0/pi) * sin(x) )/sqrt(x); +} + +void computeB(complex* B, double radius, complex refIndex, double lambda, int Nl) +{ + double k = (2*pi)/lambda; + int b = 2; + + //allocate space for the real bessel functions + double* jv = (double*)malloc(sizeof(double)*(Nl+b)); + double* yv = (double*)malloc(sizeof(double)*(Nl+b)); + double* jvp = (double*)malloc(sizeof(double)*(Nl+b)); + double* yvp = (double*)malloc(sizeof(double)*(Nl+b)); + + //allocate space for the complex bessel functions + complex* cjv = (complex*)malloc(sizeof(complex)*(Nl+b)); + complex* cyv = (complex*)malloc(sizeof(complex)*(Nl+b)); + complex* cjvp = (complex*)malloc(sizeof(complex)*(Nl+b)); + complex* cyvp = (complex*)malloc(sizeof(complex)*(Nl+b)); + + double kr = k*radius; + complex knr = k*refIndex*(double)radius; + complex n = refIndex; + + //compute the bessel functions for k*r + double vm;// = Nl - 1; + bessjyv((Nl)+0.5, kr, vm, jv, yv, jvp, yvp); + //cout<<"Nl: "< scale_knr = sqrt(pi/(2.0*knr)); + + complex numer, denom; + double j_kr; + double y_kr; + complex j_knr; + complex j_d_knr; + double j_d_kr; + complex h_kr; + complex h_d_kr; + complex h_neg; + complex h_pos; + + //cout<<"B coefficients:"<(j_kr, y_kr); + + //compute the derivatives + if(l == 0) + { + //spherical bessel functions for l=0 + j_d_kr = scale_kr * (Jl_neg(kr) - (jv[l] + kr*jv[l+1])/kr )/2.0; + j_d_knr = scale_knr * ( Jl_neg(knr) - (cjv[l] + knr*cjv[l+1])/knr )/2.0; + h_neg = complex(scale_kr*Jl_neg(kr), scale_kr*Yl_neg(kr)); + h_pos = complex(scale_kr*jv[l+1], scale_kr*yv[l+1]); + h_d_kr = (h_neg - (h_kr + kr*h_pos)/kr)/2.0; + } + else + { + //spherical bessel functions + j_d_kr = scale_kr * (jv[l-1] - (jv[l] + kr*jv[l+1])/kr )/2.0; + j_d_knr = scale_knr * ( cjv[l-1] - (cjv[l] + knr*cjv[l+1])/knr )/2.0; + h_neg = complex(scale_kr*jv[l-1], scale_kr*yv[l-1]); + h_pos = complex(scale_kr*jv[l+1], scale_kr*yv[l+1]); + h_d_kr = (h_neg - (h_kr + kr*h_pos)/kr)/2.0; + } + + numer = j_kr*j_d_knr*n - j_knr*j_d_kr; + denom = j_knr*h_d_kr - h_kr*j_d_knr*n; + B[l] = numer/denom; + + //B[l] = scComplex(temp.real(), temp.imag()); + //cout< integrateUi(double cAngleI, double cAngleO, double oAngleI, double oAngleO, double M = 2*pi) +{ + /*This function integrates the incident field of magnitude M in the far zone + in order to evaluate the field at the central pixel of a detector. + cNAi = condenser inner angle + cNAo = condenser outer angle + oNAi = objective inner angle + oNAo = objective outer angle + M = field magnitude*/ + + double alphaIn = max(cAngleI, oAngleI); + double alphaOut = min(cAngleO,oAngleO); + + complex Ui; + if(alphaIn > alphaOut) + Ui = complex(0.0, 0.0); + else + Ui = complex(M * 2 * pi * (cos(alphaIn) - cos(alphaOut)), 0.0f); + + return Ui; + +} + +void computeCondenserAlpha(double* alpha, int Nl, double cAngleI, double cAngleO) +{ + /*This function computes the condenser integral in order to build the field of incident light + alpha = list of Nl floating point values representing the condenser alpha as a function of l + Nl = number of orders in the incident field + cAngleI, cAngleO = inner and outer condenser angles (inner and outer NA)*/ + + //compute the Legendre polynomials for the condenser aperature + double* PcNAo = (double*)malloc(sizeof(double)*(Nl+1)); + Legendre(PcNAo, cos(cAngleO), Nl+1); + double* PcNAi = (double*)malloc(sizeof(double)*(Nl+1)); + Legendre(PcNAi, cos(cAngleI), Nl+1); + + for(int l=0; l integrateUs(double r, double lambda, complex eta, + double cAngleI, double cAngleO, double oAngleI, double oAngleO, double M = 2*pi) +{ + /*This function integrates the incident field of magnitude M in the far zone + in order to evaluate the field at the central pixel of a detector. + r = sphere radius + lambda = wavelength + eta = index of refraction + cNAi = condenser inner NA + cNAo = condenser outer NA + oNAi = objective inner NA + oNAo = objective outer NA + M = field magnitude*/ + + //compute the required number of orders + double k = 2*pi/lambda; + int Nl = (int)ceil( k + 4 * exp(log(k*r)/3) + 3 ); + + //compute the material coefficients B + complex* B = (complex*)malloc(sizeof(complex)*Nl); + //compute the Legendre polynomials for the condenser and objective aperatures + double* PcNAo = (double*)malloc(sizeof(double)*(Nl+1)); + Legendre(PcNAo, cos(cAngleO), Nl+1); + double* PcNAi = (double*)malloc(sizeof(double)*(Nl+1)); + Legendre(PcNAi, cos(cAngleI), Nl+1); + + double* PoNAo = (double*)malloc(sizeof(double)*(Nl+1)); + Legendre(PoNAo, cos(oAngleO), Nl+1); + double* PoNAi = (double*)malloc(sizeof(double)*(Nl+1)); + Legendre(PoNAi, cos(oAngleI), Nl+1); + + //store the index of refraction; + complex IR(eta.real(), eta.imag()); + + //compute the scattering coefficients + computeB(B, r, IR, lambda, Nl); + + //aperature terms for the condenser (alpha) and objective (beta) + double alpha; + double beta; + double c; + complex Us(0.0, 0.0); + + for(int l=0; l Ui = integrateUi(cAngleI, cAngleO, oAngleI, oAngleO, 2*pi); + double I0 = Ui.real() * Ui.real() + Ui.imag() * Ui.imag(); + I0 *= scaleI0; + + + + //double I; + SpecPair temp; + double nu; + complex eta; + complex Us, U; + + double vecLen = 0.0; + for(unsigned int i=0; i(EtaN[i].A, EtaK[i].A); + else + eta = complex(baseIR, 0.0); + + + //integrate the scattered field at the detector position + Us = integrateUs(radius, lambda, eta, cAngleI, cAngleO, oAngleI, oAngleO, 2*pi); + U = Us + Ui; + double I = U.real() * U.real() + U.imag() * U.imag(); + + temp.nu = nu; + + //set the spectrum value based on the current display type + if(dispSimType == AbsorbanceSpecType) + temp.A = -log10(I/I0); + else + temp.A = I; + + if(dispNormalize) + vecLen += temp.A * temp.A; + + SimSpectrum.push_back(temp); + } + vecLen = sqrt(vecLen); + + if(dispNormalize) + for(unsigned int i=0; i* B, int Nl, int nLambda) +{ + double nu; + complex eta; + double* Lambda = (double*)malloc(sizeof(double) * nLambda); + + //for each wavenumber nu + for(unsigned int i=0; i(EtaN[i].A, EtaK[i].A); + else + eta = complex(baseIR, 0.0); + + //allocate memory for the scattering coefficients + //complex* B = (complex*)malloc(sizeof(complex)*Nl); + + complex IR(eta.real(), eta.imag()); + computeB(&B[i * Nl], radius, IR, Lambda[i], Nl); + } +} + +void computeOpticalParameters(double& cAngleI, double& cAngleO, double& oAngleI, double& oAngleO, double& I0, double* alpha, int Nl) +{ + computeCassegrainAngles(cAngleI, cAngleO, oAngleI, oAngleO); + + //evaluate the incident field intensity + I0 = 0.0; + complex Ui; + + Ui = integrateUi(cAngleI, cAngleO, oAngleI, oAngleO, 2*pi); + I0 = Ui.real()*2*pi; + + //compute alpha (condenser integral) + computeCondenserAlpha(alpha, Nl, cAngleI, cAngleO); +} + +void gpuDetectorSpectrum(int numSamples) +{ + //integrate across the objective aperature and calculate the resulting intensity on a detector + PD.StartTimer(SIMULATE_SPECTRUM); + //clear the previous spectrum + SimSpectrum.clear(); + + //compute Nl (maximum order of the spectrum) + int Nl = computeNl(); + + double* alpha = (double*)malloc(sizeof(double)*(Nl + 1)); + double cAngleI, cAngleO, oAngleI, oAngleO, I0; + computeOpticalParameters(cAngleI, cAngleO, oAngleI, oAngleO, I0, alpha, Nl); + + //allocate space for a list of wavelengths + int nLambda = EtaK.size(); + + //allocate space for the 2D array (Nl x nu) of scattering coefficients + complex* B = (complex*)malloc(sizeof(complex) * Nl * nLambda); + computeBArray(B, Nl, nLambda); + + + //allocate temporary space for the spectrum + double* I = (double*)malloc(sizeof(double) * EtaK.size()); + + //compute the spectrum on the GPU + PD.StartTimer(SIMULATE_GPU); + cudaComputeSpectrum(I, (double*)B, alpha, Nl, nLambda, oAngleI, oAngleO, cAngleI, cAngleO, numSamples); + PD.EndTimer(SIMULATE_GPU); + + updateSpectrum(I, I0, nLambda); + + PD.EndTimer(SIMULATE_SPECTRUM); + +} + +void SimulateSpectrum() +{ + if(pointDetector) + pointSpectrum(); + else + gpuDetectorSpectrum(objectiveSamples); + //detectorSpectrum(objectiveSamples); +} + +double absorbanceDistortion(){ + + //compute the mean of the spectrum + double sumSim = 0.0; + for(unsigned int i=0; i* B = (complex*)malloc(sizeof(complex) * Nl * nLambda); + computeBArray(B, Nl, nLambda); + + + + double D; + double e = 0.001; + for(double i=0.0; i<=oNAo-step; i+=step) + { + + for(double o=oNAi+step; o<=1.0; o+=step) + { + + + //set the current optical parameters + cNAi = i; + cNAo = o; + + //compute the optical parameters + computeOpticalParameters(cAngleI, cAngleO, oAngleI, oAngleO, I0, alpha, Nl); + + //simulate the spectrum + cudaComputeSpectrum(I, (double*)B, alpha, Nl, nLambda, oAngleI, oAngleO, cAngleI, cAngleO, objectiveSamples); + updateSpectrum(I, I0, nLambda); + + if(dispSimType == AbsorbanceSpecType) + { + if(i + e >= o || i + e >= oNAo || oNAi + e >= o || oNAi + e >= oNAo) + D = 0.0; + else + D = absorbanceDistortion(); + } + else + { + if(i >= o || oNAi >= oNAo) + D=0; + else + D = intensityDistortion(); + } + outFile< +#include +using namespace std; +#define eps 1e-15 +#define el 0.5772156649015329 + +int msta1(double x,int mp); +int msta2(double x,int n,int mp); +int bessjy01a(double x,double &j0,double &j1,double &y0,double &y1, + double &j0p,double &j1p,double &y0p,double &y1p); +int bessjy01b(double x,double &j0,double &j1,double &y0,double &y1, + double &j0p,double &j1p,double &y0p,double &y1p); +int bessjyna(int n,double x,int &nm,double *jn,double *yn, + double *jnp,double *ynp); +int bessjynb(int n,double x,int &nm,double *jn,double *yn, + double *jnp,double *ynp); +int bessjyv(double v,double x,double &vm,double *jv,double *yv, + double *jvp,double *yvp); +int bessik01a(double x,double &i0,double &i1,double &k0,double &k1, + double &i0p,double &i1p,double &k0p,double &k1p); +int bessik01b(double x,double &i0,double &i1,double &k0,double &k1, + double &i0p,double &i1p,double &k0p,double &k1p); +int bessikna(int n,double x,int &nm,double *in,double *kn, + double *inp,double *knp); +int bessiknb(int n,double x,int &nm,double *in,double *kn, + double *inp,double *knp); +int bessikv(double v,double x,double &vm,double *iv,double *kv, + double *ivp,double *kvp); +int cbessjy01(complex z,complex &cj0,complex &cj1, + complex &cy0,complex &cy1,complex &cj0p, + complex &cj1p,complex &cy0p,complex &cy1p); +int cbessjyna(int n,complex z,int &nm,complex *cj, + complex *cy,complex *cjp,complex *cyp); +int cbessjynb(int n,complex z,int &nm,complex *cj, + complex *cy,complex *cjp,complex *cyp); +int cbessik01(complexz,complex&ci0,complex&ci1, + complex&ck0,complex&ck1,complex&ci0p, + complex&ci1p,complex&ck0p,complex&ck1p); +int cbessikna(int n,complex z,int &nm,complex *ci, + complex *ck,complex *cip,complex *ckp); +int cbessiknb(int n,complex z,int &nm,complex *ci, + complex *ck,complex *cip,complex *ckp); +int cbessjyva(double v,complex z,double &vm,complex*cjv, + complex*cyv,complex*cjvp,complex*cyvp); +int cbessikv(double v,complexz,double &vm,complex *civ, + complex *ckv,complex *civp,complex *ckvp); + +#endif diff --git a/bessik.CPP b/bessik.CPP new file mode 100644 index 0000000..322000b --- /dev/null +++ b/bessik.CPP @@ -0,0 +1,487 @@ +// bessik.cpp -- computation of modified Bessel functions In, Kn +// and their derivatives. Algorithms and coefficient values from +// "Computation of Special Functions", Zhang and Jin, John +// Wiley and Sons, 1996. +// +// (C) 2003, C. Bond. All rights reserved. +// +#define _USE_MATH_DEFINES +#include +#include "bessel.h" + +double gamma(double x); + +int bessik01a(double x,double &i0,double &i1,double &k0,double &k1, + double &i0p,double &i1p,double &k0p,double &k1p) +{ + double r,x2,ca,cb,ct,ww,w0,xr,xr2; + int k,kz; + static double a[] = { + 0.125, + 7.03125e-2, + 7.32421875e-2, + 1.1215209960938e-1, + 2.2710800170898e-1, + 5.7250142097473e-1, + 1.7277275025845, + 6.0740420012735, + 2.4380529699556e1, + 1.1001714026925e2, + 5.5133589612202e2, + 3.0380905109224e3}; + static double b[] = { + -0.375, + -1.171875e-1, + -1.025390625e-1, + -1.4419555664063e-1, + -2.7757644653320e-1, + -6.7659258842468e-1, + -1.9935317337513, + -6.8839142681099, + -2.7248827311269e1, + -1.2159789187654e2, + -6.0384407670507e2, + -3.3022722944809e3}; + static double a1[] = { + 0.125, + 0.2109375, + 1.0986328125, + 1.1775970458984e1, + 2.1461706161499e2, + 5.9511522710323e3, + 2.3347645606175e5, + 1.2312234987631e7}; + + if (x < 0.0) return 1; + if (x == 0.0) { + i0 = 1.0; + i1 = 0.0; + k0 = 1e308; + k1 = 1e308; + i0p = 0.0; + i1p = 0.5; + k0p = -1e308; + k1p = -1e308; + return 0; + } + x2 = x*x; + if (x <= 18.0) { + i0 = 1.0; + r = 1.0; + for (k=1;k<=50;k++) { + r *= 0.25*x2/(k*k); + i0 += r; + if (fabs(r/i0) < eps) break; + } + i1 = 1.0; + r = 1.0; + for (k=1;k<=50;k++) { + r *= 0.25*x2/(k*(k+1)); + i1 += r; + if (fabs(r/i1) < eps) break; + } + i1 *= 0.5*x; + } + else { + if (x >= 50.0) kz = 7; + else if (x >= 35.0) kz = 9; + else kz = 12; + ca = exp(x)/sqrt(2.0*M_PI*x); + i0 = 1.0; + xr = 1.0/x; + for (k=0;k 40.0) && (n < (int)(0.25*x))) { + h0 = bi0; + h1 = bi1; + for (k=2;k<=n;k++) { + h = -2.0*(k-1.0)*h1/x+h0; + in[k] = h; + h0 = h1; + h1 = h; + } + } + else { + m = msta1(x,200); + if (m < n) nm = m; + else m = msta2(x,n,15); + f0 = 0.0; + f1 = 1.0e-100; + for (k=m;k>=0;k--) { + f = 2.0*(k+1.0)*f1/x+f0; + if (x <= nm) in[k] = f; + f0 = f1; + f1 = f; + } + s0 = bi0/f; + for (k=0;k<=m;k++) { + in[k] *= s0; + } + } + g0 = bk0; + g1 = bk1; + for (k=2;k<=nm;k++) { + g = 2.0*(k-1.0)*g1/x+g0; + kn[k] = g; + g0 = g1; + g1 = g; + } + for (k=2;k<=nm;k++) { + inp[k] = in[k-1]-k*in[k]/x; + knp[k] = -kn[k-1]-k*kn[k]/x; + } + return 0; +} +int bessiknb(int n,double x,int &nm,double *in,double *kn, + double *inp,double *knp) +{ + double s0,bs,f,f0,f1,sk0,a0,bkl,vt,r,g,g0,g1; + int k,kz,m,l; + + if ((x < 0.0) || (n < 0)) return 1; + if (x < eps) { + for (k=0;k<=n;k++) { + in[k] = 0.0; + kn[k] = 1e308; + inp[k] = 0.0; + knp[k] = -1e308; + } + in[0] = 1.0; + inp[1] = 0.5; + return 0; + } + nm = n; + if (n == 0) nm = 1; + m = msta1(x,200); + if (m < nm) nm = m; + else m = msta2(x,nm,15); + bs = 0.0; + sk0 = 0.0; + f0 = 0.0; + f1 = 1.0e-100; + for (k=m;k>=0;k--) { + f = 2.0*(k+1.0)*f1/x+f0; + if (k <= nm) in[k] = f; + if ((k != 0) && (k == 2*(int)(k/2))) { + sk0 += 4.0*f/k; + } + bs += 2.0*f; + f0 = f1; + f1 = f; + } + s0 = exp(x)/(bs-f); + for (k=0;k<=nm;k++) { + in[k] *= s0; + } + if (x <= 8.0) { + kn[0] = -(log(0.5*x)+el)*in[0]+s0*sk0; + kn[1] = (1.0/x-in[1]*kn[0])/in[0]; + } + else { + a0 = sqrt(M_PI_2/x)*exp(-x); + if (x >= 200.0) kz = 6; + else if (x >= 80.0) kz = 8; + else if (x >= 25.0) kz = 10; + else kz = 16; + for (l=0;l<2;l++) { + bkl = 1.0; + vt = 4.0*l; + r = 1.0; + for (k=1;k<=kz;k++) { + r *= 0.125*(vt-pow(2.0*k-1.0,2))/(k*x); + bkl += r; + } + kn[l] = a0*bkl; + } + } + g0 = kn[0]; + g1 = kn[1]; + for (k=2;k<=nm;k++) { + g = 2.0*(k-1.0)*g1/x+g0; + kn[k] = g; + g0 = g1; + g1 = g; + } + inp[0] = in[1]; + knp[0] = -kn[1]; + for (k=1;k<=nm;k++) { + inp[k] = in[k-1]-k*in[k]/x; + knp[k] = -kn[k-1]-k*kn[k]/x; + } + return 0; +} + +// The following program computes the modified Bessel functions +// Iv(x) and Kv(x) for arbitrary positive order. For negative +// order use: +// +// I-v(x) = Iv(x) + 2/pi sin(v pi) Kv(x) +// K-v(x) = Kv(x) +// +int bessikv(double v,double x,double &vm,double *iv,double *kv, + double *ivp,double *kvp) +{ + double x2,v0,piv,vt,a1,v0p,gap,r,bi0,ca,sum; + double f,f1,f2,ct,cs,wa,gan,ww,w0,v0n; + double r1,r2,bk0,bk1,bk2,a2,cb; + int n,k,kz,m; + + if ((v < 0.0) || (x < 0.0)) return 1; + x2 = x*x; + n = (int)v; + v0 = v-n; + if (n == 0) n = 1; + if (x == 0.0) { + for (k=0;k<=n;k++) { + iv[k] = 0.0; + kv[k] = -1e308; + ivp[k] = 0.0; + kvp[k] = 1e308; + } + if (v0 == 0.0) { + iv[0] = 1.0; + ivp[1] = 0.5; + } + vm = v; + return 0; + } + piv = M_PI*v0; + vt = 4.0*v0*v0; + if (v0 == 0.0) { + a1 = 1.0; + } + else { + v0p = 1.0+v0; + gap = gamma(v0p); + a1 = pow(0.5*x,v0)/gap; + } + if (x >= 50.0) kz = 8; + else if (x >= 35.0) kz = 10; + else kz = 14; + if (x <= 18.0) { + bi0 = 1.0; + r = 1.0; + for (k=1;k<=30;k++) { + r *= 0.25*x2/(k*(k+v0)); + bi0 += r; + if (fabs(r/bi0) < eps) break; + } + bi0 *= a1; + } + else { + ca = exp(x)/sqrt(2.0*M_PI*x); + sum = 1.0; + r = 1.0; + for (k=1;k<=kz;k++) { + r *= -0.125*(vt-pow(2.0*k-1.0,2.0))/(k*x); + sum += r; + } + bi0 = ca*sum; + } + m = msta1(x,200); + if (m < n) n = m; + else m = msta2(x,n,15); + f2 = 0.0; + f1 = 1.0e-100; + for (k=m;k>=0;k--) { + f = 2.0*(v0+k+1.0)*f1/x+f2; + if (k <= n) iv[k] = f; + f2 = f1; + f1 = f; + } + cs = bi0/f; + for (k=0;k<=n;k++) { + iv[k] *= cs; + } + ivp[0] = v0*iv[0]/x+iv[1]; + for (k=1;k<=n;k++) { + ivp[k] = -(k+v0)*iv[k]/x+iv[k-1]; + } + ww = 0.0; + if (x <= 9.0) { + if (v0 == 0.0) { + ct = -log(0.5*x)-el; + cs = 0.0; + w0 = 0.0; + r = 1.0; + for (k=1;k<=50;k++) { + w0 += 1.0/k; + r *= 0.25*x2/(k*k); + cs += r*(w0+ct); + wa = fabs(cs); + if (fabs((wa-ww)/wa) < eps) break; + ww = wa; + } + bk0 = ct+cs; + } + else { + v0n = 1.0-v0; + gan = gamma(v0n); + a2 = 1.0/(gan*pow(0.5*x,v0)); + a1 = pow(0.5*x,v0)/gap; + sum = a2-a1; + r1 = 1.0; + r2 = 1.0; + for (k=1;k<=120;k++) { + r1 *= 0.25*x2/(k*(k-v0)); + r2 *= 0.25*x2/(k*(k+v0)); + sum += a2*r1-a1*r2; + wa = fabs(sum); + if (fabs((wa-ww)/wa) < eps) break; + ww = wa; + } + bk0 = M_PI_2*sum/sin(piv); + } + } + else { + cb = exp(-x)*sqrt(M_PI_2/x); + sum = 1.0; + r = 1.0; + for (k=1;k<=kz;k++) { + r *= 0.125*(vt-pow(2.0*k-1.0,2.0))/(k*x); + sum += r; + } + bk0 = cb*sum; + } + bk1 = (1.0/x-iv[1]*bk0)/iv[0]; + kv[0] = bk0; + kv[1] = bk1; + for (k=2;k<=n;k++) { + bk2 = 2.0*(v0+k-1.0)*bk1/x+bk0; + kv[k] = bk2; + bk0 = bk1; + bk1 = bk2; + } + kvp[0] = v0*kv[0]/x-kv[1]; + for (k=1;k<=n;k++) { + kvp[k] = -(k+v0)*kv[k]/x-kv[k-1]; + } + vm = n+v0; + return 0; +} diff --git a/bessjy.cpp b/bessjy.cpp new file mode 100644 index 0000000..8a9f22f --- /dev/null +++ b/bessjy.cpp @@ -0,0 +1,706 @@ +// bessjy.cpp -- computation of Bessel functions Jn, Yn and their +// derivatives. Algorithms and coefficient values from +// "Computation of Special Functions", Zhang and Jin, John +// Wiley and Sons, 1996. +// +// (C) 2003, C. Bond. All rights reserved. +// +// Note that 'math.h' provides (or should provide) values for: +// pi M_PI +// 2/pi M_2_PI +// pi/4 M_PI_4 +// pi/2 M_PI_2 +// +#define _USE_MATH_DEFINES +#include +#include "bessel.h" + +double gamma(double x); +// +// INPUT: +// double x -- argument of Bessel function +// +// OUTPUT (via address pointers): +// double j0 -- Bessel function of 1st kind, 0th order +// double j1 -- Bessel function of 1st kind, 1st order +// double y0 -- Bessel function of 2nd kind, 0th order +// double y1 -- Bessel function of 2nd kind, 1st order +// double j0p -- derivative of Bessel function of 1st kind, 0th order +// double j1p -- derivative of Bessel function of 1st kind, 1st order +// double y0p -- derivative of Bessel function of 2nd kind, 0th order +// double y1p -- derivative of Bessel function of 2nd kind, 1st order +// +// RETURN: +// int error code: 0 = OK, 1 = error +// +// This algorithm computes the above functions using series expansions. +// +int bessjy01a(double x,double &j0,double &j1,double &y0,double &y1, + double &j0p,double &j1p,double &y0p,double &y1p) +{ + double x2,r,ec,w0,w1,r0,r1,cs0,cs1; + double cu,p0,q0,p1,q1,t1,t2; + int k,kz; + static double a[] = { + -7.03125e-2, + 0.112152099609375, + -0.5725014209747314, + 6.074042001273483, + -1.100171402692467e2, + 3.038090510922384e3, + -1.188384262567832e5, + 6.252951493434797e6, + -4.259392165047669e8, + 3.646840080706556e10, + -3.833534661393944e12, + 4.854014686852901e14, + -7.286857349377656e16, + 1.279721941975975e19}; + static double b[] = { + 7.32421875e-2, + -0.2271080017089844, + 1.727727502584457, + -2.438052969955606e1, + 5.513358961220206e2, + -1.825775547429318e4, + 8.328593040162893e5, + -5.006958953198893e7, + 3.836255180230433e9, + -3.649010818849833e11, + 4.218971570284096e13, + -5.827244631566907e15, + 9.476288099260110e17, + -1.792162323051699e20}; + static double a1[] = { + 0.1171875, + -0.1441955566406250, + 0.6765925884246826, + -6.883914268109947, + 1.215978918765359e2, + -3.302272294480852e3, + 1.276412726461746e5, + -6.656367718817688e6, + 4.502786003050393e8, + -3.833857520742790e10, + 4.011838599133198e12, + -5.060568503314727e14, + 7.572616461117958e16, + -1.326257285320556e19}; + static double b1[] = { + -0.1025390625, + 0.2775764465332031, + -1.993531733751297, + 2.724882731126854e1, + -6.038440767050702e2, + 1.971837591223663e4, + -8.902978767070678e5, + 5.310411010968522e7, + -4.043620325107754e9, + 3.827011346598605e11, + -4.406481417852278e13, + 6.065091351222699e15, + -9.833883876590679e17, + 1.855045211579828e20}; + + if (x < 0.0) return 1; + if (x == 0.0) { + j0 = 1.0; + j1 = 0.0; + y0 = -1e308; + y1 = -1e308; + j0p = 0.0; + j1p = 0.5; + y0p = 1e308; + y1p = 1e308; + return 0; + } + x2 = x*x; + if (x <= 12.0) { + j0 = 1.0; + r = 1.0; + for (k=1;k<=30;k++) { + r *= -0.25*x2/(k*k); + j0 += r; + if (fabs(r) < fabs(j0)*1e-15) break; + } + j1 = 1.0; + r = 1.0; + for (k=1;k<=30;k++) { + r *= -0.25*x2/(k*(k+1)); + j1 += r; + if (fabs(r) < fabs(j1)*1e-15) break; + } + j1 *= 0.5*x; + ec = log(0.5*x)+el; + cs0 = 0.0; + w0 = 0.0; + r0 = 1.0; + for (k=1;k<=30;k++) { + w0 += 1.0/k; + r0 *= -0.25*x2/(k*k); + r = r0 * w0; + cs0 += r; + if (fabs(r) < fabs(cs0)*1e-15) break; + } + y0 = M_2_PI*(ec*j0-cs0); + cs1 = 1.0; + w1 = 0.0; + r1 = 1.0; + for (k=1;k<=30;k++) { + w1 += 1.0/k; + r1 *= -0.25*x2/(k*(k+1)); + r = r1*(2.0*w1+1.0/(k+1)); + cs1 += r; + if (fabs(r) < fabs(cs1)*1e-15) break; + } + y1 = M_2_PI * (ec*j1-1.0/x-0.25*x*cs1); + } + else { + if (x >= 50.0) kz = 8; // Can be changed to 10 + else if (x >= 35.0) kz = 10; // " " 12 + else kz = 12; // " " 14 + t1 = x-M_PI_4; + p0 = 1.0; + q0 = -0.125/x; + for (k=0;k=0;k--) { + f = 2.0*(k+1.0)/x*f1-f2; + if (k <= nm) jn[k] = f; + f2 = f1; + f1 = f; + } + if (fabs(bj0) > fabs(bj1)) cs = bj0/f; + else cs = bj1/f2; + for (k=0;k<=nm;k++) { + jn[k] *= cs; + } + } + for (k=2;k<=nm;k++) { + jnp[k] = jn[k-1]-k*jn[k]/x; + } + f0 = yn[0]; + f1 = yn[1]; + for (k=2;k<=nm;k++) { + f = 2.0*(k-1.0)*f1/x-f0; + yn[k] = f; + f0 = f1; + f1 = f; + } + for (k=2;k<=nm;k++) { + ynp[k] = yn[k-1]-k*yn[k]/x; + } + return 0; +} +// +// Same input and output conventions as above. Different recurrence +// relations used for 'x' < 300. +// +int bessjynb(int n,double x,int &nm,double *jn,double *yn, + double *jnp,double *ynp) +{ + double t1,t2,f,f1,f2,bj0,bj1,bjk,by0,by1,cu,s0,su,sv; + double ec,bs,byk,p0,p1,q0,q1; + static double a[] = { + -0.7031250000000000e-1, + 0.1121520996093750, + -0.5725014209747314, + 6.074042001273483}; + static double b[] = { + 0.7324218750000000e-1, + -0.2271080017089844, + 1.727727502584457, + -2.438052969955606e1}; + static double a1[] = { + 0.1171875, + -0.1441955566406250, + 0.6765925884246826, + -6.883914268109947}; + static double b1[] = { + -0.1025390625, + 0.2775764465332031, + -1.993531733751297, + 2.724882731126854e1}; + + int i,k,m; + nm = n; + if ((x < 0.0) || (n < 0)) return 1; + if (x < 1e-15) { + for (i=0;i<=n;i++) { + jn[i] = 0.0; + yn[i] = -1e308; + jnp[i] = 0.0; + ynp[i] = 1e308; + } + jn[0] = 1.0; + jnp[1] = 0.5; + return 0; + } + if (x <= 300.0 || n > (int)(0.9*x)) { + if (n == 0) nm = 1; + m = msta1(x,200); + if (m < nm) nm = m; + else m = msta2(x,nm,15); + bs = 0.0; + su = 0.0; + sv = 0.0; + f2 = 0.0; + f1 = 1.0e-100; + for (k = m;k>=0;k--) { + f = 2.0*(k+1.0)/x*f1 - f2; + if (k <= nm) jn[k] = f; + if ((k == 2*(int)(k/2)) && (k != 0)) { + bs += 2.0*f; +// su += pow(-1,k>>1)*f/(double)k; + su += (-1)*((k & 2)-1)*f/(double)k; + } + else if (k > 1) { +// sv += pow(-1,k>>1)*k*f/(k*k-1.0); + sv += (-1)*((k & 2)-1)*(double)k*f/(k*k-1.0); + } + f2 = f1; + f1 = f; + } + s0 = bs+f; + for (k=0;k<=nm;k++) { + jn[k] /= s0; + } + ec = log(0.5*x) +0.5772156649015329; + by0 = M_2_PI*(ec*jn[0]-4.0*su/s0); + yn[0] = by0; + by1 = M_2_PI*((ec-1.0)*jn[1]-jn[0]/x-4.0*sv/s0); + yn[1] = by1; + } + else { + t1 = x-M_PI_4; + p0 = 1.0; + q0 = -0.125/x; + for (k=0;k<4;k++) { + p0 += a[k]*pow(x,-2*k-2); + q0 += b[k]*pow(x,-2*k-3); + } + cu = sqrt(M_2_PI/x); + bj0 = cu*(p0*cos(t1)-q0*sin(t1)); + by0 = cu*(p0*sin(t1)+q0*cos(t1)); + jn[0] = bj0; + yn[0] = by0; + t2 = x-0.75*M_PI; + p1 = 1.0; + q1 = 0.375/x; + for (k=0;k<4;k++) { + p1 += a1[k]*pow(x,-2*k-2); + q1 += b1[k]*pow(x,-2*k-3); + } + bj1 = cu*(p1*cos(t2)-q1*sin(t2)); + by1 = cu*(p1*sin(t2)+q1*cos(t2)); + jn[1] = bj1; + yn[1] = by1; + for (k=2;k<=nm;k++) { + bjk = 2.0*(k-1.0)*bj1/x-bj0; + jn[k] = bjk; + bj0 = bj1; + bj1 = bjk; + } + } + jnp[0] = -jn[1]; + for (k=1;k<=nm;k++) { + jnp[k] = jn[k-1]-k*jn[k]/x; + } + for (k=2;k<=nm;k++) { + byk = 2.0*(k-1.0)*by1/x-by0; + yn[k] = byk; + by0 = by1; + by1 = byk; + } + ynp[0] = -yn[1]; + for (k=1;k<=nm;k++) { + ynp[k] = yn[k-1]-k*yn[k]/x; + } + return 0; + +} + +// The following routine computes Bessel Jv(x) and Yv(x) for +// arbitrary positive order (v). For negative order, use: +// +// J-v(x) = Jv(x)cos(v pi) - Yv(x)sin(v pi) +// Y-v(x) = Jv(x)sin(v pi) + Yv(x)cos(v pi) +// +int bessjyv(double v,double x,double &vm,double *jv,double *yv, + double *djv,double *dyv) +{ + double v0,vl,vg,vv,a,a0,r,x2,bjv0,bjv1,bjvl,f,f0,f1,f2; + double r0,r1,ck,cs,cs0,cs1,sk,qx,px,byv0,byv1,rp,xk,rq; + double b,ec,w0,w1,bju0,bju1,pv0,pv1,byvk; + int j,k,l,m,n,kz; + + x2 = x*x; + n = (int)v; + v0 = v-n; + if ((x < 0.0) || (v < 0.0)) return 1; + if (x < 1e-15) { + for (k=0;k<=n;k++) { + jv[k] = 0.0; + yv[k] = -1e308; + djv[k] = 0.0; + dyv[k] = 1e308; + if (v0 == 0.0) { + jv[0] = 1.0; + djv[1] = 0.5; + } + else djv[0] = 1e308; + } + vm = v; + return 0; + } + if (x <= 12.0) { + for (l=0;l<2;l++) { + vl = v0 + l; + bjvl = 1.0; + r = 1.0; + for (k=1;k<=40;k++) { + r *= -0.25*x2/(k*(k+vl)); + bjvl += r; + if (fabs(r) < fabs(bjvl)*1e-15) break; + } + vg = 1.0 + vl; + a = pow(0.5*x,vl)/gamma(vg); + if (l == 0) bjv0 = bjvl*a; + else bjv1 = bjvl*a; + } + } + else { + if (x >= 50.0) kz = 8; + else if (x >= 35.0) kz = 10; + else kz = 11; + for (j=0;j<2;j++) { + vv = 4.0*(j+v0)*(j+v0); + px = 1.0; + rp = 1.0; + for (k=1;k<=kz;k++) { + rp *= (-0.78125e-2)*(vv-pow(4.0*k-3.0,2.0))* + (vv-pow(4.0*k-1.0,2.0))/(k*(2.0*k-1.0)*x2); + px += rp; + } + qx = 1.0; + rq = 1.0; + for (k=1;k<=kz;k++) { + rq *= (-0.78125e-2)*(vv-pow(4.0*k-1.0,2.0))* + (vv-pow(4.0*k+1.0,2.0))/(k*(2.0*k+1.0)*x2); + qx += rq; + } + qx *= 0.125*(vv-1.0)/x; + xk = x-(0.5*(j+v0)+0.25)*M_PI; + a0 = sqrt(M_2_PI/x); + ck = cos(xk); + sk = sin(xk); + + if (j == 0) { + bjv0 = a0*(px*ck-qx*sk); + byv0 = a0*(px*sk+qx*ck); + } + else if (j == 1) { + bjv1 = a0*(px*ck-qx*sk); + byv1 = a0*(px*sk+qx*ck); + } + } + } + jv[0] = bjv0; + jv[1] = bjv1; + djv[0] = v0*jv[0]/x-jv[1]; + djv[1] = -(1.0+v0)*jv[1]/x+jv[0]; + if ((n >= 2) && (n <= (int)(0.9*x))) { + f0 = bjv0; + f1 = bjv1; + for (k=2;k<=n;k++) { + f = 2.0*(k+v0-1.0)*f1/x-f0; + jv[k] = f; + f0 = f1; + f1 = f; + } + } + else if (n >= 2) { + m = msta1(x,200); + if (m < n) n = m; + else m = msta2(x,n,15); + f2 = 0.0; + f1 = 1.0e-100; + for (k=m;k>=0;k--) { + f = 2.0*(v0+k+1.0)*f1/x-f2; + if (k <= n) jv[k] = f; + f2 = f1; + f1 = f; + } + if (fabs(bjv0) > fabs(bjv1)) cs = bjv0/f; + else cs = bjv1/f2; + for (k=0;k<=n;k++) { + jv[k] *= cs; + } + } + for (k=2;k<=n;k++) { + djv[k] = -(k+v0)*jv[k]/x+jv[k-1]; + } + if (x <= 12.0) { + if (v0 != 0.0) { + for (l=0;l<2;l++) { + vl = v0 +l; + bjvl = 1.0; + r = 1.0; + for (k=1;k<=40;k++) { + r *= -0.25*x2/(k*(k-vl)); + bjvl += r; + if (fabs(r) < fabs(bjvl)*1e-15) break; + } + vg = 1.0-vl; + b = pow(2.0/x,vl)/gamma(vg); + if (l == 0) bju0 = bjvl*b; + else bju1 = bjvl*b; + } + pv0 = M_PI*v0; + pv1 = M_PI*(1.0+v0); + byv0 = (bjv0*cos(pv0)-bju0)/sin(pv0); + byv1 = (bjv1*cos(pv1)-bju1)/sin(pv1); + } + else { + ec = log(0.5*x)+el; + cs0 = 0.0; + w0 = 0.0; + r0 = 1.0; + for (k=1;k<=30;k++) { + w0 += 1.0/k; + r0 *= -0.25*x2/(k*k); + cs0 += r0*w0; + } + byv0 = M_2_PI*(ec*bjv0-cs0); + cs1 = 1.0; + w1 = 0.0; + r1 = 1.0; + for (k=1;k<=30;k++) { + w1 += 1.0/k; + r1 *= -0.25*x2/(k*(k+1)); + cs1 += r1*(2.0*w1+1.0/(k+1.0)); + } + byv1 = M_2_PI*(ec*bjv1-1.0/x-0.25*x*cs1); + } + } + yv[0] = byv0; + yv[1] = byv1; + for (k=2;k<=n;k++) { + byvk = 2.0*(v0+k-1.0)*byv1/x-byv0; + yv[k] = byvk; + byv0 = byv1; + byv1 = byvk; + } + dyv[0] = v0*yv[0]/x-yv[1]; + for (k=1;k<=n;k++) { + dyv[k] = -(k+v0)*yv[k]/x+yv[k-1]; + } + vm = n + v0; + return 0; +} + diff --git a/cbessik.cpp b/cbessik.cpp new file mode 100644 index 0000000..524c3f2 --- /dev/null +++ b/cbessik.cpp @@ -0,0 +1,454 @@ +// cbessik.cpp -- complex modified Bessel functions. +// Algorithms and coefficient values from "Computation of Special +// Functions", Zhang and Jin, John Wiley and Sons, 1996. +// +// (C) 2003, C. Bond. All rights reserved. +// +#include +using namespace std; +#include "bessel.h" + +static complex cii(0.0,1.0); +static complex czero(0.0,0.0); +static complex cone(1.0,0.0); + +double gamma(double x); + +int cbessik01(complexz,complex&ci0,complex&ci1, + complex&ck0,complex&ck1,complex&ci0p, + complex&ci1p,complex&ck0p,complex&ck1p) +{ + complex z1,z2,zr,zr2,cr,ca,cb,cs,ct,cw; + double a0,w0; + int k,kz; + static double a[] = { + 0.125, + 7.03125e-2, + 7.32421875e-2, + 1.1215209960938e-1, + 2.2710800170898e-1, + 5.7250142097473e-1, + 1.7277275025845, + 6.0740420012735, + 2.4380529699556e1, + 1.1001714026925e2, + 5.5133589612202e2, + 3.0380905109224e3}; + static double b[] = { + -0.375, + -1.171875e-1, + -1.025390625e-1, + -1.4419555664063e-1, + -2.7757644653320e-1, + -6.7659258842468e-1, + -1.9935317337513, + -6.8839142681099, + -2.7248827311269e1, + -1.2159789187654e2, + -6.0384407670507e2, + -3.3022722944809e3}; + static double a1[] = { + 0.125, + 0.2109375, + 1.0986328125, + 1.1775970458984e1, + 2.1461706161499e2, + 5.9511522710323e3, + 2.3347645606175e5, + 1.2312234987631e7, + 8.401390346421e08, + 7.2031420482627e10}; + + a0 = abs(z); + z2 = z*z; + z1 = z; + if (a0 == 0.0) { + ci0 = cone; + ci1 = czero; + ck0 = complex (1e308,0); + ck1 = complex (1e308,0); + ci0p = czero; + ci1p = complex(0.5,0.0); + ck0p = complex(-1e308,0); + ck1p = complex(-1e308,0); + return 0; + } + if (real(z) < 0.0) z1 = -z; + if (a0 <= 18.0) { + ci0 = cone; + cr = cone; + for (k=1;k<=50;k++) { + cr *= 0.25*z2/(double)(k*k); + ci0 += cr; + if (abs(cr/ci0) < eps) break; + } + ci1 = cone; + cr = cone; + for (k=1;k<=50;k++) { + cr *= 0.25*z2/(double)(k*(k+1.0)); + ci1 += cr; + if (abs(cr/ci1) < eps) break; + } + ci1 *= 0.5*z1; + } + else { + if (a0 >= 50.0) kz = 7; + else if (a0 >= 35.0) kz = 9; + else kz = 12; + ca = exp(z1)/sqrt(2.0*M_PI*z1); + ci0 = cone; + zr = 1.0/z1; + for (k=0;k 0.0) { + ck0 -= cii*M_PI*ci0; + ck1 = -ck1-cii*M_PI*ci1; + } + ci1 = -ci1; + } + ci0p = ci1; + ci1p = ci0-1.0*ci1/z; + ck0p = -ck1; + ck1p = -ck0-1.0*ck1/z; + return 0; +} +int cbessikna(int n,complex z,int &nm,complex *ci, + complex *ck,complex *cip,complex *ckp) +{ + complex ci0,ci1,ck0,ck1,ckk,cf,cf1,cf2,cs; + double a0; + int k,m,ecode; + a0 = abs(z); + nm = n; + if (a0 < 1.0e-100) { + for (k=0;k<=n;k++) { + ci[k] = czero; + ck[k] = complex(-1e308,0); + cip[k] = czero; + ckp[k] = complex(1e308,0); + } + ci[0] = cone; + cip[1] = complex(0.5,0.0); + return 0; + } + ecode = cbessik01(z,ci[0],ci[1],ck[0],ck[1],cip[0],cip[1],ckp[0],ckp[1]); + if (n < 2) return 0; + ci0 = ci[0]; + ci1 = ci[1]; + ck0 = ck[0]; + ck1 = ck[1]; + m = msta1(a0,200); + if (m < n) nm = m; + else m = msta2(a0,n,15); + cf2 = czero; + cf1 = complex(1.0e-100,0.0); + for (k=m;k>=0;k--) { + cf = 2.0*(k+1.0)*cf1/z+cf2; + if (k <= nm) ci[k] = cf; + cf2 = cf1; + cf1 = cf; + } + cs = ci0/cf; + for (k=0;k<=nm;k++) { + ci[k] *= cs; + } + for (k=2;k<=nm;k++) { + if (abs(ci[k-1]) > abs(ci[k-2])) { + ckk = (1.0/z-ci[k]*ck[k-1])/ci[k-1]; + } + else { + ckk = (ci[k]*ck[k-2]+2.0*(k-1.0)/(z*z))/ci[k-2]; + } + ck[k] = ckk; + } + for (k=2;k<=nm;k++) { + cip[k] = ci[k-1]-(double)k*ci[k]/z; + ckp[k] = -ck[k-1]-(double)k*ck[k]/z; + } + return 0; +} +int cbessiknb(int n,complex z,int &nm,complex *ci, + complex *ck,complex *cip,complex *ckp) +{ + complex z1,cbs,csk0,cf,cf0,cf1,ca0,cbkl; + complex cg,cg0,cg1,cs0,cs,cr; + double a0,vt,fac; + int k,kz,l,m; + + a0 = abs(z); + nm = n; + if (a0 < 1.0e-100) { + for (k=0;k<=n;k++) { + ci[k] = czero; + ck[k] = complex(1e308,0); + cip[k] = czero; + ckp[k] = complex(-1e308,0); + } + ci[0] = complex(1.0,0.0); + cip[1] = complex(0.5,0.0); + return 0; + } + z1 = z; + if (real(z) < 0.0) z1 = -z; + if (n == 0) nm = 1; + m = msta1(a0,200); + if (m < nm) nm = m; + else m = msta2(a0,nm,15); + cbs = czero; + csk0 = czero; + cf0 = czero; + cf1 = complex(1.0e-100,0.0); + for (k=m;k>=0;k--) { + cf = 2.0*(k+1.0)*cf1/z1+cf0; + if (k <=nm) ci[k] = cf; + if ((k != 0) && (k == 2*(k>>1))) csk0 += 4.0*cf/(double)k; + cbs += 2.0*cf; + cf0 = cf1; + cf1 = cf; + } + cs0 = exp(z1)/(cbs-cf); + for (k=0;k<=nm;k++) { + ci[k] *= cs0; + } + if (a0 <= 9.0) { + ck[0] = -(log(0.5*z1)+el)*ci[0]+cs0*csk0; + ck[1] = (1.0/z1-ci[1]*ck[0])/ci[0]; + } + else { + ca0 = sqrt(M_PI_2/z1)*exp(-z1); + if (a0 >= 200.0) kz = 6; + else if (a0 >= 80.0) kz = 8; + else if (a0 >= 25.0) kz = 10; + else kz = 16; + for (l=0;l<2;l++) { + cbkl = cone; + vt = 4.0*l; + cr = cone; + for (k=1;k<=kz;k++) { + cr *= 0.125*(vt-pow(2.0*k-1.0,2.0))/((double)k*z1); + cbkl += cr; + } + ck[l] = ca0*cbkl; + } + } + cg0 = ck[0]; + cg1 = ck[1]; + for (k=2;k<=nm;k++) { + cg = 2.0*(k-1.0)*cg1/z1+cg0; + ck[k] = cg; + cg0 = cg1; + cg1 = cg; + } + if (real(z) < 0.0) { + fac = 1.0; + for (k=0;k<=nm;k++) { + if (imag(z) < 0.0) { + ck[k] = fac*ck[k]+cii*M_PI*ci[k]; + } + else { + ck[k] = fac*ck[k]-cii*M_PI*ci[k]; + } + ci[k] *= fac; + fac = -fac; + } + } + cip[0] = ci[1]; + ckp[0] = -ck[1]; + for (k=1;k<=nm;k++) { + cip[k] = ci[k-1]-(double)k*ci[k]/z; + ckp[k] = -ck[k-1]-(double)k*ck[k]/z; + } + return 0; +} +int cbessikv(double v,complexz,double &vm,complex *civ, + complex *ckv,complex *civp,complex *ckvp) +{ + complex z1,z2,ca1,ca,cs,cr,ci0,cbi0,cf,cf1,cf2; + complex ct,cp,cbk0,ca2,cr1,cr2,csu,cws,cb; + complex cg0,cg1,cgk,cbk1,cvk; + double a0,v0,v0p,v0n,vt,w0,piv,gap,gan; + int m,n,k,kz; + + a0 = abs(z); + z1 = z; + z2 = z*z; + n = (int)v; + v0 = v-n; + piv = M_PI*v0; + vt = 4.0*v0*v0; + if (n == 0) n = 1; + if (a0 < 1e-100) { + for (k=0;k<=n;k++) { + civ[k] = czero; + ckv[k] = complex(-1e308,0); + civp[k] = czero; + ckvp[k] = complex(1e308,0); + } + if (v0 == 0.0) { + civ[0] = cone; + civp[1] = complex (0.5,0.0); + } + vm = v; + return 0; + } + if (a0 >= 50.0) kz = 8; + else if (a0 >= 35.0) kz = 10; + else kz = 14; + if (real(z) <= 0.0) z1 = -z; + if (a0 < 18.0) { + if (v0 == 0.0) { + ca1 = cone; + } + else { + v0p = 1.0+v0; + gap = gamma(v0p); + ca1 = pow(0.5*z1,v0)/gap; + } + ci0 = cone; + cr = cone; + for (k=1;k<=50;k++) { + cr *= 0.25*z2/(k*(k+v0)); + ci0 += cr; + if (abs(cr/ci0) < eps) break; + } + cbi0 = ci0*ca1; + } + else { + ca = exp(z1)/sqrt(2.0*M_PI*z1); + cs = cone; + cr = cone; + for (k=1;k<=kz;k++) { + cr *= -0.125*(vt-pow(2.0*k-1.0,2.0))/((double)k*z1); + cs += cr; + } + cbi0 = ca*cs; + } + m = msta1(a0,200); + if (m < n) n = m; + else m = msta2(a0,n,15); + cf2 = czero; + cf1 = complex(1.0e-100,0.0); + for (k=m;k>=0;k--) { + cf = 2.0*(v0+k+1.0)*cf1/z1+cf2; + if (k <= n) civ[k] = cf; + cf2 = cf1; + cf1 = cf; + } + cs = cbi0/cf; + for (k=0;k<=n;k++) { + civ[k] *= cs; + } + if (a0 <= 9.0) { + if (v0 == 0.0) { + ct = -log(0.5*z1)-el; + cs = czero; + w0 = 0.0; + cr = cone; + for (k=1;k<=50;k++) { + w0 += 1.0/k; + cr *= 0.25*z2/(double)(k*k); + cp = cr*(w0+ct); + cs += cp; + if ((k >= 10) && (abs(cp/cs) < eps)) break; + } + cbk0 = ct+cs; + } + else { + v0n = 1.0-v0; + gan = gamma(v0n); + ca2 = 1.0/(gan*pow(0.5*z1,v0)); + ca1 = pow(0.5*z1,v0)/gap; + csu = ca2-ca1; + cr1 = cone; + cr2 = cone; + cws = czero; + for (k=1;k<=50;k++) { + cr1 *= 0.25*z2/(k*(k-v0)); + cr2 *= 0.25*z2/(k*(k+v0)); + csu += ca2*cr1-ca1*cr2; + if ((k >= 10) && (abs((cws-csu)/csu) < eps)) break; + cws = csu; + } + cbk0 = csu*M_PI_2/sin(piv); + } + } + else { + cb = exp(-z1)*sqrt(M_PI_2/z1); + cs = cone; + cr = cone; + for (k=1;k<=kz;k++) { + cr *= 0.125*(vt-pow(2.0*k-1.0,2.0))/((double)k*z1); + cs += cr; + } + cbk0 = cb*cs; + } + cbk1 = (1.0/z1-civ[1]*cbk0)/civ[0]; + ckv[0] = cbk0; + ckv[1] = cbk1; + cg0 = cbk0; + cg1 = cbk1; + for (k=2;k<=n;k++) { + cgk = 2.0*(v0+k-1.0)*cg1/z1+cg0; + ckv[k] = cgk; + cg0 = cg1; + cg1 = cgk; + } + if (real(z) < 0.0) { + for (k=0;k<=n;k++) { + cvk = exp((k+v0)*M_PI*cii); + if (imag(z) < 0.0) { + ckv[k] = cvk*ckv[k]+M_PI*cii*civ[k]; + civ[k] /= cvk; + } + else if (imag(z) > 0.0) { + ckv[k] = ckv[k]/cvk-M_PI*cii*civ[k]; + civ[k] *= cvk; + } + } + } + civp[0] = v0*civ[0]/z+civ[1]; + ckvp[0] = v0*ckv[0]/z-ckv[1]; + for (k=1;k<=n;k++) { + civp[k] = -(k+v0)*civ[k]/z+civ[k-1]; + ckvp[k] = -(k+v0)*ckv[k]/z-ckv[k-1]; + } + vm = n+v0; + return 0; +} diff --git a/cbessjy.cpp b/cbessjy.cpp new file mode 100644 index 0000000..230c7dd --- /dev/null +++ b/cbessjy.cpp @@ -0,0 +1,716 @@ +// cbessjy.cpp -- complex Bessel functions. +// Algorithms and coefficient values from "Computation of Special +// Functions", Zhang and Jin, John Wiley and Sons, 1996. +// +// (C) 2003, C. Bond. All rights reserved. +// +#include +using namespace std; +#include "bessel.h" +double gamma(double); + +static complex cii(0.0,1.0); +static complex cone(1.0,0.0); +static complex czero(0.0,0.0); + +int cbessjy01(complex z,complex &cj0,complex &cj1, + complex &cy0,complex &cy1,complex &cj0p, + complex &cj1p,complex &cy0p,complex &cy1p) +{ + complex z1,z2,cr,cp,cs,cp0,cq0,cp1,cq1,ct1,ct2,cu; + double a0,w0,w1; + int k,kz; + + static double a[] = { + -7.03125e-2, + 0.112152099609375, + -0.5725014209747314, + 6.074042001273483, + -1.100171402692467e2, + 3.038090510922384e3, + -1.188384262567832e5, + 6.252951493434797e6, + -4.259392165047669e8, + 3.646840080706556e10, + -3.833534661393944e12, + 4.854014686852901e14, + -7.286857349377656e16, + 1.279721941975975e19}; + static double b[] = { + 7.32421875e-2, + -0.2271080017089844, + 1.727727502584457, + -2.438052969955606e1, + 5.513358961220206e2, + -1.825775547429318e4, + 8.328593040162893e5, + -5.006958953198893e7, + 3.836255180230433e9, + -3.649010818849833e11, + 4.218971570284096e13, + -5.827244631566907e15, + 9.476288099260110e17, + -1.792162323051699e20}; + static double a1[] = { + 0.1171875, + -0.1441955566406250, + 0.6765925884246826, + -6.883914268109947, + 1.215978918765359e2, + -3.302272294480852e3, + 1.276412726461746e5, + -6.656367718817688e6, + 4.502786003050393e8, + -3.833857520742790e10, + 4.011838599133198e12, + -5.060568503314727e14, + 7.572616461117958e16, + -1.326257285320556e19}; + static double b1[] = { + -0.1025390625, + 0.2775764465332031, + -1.993531733751297, + 2.724882731126854e1, + -6.038440767050702e2, + 1.971837591223663e4, + -8.902978767070678e5, + 5.310411010968522e7, + -4.043620325107754e9, + 3.827011346598605e11, + -4.406481417852278e13, + 6.065091351222699e15, + -9.833883876590679e17, + 1.855045211579828e20}; + + a0 = abs(z); + z2 = z*z; + z1 = z; + if (a0 == 0.0) { + cj0 = cone; + cj1 = czero; + cy0 = complex(-1e308,0); + cy1 = complex(-1e308,0); + cj0p = czero; + cj1p = complex(0.5,0.0); + cy0p = complex(1e308,0); + cy1p = complex(1e308,0); + return 0; + } + if (real(z) < 0.0) z1 = -z; + if (a0 <= 12.0) { + cj0 = cone; + cr = cone; + for (k=1;k<=40;k++) { + cr *= -0.25*z2/(double)(k*k); + cj0 += cr; + if (abs(cr) < abs(cj0)*eps) break; + } + cj1 = cone; + cr = cone; + for (k=1;k<=40;k++) { + cr *= -0.25*z2/(k*(k+1.0)); + cj1 += cr; + if (abs(cr) < abs(cj1)*eps) break; + } + cj1 *= 0.5*z1; + w0 = 0.0; + cr = cone; + cs = czero; + for (k=1;k<=40;k++) { + w0 += 1.0/k; + cr *= -0.25*z2/(double)(k*k); + cp = cr*w0; + cs += cp; + if (abs(cp) < abs(cs)*eps) break; + } + cy0 = M_2_PI*((log(0.5*z1)+el)*cj0-cs); + w1 = 0.0; + cr = cone; + cs = cone; + for (k=1;k<=40;k++) { + w1 += 1.0/k; + cr *= -0.25*z2/(k*(k+1.0)); + cp = cr*(2.0*w1+1.0/(k+1.0)); + cs += cp; + if (abs(cp) < abs(cs)*eps) break; + } + cy1 = M_2_PI*((log(0.5*z1)+el)*cj1-1.0/z1-0.25*z1*cs); + } + else { + if (a0 >= 50.0) kz = 8; // can be changed to 10 + else if (a0 >= 35.0) kz = 10; // " " " 12 + else kz = 12; // " " " 14 + ct1 = z1 - M_PI_4; + cp0 = cone; + for (k=0;k 0.0) { + cy0 += 2.0*cii*cj0; + cy1 = -(cy1+2.0*cii*cj1); + } + cj1 = -cj1; + } + cj0p = -cj1; + cj1p = cj0-cj1/z; + cy0p = -cy1; + cy1p = cy0-cy1/z; + return 0; +} + +int cbessjyna(int n,complex z,int &nm,complex *cj, + complex *cy,complex *cjp,complex *cyp) +{ + complex cbj0,cbj1,cby0,cby1,cj0,cjk,cj1,cf,cf1,cf2; + complex cs,cg0,cg1,cyk,cyl1,cyl2,cylk,cp11,cp12,cp21,cp22; + complex ch0,ch1,ch2; + double a0,yak,ya1,ya0,wa; + int m,k,lb,lb0; + + if (n < 0) return 1; + a0 = abs(z); + nm = n; + if (a0 < 1.0e-100) { + for (k=0;k<=n;k++) { + cj[k] = czero; + cy[k] = complex (-1e308,0); + cjp[k] = czero; + cyp[k] = complex(1e308,0); + } + cj[0] = cone; + cjp[1] = complex(0.5,0.0); + return 0; + } + cbessjy01(z,cj[0],cj[1],cy[0],cy[1],cjp[0],cjp[1],cyp[0],cyp[1]); + cbj0 = cj[0]; + cbj1 = cj[1]; + cby0 = cy[0]; + cby1 = cy[1]; + if (n <= 1) return 0; + if (n < (int)0.25*a0) { + cj0 = cbj0; + cj1 = cbj1; + for (k=2;k<=n;k++) { + cjk = 2.0*(k-1.0)*cj1/z-cj0; + cj[k] = cjk; + cj0 = cj1; + cj1 = cjk; + } + } + else { + m = msta1(a0,200); + if (m < n) nm = m; + else m = msta2(a0,n,15); + cf2 = czero; + cf1 = complex (1.0e-100,0.0); + for (k=m;k>=0;k--) { + cf = 2.0*(k+1.0)*cf1/z-cf2; + if (k <=nm) cj[k] = cf; + cf2 = cf1; + cf1 = cf; + } + if (abs(cbj0) > abs(cbj1)) cs = cbj0/cf; + else cs = cbj1/cf2; + for (k=0;k<=nm;k++) { + cj[k] *= cs; + } + } + for (k=2;k<=nm;k++) { + cjp[k] = cj[k-1]-(double)k*cj[k]/z; + } + ya0 = abs(cby0); + lb = 0; + cg0 = cby0; + cg1 = cby1; + for (k=2;k<=nm;k++) { + cyk = 2.0*(k-1.0)*cg1/z-cg0; + yak = abs(cyk); + ya1 = abs(cg0); + if ((yak < ya0) && (yak < ya1)) lb = k; + cy[k] = cyk; + cg0 = cg1; + cg1 = cyk; + } + lb0 = 0; + if ((lb > 4) && (imag(z) != 0.0)) { + while (lb != lb0) { + ch2 = cone; + ch1 = czero; + lb0 = lb; + for (k=lb;k>=1;k--) { + ch0 = 2.0*k*ch1/z-ch2; + ch2 = ch1; + ch1 = ch0; + } + cp12 = ch0; + cp22 = ch2; + ch2 = czero; + ch1 = cone; + for (k=lb;k>=1;k--) { + ch0 = 2.0*k*ch1/z-ch2; + ch2 = ch1; + ch1 = ch0; + } + cp11 = ch0; + cp21 = ch2; + if (lb == nm) + cj[lb+1] = 2.0*lb*cj[lb]/z-cj[lb-1]; + if (abs(cj[0]) > abs(cj[1])) { + cy[lb+1] = (cj[lb+1]*cby0-2.0*cp11/(M_PI*z))/cj[0]; + cy[lb] = (cj[lb]*cby0+2.0*cp12/(M_PI*z))/cj[0]; + } + else { + cy[lb+1] = (cj[lb+1]*cby1-2.0*cp21/(M_PI*z))/cj[1]; + cy[lb] = (cj[lb]*cby1+2.0*cp22/(M_PI*z))/cj[1]; + } + cyl2 = cy[lb+1]; + cyl1 = cy[lb]; + for (k=lb-1;k>=0;k--) { + cylk = 2.0*(k+1.0)*cyl1/z-cyl2; + cy[k] = cylk; + cyl2 = cyl1; + cyl1 = cylk; + } + cyl1 = cy[lb]; + cyl2 = cy[lb+1]; + for (k=lb+1;k z,int &nm,complex *cj, + complex *cy,complex *cjp,complex *cyp) +{ + complex cf,cf0,cf1,cf2,cbs,csu,csv,cs0,ce; + complex ct1,cp0,cq0,cp1,cq1,cu,cbj0,cby0,cbj1,cby1; + complex cyy,cbjk,ct2; + double a0,y0; + int k,m; + static double a[] = { + -0.7031250000000000e-1, + 0.1121520996093750, + -0.5725014209747314, + 6.074042001273483}; + static double b[] = { + 0.7324218750000000e-1, + -0.2271080017089844, + 1.727727502584457, + -2.438052969955606e1}; + static double a1[] = { + 0.1171875, + -0.1441955566406250, + 0.6765925884246826, + -6.883914268109947}; + static double b1[] = { + -0.1025390625, + 0.2775764465332031, + -1.993531733751297, + 2.724882731126854e1}; + + y0 = abs(imag(z)); + a0 = abs(z); + nm = n; + if (a0 < 1.0e-100) { + for (k=0;k<=n;k++) { + cj[k] = czero; + cy[k] = complex (-1e308,0); + cjp[k] = czero; + cyp[k] = complex(1e308,0); + } + cj[0] = cone; + cjp[1] = complex(0.5,0.0); + return 0; + } + if ((a0 <= 300.0) || (n > (int)(0.25*a0))) { + if (n == 0) nm = 1; + m = msta1(a0,200); + if (m < nm) nm = m; + else m = msta2(a0,nm,15); + cbs = czero; + csu = czero; + csv = czero; + cf2 = czero; + cf1 = complex (1.0e-100,0.0); + for (k=m;k>=0;k--) { + cf = 2.0*(k+1.0)*cf1/z-cf2; + if (k <= nm) cj[k] = cf; + if (((k & 1) == 0) && (k != 0)) { + if (y0 <= 1.0) { + cbs += 2.0*cf; + } + else { + cbs += (-1)*((k & 2)-1)*2.0*cf; + } + csu += (double)((-1)*((k & 2)-1))*cf/(double)k; + } + else if (k > 1) { + csv += (double)((-1)*((k & 2)-1)*k)*cf/(double)(k*k-1.0); + } + cf2 = cf1; + cf1 = cf; + } + if (y0 <= 1.0) cs0 = cbs+cf; + else cs0 = (cbs+cf)/cos(z); + for (k=0;k<=nm;k++) { + cj[k] /= cs0; + } + ce = log(0.5*z)+el; + cy[0] = M_2_PI*(ce*cj[0]-4.0*csu/cs0); + cy[1] = M_2_PI*(-cj[0]/z+(ce-1.0)*cj[1]-4.0*csv/cs0); + } + else { + ct1 = z-M_PI_4; + cp0 = cone; + for (k=0;k<4;k++) { + cp0 += a[k]*pow(z,-2.0*k-2.0); + } + cq0 = -0.125/z; + for (k=0;k<4;k++) { + cq0 += b[k] *pow(z,-2.0*k-3.0); + } + cu = sqrt(M_2_PI/z); + cbj0 = cu*(cp0*cos(ct1)-cq0*sin(ct1)); + cby0 = cu*(cp0*sin(ct1)+cq0*cos(ct1)); + cj[0] = cbj0; + cy[0] = cby0; + ct2 = z-0.75*M_PI; + cp1 = cone; + for (k=0;k<4;k++) { + cp1 += a1[k]*pow(z,-2.0*k-2.0); + } + cq1 = 0.375/z; + for (k=0;k<4;k++) { + cq1 += b1[k]*pow(z,-2.0*k-3.0); + } + cbj1 = cu*(cp1*cos(ct2)-cq1*sin(ct2)); + cby1 = cu*(cp1*sin(ct2)+cq1*cos(ct2)); + cj[1] = cbj1; + cy[1] = cby1; + for (k=2;k<=n;k++) { + cbjk = 2.0*(k-1.0)*cbj1/z-cbj0; + cj[k] = cbjk; + cbj0 = cbj1; + cbj1 = cbjk; + } + } + cjp[0] = -cj[1]; + for (k=1;k<=nm;k++) { + cjp[k] = cj[k-1]-(double)k*cj[k]/z; + } + if (abs(cj[0]) > 1.0) + cy[1] = (cj[1]*cy[0]-2.0/(M_PI*z))/cj[0]; + for (k=2;k<=nm;k++) { + if (abs(cj[k-1]) >= abs(cj[k-2])) + cyy = (cj[k]*cy[k-1]-2.0/(M_PI*z))/cj[k-1]; + else + cyy = (cj[k]*cy[k-2]-4.0*(k-1.0)/(M_PI*z*z))/cj[k-2]; + cy[k] = cyy; + } + cyp[0] = -cy[1]; + for (k=1;k<=nm;k++) { + cyp[k] = cy[k-1]-(double)k*cy[k]/z; + } + + return 0; +} + +int cbessjyva(double v,complex z,double &vm,complex*cjv, + complex*cyv,complex*cjvp,complex*cyvp) +{ + complex z1,z2,zk,cjvl,cr,ca,cjv0,cjv1,cpz,crp; + complex cqz,crq,ca0,cck,csk,cyv0,cyv1,cju0,cju1,cb; + complex cs,cs0,cr0,cs1,cr1,cec,cf,cf0,cf1,cf2; + complex cfac0,cfac1,cg0,cg1,cyk,cp11,cp12,cp21,cp22; + complex ch0,ch1,ch2,cyl1,cyl2,cylk; + + double a0,v0,pv0,pv1,vl,ga,gb,vg,vv,w0,w1,ya0,yak,ya1,wa; + int j,n,k,kz,l,lb,lb0,m; + + a0 = abs(z); + z1 = z; + z2 = z*z; + n = (int)v; + + + v0 = v-n; + + pv0 = M_PI*v0; + pv1 = M_PI*(1.0+v0); + if (a0 < 1.0e-100) { + for (k=0;k<=n;k++) { + cjv[k] = czero; + cyv[k] = complex (-1e308,0); + cjvp[k] = czero; + cyvp[k] = complex (1e308,0); + + } + if (v0 == 0.0) { + cjv[0] = cone; + cjvp[1] = complex (0.5,0.0); + } + else { + cjvp[0] = complex (1e308,0); + } + vm = v; + return 0; + } + if (real(z1) < 0.0) z1 = -z; + if (a0 <= 12.0) { + for (l=0;l<2;l++) { + vl = v0+l; + cjvl = cone; + cr = cone; + for (k=1;k<=40;k++) { + cr *= -0.25*z2/(k*(k+vl)); + cjvl += cr; + if (abs(cr) < abs(cjvl)*eps) break; + } + vg = 1.0 + vl; + ga = gamma(vg); + ca = pow(0.5*z1,vl)/ga; + if (l == 0) cjv0 = cjvl*ca; + else cjv1 = cjvl*ca; + } + } + else { + if (a0 >= 50.0) kz = 8; + else if (a0 >= 35.0) kz = 10; + else kz = 11; + for (j=0;j<2;j++) { + vv = 4.0*(j+v0)*(j+v0); + cpz = cone; + crp = cone; + for (k=1;k<=kz;k++) { + crp = -0.78125e-2*crp*(vv-pow(4.0*k-3.0,2.0))* + (vv-pow(4.0*k-1.0,2.0))/(k*(2.0*k-1.0)*z2); + cpz += crp; + } + cqz = cone; + crq = cone; + for (k=1;k<=kz;k++) { + crq = -0.78125e-2*crq*(vv-pow(4.0*k-1.0,2.0))* + (vv-pow(4.0*k+1.0,2.0))/(k*(2.0*k+1.0)*z2); + cqz += crq; + } + cqz *= 0.125*(vv-1.0)/z1; + zk = z1-(0.5*(j+v0)+0.25)*M_PI; + ca0 = sqrt(M_2_PI/z1); + cck = cos(zk); + csk = sin(zk); + if (j == 0) { + cjv0 = ca0*(cpz*cck-cqz*csk); + cyv0 = ca0*(cpz*csk+cqz+cck); + } + else { + cjv1 = ca0*(cpz*cck-cqz*csk); + cyv1 = ca0*(cpz*csk+cqz*cck); + } + } + } + if (a0 <= 12.0) { + if (v0 != 0.0) { + for (l=0;l<2;l++) { + vl = v0+l; + cjvl = cone; + cr = cone; + for (k=1;k<=40;k++) { + cr *= -0.25*z2/(k*(k-vl)); + cjvl += cr; + if (abs(cr) < abs(cjvl)*eps) break; + } + vg = 1.0-vl; + gb = gamma(vg); + cb = pow(2.0/z1,vl)/gb; + if (l == 0) cju0 = cjvl*cb; + else cju1 = cjvl*cb; + } + cyv0 = (cjv0*cos(pv0)-cju0)/sin(pv0); + cyv1 = (cjv1*cos(pv1)-cju1)/sin(pv1); + } + else { + cec = log(0.5*z1)+el; + cs0 = czero; + w0 = 0.0; + cr0 = cone; + for (k=1;k<=30;k++) { + w0 += 1.0/k; + cr0 *= -0.25*z2/(double)(k*k); + cs0 += cr0*w0; + } + cyv0 = M_2_PI*(cec*cjv0-cs0); + cs1 = cone; + w1 = 0.0; + cr1 = cone; + for (k=1;k<=30;k++) { + w1 += 1.0/k; + cr1 *= -0.25*z2/(k*(k+1.0)); + cs1 += cr1*(2.0*w1+1.0/(k+1.0)); + } + cyv1 = M_2_PI*(cec*cjv1-1.0/z1-0.25*z1*cs1); + } + } + if (real(z) < 0.0) { + cfac0 = exp(pv0*cii); + cfac1 = exp(pv1*cii); + if (imag(z) < 0.0) { + cyv0 = cfac0*cyv0-2.0*cii*cos(pv0)*cjv0; + cyv1 = cfac1*cyv1-2.0*cii*cos(pv1)*cjv1; + cjv0 /= cfac0; + cjv1 /= cfac1; + } + else if (imag(z) > 0.0) { + cyv0 = cyv0/cfac0+2.0*cii*cos(pv0)*cjv0; + cyv1 = cyv1/cfac1+2.0*cii*cos(pv1)*cjv1; + cjv0 *= cfac0; + cjv1 *= cfac1; + } + } + cjv[0] = cjv0; + cjv[1] = cjv1; + if ((n >= 2) && (n <= (int)(0.25*a0))) { + cf0 = cjv0; + cf1 = cjv1; + for (k=2;k<= n;k++) { + cf = 2.0*(k+v0-1.0)*cf1/z-cf0; + cjv[k] = cf; + cf0 = cf1; + cf1 = cf; + } + } + else if (n >= 2) { + m = msta1(a0,200); + if (m < n) n = m; + else m = msta2(a0,n,15); + cf2 = czero; + cf1 = complex(1.0e-100,0.0); + for (k=m;k>=0;k--) { + cf = 2.0*(v0+k+1.0)*cf1/z-cf2; + if (k <= n) cjv[k] = cf; + cf2 = cf1; + cf1 = cf; + } + if (abs(cjv0) > abs(cjv1)) cs = cjv0/cf; + else cs = cjv1/cf2; + for (k=0;k<=n;k++) { + cjv[k] *= cs; + } + } + cjvp[0] = v0*cjv[0]/z-cjv[1]; + for (k=1;k<=n;k++) { + cjvp[k] = -(k+v0)*cjv[k]/z+cjv[k-1]; + } + cyv[0] = cyv0; + cyv[1] = cyv1; + ya0 = abs(cyv0); + lb = 0; + cg0 = cyv0; + cg1 = cyv1; + for (k=2;k<=n;k++) { + cyk = 2.0*(v0+k-1.0)*cg1/z-cg0; + yak = abs(cyk); + ya1 = abs(cg0); + if ((yak < ya0) && (yak< ya1)) lb = k; + cyv[k] = cyk; + cg0 = cg1; + cg1 = cyk; + } + lb0 = 0; + if ((lb > 4) && (imag(z) != 0.0)) { + while(lb != lb0) { + ch2 = cone; + ch1 = czero; + lb0 = lb; + for (k=lb;k>=1;k--) { + ch0 = 2.0*(k+v0)*ch1/z-ch2; + ch2 = ch1; + ch1 = ch0; + } + cp12 = ch0; + cp22 = ch2; + ch2 = czero; + ch1 = cone; + for (k=lb;k>=1;k--) { + ch0 = 2.0*(k+v0)*ch1/z-ch2; + ch2 = ch1; + ch1 = ch0; + } + cp11 = ch0; + cp21 = ch2; + if (lb == n) + cjv[lb+1] = 2.0*(lb+v0)*cjv[lb]/z-cjv[lb-1]; + if (abs(cjv[0]) > abs(cjv[1])) { + cyv[lb+1] = (cjv[lb+1]*cyv0-2.0*cp11/(M_PI*z))/cjv[0]; + cyv[lb] = (cjv[lb]*cyv0+2.0*cp12/(M_PI*z))/cjv[0]; + } + else { + cyv[lb+1] = (cjv[lb+1]*cyv1-2.0*cp21/(M_PI*z))/cjv[1]; + cyv[lb] = (cjv[lb]*cyv1+2.0*cp22/(M_PI*z))/cjv[1]; + } + cyl2 = cyv[lb+1]; + cyl1 = cyv[lb]; + for (k=lb-1;k>=0;k--) { + cylk = 2.0*(k+v0+1.0)*cyl1/z-cyl2; + cyv[k] = cylk; + cyl2 = cyl1; + cyl1 = cylk; + } + cyl1 = cyv[lb]; + cyl2 = cyv[lb+1]; + for (k=lb+1;k= numVals) return; - double nuDelta = (nuEnd - nuStart)/(numVals - 1); - - double nu = nuStart + i*nuDelta; - double n = 0.0; - double jNu; - double jK; - for(int j=1; j>>(gpuN, gpuK, nVals, nuStart, nuEnd, nOffset); - - HANDLE_ERROR(cudaMemcpy(cpuN, gpuN, sizeof(double)*nVals, cudaMemcpyDeviceToHost)); - - //free resources - HANDLE_ERROR(cudaFree(gpuK)); - HANDLE_ERROR(cudaFree(gpuN)); -} - -__global__ void devComputeSpectrum(double* I, double2* B, double* alpha, int Nl, - int nSamples, double oThetaI, double oThetaO, double cThetaI, double cThetaO) -{ - int i = blockIdx.x * blockDim.x + threadIdx.x; - - //compute the delta-theta value - double dTheta = (oThetaO - oThetaI)/nSamples; - - //allocate space for the Legendre polynomials - double Ptheta[2]; - - double cosTheta, theta; - cuDoubleComplex Us; - cuDoubleComplex UsSample; - cuDoubleComplex U; - //cuComplex Ui; - //Ui.x = 2*PI; - //Ui.y = 0.0; - cuDoubleComplex numer; - numer.x = 0.0; - cuDoubleComplex exp_numer; - cuDoubleComplex iL; - cuDoubleComplex imag; - imag.x = 0.0; imag.y = 1.0; - double realFac; - cuDoubleComplex complexFac; - double PlTheta; - double Isum = 0.0; - //float maxVal = 0; - //float val; - for(int iTheta = 0; iTheta < nSamples; iTheta++) - { - //calculate theta - theta = iTheta * dTheta + oThetaI; - cosTheta = cos(theta); - - //initialize the theta Legendre polynomial - Ptheta[0] = 1.0; - Ptheta[1] = cosTheta; - - //initialize the scattered field - Us.x = Us.y = 0.0; - iL.x = 1.0; - iL.y = 0.0; - for(int l = 0; l= cThetaI && theta <= cThetaO) - U = cAdd(Us, 2*PI); - else - U = Us; - Isum += (U.x*U.x + U.y*U.y) * sin(theta) * 2 * PI * dTheta; - } - - I[i] = Isum; -} - -void cudaComputeSpectrum(double* cpuI, double* cpuB, double* cpuAlpha, - int Nl, int nLambda, double oThetaI, double oThetaO, double cThetaI, double cThetaO, int nSamples) -{ - //copy everything to the GPU - double2* gpuB; - HANDLE_ERROR(cudaMalloc(&gpuB, sizeof(double2) * nLambda * Nl)); - HANDLE_ERROR(cudaMemcpy(gpuB, cpuB, sizeof(double2) * nLambda * Nl, cudaMemcpyHostToDevice)); - - double* gpuAlpha; - HANDLE_ERROR(cudaMalloc(&gpuAlpha, sizeof(double) * Nl)); - HANDLE_ERROR(cudaMemcpy(gpuAlpha, cpuAlpha, sizeof(double) * Nl, cudaMemcpyHostToDevice)); - - double* gpuI; - HANDLE_ERROR(cudaMalloc(&gpuI, sizeof(double) * nLambda)); - - - //call the kernel to compute the spectrum - dim3 block(BLOCK_SIZE*BLOCK_SIZE); - dim3 grid(nLambda/block.x + 1); - - //devComputeSpectrum - devComputeSpectrum<<>>(gpuI, (double2*)gpuB, gpuAlpha, Nl, - nSamples, oThetaI, oThetaO, cThetaI, cThetaO); - - HANDLE_ERROR(cudaMemcpy(cpuI, gpuI, sizeof(double) * nLambda, cudaMemcpyDeviceToHost)); - - HANDLE_ERROR(cudaFree(gpuB)); - HANDLE_ERROR(cudaFree(gpuAlpha)); - HANDLE_ERROR(cudaFree(gpuI)); - - - - +__device__ double g(double v0, double v1) +{ + return (v0 + v1)*log(abs(v0+v1)) + (v0-v1)*log(abs(v0-v1)); +} + +__device__ double hfin(double v0, double v1, double dv) +{ + double e = 0.001; + double t0 = g(v0+e, v1-dv)/dv; + double t1 = 2*g(v0+e, v1)/dv; + double t2 = g(v0+e, v1+dv)/dv; + + return -1.0/PI * (t0 - t1 + t2); +} + +__global__ void devKramersKronig(double* gpuN, double* gpuK, int numVals, double nuStart, double nuEnd, double nOffset) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + + if(i >= numVals) return; + double nuDelta = (nuEnd - nuStart)/(numVals - 1); + + double nu = nuStart + i*nuDelta; + double n = 0.0; + double jNu; + double jK; + for(int j=1; j>>(gpuN, gpuK, nVals, nuStart, nuEnd, nOffset); + + HANDLE_ERROR(cudaMemcpy(cpuN, gpuN, sizeof(double)*nVals, cudaMemcpyDeviceToHost)); + + //free resources + HANDLE_ERROR(cudaFree(gpuK)); + HANDLE_ERROR(cudaFree(gpuN)); +} + +__global__ void devComputeSpectrum(double* I, double2* B, double* alpha, int Nl, + int nSamples, double oThetaI, double oThetaO, double cThetaI, double cThetaO) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + + //compute the delta-theta value + double dTheta = (oThetaO - oThetaI)/nSamples; + + //allocate space for the Legendre polynomials + double Ptheta[2]; + + double cosTheta, theta; + cuDoubleComplex Us; + cuDoubleComplex UsSample; + cuDoubleComplex U; + //cuComplex Ui; + //Ui.x = 2*PI; + //Ui.y = 0.0; + cuDoubleComplex numer; + numer.x = 0.0; + cuDoubleComplex exp_numer; + cuDoubleComplex iL; + cuDoubleComplex imag; + imag.x = 0.0; imag.y = 1.0; + double realFac; + cuDoubleComplex complexFac; + double PlTheta; + double Isum = 0.0; + //float maxVal = 0; + //float val; + for(int iTheta = 0; iTheta < nSamples; iTheta++) + { + //calculate theta + theta = iTheta * dTheta + oThetaI; + cosTheta = cos(theta); + + //initialize the theta Legendre polynomial + Ptheta[0] = 1.0; + Ptheta[1] = cosTheta; + + //initialize the scattered field + Us.x = Us.y = 0.0; + iL.x = 1.0; + iL.y = 0.0; + for(int l = 0; l= cThetaI && theta <= cThetaO) + U = cAdd(Us, 2*PI); + else + U = Us; + Isum += (U.x*U.x + U.y*U.y) * sin(theta) * 2 * PI * dTheta; + } + + I[i] = Isum; +} + +void cudaComputeSpectrum(double* cpuI, double* cpuB, double* cpuAlpha, + int Nl, int nLambda, double oThetaI, double oThetaO, double cThetaI, double cThetaO, int nSamples) +{ + //copy everything to the GPU + double2* gpuB; + HANDLE_ERROR(cudaMalloc(&gpuB, sizeof(double2) * nLambda * Nl)); + HANDLE_ERROR(cudaMemcpy(gpuB, cpuB, sizeof(double2) * nLambda * Nl, cudaMemcpyHostToDevice)); + + double* gpuAlpha; + HANDLE_ERROR(cudaMalloc(&gpuAlpha, sizeof(double) * Nl)); + HANDLE_ERROR(cudaMemcpy(gpuAlpha, cpuAlpha, sizeof(double) * Nl, cudaMemcpyHostToDevice)); + + double* gpuI; + HANDLE_ERROR(cudaMalloc(&gpuI, sizeof(double) * nLambda)); + + + //call the kernel to compute the spectrum + dim3 block(BLOCK_SIZE*BLOCK_SIZE); + dim3 grid(nLambda/block.x + 1); + + //devComputeSpectrum + devComputeSpectrum<<>>(gpuI, (double2*)gpuB, gpuAlpha, Nl, + nSamples, oThetaI, oThetaO, cThetaI, cThetaO); + + HANDLE_ERROR(cudaMemcpy(cpuI, gpuI, sizeof(double) * nLambda, cudaMemcpyDeviceToHost)); + + HANDLE_ERROR(cudaFree(gpuB)); + HANDLE_ERROR(cudaFree(gpuAlpha)); + HANDLE_ERROR(cudaFree(gpuI)); + + + + } \ No newline at end of file diff --git a/cudaMain.cu b/cudaMain.cu index 9af99ce..7d163d6 100644 --- a/cudaMain.cu +++ b/cudaMain.cu @@ -1,61 +1,61 @@ -#include "cuComplex.h" -#include "cudaHandleError.h" - - -#define PI 3.14159 -#define BLOCK_SIZE 16 - -__device__ cuDoubleComplex cMult(cuDoubleComplex a, cuDoubleComplex b) -{ - cuDoubleComplex result; - result.x = a.x * b.x - a.y * b.y; - result.y = a.x * b.y + a.y * b.x; - - return result; -} - -__device__ cuDoubleComplex cMult(cuDoubleComplex a, float b) -{ - cuDoubleComplex result; - result.x = a.x * b; - result.y = a.y * b; - - return result; -} - -__device__ cuDoubleComplex cAdd(cuDoubleComplex a, cuDoubleComplex b) -{ - cuDoubleComplex r; - r.x = a.x + b.x; - r.y = a.y + b.y; - - return r; -} - -__device__ cuDoubleComplex cAdd(cuDoubleComplex a, float b) -{ - cuDoubleComplex r; - r.x = a.x + b; - r.y = a.y; - - return r; -} - -__device__ cuDoubleComplex cExp(cuDoubleComplex a) -{ - cuDoubleComplex r; - - r.x = exp(a.x) * cos(a.y); - r.y = exp(a.x) * sin(a.y); - - return r; -} - -__device__ double cMag(cuDoubleComplex a) -{ - double r = sqrt(a.x * a.x + a.y * a.y); - return r; -} - -#include "cudaKK.h" - +#include "cuComplex.h" +#include "cudaHandleError.h" + + +#define PI 3.14159 +#define BLOCK_SIZE 16 + +__device__ cuDoubleComplex cMult(cuDoubleComplex a, cuDoubleComplex b) +{ + cuDoubleComplex result; + result.x = a.x * b.x - a.y * b.y; + result.y = a.x * b.y + a.y * b.x; + + return result; +} + +__device__ cuDoubleComplex cMult(cuDoubleComplex a, float b) +{ + cuDoubleComplex result; + result.x = a.x * b; + result.y = a.y * b; + + return result; +} + +__device__ cuDoubleComplex cAdd(cuDoubleComplex a, cuDoubleComplex b) +{ + cuDoubleComplex r; + r.x = a.x + b.x; + r.y = a.y + b.y; + + return r; +} + +__device__ cuDoubleComplex cAdd(cuDoubleComplex a, float b) +{ + cuDoubleComplex r; + r.x = a.x + b; + r.y = a.y; + + return r; +} + +__device__ cuDoubleComplex cExp(cuDoubleComplex a) +{ + cuDoubleComplex r; + + r.x = exp(a.x) * cos(a.y); + r.y = exp(a.x) * sin(a.y); + + return r; +} + +__device__ double cMag(cuDoubleComplex a) +{ + double r = sqrt(a.x * a.x + a.y * a.y); + return r; +} + +#include "cudaKK.h" + diff --git a/eta_TolueneK.txt b/eta_TolueneK.txt index 413f138..557b71b 100644 --- a/eta_TolueneK.txt +++ b/eta_TolueneK.txt @@ -1,1601 +1,1601 @@ -800 0.00237097091817457 -802 0.00227949941219620 -804 0.00221816388191892 -806 0.00217471041775780 -808 0.00215481795727275 -810 0.00213388387011066 -812 0.00209363211698535 -814 0.00202082763908315 -816 0.00193585066178408 -818 0.00188250850160370 -820 0.00184538369212481 -822 0.00183536653704965 -824 0.00185974183080381 -826 0.00190647188683237 -828 0.00199326404385590 -830 0.00213499888469032 -832 0.00233225842027966 -834 0.00257593995310952 -836 0.00287502014227382 -838 0.00318754088914534 -840 0.00349170996961850 -842 0.00366108155160527 -844 0.00362683356184450 -846 0.00340059748640139 -848 0.00305608088262669 -850 0.00270129337895778 -852 0.00239675724637807 -854 0.00217864428240924 -856 0.00203021645685105 -858 0.00193686140678899 -860 0.00187749764181973 -862 0.00185772044069943 -864 0.00188910883086452 -866 0.00195093483930895 -868 0.00204692017755064 -870 0.00215522059478817 -872 0.00226016367314688 -874 0.00224604514385606 -876 0.00210230179408609 -878 0.00199743674523776 -880 0.00199218269491360 -882 0.00208480862951801 -884 0.00228270137034088 -886 0.00262030644370857 -888 0.00319352984551477 -890 0.00421972378192706 -892 0.00602385856914103 -894 0.00840405009274333 -896 0.00900675480510885 -898 0.00696613165618276 -900 0.00499554830114596 -902 0.00383849939561442 -904 0.00320523678732641 -906 0.00285555041538049 -908 0.00266476454212409 -910 0.00254627716354120 -912 0.00245341529587653 -914 0.00236459307673934 -916 0.00229282344387905 -918 0.00223035979386559 -920 0.00221227947671869 -922 0.00224238729804433 -924 0.00235007654381494 -926 0.00256726325953723 -928 0.00284644035247116 -930 0.00294228033320561 -932 0.00275916688965430 -934 0.00258731026217053 -936 0.00255719587176405 -938 0.00262153336828821 -940 0.00273896371051358 -942 0.00287538936255749 -944 0.00299732885131251 -946 0.00309698674175826 -948 0.00316605202547143 -950 0.00320470876397792 -952 0.00323491311445059 -954 0.00329692599734166 -956 0.00338582912769461 -958 0.00350331602393855 -960 0.00365994789379712 -962 0.00382797968742639 -964 0.00395048819829240 -966 0.00399909330987952 -968 0.00397747867047571 -970 0.00393338530466517 -972 0.00391527408455760 -974 0.00393711464406835 -976 0.00402058186620085 -978 0.00414801626311813 -980 0.00426028437517640 -982 0.00424343298749414 -984 0.00411994903649494 -986 0.00399867235513141 -988 0.00388651104937391 -990 0.00379950457370988 -992 0.00373977952014182 -994 0.00373881240280082 -996 0.00379956481032446 -998 0.00393643103780800 -1000 0.00418426742600855 -1002 0.00448366832068703 -1004 0.00421395149528264 -1006 0.00400806256602511 -1008 0.00395963930728052 -1010 0.00399586579501438 -1012 0.00412453345420230 -1014 0.00435650139468447 -1016 0.00470823294497344 -1018 0.00525652222711324 -1020 0.00620034607293144 -1022 0.00761074657742514 -1024 0.00904862587038915 -1026 0.0128420613454482 -1028 0.0232054647758307 -1030 0.0401070318402723 -1032 0.0237662509507289 -1034 0.0150900768702586 -1036 0.0136209302389719 -1038 0.0140722804433677 -1040 0.0148520038780156 -1042 0.0150418759020717 -1044 0.0142741299011939 -1046 0.0127983598294137 -1048 0.0111020250322553 -1050 0.00953886802849649 -1052 0.00823573530792714 -1054 0.00722015941851439 -1056 0.00647199198407014 -1058 0.00595450625097980 -1060 0.00562081994003704 -1062 0.00547155564647798 -1064 0.00551163119086301 -1066 0.00577378575211103 -1068 0.00633217061275026 -1070 0.00731526451760166 -1072 0.00888941764012196 -1074 0.0111936669094970 -1076 0.0145627178352916 -1078 0.0198820542781815 -1080 0.0272101442099741 -1082 0.0294763996691438 -1084 0.0207090896497001 -1086 0.0127655286195192 -1088 0.00854004269533275 -1090 0.00635526613490286 -1092 0.00518140755178082 -1094 0.00455405026737381 -1096 0.00426268956025233 -1098 0.00423510235887238 -1100 0.00446505970250814 -1102 0.00496653746864136 -1104 0.00580707926483870 -1106 0.00666740083564581 -1108 0.00624732665593806 -1110 0.00479908163793379 -1112 0.00361121925654796 -1114 0.00287942570706319 -1116 0.00246148742161380 -1118 0.00222778888171568 -1120 0.00209650525411750 -1122 0.00202121838132918 -1124 0.00199323955812561 -1126 0.00200797851417853 -1128 0.00204812470413808 -1130 0.00209417368698948 -1132 0.00209849682757402 -1134 0.00210954008712956 -1136 0.00214927272221614 -1138 0.00221781253558492 -1140 0.00231654284254776 -1142 0.00241700276584513 -1144 0.00252090482583751 -1146 0.00265926205183231 -1148 0.00286652526484237 -1150 0.00313647720191737 -1152 0.00347416081610501 -1154 0.00387661923259805 -1156 0.00410043342018308 -1158 0.00394886198110498 -1160 0.00373148843650175 -1162 0.00350494607394550 -1164 0.00334022215869222 -1166 0.00324053812759405 -1168 0.00323728249115084 -1170 0.00337030363472976 -1172 0.00370331752537631 -1174 0.00446861428672600 -1176 0.00627098368325835 -1178 0.00931078620410600 -1180 0.00795027706068620 -1182 0.00505648215885331 -1184 0.00377716421438011 -1186 0.00319136495849046 -1188 0.00290137589052677 -1190 0.00275791558623964 -1192 0.00269226681474014 -1194 0.00266088014296474 -1196 0.00258817828799466 -1198 0.00241700923017517 -1200 0.00221558969693162 -1202 0.00211217407863773 -1204 0.00220182940076526 -1206 0.00261294695511882 -1208 0.00347974535374746 -1210 0.00437930056728570 -1212 0.00342648851242818 -1214 0.00227260060290268 -1216 0.00178258728885112 -1218 0.00154392622881232 -1220 0.00139698451678244 -1222 0.00129280677379398 -1224 0.00121946854787068 -1226 0.00117184455170345 -1228 0.00113722984861070 -1230 0.00111912311009601 -1232 0.00111390956612134 -1234 0.00112443805885795 -1236 0.00115660063219376 -1238 0.00121045559427169 -1240 0.00129274578774778 -1242 0.00140396276384137 -1244 0.00154410614148823 -1246 0.00169860381220359 -1248 0.00180840115780576 -1250 0.00177688982988028 -1252 0.00157601125295148 -1254 0.00138106340282942 -1256 0.00125620905206826 -1258 0.00118717226425611 -1260 0.00114496451549449 -1262 0.00111429933337465 -1264 0.00109740533980092 -1266 0.00108967549075875 -1268 0.00109315730663637 -1270 0.00110701272913057 -1272 0.00112547293050748 -1274 0.00114417070376777 -1276 0.00115549769406343 -1278 0.00115861723477586 -1280 0.00114576824540165 -1282 0.00112307423917382 -1284 0.00110803299150391 -1286 0.00109790695605719 -1288 0.00109710433202375 -1290 0.00110698710171340 -1292 0.00113245942678089 -1294 0.00117552067320688 -1296 0.00124267198974583 -1298 0.00132277561158489 -1300 0.00139217958266282 -1302 0.00142973694885209 -1304 0.00144188181676038 -1306 0.00147541483276765 -1308 0.00159956692209740 -1310 0.00186843894759088 -1312 0.00216486082449073 -1314 0.00211728875491887 -1316 0.00187507564071290 -1318 0.00171677440706927 -1320 0.00164837511625716 -1322 0.00163899782669962 -1324 0.00166410609076352 -1326 0.00171764577889364 -1328 0.00180479473401823 -1330 0.00194274885535529 -1332 0.00206022538770732 -1334 0.00196217286057273 -1336 0.00188492778401013 -1338 0.00187122231048589 -1340 0.00188921428962955 -1342 0.00193700700412885 -1344 0.00200313353323991 -1346 0.00208778115174581 -1348 0.00218066174704292 -1350 0.00226588109762249 -1352 0.00236276913468593 -1354 0.00248915903884931 -1356 0.00265547420500685 -1358 0.00284820286383517 -1360 0.00303211548157874 -1362 0.00319538643027851 -1364 0.00338011260813816 -1366 0.00363996415682390 -1368 0.00400265764738686 -1370 0.00448976968523854 -1372 0.00525773678870123 -1374 0.00662029687278425 -1376 0.00908376119233617 -1378 0.0123031513241818 -1380 0.0121671979448086 -1382 0.00940007546463800 -1384 0.00754318150864360 -1386 0.00640356392721685 -1388 0.00563257119321882 -1390 0.00511010869784208 -1392 0.00475789415695825 -1394 0.00452833517370964 -1396 0.00440186171426137 -1398 0.00433687786700866 -1400 0.00432317844214779 -1402 0.00436175400856741 -1404 0.00444654158141412 -1406 0.00458045165701961 -1408 0.00472070193080689 -1410 0.00484730108752061 -1412 0.00499169569971829 -1414 0.00517526500052341 -1416 0.00540856165680758 -1418 0.00569301961826355 -1420 0.00603609386579061 -1422 0.00639815529754280 -1424 0.00676704333943306 -1426 0.00709702523848474 -1428 0.00735286473751553 -1430 0.00758946104003622 -1432 0.00786781701959305 -1434 0.00830202970708910 -1436 0.00898232020613486 -1438 0.0100197835148382 -1440 0.0115095063570045 -1442 0.0133985990853930 -1444 0.0153768866835411 -1446 0.0171765347348967 -1448 0.0189361099169456 -1450 0.0208245294344141 -1452 0.0228039247538198 -1454 0.0246810508004892 -1456 0.0262618411626106 -1458 0.0273608063623162 -1460 0.0277930934742346 -1462 0.0274706237226478 -1464 0.0264211185824187 -1466 0.0247980788620200 -1468 0.0228296555480849 -1470 0.0207834609064780 -1472 0.0188724652439656 -1474 0.0171801988754876 -1476 0.0157920753997752 -1478 0.0147283011159520 -1480 0.0140030494767984 -1482 0.0137569248084170 -1484 0.0141879797029108 -1486 0.0159226244331294 -1488 0.0201940578220826 -1490 0.0260836787125339 -1492 0.0401202763896059 -1494 0.0761786772950870 -1496 0.108223079178941 -1498 0.0527249260725011 -1500 0.0271635520581988 -1502 0.0173322191403291 -1504 0.0124889207648925 -1506 0.00992131298532918 -1508 0.00839752655521901 -1510 0.00745176347821015 -1512 0.00688020881374870 -1514 0.00648533490268327 -1516 0.00628100243994201 -1518 0.00629379543847072 -1520 0.00670033315002658 -1522 0.00786453088070098 -1524 0.00861000109877936 -1526 0.00697026673858113 -1528 0.00565227380276001 -1530 0.00510003019871344 -1532 0.00487330093915990 -1534 0.00477643425469498 -1536 0.00467177280329912 -1538 0.00449022432901730 -1540 0.00423934685882746 -1542 0.00393426018189818 -1544 0.00365660104528498 -1546 0.00348923385240243 -1548 0.00342710802865492 -1550 0.00346898664460405 -1552 0.00338295466527580 -1554 0.00321378452613121 -1556 0.00313430635529189 -1558 0.00316907431392649 -1560 0.00330481737182376 -1562 0.00356172011440931 -1564 0.00388898354936485 -1566 0.00429638887941885 -1568 0.00472113284868973 -1570 0.00504929184964361 -1572 0.00519286093716334 -1574 0.00509202242388202 -1576 0.00481769783190026 -1578 0.00455543799934706 -1580 0.00435935962171553 -1582 0.00433990247775519 -1584 0.00460726311748136 -1586 0.00492003737038605 -1588 0.00490704034351103 -1590 0.00492753522146188 -1592 0.00518588888004375 -1594 0.00592543183304241 -1596 0.00720757954725413 -1598 0.00912890526935344 -1600 0.0130293680056744 -1602 0.0206809953186127 -1604 0.0299953585748135 -1606 0.0248157340286292 -1608 0.0127358449020555 -1610 0.00746783575970784 -1612 0.00537209761858949 -1614 0.00445129559785390 -1616 0.00405329276394375 -1618 0.00399146289131384 -1620 0.00409659649670941 -1622 0.00425086095548363 -1624 0.00425306230534309 -1626 0.00388013491422351 -1628 0.00322765310314340 -1630 0.00259805094537761 -1632 0.00208657181154715 -1634 0.00169843933990688 -1636 0.00141785441008406 -1638 0.00123234974672297 -1640 0.00109764310439106 -1642 0.000997096490971439 -1644 0.000923943814992787 -1646 0.000867694719207358 -1648 0.000857989573211860 -1650 0.000876925837508371 -1652 0.000900483600662835 -1654 0.000924599031590994 -1656 0.000943402878947833 -1658 0.000957189946759812 -1660 0.000919301596934912 -1662 0.000829980699381760 -1664 0.000741920416434289 -1666 0.000684454640853614 -1668 0.000660487010052916 -1670 0.000677329699540855 -1672 0.000733663772686657 -1674 0.000829672252398670 -1676 0.000923202402787059 -1678 0.000900896424649981 -1680 0.000787132461270056 -1682 0.000676995955481515 -1684 0.000611701232515841 -1686 0.000595044263899243 -1688 0.000601913444772076 -1690 0.000631185451917075 -1692 0.000675093910401457 -1694 0.000731422393886708 -1696 0.000808376337564176 -1698 0.000794279618925047 -1700 0.000709354504802398 -1702 0.000657251178127169 -1704 0.000631084077034609 -1706 0.000620630016846374 -1708 0.000614804872029308 -1710 0.000610379344278778 -1712 0.000608365704329393 -1714 0.000610177708447017 -1716 0.000628060629349526 -1718 0.000671390695691186 -1720 0.000748670745348075 -1722 0.000874314265691752 -1724 0.00104123844277088 -1726 0.00123749183518020 -1728 0.00147184752955714 -1730 0.00173223404858593 -1732 0.00197582318555127 -1734 0.00215543372945357 -1736 0.00220452603076912 -1738 0.00209119301342784 -1740 0.00185700091397871 -1742 0.00156445999707629 -1744 0.00127824303920924 -1746 0.00103830550711541 -1748 0.000858082809524967 -1750 0.000736720622233361 -1752 0.000665836151632355 -1754 0.000633014507978860 -1756 0.000636204186868655 -1758 0.000664560791933513 -1760 0.000700854142871225 -1762 0.000738249770728404 -1764 0.000779473476320026 -1766 0.000831332837575542 -1768 0.000887483745995595 -1770 0.000943100942235622 -1772 0.00100855983483948 -1774 0.00108815587341361 -1776 0.00117336763806935 -1778 0.00122720647155439 -1780 0.00120867298099444 -1782 0.00117346527655232 -1784 0.00119371865588136 -1786 0.00128533671400934 -1788 0.00142590894789679 -1790 0.00158054902116715 -1792 0.00179850758319075 -1794 0.00213331852757031 -1796 0.00258371206804431 -1798 0.00310651819625664 -1800 0.00358456135015573 -1802 0.00384535056234718 -1804 0.00377208677963125 -1806 0.00340950704775298 -1808 0.00292589878928829 -1810 0.00246230467854199 -1812 0.00209503276430901 -1814 0.00185262669472132 -1816 0.00171702079169156 -1818 0.00163886439352206 -1820 0.00157730777183400 -1822 0.00149679229624579 -1824 0.00138863730310920 -1826 0.00127743508882463 -1828 0.00118456389012839 -1830 0.00112905353317808 -1832 0.00108606377735617 -1834 0.00103086061641581 -1836 0.000984959950309749 -1838 0.000979289058512249 -1840 0.00102288594610930 -1842 0.00112067935890798 -1844 0.00128394592127716 -1846 0.00152723861251123 -1848 0.00188826636609761 -1850 0.00239227576491655 -1852 0.00300971905084921 -1854 0.00364059420885185 -1856 0.00414527688649222 -1858 0.00428418417776257 -1860 0.00397341781363892 -1862 0.00343437915842565 -1864 0.00294698351848267 -1866 0.00265685216170442 -1868 0.00257554798807387 -1870 0.00262362192114651 -1872 0.00267320615475132 -1874 0.00259670566832300 -1876 0.00235341832549094 -1878 0.00201352392982882 -1880 0.00167162491751218 -1882 0.00138756730843950 -1884 0.00117032979189392 -1886 0.00101120581308014 -1888 0.000892343360827370 -1890 0.000799797724248844 -1892 0.000722584304592367 -1894 0.000668205830350704 -1896 0.000645563701038960 -1898 0.000645767881929762 -1900 0.000633984361915526 -1902 0.000588098076669510 -1904 0.000535948959936282 -1906 0.000500979831672727 -1908 0.000480503614669823 -1910 0.000475812984522745 -1912 0.000486823903968232 -1914 0.000515195500000000 -1916 0.000562568109473544 -1918 0.000630427523781356 -1920 0.000723610116430462 -1922 0.000847642176098185 -1924 0.000992789644339751 -1926 0.00114429259972093 -1928 0.00131728542788928 -1930 0.00155893716312052 -1932 0.00190373075161683 -1934 0.00237556565013185 -1936 0.00298040121387223 -1938 0.00364293200808332 -1940 0.00416589638649938 -1942 0.00433944387091247 -1944 0.00420413532397440 -1946 0.00380161374653215 -1948 0.00327719918178656 -1950 0.00282576366330091 -1952 0.00253348765310892 -1954 0.00239437526824859 -1956 0.00234603768444204 -1958 0.00232574864667046 -1960 0.00220039532483667 -1962 0.00199445232375287 -1964 0.00170495488495039 -1966 0.00137875775323702 -1968 0.00109690552229723 -1970 0.000878128994624433 -1972 0.000721601368959039 -1974 0.000617419916987627 -1976 0.000562113218832075 -1978 0.000551026292591773 -1980 0.000575711660935202 -1982 0.000615370850112472 -1984 0.000626638864213787 -1986 0.000619344762051612 -1988 0.000644972987040071 -1990 0.000691941782910493 -1992 0.000694254646432683 -1994 0.000622443290799324 -1996 0.000495200120138662 -1998 0.000402620427801543 -2000 0.000357520428000267 -2002 0.000340715817783006 -2004 0.000340725563484929 -2006 0.000349587604938024 -2008 0.000357889528657337 -2010 0.000352782837535485 -2012 0.000327904929253038 -2014 0.000298699882098499 -2016 0.000271842376811093 -2018 0.000242333037716520 -2020 0.000218337240170542 -2022 0.000199194821720737 -2024 0.000183911806628813 -2026 0.000171888258235563 -2028 0.000164785282634461 -2030 0.000164391739593814 -2032 0.000169011600820695 -2034 0.000154127618321273 -2036 0.000133850562902313 -2038 0.000121768011512588 -2040 0.000114542173977814 -2042 0.000109960714942027 -2044 0.000107324747708015 -2046 0.000105319938271901 -2048 0.000104400109927128 -2050 0.000104560803595480 -2052 0.000105682984195988 -2054 0.000107138188290709 -2056 0.000109850938702712 -2058 0.000113964387835913 -2060 0.000119159665067584 -2062 0.000125394011284327 -2064 0.000135383120416356 -2066 0.000150829077064515 -2068 0.000163896208951784 -2070 0.000158538657020860 -2072 0.000143857048326539 -2074 0.000133838990991728 -2076 0.000126082674541763 -2078 0.000119111322229434 -2080 0.000113978504701401 -2082 0.000110907574969952 -2084 0.000108574694668308 -2086 0.000105750311657561 -2088 0.000102757884920459 -2090 0.000100315348970678 -2092 9.88998809699028e-05 -2094 9.84636051990861e-05 -2096 9.86736776470892e-05 -2098 9.86832304001427e-05 -2100 9.94847029581411e-05 -2102 0.000102501492433386 -2104 0.000108578252528750 -2106 0.000117598982731806 -2108 0.000128810423312497 -2110 0.000138078130156183 -2112 0.000139894738408702 -2114 0.000140372347283306 -2116 0.000147183990385426 -2118 0.000142580842940779 -2120 0.000126124302551768 -2122 0.000119111147897455 -2124 0.000117761941379516 -2126 0.000110386213471180 -2128 0.000100586367430428 -2130 9.65127771567695e-05 -2132 9.71593180254151e-05 -2134 0.000100588542105452 -2136 0.000104481772978239 -2138 0.000107041125533866 -2140 0.000108872498221666 -2142 0.000111489568147590 -2144 0.000115451529322482 -2146 0.000120558240114413 -2148 0.000126537781071288 -2150 0.000134733619506300 -2152 0.000148643632029954 -2154 0.000172040859828778 -2156 0.000210048660817435 -2158 0.000268125741557685 -2160 0.000351069215958102 -2162 0.000450344598032358 -2164 0.000489938528699291 -2166 0.000409492796412179 -2168 0.000304387639702614 -2170 0.000235891130206754 -2172 0.000200519075056806 -2174 0.000185710828669175 -2176 0.000182424899321747 -2178 0.000187448554282292 -2180 0.000203021437757415 -2182 0.000231533383222207 -2184 0.000266979354976650 -2186 0.000274670338797065 -2188 0.000249531305296574 -2190 0.000224075465024111 -2192 0.000200276630934979 -2194 0.000177273244376758 -2196 0.000160285923199765 -2198 0.000150581068702164 -2200 0.000148630566016007 -2202 0.000159418644068291 -2204 0.000190928483551684 -2206 0.000246685640401459 -2208 0.000270254541506430 -2210 0.000222823187679136 -2212 0.000183299674920404 -2214 0.000159208446689860 -2216 0.000141367831176120 -2218 0.000133886240444937 -2220 0.000133377867922854 -2222 0.000136687110101880 -2224 0.000141595068371183 -2226 0.000145519316291541 -2228 0.000148458736825531 -2230 0.000153316938474443 -2232 0.000163253960273079 -2234 0.000178923069609914 -2236 0.000194257120755014 -2238 0.000196450490452201 -2240 0.000188281502894665 -2242 0.000182547056123856 -2244 0.000184193400303698 -2246 0.000192794200162931 -2248 0.000207468879582850 -2250 0.000228635659533982 -2252 0.000256821954754517 -2254 0.000293238050530334 -2256 0.000339843587945316 -2258 0.000394697192716897 -2260 0.000433841600455809 -2262 0.000418808222045475 -2264 0.000365652480977041 -2266 0.000317992842743265 -2268 0.000289251978678528 -2270 0.000276323460348606 -2272 0.000276007776761593 -2274 0.000285194711508216 -2276 0.000305840459677383 -2278 0.000341614672459952 -2280 0.000378323694871339 -2282 0.000375183465200990 -2284 0.000372499291886178 -2286 0.000379130457959152 -2288 0.000369071052928138 -2290 0.000344203099796142 -2292 0.000313724278864159 -2294 0.000283180068926335 -2296 0.000260398235921227 -2298 0.000248364444837745 -2300 0.000246962256014277 -2302 0.000257337196851115 -2304 0.000282117167464228 -2306 0.000327011660272884 -2308 0.000402901410624785 -2310 0.000515678907419335 -2312 0.000613221545587734 -2314 0.000587317319167494 -2316 0.000479703817387008 -2318 0.000387543339108333 -2320 0.000331935579008350 -2322 0.000305882244139694 -2324 0.000301743073919341 -2326 0.000318021837096887 -2328 0.000360763254301904 -2330 0.000442864766710211 -2332 0.000580146273004247 -2334 0.000746878008138738 -2336 0.000778905767997363 -2338 0.000655878707879373 -2340 0.000549860316308082 -2342 0.000474310426764780 -2344 0.000414796574428013 -2346 0.000384139069758195 -2348 0.000382158356339707 -2350 0.000402158338733409 -2352 0.000435516153586227 -2354 0.000472182760873504 -2356 0.000515961034751272 -2358 0.000592576004516974 -2360 0.000693206523120231 -2362 0.000643638218785556 -2364 0.000478341631402279 -2366 0.000369914098808752 -2368 0.000314093467617302 -2370 0.000287309303030045 -2372 0.000274524402561852 -2374 0.000270061869985669 -2376 0.000271829601590763 -2378 0.000279194809335497 -2380 0.000294905061876556 -2382 0.000319347534507768 -2384 0.000350241467027989 -2386 0.000391786089197638 -2388 0.000432288381112108 -2390 0.000431894838874137 -2392 0.000400306861211915 -2394 0.000373780803138032 -2396 0.000355410966982535 -2398 0.000347151739593354 -2400 0.000350924151462325 -2402 0.000365706536144189 -2404 0.000389705426960732 -2406 0.000421334803876133 -2408 0.000459934423654906 -2410 0.000500616815279102 -2412 0.000525702627325844 -2414 0.000513223543953278 -2416 0.000478247500654749 -2418 0.000439595749420076 -2420 0.000399407179067621 -2422 0.000365631853681067 -2424 0.000342099304419797 -2426 0.000327643185447820 -2428 0.000319852482413628 -2430 0.000318090248146717 -2432 0.000318226888962093 -2434 0.000307017564256603 -2436 0.000284561022911212 -2438 0.000265983112770141 -2440 0.000252937611403322 -2442 0.000242679401171322 -2444 0.000236093051616947 -2446 0.000233130690914760 -2448 0.000233167378896135 -2450 0.000235415965609999 -2452 0.000239364304311204 -2454 0.000244209499641596 -2456 0.000248579466181052 -2458 0.000251144773278908 -2460 0.000252431049719579 -2462 0.000253691712617762 -2464 0.000255788005476147 -2466 0.000256434321853842 -2468 0.000251072591655402 -2470 0.000241597521259849 -2472 0.000234162117014666 -2474 0.000229676856991507 -2476 0.000227592143774873 -2478 0.000226834091088810 -2480 0.000227168703547583 -2482 0.000228588584217583 -2484 0.000231746296813716 -2486 0.000236823965966075 -2488 0.000241600139160114 -2490 0.000244394482975018 -2492 0.000244248137929474 -2494 0.000245127828260994 -2496 0.000251434891521320 -2498 0.000247993851620619 -2500 0.000232735996433491 -2502 0.000222497793867323 -2504 0.000221589422451279 -2506 0.000232579945681551 -2508 0.000250427153657126 -2510 0.000252498000507853 -2512 0.000232189718802120 -2514 0.000211050185590214 -2516 0.000198391157226399 -2518 0.000193635707688150 -2520 0.000193341820452081 -2522 0.000193371593068733 -2524 0.000189643081211288 -2526 0.000181794690676754 -2528 0.000178838464388285 -2530 0.000183501803348288 -2532 0.000194837096053966 -2534 0.000211327514566071 -2536 0.000231393834808824 -2538 0.000255837394665623 -2540 0.000275709996672117 -2542 0.000266055047783776 -2544 0.000243859757637041 -2546 0.000235285437161138 -2548 0.000236304976186297 -2550 0.000232544359689715 -2552 0.000218806075082454 -2554 0.000204743746363893 -2556 0.000196655427865349 -2558 0.000191976123078746 -2560 0.000186392842736032 -2562 0.000182465243677096 -2564 0.000182341770175991 -2566 0.000186622668096877 -2568 0.000194771585308041 -2570 0.000207509200230819 -2572 0.000227536779149540 -2574 0.000256126025913237 -2576 0.000293783533966409 -2578 0.000344606705405512 -2580 0.000421000900491490 -2582 0.000539940417278290 -2584 0.000691325137774485 -2586 0.000768064347900480 -2588 0.000684349300000000 -2590 0.000536495643153772 -2592 0.000418107936641488 -2594 0.000348162932430616 -2596 0.000316562063243598 -2598 0.000311605992448936 -2600 0.000329718943031756 -2602 0.000370011429187919 -2604 0.000412184734144213 -2606 0.000402481978671523 -2608 0.000368470211663778 -2610 0.000353398410510846 -2612 0.000328281593188018 -2614 0.000295400882956194 -2616 0.000275902521470556 -2618 0.000268299167514448 -2620 0.000267511791747167 -2622 0.000270974116559811 -2624 0.000277238419508473 -2626 0.000286763887252883 -2628 0.000300107477286003 -2630 0.000316524811935304 -2632 0.000327263381122722 -2634 0.000305877054698251 -2636 0.000269148133708810 -2638 0.000248172907618610 -2640 0.000239823700606054 -2642 0.000238746030638882 -2644 0.000239868631298371 -2646 0.000237697572301885 -2648 0.000231658620506580 -2650 0.000224559727594560 -2652 0.000220154792342943 -2654 0.000220025182909045 -2656 0.000220821585838385 -2658 0.000219097069889182 -2660 0.000213668868513552 -2662 0.000206551642880241 -2664 0.000200132874030954 -2666 0.000198263371264169 -2668 0.000204157476079366 -2670 0.000219581959345431 -2672 0.000228529275997830 -2674 0.000212671171569940 -2676 0.000198554340066309 -2678 0.000193733620852842 -2680 0.000194427317307389 -2682 0.000197546011671515 -2684 0.000200581527813713 -2686 0.000203985348880727 -2688 0.000208935024070450 -2690 0.000213885837983080 -2692 0.000215780646355564 -2694 0.000215167439140776 -2696 0.000214895725221701 -2698 0.000217360387387823 -2700 0.000222623944199778 -2702 0.000229950531867105 -2704 0.000237779651458241 -2706 0.000247270953949545 -2708 0.000260083526905394 -2710 0.000275286056335416 -2712 0.000293138008774478 -2714 0.000315098638979930 -2716 0.000342140022611386 -2718 0.000376355762584957 -2720 0.000422618703820090 -2722 0.000488803228667163 -2724 0.000585387059813060 -2726 0.000728318801443707 -2728 0.000938827018235910 -2730 0.00123037571269695 -2732 0.00155229568740433 -2734 0.00172266995984292 -2736 0.00158429227183195 -2738 0.00126235409603059 -2740 0.000954219558161654 -2742 0.000733284051680574 -2744 0.000590574186925838 -2746 0.000500913503228797 -2748 0.000444283569806984 -2750 0.000408552058896459 -2752 0.000386442879562956 -2754 0.000373264157615818 -2756 0.000366670327661857 -2758 0.000363876514149830 -2760 0.000361532536949891 -2762 0.000363675314741141 -2764 0.000366718711717702 -2766 0.000373487709343178 -2768 0.000385907143020104 -2770 0.000398462101615587 -2772 0.000413801469177668 -2774 0.000425659990486031 -2776 0.000436402382617843 -2778 0.000446662734946199 -2780 0.000455121187378285 -2782 0.000464083631949392 -2784 0.000471837814603525 -2786 0.000485996560282024 -2788 0.000502172804216709 -2790 0.000522830212064553 -2792 0.000548289451554969 -2794 0.000579634288120943 -2796 0.000611379237870225 -2798 0.000641158616950349 -2800 0.000672247209660977 -2802 0.000711615716417748 -2804 0.000756204442404881 -2806 0.000806513382136127 -2808 0.000854383801707436 -2810 0.000899046135928726 -2812 0.000920533253907859 -2814 0.000922946174823163 -2816 0.000938823165339874 -2818 0.000975854382639431 -2820 0.00103794809306155 -2822 0.00111441105526966 -2824 0.00117124310275486 -2826 0.00120584112843460 -2828 0.00126141309789025 -2830 0.00134778284367920 -2832 0.00146199663837007 -2834 0.00159718851386329 -2836 0.00175330338362696 -2838 0.00193523559724759 -2840 0.00214829304268432 -2842 0.00239693861672905 -2844 0.00270947510257679 -2846 0.00308962037090872 -2848 0.00355940585209848 -2850 0.00412210422108316 -2852 0.00476891854151234 -2854 0.00547214050611261 -2856 0.00617409172881556 -2858 0.00678722786702444 -2860 0.00723807939551757 -2862 0.00752048939258356 -2864 0.00769405118384194 -2866 0.00780672387589873 -2868 0.00789211778455793 -2870 0.00795935754077555 -2872 0.00799733164350610 -2874 0.00795934759033912 -2876 0.00778684233057949 -2878 0.00748513477927108 -2880 0.00712782450019760 -2882 0.00674716793892496 -2884 0.00636559086703165 -2886 0.00600252759803496 -2888 0.00568003469443299 -2890 0.00541869257628554 -2892 0.00523149924308805 -2894 0.00513859281992941 -2896 0.00514912231818864 -2898 0.00528298553786387 -2900 0.00554846488279469 -2902 0.00596670745150011 -2904 0.00656025912947429 -2906 0.00737309118502326 -2908 0.00844343143196328 -2910 0.00980783562233305 -2912 0.0114361820721680 -2914 0.0132043723140582 -2916 0.0148639399258050 -2918 0.0160322637171387 -2920 0.0163848402191419 -2922 0.0159315596024990 -2924 0.0149712224125917 -2926 0.0138179195741240 -2928 0.0126830001717222 -2930 0.0117051760061400 -2932 0.0109454119425227 -2934 0.0104094926683649 -2936 0.0100777464854532 -2938 0.00991576239015874 -2940 0.00989092758914217 -2942 0.00995253861794336 -2944 0.0100558436016283 -2946 0.0101466649820268 -2948 0.0101700911447294 -2950 0.0100970420129300 -2952 0.00995445488065370 -2954 0.00977184847019253 -2956 0.00956031409076577 -2958 0.00931672833064324 -2960 0.00900841342025127 -2962 0.00860452512496009 -2964 0.00819173199579369 -2966 0.00793188379052879 -2968 0.00787856977180025 -2970 0.00795406658370171 -2972 0.00807021356855313 -2974 0.00817433984043233 -2976 0.00825003493744345 -2978 0.00828855603001654 -2980 0.00828386290179407 -2982 0.00816950979044141 -2984 0.00795147116279175 -2986 0.00771875813248752 -2988 0.00752177579743462 -2990 0.00739482968641806 -2992 0.00735495102785436 -2994 0.00742400805444368 -2996 0.00762947734762659 -2998 0.00800350176450487 -3000 0.00849881078288103 -3002 0.00896624168638865 -3004 0.00925040248900867 -3006 0.00945455630611128 -3008 0.00976581762927042 -3010 0.0103150719126273 -3012 0.0112091641279662 -3014 0.0125665741882334 -3016 0.0144920310150755 -3018 0.0171523311364697 -3020 0.0206588071576588 -3022 0.0247927573582982 -3024 0.0285338257471566 -3026 0.0305737428191527 -3028 0.0304197730378849 -3030 0.0285285708945381 -3032 0.0254626182993726 -3034 0.0218417847555673 -3036 0.0183214780469989 -3038 0.0154367262434714 -3040 0.0134174271105468 -3042 0.0121814306436623 -3044 0.0114802419869786 -3046 0.0111082334096508 -3048 0.0110364952795097 -3050 0.0112341213861221 -3052 0.0116521403194674 -3054 0.0121679353995795 -3056 0.0126492093791370 -3058 0.0130640240273400 -3060 0.0134217837485980 -3062 0.0136027351521215 -3064 0.0133566760196114 -3066 0.0124957830807641 -3068 0.0111185801076637 -3070 0.00962312187980008 -3072 0.00840019013916095 -3074 0.00762785975903174 -3076 0.00731431659052294 -3078 0.00742769361429674 -3080 0.00800169947155848 -3082 0.00909924810606661 -3084 0.0105612984915747 -3086 0.0115953458981882 -3088 0.0108915516715014 -3090 0.00855348266587572 -3092 0.00625766310903960 -3094 0.00474250996240750 -3096 0.00389487972553113 -3098 0.00350242093033435 -3100 0.00342566123955596 -3102 0.00354245491578370 -3104 0.00366329979669444 -3106 0.00351255659174282 -3108 0.00307160622386024 -3110 0.00262319086310484 -3112 0.00230238895472291 -3114 0.00208330628877116 -3116 0.00190296000440166 -3118 0.00170124594674715 -3120 0.00147221774746264 -3122 0.00126680203340060 -3124 0.00110221512874358 -3126 0.000972843085744223 -3128 0.000865976217229730 -3130 0.000787123046176519 -3132 0.000725569824317256 -3134 0.000678619961272403 -3136 0.000643376054198741 -3138 0.000613508276940799 -3140 0.000585754400051242 -3142 0.000561171104171409 -3144 0.000538801514536514 -3146 0.000520080512301793 -3148 0.000505696831504068 -3150 0.000493470880103411 -3152 0.000480268222246598 -3154 0.000470385004364871 -3156 0.000459220112914975 -3158 0.000450945450269378 -3160 0.000450827328828143 -3162 0.000455120896574839 -3164 0.000465883832863404 -3166 0.000478798660924222 -3168 0.000482832083650923 -3170 0.000455625596338195 -3172 0.000403338720059331 -3174 0.000360438306588196 -3176 0.000332520864586029 -3178 0.000313938694862586 -3180 0.000300705768353348 -3182 0.000290665831960273 -3184 0.000282478444260369 -3186 0.000275747274780963 -3188 0.000269274452306063 -3190 0.000262630704721266 -3192 0.000255445037852355 -3194 0.000248377973867383 -3196 0.000241977580841794 -3198 0.000236251689540068 -3200 0.000230923454004864 -3202 0.000226049100105626 -3204 0.000221226160126354 -3206 0.000214716060376866 -3208 0.000206517982920749 -3210 0.000198104526951019 -3212 0.000190353242003341 -3214 0.000183841618071712 -3216 0.000178536526886377 -3218 0.000173732996508941 -3220 0.000169365792718528 -3222 0.000165299675350027 -3224 0.000161252739783070 -3226 0.000157550287906591 -3228 0.000154290860671044 -3230 0.000151403187559336 -3232 0.000148762116611554 -3234 0.000146608972658800 -3236 0.000144929084687115 -3238 0.000143621190469325 -3240 0.000142423755040669 -3242 0.000141225309365069 -3244 0.000139879705280103 -3246 0.000138120388481842 -3248 0.000136557609027687 -3250 0.000135029965649156 -3252 0.000133891483928728 -3254 0.000133096425324259 -3256 0.000132368577771128 -3258 0.000131178881840028 -3260 0.000129611032335659 -3262 0.000128050800000000 -3264 0.000126496752229370 -3266 0.000125487476864466 -3268 0.000124918363511663 -3270 0.000124282902673504 -3272 0.000123524889665480 -3274 0.000122442491776109 -3276 0.000121443655497364 -3278 0.000120760252331750 -3280 0.000120133235127335 -3282 0.000119422774440518 -3284 0.000118787091342885 -3286 0.000118050006014353 -3288 0.000117490615311207 -3290 0.000116940876538515 -3292 0.000116411722780357 -3294 0.000116040811167173 -3296 0.000115834700717885 -3298 0.000116085966839459 -3300 0.000116986523436758 -3302 0.000118267730379294 -3304 0.000119505403103670 -3306 0.000120364280297837 -3308 0.000119982615737227 -3310 0.000118961448074642 -3312 0.000117873723711904 -3314 0.000117091085003690 -3316 0.000116576391297391 -3318 0.000116630812029799 -3320 0.000116648622872189 -3322 0.000116640410140475 -3324 0.000116601640984688 -3326 0.000116254038453171 -3328 0.000115188264691018 -3330 0.000113811841076524 -3332 0.000111681446514179 -3334 0.000108818040972509 -3336 0.000105958252604406 -3338 0.000103151741537451 -3340 0.000100395217441575 -3342 9.80332064093372e-05 -3344 9.53544349575209e-05 -3346 9.25223256784850e-05 -3348 9.00829101787277e-05 -3350 8.83163531062304e-05 -3352 8.72118771260860e-05 -3354 8.64440098119140e-05 -3356 8.60520504254794e-05 -3358 8.61965597139509e-05 -3360 8.70019144324470e-05 -3362 8.83318478317726e-05 -3364 9.00079714359512e-05 -3366 9.23139048671722e-05 -3368 9.50882502511675e-05 -3370 9.78832163580005e-05 -3372 0.000100096171211192 -3374 0.000102179086616863 -3376 0.000103749608742208 -3378 0.000105213237160669 -3380 0.000106688938713341 -3382 0.000107853667399164 -3384 0.000108503663896066 -3386 0.000108465998629706 -3388 0.000107522134166390 -3390 0.000105586354148376 -3392 0.000103099282581304 -3394 0.000100324257650923 -3396 9.74485799284953e-05 -3398 9.51596059704078e-05 -3400 9.35013107298140e-05 -3402 9.21170196430098e-05 -3404 9.07360614712649e-05 -3406 8.91138931604199e-05 -3408 8.74505590276362e-05 -3410 8.56664975562433e-05 -3412 8.43848055968202e-05 -3414 8.35095737363273e-05 -3416 8.28173663218536e-05 -3418 8.25803390851867e-05 -3420 8.34887031217918e-05 -3422 8.50941717249168e-05 -3424 8.76826565386191e-05 -3426 9.18893425240818e-05 -3428 9.72727573628125e-05 -3430 0.000103498414055259 -3432 0.000110175431772886 -3434 0.000116489353052258 -3436 0.000121652113320222 -3438 0.000125199891677689 -3440 0.000126017012084730 -3442 0.000123363542579961 -3444 0.000118359425974797 -3446 0.000111284305442118 -3448 0.000102049297013716 -3450 9.29060570294263e-05 -3452 8.56830126047782e-05 -3454 8.03943044406067e-05 -3456 7.64946805035534e-05 -3458 7.35384095568400e-05 -3460 7.15607792666279e-05 -3462 7.00113147312602e-05 -3464 6.86840886320734e-05 -3466 6.76516046709459e-05 -3468 6.66317002099573e-05 -3470 6.58163245627029e-05 -3472 6.48526803819241e-05 -3474 6.41769150098627e-05 -3476 6.33519637219242e-05 -3478 6.21036964756407e-05 -3480 6.07594134549892e-05 -3482 5.99888706228529e-05 -3484 5.95355056229478e-05 -3486 5.98196476615315e-05 -3488 6.07067305157839e-05 -3490 6.20707024404776e-05 -3492 6.35630004076309e-05 -3494 6.39802692410745e-05 -3496 6.36894878745265e-05 -3498 6.27365377476382e-05 -3500 6.17431130904710e-05 -3502 6.13279727787810e-05 -3504 6.13193515749704e-05 -3506 6.24903413403870e-05 -3508 6.43864144265415e-05 -3510 6.71410924962580e-05 -3512 7.03539058487688e-05 -3514 7.47946182109209e-05 -3516 7.95754496113107e-05 -3518 8.34700851824913e-05 -3520 8.39873348467991e-05 -3522 8.07272560865977e-05 -3524 7.56312308938946e-05 -3526 7.10894728276635e-05 -3528 6.81632208726418e-05 -3530 6.64216930115337e-05 -3532 6.58132280866232e-05 -3534 6.67321753128692e-05 -3536 6.94647085013537e-05 -3538 7.44308734240544e-05 -3540 8.16543395123198e-05 -3542 9.03200858171377e-05 -3544 9.85535954298993e-05 -3546 0.000104547035052111 -3548 0.000107433770750519 -3550 0.000108038450708995 -3552 0.000107166592996916 -3554 0.000105178798896553 -3556 0.000101095184756009 -3558 9.50814999627662e-05 -3560 8.82058228394490e-05 -3562 8.18208514354733e-05 -3564 7.68850700845907e-05 -3566 7.38744666163043e-05 -3568 7.27642291486909e-05 -3570 7.33994731408140e-05 -3572 7.56627166220080e-05 -3574 7.96660140607364e-05 -3576 8.51090055206606e-05 -3578 9.29167699145132e-05 -3580 0.000102526366929820 -3582 0.000114877275226176 -3584 0.000126190559302250 -3586 0.000124628073841470 -3588 0.000119415520864134 -3590 0.000112006712936662 -3592 0.000105579072932928 -3594 0.000100691596209911 -3596 9.80454508807073e-05 -3598 9.79289585249404e-05 -3600 9.76517090509766e-05 -3602 9.63252158538093e-05 -3604 9.47873503300014e-05 -3606 9.40807594813255e-05 -3608 9.38724750866359e-05 -3610 9.46504942395723e-05 -3612 9.80150733458878e-05 -3614 0.000104630751802908 -3616 0.000115783489148453 -3618 0.000130667214647273 -3620 0.000146477404898454 -3622 0.000158530547818508 -3624 0.000162318596543099 -3626 0.000158125871191841 -3628 0.000150672245587412 -3630 0.000144549679683140 -3632 0.000142051097385185 -3634 0.000145529942933542 -3636 0.000153343488815115 -3638 0.000167576397035396 -3640 0.000187305749491179 -3642 0.000211282337261951 -3644 0.000235521019158824 -3646 0.000255526042383438 -3648 0.000267309387292886 -3650 0.000267620489558132 -3652 0.000257281965913234 -3654 0.000238427431722088 -3656 0.000215910141107563 -3658 0.000194198641163347 -3660 0.000175915805990763 -3662 0.000162335012119966 -3664 0.000152841199834750 -3666 0.000146981907091703 -3668 0.000143997827610619 -3670 0.000143648436802218 -3672 0.000144734329787788 -3674 0.000145900823579283 -3676 0.000145536357339105 -3678 0.000142791335633658 -3680 0.000138712508096908 -3682 0.000133854756804407 -3684 0.000128953007630511 -3686 0.000123724720918296 -3688 0.000118053544364748 -3690 0.000112538647366327 -3692 0.000108762709162428 -3694 0.000106869096858975 -3696 0.000106178550226360 -3698 0.000108026299705946 -3700 0.000113499289845608 -3702 0.000122346067036449 -3704 0.000132017367154307 -3706 0.000138204981263169 -3708 0.000137812952692201 -3710 0.000131957371338105 -3712 0.000124911657013813 -3714 0.000120086480186131 -3716 0.000119368867384451 -3718 0.000123023160227338 -3720 0.000129681526292498 -3722 0.000136685573712829 -3724 0.000140355687154432 -3726 0.000137643004943763 -3728 0.000130059156127694 -3730 0.000121898190215580 -3732 0.000115279209639364 -3734 0.000109785664308487 -3736 0.000105299764060944 -3738 0.000101063203615323 -3740 9.68651180755000e-05 -3742 9.31808749176699e-05 -3744 9.10149507453584e-05 -3746 8.98056206735940e-05 -3748 8.93161375554986e-05 -3750 8.95680290795053e-05 -3752 9.07085327291721e-05 -3754 9.23144122730348e-05 -3756 9.51698234276085e-05 -3758 9.88200437936328e-05 -3760 0.000102897737658181 -3762 0.000106541912714358 -3764 0.000108638955977754 -3766 0.000107125969211894 -3768 0.000104745321090008 -3770 0.000104907149891996 -3772 0.000107524035997495 -3774 0.000112565658169961 -3776 0.000120128967951347 -3778 0.000130377699611365 -3780 0.000143388258757916 -3782 0.000157827987118552 -3784 0.000171336843948261 -3786 0.000178285748324712 -3788 0.000174781489954516 -3790 0.000164121439128089 -3792 0.000152610210570708 -3794 0.000144162759638053 -3796 0.000139239462639203 -3798 0.000137792736182703 -3800 0.000140104567703810 -3802 0.000145422058851258 -3804 0.000152835113748305 -3806 0.000161127793420174 -3808 0.000168581867788859 -3810 0.000173330279437380 -3812 0.000175195783104517 -3814 0.000174404180004515 -3816 0.000172977411115116 -3818 0.000172632535041757 -3820 0.000174761333878933 -3822 0.000179015946250825 -3824 0.000183474569007118 -3826 0.000187609784690581 -3828 0.000192418303544244 -3830 0.000199638672160316 -3832 0.000209346193913544 -3834 0.000221078085152779 -3836 0.000233276912915708 -3838 0.000243302212259793 -3840 0.000248219562860653 -3842 0.000249318750764567 -3844 0.000250161224209589 -3846 0.000251130509086889 -3848 0.000250954031996911 -3850 0.000247448125111366 -3852 0.000239298068537633 -3854 0.000227630000846504 -3856 0.000215807191993378 -3858 0.000207046517196079 -3860 0.000202157638401237 -3862 0.000202101096220524 -3864 0.000206089427126992 -3866 0.000212972794266054 -3868 0.000220069608188463 -3870 0.000223160954785535 -3872 0.000217701230702324 -3874 0.000205680240569784 -3876 0.000194071196201460 -3878 0.000186624022776833 -3880 0.000183260750499541 -3882 0.000183370917787493 -3884 0.000186002682616268 -3886 0.000190704000843751 -3888 0.000195753159488382 -3890 0.000199899173040718 -3892 0.000202664798143917 -3894 0.000204320562044854 -3896 0.000204971280265517 -3898 0.000204184602522533 -3900 0.000202879694728580 -3902 0.000202091110448804 -3904 0.000203200507821011 -3906 0.000206777694070363 -3908 0.000212730193424292 -3910 0.000215758904170297 -3912 0.000211571330269805 -3914 0.000205958146733392 -3916 0.000202885902366098 -3918 0.000203859899346076 -3920 0.000208043821414469 -3922 0.000213749060271441 -3924 0.000216258022232613 -3926 0.000210993095532934 -3928 0.000200360509814737 -3930 0.000190403984953153 -3932 0.000185294952858894 -3934 0.000184723195717293 -3936 0.000186124269760876 -3938 0.000187274520079713 -3940 0.000189148765118607 -3942 0.000191266181204903 -3944 0.000194823747520104 -3946 0.000199962536960736 -3948 0.000206117700447747 -3950 0.000211964821297933 -3952 0.000211771907916455 -3954 0.000207210064931517 -3956 0.000200358454677226 -3958 0.000194986979879340 -3960 0.000191410166101308 -3962 0.000188811490516811 -3964 0.000186954388139908 -3966 0.000184972375095875 -3968 0.000183218705269115 -3970 0.000181796902747989 -3972 0.000181759132648531 -3974 0.000184824282283672 -3976 0.000192623374739583 -3978 0.000205576802325497 -3980 0.000216734030830589 -3982 0.000209196916619900 -3984 0.000193026471982283 -3986 0.000183362654697217 -3988 0.000180228706844783 -3990 0.000181565573496817 -3992 0.000186254988451223 -3994 0.000193691373041908 -3996 0.000204148918879724 -3998 0.000217163156382698 +800 0.00237097091817457 +802 0.00227949941219620 +804 0.00221816388191892 +806 0.00217471041775780 +808 0.00215481795727275 +810 0.00213388387011066 +812 0.00209363211698535 +814 0.00202082763908315 +816 0.00193585066178408 +818 0.00188250850160370 +820 0.00184538369212481 +822 0.00183536653704965 +824 0.00185974183080381 +826 0.00190647188683237 +828 0.00199326404385590 +830 0.00213499888469032 +832 0.00233225842027966 +834 0.00257593995310952 +836 0.00287502014227382 +838 0.00318754088914534 +840 0.00349170996961850 +842 0.00366108155160527 +844 0.00362683356184450 +846 0.00340059748640139 +848 0.00305608088262669 +850 0.00270129337895778 +852 0.00239675724637807 +854 0.00217864428240924 +856 0.00203021645685105 +858 0.00193686140678899 +860 0.00187749764181973 +862 0.00185772044069943 +864 0.00188910883086452 +866 0.00195093483930895 +868 0.00204692017755064 +870 0.00215522059478817 +872 0.00226016367314688 +874 0.00224604514385606 +876 0.00210230179408609 +878 0.00199743674523776 +880 0.00199218269491360 +882 0.00208480862951801 +884 0.00228270137034088 +886 0.00262030644370857 +888 0.00319352984551477 +890 0.00421972378192706 +892 0.00602385856914103 +894 0.00840405009274333 +896 0.00900675480510885 +898 0.00696613165618276 +900 0.00499554830114596 +902 0.00383849939561442 +904 0.00320523678732641 +906 0.00285555041538049 +908 0.00266476454212409 +910 0.00254627716354120 +912 0.00245341529587653 +914 0.00236459307673934 +916 0.00229282344387905 +918 0.00223035979386559 +920 0.00221227947671869 +922 0.00224238729804433 +924 0.00235007654381494 +926 0.00256726325953723 +928 0.00284644035247116 +930 0.00294228033320561 +932 0.00275916688965430 +934 0.00258731026217053 +936 0.00255719587176405 +938 0.00262153336828821 +940 0.00273896371051358 +942 0.00287538936255749 +944 0.00299732885131251 +946 0.00309698674175826 +948 0.00316605202547143 +950 0.00320470876397792 +952 0.00323491311445059 +954 0.00329692599734166 +956 0.00338582912769461 +958 0.00350331602393855 +960 0.00365994789379712 +962 0.00382797968742639 +964 0.00395048819829240 +966 0.00399909330987952 +968 0.00397747867047571 +970 0.00393338530466517 +972 0.00391527408455760 +974 0.00393711464406835 +976 0.00402058186620085 +978 0.00414801626311813 +980 0.00426028437517640 +982 0.00424343298749414 +984 0.00411994903649494 +986 0.00399867235513141 +988 0.00388651104937391 +990 0.00379950457370988 +992 0.00373977952014182 +994 0.00373881240280082 +996 0.00379956481032446 +998 0.00393643103780800 +1000 0.00418426742600855 +1002 0.00448366832068703 +1004 0.00421395149528264 +1006 0.00400806256602511 +1008 0.00395963930728052 +1010 0.00399586579501438 +1012 0.00412453345420230 +1014 0.00435650139468447 +1016 0.00470823294497344 +1018 0.00525652222711324 +1020 0.00620034607293144 +1022 0.00761074657742514 +1024 0.00904862587038915 +1026 0.0128420613454482 +1028 0.0232054647758307 +1030 0.0401070318402723 +1032 0.0237662509507289 +1034 0.0150900768702586 +1036 0.0136209302389719 +1038 0.0140722804433677 +1040 0.0148520038780156 +1042 0.0150418759020717 +1044 0.0142741299011939 +1046 0.0127983598294137 +1048 0.0111020250322553 +1050 0.00953886802849649 +1052 0.00823573530792714 +1054 0.00722015941851439 +1056 0.00647199198407014 +1058 0.00595450625097980 +1060 0.00562081994003704 +1062 0.00547155564647798 +1064 0.00551163119086301 +1066 0.00577378575211103 +1068 0.00633217061275026 +1070 0.00731526451760166 +1072 0.00888941764012196 +1074 0.0111936669094970 +1076 0.0145627178352916 +1078 0.0198820542781815 +1080 0.0272101442099741 +1082 0.0294763996691438 +1084 0.0207090896497001 +1086 0.0127655286195192 +1088 0.00854004269533275 +1090 0.00635526613490286 +1092 0.00518140755178082 +1094 0.00455405026737381 +1096 0.00426268956025233 +1098 0.00423510235887238 +1100 0.00446505970250814 +1102 0.00496653746864136 +1104 0.00580707926483870 +1106 0.00666740083564581 +1108 0.00624732665593806 +1110 0.00479908163793379 +1112 0.00361121925654796 +1114 0.00287942570706319 +1116 0.00246148742161380 +1118 0.00222778888171568 +1120 0.00209650525411750 +1122 0.00202121838132918 +1124 0.00199323955812561 +1126 0.00200797851417853 +1128 0.00204812470413808 +1130 0.00209417368698948 +1132 0.00209849682757402 +1134 0.00210954008712956 +1136 0.00214927272221614 +1138 0.00221781253558492 +1140 0.00231654284254776 +1142 0.00241700276584513 +1144 0.00252090482583751 +1146 0.00265926205183231 +1148 0.00286652526484237 +1150 0.00313647720191737 +1152 0.00347416081610501 +1154 0.00387661923259805 +1156 0.00410043342018308 +1158 0.00394886198110498 +1160 0.00373148843650175 +1162 0.00350494607394550 +1164 0.00334022215869222 +1166 0.00324053812759405 +1168 0.00323728249115084 +1170 0.00337030363472976 +1172 0.00370331752537631 +1174 0.00446861428672600 +1176 0.00627098368325835 +1178 0.00931078620410600 +1180 0.00795027706068620 +1182 0.00505648215885331 +1184 0.00377716421438011 +1186 0.00319136495849046 +1188 0.00290137589052677 +1190 0.00275791558623964 +1192 0.00269226681474014 +1194 0.00266088014296474 +1196 0.00258817828799466 +1198 0.00241700923017517 +1200 0.00221558969693162 +1202 0.00211217407863773 +1204 0.00220182940076526 +1206 0.00261294695511882 +1208 0.00347974535374746 +1210 0.00437930056728570 +1212 0.00342648851242818 +1214 0.00227260060290268 +1216 0.00178258728885112 +1218 0.00154392622881232 +1220 0.00139698451678244 +1222 0.00129280677379398 +1224 0.00121946854787068 +1226 0.00117184455170345 +1228 0.00113722984861070 +1230 0.00111912311009601 +1232 0.00111390956612134 +1234 0.00112443805885795 +1236 0.00115660063219376 +1238 0.00121045559427169 +1240 0.00129274578774778 +1242 0.00140396276384137 +1244 0.00154410614148823 +1246 0.00169860381220359 +1248 0.00180840115780576 +1250 0.00177688982988028 +1252 0.00157601125295148 +1254 0.00138106340282942 +1256 0.00125620905206826 +1258 0.00118717226425611 +1260 0.00114496451549449 +1262 0.00111429933337465 +1264 0.00109740533980092 +1266 0.00108967549075875 +1268 0.00109315730663637 +1270 0.00110701272913057 +1272 0.00112547293050748 +1274 0.00114417070376777 +1276 0.00115549769406343 +1278 0.00115861723477586 +1280 0.00114576824540165 +1282 0.00112307423917382 +1284 0.00110803299150391 +1286 0.00109790695605719 +1288 0.00109710433202375 +1290 0.00110698710171340 +1292 0.00113245942678089 +1294 0.00117552067320688 +1296 0.00124267198974583 +1298 0.00132277561158489 +1300 0.00139217958266282 +1302 0.00142973694885209 +1304 0.00144188181676038 +1306 0.00147541483276765 +1308 0.00159956692209740 +1310 0.00186843894759088 +1312 0.00216486082449073 +1314 0.00211728875491887 +1316 0.00187507564071290 +1318 0.00171677440706927 +1320 0.00164837511625716 +1322 0.00163899782669962 +1324 0.00166410609076352 +1326 0.00171764577889364 +1328 0.00180479473401823 +1330 0.00194274885535529 +1332 0.00206022538770732 +1334 0.00196217286057273 +1336 0.00188492778401013 +1338 0.00187122231048589 +1340 0.00188921428962955 +1342 0.00193700700412885 +1344 0.00200313353323991 +1346 0.00208778115174581 +1348 0.00218066174704292 +1350 0.00226588109762249 +1352 0.00236276913468593 +1354 0.00248915903884931 +1356 0.00265547420500685 +1358 0.00284820286383517 +1360 0.00303211548157874 +1362 0.00319538643027851 +1364 0.00338011260813816 +1366 0.00363996415682390 +1368 0.00400265764738686 +1370 0.00448976968523854 +1372 0.00525773678870123 +1374 0.00662029687278425 +1376 0.00908376119233617 +1378 0.0123031513241818 +1380 0.0121671979448086 +1382 0.00940007546463800 +1384 0.00754318150864360 +1386 0.00640356392721685 +1388 0.00563257119321882 +1390 0.00511010869784208 +1392 0.00475789415695825 +1394 0.00452833517370964 +1396 0.00440186171426137 +1398 0.00433687786700866 +1400 0.00432317844214779 +1402 0.00436175400856741 +1404 0.00444654158141412 +1406 0.00458045165701961 +1408 0.00472070193080689 +1410 0.00484730108752061 +1412 0.00499169569971829 +1414 0.00517526500052341 +1416 0.00540856165680758 +1418 0.00569301961826355 +1420 0.00603609386579061 +1422 0.00639815529754280 +1424 0.00676704333943306 +1426 0.00709702523848474 +1428 0.00735286473751553 +1430 0.00758946104003622 +1432 0.00786781701959305 +1434 0.00830202970708910 +1436 0.00898232020613486 +1438 0.0100197835148382 +1440 0.0115095063570045 +1442 0.0133985990853930 +1444 0.0153768866835411 +1446 0.0171765347348967 +1448 0.0189361099169456 +1450 0.0208245294344141 +1452 0.0228039247538198 +1454 0.0246810508004892 +1456 0.0262618411626106 +1458 0.0273608063623162 +1460 0.0277930934742346 +1462 0.0274706237226478 +1464 0.0264211185824187 +1466 0.0247980788620200 +1468 0.0228296555480849 +1470 0.0207834609064780 +1472 0.0188724652439656 +1474 0.0171801988754876 +1476 0.0157920753997752 +1478 0.0147283011159520 +1480 0.0140030494767984 +1482 0.0137569248084170 +1484 0.0141879797029108 +1486 0.0159226244331294 +1488 0.0201940578220826 +1490 0.0260836787125339 +1492 0.0401202763896059 +1494 0.0761786772950870 +1496 0.108223079178941 +1498 0.0527249260725011 +1500 0.0271635520581988 +1502 0.0173322191403291 +1504 0.0124889207648925 +1506 0.00992131298532918 +1508 0.00839752655521901 +1510 0.00745176347821015 +1512 0.00688020881374870 +1514 0.00648533490268327 +1516 0.00628100243994201 +1518 0.00629379543847072 +1520 0.00670033315002658 +1522 0.00786453088070098 +1524 0.00861000109877936 +1526 0.00697026673858113 +1528 0.00565227380276001 +1530 0.00510003019871344 +1532 0.00487330093915990 +1534 0.00477643425469498 +1536 0.00467177280329912 +1538 0.00449022432901730 +1540 0.00423934685882746 +1542 0.00393426018189818 +1544 0.00365660104528498 +1546 0.00348923385240243 +1548 0.00342710802865492 +1550 0.00346898664460405 +1552 0.00338295466527580 +1554 0.00321378452613121 +1556 0.00313430635529189 +1558 0.00316907431392649 +1560 0.00330481737182376 +1562 0.00356172011440931 +1564 0.00388898354936485 +1566 0.00429638887941885 +1568 0.00472113284868973 +1570 0.00504929184964361 +1572 0.00519286093716334 +1574 0.00509202242388202 +1576 0.00481769783190026 +1578 0.00455543799934706 +1580 0.00435935962171553 +1582 0.00433990247775519 +1584 0.00460726311748136 +1586 0.00492003737038605 +1588 0.00490704034351103 +1590 0.00492753522146188 +1592 0.00518588888004375 +1594 0.00592543183304241 +1596 0.00720757954725413 +1598 0.00912890526935344 +1600 0.0130293680056744 +1602 0.0206809953186127 +1604 0.0299953585748135 +1606 0.0248157340286292 +1608 0.0127358449020555 +1610 0.00746783575970784 +1612 0.00537209761858949 +1614 0.00445129559785390 +1616 0.00405329276394375 +1618 0.00399146289131384 +1620 0.00409659649670941 +1622 0.00425086095548363 +1624 0.00425306230534309 +1626 0.00388013491422351 +1628 0.00322765310314340 +1630 0.00259805094537761 +1632 0.00208657181154715 +1634 0.00169843933990688 +1636 0.00141785441008406 +1638 0.00123234974672297 +1640 0.00109764310439106 +1642 0.000997096490971439 +1644 0.000923943814992787 +1646 0.000867694719207358 +1648 0.000857989573211860 +1650 0.000876925837508371 +1652 0.000900483600662835 +1654 0.000924599031590994 +1656 0.000943402878947833 +1658 0.000957189946759812 +1660 0.000919301596934912 +1662 0.000829980699381760 +1664 0.000741920416434289 +1666 0.000684454640853614 +1668 0.000660487010052916 +1670 0.000677329699540855 +1672 0.000733663772686657 +1674 0.000829672252398670 +1676 0.000923202402787059 +1678 0.000900896424649981 +1680 0.000787132461270056 +1682 0.000676995955481515 +1684 0.000611701232515841 +1686 0.000595044263899243 +1688 0.000601913444772076 +1690 0.000631185451917075 +1692 0.000675093910401457 +1694 0.000731422393886708 +1696 0.000808376337564176 +1698 0.000794279618925047 +1700 0.000709354504802398 +1702 0.000657251178127169 +1704 0.000631084077034609 +1706 0.000620630016846374 +1708 0.000614804872029308 +1710 0.000610379344278778 +1712 0.000608365704329393 +1714 0.000610177708447017 +1716 0.000628060629349526 +1718 0.000671390695691186 +1720 0.000748670745348075 +1722 0.000874314265691752 +1724 0.00104123844277088 +1726 0.00123749183518020 +1728 0.00147184752955714 +1730 0.00173223404858593 +1732 0.00197582318555127 +1734 0.00215543372945357 +1736 0.00220452603076912 +1738 0.00209119301342784 +1740 0.00185700091397871 +1742 0.00156445999707629 +1744 0.00127824303920924 +1746 0.00103830550711541 +1748 0.000858082809524967 +1750 0.000736720622233361 +1752 0.000665836151632355 +1754 0.000633014507978860 +1756 0.000636204186868655 +1758 0.000664560791933513 +1760 0.000700854142871225 +1762 0.000738249770728404 +1764 0.000779473476320026 +1766 0.000831332837575542 +1768 0.000887483745995595 +1770 0.000943100942235622 +1772 0.00100855983483948 +1774 0.00108815587341361 +1776 0.00117336763806935 +1778 0.00122720647155439 +1780 0.00120867298099444 +1782 0.00117346527655232 +1784 0.00119371865588136 +1786 0.00128533671400934 +1788 0.00142590894789679 +1790 0.00158054902116715 +1792 0.00179850758319075 +1794 0.00213331852757031 +1796 0.00258371206804431 +1798 0.00310651819625664 +1800 0.00358456135015573 +1802 0.00384535056234718 +1804 0.00377208677963125 +1806 0.00340950704775298 +1808 0.00292589878928829 +1810 0.00246230467854199 +1812 0.00209503276430901 +1814 0.00185262669472132 +1816 0.00171702079169156 +1818 0.00163886439352206 +1820 0.00157730777183400 +1822 0.00149679229624579 +1824 0.00138863730310920 +1826 0.00127743508882463 +1828 0.00118456389012839 +1830 0.00112905353317808 +1832 0.00108606377735617 +1834 0.00103086061641581 +1836 0.000984959950309749 +1838 0.000979289058512249 +1840 0.00102288594610930 +1842 0.00112067935890798 +1844 0.00128394592127716 +1846 0.00152723861251123 +1848 0.00188826636609761 +1850 0.00239227576491655 +1852 0.00300971905084921 +1854 0.00364059420885185 +1856 0.00414527688649222 +1858 0.00428418417776257 +1860 0.00397341781363892 +1862 0.00343437915842565 +1864 0.00294698351848267 +1866 0.00265685216170442 +1868 0.00257554798807387 +1870 0.00262362192114651 +1872 0.00267320615475132 +1874 0.00259670566832300 +1876 0.00235341832549094 +1878 0.00201352392982882 +1880 0.00167162491751218 +1882 0.00138756730843950 +1884 0.00117032979189392 +1886 0.00101120581308014 +1888 0.000892343360827370 +1890 0.000799797724248844 +1892 0.000722584304592367 +1894 0.000668205830350704 +1896 0.000645563701038960 +1898 0.000645767881929762 +1900 0.000633984361915526 +1902 0.000588098076669510 +1904 0.000535948959936282 +1906 0.000500979831672727 +1908 0.000480503614669823 +1910 0.000475812984522745 +1912 0.000486823903968232 +1914 0.000515195500000000 +1916 0.000562568109473544 +1918 0.000630427523781356 +1920 0.000723610116430462 +1922 0.000847642176098185 +1924 0.000992789644339751 +1926 0.00114429259972093 +1928 0.00131728542788928 +1930 0.00155893716312052 +1932 0.00190373075161683 +1934 0.00237556565013185 +1936 0.00298040121387223 +1938 0.00364293200808332 +1940 0.00416589638649938 +1942 0.00433944387091247 +1944 0.00420413532397440 +1946 0.00380161374653215 +1948 0.00327719918178656 +1950 0.00282576366330091 +1952 0.00253348765310892 +1954 0.00239437526824859 +1956 0.00234603768444204 +1958 0.00232574864667046 +1960 0.00220039532483667 +1962 0.00199445232375287 +1964 0.00170495488495039 +1966 0.00137875775323702 +1968 0.00109690552229723 +1970 0.000878128994624433 +1972 0.000721601368959039 +1974 0.000617419916987627 +1976 0.000562113218832075 +1978 0.000551026292591773 +1980 0.000575711660935202 +1982 0.000615370850112472 +1984 0.000626638864213787 +1986 0.000619344762051612 +1988 0.000644972987040071 +1990 0.000691941782910493 +1992 0.000694254646432683 +1994 0.000622443290799324 +1996 0.000495200120138662 +1998 0.000402620427801543 +2000 0.000357520428000267 +2002 0.000340715817783006 +2004 0.000340725563484929 +2006 0.000349587604938024 +2008 0.000357889528657337 +2010 0.000352782837535485 +2012 0.000327904929253038 +2014 0.000298699882098499 +2016 0.000271842376811093 +2018 0.000242333037716520 +2020 0.000218337240170542 +2022 0.000199194821720737 +2024 0.000183911806628813 +2026 0.000171888258235563 +2028 0.000164785282634461 +2030 0.000164391739593814 +2032 0.000169011600820695 +2034 0.000154127618321273 +2036 0.000133850562902313 +2038 0.000121768011512588 +2040 0.000114542173977814 +2042 0.000109960714942027 +2044 0.000107324747708015 +2046 0.000105319938271901 +2048 0.000104400109927128 +2050 0.000104560803595480 +2052 0.000105682984195988 +2054 0.000107138188290709 +2056 0.000109850938702712 +2058 0.000113964387835913 +2060 0.000119159665067584 +2062 0.000125394011284327 +2064 0.000135383120416356 +2066 0.000150829077064515 +2068 0.000163896208951784 +2070 0.000158538657020860 +2072 0.000143857048326539 +2074 0.000133838990991728 +2076 0.000126082674541763 +2078 0.000119111322229434 +2080 0.000113978504701401 +2082 0.000110907574969952 +2084 0.000108574694668308 +2086 0.000105750311657561 +2088 0.000102757884920459 +2090 0.000100315348970678 +2092 9.88998809699028e-05 +2094 9.84636051990861e-05 +2096 9.86736776470892e-05 +2098 9.86832304001427e-05 +2100 9.94847029581411e-05 +2102 0.000102501492433386 +2104 0.000108578252528750 +2106 0.000117598982731806 +2108 0.000128810423312497 +2110 0.000138078130156183 +2112 0.000139894738408702 +2114 0.000140372347283306 +2116 0.000147183990385426 +2118 0.000142580842940779 +2120 0.000126124302551768 +2122 0.000119111147897455 +2124 0.000117761941379516 +2126 0.000110386213471180 +2128 0.000100586367430428 +2130 9.65127771567695e-05 +2132 9.71593180254151e-05 +2134 0.000100588542105452 +2136 0.000104481772978239 +2138 0.000107041125533866 +2140 0.000108872498221666 +2142 0.000111489568147590 +2144 0.000115451529322482 +2146 0.000120558240114413 +2148 0.000126537781071288 +2150 0.000134733619506300 +2152 0.000148643632029954 +2154 0.000172040859828778 +2156 0.000210048660817435 +2158 0.000268125741557685 +2160 0.000351069215958102 +2162 0.000450344598032358 +2164 0.000489938528699291 +2166 0.000409492796412179 +2168 0.000304387639702614 +2170 0.000235891130206754 +2172 0.000200519075056806 +2174 0.000185710828669175 +2176 0.000182424899321747 +2178 0.000187448554282292 +2180 0.000203021437757415 +2182 0.000231533383222207 +2184 0.000266979354976650 +2186 0.000274670338797065 +2188 0.000249531305296574 +2190 0.000224075465024111 +2192 0.000200276630934979 +2194 0.000177273244376758 +2196 0.000160285923199765 +2198 0.000150581068702164 +2200 0.000148630566016007 +2202 0.000159418644068291 +2204 0.000190928483551684 +2206 0.000246685640401459 +2208 0.000270254541506430 +2210 0.000222823187679136 +2212 0.000183299674920404 +2214 0.000159208446689860 +2216 0.000141367831176120 +2218 0.000133886240444937 +2220 0.000133377867922854 +2222 0.000136687110101880 +2224 0.000141595068371183 +2226 0.000145519316291541 +2228 0.000148458736825531 +2230 0.000153316938474443 +2232 0.000163253960273079 +2234 0.000178923069609914 +2236 0.000194257120755014 +2238 0.000196450490452201 +2240 0.000188281502894665 +2242 0.000182547056123856 +2244 0.000184193400303698 +2246 0.000192794200162931 +2248 0.000207468879582850 +2250 0.000228635659533982 +2252 0.000256821954754517 +2254 0.000293238050530334 +2256 0.000339843587945316 +2258 0.000394697192716897 +2260 0.000433841600455809 +2262 0.000418808222045475 +2264 0.000365652480977041 +2266 0.000317992842743265 +2268 0.000289251978678528 +2270 0.000276323460348606 +2272 0.000276007776761593 +2274 0.000285194711508216 +2276 0.000305840459677383 +2278 0.000341614672459952 +2280 0.000378323694871339 +2282 0.000375183465200990 +2284 0.000372499291886178 +2286 0.000379130457959152 +2288 0.000369071052928138 +2290 0.000344203099796142 +2292 0.000313724278864159 +2294 0.000283180068926335 +2296 0.000260398235921227 +2298 0.000248364444837745 +2300 0.000246962256014277 +2302 0.000257337196851115 +2304 0.000282117167464228 +2306 0.000327011660272884 +2308 0.000402901410624785 +2310 0.000515678907419335 +2312 0.000613221545587734 +2314 0.000587317319167494 +2316 0.000479703817387008 +2318 0.000387543339108333 +2320 0.000331935579008350 +2322 0.000305882244139694 +2324 0.000301743073919341 +2326 0.000318021837096887 +2328 0.000360763254301904 +2330 0.000442864766710211 +2332 0.000580146273004247 +2334 0.000746878008138738 +2336 0.000778905767997363 +2338 0.000655878707879373 +2340 0.000549860316308082 +2342 0.000474310426764780 +2344 0.000414796574428013 +2346 0.000384139069758195 +2348 0.000382158356339707 +2350 0.000402158338733409 +2352 0.000435516153586227 +2354 0.000472182760873504 +2356 0.000515961034751272 +2358 0.000592576004516974 +2360 0.000693206523120231 +2362 0.000643638218785556 +2364 0.000478341631402279 +2366 0.000369914098808752 +2368 0.000314093467617302 +2370 0.000287309303030045 +2372 0.000274524402561852 +2374 0.000270061869985669 +2376 0.000271829601590763 +2378 0.000279194809335497 +2380 0.000294905061876556 +2382 0.000319347534507768 +2384 0.000350241467027989 +2386 0.000391786089197638 +2388 0.000432288381112108 +2390 0.000431894838874137 +2392 0.000400306861211915 +2394 0.000373780803138032 +2396 0.000355410966982535 +2398 0.000347151739593354 +2400 0.000350924151462325 +2402 0.000365706536144189 +2404 0.000389705426960732 +2406 0.000421334803876133 +2408 0.000459934423654906 +2410 0.000500616815279102 +2412 0.000525702627325844 +2414 0.000513223543953278 +2416 0.000478247500654749 +2418 0.000439595749420076 +2420 0.000399407179067621 +2422 0.000365631853681067 +2424 0.000342099304419797 +2426 0.000327643185447820 +2428 0.000319852482413628 +2430 0.000318090248146717 +2432 0.000318226888962093 +2434 0.000307017564256603 +2436 0.000284561022911212 +2438 0.000265983112770141 +2440 0.000252937611403322 +2442 0.000242679401171322 +2444 0.000236093051616947 +2446 0.000233130690914760 +2448 0.000233167378896135 +2450 0.000235415965609999 +2452 0.000239364304311204 +2454 0.000244209499641596 +2456 0.000248579466181052 +2458 0.000251144773278908 +2460 0.000252431049719579 +2462 0.000253691712617762 +2464 0.000255788005476147 +2466 0.000256434321853842 +2468 0.000251072591655402 +2470 0.000241597521259849 +2472 0.000234162117014666 +2474 0.000229676856991507 +2476 0.000227592143774873 +2478 0.000226834091088810 +2480 0.000227168703547583 +2482 0.000228588584217583 +2484 0.000231746296813716 +2486 0.000236823965966075 +2488 0.000241600139160114 +2490 0.000244394482975018 +2492 0.000244248137929474 +2494 0.000245127828260994 +2496 0.000251434891521320 +2498 0.000247993851620619 +2500 0.000232735996433491 +2502 0.000222497793867323 +2504 0.000221589422451279 +2506 0.000232579945681551 +2508 0.000250427153657126 +2510 0.000252498000507853 +2512 0.000232189718802120 +2514 0.000211050185590214 +2516 0.000198391157226399 +2518 0.000193635707688150 +2520 0.000193341820452081 +2522 0.000193371593068733 +2524 0.000189643081211288 +2526 0.000181794690676754 +2528 0.000178838464388285 +2530 0.000183501803348288 +2532 0.000194837096053966 +2534 0.000211327514566071 +2536 0.000231393834808824 +2538 0.000255837394665623 +2540 0.000275709996672117 +2542 0.000266055047783776 +2544 0.000243859757637041 +2546 0.000235285437161138 +2548 0.000236304976186297 +2550 0.000232544359689715 +2552 0.000218806075082454 +2554 0.000204743746363893 +2556 0.000196655427865349 +2558 0.000191976123078746 +2560 0.000186392842736032 +2562 0.000182465243677096 +2564 0.000182341770175991 +2566 0.000186622668096877 +2568 0.000194771585308041 +2570 0.000207509200230819 +2572 0.000227536779149540 +2574 0.000256126025913237 +2576 0.000293783533966409 +2578 0.000344606705405512 +2580 0.000421000900491490 +2582 0.000539940417278290 +2584 0.000691325137774485 +2586 0.000768064347900480 +2588 0.000684349300000000 +2590 0.000536495643153772 +2592 0.000418107936641488 +2594 0.000348162932430616 +2596 0.000316562063243598 +2598 0.000311605992448936 +2600 0.000329718943031756 +2602 0.000370011429187919 +2604 0.000412184734144213 +2606 0.000402481978671523 +2608 0.000368470211663778 +2610 0.000353398410510846 +2612 0.000328281593188018 +2614 0.000295400882956194 +2616 0.000275902521470556 +2618 0.000268299167514448 +2620 0.000267511791747167 +2622 0.000270974116559811 +2624 0.000277238419508473 +2626 0.000286763887252883 +2628 0.000300107477286003 +2630 0.000316524811935304 +2632 0.000327263381122722 +2634 0.000305877054698251 +2636 0.000269148133708810 +2638 0.000248172907618610 +2640 0.000239823700606054 +2642 0.000238746030638882 +2644 0.000239868631298371 +2646 0.000237697572301885 +2648 0.000231658620506580 +2650 0.000224559727594560 +2652 0.000220154792342943 +2654 0.000220025182909045 +2656 0.000220821585838385 +2658 0.000219097069889182 +2660 0.000213668868513552 +2662 0.000206551642880241 +2664 0.000200132874030954 +2666 0.000198263371264169 +2668 0.000204157476079366 +2670 0.000219581959345431 +2672 0.000228529275997830 +2674 0.000212671171569940 +2676 0.000198554340066309 +2678 0.000193733620852842 +2680 0.000194427317307389 +2682 0.000197546011671515 +2684 0.000200581527813713 +2686 0.000203985348880727 +2688 0.000208935024070450 +2690 0.000213885837983080 +2692 0.000215780646355564 +2694 0.000215167439140776 +2696 0.000214895725221701 +2698 0.000217360387387823 +2700 0.000222623944199778 +2702 0.000229950531867105 +2704 0.000237779651458241 +2706 0.000247270953949545 +2708 0.000260083526905394 +2710 0.000275286056335416 +2712 0.000293138008774478 +2714 0.000315098638979930 +2716 0.000342140022611386 +2718 0.000376355762584957 +2720 0.000422618703820090 +2722 0.000488803228667163 +2724 0.000585387059813060 +2726 0.000728318801443707 +2728 0.000938827018235910 +2730 0.00123037571269695 +2732 0.00155229568740433 +2734 0.00172266995984292 +2736 0.00158429227183195 +2738 0.00126235409603059 +2740 0.000954219558161654 +2742 0.000733284051680574 +2744 0.000590574186925838 +2746 0.000500913503228797 +2748 0.000444283569806984 +2750 0.000408552058896459 +2752 0.000386442879562956 +2754 0.000373264157615818 +2756 0.000366670327661857 +2758 0.000363876514149830 +2760 0.000361532536949891 +2762 0.000363675314741141 +2764 0.000366718711717702 +2766 0.000373487709343178 +2768 0.000385907143020104 +2770 0.000398462101615587 +2772 0.000413801469177668 +2774 0.000425659990486031 +2776 0.000436402382617843 +2778 0.000446662734946199 +2780 0.000455121187378285 +2782 0.000464083631949392 +2784 0.000471837814603525 +2786 0.000485996560282024 +2788 0.000502172804216709 +2790 0.000522830212064553 +2792 0.000548289451554969 +2794 0.000579634288120943 +2796 0.000611379237870225 +2798 0.000641158616950349 +2800 0.000672247209660977 +2802 0.000711615716417748 +2804 0.000756204442404881 +2806 0.000806513382136127 +2808 0.000854383801707436 +2810 0.000899046135928726 +2812 0.000920533253907859 +2814 0.000922946174823163 +2816 0.000938823165339874 +2818 0.000975854382639431 +2820 0.00103794809306155 +2822 0.00111441105526966 +2824 0.00117124310275486 +2826 0.00120584112843460 +2828 0.00126141309789025 +2830 0.00134778284367920 +2832 0.00146199663837007 +2834 0.00159718851386329 +2836 0.00175330338362696 +2838 0.00193523559724759 +2840 0.00214829304268432 +2842 0.00239693861672905 +2844 0.00270947510257679 +2846 0.00308962037090872 +2848 0.00355940585209848 +2850 0.00412210422108316 +2852 0.00476891854151234 +2854 0.00547214050611261 +2856 0.00617409172881556 +2858 0.00678722786702444 +2860 0.00723807939551757 +2862 0.00752048939258356 +2864 0.00769405118384194 +2866 0.00780672387589873 +2868 0.00789211778455793 +2870 0.00795935754077555 +2872 0.00799733164350610 +2874 0.00795934759033912 +2876 0.00778684233057949 +2878 0.00748513477927108 +2880 0.00712782450019760 +2882 0.00674716793892496 +2884 0.00636559086703165 +2886 0.00600252759803496 +2888 0.00568003469443299 +2890 0.00541869257628554 +2892 0.00523149924308805 +2894 0.00513859281992941 +2896 0.00514912231818864 +2898 0.00528298553786387 +2900 0.00554846488279469 +2902 0.00596670745150011 +2904 0.00656025912947429 +2906 0.00737309118502326 +2908 0.00844343143196328 +2910 0.00980783562233305 +2912 0.0114361820721680 +2914 0.0132043723140582 +2916 0.0148639399258050 +2918 0.0160322637171387 +2920 0.0163848402191419 +2922 0.0159315596024990 +2924 0.0149712224125917 +2926 0.0138179195741240 +2928 0.0126830001717222 +2930 0.0117051760061400 +2932 0.0109454119425227 +2934 0.0104094926683649 +2936 0.0100777464854532 +2938 0.00991576239015874 +2940 0.00989092758914217 +2942 0.00995253861794336 +2944 0.0100558436016283 +2946 0.0101466649820268 +2948 0.0101700911447294 +2950 0.0100970420129300 +2952 0.00995445488065370 +2954 0.00977184847019253 +2956 0.00956031409076577 +2958 0.00931672833064324 +2960 0.00900841342025127 +2962 0.00860452512496009 +2964 0.00819173199579369 +2966 0.00793188379052879 +2968 0.00787856977180025 +2970 0.00795406658370171 +2972 0.00807021356855313 +2974 0.00817433984043233 +2976 0.00825003493744345 +2978 0.00828855603001654 +2980 0.00828386290179407 +2982 0.00816950979044141 +2984 0.00795147116279175 +2986 0.00771875813248752 +2988 0.00752177579743462 +2990 0.00739482968641806 +2992 0.00735495102785436 +2994 0.00742400805444368 +2996 0.00762947734762659 +2998 0.00800350176450487 +3000 0.00849881078288103 +3002 0.00896624168638865 +3004 0.00925040248900867 +3006 0.00945455630611128 +3008 0.00976581762927042 +3010 0.0103150719126273 +3012 0.0112091641279662 +3014 0.0125665741882334 +3016 0.0144920310150755 +3018 0.0171523311364697 +3020 0.0206588071576588 +3022 0.0247927573582982 +3024 0.0285338257471566 +3026 0.0305737428191527 +3028 0.0304197730378849 +3030 0.0285285708945381 +3032 0.0254626182993726 +3034 0.0218417847555673 +3036 0.0183214780469989 +3038 0.0154367262434714 +3040 0.0134174271105468 +3042 0.0121814306436623 +3044 0.0114802419869786 +3046 0.0111082334096508 +3048 0.0110364952795097 +3050 0.0112341213861221 +3052 0.0116521403194674 +3054 0.0121679353995795 +3056 0.0126492093791370 +3058 0.0130640240273400 +3060 0.0134217837485980 +3062 0.0136027351521215 +3064 0.0133566760196114 +3066 0.0124957830807641 +3068 0.0111185801076637 +3070 0.00962312187980008 +3072 0.00840019013916095 +3074 0.00762785975903174 +3076 0.00731431659052294 +3078 0.00742769361429674 +3080 0.00800169947155848 +3082 0.00909924810606661 +3084 0.0105612984915747 +3086 0.0115953458981882 +3088 0.0108915516715014 +3090 0.00855348266587572 +3092 0.00625766310903960 +3094 0.00474250996240750 +3096 0.00389487972553113 +3098 0.00350242093033435 +3100 0.00342566123955596 +3102 0.00354245491578370 +3104 0.00366329979669444 +3106 0.00351255659174282 +3108 0.00307160622386024 +3110 0.00262319086310484 +3112 0.00230238895472291 +3114 0.00208330628877116 +3116 0.00190296000440166 +3118 0.00170124594674715 +3120 0.00147221774746264 +3122 0.00126680203340060 +3124 0.00110221512874358 +3126 0.000972843085744223 +3128 0.000865976217229730 +3130 0.000787123046176519 +3132 0.000725569824317256 +3134 0.000678619961272403 +3136 0.000643376054198741 +3138 0.000613508276940799 +3140 0.000585754400051242 +3142 0.000561171104171409 +3144 0.000538801514536514 +3146 0.000520080512301793 +3148 0.000505696831504068 +3150 0.000493470880103411 +3152 0.000480268222246598 +3154 0.000470385004364871 +3156 0.000459220112914975 +3158 0.000450945450269378 +3160 0.000450827328828143 +3162 0.000455120896574839 +3164 0.000465883832863404 +3166 0.000478798660924222 +3168 0.000482832083650923 +3170 0.000455625596338195 +3172 0.000403338720059331 +3174 0.000360438306588196 +3176 0.000332520864586029 +3178 0.000313938694862586 +3180 0.000300705768353348 +3182 0.000290665831960273 +3184 0.000282478444260369 +3186 0.000275747274780963 +3188 0.000269274452306063 +3190 0.000262630704721266 +3192 0.000255445037852355 +3194 0.000248377973867383 +3196 0.000241977580841794 +3198 0.000236251689540068 +3200 0.000230923454004864 +3202 0.000226049100105626 +3204 0.000221226160126354 +3206 0.000214716060376866 +3208 0.000206517982920749 +3210 0.000198104526951019 +3212 0.000190353242003341 +3214 0.000183841618071712 +3216 0.000178536526886377 +3218 0.000173732996508941 +3220 0.000169365792718528 +3222 0.000165299675350027 +3224 0.000161252739783070 +3226 0.000157550287906591 +3228 0.000154290860671044 +3230 0.000151403187559336 +3232 0.000148762116611554 +3234 0.000146608972658800 +3236 0.000144929084687115 +3238 0.000143621190469325 +3240 0.000142423755040669 +3242 0.000141225309365069 +3244 0.000139879705280103 +3246 0.000138120388481842 +3248 0.000136557609027687 +3250 0.000135029965649156 +3252 0.000133891483928728 +3254 0.000133096425324259 +3256 0.000132368577771128 +3258 0.000131178881840028 +3260 0.000129611032335659 +3262 0.000128050800000000 +3264 0.000126496752229370 +3266 0.000125487476864466 +3268 0.000124918363511663 +3270 0.000124282902673504 +3272 0.000123524889665480 +3274 0.000122442491776109 +3276 0.000121443655497364 +3278 0.000120760252331750 +3280 0.000120133235127335 +3282 0.000119422774440518 +3284 0.000118787091342885 +3286 0.000118050006014353 +3288 0.000117490615311207 +3290 0.000116940876538515 +3292 0.000116411722780357 +3294 0.000116040811167173 +3296 0.000115834700717885 +3298 0.000116085966839459 +3300 0.000116986523436758 +3302 0.000118267730379294 +3304 0.000119505403103670 +3306 0.000120364280297837 +3308 0.000119982615737227 +3310 0.000118961448074642 +3312 0.000117873723711904 +3314 0.000117091085003690 +3316 0.000116576391297391 +3318 0.000116630812029799 +3320 0.000116648622872189 +3322 0.000116640410140475 +3324 0.000116601640984688 +3326 0.000116254038453171 +3328 0.000115188264691018 +3330 0.000113811841076524 +3332 0.000111681446514179 +3334 0.000108818040972509 +3336 0.000105958252604406 +3338 0.000103151741537451 +3340 0.000100395217441575 +3342 9.80332064093372e-05 +3344 9.53544349575209e-05 +3346 9.25223256784850e-05 +3348 9.00829101787277e-05 +3350 8.83163531062304e-05 +3352 8.72118771260860e-05 +3354 8.64440098119140e-05 +3356 8.60520504254794e-05 +3358 8.61965597139509e-05 +3360 8.70019144324470e-05 +3362 8.83318478317726e-05 +3364 9.00079714359512e-05 +3366 9.23139048671722e-05 +3368 9.50882502511675e-05 +3370 9.78832163580005e-05 +3372 0.000100096171211192 +3374 0.000102179086616863 +3376 0.000103749608742208 +3378 0.000105213237160669 +3380 0.000106688938713341 +3382 0.000107853667399164 +3384 0.000108503663896066 +3386 0.000108465998629706 +3388 0.000107522134166390 +3390 0.000105586354148376 +3392 0.000103099282581304 +3394 0.000100324257650923 +3396 9.74485799284953e-05 +3398 9.51596059704078e-05 +3400 9.35013107298140e-05 +3402 9.21170196430098e-05 +3404 9.07360614712649e-05 +3406 8.91138931604199e-05 +3408 8.74505590276362e-05 +3410 8.56664975562433e-05 +3412 8.43848055968202e-05 +3414 8.35095737363273e-05 +3416 8.28173663218536e-05 +3418 8.25803390851867e-05 +3420 8.34887031217918e-05 +3422 8.50941717249168e-05 +3424 8.76826565386191e-05 +3426 9.18893425240818e-05 +3428 9.72727573628125e-05 +3430 0.000103498414055259 +3432 0.000110175431772886 +3434 0.000116489353052258 +3436 0.000121652113320222 +3438 0.000125199891677689 +3440 0.000126017012084730 +3442 0.000123363542579961 +3444 0.000118359425974797 +3446 0.000111284305442118 +3448 0.000102049297013716 +3450 9.29060570294263e-05 +3452 8.56830126047782e-05 +3454 8.03943044406067e-05 +3456 7.64946805035534e-05 +3458 7.35384095568400e-05 +3460 7.15607792666279e-05 +3462 7.00113147312602e-05 +3464 6.86840886320734e-05 +3466 6.76516046709459e-05 +3468 6.66317002099573e-05 +3470 6.58163245627029e-05 +3472 6.48526803819241e-05 +3474 6.41769150098627e-05 +3476 6.33519637219242e-05 +3478 6.21036964756407e-05 +3480 6.07594134549892e-05 +3482 5.99888706228529e-05 +3484 5.95355056229478e-05 +3486 5.98196476615315e-05 +3488 6.07067305157839e-05 +3490 6.20707024404776e-05 +3492 6.35630004076309e-05 +3494 6.39802692410745e-05 +3496 6.36894878745265e-05 +3498 6.27365377476382e-05 +3500 6.17431130904710e-05 +3502 6.13279727787810e-05 +3504 6.13193515749704e-05 +3506 6.24903413403870e-05 +3508 6.43864144265415e-05 +3510 6.71410924962580e-05 +3512 7.03539058487688e-05 +3514 7.47946182109209e-05 +3516 7.95754496113107e-05 +3518 8.34700851824913e-05 +3520 8.39873348467991e-05 +3522 8.07272560865977e-05 +3524 7.56312308938946e-05 +3526 7.10894728276635e-05 +3528 6.81632208726418e-05 +3530 6.64216930115337e-05 +3532 6.58132280866232e-05 +3534 6.67321753128692e-05 +3536 6.94647085013537e-05 +3538 7.44308734240544e-05 +3540 8.16543395123198e-05 +3542 9.03200858171377e-05 +3544 9.85535954298993e-05 +3546 0.000104547035052111 +3548 0.000107433770750519 +3550 0.000108038450708995 +3552 0.000107166592996916 +3554 0.000105178798896553 +3556 0.000101095184756009 +3558 9.50814999627662e-05 +3560 8.82058228394490e-05 +3562 8.18208514354733e-05 +3564 7.68850700845907e-05 +3566 7.38744666163043e-05 +3568 7.27642291486909e-05 +3570 7.33994731408140e-05 +3572 7.56627166220080e-05 +3574 7.96660140607364e-05 +3576 8.51090055206606e-05 +3578 9.29167699145132e-05 +3580 0.000102526366929820 +3582 0.000114877275226176 +3584 0.000126190559302250 +3586 0.000124628073841470 +3588 0.000119415520864134 +3590 0.000112006712936662 +3592 0.000105579072932928 +3594 0.000100691596209911 +3596 9.80454508807073e-05 +3598 9.79289585249404e-05 +3600 9.76517090509766e-05 +3602 9.63252158538093e-05 +3604 9.47873503300014e-05 +3606 9.40807594813255e-05 +3608 9.38724750866359e-05 +3610 9.46504942395723e-05 +3612 9.80150733458878e-05 +3614 0.000104630751802908 +3616 0.000115783489148453 +3618 0.000130667214647273 +3620 0.000146477404898454 +3622 0.000158530547818508 +3624 0.000162318596543099 +3626 0.000158125871191841 +3628 0.000150672245587412 +3630 0.000144549679683140 +3632 0.000142051097385185 +3634 0.000145529942933542 +3636 0.000153343488815115 +3638 0.000167576397035396 +3640 0.000187305749491179 +3642 0.000211282337261951 +3644 0.000235521019158824 +3646 0.000255526042383438 +3648 0.000267309387292886 +3650 0.000267620489558132 +3652 0.000257281965913234 +3654 0.000238427431722088 +3656 0.000215910141107563 +3658 0.000194198641163347 +3660 0.000175915805990763 +3662 0.000162335012119966 +3664 0.000152841199834750 +3666 0.000146981907091703 +3668 0.000143997827610619 +3670 0.000143648436802218 +3672 0.000144734329787788 +3674 0.000145900823579283 +3676 0.000145536357339105 +3678 0.000142791335633658 +3680 0.000138712508096908 +3682 0.000133854756804407 +3684 0.000128953007630511 +3686 0.000123724720918296 +3688 0.000118053544364748 +3690 0.000112538647366327 +3692 0.000108762709162428 +3694 0.000106869096858975 +3696 0.000106178550226360 +3698 0.000108026299705946 +3700 0.000113499289845608 +3702 0.000122346067036449 +3704 0.000132017367154307 +3706 0.000138204981263169 +3708 0.000137812952692201 +3710 0.000131957371338105 +3712 0.000124911657013813 +3714 0.000120086480186131 +3716 0.000119368867384451 +3718 0.000123023160227338 +3720 0.000129681526292498 +3722 0.000136685573712829 +3724 0.000140355687154432 +3726 0.000137643004943763 +3728 0.000130059156127694 +3730 0.000121898190215580 +3732 0.000115279209639364 +3734 0.000109785664308487 +3736 0.000105299764060944 +3738 0.000101063203615323 +3740 9.68651180755000e-05 +3742 9.31808749176699e-05 +3744 9.10149507453584e-05 +3746 8.98056206735940e-05 +3748 8.93161375554986e-05 +3750 8.95680290795053e-05 +3752 9.07085327291721e-05 +3754 9.23144122730348e-05 +3756 9.51698234276085e-05 +3758 9.88200437936328e-05 +3760 0.000102897737658181 +3762 0.000106541912714358 +3764 0.000108638955977754 +3766 0.000107125969211894 +3768 0.000104745321090008 +3770 0.000104907149891996 +3772 0.000107524035997495 +3774 0.000112565658169961 +3776 0.000120128967951347 +3778 0.000130377699611365 +3780 0.000143388258757916 +3782 0.000157827987118552 +3784 0.000171336843948261 +3786 0.000178285748324712 +3788 0.000174781489954516 +3790 0.000164121439128089 +3792 0.000152610210570708 +3794 0.000144162759638053 +3796 0.000139239462639203 +3798 0.000137792736182703 +3800 0.000140104567703810 +3802 0.000145422058851258 +3804 0.000152835113748305 +3806 0.000161127793420174 +3808 0.000168581867788859 +3810 0.000173330279437380 +3812 0.000175195783104517 +3814 0.000174404180004515 +3816 0.000172977411115116 +3818 0.000172632535041757 +3820 0.000174761333878933 +3822 0.000179015946250825 +3824 0.000183474569007118 +3826 0.000187609784690581 +3828 0.000192418303544244 +3830 0.000199638672160316 +3832 0.000209346193913544 +3834 0.000221078085152779 +3836 0.000233276912915708 +3838 0.000243302212259793 +3840 0.000248219562860653 +3842 0.000249318750764567 +3844 0.000250161224209589 +3846 0.000251130509086889 +3848 0.000250954031996911 +3850 0.000247448125111366 +3852 0.000239298068537633 +3854 0.000227630000846504 +3856 0.000215807191993378 +3858 0.000207046517196079 +3860 0.000202157638401237 +3862 0.000202101096220524 +3864 0.000206089427126992 +3866 0.000212972794266054 +3868 0.000220069608188463 +3870 0.000223160954785535 +3872 0.000217701230702324 +3874 0.000205680240569784 +3876 0.000194071196201460 +3878 0.000186624022776833 +3880 0.000183260750499541 +3882 0.000183370917787493 +3884 0.000186002682616268 +3886 0.000190704000843751 +3888 0.000195753159488382 +3890 0.000199899173040718 +3892 0.000202664798143917 +3894 0.000204320562044854 +3896 0.000204971280265517 +3898 0.000204184602522533 +3900 0.000202879694728580 +3902 0.000202091110448804 +3904 0.000203200507821011 +3906 0.000206777694070363 +3908 0.000212730193424292 +3910 0.000215758904170297 +3912 0.000211571330269805 +3914 0.000205958146733392 +3916 0.000202885902366098 +3918 0.000203859899346076 +3920 0.000208043821414469 +3922 0.000213749060271441 +3924 0.000216258022232613 +3926 0.000210993095532934 +3928 0.000200360509814737 +3930 0.000190403984953153 +3932 0.000185294952858894 +3934 0.000184723195717293 +3936 0.000186124269760876 +3938 0.000187274520079713 +3940 0.000189148765118607 +3942 0.000191266181204903 +3944 0.000194823747520104 +3946 0.000199962536960736 +3948 0.000206117700447747 +3950 0.000211964821297933 +3952 0.000211771907916455 +3954 0.000207210064931517 +3956 0.000200358454677226 +3958 0.000194986979879340 +3960 0.000191410166101308 +3962 0.000188811490516811 +3964 0.000186954388139908 +3966 0.000184972375095875 +3968 0.000183218705269115 +3970 0.000181796902747989 +3972 0.000181759132648531 +3974 0.000184824282283672 +3976 0.000192623374739583 +3978 0.000205576802325497 +3980 0.000216734030830589 +3982 0.000209196916619900 +3984 0.000193026471982283 +3986 0.000183362654697217 +3988 0.000180228706844783 +3990 0.000181565573496817 +3992 0.000186254988451223 +3994 0.000193691373041908 +3996 0.000204148918879724 +3998 0.000217163156382698 4000 0.000231947733021415 \ No newline at end of file diff --git a/eta_TolueneN.txt b/eta_TolueneN.txt index 307d130..b7a73f7 100644 --- a/eta_TolueneN.txt +++ b/eta_TolueneN.txt @@ -1,1601 +1,1601 @@ -800 1.44120102496924 -802 1.44244952355793 -804 1.44362241452370 -806 1.44473157548162 -808 1.44576931343185 -810 1.44673515341541 -812 1.44763153740528 -814 1.44849997645288 -816 1.44937159368323 -818 1.45024511061741 -820 1.45109838059394 -822 1.45193180052550 -824 1.45274307737647 -826 1.45353862658166 -828 1.45431614422343 -830 1.45505783090997 -832 1.45575257351567 -834 1.45637393495922 -836 1.45689903981153 -838 1.45730768949019 -840 1.45754105585989 -842 1.45762277914234 -844 1.45763704972226 -846 1.45770974157519 -848 1.45792998369439 -850 1.45831194599516 -852 1.45879214084464 -854 1.45933254646700 -856 1.45988983429307 -858 1.46043988459777 -860 1.46098292821135 -862 1.46151723624776 -864 1.46203872496248 -866 1.46253192223325 -868 1.46297856786196 -870 1.46337643775072 -872 1.46369146339390 -874 1.46394643585616 -876 1.46431343981134 -878 1.46483594897202 -880 1.46543855156632 -882 1.46608462990801 -884 1.46677023178158 -886 1.46750898169590 -888 1.46831763414834 -890 1.46912802427779 -892 1.46954514029358 -894 1.46839331789610 -896 1.46522362501208 -898 1.46324102369024 -900 1.46324805165743 -902 1.46389477313103 -904 1.46460285834673 -906 1.46524189063531 -908 1.46578615865865 -910 1.46624870624222 -912 1.46665117759441 -914 1.46703266934571 -916 1.46740765502925 -918 1.46779668973951 -920 1.46820189802559 -922 1.46861141696830 -924 1.46901759517687 -926 1.46935992609941 -928 1.46951316452951 -930 1.46945198189589 -932 1.46950773718789 -934 1.46980252488385 -936 1.47016397014931 -938 1.47050527825284 -940 1.47079802225791 -942 1.47102956241248 -944 1.47121559715866 -946 1.47137193902005 -948 1.47152008803324 -950 1.47167672882319 -952 1.47187041329055 -954 1.47208448275609 -956 1.47229737949647 -958 1.47250268786501 -960 1.47267011513556 -962 1.47277605897765 -964 1.47281096169045 -966 1.47283377833869 -968 1.47288521062562 -970 1.47300680592029 -972 1.47318336590741 -974 1.47338081764773 -976 1.47357969584368 -978 1.47371821017195 -980 1.47375527316737 -982 1.47374243519460 -984 1.47381322933363 -986 1.47398487555170 -988 1.47420629302573 -990 1.47448130861459 -992 1.47481507770761 -994 1.47518229617302 -996 1.47557023171639 -998 1.47596326572828 -1000 1.47630080652934 -1002 1.47636823234471 -1004 1.47636996678396 -1006 1.47689524896944 -1008 1.47750032220134 -1010 1.47819158796836 -1012 1.47897505869564 -1014 1.47986167058547 -1016 1.48089513800264 -1018 1.48214271193312 -1020 1.48362438976875 -1022 1.48502767979268 -1024 1.48723564000764 -1026 1.49092289691198 -1028 1.49396375951509 -1030 1.47873935405011 -1032 1.46178488502145 -1034 1.46614728364263 -1036 1.46944972756204 -1038 1.47076139801307 -1040 1.47051860247504 -1042 1.46925108082617 -1044 1.46777888639623 -1046 1.46677062217283 -1048 1.46644104430282 -1050 1.46666085838594 -1052 1.46724995592262 -1054 1.46804818971542 -1056 1.46897681608261 -1058 1.46995585496974 -1060 1.47098590895262 -1062 1.47206714530921 -1064 1.47321734998274 -1066 1.47445175619764 -1068 1.47579194531028 -1070 1.47721681438477 -1072 1.47863578920406 -1074 1.47989036409651 -1076 1.48086017571181 -1078 1.48069474784801 -1080 1.47616731467815 -1082 1.46390771869497 -1084 1.45570223896581 -1086 1.45597971475891 -1088 1.45836941934247 -1090 1.46066235559752 -1092 1.46255873201846 -1094 1.46411051824312 -1096 1.46540793776881 -1098 1.46651204425965 -1100 1.46743001960627 -1102 1.46810891059625 -1104 1.46835826348699 -1106 1.46762316195694 -1108 1.46618573784309 -1110 1.46572358542781 -1112 1.46614920302751 -1114 1.46684472613418 -1116 1.46754366818093 -1118 1.46816766240122 -1120 1.46871860517754 -1122 1.46920770699094 -1124 1.46965073082635 -1126 1.47005259957817 -1128 1.47040212564529 -1130 1.47068773768668 -1132 1.47096001810126 -1134 1.47125261448772 -1136 1.47154891832636 -1138 1.47183699189280 -1140 1.47209800955853 -1142 1.47233456778191 -1144 1.47257573473017 -1146 1.47283356711807 -1148 1.47307259446091 -1150 1.47326381831914 -1152 1.47336996150258 -1154 1.47330710459724 -1156 1.47293509477181 -1158 1.47266594765858 -1160 1.47259707273045 -1162 1.47267982619196 -1164 1.47288581951866 -1166 1.47317564562733 -1168 1.47355761342796 -1170 1.47402209612147 -1172 1.47459197223784 -1174 1.47529073492465 -1176 1.47579201984062 -1178 1.47389452829121 -1180 1.46944888964386 -1182 1.46919538008765 -1184 1.46993706618235 -1186 1.47058584953654 -1188 1.47109418040909 -1190 1.47148385016616 -1192 1.47177356227783 -1194 1.47196611004565 -1196 1.47207728619391 -1198 1.47220096862104 -1200 1.47245042725556 -1202 1.47283662225685 -1204 1.47330431122777 -1206 1.47375342391676 -1208 1.47385318037376 -1210 1.47280027515132 -1212 1.47140252001622 -1214 1.47159489093342 -1216 1.47205516262945 -1218 1.47243159969193 -1220 1.47273916940180 -1222 1.47301272972689 -1224 1.47326393439881 -1226 1.47349889542765 -1228 1.47371659199003 -1230 1.47393059180901 -1232 1.47413378656172 -1234 1.47433469964923 -1236 1.47453039235071 -1238 1.47471647903353 -1240 1.47488491964895 -1242 1.47502851521336 -1244 1.47512495593972 -1246 1.47514408931247 -1248 1.47505892212860 -1250 1.47489972136187 -1252 1.47484106680061 -1254 1.47493923662727 -1256 1.47509846252746 -1258 1.47526567770392 -1260 1.47542057167793 -1262 1.47557439533574 -1264 1.47572116951863 -1266 1.47586745130108 -1268 1.47601147334394 -1270 1.47614701936603 -1272 1.47627015399601 -1274 1.47638091039797 -1276 1.47648361938200 -1278 1.47658183373250 -1280 1.47668313548634 -1282 1.47679959880658 -1284 1.47693261142928 -1286 1.47707297484201 -1288 1.47722283448259 -1290 1.47738070554226 -1292 1.47754337420682 -1294 1.47770716341215 -1296 1.47786028165421 -1298 1.47798887584323 -1300 1.47808934206014 -1302 1.47818243145329 -1304 1.47830827158180 -1306 1.47849364056186 -1308 1.47871221118251 -1310 1.47885808674696 -1312 1.47873010242650 -1314 1.47845803582890 -1316 1.47844930632483 -1318 1.47861179184706 -1320 1.47881460317012 -1322 1.47902291732804 -1324 1.47922066571969 -1326 1.47941412833592 -1328 1.47959210849367 -1330 1.47973167816960 -1332 1.47972691925884 -1334 1.47975105896865 -1336 1.47993512250321 -1338 1.48014837613309 -1340 1.48037360725078 -1342 1.48060038757184 -1344 1.48082753333001 -1346 1.48104968129957 -1348 1.48126553234897 -1350 1.48148716441519 -1352 1.48173647624861 -1354 1.48200446828695 -1356 1.48227599517218 -1358 1.48252791950314 -1360 1.48276324869435 -1362 1.48303458306896 -1364 1.48338223264961 -1366 1.48379902481358 -1368 1.48427223592360 -1370 1.48482960284728 -1372 1.48552801978829 -1374 1.48627546417750 -1376 1.48651700069497 -1378 1.48432599213190 -1380 1.47977968972337 -1382 1.47800355097223 -1384 1.47805316502072 -1386 1.47842143243600 -1388 1.47890024839336 -1390 1.47940651645865 -1392 1.47991712903019 -1394 1.48041754934745 -1396 1.48089750917415 -1398 1.48135158724828 -1400 1.48179771126525 -1402 1.48224069922095 -1404 1.48266579602562 -1406 1.48305944158359 -1408 1.48342298716122 -1410 1.48379030750588 -1412 1.48419035949659 -1414 1.48461342812701 -1416 1.48505164072948 -1418 1.48548005566484 -1420 1.48588588173361 -1422 1.48626036521862 -1424 1.48659663343317 -1426 1.48690837523274 -1428 1.48726752634633 -1430 1.48775649947673 -1432 1.48841619746365 -1434 1.48924758721438 -1436 1.49022965011215 -1438 1.49126109208233 -1440 1.49220157896289 -1442 1.49274786168208 -1444 1.49275436842747 -1446 1.49244040803637 -1448 1.49203506779732 -1450 1.49142867984501 -1452 1.49040469923150 -1454 1.48888698396754 -1456 1.48687784303199 -1458 1.48442850436533 -1460 1.48174723159373 -1462 1.47906693249971 -1464 1.47667955286596 -1466 1.47482397028080 -1468 1.47364425598396 -1470 1.47319928261846 -1472 1.47339047699181 -1474 1.47411629804730 -1476 1.47533374680842 -1478 1.47696195971213 -1480 1.47908527215456 -1482 1.48180866451580 -1484 1.48531763958917 -1486 1.48994928684771 -1488 1.49499065429219 -1490 1.50119515596543 -1492 1.50990378628749 -1494 1.51196694565470 -1496 1.44560795826024 -1498 1.41456003179507 -1500 1.42568725767340 -1502 1.43509242814603 -1504 1.44179871660811 -1506 1.44669596130319 -1508 1.45033176716821 -1510 1.45318682655572 -1512 1.45545228048253 -1514 1.45731921509841 -1516 1.45894932377219 -1518 1.46041227592838 -1520 1.46176173499470 -1522 1.46244384736929 -1524 1.46122289585454 -1526 1.46043285810887 -1528 1.46128161485975 -1530 1.46226970833946 -1532 1.46306701307330 -1534 1.46366399954379 -1536 1.46409417910494 -1538 1.46444109535269 -1540 1.46477704752644 -1542 1.46519165698743 -1544 1.46568852566980 -1546 1.46623889292729 -1548 1.46677632998672 -1550 1.46719167293357 -1552 1.46747772804745 -1554 1.46791932189599 -1556 1.46844756268659 -1558 1.46898255634672 -1560 1.46952197034328 -1562 1.46999610489784 -1564 1.47038792635287 -1566 1.47066419723057 -1568 1.47075696992025 -1570 1.47067580679212 -1572 1.47047224204500 -1574 1.47030976437525 -1576 1.47033092176687 -1578 1.47057489703138 -1580 1.47099907306615 -1582 1.47158364170880 -1584 1.47213789972489 -1586 1.47240454856960 -1588 1.47273455527947 -1590 1.47343724065447 -1592 1.47446091811145 -1594 1.47574194447918 -1596 1.47705173230297 -1598 1.47867335885708 -1600 1.48062028756105 -1602 1.48036168324124 -1604 1.47134299168096 -1606 1.45508276794757 -1608 1.45359592019623 -1610 1.45693626090464 -1612 1.45964926448336 -1614 1.46156535264851 -1616 1.46294485069237 -1618 1.46393384687173 -1620 1.46454159062356 -1622 1.46478536173497 -1624 1.46467572345167 -1626 1.46443675069875 -1628 1.46442873304410 -1630 1.46468245393626 -1632 1.46507304958839 -1634 1.46551002264583 -1636 1.46597619450157 -1638 1.46639465048447 -1640 1.46677714745798 -1642 1.46713350654907 -1644 1.46746066478520 -1646 1.46777688897226 -1648 1.46807230212257 -1650 1.46832313178042 -1652 1.46853535477890 -1654 1.46871126235072 -1656 1.46886441952877 -1658 1.46897717842913 -1660 1.46906019325977 -1662 1.46917336129198 -1664 1.46933992968848 -1666 1.46953218537231 -1668 1.46973458666196 -1670 1.46993137012353 -1672 1.47010972990258 -1674 1.47023592719105 -1676 1.47026189453436 -1678 1.47023042790416 -1680 1.47026824213020 -1682 1.47039195163007 -1684 1.47055816296083 -1686 1.47072223030395 -1688 1.47088122473311 -1690 1.47102029360098 -1692 1.47114084717626 -1694 1.47123960018069 -1696 1.47128779153643 -1698 1.47126399416326 -1700 1.47132896383171 -1702 1.47143681802407 -1704 1.47155945773850 -1706 1.47167556592223 -1708 1.47178940246904 -1710 1.47190604771198 -1712 1.47202944260493 -1714 1.47216568678700 -1716 1.47231539851653 -1718 1.47248386890388 -1720 1.47265447525274 -1722 1.47281731074269 -1724 1.47295042900518 -1726 1.47304600716400 -1728 1.47309375883840 -1730 1.47305939547434 -1732 1.47291741773166 -1734 1.47267688996611 -1736 1.47235533806185 -1738 1.47204881790723 -1740 1.47183343980199 -1742 1.47174243401936 -1744 1.47176880507034 -1746 1.47188162854264 -1748 1.47204632190602 -1750 1.47223241396135 -1752 1.47242316015794 -1754 1.47260867420886 -1756 1.47278327809895 -1758 1.47293258838400 -1760 1.47306085751883 -1762 1.47317848011178 -1764 1.47329045336641 -1766 1.47339550159425 -1768 1.47349145470639 -1770 1.47357817480071 -1772 1.47366712599018 -1774 1.47373929846121 -1776 1.47378551120112 -1778 1.47379002011073 -1780 1.47381389620918 -1782 1.47392354891587 -1784 1.47409170003533 -1786 1.47427198188798 -1788 1.47442615650942 -1790 1.47457291909648 -1792 1.47474878427437 -1794 1.47489348470272 -1796 1.47493489892040 -1798 1.47478110512949 -1800 1.47437081445076 -1802 1.47373622085690 -1804 1.47304588258769 -1806 1.47251222749590 -1808 1.47223472657190 -1810 1.47217821063195 -1812 1.47227236503443 -1814 1.47243859996067 -1816 1.47259748640805 -1818 1.47271718154483 -1820 1.47279535803734 -1822 1.47284920630461 -1824 1.47291235631300 -1826 1.47301397376823 -1828 1.47314852957960 -1830 1.47329330162724 -1832 1.47342543709755 -1834 1.47357056562475 -1836 1.47375873628681 -1838 1.47398158101288 -1840 1.47422445263378 -1842 1.47448077748417 -1844 1.47474586805163 -1846 1.47500613122839 -1848 1.47524723874056 -1850 1.47539669943437 -1852 1.47535125830335 -1854 1.47504217493076 -1856 1.47442394463698 -1858 1.47358493716912 -1860 1.47284787021825 -1862 1.47246109965773 -1864 1.47241132718491 -1866 1.47253616431924 -1868 1.47266502935955 -1870 1.47267966566327 -1872 1.47252923128383 -1874 1.47227196419049 -1876 1.47203509622402 -1878 1.47192107290153 -1880 1.47194298711947 -1882 1.47205363793314 -1884 1.47220708298649 -1886 1.47237095289447 -1888 1.47253062677600 -1890 1.47268167466003 -1892 1.47283038859118 -1894 1.47298500841240 -1896 1.47313109785186 -1898 1.47324769232051 -1900 1.47333129201763 -1902 1.47341557098201 -1904 1.47353087942641 -1906 1.47366534069078 -1908 1.47380841038952 -1910 1.47395828541387 -1912 1.47411340271346 -1914 1.47427400000000 -1916 1.47443781042483 -1918 1.47460593444462 -1920 1.47477582054714 -1922 1.47493879861924 -1924 1.47508438695513 -1926 1.47522698209875 -1928 1.47539264822422 -1930 1.47558260671450 -1932 1.47576219402042 -1934 1.47587640732885 -1936 1.47583908582835 -1938 1.47553060901904 -1940 1.47489150443496 -1942 1.47409542930774 -1944 1.47334201979217 -1946 1.47275002485068 -1948 1.47244925775411 -1950 1.47239944627947 -1952 1.47247579265655 -1954 1.47255459735783 -1956 1.47256197135638 -1958 1.47246521668706 -1960 1.47228135320174 -1962 1.47212551111344 -1964 1.47202075140180 -1966 1.47202761573580 -1968 1.47213420575515 -1970 1.47229043240161 -1972 1.47246807810995 -1974 1.47265001716927 -1976 1.47282643638217 -1978 1.47298226071844 -1980 1.47310651432274 -1982 1.47317949653548 -1984 1.47321671851061 -1986 1.47327006170979 -1988 1.47332686296001 -1990 1.47332929557274 -1992 1.47327822607353 -1994 1.47322150680404 -1996 1.47323618581223 -1998 1.47331824302286 -2000 1.47341135456857 -2002 1.47349412728021 -2004 1.47356154386820 -2006 1.47361224775319 -2008 1.47364186456648 -2010 1.47365636042820 -2012 1.47367336928224 -2014 1.47370233665225 -2016 1.47373443692998 -2018 1.47377205797454 -2020 1.47381648358614 -2022 1.47386111301432 -2024 1.47390577969427 -2026 1.47395028817579 -2028 1.47399564538301 -2030 1.47403660265942 -2032 1.47406519767252 -2034 1.47408330994744 -2036 1.47412047010970 -2038 1.47416098226622 -2040 1.47420115643528 -2042 1.47423947043298 -2044 1.47427612941305 -2046 1.47431218419212 -2048 1.47434648116260 -2050 1.47438071427926 -2052 1.47441278409228 -2054 1.47444520616084 -2056 1.47447627049456 -2058 1.47450675882064 -2060 1.47453588733404 -2062 1.47456386702353 -2064 1.47459073458299 -2066 1.47461205370700 -2068 1.47461817299827 -2070 1.47461840283149 -2072 1.47463277175523 -2074 1.47465427880758 -2076 1.47467709152152 -2078 1.47470098997954 -2080 1.47472590140090 -2082 1.47475065118331 -2084 1.47477468067538 -2086 1.47479776494193 -2088 1.47482142195457 -2090 1.47484633615274 -2092 1.47487121877337 -2094 1.47489609572630 -2096 1.47491999718268 -2098 1.47494434691905 -2100 1.47496980619050 -2102 1.47499564254391 -2104 1.47502159030193 -2106 1.47504417582923 -2108 1.47506264533273 -2110 1.47507395400220 -2112 1.47508393678745 -2114 1.47510043049552 -2116 1.47511198378437 -2118 1.47511214568773 -2120 1.47512762848859 -2122 1.47515211305019 -2124 1.47517182375646 -2126 1.47518774789092 -2128 1.47521310826668 -2130 1.47524116489652 -2132 1.47527005212030 -2134 1.47529590535418 -2136 1.47531935031383 -2138 1.47534209120029 -2140 1.47536554624085 -2142 1.47539141048574 -2144 1.47541735186985 -2146 1.47544449187503 -2148 1.47547342544397 -2150 1.47550619668115 -2152 1.47554178363426 -2154 1.47558203516447 -2156 1.47562160093130 -2158 1.47565253763469 -2160 1.47566151568534 -2162 1.47561225894049 -2164 1.47548068559088 -2166 1.47537296738995 -2168 1.47536211403117 -2170 1.47539890926361 -2172 1.47544656614673 -2174 1.47549197749543 -2176 1.47553203213436 -2178 1.47556864358705 -2180 1.47560215753198 -2182 1.47562464470162 -2184 1.47562085582639 -2186 1.47558980476200 -2188 1.47557480988891 -2190 1.47558033450347 -2192 1.47559232749770 -2194 1.47561457143455 -2196 1.47564434139990 -2198 1.47567857523082 -2200 1.47571617803152 -2202 1.47575726786490 -2204 1.47579337721307 -2206 1.47579746772491 -2208 1.47574189594736 -2210 1.47571194854898 -2212 1.47572956986763 -2214 1.47575472007504 -2216 1.47578621163266 -2218 1.47581942101129 -2220 1.47585088742314 -2222 1.47587897173469 -2224 1.47590298856875 -2226 1.47592470046514 -2228 1.47594779372938 -2230 1.47597265137572 -2232 1.47599748726300 -2234 1.47601807246604 -2236 1.47602689076481 -2238 1.47603005518190 -2240 1.47604281703214 -2242 1.47606726159445 -2244 1.47609784881235 -2246 1.47612902016881 -2248 1.47615949406397 -2250 1.47618852095385 -2252 1.47621446243625 -2254 1.47623489680521 -2256 1.47624408046323 -2258 1.47623018458297 -2260 1.47617742404058 -2262 1.47611228816094 -2264 1.47608500995198 -2266 1.47609867784140 -2268 1.47612909924113 -2270 1.47616476482454 -2272 1.47619947439469 -2274 1.47623253066542 -2276 1.47626319551276 -2278 1.47628200368923 -2280 1.47626680426481 -2282 1.47624376410414 -2284 1.47624714378783 -2286 1.47623939342228 -2288 1.47622263640102 -2290 1.47621701248520 -2292 1.47622414847935 -2294 1.47624639786310 -2296 1.47628230617739 -2298 1.47632637399547 -2300 1.47637356620751 -2302 1.47642523943489 -2304 1.47647814675017 -2306 1.47652996718143 -2308 1.47657059295077 -2310 1.47656605147736 -2312 1.47646451238365 -2314 1.47632139830172 -2316 1.47626434895975 -2318 1.47628666976549 -2320 1.47634178441866 -2322 1.47640626197946 -2324 1.47647367980355 -2326 1.47654420112269 -2328 1.47661693748934 -2330 1.47668220577778 -2332 1.47670897421522 -2334 1.47661953024202 -2336 1.47640699456743 -2338 1.47628918090598 -2340 1.47627922381635 -2342 1.47629610568572 -2344 1.47633775742674 -2346 1.47639668853055 -2348 1.47645464076621 -2350 1.47650252320800 -2352 1.47653396769864 -2354 1.47655188224605 -2356 1.47656625779288 -2358 1.47656342537266 -2360 1.47646841808416 -2362 1.47627988649258 -2364 1.47623361007945 -2366 1.47628349602868 -2368 1.47634714131595 -2370 1.47640579435613 -2372 1.47645673781608 -2374 1.47650329311272 -2376 1.47654473856361 -2378 1.47658519751564 -2380 1.47662360662062 -2382 1.47665509133976 -2384 1.47667939867421 -2386 1.47668999377568 -2388 1.47666832266751 -2390 1.47662551968266 -2392 1.47661227607686 -2394 1.47662326945870 -2396 1.47664538468599 -2398 1.47667621017793 -2400 1.47670840326370 -2402 1.47673732384369 -2404 1.47676080113293 -2406 1.47677566835384 -2408 1.47677747426079 -2410 1.47675773033081 -2412 1.47671176533526 -2414 1.47665898774225 -2416 1.47662888566870 -2418 1.47661609885311 -2420 1.47661804906686 -2422 1.47663361079607 -2424 1.47665615258179 -2426 1.47667989702189 -2428 1.47670167875450 -2430 1.47671889251986 -2432 1.47672660033007 -2434 1.47672581905542 -2436 1.47673588691547 -2438 1.47675625346807 -2440 1.47677811479011 -2442 1.47680201299431 -2444 1.47682690323960 -2446 1.47685134280847 -2448 1.47687468838441 -2450 1.47689577948214 -2452 1.47691461221252 -2454 1.47693121483650 -2456 1.47694483659804 -2458 1.47695706614166 -2460 1.47696841245298 -2462 1.47698092980728 -2464 1.47699165258073 -2466 1.47699892231642 -2468 1.47700518850467 -2470 1.47701681917772 -2472 1.47703371133993 -2474 1.47705172804537 -2476 1.47706963205611 -2478 1.47708839046513 -2480 1.47710595182822 -2482 1.47712353018048 -2484 1.47714045399508 -2486 1.47715526898974 -2488 1.47716785931325 -2490 1.47717746351979 -2492 1.47718774105152 -2494 1.47720108087222 -2496 1.47721116876733 -2498 1.47720908793559 -2500 1.47721975153658 -2502 1.47724153102797 -2504 1.47726842063502 -2506 1.47729164115863 -2508 1.47729793164711 -2510 1.47728751673010 -2512 1.47728595976167 -2514 1.47730346177822 -2516 1.47732866245654 -2518 1.47735480680865 -2520 1.47737778321487 -2522 1.47739640465051 -2524 1.47741388745850 -2526 1.47743674344455 -2528 1.47746686662636 -2530 1.47749859543051 -2532 1.47752798101785 -2534 1.47755196992726 -2536 1.47757059463727 -2538 1.47758008928483 -2540 1.47756988987874 -2542 1.47755427512999 -2544 1.47756361259663 -2546 1.47758639316885 -2548 1.47760210701986 -2550 1.47761136589934 -2552 1.47762359682751 -2554 1.47764677677048 -2556 1.47767474710701 -2558 1.47770246497527 -2560 1.47773042785198 -2562 1.47776361629940 -2564 1.47779998470837 -2566 1.47783821733131 -2568 1.47787806111451 -2570 1.47792064098960 -2572 1.47796488547863 -2574 1.47800956216730 -2576 1.47805314833494 -2578 1.47809883475004 -2580 1.47814186001493 -2582 1.47815997256423 -2584 1.47809360441189 -2586 1.47790866325303 -2588 1.47773400000000 -2590 1.47767480433235 -2592 1.47770364229106 -2594 1.47776662663767 -2596 1.47783459041379 -2598 1.47789713249225 -2600 1.47795076443856 -2602 1.47798212010995 -2604 1.47796839500240 -2606 1.47793022585363 -2608 1.47793384355028 -2610 1.47794564701586 -2612 1.47795047312967 -2614 1.47797539539217 -2616 1.47801274460181 -2618 1.47805108460942 -2620 1.47808604011951 -2622 1.47811663248782 -2624 1.47814577420760 -2626 1.47817100891022 -2628 1.47819185746701 -2630 1.47820200756835 -2632 1.47819509341812 -2634 1.47818069648523 -2636 1.47819937787229 -2638 1.47823535219485 -2640 1.47827081637876 -2642 1.47830404351228 -2644 1.47832995386373 -2646 1.47835243329009 -2648 1.47837673632241 -2650 1.47840422324866 -2652 1.47843503880664 -2654 1.47846525754672 -2656 1.47849229804531 -2658 1.47851619218461 -2660 1.47854228554823 -2662 1.47857183053155 -2664 1.47860675830984 -2666 1.47864502580642 -2668 1.47868442524625 -2670 1.47871645234617 -2672 1.47872844710197 -2674 1.47874644966096 -2676 1.47878367512841 -2678 1.47882577091271 -2680 1.47886734102623 -2682 1.47890576030499 -2684 1.47894410487476 -2686 1.47898246676081 -2688 1.47902078634990 -2690 1.47905697663379 -2692 1.47909348635787 -2694 1.47913253241860 -2696 1.47917713682535 -2698 1.47922494363690 -2700 1.47927370219512 -2702 1.47932350132184 -2704 1.47937477829841 -2706 1.47942977955203 -2708 1.47948662996503 -2710 1.47954572465315 -2712 1.47960899951982 -2714 1.47967582145469 -2716 1.47974783424700 -2718 1.47982686383801 -2720 1.47991434869689 -2722 1.48001161889876 -2724 1.48011529035864 -2726 1.48021743640732 -2728 1.48029271013490 -2730 1.48028469924544 -2732 1.48009333694647 -2734 1.47968604519118 -2736 1.47926069770098 -2738 1.47904382199068 -2740 1.47903137276969 -2742 1.47912234371550 -2744 1.47924475242006 -2746 1.47936896123536 -2748 1.47948547683776 -2750 1.47959346670195 -2752 1.47969391424782 -2754 1.47978696270901 -2756 1.47987478298896 -2758 1.47995758449142 -2760 1.48003727324589 -2762 1.48011924219933 -2764 1.48019913384442 -2766 1.48027922637338 -2768 1.48035769798330 -2770 1.48043385800477 -2772 1.48050725415469 -2774 1.48057567058368 -2776 1.48065105935983 -2778 1.48072266299449 -2780 1.48079977415031 -2782 1.48088053164822 -2784 1.48096687278145 -2786 1.48105512159158 -2788 1.48114937559786 -2790 1.48124466747644 -2792 1.48134118881539 -2794 1.48144014454067 -2796 1.48153308521599 -2798 1.48162875830237 -2800 1.48173023207917 -2802 1.48183567152155 -2804 1.48193764434860 -2806 1.48203772197889 -2808 1.48213332822876 -2810 1.48221893030834 -2812 1.48230128068059 -2814 1.48241543210576 -2816 1.48256188329700 -2818 1.48272146386266 -2820 1.48288593713105 -2822 1.48303146156846 -2824 1.48316535466125 -2826 1.48333287967432 -2828 1.48353886468435 -2830 1.48376233940652 -2832 1.48399372362724 -2834 1.48422859660869 -2836 1.48446914811588 -2838 1.48472335986644 -2840 1.48498891752954 -2842 1.48526978967144 -2844 1.48556244410920 -2846 1.48585030113417 -2848 1.48611635747129 -2850 1.48631703683473 -2852 1.48642616794096 -2854 1.48638931900690 -2856 1.48617288132870 -2858 1.48578055258264 -2860 1.48528254616381 -2862 1.48477473720320 -2864 1.48431306898547 -2866 1.48390294869478 -2868 1.48352758708888 -2870 1.48315923324289 -2872 1.48276317318322 -2874 1.48233036174381 -2876 1.48190033197863 -2878 1.48156989857095 -2880 1.48135829837939 -2882 1.48127046426508 -2884 1.48129224687463 -2886 1.48142276034719 -2888 1.48166152381514 -2890 1.48199469355260 -2892 1.48241286263108 -2894 1.48290615618025 -2896 1.48346174779728 -2898 1.48406068695481 -2900 1.48469749104873 -2902 1.48534901849277 -2904 1.48600451268347 -2906 1.48663330502903 -2908 1.48716049340272 -2910 1.48749427432860 -2912 1.48745634999468 -2914 1.48687918789111 -2916 1.48564647709805 -2918 1.48378138421067 -2920 1.48160842259702 -2922 1.47963902212310 -2924 1.47817563267450 -2926 1.47725366173650 -2928 1.47680009878321 -2930 1.47670600337876 -2932 1.47683592850229 -2934 1.47707848906770 -2936 1.47736368012666 -2938 1.47761998820843 -2940 1.47780991969196 -2942 1.47790616610153 -2944 1.47789352215007 -2946 1.47776642994662 -2948 1.47755303644224 -2950 1.47732098571495 -2952 1.47710982305520 -2954 1.47692656410946 -2956 1.47677865708199 -2958 1.47664389769752 -2960 1.47653950030308 -2962 1.47652380859929 -2964 1.47671143784641 -2966 1.47706590558488 -2968 1.47742684312635 -2970 1.47770009243870 -2972 1.47786247321149 -2974 1.47794741384886 -2976 1.47797899370123 -2978 1.47798223648454 -2980 1.47795004028588 -2982 1.47790147416153 -2984 1.47795735389707 -2986 1.47814496927765 -2988 1.47844692443850 -2990 1.47884918651108 -2992 1.47932344250011 -2994 1.47986306802417 -2996 1.48043188046815 -2998 1.48097537656156 -3000 1.48138517100778 -3002 1.48162356419426 -3004 1.48185212024737 -3006 1.48228440440630 -3008 1.48297178567222 -3010 1.48385673952528 -3012 1.48487993544870 -3014 1.48595665242293 -3016 1.48695938009756 -3018 1.48767468298278 -3020 1.48765524108674 -3022 1.48618132554454 -3024 1.48268461964750 -3026 1.47762082421352 -3028 1.47232727506644 -3030 1.46776463943145 -3032 1.46440878935946 -3034 1.46247197560802 -3036 1.46196769309556 -3038 1.46253947223186 -3040 1.46367382189299 -3042 1.46491417717244 -3044 1.46601563099238 -3046 1.46697686500990 -3048 1.46781464802766 -3050 1.46847402904648 -3052 1.46887853308036 -3054 1.46895675121188 -3056 1.46875323941201 -3058 1.46834302704055 -3060 1.46771282666113 -3062 1.46675300487368 -3064 1.46553703632205 -3066 1.46435734374414 -3068 1.46364333274111 -3070 1.46361967631567 -3072 1.46416270683630 -3074 1.46500589551713 -3076 1.46593266001109 -3078 1.46681497080407 -3080 1.46754108115619 -3082 1.46785690887919 -3084 1.46726760945338 -3086 1.46533247163430 -3088 1.46268292062625 -3090 1.46120303549580 -3092 1.46134478479294 -3094 1.46221369798373 -3096 1.46321247938499 -3098 1.46411661764251 -3100 1.46482369285261 -3102 1.46525636685728 -3104 1.46533581524600 -3106 1.46519098442260 -3108 1.46516907412280 -3110 1.46538060689336 -3112 1.46568276755924 -3114 1.46596931336371 -3116 1.46619739482536 -3118 1.46639101964608 -3120 1.46661054944789 -3122 1.46687049156442 -3124 1.46713909721892 -3126 1.46740251735782 -3128 1.46765965900548 -3130 1.46790595336806 -3132 1.46813448944673 -3134 1.46834723054744 -3136 1.46854553575727 -3138 1.46872578997706 -3140 1.46889606787041 -3142 1.46905361684206 -3144 1.46920788445114 -3146 1.46935155893370 -3148 1.46948926642375 -3150 1.46961711994727 -3152 1.46973932284344 -3154 1.46985771524525 -3156 1.46997084147302 -3158 1.47008125375275 -3160 1.47018834504960 -3162 1.47028749194193 -3164 1.47037561555632 -3166 1.47044733671974 -3168 1.47049523638823 -3170 1.47053287904761 -3172 1.47059397007388 -3174 1.47068028883230 -3176 1.47077100092966 -3178 1.47085834352883 -3180 1.47094237966502 -3182 1.47102127140257 -3184 1.47109691171596 -3186 1.47116815404231 -3188 1.47123618567128 -3190 1.47130184743484 -3192 1.47136511381017 -3194 1.47142734846007 -3196 1.47148851688128 -3198 1.47154755038698 -3200 1.47160533014890 -3202 1.47166012795457 -3204 1.47171224992608 -3206 1.47176315489772 -3208 1.47181395071669 -3210 1.47186466789480 -3212 1.47191661577937 -3214 1.47196738520913 -3216 1.47201707857991 -3218 1.47206588870145 -3220 1.47211365240659 -3222 1.47215936522226 -3224 1.47220500735251 -3226 1.47225033231421 -3228 1.47229424065224 -3230 1.47233733691715 -3232 1.47237980638024 -3234 1.47242122252104 -3236 1.47246173766460 -3238 1.47250090500984 -3240 1.47253933121953 -3242 1.47257666559418 -3244 1.47261289353408 -3246 1.47264942225475 -3248 1.47268468000033 -3250 1.47271896562139 -3252 1.47275329822459 -3254 1.47278723826016 -3256 1.47281957643892 -3258 1.47285086138010 -3260 1.47288192451579 -3262 1.47291300000000 -3264 1.47294399234620 -3266 1.47297519999867 -3268 1.47300456597122 -3270 1.47303306949960 -3272 1.47306229798834 -3274 1.47309029819990 -3276 1.47311725100397 -3278 1.47314519229524 -3280 1.47317191831342 -3282 1.47319904835607 -3284 1.47322480511295 -3286 1.47325068033533 -3288 1.47327558727819 -3290 1.47330149637565 -3292 1.47332523279087 -3294 1.47335025198767 -3296 1.47337510971327 -3298 1.47339905996618 -3300 1.47342296954304 -3302 1.47344582202335 -3304 1.47346658074592 -3306 1.47348738493031 -3308 1.47350703202034 -3310 1.47352683574489 -3312 1.47354755048152 -3314 1.47356829450234 -3316 1.47358903215508 -3318 1.47360880465673 -3320 1.47362855417648 -3322 1.47364734936801 -3324 1.47366547803442 -3326 1.47368305009043 -3328 1.47369959979993 -3330 1.47371718446385 -3332 1.47373378124277 -3334 1.47375068696817 -3336 1.47376844875514 -3338 1.47378666053286 -3340 1.47380404591194 -3342 1.47382276516742 -3344 1.47384040963255 -3346 1.47385904663877 -3348 1.47387858239480 -3350 1.47389752320424 -3352 1.47391752328576 -3354 1.47393606713734 -3356 1.47395488874822 -3358 1.47397353990369 -3360 1.47399234620080 -3362 1.47401055721405 -3364 1.47402826981442 -3366 1.47404508175359 -3368 1.47406141829832 -3370 1.47407704342040 -3372 1.47409059132764 -3374 1.47410503032631 -3376 1.47411782704824 -3378 1.47413081528590 -3380 1.47414326557675 -3382 1.47415571156753 -3384 1.47416717298263 -3386 1.47417841575972 -3388 1.47418915024028 -3390 1.47419998707473 -3392 1.47421190062571 -3394 1.47422443429139 -3396 1.47423683452363 -3398 1.47425033505022 -3400 1.47426480528893 -3402 1.47427826680738 -3404 1.47429170418534 -3406 1.47430477066294 -3408 1.47431835512023 -3410 1.47433193595530 -3412 1.47434642118416 -3414 1.47436087920127 -3416 1.47437532634686 -3418 1.47439018109776 -3420 1.47440515622779 -3422 1.47442044328205 -3424 1.47443606103306 -3426 1.47444964436527 -3428 1.47446294847254 -3430 1.47447439134230 -3432 1.47448416869267 -3434 1.47449072019392 -3436 1.47449591374259 -3438 1.47449903792179 -3440 1.47449993449953 -3442 1.47450135456237 -3444 1.47450458795612 -3446 1.47450875108451 -3448 1.47451445884208 -3450 1.47452484258401 -3452 1.47453827241797 -3454 1.47455172262247 -3456 1.47456517206426 -3458 1.47457860151852 -3460 1.47459192059468 -3462 1.47460450298261 -3464 1.47461696547474 -3466 1.47462839859281 -3468 1.47463987388367 -3470 1.47465188200346 -3472 1.47466266389847 -3474 1.47467409691578 -3476 1.47468473670609 -3478 1.47469608306209 -3480 1.47470752002888 -3482 1.47471885889080 -3484 1.47473141107054 -3486 1.47474321664113 -3488 1.47475540477105 -3490 1.47476577603289 -3492 1.47477517654069 -3494 1.47478437686762 -3496 1.47479375265910 -3498 1.47480352784050 -3500 1.47481386454326 -3502 1.47482540254891 -3504 1.47483686546170 -3506 1.47484922964243 -3508 1.47486054239155 -3510 1.47487118057395 -3512 1.47488161773392 -3514 1.47489155648764 -3516 1.47489779215940 -3518 1.47490199751604 -3520 1.47490515212000 -3522 1.47490858576642 -3524 1.47491589352572 -3526 1.47492563809847 -3528 1.47493721829251 -3530 1.47494965183138 -3532 1.47496209482301 -3534 1.47497548127118 -3536 1.47498901026331 -3538 1.47500250064110 -3540 1.47501334375007 -3542 1.47502155988466 -3544 1.47502590855583 -3546 1.47502798788122 -3548 1.47502908741446 -3550 1.47503013111600 -3552 1.47503152066431 -3554 1.47503369017078 -3556 1.47503596161309 -3558 1.47503994401260 -3560 1.47504720780187 -3562 1.47505757685400 -3564 1.47506921753979 -3566 1.47508222835820 -3568 1.47509583612677 -3570 1.47510943592653 -3572 1.47512299244722 -3574 1.47513544229862 -3576 1.47514788646150 -3578 1.47515877336465 -3580 1.47516830010454 -3582 1.47517301097796 -3584 1.47516730096467 -3586 1.47516098788624 -3588 1.47515999912529 -3590 1.47516344979552 -3592 1.47516995891151 -3594 1.47517893497533 -3596 1.47518949533554 -3598 1.47519986950803 -3600 1.47520815315630 -3602 1.47521639684906 -3604 1.47522677803691 -3606 1.47523756307109 -3608 1.47524905817071 -3610 1.47526235394740 -3612 1.47527689090454 -3614 1.47529241512157 -3616 1.47530577596310 -3618 1.47531550675526 -3620 1.47531807217956 -3622 1.47531330897623 -3624 1.47530520668685 -3626 1.47530099713781 -3628 1.47530419555884 -3630 1.47531292297539 -3632 1.47532682994681 -3634 1.47534230166646 -3636 1.47535817866622 -3638 1.47537270802382 -3640 1.47538306617453 -3642 1.47538491013479 -3644 1.47537808441815 -3646 1.47536152773521 -3648 1.47533829820411 -3650 1.47531127187157 -3652 1.47528831452931 -3654 1.47527173292062 -3656 1.47526400688559 -3658 1.47526538002071 -3660 1.47527196497124 -3662 1.47528332467912 -3664 1.47529547167214 -3666 1.47530792033597 -3668 1.47531940264238 -3670 1.47532950934428 -3672 1.47533752543273 -3674 1.47534264633859 -3676 1.47534493660391 -3678 1.47534793834948 -3680 1.47535101048592 -3682 1.47535512741537 -3684 1.47536061029192 -3686 1.47536677517540 -3688 1.47537422152313 -3690 1.47538349069671 -3692 1.47539466802181 -3694 1.47540614815786 -3696 1.47541766757740 -3698 1.47543103564364 -3700 1.47544309274752 -3702 1.47545168948545 -3704 1.47545396563826 -3706 1.47545207507319 -3708 1.47544797484465 -3710 1.47544704753668 -3712 1.47545189667326 -3714 1.47545995926878 -3716 1.47547095072698 -3718 1.47548066602429 -3720 1.47548697893292 -3722 1.47548796009613 -3724 1.47548478177503 -3726 1.47547947641639 -3728 1.47547863259801 -3730 1.47548174475524 -3732 1.47548778078125 -3734 1.47549403635331 -3736 1.47550125363908 -3738 1.47550934180435 -3740 1.47551683167599 -3742 1.47552688594006 -3744 1.47553729090548 -3746 1.47554678198008 -3748 1.47555713325216 -3750 1.47556659302775 -3752 1.47557669459374 -3754 1.47558647315562 -3756 1.47559529768016 -3758 1.47560360009648 -3760 1.47561091508282 -3762 1.47561609735508 -3764 1.47562029070796 -3766 1.47562441780911 -3768 1.47563306550754 -3770 1.47564405166112 -3772 1.47565552291783 -3774 1.47566694809298 -3776 1.47567830857219 -3778 1.47568755133462 -3780 1.47569463620025 -3782 1.47569547492168 -3784 1.47568951387041 -3786 1.47567835935080 -3788 1.47566593929693 -3790 1.47566101977927 -3792 1.47566354952827 -3794 1.47567185732029 -3796 1.47568321348889 -3798 1.47569529254648 -3800 1.47570772530959 -3802 1.47571809962768 -3804 1.47572648401529 -3806 1.47573134192597 -3808 1.47573352027040 -3810 1.47573292361008 -3812 1.47573299326894 -3814 1.47573398673360 -3816 1.47573817632205 -3818 1.47574527524272 -3820 1.47575277086820 -3822 1.47575967350287 -3824 1.47576470303911 -3826 1.47576975528735 -3828 1.47577698612879 -3830 1.47578309783396 -3832 1.47578829704916 -3834 1.47579095824278 -3836 1.47578839924332 -3838 1.47578153880935 -3840 1.47577325828602 -3842 1.47576695658169 -3844 1.47576181472562 -3846 1.47575638975092 -3848 1.47574893511221 -3850 1.47574067656252 -3852 1.47573418960490 -3854 1.47573201348304 -3856 1.47573609448654 -3858 1.47574340076582 -3860 1.47575406506568 -3862 1.47576509594980 -3864 1.47577344240290 -3866 1.47577782298125 -3868 1.47577704417063 -3870 1.47576978782061 -3872 1.47576167888626 -3874 1.47575983530599 -3876 1.47576615931522 -3878 1.47577603616264 -3880 1.47578749602566 -3882 1.47579899049744 -3884 1.47580829754193 -3886 1.47581553191111 -3888 1.47582044576450 -3890 1.47582361486597 -3892 1.47582488670530 -3894 1.47582691190401 -3896 1.47582798767520 -3898 1.47583005776107 -3900 1.47583333559154 -3902 1.47583798052018 -3904 1.47584349792097 -3906 1.47584878503057 -3908 1.47585104104660 -3910 1.47584786442429 -3912 1.47584503864650 -3914 1.47584772763597 -3916 1.47585513011730 -3918 1.47586161194681 -3920 1.47586680114244 -3922 1.47586801742881 -3924 1.47586285228063 -3926 1.47585768990955 -3928 1.47585725672200 -3930 1.47586502926929 -3932 1.47587638834149 -3934 1.47588758559686 -3936 1.47589600406114 -3938 1.47590331354213 -3940 1.47591060804636 -3942 1.47591789591720 -3944 1.47592457142526 -3946 1.47593081059303 -3948 1.47593398581283 -3950 1.47593295565452 -3952 1.47592878275285 -3954 1.47592684349640 -3956 1.47592986168501 -3958 1.47593628896516 -3960 1.47594351825970 -3962 1.47595186222678 -3964 1.47595911320580 -3966 1.47596854991323 -3968 1.47597712871599 -3970 1.47598746992252 -3972 1.47600004422535 -3974 1.47601337421929 -3976 1.47602692154134 -3978 1.47603405627977 -3980 1.47602817354059 -3982 1.47601874488156 -3984 1.47602563707167 -3986 1.47604367443527 -3988 1.47606327560645 -3990 1.47608304122308 -3992 1.47610269526207 -3994 1.47612262206064 -3996 1.47614078459134 -3998 1.47615752083133 +800 1.44120102496924 +802 1.44244952355793 +804 1.44362241452370 +806 1.44473157548162 +808 1.44576931343185 +810 1.44673515341541 +812 1.44763153740528 +814 1.44849997645288 +816 1.44937159368323 +818 1.45024511061741 +820 1.45109838059394 +822 1.45193180052550 +824 1.45274307737647 +826 1.45353862658166 +828 1.45431614422343 +830 1.45505783090997 +832 1.45575257351567 +834 1.45637393495922 +836 1.45689903981153 +838 1.45730768949019 +840 1.45754105585989 +842 1.45762277914234 +844 1.45763704972226 +846 1.45770974157519 +848 1.45792998369439 +850 1.45831194599516 +852 1.45879214084464 +854 1.45933254646700 +856 1.45988983429307 +858 1.46043988459777 +860 1.46098292821135 +862 1.46151723624776 +864 1.46203872496248 +866 1.46253192223325 +868 1.46297856786196 +870 1.46337643775072 +872 1.46369146339390 +874 1.46394643585616 +876 1.46431343981134 +878 1.46483594897202 +880 1.46543855156632 +882 1.46608462990801 +884 1.46677023178158 +886 1.46750898169590 +888 1.46831763414834 +890 1.46912802427779 +892 1.46954514029358 +894 1.46839331789610 +896 1.46522362501208 +898 1.46324102369024 +900 1.46324805165743 +902 1.46389477313103 +904 1.46460285834673 +906 1.46524189063531 +908 1.46578615865865 +910 1.46624870624222 +912 1.46665117759441 +914 1.46703266934571 +916 1.46740765502925 +918 1.46779668973951 +920 1.46820189802559 +922 1.46861141696830 +924 1.46901759517687 +926 1.46935992609941 +928 1.46951316452951 +930 1.46945198189589 +932 1.46950773718789 +934 1.46980252488385 +936 1.47016397014931 +938 1.47050527825284 +940 1.47079802225791 +942 1.47102956241248 +944 1.47121559715866 +946 1.47137193902005 +948 1.47152008803324 +950 1.47167672882319 +952 1.47187041329055 +954 1.47208448275609 +956 1.47229737949647 +958 1.47250268786501 +960 1.47267011513556 +962 1.47277605897765 +964 1.47281096169045 +966 1.47283377833869 +968 1.47288521062562 +970 1.47300680592029 +972 1.47318336590741 +974 1.47338081764773 +976 1.47357969584368 +978 1.47371821017195 +980 1.47375527316737 +982 1.47374243519460 +984 1.47381322933363 +986 1.47398487555170 +988 1.47420629302573 +990 1.47448130861459 +992 1.47481507770761 +994 1.47518229617302 +996 1.47557023171639 +998 1.47596326572828 +1000 1.47630080652934 +1002 1.47636823234471 +1004 1.47636996678396 +1006 1.47689524896944 +1008 1.47750032220134 +1010 1.47819158796836 +1012 1.47897505869564 +1014 1.47986167058547 +1016 1.48089513800264 +1018 1.48214271193312 +1020 1.48362438976875 +1022 1.48502767979268 +1024 1.48723564000764 +1026 1.49092289691198 +1028 1.49396375951509 +1030 1.47873935405011 +1032 1.46178488502145 +1034 1.46614728364263 +1036 1.46944972756204 +1038 1.47076139801307 +1040 1.47051860247504 +1042 1.46925108082617 +1044 1.46777888639623 +1046 1.46677062217283 +1048 1.46644104430282 +1050 1.46666085838594 +1052 1.46724995592262 +1054 1.46804818971542 +1056 1.46897681608261 +1058 1.46995585496974 +1060 1.47098590895262 +1062 1.47206714530921 +1064 1.47321734998274 +1066 1.47445175619764 +1068 1.47579194531028 +1070 1.47721681438477 +1072 1.47863578920406 +1074 1.47989036409651 +1076 1.48086017571181 +1078 1.48069474784801 +1080 1.47616731467815 +1082 1.46390771869497 +1084 1.45570223896581 +1086 1.45597971475891 +1088 1.45836941934247 +1090 1.46066235559752 +1092 1.46255873201846 +1094 1.46411051824312 +1096 1.46540793776881 +1098 1.46651204425965 +1100 1.46743001960627 +1102 1.46810891059625 +1104 1.46835826348699 +1106 1.46762316195694 +1108 1.46618573784309 +1110 1.46572358542781 +1112 1.46614920302751 +1114 1.46684472613418 +1116 1.46754366818093 +1118 1.46816766240122 +1120 1.46871860517754 +1122 1.46920770699094 +1124 1.46965073082635 +1126 1.47005259957817 +1128 1.47040212564529 +1130 1.47068773768668 +1132 1.47096001810126 +1134 1.47125261448772 +1136 1.47154891832636 +1138 1.47183699189280 +1140 1.47209800955853 +1142 1.47233456778191 +1144 1.47257573473017 +1146 1.47283356711807 +1148 1.47307259446091 +1150 1.47326381831914 +1152 1.47336996150258 +1154 1.47330710459724 +1156 1.47293509477181 +1158 1.47266594765858 +1160 1.47259707273045 +1162 1.47267982619196 +1164 1.47288581951866 +1166 1.47317564562733 +1168 1.47355761342796 +1170 1.47402209612147 +1172 1.47459197223784 +1174 1.47529073492465 +1176 1.47579201984062 +1178 1.47389452829121 +1180 1.46944888964386 +1182 1.46919538008765 +1184 1.46993706618235 +1186 1.47058584953654 +1188 1.47109418040909 +1190 1.47148385016616 +1192 1.47177356227783 +1194 1.47196611004565 +1196 1.47207728619391 +1198 1.47220096862104 +1200 1.47245042725556 +1202 1.47283662225685 +1204 1.47330431122777 +1206 1.47375342391676 +1208 1.47385318037376 +1210 1.47280027515132 +1212 1.47140252001622 +1214 1.47159489093342 +1216 1.47205516262945 +1218 1.47243159969193 +1220 1.47273916940180 +1222 1.47301272972689 +1224 1.47326393439881 +1226 1.47349889542765 +1228 1.47371659199003 +1230 1.47393059180901 +1232 1.47413378656172 +1234 1.47433469964923 +1236 1.47453039235071 +1238 1.47471647903353 +1240 1.47488491964895 +1242 1.47502851521336 +1244 1.47512495593972 +1246 1.47514408931247 +1248 1.47505892212860 +1250 1.47489972136187 +1252 1.47484106680061 +1254 1.47493923662727 +1256 1.47509846252746 +1258 1.47526567770392 +1260 1.47542057167793 +1262 1.47557439533574 +1264 1.47572116951863 +1266 1.47586745130108 +1268 1.47601147334394 +1270 1.47614701936603 +1272 1.47627015399601 +1274 1.47638091039797 +1276 1.47648361938200 +1278 1.47658183373250 +1280 1.47668313548634 +1282 1.47679959880658 +1284 1.47693261142928 +1286 1.47707297484201 +1288 1.47722283448259 +1290 1.47738070554226 +1292 1.47754337420682 +1294 1.47770716341215 +1296 1.47786028165421 +1298 1.47798887584323 +1300 1.47808934206014 +1302 1.47818243145329 +1304 1.47830827158180 +1306 1.47849364056186 +1308 1.47871221118251 +1310 1.47885808674696 +1312 1.47873010242650 +1314 1.47845803582890 +1316 1.47844930632483 +1318 1.47861179184706 +1320 1.47881460317012 +1322 1.47902291732804 +1324 1.47922066571969 +1326 1.47941412833592 +1328 1.47959210849367 +1330 1.47973167816960 +1332 1.47972691925884 +1334 1.47975105896865 +1336 1.47993512250321 +1338 1.48014837613309 +1340 1.48037360725078 +1342 1.48060038757184 +1344 1.48082753333001 +1346 1.48104968129957 +1348 1.48126553234897 +1350 1.48148716441519 +1352 1.48173647624861 +1354 1.48200446828695 +1356 1.48227599517218 +1358 1.48252791950314 +1360 1.48276324869435 +1362 1.48303458306896 +1364 1.48338223264961 +1366 1.48379902481358 +1368 1.48427223592360 +1370 1.48482960284728 +1372 1.48552801978829 +1374 1.48627546417750 +1376 1.48651700069497 +1378 1.48432599213190 +1380 1.47977968972337 +1382 1.47800355097223 +1384 1.47805316502072 +1386 1.47842143243600 +1388 1.47890024839336 +1390 1.47940651645865 +1392 1.47991712903019 +1394 1.48041754934745 +1396 1.48089750917415 +1398 1.48135158724828 +1400 1.48179771126525 +1402 1.48224069922095 +1404 1.48266579602562 +1406 1.48305944158359 +1408 1.48342298716122 +1410 1.48379030750588 +1412 1.48419035949659 +1414 1.48461342812701 +1416 1.48505164072948 +1418 1.48548005566484 +1420 1.48588588173361 +1422 1.48626036521862 +1424 1.48659663343317 +1426 1.48690837523274 +1428 1.48726752634633 +1430 1.48775649947673 +1432 1.48841619746365 +1434 1.48924758721438 +1436 1.49022965011215 +1438 1.49126109208233 +1440 1.49220157896289 +1442 1.49274786168208 +1444 1.49275436842747 +1446 1.49244040803637 +1448 1.49203506779732 +1450 1.49142867984501 +1452 1.49040469923150 +1454 1.48888698396754 +1456 1.48687784303199 +1458 1.48442850436533 +1460 1.48174723159373 +1462 1.47906693249971 +1464 1.47667955286596 +1466 1.47482397028080 +1468 1.47364425598396 +1470 1.47319928261846 +1472 1.47339047699181 +1474 1.47411629804730 +1476 1.47533374680842 +1478 1.47696195971213 +1480 1.47908527215456 +1482 1.48180866451580 +1484 1.48531763958917 +1486 1.48994928684771 +1488 1.49499065429219 +1490 1.50119515596543 +1492 1.50990378628749 +1494 1.51196694565470 +1496 1.44560795826024 +1498 1.41456003179507 +1500 1.42568725767340 +1502 1.43509242814603 +1504 1.44179871660811 +1506 1.44669596130319 +1508 1.45033176716821 +1510 1.45318682655572 +1512 1.45545228048253 +1514 1.45731921509841 +1516 1.45894932377219 +1518 1.46041227592838 +1520 1.46176173499470 +1522 1.46244384736929 +1524 1.46122289585454 +1526 1.46043285810887 +1528 1.46128161485975 +1530 1.46226970833946 +1532 1.46306701307330 +1534 1.46366399954379 +1536 1.46409417910494 +1538 1.46444109535269 +1540 1.46477704752644 +1542 1.46519165698743 +1544 1.46568852566980 +1546 1.46623889292729 +1548 1.46677632998672 +1550 1.46719167293357 +1552 1.46747772804745 +1554 1.46791932189599 +1556 1.46844756268659 +1558 1.46898255634672 +1560 1.46952197034328 +1562 1.46999610489784 +1564 1.47038792635287 +1566 1.47066419723057 +1568 1.47075696992025 +1570 1.47067580679212 +1572 1.47047224204500 +1574 1.47030976437525 +1576 1.47033092176687 +1578 1.47057489703138 +1580 1.47099907306615 +1582 1.47158364170880 +1584 1.47213789972489 +1586 1.47240454856960 +1588 1.47273455527947 +1590 1.47343724065447 +1592 1.47446091811145 +1594 1.47574194447918 +1596 1.47705173230297 +1598 1.47867335885708 +1600 1.48062028756105 +1602 1.48036168324124 +1604 1.47134299168096 +1606 1.45508276794757 +1608 1.45359592019623 +1610 1.45693626090464 +1612 1.45964926448336 +1614 1.46156535264851 +1616 1.46294485069237 +1618 1.46393384687173 +1620 1.46454159062356 +1622 1.46478536173497 +1624 1.46467572345167 +1626 1.46443675069875 +1628 1.46442873304410 +1630 1.46468245393626 +1632 1.46507304958839 +1634 1.46551002264583 +1636 1.46597619450157 +1638 1.46639465048447 +1640 1.46677714745798 +1642 1.46713350654907 +1644 1.46746066478520 +1646 1.46777688897226 +1648 1.46807230212257 +1650 1.46832313178042 +1652 1.46853535477890 +1654 1.46871126235072 +1656 1.46886441952877 +1658 1.46897717842913 +1660 1.46906019325977 +1662 1.46917336129198 +1664 1.46933992968848 +1666 1.46953218537231 +1668 1.46973458666196 +1670 1.46993137012353 +1672 1.47010972990258 +1674 1.47023592719105 +1676 1.47026189453436 +1678 1.47023042790416 +1680 1.47026824213020 +1682 1.47039195163007 +1684 1.47055816296083 +1686 1.47072223030395 +1688 1.47088122473311 +1690 1.47102029360098 +1692 1.47114084717626 +1694 1.47123960018069 +1696 1.47128779153643 +1698 1.47126399416326 +1700 1.47132896383171 +1702 1.47143681802407 +1704 1.47155945773850 +1706 1.47167556592223 +1708 1.47178940246904 +1710 1.47190604771198 +1712 1.47202944260493 +1714 1.47216568678700 +1716 1.47231539851653 +1718 1.47248386890388 +1720 1.47265447525274 +1722 1.47281731074269 +1724 1.47295042900518 +1726 1.47304600716400 +1728 1.47309375883840 +1730 1.47305939547434 +1732 1.47291741773166 +1734 1.47267688996611 +1736 1.47235533806185 +1738 1.47204881790723 +1740 1.47183343980199 +1742 1.47174243401936 +1744 1.47176880507034 +1746 1.47188162854264 +1748 1.47204632190602 +1750 1.47223241396135 +1752 1.47242316015794 +1754 1.47260867420886 +1756 1.47278327809895 +1758 1.47293258838400 +1760 1.47306085751883 +1762 1.47317848011178 +1764 1.47329045336641 +1766 1.47339550159425 +1768 1.47349145470639 +1770 1.47357817480071 +1772 1.47366712599018 +1774 1.47373929846121 +1776 1.47378551120112 +1778 1.47379002011073 +1780 1.47381389620918 +1782 1.47392354891587 +1784 1.47409170003533 +1786 1.47427198188798 +1788 1.47442615650942 +1790 1.47457291909648 +1792 1.47474878427437 +1794 1.47489348470272 +1796 1.47493489892040 +1798 1.47478110512949 +1800 1.47437081445076 +1802 1.47373622085690 +1804 1.47304588258769 +1806 1.47251222749590 +1808 1.47223472657190 +1810 1.47217821063195 +1812 1.47227236503443 +1814 1.47243859996067 +1816 1.47259748640805 +1818 1.47271718154483 +1820 1.47279535803734 +1822 1.47284920630461 +1824 1.47291235631300 +1826 1.47301397376823 +1828 1.47314852957960 +1830 1.47329330162724 +1832 1.47342543709755 +1834 1.47357056562475 +1836 1.47375873628681 +1838 1.47398158101288 +1840 1.47422445263378 +1842 1.47448077748417 +1844 1.47474586805163 +1846 1.47500613122839 +1848 1.47524723874056 +1850 1.47539669943437 +1852 1.47535125830335 +1854 1.47504217493076 +1856 1.47442394463698 +1858 1.47358493716912 +1860 1.47284787021825 +1862 1.47246109965773 +1864 1.47241132718491 +1866 1.47253616431924 +1868 1.47266502935955 +1870 1.47267966566327 +1872 1.47252923128383 +1874 1.47227196419049 +1876 1.47203509622402 +1878 1.47192107290153 +1880 1.47194298711947 +1882 1.47205363793314 +1884 1.47220708298649 +1886 1.47237095289447 +1888 1.47253062677600 +1890 1.47268167466003 +1892 1.47283038859118 +1894 1.47298500841240 +1896 1.47313109785186 +1898 1.47324769232051 +1900 1.47333129201763 +1902 1.47341557098201 +1904 1.47353087942641 +1906 1.47366534069078 +1908 1.47380841038952 +1910 1.47395828541387 +1912 1.47411340271346 +1914 1.47427400000000 +1916 1.47443781042483 +1918 1.47460593444462 +1920 1.47477582054714 +1922 1.47493879861924 +1924 1.47508438695513 +1926 1.47522698209875 +1928 1.47539264822422 +1930 1.47558260671450 +1932 1.47576219402042 +1934 1.47587640732885 +1936 1.47583908582835 +1938 1.47553060901904 +1940 1.47489150443496 +1942 1.47409542930774 +1944 1.47334201979217 +1946 1.47275002485068 +1948 1.47244925775411 +1950 1.47239944627947 +1952 1.47247579265655 +1954 1.47255459735783 +1956 1.47256197135638 +1958 1.47246521668706 +1960 1.47228135320174 +1962 1.47212551111344 +1964 1.47202075140180 +1966 1.47202761573580 +1968 1.47213420575515 +1970 1.47229043240161 +1972 1.47246807810995 +1974 1.47265001716927 +1976 1.47282643638217 +1978 1.47298226071844 +1980 1.47310651432274 +1982 1.47317949653548 +1984 1.47321671851061 +1986 1.47327006170979 +1988 1.47332686296001 +1990 1.47332929557274 +1992 1.47327822607353 +1994 1.47322150680404 +1996 1.47323618581223 +1998 1.47331824302286 +2000 1.47341135456857 +2002 1.47349412728021 +2004 1.47356154386820 +2006 1.47361224775319 +2008 1.47364186456648 +2010 1.47365636042820 +2012 1.47367336928224 +2014 1.47370233665225 +2016 1.47373443692998 +2018 1.47377205797454 +2020 1.47381648358614 +2022 1.47386111301432 +2024 1.47390577969427 +2026 1.47395028817579 +2028 1.47399564538301 +2030 1.47403660265942 +2032 1.47406519767252 +2034 1.47408330994744 +2036 1.47412047010970 +2038 1.47416098226622 +2040 1.47420115643528 +2042 1.47423947043298 +2044 1.47427612941305 +2046 1.47431218419212 +2048 1.47434648116260 +2050 1.47438071427926 +2052 1.47441278409228 +2054 1.47444520616084 +2056 1.47447627049456 +2058 1.47450675882064 +2060 1.47453588733404 +2062 1.47456386702353 +2064 1.47459073458299 +2066 1.47461205370700 +2068 1.47461817299827 +2070 1.47461840283149 +2072 1.47463277175523 +2074 1.47465427880758 +2076 1.47467709152152 +2078 1.47470098997954 +2080 1.47472590140090 +2082 1.47475065118331 +2084 1.47477468067538 +2086 1.47479776494193 +2088 1.47482142195457 +2090 1.47484633615274 +2092 1.47487121877337 +2094 1.47489609572630 +2096 1.47491999718268 +2098 1.47494434691905 +2100 1.47496980619050 +2102 1.47499564254391 +2104 1.47502159030193 +2106 1.47504417582923 +2108 1.47506264533273 +2110 1.47507395400220 +2112 1.47508393678745 +2114 1.47510043049552 +2116 1.47511198378437 +2118 1.47511214568773 +2120 1.47512762848859 +2122 1.47515211305019 +2124 1.47517182375646 +2126 1.47518774789092 +2128 1.47521310826668 +2130 1.47524116489652 +2132 1.47527005212030 +2134 1.47529590535418 +2136 1.47531935031383 +2138 1.47534209120029 +2140 1.47536554624085 +2142 1.47539141048574 +2144 1.47541735186985 +2146 1.47544449187503 +2148 1.47547342544397 +2150 1.47550619668115 +2152 1.47554178363426 +2154 1.47558203516447 +2156 1.47562160093130 +2158 1.47565253763469 +2160 1.47566151568534 +2162 1.47561225894049 +2164 1.47548068559088 +2166 1.47537296738995 +2168 1.47536211403117 +2170 1.47539890926361 +2172 1.47544656614673 +2174 1.47549197749543 +2176 1.47553203213436 +2178 1.47556864358705 +2180 1.47560215753198 +2182 1.47562464470162 +2184 1.47562085582639 +2186 1.47558980476200 +2188 1.47557480988891 +2190 1.47558033450347 +2192 1.47559232749770 +2194 1.47561457143455 +2196 1.47564434139990 +2198 1.47567857523082 +2200 1.47571617803152 +2202 1.47575726786490 +2204 1.47579337721307 +2206 1.47579746772491 +2208 1.47574189594736 +2210 1.47571194854898 +2212 1.47572956986763 +2214 1.47575472007504 +2216 1.47578621163266 +2218 1.47581942101129 +2220 1.47585088742314 +2222 1.47587897173469 +2224 1.47590298856875 +2226 1.47592470046514 +2228 1.47594779372938 +2230 1.47597265137572 +2232 1.47599748726300 +2234 1.47601807246604 +2236 1.47602689076481 +2238 1.47603005518190 +2240 1.47604281703214 +2242 1.47606726159445 +2244 1.47609784881235 +2246 1.47612902016881 +2248 1.47615949406397 +2250 1.47618852095385 +2252 1.47621446243625 +2254 1.47623489680521 +2256 1.47624408046323 +2258 1.47623018458297 +2260 1.47617742404058 +2262 1.47611228816094 +2264 1.47608500995198 +2266 1.47609867784140 +2268 1.47612909924113 +2270 1.47616476482454 +2272 1.47619947439469 +2274 1.47623253066542 +2276 1.47626319551276 +2278 1.47628200368923 +2280 1.47626680426481 +2282 1.47624376410414 +2284 1.47624714378783 +2286 1.47623939342228 +2288 1.47622263640102 +2290 1.47621701248520 +2292 1.47622414847935 +2294 1.47624639786310 +2296 1.47628230617739 +2298 1.47632637399547 +2300 1.47637356620751 +2302 1.47642523943489 +2304 1.47647814675017 +2306 1.47652996718143 +2308 1.47657059295077 +2310 1.47656605147736 +2312 1.47646451238365 +2314 1.47632139830172 +2316 1.47626434895975 +2318 1.47628666976549 +2320 1.47634178441866 +2322 1.47640626197946 +2324 1.47647367980355 +2326 1.47654420112269 +2328 1.47661693748934 +2330 1.47668220577778 +2332 1.47670897421522 +2334 1.47661953024202 +2336 1.47640699456743 +2338 1.47628918090598 +2340 1.47627922381635 +2342 1.47629610568572 +2344 1.47633775742674 +2346 1.47639668853055 +2348 1.47645464076621 +2350 1.47650252320800 +2352 1.47653396769864 +2354 1.47655188224605 +2356 1.47656625779288 +2358 1.47656342537266 +2360 1.47646841808416 +2362 1.47627988649258 +2364 1.47623361007945 +2366 1.47628349602868 +2368 1.47634714131595 +2370 1.47640579435613 +2372 1.47645673781608 +2374 1.47650329311272 +2376 1.47654473856361 +2378 1.47658519751564 +2380 1.47662360662062 +2382 1.47665509133976 +2384 1.47667939867421 +2386 1.47668999377568 +2388 1.47666832266751 +2390 1.47662551968266 +2392 1.47661227607686 +2394 1.47662326945870 +2396 1.47664538468599 +2398 1.47667621017793 +2400 1.47670840326370 +2402 1.47673732384369 +2404 1.47676080113293 +2406 1.47677566835384 +2408 1.47677747426079 +2410 1.47675773033081 +2412 1.47671176533526 +2414 1.47665898774225 +2416 1.47662888566870 +2418 1.47661609885311 +2420 1.47661804906686 +2422 1.47663361079607 +2424 1.47665615258179 +2426 1.47667989702189 +2428 1.47670167875450 +2430 1.47671889251986 +2432 1.47672660033007 +2434 1.47672581905542 +2436 1.47673588691547 +2438 1.47675625346807 +2440 1.47677811479011 +2442 1.47680201299431 +2444 1.47682690323960 +2446 1.47685134280847 +2448 1.47687468838441 +2450 1.47689577948214 +2452 1.47691461221252 +2454 1.47693121483650 +2456 1.47694483659804 +2458 1.47695706614166 +2460 1.47696841245298 +2462 1.47698092980728 +2464 1.47699165258073 +2466 1.47699892231642 +2468 1.47700518850467 +2470 1.47701681917772 +2472 1.47703371133993 +2474 1.47705172804537 +2476 1.47706963205611 +2478 1.47708839046513 +2480 1.47710595182822 +2482 1.47712353018048 +2484 1.47714045399508 +2486 1.47715526898974 +2488 1.47716785931325 +2490 1.47717746351979 +2492 1.47718774105152 +2494 1.47720108087222 +2496 1.47721116876733 +2498 1.47720908793559 +2500 1.47721975153658 +2502 1.47724153102797 +2504 1.47726842063502 +2506 1.47729164115863 +2508 1.47729793164711 +2510 1.47728751673010 +2512 1.47728595976167 +2514 1.47730346177822 +2516 1.47732866245654 +2518 1.47735480680865 +2520 1.47737778321487 +2522 1.47739640465051 +2524 1.47741388745850 +2526 1.47743674344455 +2528 1.47746686662636 +2530 1.47749859543051 +2532 1.47752798101785 +2534 1.47755196992726 +2536 1.47757059463727 +2538 1.47758008928483 +2540 1.47756988987874 +2542 1.47755427512999 +2544 1.47756361259663 +2546 1.47758639316885 +2548 1.47760210701986 +2550 1.47761136589934 +2552 1.47762359682751 +2554 1.47764677677048 +2556 1.47767474710701 +2558 1.47770246497527 +2560 1.47773042785198 +2562 1.47776361629940 +2564 1.47779998470837 +2566 1.47783821733131 +2568 1.47787806111451 +2570 1.47792064098960 +2572 1.47796488547863 +2574 1.47800956216730 +2576 1.47805314833494 +2578 1.47809883475004 +2580 1.47814186001493 +2582 1.47815997256423 +2584 1.47809360441189 +2586 1.47790866325303 +2588 1.47773400000000 +2590 1.47767480433235 +2592 1.47770364229106 +2594 1.47776662663767 +2596 1.47783459041379 +2598 1.47789713249225 +2600 1.47795076443856 +2602 1.47798212010995 +2604 1.47796839500240 +2606 1.47793022585363 +2608 1.47793384355028 +2610 1.47794564701586 +2612 1.47795047312967 +2614 1.47797539539217 +2616 1.47801274460181 +2618 1.47805108460942 +2620 1.47808604011951 +2622 1.47811663248782 +2624 1.47814577420760 +2626 1.47817100891022 +2628 1.47819185746701 +2630 1.47820200756835 +2632 1.47819509341812 +2634 1.47818069648523 +2636 1.47819937787229 +2638 1.47823535219485 +2640 1.47827081637876 +2642 1.47830404351228 +2644 1.47832995386373 +2646 1.47835243329009 +2648 1.47837673632241 +2650 1.47840422324866 +2652 1.47843503880664 +2654 1.47846525754672 +2656 1.47849229804531 +2658 1.47851619218461 +2660 1.47854228554823 +2662 1.47857183053155 +2664 1.47860675830984 +2666 1.47864502580642 +2668 1.47868442524625 +2670 1.47871645234617 +2672 1.47872844710197 +2674 1.47874644966096 +2676 1.47878367512841 +2678 1.47882577091271 +2680 1.47886734102623 +2682 1.47890576030499 +2684 1.47894410487476 +2686 1.47898246676081 +2688 1.47902078634990 +2690 1.47905697663379 +2692 1.47909348635787 +2694 1.47913253241860 +2696 1.47917713682535 +2698 1.47922494363690 +2700 1.47927370219512 +2702 1.47932350132184 +2704 1.47937477829841 +2706 1.47942977955203 +2708 1.47948662996503 +2710 1.47954572465315 +2712 1.47960899951982 +2714 1.47967582145469 +2716 1.47974783424700 +2718 1.47982686383801 +2720 1.47991434869689 +2722 1.48001161889876 +2724 1.48011529035864 +2726 1.48021743640732 +2728 1.48029271013490 +2730 1.48028469924544 +2732 1.48009333694647 +2734 1.47968604519118 +2736 1.47926069770098 +2738 1.47904382199068 +2740 1.47903137276969 +2742 1.47912234371550 +2744 1.47924475242006 +2746 1.47936896123536 +2748 1.47948547683776 +2750 1.47959346670195 +2752 1.47969391424782 +2754 1.47978696270901 +2756 1.47987478298896 +2758 1.47995758449142 +2760 1.48003727324589 +2762 1.48011924219933 +2764 1.48019913384442 +2766 1.48027922637338 +2768 1.48035769798330 +2770 1.48043385800477 +2772 1.48050725415469 +2774 1.48057567058368 +2776 1.48065105935983 +2778 1.48072266299449 +2780 1.48079977415031 +2782 1.48088053164822 +2784 1.48096687278145 +2786 1.48105512159158 +2788 1.48114937559786 +2790 1.48124466747644 +2792 1.48134118881539 +2794 1.48144014454067 +2796 1.48153308521599 +2798 1.48162875830237 +2800 1.48173023207917 +2802 1.48183567152155 +2804 1.48193764434860 +2806 1.48203772197889 +2808 1.48213332822876 +2810 1.48221893030834 +2812 1.48230128068059 +2814 1.48241543210576 +2816 1.48256188329700 +2818 1.48272146386266 +2820 1.48288593713105 +2822 1.48303146156846 +2824 1.48316535466125 +2826 1.48333287967432 +2828 1.48353886468435 +2830 1.48376233940652 +2832 1.48399372362724 +2834 1.48422859660869 +2836 1.48446914811588 +2838 1.48472335986644 +2840 1.48498891752954 +2842 1.48526978967144 +2844 1.48556244410920 +2846 1.48585030113417 +2848 1.48611635747129 +2850 1.48631703683473 +2852 1.48642616794096 +2854 1.48638931900690 +2856 1.48617288132870 +2858 1.48578055258264 +2860 1.48528254616381 +2862 1.48477473720320 +2864 1.48431306898547 +2866 1.48390294869478 +2868 1.48352758708888 +2870 1.48315923324289 +2872 1.48276317318322 +2874 1.48233036174381 +2876 1.48190033197863 +2878 1.48156989857095 +2880 1.48135829837939 +2882 1.48127046426508 +2884 1.48129224687463 +2886 1.48142276034719 +2888 1.48166152381514 +2890 1.48199469355260 +2892 1.48241286263108 +2894 1.48290615618025 +2896 1.48346174779728 +2898 1.48406068695481 +2900 1.48469749104873 +2902 1.48534901849277 +2904 1.48600451268347 +2906 1.48663330502903 +2908 1.48716049340272 +2910 1.48749427432860 +2912 1.48745634999468 +2914 1.48687918789111 +2916 1.48564647709805 +2918 1.48378138421067 +2920 1.48160842259702 +2922 1.47963902212310 +2924 1.47817563267450 +2926 1.47725366173650 +2928 1.47680009878321 +2930 1.47670600337876 +2932 1.47683592850229 +2934 1.47707848906770 +2936 1.47736368012666 +2938 1.47761998820843 +2940 1.47780991969196 +2942 1.47790616610153 +2944 1.47789352215007 +2946 1.47776642994662 +2948 1.47755303644224 +2950 1.47732098571495 +2952 1.47710982305520 +2954 1.47692656410946 +2956 1.47677865708199 +2958 1.47664389769752 +2960 1.47653950030308 +2962 1.47652380859929 +2964 1.47671143784641 +2966 1.47706590558488 +2968 1.47742684312635 +2970 1.47770009243870 +2972 1.47786247321149 +2974 1.47794741384886 +2976 1.47797899370123 +2978 1.47798223648454 +2980 1.47795004028588 +2982 1.47790147416153 +2984 1.47795735389707 +2986 1.47814496927765 +2988 1.47844692443850 +2990 1.47884918651108 +2992 1.47932344250011 +2994 1.47986306802417 +2996 1.48043188046815 +2998 1.48097537656156 +3000 1.48138517100778 +3002 1.48162356419426 +3004 1.48185212024737 +3006 1.48228440440630 +3008 1.48297178567222 +3010 1.48385673952528 +3012 1.48487993544870 +3014 1.48595665242293 +3016 1.48695938009756 +3018 1.48767468298278 +3020 1.48765524108674 +3022 1.48618132554454 +3024 1.48268461964750 +3026 1.47762082421352 +3028 1.47232727506644 +3030 1.46776463943145 +3032 1.46440878935946 +3034 1.46247197560802 +3036 1.46196769309556 +3038 1.46253947223186 +3040 1.46367382189299 +3042 1.46491417717244 +3044 1.46601563099238 +3046 1.46697686500990 +3048 1.46781464802766 +3050 1.46847402904648 +3052 1.46887853308036 +3054 1.46895675121188 +3056 1.46875323941201 +3058 1.46834302704055 +3060 1.46771282666113 +3062 1.46675300487368 +3064 1.46553703632205 +3066 1.46435734374414 +3068 1.46364333274111 +3070 1.46361967631567 +3072 1.46416270683630 +3074 1.46500589551713 +3076 1.46593266001109 +3078 1.46681497080407 +3080 1.46754108115619 +3082 1.46785690887919 +3084 1.46726760945338 +3086 1.46533247163430 +3088 1.46268292062625 +3090 1.46120303549580 +3092 1.46134478479294 +3094 1.46221369798373 +3096 1.46321247938499 +3098 1.46411661764251 +3100 1.46482369285261 +3102 1.46525636685728 +3104 1.46533581524600 +3106 1.46519098442260 +3108 1.46516907412280 +3110 1.46538060689336 +3112 1.46568276755924 +3114 1.46596931336371 +3116 1.46619739482536 +3118 1.46639101964608 +3120 1.46661054944789 +3122 1.46687049156442 +3124 1.46713909721892 +3126 1.46740251735782 +3128 1.46765965900548 +3130 1.46790595336806 +3132 1.46813448944673 +3134 1.46834723054744 +3136 1.46854553575727 +3138 1.46872578997706 +3140 1.46889606787041 +3142 1.46905361684206 +3144 1.46920788445114 +3146 1.46935155893370 +3148 1.46948926642375 +3150 1.46961711994727 +3152 1.46973932284344 +3154 1.46985771524525 +3156 1.46997084147302 +3158 1.47008125375275 +3160 1.47018834504960 +3162 1.47028749194193 +3164 1.47037561555632 +3166 1.47044733671974 +3168 1.47049523638823 +3170 1.47053287904761 +3172 1.47059397007388 +3174 1.47068028883230 +3176 1.47077100092966 +3178 1.47085834352883 +3180 1.47094237966502 +3182 1.47102127140257 +3184 1.47109691171596 +3186 1.47116815404231 +3188 1.47123618567128 +3190 1.47130184743484 +3192 1.47136511381017 +3194 1.47142734846007 +3196 1.47148851688128 +3198 1.47154755038698 +3200 1.47160533014890 +3202 1.47166012795457 +3204 1.47171224992608 +3206 1.47176315489772 +3208 1.47181395071669 +3210 1.47186466789480 +3212 1.47191661577937 +3214 1.47196738520913 +3216 1.47201707857991 +3218 1.47206588870145 +3220 1.47211365240659 +3222 1.47215936522226 +3224 1.47220500735251 +3226 1.47225033231421 +3228 1.47229424065224 +3230 1.47233733691715 +3232 1.47237980638024 +3234 1.47242122252104 +3236 1.47246173766460 +3238 1.47250090500984 +3240 1.47253933121953 +3242 1.47257666559418 +3244 1.47261289353408 +3246 1.47264942225475 +3248 1.47268468000033 +3250 1.47271896562139 +3252 1.47275329822459 +3254 1.47278723826016 +3256 1.47281957643892 +3258 1.47285086138010 +3260 1.47288192451579 +3262 1.47291300000000 +3264 1.47294399234620 +3266 1.47297519999867 +3268 1.47300456597122 +3270 1.47303306949960 +3272 1.47306229798834 +3274 1.47309029819990 +3276 1.47311725100397 +3278 1.47314519229524 +3280 1.47317191831342 +3282 1.47319904835607 +3284 1.47322480511295 +3286 1.47325068033533 +3288 1.47327558727819 +3290 1.47330149637565 +3292 1.47332523279087 +3294 1.47335025198767 +3296 1.47337510971327 +3298 1.47339905996618 +3300 1.47342296954304 +3302 1.47344582202335 +3304 1.47346658074592 +3306 1.47348738493031 +3308 1.47350703202034 +3310 1.47352683574489 +3312 1.47354755048152 +3314 1.47356829450234 +3316 1.47358903215508 +3318 1.47360880465673 +3320 1.47362855417648 +3322 1.47364734936801 +3324 1.47366547803442 +3326 1.47368305009043 +3328 1.47369959979993 +3330 1.47371718446385 +3332 1.47373378124277 +3334 1.47375068696817 +3336 1.47376844875514 +3338 1.47378666053286 +3340 1.47380404591194 +3342 1.47382276516742 +3344 1.47384040963255 +3346 1.47385904663877 +3348 1.47387858239480 +3350 1.47389752320424 +3352 1.47391752328576 +3354 1.47393606713734 +3356 1.47395488874822 +3358 1.47397353990369 +3360 1.47399234620080 +3362 1.47401055721405 +3364 1.47402826981442 +3366 1.47404508175359 +3368 1.47406141829832 +3370 1.47407704342040 +3372 1.47409059132764 +3374 1.47410503032631 +3376 1.47411782704824 +3378 1.47413081528590 +3380 1.47414326557675 +3382 1.47415571156753 +3384 1.47416717298263 +3386 1.47417841575972 +3388 1.47418915024028 +3390 1.47419998707473 +3392 1.47421190062571 +3394 1.47422443429139 +3396 1.47423683452363 +3398 1.47425033505022 +3400 1.47426480528893 +3402 1.47427826680738 +3404 1.47429170418534 +3406 1.47430477066294 +3408 1.47431835512023 +3410 1.47433193595530 +3412 1.47434642118416 +3414 1.47436087920127 +3416 1.47437532634686 +3418 1.47439018109776 +3420 1.47440515622779 +3422 1.47442044328205 +3424 1.47443606103306 +3426 1.47444964436527 +3428 1.47446294847254 +3430 1.47447439134230 +3432 1.47448416869267 +3434 1.47449072019392 +3436 1.47449591374259 +3438 1.47449903792179 +3440 1.47449993449953 +3442 1.47450135456237 +3444 1.47450458795612 +3446 1.47450875108451 +3448 1.47451445884208 +3450 1.47452484258401 +3452 1.47453827241797 +3454 1.47455172262247 +3456 1.47456517206426 +3458 1.47457860151852 +3460 1.47459192059468 +3462 1.47460450298261 +3464 1.47461696547474 +3466 1.47462839859281 +3468 1.47463987388367 +3470 1.47465188200346 +3472 1.47466266389847 +3474 1.47467409691578 +3476 1.47468473670609 +3478 1.47469608306209 +3480 1.47470752002888 +3482 1.47471885889080 +3484 1.47473141107054 +3486 1.47474321664113 +3488 1.47475540477105 +3490 1.47476577603289 +3492 1.47477517654069 +3494 1.47478437686762 +3496 1.47479375265910 +3498 1.47480352784050 +3500 1.47481386454326 +3502 1.47482540254891 +3504 1.47483686546170 +3506 1.47484922964243 +3508 1.47486054239155 +3510 1.47487118057395 +3512 1.47488161773392 +3514 1.47489155648764 +3516 1.47489779215940 +3518 1.47490199751604 +3520 1.47490515212000 +3522 1.47490858576642 +3524 1.47491589352572 +3526 1.47492563809847 +3528 1.47493721829251 +3530 1.47494965183138 +3532 1.47496209482301 +3534 1.47497548127118 +3536 1.47498901026331 +3538 1.47500250064110 +3540 1.47501334375007 +3542 1.47502155988466 +3544 1.47502590855583 +3546 1.47502798788122 +3548 1.47502908741446 +3550 1.47503013111600 +3552 1.47503152066431 +3554 1.47503369017078 +3556 1.47503596161309 +3558 1.47503994401260 +3560 1.47504720780187 +3562 1.47505757685400 +3564 1.47506921753979 +3566 1.47508222835820 +3568 1.47509583612677 +3570 1.47510943592653 +3572 1.47512299244722 +3574 1.47513544229862 +3576 1.47514788646150 +3578 1.47515877336465 +3580 1.47516830010454 +3582 1.47517301097796 +3584 1.47516730096467 +3586 1.47516098788624 +3588 1.47515999912529 +3590 1.47516344979552 +3592 1.47516995891151 +3594 1.47517893497533 +3596 1.47518949533554 +3598 1.47519986950803 +3600 1.47520815315630 +3602 1.47521639684906 +3604 1.47522677803691 +3606 1.47523756307109 +3608 1.47524905817071 +3610 1.47526235394740 +3612 1.47527689090454 +3614 1.47529241512157 +3616 1.47530577596310 +3618 1.47531550675526 +3620 1.47531807217956 +3622 1.47531330897623 +3624 1.47530520668685 +3626 1.47530099713781 +3628 1.47530419555884 +3630 1.47531292297539 +3632 1.47532682994681 +3634 1.47534230166646 +3636 1.47535817866622 +3638 1.47537270802382 +3640 1.47538306617453 +3642 1.47538491013479 +3644 1.47537808441815 +3646 1.47536152773521 +3648 1.47533829820411 +3650 1.47531127187157 +3652 1.47528831452931 +3654 1.47527173292062 +3656 1.47526400688559 +3658 1.47526538002071 +3660 1.47527196497124 +3662 1.47528332467912 +3664 1.47529547167214 +3666 1.47530792033597 +3668 1.47531940264238 +3670 1.47532950934428 +3672 1.47533752543273 +3674 1.47534264633859 +3676 1.47534493660391 +3678 1.47534793834948 +3680 1.47535101048592 +3682 1.47535512741537 +3684 1.47536061029192 +3686 1.47536677517540 +3688 1.47537422152313 +3690 1.47538349069671 +3692 1.47539466802181 +3694 1.47540614815786 +3696 1.47541766757740 +3698 1.47543103564364 +3700 1.47544309274752 +3702 1.47545168948545 +3704 1.47545396563826 +3706 1.47545207507319 +3708 1.47544797484465 +3710 1.47544704753668 +3712 1.47545189667326 +3714 1.47545995926878 +3716 1.47547095072698 +3718 1.47548066602429 +3720 1.47548697893292 +3722 1.47548796009613 +3724 1.47548478177503 +3726 1.47547947641639 +3728 1.47547863259801 +3730 1.47548174475524 +3732 1.47548778078125 +3734 1.47549403635331 +3736 1.47550125363908 +3738 1.47550934180435 +3740 1.47551683167599 +3742 1.47552688594006 +3744 1.47553729090548 +3746 1.47554678198008 +3748 1.47555713325216 +3750 1.47556659302775 +3752 1.47557669459374 +3754 1.47558647315562 +3756 1.47559529768016 +3758 1.47560360009648 +3760 1.47561091508282 +3762 1.47561609735508 +3764 1.47562029070796 +3766 1.47562441780911 +3768 1.47563306550754 +3770 1.47564405166112 +3772 1.47565552291783 +3774 1.47566694809298 +3776 1.47567830857219 +3778 1.47568755133462 +3780 1.47569463620025 +3782 1.47569547492168 +3784 1.47568951387041 +3786 1.47567835935080 +3788 1.47566593929693 +3790 1.47566101977927 +3792 1.47566354952827 +3794 1.47567185732029 +3796 1.47568321348889 +3798 1.47569529254648 +3800 1.47570772530959 +3802 1.47571809962768 +3804 1.47572648401529 +3806 1.47573134192597 +3808 1.47573352027040 +3810 1.47573292361008 +3812 1.47573299326894 +3814 1.47573398673360 +3816 1.47573817632205 +3818 1.47574527524272 +3820 1.47575277086820 +3822 1.47575967350287 +3824 1.47576470303911 +3826 1.47576975528735 +3828 1.47577698612879 +3830 1.47578309783396 +3832 1.47578829704916 +3834 1.47579095824278 +3836 1.47578839924332 +3838 1.47578153880935 +3840 1.47577325828602 +3842 1.47576695658169 +3844 1.47576181472562 +3846 1.47575638975092 +3848 1.47574893511221 +3850 1.47574067656252 +3852 1.47573418960490 +3854 1.47573201348304 +3856 1.47573609448654 +3858 1.47574340076582 +3860 1.47575406506568 +3862 1.47576509594980 +3864 1.47577344240290 +3866 1.47577782298125 +3868 1.47577704417063 +3870 1.47576978782061 +3872 1.47576167888626 +3874 1.47575983530599 +3876 1.47576615931522 +3878 1.47577603616264 +3880 1.47578749602566 +3882 1.47579899049744 +3884 1.47580829754193 +3886 1.47581553191111 +3888 1.47582044576450 +3890 1.47582361486597 +3892 1.47582488670530 +3894 1.47582691190401 +3896 1.47582798767520 +3898 1.47583005776107 +3900 1.47583333559154 +3902 1.47583798052018 +3904 1.47584349792097 +3906 1.47584878503057 +3908 1.47585104104660 +3910 1.47584786442429 +3912 1.47584503864650 +3914 1.47584772763597 +3916 1.47585513011730 +3918 1.47586161194681 +3920 1.47586680114244 +3922 1.47586801742881 +3924 1.47586285228063 +3926 1.47585768990955 +3928 1.47585725672200 +3930 1.47586502926929 +3932 1.47587638834149 +3934 1.47588758559686 +3936 1.47589600406114 +3938 1.47590331354213 +3940 1.47591060804636 +3942 1.47591789591720 +3944 1.47592457142526 +3946 1.47593081059303 +3948 1.47593398581283 +3950 1.47593295565452 +3952 1.47592878275285 +3954 1.47592684349640 +3956 1.47592986168501 +3958 1.47593628896516 +3960 1.47594351825970 +3962 1.47595186222678 +3964 1.47595911320580 +3966 1.47596854991323 +3968 1.47597712871599 +3970 1.47598746992252 +3972 1.47600004422535 +3974 1.47601337421929 +3976 1.47602692154134 +3978 1.47603405627977 +3980 1.47602817354059 +3982 1.47601874488156 +3984 1.47602563707167 +3986 1.47604367443527 +3988 1.47606327560645 +3990 1.47608304122308 +3992 1.47610269526207 +3994 1.47612262206064 +3996 1.47614078459134 +3998 1.47615752083133 4000 1.47617133599432 \ No newline at end of file diff --git a/globals.h b/globals.h index 785d753..ad8934e 100644 --- a/globals.h +++ b/globals.h @@ -1,110 +1,110 @@ -#ifndef GLOBALS_H -#define GLOBALS_H - -#include -#include -#include -#include "PerformanceData.h" -#include -using namespace std; - -typedef float rtsFloat; - -struct SpecPair{ - double nu; - double A; -}; - -struct Material{ - vector nu; - vector > eta; - string name; -}; - -enum SpecType {AbsorbanceSpecType, IntensitySpecType}; -enum OpticsType {TransmissionOpticsType, ReflectionOpticsType}; - -extern PerformanceData PD; - - -extern vector > RefSpectrum; -extern int currentSpec; -extern vector SimSpectrum; - -//IO Functions -vector LoadSpectrum(string filename); -vector SetReferenceSpectrum(char* text); -void SaveState(); -void LoadState(); -void SetDefaults(); -void SaveSimulation(string fileName); -void SaveK(string fileName); -void SaveN(string fileName); -void LoadMaterial(string fileNameK, string fileNameN, string materialName); -void LoadMaterial(string fileNameK, string materialName); - -//Display Functions -void FitDisplay(); - -//Update Functions -void UpdateDisplay(); -void SimulateSpectrum(); -void cudaKramersKronig(double* cpuN, double* cpuK, int nVals, double nuStart, double nuEnd, double nOffset); -void cudaComputeSpectrum(double* cpuI, double* cpuB, double* alpha, - int Nl, int nLambda, double oThetaI, double oThetaO, double cThetaI, double cThetaO, int nSamples); - -//Window Parameters -extern double nuMin; -extern double nuMax; -extern double aMin; -extern double aMax; -extern double dNu; -extern bool dispRefSpec; -extern bool dispSimSpec; -extern bool dispSimK; -extern bool dispMatK; -extern bool dispSimN; -extern bool dispMatN; -extern SpecType dispSimType; -extern bool dispNormalize; -extern double dispNormFactor; - - -extern double dispScaleK; -extern double dispScaleN; - -//material parameters -extern double radius; -extern double baseIR; -extern double cA; -extern vector EtaK; -extern vector EtaN; -extern bool applyMaterial; -//extern vector KMaterial; -//extern vector NMaterial; -extern vector MaterialList; -extern int currentMaterial; -void ChangeAbsorbance(); -void SetMaterial(); - -//optical parameters -extern double cNAi; -extern double cNAo; -extern double oNAi; -extern double oNAo; -extern OpticsType opticsMode; -extern bool pointDetector; -extern int objectiveSamples; - -//fitting parameters -extern double minMSE; -extern int maxFitIter; -void EstimateMaterial(); -extern double scaleI0; -extern double refSlope; - -double ComputeDistortion(); -void MinimizeDistortion(); - - +#ifndef GLOBALS_H +#define GLOBALS_H + +#include +#include +#include +#include "PerformanceData.h" +#include +using namespace std; + +typedef float rtsFloat; + +struct SpecPair{ + double nu; + double A; +}; + +struct Material{ + vector nu; + vector > eta; + string name; +}; + +enum SpecType {AbsorbanceSpecType, IntensitySpecType}; +enum OpticsType {TransmissionOpticsType, ReflectionOpticsType}; + +extern PerformanceData PD; + + +extern vector > RefSpectrum; +extern int currentSpec; +extern vector SimSpectrum; + +//IO Functions +vector LoadSpectrum(string filename); +vector SetReferenceSpectrum(char* text); +void SaveState(); +void LoadState(); +void SetDefaults(); +void SaveSimulation(string fileName); +void SaveK(string fileName); +void SaveN(string fileName); +void LoadMaterial(string fileNameK, string fileNameN, string materialName); +void LoadMaterial(string fileNameK, string materialName); + +//Display Functions +void FitDisplay(); + +//Update Functions +void UpdateDisplay(); +void SimulateSpectrum(); +void cudaKramersKronig(double* cpuN, double* cpuK, int nVals, double nuStart, double nuEnd, double nOffset); +void cudaComputeSpectrum(double* cpuI, double* cpuB, double* alpha, + int Nl, int nLambda, double oThetaI, double oThetaO, double cThetaI, double cThetaO, int nSamples); + +//Window Parameters +extern double nuMin; +extern double nuMax; +extern double aMin; +extern double aMax; +extern double dNu; +extern bool dispRefSpec; +extern bool dispSimSpec; +extern bool dispSimK; +extern bool dispMatK; +extern bool dispSimN; +extern bool dispMatN; +extern SpecType dispSimType; +extern bool dispNormalize; +extern double dispNormFactor; + + +extern double dispScaleK; +extern double dispScaleN; + +//material parameters +extern double radius; +extern double baseIR; +extern double cA; +extern vector EtaK; +extern vector EtaN; +extern bool applyMaterial; +//extern vector KMaterial; +//extern vector NMaterial; +extern vector MaterialList; +extern int currentMaterial; +void ChangeAbsorbance(); +void SetMaterial(); + +//optical parameters +extern double cNAi; +extern double cNAo; +extern double oNAi; +extern double oNAo; +extern OpticsType opticsMode; +extern bool pointDetector; +extern int objectiveSamples; + +//fitting parameters +extern double minMSE; +extern int maxFitIter; +void EstimateMaterial(); +extern double scaleI0; +extern double refSlope; + +double ComputeDistortion(); +void MinimizeDistortion(); + + #endif \ No newline at end of file diff --git a/interactivemie.cpp b/interactivemie.cpp index 02ba9fe..8504eda 100644 --- a/interactivemie.cpp +++ b/interactivemie.cpp @@ -1,12 +1,12 @@ -#include "interactivemie.h" - -InteractiveMie::InteractiveMie(QWidget *parent, Qt::WFlags flags) - : QMainWindow(parent, flags) -{ - ui.setupUi(this); -} - -InteractiveMie::~InteractiveMie() -{ - updating = false; -} +#include "interactivemie.h" + +InteractiveMie::InteractiveMie(QWidget *parent, Qt::WFlags flags) + : QMainWindow(parent, flags) +{ + ui.setupUi(this); +} + +InteractiveMie::~InteractiveMie() +{ + updating = false; +} diff --git a/interactivemie.h b/interactivemie.h index cb5f3ef..ade8118 100644 --- a/interactivemie.h +++ b/interactivemie.h @@ -1,353 +1,353 @@ -#ifndef INTERACTIVEMIE_H -#define INTERACTIVEMIE_H - -#include -#include -#include -#include -#include "ui_interactivemie.h" -#include "globals.h" - -class InteractiveMie : public QMainWindow -{ - Q_OBJECT - -public: - InteractiveMie(QWidget *parent = 0, Qt::WFlags flags = 0); - ~InteractiveMie(); - bool updating; - - void refreshUI() - { - updating = true; - - ui.spinNuMin->setValue(nuMin); - ui.spinNuMax->setValue(nuMax); - ui.spinAMin->setValue(aMin); - ui.spinAMax->setValue(aMax); - ui.spinRadius->setValue(radius); - ui.spinBaseIR->setValue(baseIR); - ui.spinScaleK->setValue(cA); - ui.spinObjNAi->setValue(oNAi); - ui.spinObjNAo->setValue(oNAo); - ui.spinCondNAi->setValue(cNAi); - ui.spinCondNAo->setValue(cNAo); - ui.spinError->setValue(minMSE); - ui.spinMaxIter->setValue(maxFitIter); - ui.spinI0Scale->setValue(scaleI0); - - //display spectra values - ui.chkDisplaySimSpec->setChecked(dispSimSpec); - ui.chkDisplayRefSpec->setChecked(dispRefSpec); - ui.chkDisplaySimK->setChecked(dispSimK); - ui.chkDisplayMatK->setChecked(dispMatK); - ui.chkDisplaySimN->setChecked(dispSimN); - ui.chkDisplayMatN->setChecked(dispMatN); - ui.spinDispScaleK->setValue(dispScaleK); - ui.spinDispScaleN->setValue(dispScaleN); - - //material selection combo box - ui.cmbMaterial->clear(); - for(unsigned int i=0; iaddItem(MaterialList[i].name.c_str(), i); - ui.cmbMaterial->setCurrentIndex(currentMaterial); - - updating = false; - - } - - void dragEnterEvent(QDragEnterEvent *event) - { - cout<<"This is a test."<mimeData()->formats(); - if (event->mimeData()->hasFormat("application/x-qt-windows-mime;value=\"FileName\"") || - event->mimeData()->hasFormat("text/plain")) - { - event->acceptProposedAction(); - - } - } - - void dropEvent(QDropEvent *event) - { - //cout<<"Challenge Accepted."<mimeData()->text().toAscii().data())); - UpdateDisplay(); - } - -private: - Ui::InteractiveMieClass ui; - -public slots: - //display parameters - void on_spinNuMin_valueChanged(int i){ - nuMin = (float)i; - UpdateDisplay(); - } - void on_spinNuMax_valueChanged(int i){ - nuMax = (float)i; - UpdateDisplay(); - } - void on_spinAMin_valueChanged(double d){ - aMin = d; - UpdateDisplay(); - } - void on_spinAMax_valueChanged(double d){ - aMax = d; - UpdateDisplay(); - } - void on_chkDisplaySimSpec_clicked(bool b){ - dispSimSpec = b; - UpdateDisplay(); - } - void on_chkDisplayRefSpec_clicked(bool b){ - dispRefSpec = b; - UpdateDisplay(); - } - void on_chkDisplaySimK_clicked(bool b){ - dispSimK = b; - UpdateDisplay(); - } - void on_chkDisplayMatK_clicked(bool b){ - dispMatK = b; - UpdateDisplay(); - } - void on_chkDisplaySimN_clicked(bool b){ - dispSimN = b; - UpdateDisplay(); - } - void on_chkDisplayMatN_clicked(bool b){ - dispMatN = b; - UpdateDisplay(); - } - void on_spinDispScaleK_valueChanged(double d){ - dispScaleK = d; - UpdateDisplay(); - } - void on_spinDispScaleN_valueChanged(double d){ - dispScaleN = d; - UpdateDisplay(); - } - void on_radDisplayAbsorbance_clicked(bool b){ - dispSimType = AbsorbanceSpecType; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_radDisplayIntensity_toggled(bool b){ - dispSimType = IntensitySpecType; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_chkNormalize_clicked(bool b){ - dispNormalize = b; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_spinNormFactor_valueChanged(double d){ - dispNormFactor = d; - SimulateSpectrum(); - UpdateDisplay(); - } - - //material parameters - void on_spinRadius_valueChanged(double d){ - radius = d; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_spinBaseIR_valueChanged(double d){ - baseIR = d; - ChangeAbsorbance(); - SimulateSpectrum(); - UpdateDisplay(); - } - void on_spinScaleK_valueChanged(double d){ - cA = d; - ChangeAbsorbance(); - SimulateSpectrum(); - UpdateDisplay(); - } - void on_chkApplyMaterial_clicked(bool b){ - applyMaterial = b; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_cmbMaterial_currentIndexChanged(int i){ - if(updating) return; - - currentMaterial = i; - SetMaterial(); - SimulateSpectrum(); - UpdateDisplay(); - refreshUI(); - } - - //optical parameters - void on_spinCondNAi_valueChanged(double d){ - cNAi = d; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_spinCondNAo_valueChanged(double d){ - cNAo = d; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_spinObjNAi_valueChanged(double d){ - oNAi = d; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_spinObjNAo_valueChanged(double d){ - oNAo = d; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_radTransmissionOptics_clicked(bool d){ - ui.spinCondNAi->setEnabled(true); - ui.spinCondNAo->setEnabled(true); - opticsMode = TransmissionOpticsType; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_radReflectionOptics_clicked(bool d){ - ui.spinCondNAi->setEnabled(false); - ui.spinCondNAo->setEnabled(false); - ui.radDisplayAbsorbance->setEnabled(false); - ui.radDisplayIntensity->setChecked(true); - opticsMode = ReflectionOpticsType; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_chkPointDetector_clicked(bool b){ - if(b) - { - pointDetector = true; - ui.spinObjectiveSamples->setEnabled(false); - } - else - { - pointDetector = false; - ui.spinObjectiveSamples->setEnabled(true); - } - - SimulateSpectrum(); - UpdateDisplay(); - } - - void on_spinObjectiveSamples_valueChanged(int i){ - objectiveSamples = i; - SimulateSpectrum(); - UpdateDisplay(); - } - - //Fitting - void on_spinMaxIter_valueChanged(int i){ - maxFitIter = i; - } - void on_spinError_valueChanged(double d){ - minMSE = d; - } - void on_spinI0Scale_valueChanged(double d){ - scaleI0 = d; - SimulateSpectrum(); - UpdateDisplay(); - } - void on_spinRefSlope_valueChanged(double d){ - refSlope = d; - UpdateDisplay(); - } - - //display settings - - //Buttons - void on_btnFit_clicked(){ - FitDisplay(); - refreshUI(); - } - void on_btnSave_clicked(){ - SaveState(); - } - void on_btnReset_clicked(){ - SetDefaults(); - SimulateSpectrum(); - UpdateDisplay(); - refreshUI(); - } - void on_btnResetK_clicked(){ - ChangeAbsorbance(); - SimulateSpectrum(); - UpdateDisplay(); - } - void on_btnEstimateK_clicked(){ - EstimateMaterial(); - SimulateSpectrum(); - UpdateDisplay(); - } - void on_btnDistortion_clicked(){ - //ComputeDistortion(); - MinimizeDistortion(); - } - void on_btnTimings_clicked(){ - PD.PrintResults(cout); - } - - //menu items - void on_mnuLoadReference_triggered(){ - QString fileName = QFileDialog::getOpenFileName(this, tr("Open Reference Spectrum")); - - if(fileName != QString::null){ - RefSpectrum.clear(); - RefSpectrum.push_back(LoadSpectrum(fileName.toAscii().data())); - } - UpdateDisplay(); - } - - void on_mnuLoadMaterial_triggered(){ - - //first load the imaginary part - QString kFileName = QFileDialog::getOpenFileName(this, tr("Open Imaginary (k) Spectrum")); - - //exit if no file was selected - if(kFileName == QString::null) - return; - - QString nFileName = QFileDialog::getOpenFileName(this, tr("Open Imaginary (n) Spectrum")); - - //request the material name - QString matName = QInputDialog::getText(this, tr("Material Name"), tr("Enter material name:")); - - //if a real part was given, load both - if(nFileName != QString::null) - LoadMaterial(kFileName.toAscii().data(), nFileName.toAscii().data(), matName.toAscii().data()); - else - LoadMaterial(kFileName.toAscii().data(), matName.toAscii().data()); - - //add the new material to the combo box - refreshUI(); - } - - void on_mnuSaveSim_triggered(){ - //first load the imaginary part - QString fileName = QFileDialog::getSaveFileName(this, tr("Save Simulated Spectrum")); - SaveSimulation(fileName.toAscii().data()); - } - - void on_mnuSaveK_triggered(){ - //first load the imaginary part - QString fileName = QFileDialog::getSaveFileName(this, tr("Save Imaginary Index of Refraction (k)")); - SaveK(fileName.toAscii().data()); - } - - void on_mnuSaveN_triggered(){ - //first load the imaginary part - QString fileName = QFileDialog::getSaveFileName(this, tr("Save Real Index of Refraction (n)")); - SaveN(fileName.toAscii().data()); - } - - - -}; - -#endif // INTERACTIVEMIE_H +#ifndef INTERACTIVEMIE_H +#define INTERACTIVEMIE_H + +#include +#include +#include +#include +#include "ui_interactivemie.h" +#include "globals.h" + +class InteractiveMie : public QMainWindow +{ + Q_OBJECT + +public: + InteractiveMie(QWidget *parent = 0, Qt::WFlags flags = 0); + ~InteractiveMie(); + bool updating; + + void refreshUI() + { + updating = true; + + ui.spinNuMin->setValue(nuMin); + ui.spinNuMax->setValue(nuMax); + ui.spinAMin->setValue(aMin); + ui.spinAMax->setValue(aMax); + ui.spinRadius->setValue(radius); + ui.spinBaseIR->setValue(baseIR); + ui.spinScaleK->setValue(cA); + ui.spinObjNAi->setValue(oNAi); + ui.spinObjNAo->setValue(oNAo); + ui.spinCondNAi->setValue(cNAi); + ui.spinCondNAo->setValue(cNAo); + ui.spinError->setValue(minMSE); + ui.spinMaxIter->setValue(maxFitIter); + ui.spinI0Scale->setValue(scaleI0); + + //display spectra values + ui.chkDisplaySimSpec->setChecked(dispSimSpec); + ui.chkDisplayRefSpec->setChecked(dispRefSpec); + ui.chkDisplaySimK->setChecked(dispSimK); + ui.chkDisplayMatK->setChecked(dispMatK); + ui.chkDisplaySimN->setChecked(dispSimN); + ui.chkDisplayMatN->setChecked(dispMatN); + ui.spinDispScaleK->setValue(dispScaleK); + ui.spinDispScaleN->setValue(dispScaleN); + + //material selection combo box + ui.cmbMaterial->clear(); + for(unsigned int i=0; iaddItem(MaterialList[i].name.c_str(), i); + ui.cmbMaterial->setCurrentIndex(currentMaterial); + + updating = false; + + } + + void dragEnterEvent(QDragEnterEvent *event) + { + cout<<"This is a test."<mimeData()->formats(); + if (event->mimeData()->hasFormat("application/x-qt-windows-mime;value=\"FileName\"") || + event->mimeData()->hasFormat("text/plain")) + { + event->acceptProposedAction(); + + } + } + + void dropEvent(QDropEvent *event) + { + //cout<<"Challenge Accepted."<mimeData()->text().toAscii().data())); + UpdateDisplay(); + } + +private: + Ui::InteractiveMieClass ui; + +public slots: + //display parameters + void on_spinNuMin_valueChanged(int i){ + nuMin = (float)i; + UpdateDisplay(); + } + void on_spinNuMax_valueChanged(int i){ + nuMax = (float)i; + UpdateDisplay(); + } + void on_spinAMin_valueChanged(double d){ + aMin = d; + UpdateDisplay(); + } + void on_spinAMax_valueChanged(double d){ + aMax = d; + UpdateDisplay(); + } + void on_chkDisplaySimSpec_clicked(bool b){ + dispSimSpec = b; + UpdateDisplay(); + } + void on_chkDisplayRefSpec_clicked(bool b){ + dispRefSpec = b; + UpdateDisplay(); + } + void on_chkDisplaySimK_clicked(bool b){ + dispSimK = b; + UpdateDisplay(); + } + void on_chkDisplayMatK_clicked(bool b){ + dispMatK = b; + UpdateDisplay(); + } + void on_chkDisplaySimN_clicked(bool b){ + dispSimN = b; + UpdateDisplay(); + } + void on_chkDisplayMatN_clicked(bool b){ + dispMatN = b; + UpdateDisplay(); + } + void on_spinDispScaleK_valueChanged(double d){ + dispScaleK = d; + UpdateDisplay(); + } + void on_spinDispScaleN_valueChanged(double d){ + dispScaleN = d; + UpdateDisplay(); + } + void on_radDisplayAbsorbance_clicked(bool b){ + dispSimType = AbsorbanceSpecType; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_radDisplayIntensity_toggled(bool b){ + dispSimType = IntensitySpecType; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_chkNormalize_clicked(bool b){ + dispNormalize = b; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_spinNormFactor_valueChanged(double d){ + dispNormFactor = d; + SimulateSpectrum(); + UpdateDisplay(); + } + + //material parameters + void on_spinRadius_valueChanged(double d){ + radius = d; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_spinBaseIR_valueChanged(double d){ + baseIR = d; + ChangeAbsorbance(); + SimulateSpectrum(); + UpdateDisplay(); + } + void on_spinScaleK_valueChanged(double d){ + cA = d; + ChangeAbsorbance(); + SimulateSpectrum(); + UpdateDisplay(); + } + void on_chkApplyMaterial_clicked(bool b){ + applyMaterial = b; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_cmbMaterial_currentIndexChanged(int i){ + if(updating) return; + + currentMaterial = i; + SetMaterial(); + SimulateSpectrum(); + UpdateDisplay(); + refreshUI(); + } + + //optical parameters + void on_spinCondNAi_valueChanged(double d){ + cNAi = d; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_spinCondNAo_valueChanged(double d){ + cNAo = d; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_spinObjNAi_valueChanged(double d){ + oNAi = d; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_spinObjNAo_valueChanged(double d){ + oNAo = d; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_radTransmissionOptics_clicked(bool d){ + ui.spinCondNAi->setEnabled(true); + ui.spinCondNAo->setEnabled(true); + opticsMode = TransmissionOpticsType; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_radReflectionOptics_clicked(bool d){ + ui.spinCondNAi->setEnabled(false); + ui.spinCondNAo->setEnabled(false); + ui.radDisplayAbsorbance->setEnabled(false); + ui.radDisplayIntensity->setChecked(true); + opticsMode = ReflectionOpticsType; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_chkPointDetector_clicked(bool b){ + if(b) + { + pointDetector = true; + ui.spinObjectiveSamples->setEnabled(false); + } + else + { + pointDetector = false; + ui.spinObjectiveSamples->setEnabled(true); + } + + SimulateSpectrum(); + UpdateDisplay(); + } + + void on_spinObjectiveSamples_valueChanged(int i){ + objectiveSamples = i; + SimulateSpectrum(); + UpdateDisplay(); + } + + //Fitting + void on_spinMaxIter_valueChanged(int i){ + maxFitIter = i; + } + void on_spinError_valueChanged(double d){ + minMSE = d; + } + void on_spinI0Scale_valueChanged(double d){ + scaleI0 = d; + SimulateSpectrum(); + UpdateDisplay(); + } + void on_spinRefSlope_valueChanged(double d){ + refSlope = d; + UpdateDisplay(); + } + + //display settings + + //Buttons + void on_btnFit_clicked(){ + FitDisplay(); + refreshUI(); + } + void on_btnSave_clicked(){ + SaveState(); + } + void on_btnReset_clicked(){ + SetDefaults(); + SimulateSpectrum(); + UpdateDisplay(); + refreshUI(); + } + void on_btnResetK_clicked(){ + ChangeAbsorbance(); + SimulateSpectrum(); + UpdateDisplay(); + } + void on_btnEstimateK_clicked(){ + EstimateMaterial(); + SimulateSpectrum(); + UpdateDisplay(); + } + void on_btnDistortion_clicked(){ + //ComputeDistortion(); + MinimizeDistortion(); + } + void on_btnTimings_clicked(){ + PD.PrintResults(cout); + } + + //menu items + void on_mnuLoadReference_triggered(){ + QString fileName = QFileDialog::getOpenFileName(this, tr("Open Reference Spectrum")); + + if(fileName != QString::null){ + RefSpectrum.clear(); + RefSpectrum.push_back(LoadSpectrum(fileName.toAscii().data())); + } + UpdateDisplay(); + } + + void on_mnuLoadMaterial_triggered(){ + + //first load the imaginary part + QString kFileName = QFileDialog::getOpenFileName(this, tr("Open Imaginary (k) Spectrum")); + + //exit if no file was selected + if(kFileName == QString::null) + return; + + QString nFileName = QFileDialog::getOpenFileName(this, tr("Open Imaginary (n) Spectrum")); + + //request the material name + QString matName = QInputDialog::getText(this, tr("Material Name"), tr("Enter material name:")); + + //if a real part was given, load both + if(nFileName != QString::null) + LoadMaterial(kFileName.toAscii().data(), nFileName.toAscii().data(), matName.toAscii().data()); + else + LoadMaterial(kFileName.toAscii().data(), matName.toAscii().data()); + + //add the new material to the combo box + refreshUI(); + } + + void on_mnuSaveSim_triggered(){ + //first load the imaginary part + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Simulated Spectrum")); + SaveSimulation(fileName.toAscii().data()); + } + + void on_mnuSaveK_triggered(){ + //first load the imaginary part + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Imaginary Index of Refraction (k)")); + SaveK(fileName.toAscii().data()); + } + + void on_mnuSaveN_triggered(){ + //first load the imaginary part + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Real Index of Refraction (n)")); + SaveN(fileName.toAscii().data()); + } + + + +}; + +#endif // INTERACTIVEMIE_H diff --git a/interactivemie.qrc b/interactivemie.qrc index 260da3a..9f1b048 100644 --- a/interactivemie.qrc +++ b/interactivemie.qrc @@ -1,4 +1,4 @@ - - - - + + + + diff --git a/interactivemie.ui b/interactivemie.ui index 5c249dd..4c440bf 100644 --- a/interactivemie.ui +++ b/interactivemie.ui @@ -1,954 +1,954 @@ - - - InteractiveMieClass - - - - 0 - 0 - 464 - 525 - - - - true - - - InteractiveMie - - - - - - 20 - 140 - 151 - 181 - - - - Material - - - - - 70 - 80 - 62 - 22 - - - - 0.100000000000000 - - - 1.000000000000000 - - - - - - 70 - 50 - 62 - 22 - - - - 1.000000000000000 - - - 0.010000000000000 - - - 1.490000000000000 - - - - - - 30 - 50 - 46 - 13 - - - - base IR - - - - - - 70 - 20 - 62 - 22 - - - - true - - - 0.100000000000000 - - - 4.000000000000000 - - - - - - 30 - 20 - 46 - 13 - - - - radius - - - - - - 30 - 80 - 46 - 13 - - - - scale K - - - - - - 20 - 110 - 101 - 17 - - - - Apply Material - - - true - - - - - - 20 - 140 - 111 - 22 - - - - - - - - 20 - 10 - 241 - 131 - - - - Optics - - - - - 5 - 50 - 71 - 20 - - - - Objective NA - - - - - - 80 - 20 - 62 - 22 - - - - 1.000000000000000 - - - 0.010000000000000 - - - - - - 5 - 20 - 71 - 20 - - - - Condenser NA - - - - - - 160 - 20 - 62 - 22 - - - - 1.000000000000000 - - - 0.010000000000000 - - - 0.600000000000000 - - - - - - 160 - 50 - 62 - 22 - - - - 1.000000000000000 - - - 0.010000000000000 - - - 0.600000000000000 - - - - - - 80 - 50 - 62 - 22 - - - - 1.000000000000000 - - - 0.010000000000000 - - - - - - 20 - 80 - 82 - 17 - - - - Transmission - - - true - - - - - - 150 - 80 - 82 - 17 - - - - Reflection - - - - - - 150 - 100 - 101 - 17 - - - - Point Detector - - - - - - 10 - 100 - 42 - 22 - - - - 999 - - - 200 - - - - - - 60 - 100 - 71 - 16 - - - - Obj. Samples - - - - - - - 280 - 20 - 161 - 411 - - - - Display - - - - - 80 - 70 - 71 - 22 - - - - 6 - - - -9999.000000000000000 - - - 9999.000000000000000 - - - 0.100000000000000 - - - - - true - - - - 10 - 70 - 61 - 22 - - - - 1 - - - 100000 - - - 10 - - - 800 - - - - - - 110 - 20 - 16 - 16 - - - - A - - - - - - 80 - 40 - 71 - 22 - - - - 6 - - - -9999.000000000000000 - - - 9999.000000000000000 - - - 0.100000000000000 - - - 1.000000000000000 - - - - - true - - - - 10 - 40 - 61 - 22 - - - - 1 - - - 100000 - - - 10 - - - 4000 - - - - - - 20 - 20 - 61 - 16 - - - - nu (cm^-1) - - - - - - 10 - 230 - 131 - 17 - - - - Reference Spectrum - - - true - - - - - - 10 - 170 - 131 - 17 - - - - Simulated Spectrum - - - true - - - - - - 10 - 280 - 131 - 17 - - - - Simulated K - - - false - - - - - - 80 - 100 - 71 - 22 - - - - 6 - - - -99.989999999999995 - - - 0.010000000000000 - - - - - - 10 - 100 - 71 - 16 - - - - I0 Scale - - - - - false - - - - 80 - 130 - 71 - 22 - - - - 6 - - - -99.989999999999995 - - - 0.000010000000000 - - - - - - 10 - 130 - 71 - 16 - - - - Ref Slope - - - - - - 10 - 300 - 91 - 17 - - - - Material K - - - - - - 10 - 330 - 131 - 17 - - - - Simulated N - - - false - - - - - - 10 - 350 - 91 - 17 - - - - Material N - - - - - - 90 - 290 - 51 - 22 - - - - 0.100000000000000 - - - - - - 90 - 340 - 51 - 22 - - - - 0.100000000000000 - - - - - - 10 - 380 - 70 - 17 - - - - Normalize - - - - - - 50 - 190 - 82 - 17 - - - - Absorbance - - - true - - - - - - 50 - 210 - 82 - 17 - - - - Intensity - - - - - - 90 - 380 - 62 - 22 - - - - 1.000000000000000 - - - 1.000000000000000 - - - - - - - 180 - 150 - 75 - 23 - - - - Fit - - - - - - 180 - 180 - 75 - 23 - - - - Save - - - - - - 180 - 210 - 75 - 23 - - - - Reset - - - - - true - - - - 180 - 240 - 75 - 23 - - - - Distortion - - - - - - 180 - 270 - 75 - 23 - - - - Timings - - - - - - 20 - 320 - 201 - 111 - - - - Fit Material - - - - - 110 - 70 - 61 - 22 - - - - 9999 - - - 20 - - - - - - 40 - 50 - 46 - 13 - - - - Error - - - - - - 20 - 70 - 71 - 22 - - - - 7 - - - 0.100000000000000 - - - 0.000100000000000 - - - 0.000100000000000 - - - - - - 20 - 20 - 75 - 23 - - - - Estimate K - - - - - - 100 - 20 - 75 - 23 - - - - Reset K - - - - - - 120 - 50 - 46 - 13 - - - - Max Iter - - - - - - - - 0 - 0 - 464 - 21 - - - - - Load - - - - - - - Save - - - - - - - - Version 0.6 - - - - - - - - - TopToolBarArea - - - false - - - - - - Load Reference - - - - - Load Material - - - - - Simulation - - - - - k - - - - - n - - - - - - - - - + + + InteractiveMieClass + + + + 0 + 0 + 464 + 525 + + + + true + + + InteractiveMie + + + + + + 20 + 140 + 151 + 181 + + + + Material + + + + + 70 + 80 + 62 + 22 + + + + 0.100000000000000 + + + 1.000000000000000 + + + + + + 70 + 50 + 62 + 22 + + + + 1.000000000000000 + + + 0.010000000000000 + + + 1.490000000000000 + + + + + + 30 + 50 + 46 + 13 + + + + base IR + + + + + + 70 + 20 + 62 + 22 + + + + true + + + 0.100000000000000 + + + 4.000000000000000 + + + + + + 30 + 20 + 46 + 13 + + + + radius + + + + + + 30 + 80 + 46 + 13 + + + + scale K + + + + + + 20 + 110 + 101 + 17 + + + + Apply Material + + + true + + + + + + 20 + 140 + 111 + 22 + + + + + + + + 20 + 10 + 241 + 131 + + + + Optics + + + + + 5 + 50 + 71 + 20 + + + + Objective NA + + + + + + 80 + 20 + 62 + 22 + + + + 1.000000000000000 + + + 0.010000000000000 + + + + + + 5 + 20 + 71 + 20 + + + + Condenser NA + + + + + + 160 + 20 + 62 + 22 + + + + 1.000000000000000 + + + 0.010000000000000 + + + 0.600000000000000 + + + + + + 160 + 50 + 62 + 22 + + + + 1.000000000000000 + + + 0.010000000000000 + + + 0.600000000000000 + + + + + + 80 + 50 + 62 + 22 + + + + 1.000000000000000 + + + 0.010000000000000 + + + + + + 20 + 80 + 82 + 17 + + + + Transmission + + + true + + + + + + 150 + 80 + 82 + 17 + + + + Reflection + + + + + + 150 + 100 + 101 + 17 + + + + Point Detector + + + + + + 10 + 100 + 42 + 22 + + + + 999 + + + 200 + + + + + + 60 + 100 + 71 + 16 + + + + Obj. Samples + + + + + + + 280 + 20 + 161 + 411 + + + + Display + + + + + 80 + 70 + 71 + 22 + + + + 6 + + + -9999.000000000000000 + + + 9999.000000000000000 + + + 0.100000000000000 + + + + + true + + + + 10 + 70 + 61 + 22 + + + + 1 + + + 100000 + + + 10 + + + 800 + + + + + + 110 + 20 + 16 + 16 + + + + A + + + + + + 80 + 40 + 71 + 22 + + + + 6 + + + -9999.000000000000000 + + + 9999.000000000000000 + + + 0.100000000000000 + + + 1.000000000000000 + + + + + true + + + + 10 + 40 + 61 + 22 + + + + 1 + + + 100000 + + + 10 + + + 4000 + + + + + + 20 + 20 + 61 + 16 + + + + nu (cm^-1) + + + + + + 10 + 230 + 131 + 17 + + + + Reference Spectrum + + + true + + + + + + 10 + 170 + 131 + 17 + + + + Simulated Spectrum + + + true + + + + + + 10 + 280 + 131 + 17 + + + + Simulated K + + + false + + + + + + 80 + 100 + 71 + 22 + + + + 6 + + + -99.989999999999995 + + + 0.010000000000000 + + + + + + 10 + 100 + 71 + 16 + + + + I0 Scale + + + + + false + + + + 80 + 130 + 71 + 22 + + + + 6 + + + -99.989999999999995 + + + 0.000010000000000 + + + + + + 10 + 130 + 71 + 16 + + + + Ref Slope + + + + + + 10 + 300 + 91 + 17 + + + + Material K + + + + + + 10 + 330 + 131 + 17 + + + + Simulated N + + + false + + + + + + 10 + 350 + 91 + 17 + + + + Material N + + + + + + 90 + 290 + 51 + 22 + + + + 0.100000000000000 + + + + + + 90 + 340 + 51 + 22 + + + + 0.100000000000000 + + + + + + 10 + 380 + 70 + 17 + + + + Normalize + + + + + + 50 + 190 + 82 + 17 + + + + Absorbance + + + true + + + + + + 50 + 210 + 82 + 17 + + + + Intensity + + + + + + 90 + 380 + 62 + 22 + + + + 1.000000000000000 + + + 1.000000000000000 + + + + + + + 180 + 150 + 75 + 23 + + + + Fit + + + + + + 180 + 180 + 75 + 23 + + + + Save + + + + + + 180 + 210 + 75 + 23 + + + + Reset + + + + + true + + + + 180 + 240 + 75 + 23 + + + + Distortion + + + + + + 180 + 270 + 75 + 23 + + + + Timings + + + + + + 20 + 320 + 201 + 111 + + + + Fit Material + + + + + 110 + 70 + 61 + 22 + + + + 9999 + + + 20 + + + + + + 40 + 50 + 46 + 13 + + + + Error + + + + + + 20 + 70 + 71 + 22 + + + + 7 + + + 0.100000000000000 + + + 0.000100000000000 + + + 0.000100000000000 + + + + + + 20 + 20 + 75 + 23 + + + + Estimate K + + + + + + 100 + 20 + 75 + 23 + + + + Reset K + + + + + + 120 + 50 + 46 + 13 + + + + Max Iter + + + + + + + + 0 + 0 + 464 + 21 + + + + + Load + + + + + + + Save + + + + + + + + Version 0.6 + + + + + + + + + TopToolBarArea + + + false + + + + + + Load Reference + + + + + Load Material + + + + + Simulation + + + + + k + + + + + n + + + + + + + + + diff --git a/kPMMA.txt b/kPMMA.txt index 6e00ed5..02c8156 100644 --- a/kPMMA.txt +++ b/kPMMA.txt @@ -1,3201 +1,3201 @@ -600 0.0241342 -602 0.027446631 -604 0.02823961 -606 0.029234628 -608 0.025898145 -610 0.027709774 -612 0.025719063 -614 0.024429068 -616 0.02854507 -618 0.028690732 -620 0.027360949 -622 0.026091157 -624 0.028641792 -626 0.025692568 -628 0.027570268 -630 0.026608215 -632 0.025158608 -634 0.027824888 -636 0.027869757 -638 0.028231098 -640 0.027216732 -642 0.027256791 -644 0.026774291 -646 0.025499332 -648 0.026889976 -650 0.030071764 -652 0.028157525 -654 0.027086256 -656 0.023530438 -658 0.026059433 -660 0.024346599 -662 0.028048226 -664 0.026330259 -666 0.026601859 -668 0.026131422 -670 0.024728621 -672 0.02338841 -674 0.025137265 -676 0.024573728 -678 0.02555457 -680 0.026601251 -682 0.02396367 -684 0.023990388 -686 0.022609513 -688 0.02293027 -690 0.023659684 -692 0.023029444 -694 0.02354769 -696 0.022885431 -698 0.020916068 -700 0.017366832 -702 0.020254317 -704 0.02021588 -706 0.019612931 -708 0.020605736 -710 0.019409 -712 0.020098812 -714 0.017859943 -716 0.017200361 -718 0.017415851 -720 0.016738256 -722 0.017480257 -724 0.016505558 -726 0.017110302 -728 0.017027064 -730 0.016024705 -732 0.017486817 -734 0.01747258 -736 0.018679356 -738 0.0198481 -740 0.021190117 -742 0.023716217 -744 0.03056829 -746 0.038271622 -748 0.04379452 -750 0.044251529 -752 0.0407681 -754 0.034103515 -756 0.029061414 -758 0.02617678 -760 0.022539928 -762 0.021165925 -764 0.019846463 -766 0.018521271 -768 0.018036484 -770 0.017126223 -772 0.016586444 -774 0.016483205 -776 0.01531947 -778 0.014237011 -780 0.013740482 -782 0.012463683 -784 0.012601353 -786 0.012687382 -788 0.011956341 -790 0.012597304 -792 0.01301531 -794 0.013443559 -796 0.014187849 -798 0.014467894 -800 0.015065439 -802 0.014878516 -804 0.015873769 -806 0.016515435 -808 0.016709374 -810 0.017771403 -812 0.016772822 -814 0.015531226 -816 0.014555445 -818 0.013874898 -820 0.015212008 -822 0.016378744 -824 0.017775592 -826 0.01866164 -828 0.018518393 -830 0.016763911 -832 0.015599009 -834 0.017242919 -836 0.020302394 -838 0.023933252 -840 0.026400268 -842 0.02629389 -844 0.024144284 -846 0.022565086 -848 0.020193958 -850 0.018896857 -852 0.01763933 -854 0.016642232 -856 0.015634651 -858 0.014645714 -860 0.014138096 -862 0.014067378 -864 0.013168089 -866 0.012439437 -868 0.011586666 -870 0.011339401 -872 0.010914962 -874 0.011187976 -876 0.01107262 -878 0.010671149 -880 0.010509334 -882 0.010691428 -884 0.010463665 -886 0.010732772 -888 0.01113261 -890 0.011327793 -892 0.011556208 -894 0.011574848 -896 0.012311955 -898 0.012752431 -900 0.013542695 -902 0.014021246 -904 0.01526174 -906 0.016386114 -908 0.017710929 -910 0.01815038 -912 0.018485943 -914 0.017942962 -916 0.017253983 -918 0.01673434 -920 0.01576578 -922 0.014969642 -924 0.014914081 -926 0.014775756 -928 0.01494549 -930 0.015163243 -932 0.015246393 -934 0.01532558 -936 0.015787325 -938 0.016231344 -940 0.016554737 -942 0.017506803 -944 0.018319774 -946 0.019145212 -948 0.02028672 -950 0.021535268 -952 0.02275816 -954 0.024219016 -956 0.025883888 -958 0.028191904 -960 0.02973823 -962 0.032138566 -964 0.034003184 -966 0.03499998 -968 0.034104727 -970 0.032129204 -972 0.029984542 -974 0.028583373 -976 0.029296818 -978 0.030947438 -980 0.033218509 -982 0.035106761 -984 0.037063027 -986 0.037990186 -988 0.03843855 -990 0.038237958 -992 0.037541096 -994 0.035408946 -996 0.032268154 -998 0.027709144 -1000 0.022616564 -1002 0.017792654 -1004 0.013769074 -1006 0.010837077 -1008 0.009454576 -1010 0.008332445 -1012 0.008116192 -1014 0.007675599 -1016 0.007566205 -1018 0.007612047 -1020 0.007823547 -1022 0.007966098 -1024 0.00809757 -1026 0.008065411 -1028 0.007845732 -1030 0.008024275 -1032 0.008148742 -1034 0.00829201 -1036 0.008417171 -1038 0.008776959 -1040 0.008930208 -1042 0.009109161 -1044 0.009556965 -1046 0.010041021 -1048 0.010441404 -1050 0.011689312 -1052 0.013463372 -1054 0.016068878 -1056 0.019131748 -1058 0.022191274 -1060 0.024570002 -1062 0.025823144 -1064 0.025672626 -1066 0.024900161 -1068 0.023916478 -1070 0.022915273 -1072 0.021869278 -1074 0.021291225 -1076 0.020732279 -1078 0.020423981 -1080 0.019941966 -1082 0.019763979 -1084 0.020171972 -1086 0.020501795 -1088 0.020890993 -1090 0.020973014 -1092 0.021622654 -1094 0.021985718 -1096 0.022794049 -1098 0.023588335 -1100 0.024728944 -1102 0.025840943 -1104 0.027215918 -1106 0.028776335 -1108 0.030474863 -1110 0.032132728 -1112 0.03432894 -1114 0.03658024 -1116 0.039269767 -1118 0.042412102 -1120 0.04564282 -1122 0.048808874 -1124 0.052149974 -1126 0.056015747 -1128 0.060459226 -1130 0.066082016 -1132 0.073004102 -1134 0.082002822 -1136 0.092694241 -1138 0.105040768 -1140 0.119005198 -1142 0.134765364 -1144 0.151290317 -1146 0.166711247 -1148 0.177289661 -1150 0.177581202 -1152 0.168819305 -1154 0.153355038 -1156 0.137689641 -1158 0.124839415 -1160 0.114845252 -1162 0.107880108 -1164 0.102774174 -1166 0.099425166 -1168 0.097407674 -1170 0.09593259 -1172 0.095228179 -1174 0.094643601 -1176 0.093962003 -1178 0.092950837 -1180 0.092259317 -1182 0.092367257 -1184 0.09505949 -1186 0.10084115 -1188 0.108423217 -1190 0.11487388 -1192 0.117710488 -1194 0.115505139 -1196 0.108980564 -1198 0.099427356 -1200 0.088724245 -1202 0.077275287 -1204 0.065974487 -1206 0.055639191 -1208 0.046756707 -1210 0.040144578 -1212 0.035787746 -1214 0.033682891 -1216 0.033223632 -1218 0.034677454 -1220 0.036745772 -1222 0.038893257 -1224 0.041363039 -1226 0.044436197 -1228 0.048838267 -1230 0.054463569 -1232 0.06102213 -1234 0.068108657 -1236 0.074819063 -1238 0.080199202 -1240 0.083557607 -1242 0.084416767 -1244 0.082399867 -1246 0.078105449 -1248 0.072146041 -1250 0.065513193 -1252 0.059389805 -1254 0.054233076 -1256 0.05069896 -1258 0.048560539 -1260 0.048145702 -1262 0.049521078 -1264 0.051961126 -1266 0.055154907 -1268 0.058810026 -1270 0.062094907 -1272 0.063453855 -1274 0.061370974 -1276 0.056096801 -1278 0.048835689 -1280 0.041617703 -1282 0.035115884 -1284 0.029979602 -1286 0.02577722 -1288 0.022496209 -1290 0.020126584 -1292 0.018027203 -1294 0.016327132 -1296 0.014932173 -1298 0.013739422 -1300 0.01257841 -1302 0.011667794 -1304 0.010851348 -1306 0.010116636 -1308 0.009717891 -1310 0.009400051 -1312 0.009109718 -1314 0.00888188 -1316 0.008728033 -1318 0.008555248 -1320 0.008339087 -1322 0.008263885 -1324 0.008135335 -1326 0.008024262 -1328 0.00807128 -1330 0.008133836 -1332 0.008127452 -1334 0.008138716 -1336 0.008226431 -1338 0.008523101 -1340 0.008850838 -1342 0.008854893 -1344 0.009270106 -1346 0.009499399 -1348 0.010017198 -1350 0.01059085 -1352 0.011038176 -1354 0.011773896 -1356 0.012769294 -1358 0.013638295 -1360 0.014465589 -1362 0.01518012 -1364 0.015838836 -1366 0.015586918 -1368 0.015225006 -1370 0.014610879 -1372 0.014078189 -1374 0.013891646 -1376 0.01474375 -1378 0.016541246 -1380 0.019262753 -1382 0.02160541 -1384 0.022915428 -1386 0.023594535 -1388 0.023160304 -1390 0.021560851 -1392 0.019284629 -1394 0.017224111 -1396 0.015715596 -1398 0.01451186 -1400 0.013747084 -1402 0.012838691 -1404 0.011692484 -1406 0.010730102 -1408 0.009879522 -1410 0.009532642 -1412 0.009405445 -1414 0.009421966 -1416 0.009767846 -1418 0.010469222 -1420 0.012306655 -1422 0.014024908 -1424 0.017706846 -1426 0.022583787 -1428 0.029021083 -1430 0.037190928 -1432 0.044809253 -1434 0.049326808 -1436 0.046321255 -1438 0.046591991 -1440 0.044754161 -1442 0.045191988 -1444 0.047429807 -1446 0.05017989 -1448 0.051372585 -1450 0.051926052 -1452 0.048877221 -1454 0.045080598 -1456 0.038315863 -1458 0.036421716 -1460 0.035921234 -1462 0.033572486 -1464 0.030617138 -1466 0.029223629 -1468 0.028215261 -1470 0.027700175 -1472 0.026917795 -1474 0.029504607 -1476 0.030149502 -1478 0.032100457 -1480 0.033473881 -1482 0.035300299 -1484 0.036565357 -1486 0.036261041 -1488 0.033080071 -1490 0.027177502 -1492 0.022131254 -1494 0.01709778 -1496 0.013099563 -1498 0.010530086 -1500 0.008297551 -1502 0.006882263 -1504 0.005898158 -1506 0.007390398 -1508 0.005394371 -1510 0.00469017 -1512 0.004858713 -1514 0.004664992 -1516 0.005005949 -1518 0.004056874 -1520 0.004193847 -1522 0.003657278 -1524 0.00283663 -1526 0.002752255 -1528 0.002349934 -1530 0.002245644 -1532 0.002485224 -1534 0.002614123 -1536 0.002208785 -1538 0.003534115 -1540 0.00409184 -1542 0.003070369 -1544 0.00262039 -1546 0.002380277 -1548 0.00226781 -1550 0.002599999 -1552 0.002356906 -1554 0.003044914 -1556 0.002653725 -1558 0.006023148 -1560 0.004062994 -1562 0.002457177 -1564 0.002618192 -1566 0.002533502 -1568 0.002721934 -1570 0.002891702 -1572 0.002507352 -1574 0.002683978 -1576 0.003586049 -1578 0.002836659 -1580 0.002886234 -1582 0.002913471 -1584 0.003031189 -1586 0.003179643 -1588 0.003307134 -1590 0.003664506 -1592 0.003805406 -1594 0.004094776 -1596 0.00401814 -1598 0.00397432 -1600 0.004099774 -1602 0.00426046 -1604 0.004405449 -1606 0.004566685 -1608 0.004628619 -1610 0.004477913 -1612 0.004433744 -1614 0.004491011 -1616 0.005192656 -1618 0.004285009 -1620 0.004036026 -1622 0.004059854 -1624 0.004105975 -1626 0.003885176 -1628 0.003981282 -1630 0.003952543 -1632 0.003835627 -1634 0.004359047 -1636 0.004402303 -1638 0.004037436 -1640 0.003885624 -1642 0.004009201 -1644 0.003952529 -1646 0.004816486 -1648 0.004304189 -1650 0.003965589 -1652 0.006019426 -1654 0.004885376 -1656 0.004123694 -1658 0.004174164 -1660 0.004235089 -1662 0.004542281 -1664 0.004486926 -1666 0.004614867 -1668 0.004894575 -1670 0.005436912 -1672 0.005431509 -1674 0.005651576 -1676 0.006442447 -1678 0.006865513 -1680 0.007569476 -1682 0.008151428 -1684 0.009926234 -1686 0.010149147 -1688 0.010811564 -1690 0.011577639 -1692 0.012317587 -1694 0.013020018 -1696 0.014610942 -1698 0.015805372 -1700 0.016720898 -1702 0.02059107 -1704 0.022843417 -1706 0.026263481 -1708 0.031574962 -1710 0.03724565 -1712 0.044695611 -1714 0.051489334 -1716 0.064252636 -1718 0.079812715 -1720 0.111108131 -1722 0.134689923 -1724 0.159768011 -1726 0.178664944 -1728 0.189550156 -1730 0.187519211 -1732 0.184568007 -1734 0.148052948 -1736 0.174327833 -1738 0.157782681 -1740 0.130983773 -1742 0.111415729 -1744 0.081721546 -1746 0.057792152 -1748 0.038151926 -1750 0.026069798 -1752 0.017267407 -1754 0.012278154 -1756 0.009329721 -1758 0.007209351 -1760 0.00592142 -1762 0.005374228 -1764 0.004826348 -1766 0.004458699 -1768 0.004270598 -1770 0.003616544 -1772 0.003541228 -1774 0.002583577 -1776 0.002217011 -1778 0.001893818 -1780 0.001935542 -1782 0.001759374 -1784 0.001804172 -1786 0.001733619 -1788 0.001749405 -1790 0.001883088 -1792 0.001990676 -1794 0.00144261 -1796 0.001341056 -1798 0.001334477 -1800 0.001226004 -1802 0.001154986 -1804 0.000870076 -1806 0.000948184 -1808 0.000819373 -1810 0.000877109 -1812 0.000856967 -1814 0.000711407 -1816 0.000664166 -1818 0.000672376 -1820 0.000554067 -1822 0.000636656 -1824 0.000592955 -1826 0.000628019 -1828 0.000694044 -1830 0.000821293 -1832 0.000514679 -1834 0.000528808 -1836 0.000521469 -1838 0.000459258 -1840 0.000346335 -1842 0.000454894 -1844 0.000686447 -1846 0.000322626 -1848 0.00024672 -1850 0.00021652 -1852 0.000228231 -1854 0.000175338 -1856 0.00010178 -1858 4.80366E-05 -1860 0.000163555 -1862 0.000163557 -1864 3.29655E-05 -1866 0.000122024 -1868 0.000276251 -1870 0.000119215 -1872 1.50667E-05 -1874 -6.10E-07 -1876 -6.29537E-05 -1878 -3.01E-06 -1880 -6.19819E-05 -1882 -2.89042E-05 -1884 -4.73032E-05 -1886 2.07543E-05 -1888 5.82048E-05 -1890 9.61175E-05 -1892 -2.35233E-05 -1894 6.6847E-05 -1896 0.000103985 -1898 5.14422E-05 -1900 9.67797E-05 -1902 0.000135013 -1904 0.000172139 -1906 0.000245935 -1908 0.000218667 -1910 0.000249944 -1912 0.000254151 -1914 0.000274606 -1916 0.000246846 -1918 0.000361489 -1920 0.000280901 -1922 0.000476067 -1924 0.00036462 -1926 0.000395353 -1928 0.000442112 -1930 0.000468113 -1932 0.000455817 -1934 0.000471815 -1936 0.000469251 -1938 0.000476748 -1940 0.00051635 -1942 0.000755845 -1944 0.000598315 -1946 0.000708495 -1948 0.000720105 -1950 0.000663963 -1952 0.000798318 -1954 0.000793038 -1956 0.000829472 -1958 0.000848898 -1960 0.000777441 -1962 0.000809709 -1964 0.000740382 -1966 0.000844927 -1968 0.000846562 -1970 0.000842945 -1972 0.000866656 -1974 0.000750066 -1976 0.000875148 -1978 0.000812096 -1980 0.000791832 -1982 0.000795131 -1984 0.000805046 -1986 0.000780545 -1988 0.000796985 -1990 0.000649182 -1992 0.000745563 -1994 0.000695543 -1996 0.00063712 -1998 0.000601964 -2000 0.000563163 -2002 0.000453067 -2004 0.00044115 -2006 0.000470968 -2008 0.000335742 -2010 0.000382163 -2012 0.000362654 -2014 0.000330121 -2016 0.000389084 -2018 0.000292435 -2020 0.000305525 -2022 0.000329511 -2024 0.00038482 -2026 0.000336523 -2028 0.000404901 -2030 0.000380554 -2032 0.000412551 -2034 0.000374696 -2036 0.000440636 -2038 0.000381711 -2040 0.000517346 -2042 0.00051384 -2044 0.000565282 -2046 0.000565683 -2048 0.000568611 -2050 0.000481456 -2052 0.000617706 -2054 0.000528906 -2056 0.00052708 -2058 0.000555077 -2060 0.00050699 -2062 0.000525236 -2064 0.000487272 -2066 0.000539501 -2068 0.000504029 -2070 0.000447441 -2072 0.000516835 -2074 0.00047662 -2076 0.000495004 -2078 0.000456273 -2080 0.000388805 -2082 0.000385634 -2084 0.000323494 -2086 0.00038231 -2088 0.000394126 -2090 0.000383939 -2092 0.000373967 -2094 0.000377053 -2096 0.00038487 -2098 0.000382643 -2100 0.000328327 -2102 0.000300287 -2104 0.000310617 -2106 0.000316786 -2108 0.000333295 -2110 0.000370022 -2112 0.000374474 -2114 0.000401404 -2116 0.000356568 -2118 0.000405314 -2120 0.000407752 -2122 0.000390354 -2124 0.000442652 -2126 0.000408173 -2128 0.000418827 -2130 0.000441786 -2132 0.000344844 -2134 0.000381584 -2136 0.000341404 -2138 0.000395361 -2140 0.000367725 -2142 0.000336463 -2144 0.000391147 -2146 0.000325835 -2148 0.000385238 -2150 0.000365225 -2152 0.000332808 -2154 0.000289714 -2156 0.000283791 -2158 0.000238881 -2160 0.000322866 -2162 0.000286869 -2164 0.000285061 -2166 0.000257684 -2168 0.000312025 -2170 0.000207802 -2172 0.000257015 -2174 0.000220017 -2176 0.00016785 -2178 0.000255717 -2180 0.000290103 -2182 0.000157789 -2184 0.000325881 -2186 0.000247926 -2188 0.000261432 -2190 0.000291347 -2192 0.000280254 -2194 0.000229609 -2196 0.000271056 -2198 0.000270504 -2200 0.000244769 -2202 0.000314874 -2204 0.000229367 -2206 0.00024547 -2208 0.000334635 -2210 0.000279933 -2212 0.000306569 -2214 0.000225706 -2216 0.000278309 -2218 0.000248559 -2220 0.000348697 -2222 0.000245079 -2224 0.000279928 -2226 0.000255734 -2228 0.000240166 -2230 0.000266871 -2232 0.000303392 -2234 0.000314343 -2236 0.000334341 -2238 0.000374558 -2240 0.000341859 -2242 0.000368978 -2244 0.000431373 -2246 0.000366414 -2248 0.000483577 -2250 0.00045685 -2252 0.000405578 -2254 0.000512095 -2256 0.000481377 -2258 0.000514157 -2260 0.000530324 -2262 0.000568964 -2264 0.000509579 -2266 0.000580748 -2268 0.000682969 -2270 0.000728429 -2272 0.000734436 -2274 0.000792405 -2276 0.000821361 -2278 0.000877556 -2280 0.000862509 -2282 0.000976614 -2284 0.000949856 -2286 0.001073058 -2288 0.001016429 -2290 0.001170663 -2292 0.001220265 -2294 0.001173101 -2296 0.001152461 -2298 0.001179885 -2300 0.001206089 -2302 0.001211066 -2304 0.00121729 -2306 0.001241695 -2308 0.001235318 -2310 0.001195495 -2312 0.001301991 -2314 0.001355443 -2316 0.001254785 -2318 0.001389052 -2320 0.001444937 -2322 0.001558414 -2324 0.001760601 -2326 0.001728333 -2328 0.002103392 -2330 0.002092697 -2332 0.002022837 -2334 0.001938495 -2336 0.0020431 -2338 0.001919468 -2340 0.001964749 -2342 0.002282832 -2344 0.00218892 -2346 0.001801857 -2348 0.001061079 -2350 0.001380168 -2352 0.001870321 -2354 0.002102202 -2356 0.002848422 -2358 0.003216502 -2360 0.003213061 -2362 0.003205797 -2364 0.003022776 -2366 0.002849123 -2368 0.002401033 -2370 0.001848448 -2372 0.001970318 -2374 0.001607119 -2376 0.001408379 -2378 0.001289805 -2380 0.001123742 -2382 0.000998744 -2384 0.001002353 -2386 0.001086115 -2388 0.000939055 -2390 0.000948007 -2392 0.000892462 -2394 0.000979962 -2396 0.000928222 -2398 0.000862539 -2400 0.000864195 -2402 0.000886066 -2404 0.000871955 -2406 0.000811919 -2408 0.000766513 -2410 0.000651421 -2412 0.00073298 -2414 0.000708139 -2416 0.000667666 -2418 0.000600986 -2420 0.000610649 -2422 0.000609326 -2424 0.000516116 -2426 0.000492454 -2428 0.00053116 -2430 0.000488114 -2432 0.000460177 -2434 0.000548829 -2436 0.000464511 -2438 0.000491215 -2440 0.000416051 -2442 0.000427695 -2444 0.000395537 -2446 0.000472624 -2448 0.000432484 -2450 0.00050012 -2452 0.000445504 -2454 0.00047767 -2456 0.000445421 -2458 0.000485085 -2460 0.000498423 -2462 0.000507363 -2464 0.000520304 -2466 0.000539524 -2468 0.000608413 -2470 0.000641548 -2472 0.000638234 -2474 0.00070156 -2476 0.000583209 -2478 0.000691745 -2480 0.00069634 -2482 0.000725514 -2484 0.000664786 -2486 0.000695592 -2488 0.000664905 -2490 0.000711927 -2492 0.000729764 -2494 0.000642008 -2496 0.000666359 -2498 0.000576481 -2500 0.000582793 -2502 0.00060028 -2504 0.000485827 -2506 0.00060824 -2508 0.000551492 -2510 0.000514196 -2512 0.000506979 -2514 0.000475469 -2516 0.000432219 -2518 0.000503847 -2520 0.00046777 -2522 0.000500639 -2524 0.00049432 -2526 0.000561426 -2528 0.000522532 -2530 0.000573555 -2532 0.000597892 -2534 0.000685061 -2536 0.000686714 -2538 0.000669184 -2540 0.000688841 -2542 0.000718256 -2544 0.000663613 -2546 0.000709431 -2548 0.000608731 -2550 0.000729101 -2552 0.000729371 -2554 0.000708222 -2556 0.000702107 -2558 0.000589917 -2560 0.00054794 -2562 0.000549422 -2564 0.000571636 -2566 0.000514345 -2568 0.000549508 -2570 0.000524453 -2572 0.000519339 -2574 0.000493066 -2576 0.000434176 -2578 0.000398249 -2580 0.000438974 -2582 0.000447631 -2584 0.000447255 -2586 0.000326312 -2588 0.000408195 -2590 0.000469383 -2592 0.000485155 -2594 0.000414225 -2596 0.000405927 -2598 0.000367873 -2600 0.000355028 -2602 0.000408022 -2604 0.000409804 -2606 0.000337436 -2608 0.000348352 -2610 0.00035314 -2612 0.000285114 -2614 0.000328725 -2616 0.000270909 -2618 0.000295957 -2620 0.000316483 -2622 0.000322541 -2624 0.000283893 -2626 0.000314178 -2628 0.000268822 -2630 0.000266477 -2632 0.000268892 -2634 0.0002953 -2636 0.000292207 -2638 0.000215858 -2640 0.000294136 -2642 0.000272093 -2644 0.000275717 -2646 0.000346284 -2648 0.000283192 -2650 0.000339755 -2652 0.000255491 -2654 0.000208977 -2656 0.000272149 -2658 0.000282438 -2660 0.000158046 -2662 0.000224042 -2664 0.000228577 -2666 0.00017862 -2668 0.000245571 -2670 0.000196986 -2672 0.000252557 -2674 0.000234491 -2676 0.000203408 -2678 0.00017293 -2680 0.000159348 -2682 0.000234691 -2684 0.000214546 -2686 0.000196188 -2688 0.000157204 -2690 0.000208069 -2692 0.000169639 -2694 0.000218734 -2696 0.000218285 -2698 0.000204734 -2700 0.000201751 -2702 0.000264115 -2704 0.000234648 -2706 0.000212676 -2708 0.000270374 -2710 0.000290756 -2712 0.000240304 -2714 0.000316656 -2716 0.000291376 -2718 0.000294754 -2720 0.000351815 -2722 0.000272567 -2724 0.000249977 -2726 0.00035259 -2728 0.000384766 -2730 0.000393084 -2732 0.000410739 -2734 0.000433305 -2736 0.000404912 -2738 0.000420901 -2740 0.000492476 -2742 0.000399805 -2744 0.000456151 -2746 0.00044387 -2748 0.000409688 -2750 0.000418955 -2752 0.000424004 -2754 0.000451382 -2756 0.000482778 -2758 0.000547175 -2760 0.000552162 -2762 0.000570681 -2764 0.000622641 -2766 0.000691426 -2768 0.000597925 -2770 0.000652725 -2772 0.000584151 -2774 0.000624201 -2776 0.000699342 -2778 0.000638496 -2780 0.000707106 -2782 0.000646861 -2784 0.000709634 -2786 0.000679525 -2788 0.000632315 -2790 0.000696032 -2792 0.000664708 -2794 0.000621352 -2796 0.00073734 -2798 0.000724259 -2800 0.000739695 -2802 0.000776947 -2804 0.000896622 -2806 0.000903473 -2808 0.000879962 -2810 0.000961547 -2812 0.00109481 -2814 0.001158287 -2816 0.001209232 -2818 0.001357019 -2820 0.001408481 -2822 0.001613266 -2824 0.001685368 -2826 0.001927973 -2828 0.002122571 -2830 0.00244482 -2832 0.002763225 -2834 0.003192688 -2836 0.003562301 -2838 0.003995446 -2840 0.004252916 -2842 0.004459092 -2844 0.004622304 -2846 0.004644934 -2848 0.004645169 -2850 0.004785238 -2852 0.004798618 -2854 0.004792012 -2856 0.004820004 -2858 0.004727274 -2860 0.004620571 -2862 0.004699273 -2864 0.004703525 -2866 0.004822295 -2868 0.005009114 -2870 0.005093301 -2872 0.005139671 -2874 0.005266593 -2876 0.005667 -2878 0.005788315 -2880 0.006064578 -2882 0.006338457 -2884 0.006550395 -2886 0.006741246 -2888 0.006945089 -2890 0.007130231 -2892 0.007372441 -2894 0.007579747 -2896 0.007731345 -2898 0.00819576 -2900 0.008562466 -2902 0.00903157 -2904 0.00937914 -2906 0.009851342 -2908 0.010332156 -2910 0.010793932 -2912 0.011308225 -2914 0.011939272 -2916 0.012554826 -2918 0.01337334 -2920 0.014110037 -2922 0.014829331 -2924 0.01536142 -2926 0.015789718 -2928 0.016096233 -2930 0.016316084 -2932 0.016308141 -2934 0.016443279 -2936 0.016680791 -2938 0.017027608 -2940 0.017818197 -2942 0.019401865 -2944 0.021799227 -2946 0.024186537 -2948 0.025801865 -2950 0.02625 -2952 0.02550612 -2954 0.023583511 -2956 0.021342843 -2958 0.01914838 -2960 0.017090145 -2962 0.01539656 -2964 0.013855732 -2966 0.012593295 -2968 0.011483726 -2970 0.01054501 -2972 0.009914023 -2974 0.009757613 -2976 0.009809223 -2978 0.010218257 -2980 0.010809435 -2982 0.011797056 -2984 0.012770905 -2986 0.013636468 -2988 0.014480479 -2990 0.01515069 -2992 0.015619918 -2994 0.015682193 -2996 0.015754709 -2998 0.015366002 -3000 0.014715111 -3002 0.014003 -3004 0.013206518 -3006 0.012292597 -3008 0.011394086 -3010 0.010691684 -3012 0.009936019 -3014 0.009296964 -3016 0.008612659 -3018 0.007984566 -3020 0.007436537 -3022 0.006815112 -3024 0.006429191 -3026 0.005806243 -3028 0.005262323 -3030 0.004768602 -3032 0.004320524 -3034 0.003912193 -3036 0.003421985 -3038 0.003098582 -3040 0.002900269 -3042 0.002511091 -3044 0.002161083 -3046 0.002025539 -3048 0.001869605 -3050 0.001691835 -3052 0.001471398 -3054 0.001359149 -3056 0.00124824 -3058 0.001133357 -3060 0.001085935 -3062 0.001030814 -3064 0.00097166 -3066 0.001020728 -3068 0.000940853 -3070 0.000807141 -3072 0.000755513 -3074 0.000751446 -3076 0.000821568 -3078 0.000793843 -3080 0.000633856 -3082 0.000705054 -3084 0.000693464 -3086 0.000648687 -3088 0.00057882 -3090 0.000621521 -3092 0.000491364 -3094 0.000437328 -3096 0.000406632 -3098 0.000537293 -3100 0.000556879 -3102 0.000452115 -3104 0.000463953 -3106 0.00044965 -3108 0.000471158 -3110 0.000432904 -3112 0.00036216 -3114 0.000454401 -3116 0.000412792 -3118 0.000349278 -3120 0.000378075 -3122 0.000285745 -3124 0.000288687 -3126 0.000338756 -3128 0.000323915 -3130 0.000314324 -3132 0.000371908 -3134 0.00034566 -3136 0.000289967 -3138 0.000259827 -3140 0.000334098 -3142 0.000249786 -3144 0.000306433 -3146 0.000164054 -3148 0.000268845 -3150 0.000311615 -3152 0.000402332 -3154 0.000315994 -3156 0.000353941 -3158 0.000336543 -3160 0.000344823 -3162 0.000370153 -3164 0.000362917 -3166 0.000298576 -3168 0.000363507 -3170 0.000287784 -3172 0.000308446 -3174 0.000250863 -3176 0.000301188 -3178 0.00030549 -3180 0.000281667 -3182 0.00027927 -3184 0.00027765 -3186 0.000293586 -3188 0.000355302 -3190 0.000335228 -3192 0.000335549 -3194 0.000362798 -3196 0.000295649 -3198 0.000373852 -3200 0.000328326 -3202 0.000358333 -3204 0.00032544 -3206 0.000387597 -3208 0.000430661 -3210 0.000417581 -3212 0.000324994 -3214 0.000444512 -3216 0.000400082 -3218 0.000377286 -3220 0.000437329 -3222 0.000356377 -3224 0.000352642 -3226 0.000311089 -3228 0.000382579 -3230 0.000329813 -3232 0.000447714 -3234 0.000472512 -3236 0.000457032 -3238 0.000472607 -3240 0.000363677 -3242 0.000394328 -3244 0.000461889 -3246 0.000490442 -3248 0.000438482 -3250 0.000423751 -3252 0.000433888 -3254 0.000499297 -3256 0.000498987 -3258 0.000465415 -3260 0.000421804 -3262 0.000414397 -3264 0.000405735 -3266 0.000487632 -3268 0.000512952 -3270 0.000538537 -3272 0.000552512 -3274 0.000565302 -3276 0.00052271 -3278 0.000486071 -3280 0.000553016 -3282 0.000551074 -3284 0.000550423 -3286 0.000552049 -3288 0.000582685 -3290 0.000602594 -3292 0.00065031 -3294 0.000492417 -3296 0.000568134 -3298 0.000560644 -3300 0.000606052 -3302 0.000632562 -3304 0.000613536 -3306 0.000629737 -3308 0.000723508 -3310 0.000610128 -3312 0.000629599 -3314 0.00061646 -3316 0.000644116 -3318 0.000657711 -3320 0.000671348 -3322 0.000732666 -3324 0.000591952 -3326 0.000639223 -3328 0.000631524 -3330 0.000664578 -3332 0.000750598 -3334 0.000710665 -3336 0.000775822 -3338 0.000768051 -3340 0.000722316 -3342 0.000659833 -3344 0.000705481 -3346 0.000739379 -3348 0.000754306 -3350 0.000858934 -3352 0.000773878 -3354 0.000745424 -3356 0.000749742 -3358 0.00082974 -3360 0.000824431 -3362 0.000877307 -3364 0.000932521 -3366 0.00087025 -3368 0.000887279 -3370 0.000847555 -3372 0.000884819 -3374 0.00087596 -3376 0.000857088 -3378 0.00093776 -3380 0.001039654 -3382 0.001065518 -3384 0.00099205 -3386 0.00099477 -3388 0.000961683 -3390 0.001041186 -3392 0.001128488 -3394 0.001144315 -3396 0.001224228 -3398 0.001154251 -3400 0.001138032 -3402 0.001173604 -3404 0.001248265 -3406 0.001356015 -3408 0.001285042 -3410 0.001316454 -3412 0.001415994 -3414 0.001463886 -3416 0.001644794 -3418 0.001713653 -3420 0.001730308 -3422 0.001932657 -3424 0.001949152 -3426 0.002006968 -3428 0.0020619 -3430 0.002087098 -3432 0.002206993 -3434 0.001964774 -3436 0.002028821 -3438 0.002393625 -3440 0.002708104 -3442 0.002798177 -3444 0.002983385 -3446 0.00291298 -3448 0.002991802 -3450 0.003001868 -3452 0.003042922 -3454 0.002947307 -3456 0.003051547 -3458 0.00264556 -3460 0.002413914 -3462 0.002811906 -3464 0.002335021 -3466 0.001661673 -3468 0.001509012 -3470 0.002093659 -3472 0.002451124 -3474 0.002367439 -3476 0.002393187 -3478 0.001892594 -3480 0.002007355 -3482 0.002249049 -3484 0.002021025 -3486 0.001697064 -3488 0.001840785 -3490 0.001717791 -3492 0.001588541 -3494 0.001424759 -3496 0.001349834 -3498 0.001273596 -3500 0.001208783 -3502 0.001134414 -3504 0.001144532 -3506 0.001002239 -3508 0.001010699 -3510 0.001003586 -3512 0.000904709 -3514 0.000965619 -3516 0.000937276 -3518 0.00097229 -3520 0.000924807 -3522 0.00095119 -3524 0.000890108 -3526 0.000873585 -3528 0.000885436 -3530 0.000885047 -3532 0.000952793 -3534 0.001030164 -3536 0.000992343 -3538 0.000971817 -3540 0.000915465 -3542 0.000959877 -3544 0.001059664 -3546 0.001041402 -3548 0.00090259 -3550 0.000980567 -3552 0.000914447 -3554 0.00080593 -3556 0.000844328 -3558 0.000743256 -3560 0.000855686 -3562 0.000738947 -3564 0.000834279 -3566 0.001144887 -3568 0.000842023 -3570 0.00067585 -3572 0.000602224 -3574 0.000682329 -3576 0.000581809 -3578 0.000568449 -3580 0.000575447 -3582 0.000481773 -3584 0.000581484 -3586 0.00081874 -3588 0.000617644 -3590 0.000442477 -3592 0.000640158 -3594 0.000675461 -3596 0.00051728 -3598 0.000597346 -3600 0.000584266 -3602 0.0004527 -3604 0.000522512 -3606 0.000624314 -3608 0.000574119 -3610 0.000608948 -3612 0.0008001 -3614 0.000712729 -3616 0.000617938 -3618 0.000826828 -3620 0.000760759 -3622 0.000538546 -3624 0.000557439 -3626 0.0007446 -3628 0.00119225 -3630 0.000526519 -3632 0.000556606 -3634 0.000556875 -3636 0.000506369 -3638 0.000552368 -3640 0.000484705 -3642 0.000499876 -3644 0.000531957 -3646 0.001003344 -3648 0.000945893 -3650 0.000999296 -3652 0.000369562 -3654 0.000439893 -3656 0.000386363 -3658 0.000306059 -3660 0.000268561 -3662 0.000200995 -3664 0.000216152 -3666 0.00031073 -3668 0.000539568 -3670 0.000482811 -3672 0.000170902 -3674 0.001357086 -3676 0.00034876 -3678 0.000117241 -3680 0.000137332 -3682 0.000159181 -3684 0.000118508 -3686 0.000149121 -3688 0.000421635 -3690 0.000330956 -3692 -1.81766E-05 -3694 -2.72672E-05 -3696 -6.55202E-05 -3698 -8.60E-06 -3700 1.51871E-05 -3702 2.32458E-05 -3704 -0.000101734 -3706 -5.30903E-05 -3708 0.000113641 -3710 0.000309234 -3712 0.000106649 -3714 -3.12E-06 -3716 -5.76521E-05 -3718 0.000110276 -3720 9.06626E-05 -3722 9.32628E-05 -3724 -1.2309E-05 -3726 4.60304E-05 -3728 -8.27521E-05 -3730 0.000105094 -3732 0.000359337 -3734 0.000615865 -3736 0.000442528 -3738 3.18536E-05 -3740 3.5789E-05 -3742 0.000292863 -3744 0.000969885 -3746 0.000136573 -3748 0.000457883 -3750 0.00039287 -3752 0.000280102 -3754 8.33166E-05 -3756 0.000108764 -3758 0.00020727 -3760 7.00378E-05 -3762 -5.27051E-05 -3764 0.000139553 -3766 -1.72393E-05 -3768 7.03872E-05 -3770 -2.01502E-05 -3772 -0.000120557 -3774 -8.82563E-05 -3776 -2.43E-06 -3778 0.00019793 -3780 4.93405E-05 -3782 1.94903E-05 -3784 1.86442E-05 -3786 -0.000137666 -3788 -3.29324E-05 -3790 -9.87411E-05 -3792 -1.07826E-05 -3794 2.08248E-05 -3796 0.000114587 -3798 7.00175E-05 -3800 0.000491793 -3802 6.04807E-05 -3804 3.25705E-05 -3806 0.000310394 -3808 2.15496E-05 -3810 8.00694E-05 -3812 0.000109453 -3814 0.00030066 -3816 0.000393264 -3818 0.000178967 -3820 0.000808506 -3822 0.000105035 -3824 8.46296E-05 -3826 0.000121773 -3828 0.000135065 -3830 0.000274273 -3832 8.69895E-05 -3834 0.000222838 -3836 0.000601996 -3838 0.000338187 -3840 0.00024193 -3842 0.000133521 -3844 8.45357E-05 -3846 1.83423E-05 -3848 3.48799E-05 -3850 0.000272218 -3852 0.001030866 -3854 0.000469528 -3856 0.000142735 -3858 6.34538E-05 -3860 0.000145079 -3862 0.000227556 -3864 0.000296134 -3866 0.000137378 -3868 0.000451376 -3870 0.000226189 -3872 0.000119799 -3874 0.000122617 -3876 5.18662E-05 -3878 0.000219086 -3880 0.000268173 -3882 0.000210735 -3884 0.000346726 -3886 0.000183689 -3888 0.000124343 -3890 0.000288181 -3892 1.78834E-05 -3894 9.95453E-05 -3896 0.000185088 -3898 0.000404097 -3900 0.000218476 -3902 0.000267402 -3904 0.000295706 -3906 0.000103094 -3908 0.000101332 -3910 0.000105612 -3912 5.01633E-05 -3914 5.69529E-05 -3916 0.000170528 -3918 9.52556E-05 -3920 0.000168842 -3922 0.00010632 -3924 0.000344961 -3926 7.59984E-05 -3928 0.000221155 -3930 8.75421E-05 -3932 0.000298592 -3934 9.37313E-05 -3936 0.000114365 -3938 0.000223073 -3940 0.000267331 -3942 0.000273424 -3944 0.000143308 -3946 0.000155693 -3948 0.000195926 -3950 0.00020435 -3952 0.000132183 -3954 0.000197331 -3956 0.000248508 -3958 0.000140694 -3960 0.000166407 -3962 0.000118974 -3964 7.31663E-05 -3966 0.00011566 -3968 7.56379E-05 -3970 0.000137593 -3972 0.000116022 -3974 0.000186931 -3976 0.000201803 -3978 0.000150322 -3980 0.000141396 -3982 0.000187293 -3984 0.000263054 -3986 0.000212817 -3988 0.000210708 -3990 0.000217985 -3992 0.000192881 -3994 0.000182579 -3996 0.000164746 -3998 0.000200347 -4000 0.000253085 -4002 0.000171612 -4004 0.000149877 -4006 0.000208808 -4008 0.000140164 -4010 0.000188787 -4012 0.000168944 -4014 0.000177989 -4016 0.000163891 -4018 0.000158359 -4020 0.000136663 -4022 0.000216707 -4024 0.000191577 -4026 0.000150521 -4028 0.000122795 -4030 0.000181619 -4032 0.000211165 -4034 0.000247671 -4036 0.000213884 -4038 0.000193577 -4040 0.000142549 -4042 0.000158466 -4044 0.000246274 -4046 0.000177406 -4048 0.000166641 -4050 0.000176623 -4052 0.000228601 -4054 0.000144074 -4056 0.000218833 -4058 0.000200763 -4060 0.000151771 -4062 0.00015336 -4064 0.000139108 -4066 0.000169462 -4068 0.000123463 -4070 0.000202624 -4072 0.000208393 -4074 0.000167816 -4076 0.000174958 -4078 0.000210896 -4080 0.000207398 -4082 0.000127384 -4084 0.000173693 -4086 0.000200631 -4088 0.000269673 -4090 0.000223231 -4092 0.00029172 -4094 0.00031649 -4096 0.000285588 -4098 0.000251761 -4100 0.000339028 -4102 0.000298703 -4104 0.00024852 -4106 0.000209136 -4108 0.000246085 -4110 0.000282685 -4112 0.000191696 -4114 0.000254014 -4116 0.000228422 -4118 0.000306607 -4120 0.000229142 -4122 0.000348631 -4124 0.000287556 -4126 0.000264232 -4128 0.000209319 -4130 0.000242237 -4132 0.000281044 -4134 0.000321739 -4136 0.000294847 -4138 0.000347712 -4140 0.00036883 -4142 0.000328563 -4144 0.000261437 -4146 0.000334065 -4148 0.000325497 -4150 0.000275545 -4152 0.000358192 -4154 0.000286392 -4156 0.000456376 -4158 0.000388783 -4160 0.000360544 -4162 0.000365173 -4164 0.00028698 -4166 0.000371822 -4168 0.000364618 -4170 0.000288243 -4172 0.000307984 -4174 0.000332854 -4176 0.00032695 -4178 0.000388172 -4180 0.000348726 -4182 0.000368687 -4184 0.000341082 -4186 0.000304622 -4188 0.000287432 -4190 0.00031641 -4192 0.000327385 -4194 0.000313965 -4196 0.000378199 -4198 0.000292018 -4200 0.000371458 -4202 0.000405758 -4204 0.000408023 -4206 0.000371601 -4208 0.000316549 -4210 0.000408096 -4212 0.000363203 -4214 0.00032933 -4216 0.00043362 -4218 0.000370029 -4220 0.000360431 -4222 0.000390905 -4224 0.000308371 -4226 0.000243889 -4228 0.000400749 -4230 0.000232047 -4232 0.00038913 -4234 0.000202101 -4236 0.000313043 -4238 0.000234972 -4240 0.000299282 -4242 0.000291387 -4244 0.000257221 -4246 0.000254894 -4248 0.000313133 -4250 0.000272395 -4252 0.000329282 -4254 0.000211776 -4256 0.000161765 -4258 0.0002771 -4260 0.000244175 -4262 0.00024201 -4264 0.000174491 -4266 0.000304066 -4268 0.000350939 -4270 0.000355563 -4272 0.000271775 -4274 0.000291467 -4276 0.000230176 -4278 0.000394533 -4280 0.000249728 -4282 0.000215013 -4284 0.000246479 -4286 0.000326038 -4288 0.000189699 -4290 0.000268778 -4292 0.00013331 -4294 0.000323916 -4296 0.000216853 -4298 0.000291581 -4300 0.000314194 -4302 0.000279978 -4304 0.00021133 -4306 0.000270665 -4308 0.000204827 -4310 0.000296492 -4312 0.000272268 -4314 0.000237342 -4316 0.000281693 -4318 0.000289106 -4320 0.000303374 -4322 0.000325679 -4324 0.000239933 -4326 0.000314462 -4328 0.000253209 -4330 0.000241805 -4332 0.000351215 -4334 0.000286358 -4336 0.000330223 -4338 0.000369278 -4340 0.000329129 -4342 0.000275593 -4344 0.00029688 -4346 0.000346473 -4348 0.000352509 -4350 0.000355569 -4352 0.000461464 -4354 0.000250317 -4356 0.000427547 -4358 0.000434099 -4360 0.000343595 -4362 0.000350079 -4364 0.000408112 -4366 0.000350043 -4368 0.000411028 -4370 0.000434798 -4372 0.000409623 -4374 0.000423228 -4376 0.00037185 -4378 0.000433805 -4380 0.000454019 -4382 0.000443482 -4384 0.000545947 -4386 0.000429948 -4388 0.00038776 -4390 0.000416255 -4392 0.00040207 -4394 0.000397386 -4396 0.00040638 -4398 0.000369246 -4400 0.000460818 -4402 0.000381619 -4404 0.000382068 -4406 0.00032482 -4408 0.000457543 -4410 0.000455416 -4412 0.000487212 -4414 0.000417398 -4416 0.000382643 -4418 0.000403196 -4420 0.000493331 -4422 0.000341439 -4424 0.000513969 -4426 0.000587223 -4428 0.000580159 -4430 0.000557957 -4432 0.000556266 -4434 0.000517113 -4436 0.000660822 -4438 0.000569927 -4440 0.000582118 -4442 0.000542652 -4444 0.000591509 -4446 0.000512382 -4448 0.000560221 -4450 0.000487317 -4452 0.000482114 -4454 0.000461281 -4456 0.000393521 -4458 0.000388897 -4460 0.000397314 -4462 0.000315475 -4464 0.000310207 -4466 0.000266723 -4468 0.000339416 -4470 0.000292223 -4472 0.000281582 -4474 0.000329826 -4476 0.000289373 -4478 0.00021093 -4480 0.000174358 -4482 0.000341538 -4484 0.000247057 -4486 0.000273322 -4488 0.000234901 -4490 0.000203559 -4492 0.000129721 -4494 7.83785E-05 -4496 0.000190952 -4498 0.000131392 -4500 0.000193057 -4502 1.24492E-05 -4504 9.08797E-05 -4506 0.000144288 -4508 0.000127571 -4510 2.51343E-05 -4512 7.48194E-05 -4514 0.000103584 -4516 4.19407E-05 -4518 2.40009E-05 -4520 0.000102142 -4522 1.18914E-05 -4524 5.72128E-05 -4526 -8.73734E-05 -4528 -1.76682E-05 -4530 -4.90721E-05 -4532 -4.71309E-05 -4534 3.91112E-05 -4536 1.34E-06 -4538 9.62881E-05 -4540 3.37309E-05 -4542 -2.91281E-05 -4544 -3.2849E-05 -4546 -1.58304E-05 -4548 0.000110588 -4550 7.05284E-05 -4552 7.94542E-05 -4554 3.37392E-05 -4556 -9.20E-06 -4558 -2.21519E-05 -4560 3.46914E-05 -4562 5.61431E-05 -4564 8.01E-06 -4566 -0.000103626 -4568 3.34905E-05 -4570 -2.32184E-05 -4572 -1.08982E-05 -4574 4.1603E-05 -4576 -5.00568E-05 -4578 -6.83E-06 -4580 2.7055E-05 -4582 2.86344E-05 -4584 5.87E-06 -4586 -6.99461E-05 -4588 -8.39377E-05 -4590 3.60434E-05 -4592 7.96765E-05 -4594 -0.000177672 -4596 -3.17066E-05 -4598 3.72168E-05 -4600 -6.88E-06 -4602 -6.03735E-05 -4604 4.66722E-05 -4606 -3.54641E-05 -4608 -1.74806E-05 -4610 -1.28922E-05 -4612 7.60359E-05 -4614 8.66487E-05 -4616 9.21211E-05 -4618 -5.23373E-05 -4620 -5.48989E-05 -4622 -6.38442E-05 -4624 3.55E-07 -4626 5.57926E-05 -4628 -4.49083E-05 -4630 -2.67924E-05 -4632 -7.71728E-05 -4634 3.694E-05 -4636 0.00012611 -4638 -5.57319E-05 -4640 -4.87582E-05 -4642 9.33695E-05 -4644 0.000127693 -4646 -2.1893E-05 -4648 3.65E-06 -4650 -3.07E-06 -4652 -2.23231E-05 -4654 5.90752E-05 -4656 1.12225E-05 -4658 3.36415E-05 -4660 -9.07325E-05 -4662 -2.33188E-05 -4664 7.71021E-05 -4666 2.75205E-05 -4668 5.73118E-05 -4670 0.000100899 -4672 5.6625E-05 -4674 0.000142437 -4676 -2.07439E-05 -4678 -1.93856E-05 -4680 9.87695E-05 -4682 4.89309E-05 -4684 3.68502E-05 -4686 0.000153062 -4688 8.76468E-05 -4690 0.000112023 -4692 -9.49E-06 -4694 2.66218E-05 -4696 -5.76107E-05 -4698 -8.38058E-05 -4700 -2.9238E-05 -4702 -3.11E-06 -4704 8.99146E-05 -4706 1.31697E-05 -4708 -9.5303E-05 -4710 -2.87252E-05 -4712 3.52673E-05 -4714 0.000136868 -4716 7.36812E-05 -4718 4.36516E-05 -4720 -4.05162E-05 -4722 -2.18182E-05 -4724 1.13599E-05 -4726 -4.26783E-05 -4728 4.49779E-05 -4730 5.46657E-05 -4732 6.31277E-05 -4734 9.201E-05 -4736 -2.84995E-05 -4738 -1.96E-06 -4740 4.16116E-05 -4742 2.40E-06 -4744 0.000106433 -4746 7.86067E-05 -4748 -2.31924E-05 -4750 0.000110697 -4752 -0.000105205 -4754 -4.20045E-05 -4756 5.92E-06 -4758 -4.33579E-05 -4760 -0.00010886 -4762 -7.24948E-05 -4764 3.96924E-05 -4766 -0.000191847 -4768 -0.000117285 -4770 -6.34291E-05 -4772 2.12932E-05 -4774 -3.24E-06 -4776 1.09424E-05 -4778 -8.83467E-05 -4780 3.50E-06 -4782 -0.000107665 -4784 -4.71369E-05 -4786 -0.000105939 -4788 -1.78558E-05 -4790 -6.54974E-05 -4792 -6.69849E-05 -4794 -0.000104735 -4796 6.49E-06 -4798 -0.000146163 -4800 8.23E-06 -4802 -3.12394E-05 -4804 -0.000185322 -4806 -8.58323E-05 -4808 -0.000100005 -4810 -0.00011669 -4812 -0.000133039 -4814 -7.84302E-05 -4816 -9.72117E-05 -4818 -7.66769E-05 -4820 -9.0187E-05 -4822 -0.000155309 -4824 2.07393E-05 -4826 5.72E-06 -4828 -4.57609E-05 -4830 -0.000194768 -4832 -0.000133392 -4834 -0.000165423 -4836 -0.000152181 -4838 -0.00017315 -4840 -6.8367E-05 -4842 -0.000168049 -4844 -9.85448E-05 -4846 -1.83435E-05 -4848 -4.66214E-05 -4850 -6.72124E-05 -4852 -8.60337E-05 -4854 -0.000139507 -4856 -7.10E-06 -4858 -9.54554E-05 -4860 -7.87667E-05 -4862 -0.000169032 -4864 4.42985E-05 -4866 -5.87E-06 -4868 -5.49307E-05 -4870 -9.6575E-05 -4872 -0.000134905 -4874 -9.29933E-05 -4876 -8.09305E-05 -4878 -0.000291688 -4880 -9.6625E-05 -4882 -0.000130894 -4884 -0.000118673 -4886 -0.00013703 -4888 -0.000117201 -4890 -2.7273E-05 -4892 -0.000149352 -4894 -6.61949E-05 -4896 -0.000129105 -4898 -0.000158602 -4900 -8.34552E-05 -4902 -0.000109603 -4904 -0.00014692 -4906 -0.000183268 -4908 -9.97988E-05 -4910 -0.000229024 -4912 -1.11176E-05 -4914 -0.000155447 -4916 -8.83261E-05 -4918 -7.58636E-05 -4920 -0.000157625 -4922 -0.000196801 -4924 -8.35149E-05 -4926 -9.21691E-05 -4928 -3.23171E-05 -4930 -0.000193988 -4932 -9.61135E-05 -4934 -0.000101847 -4936 -6.05769E-05 -4938 -0.000123916 -4940 -0.000132141 -4942 -0.00013735 -4944 -0.000136462 -4946 -0.000101766 -4948 -0.000154092 -4950 -0.000214223 -4952 -0.000117774 -4954 -7.17024E-05 -4956 -0.000183699 -4958 -0.00017453 -4960 -0.000249751 -4962 -0.000132127 -4964 5.13399E-05 -4966 -4.20862E-05 -4968 -2.52E-06 -4970 -0.000180519 -4972 -9.29657E-05 -4974 -0.000190246 -4976 -0.000125231 -4978 3.1279E-05 -4980 -0.000248043 -4982 -0.000134352 -4984 -2.83712E-05 -4986 -0.000106364 -4988 -0.000176678 -4990 -4.92341E-05 -4992 -5.76105E-05 -4994 -0.000122315 -4996 -0.000196789 -4998 -5.34783E-05 -5000 -6.5335E-05 -5002 -0.000226349 -5004 -0.000101908 -5006 -6.35036E-05 -5008 -0.000183858 -5010 -1.66743E-05 -5012 -0.000130706 -5014 4.27E-06 -5016 -3.28712E-05 -5018 -0.000182452 -5020 -6.57517E-05 -5022 -6.14048E-05 -5024 -5.15595E-05 -5026 -5.28437E-05 -5028 -0.000128204 -5030 -8.17912E-05 -5032 -5.30334E-05 -5034 4.59457E-05 -5036 -5.073E-05 -5038 -1.4378E-05 -5040 -0.000191915 -5042 -7.42078E-05 -5044 -0.000115069 -5046 -0.000147359 -5048 -5.59493E-05 -5050 -0.000110795 -5052 2.13693E-05 -5054 -3.90667E-05 -5056 -4.18254E-05 -5058 -0.000221218 -5060 -0.000171646 -5062 -4.28584E-05 -5064 -0.000103295 -5066 6.28557E-05 -5068 -6.38849E-05 -5070 -7.2519E-05 -5072 -4.04725E-05 -5074 -0.000162146 -5076 -6.50715E-05 -5078 -4.47088E-05 -5080 -8.4281E-05 -5082 -8.43487E-05 -5084 -0.000186466 -5086 -0.000247114 -5088 -3.90E-07 -5090 -0.000131357 -5092 -0.000165973 -5094 3.69467E-05 -5096 -1.92271E-05 -5098 -3.22E-06 -5100 -2.12904E-05 -5102 -6.97464E-05 -5104 -0.000102491 -5106 -0.000121148 -5108 -3.97039E-05 -5110 -5.85939E-05 -5112 -0.000273178 -5114 -5.84787E-05 -5116 5.61396E-05 -5118 -5.16509E-05 -5120 -0.00018082 -5122 -5.49575E-05 -5124 -0.000178501 -5126 -0.000111293 -5128 -0.000142361 -5130 3.78E-06 -5132 -5.02351E-05 -5134 9.15343E-05 -5136 -4.70089E-05 -5138 -0.00010954 -5140 1.13571E-05 -5142 4.82898E-05 -5144 3.77874E-05 -5146 -5.93503E-05 -5148 -0.000164972 -5150 -8.57053E-05 -5152 -0.000197877 -5154 -1.85536E-05 -5156 -0.000278435 -5158 -5.9856E-05 -5160 -5.08827E-05 -5162 0.000122482 -5164 5.08896E-05 -5166 5.83805E-05 -5168 -0.00012685 -5170 0.000164092 -5172 -0.000114154 -5174 4.62051E-05 -5176 5.11492E-05 -5178 -4.62975E-05 -5180 0.000174738 -5182 -0.000105599 -5184 -2.24336E-05 -5186 6.56395E-05 -5188 -5.17781E-05 -5190 7.28549E-05 -5192 -6.157E-05 -5194 2.61121E-05 -5196 0.000121307 -5198 3.9461E-05 -5200 6.95204E-05 -5202 -0.000152101 -5204 -1.45664E-05 -5206 -2.81734E-05 -5208 3.3733E-05 -5210 -0.000191675 -5212 -0.000238876 -5214 5.27E-06 -5216 -5.55352E-05 -5218 -0.000242827 -5220 3.41334E-05 -5222 -0.000214394 -5224 1.97708E-05 -5226 8.8285E-05 -5228 0.000103699 -5230 -6.78999E-05 -5232 -6.29237E-05 -5234 5.72257E-05 -5236 -1.89721E-05 -5238 -0.000113873 -5240 -4.68908E-05 -5242 -3.77538E-05 -5244 0.000139638 -5246 -4.43735E-05 -5248 -0.000102626 -5250 -2.08864E-05 -5252 7.16191E-05 -5254 -0.000179139 -5256 -0.000204764 -5258 5.62019E-05 -5260 6.92956E-05 -5262 -0.00011329 -5264 -2.34642E-05 -5266 4.14054E-05 -5268 1.74697E-05 -5270 -0.000238236 -5272 -9.28767E-05 -5274 -7.16975E-05 -5276 -0.000127366 -5278 -0.000230925 -5280 -2.65856E-05 -5282 -6.2476E-05 -5284 -7.327E-05 -5286 1.91461E-05 -5288 -7.2295E-05 -5290 -0.000147312 -5292 -7.62531E-05 -5294 -0.000144729 -5296 -0.000126474 -5298 -2.27904E-05 -5300 -0.000112916 -5302 -8.64288E-05 -5304 5.86161E-05 -5306 -0.000139173 -5308 9.46683E-05 -5310 -0.000149661 -5312 -0.000271663 -5314 1.51686E-05 -5316 -5.13603E-05 -5318 4.16107E-05 -5320 -0.00018097 -5322 -0.000168231 -5324 -8.75568E-05 -5326 1.26443E-05 -5328 -2.70E-06 -5330 -0.000102704 -5332 -3.18529E-05 -5334 -0.000107168 -5336 -3.44404E-05 -5338 5.39579E-05 -5340 -9.77379E-05 -5342 0.000125462 -5344 4.98398E-05 -5346 -0.000146261 -5348 -0.000171159 -5350 -1.69326E-05 -5352 0.000177523 -5354 -7.21671E-05 -5356 -0.000260525 -5358 -0.000169717 -5360 -0.000120504 -5362 -0.000136292 -5364 -8.95291E-05 -5366 -0.000137501 -5368 2.8667E-05 -5370 -8.19487E-05 -5372 -0.000148664 -5374 -2.76867E-05 -5376 -7.21953E-05 -5378 -9.64493E-05 -5380 -0.000148179 -5382 -5.98436E-05 -5384 -0.000124761 -5386 -0.000202081 -5388 -0.000166304 -5390 -0.000210005 -5392 -0.00010521 -5394 -7.30E-07 -5396 0.000138772 -5398 -6.01E-06 -5400 -0.000188874 -5402 -5.08203E-05 -5404 -0.000270553 -5406 -0.000140069 -5408 -0.000148844 -5410 9.32963E-05 -5412 -0.000131394 -5414 -0.00011106 -5416 -9.04442E-05 -5418 -0.000154567 -5420 -8.9573E-05 -5422 -0.000150372 -5424 -5.82735E-05 -5426 -0.000166476 -5428 -1.28661E-05 -5430 6.85E-06 -5432 -7.06364E-05 -5434 -0.000111032 -5436 -0.000211053 -5438 -8.24E-06 -5440 -7.89619E-05 -5442 1.04035E-05 -5444 0.000147427 -5446 -9.76797E-05 -5448 -0.000136429 -5450 -0.000211055 -5452 -0.000161586 -5454 -5.84473E-05 -5456 -5.15973E-05 -5458 -2.10924E-05 -5460 4.70888E-05 -5462 -0.000356925 -5464 -0.000285499 -5466 -9.7915E-05 -5468 -7.49916E-05 -5470 -7.99851E-05 -5472 -0.000156726 -5474 7.08954E-05 -5476 -0.000235041 -5478 4.11383E-05 -5480 -8.73586E-05 -5482 -0.000263069 -5484 -0.000131456 -5486 -0.000217176 -5488 -0.000123259 -5490 -0.000162573 -5492 8.80588E-05 -5494 -5.13835E-05 -5496 -0.000177107 -5498 -1.08686E-05 -5500 -0.00013401 -5502 -2.17232E-05 -5504 -0.000204563 -5506 -0.000130573 -5508 -0.000138882 -5510 -4.71656E-05 -5512 -0.000226241 -5514 -0.000158162 -5516 -0.00016349 -5518 -0.00022113 -5520 -1.90E-06 -5522 -8.43313E-05 -5524 -0.000294269 -5526 -8.10355E-05 -5528 -0.0001755 -5530 -0.000149491 -5532 -0.000185625 -5534 -0.000181539 -5536 -0.000227489 -5538 -0.000142212 -5540 -6.22151E-05 -5542 -4.10673E-05 -5544 -0.000129738 -5546 -0.000165541 -5548 -0.000120703 -5550 -0.000250116 -5552 -0.000189888 -5554 -9.45214E-05 -5556 -0.000206709 -5558 -0.000114229 -5560 -2.74E-06 -5562 -0.000174771 -5564 -0.000215381 -5566 -0.000435337 -5568 -7.92925E-05 -5570 -0.000264598 -5572 -5.21323E-05 -5574 -0.000184079 -5576 -0.000195211 -5578 6.14E-06 -5580 -1.34219E-05 -5582 -0.000142205 -5584 -0.000201266 -5586 -0.000136273 -5588 -4.36936E-05 -5590 -0.000177113 -5592 -0.000192107 -5594 -0.000285436 -5596 -0.000206806 -5598 -0.000143489 -5600 -0.000197125 -5602 -0.000227679 -5604 -0.000228332 -5606 -6.73004E-05 -5608 -0.00010937 -5610 -0.000349687 -5612 -0.000177179 -5614 -0.00025193 -5616 -5.64675E-05 -5618 -0.000170188 -5620 -0.000230005 -5622 -0.00040001 -5624 -3.67655E-05 -5626 -7.16761E-05 -5628 -0.000397345 -5630 -4.36E-07 -5632 -4.1559E-05 -5634 -0.000190926 -5636 -0.000371965 -5638 -0.00024466 -5640 2.96284E-05 -5642 -3.24397E-05 -5644 -0.000369574 -5646 -9.12484E-05 -5648 -0.000200854 -5650 -0.0002112 -5652 -0.00010615 -5654 -0.0002109 -5656 -0.000131312 -5658 -7.34227E-05 -5660 -0.000125623 -5662 -0.000222683 -5664 -3.11127E-05 -5666 -0.000142646 -5668 -9.98779E-05 -5670 -2.86769E-05 -5672 -0.000218787 -5674 -7.01801E-05 -5676 -0.000370383 -5678 1.93936E-05 -5680 -0.000236552 -5682 -0.000114162 -5684 -1.40634E-05 -5686 -9.94189E-05 -5688 5.44862E-05 -5690 -9.22632E-05 -5692 -0.000235726 -5694 -0.000286721 -5696 -9.80563E-05 -5698 -0.000186885 -5700 -8.91076E-05 -5702 -0.000116416 -5704 -0.00014795 -5706 2.03924E-05 -5708 -9.58288E-05 -5710 -6.8708E-05 -5712 -0.000150654 -5714 -3.29562E-05 -5716 -0.000217313 -5718 1.36356E-05 -5720 -4.4006E-05 -5722 -0.000146933 -5724 -3.21571E-05 -5726 -0.000122156 -5728 -0.000269322 -5730 -0.000197751 -5732 -0.000130912 -5734 -0.000154111 -5736 -9.53856E-05 -5738 -0.000240261 -5740 -0.000161401 -5742 6.45E-06 -5744 -0.000184411 -5746 -0.000245277 -5748 -0.000212489 -5750 -4.43252E-05 -5752 -0.000107688 -5754 1.07502E-05 -5756 -0.000167197 -5758 -6.68704E-05 -5760 -4.80992E-05 -5762 -5.66434E-05 -5764 -0.000228705 -5766 -0.000265847 -5768 -9.75073E-05 -5770 -0.000122477 -5772 -0.00013384 -5774 -0.00030111 -5776 -6.26301E-05 -5778 3.12553E-05 -5780 -5.04101E-05 -5782 -0.000160911 -5784 -3.53197E-05 -5786 -0.000214252 -5788 2.99878E-05 -5790 -0.000147791 -5792 -4.13023E-05 -5794 -6.57403E-05 -5796 -0.000122902 -5798 2.21647E-05 -5800 -6.32159E-05 -5802 -6.96488E-05 -5804 -0.000176959 -5806 -0.000104603 -5808 -2.97849E-05 -5810 -2.13517E-05 -5812 -0.000310097 -5814 -0.000234544 -5816 -0.000306688 -5818 -0.000134224 -5820 -4.62987E-05 -5822 -8.32075E-05 -5824 -0.000124491 -5826 -0.000227533 -5828 7.63E-06 -5830 -0.000100538 -5832 -0.000209111 -5834 -6.65844E-05 -5836 -0.000147125 -5838 -0.000133334 -5840 -8.70E-06 -5842 -2.23727E-05 -5844 -0.000315383 -5846 -0.000185853 -5848 0.000154914 -5850 -0.000121906 -5852 -6.5162E-05 -5854 -0.000181952 -5856 -4.16013E-05 -5858 -3.0724E-05 -5860 3.03096E-05 -5862 6.01019E-05 -5864 -0.000205749 -5866 -7.91329E-05 -5868 -3.1756E-05 -5870 -0.000153925 -5872 -4.92637E-05 -5874 8.94E-06 -5876 0.000167884 -5878 2.81044E-05 -5880 -0.000172485 -5882 3.85173E-05 -5884 -0.000199897 -5886 5.97079E-05 -5888 1.12013E-05 -5890 -0.000182001 -5892 -0.000170865 -5894 2.87266E-05 -5896 0.000188198 -5898 0.000162068 -5900 6.77282E-05 -5902 -0.000100557 -5904 0.000172774 -5906 5.45068E-05 -5908 6.71451E-05 -5910 1.42267E-05 -5912 0.000159991 -5914 0.000176915 -5916 0.000201461 -5918 7.24557E-05 -5920 -0.000214255 -5922 0.000185476 -5924 5.55465E-05 -5926 5.85444E-05 -5928 2.38107E-05 -5930 0.000209259 -5932 2.68625E-05 -5934 6.93668E-05 -5936 -0.00010269 -5938 0.000204459 -5940 4.3037E-05 -5942 0.000134317 -5944 0.00011353 -5946 -1.1138E-05 -5948 -0.00021765 -5950 0.000113405 -5952 -6.84037E-05 -5954 -6.10258E-05 -5956 0.000128848 -5958 6.24606E-05 -5960 -1.7243E-05 -5962 -9.28901E-05 -5964 -0.000124651 -5966 -0.000180665 -5968 0.000142526 -5970 -0.000128998 -5972 0.000184577 -5974 -3.74491E-05 -5976 -0.00013039 -5978 2.31888E-05 -5980 0.000132512 -5982 -0.000132757 -5984 -0.000164463 -5986 8.58551E-05 -5988 -0.000140773 -5990 -4.35385E-05 -5992 7.0978E-05 -5994 -6.24E-06 -5996 0.000148403 -5998 0.000188021 -6000 2.66254E-05 -6002 8.84368E-05 -6004 3.65224E-05 -6006 5.78793E-05 -6008 3.50034E-05 -6010 5.62399E-05 -6012 -5.14362E-05 -6014 0.00034933 -6016 0.000168918 -6018 5.34508E-05 -6020 0.000122075 -6022 -4.05053E-05 -6024 8.9883E-05 -6026 0.000161734 -6028 -7.37436E-05 -6030 -4.95E-06 -6032 0.00022485 -6034 -0.000253566 -6036 0.000122794 -6038 -2.70286E-05 -6040 7.11802E-05 -6042 0.000129984 -6044 1.57E-06 -6046 -0.000117867 -6048 -2.15324E-05 -6050 -1.38764E-05 -6052 6.69437E-05 -6054 -0.000117569 -6056 1.94807E-05 -6058 -1.96687E-05 -6060 -0.000147066 -6062 5.52879E-05 -6064 -3.51488E-05 -6066 1.65759E-05 -6068 0.000194312 -6070 -9.75251E-05 -6072 -0.000286519 -6074 -0.000133893 -6076 -0.000144305 -6078 -0.000206774 -6080 9.70323E-05 -6082 0.000105616 -6084 7.76744E-05 -6086 -1.85213E-05 -6088 2.1601E-05 -6090 2.86444E-05 -6092 -7.78625E-05 -6094 -0.000103451 -6096 5.06513E-05 -6098 -0.000126614 -6100 -0.000291543 -6102 -3.20512E-05 -6104 -0.00034077 -6106 4.78E-06 -6108 -0.00021435 -6110 -3.06885E-05 -6112 -0.00013895 -6114 -6.48402E-05 -6116 -7.10551E-05 -6118 -0.000288181 -6120 -6.09779E-05 -6122 -0.000224615 -6124 -8.03908E-05 -6126 -7.04685E-05 -6128 7.00613E-05 -6130 -0.000187151 -6132 -0.00015411 -6134 -0.000142311 -6136 0.000311664 -6138 0.000185075 -6140 0.000302768 -6142 -0.000104647 -6144 0.000119734 -6146 -4.93308E-05 -6148 1.16225E-05 -6150 -0.000114402 -6152 -0.00021231 -6154 7.1843E-05 -6156 -5.21411E-05 -6158 -8.98771E-05 -6160 0.000148557 -6162 -5.44653E-05 -6164 -0.00012796 -6166 9.70156E-05 -6168 -0.000101064 -6170 -0.00013553 -6172 9.9476E-05 -6174 1.62078E-05 -6176 -4.40928E-05 -6178 0.000102579 -6180 1.77941E-05 -6182 -0.000149253 -6184 -8.96427E-05 -6186 -0.000108399 -6188 6.41861E-05 -6190 0.000121833 -6192 -2.42281E-05 -6194 -0.000112157 -6196 -2.51081E-05 -6198 -3.95046E-05 -6200 0.000178628 -6202 -0.000148793 -6204 -9.57E-06 -6206 -7.90421E-05 -6208 -8.07858E-05 -6210 -4.14175E-05 -6212 -7.21446E-05 -6214 0.000149076 -6216 3.91353E-05 -6218 -0.000114591 -6220 -9.9288E-05 -6222 -0.000113439 -6224 -2.5277E-05 -6226 -8.29E-07 -6228 8.26896E-05 -6230 -6.24E-06 -6232 0.000107177 -6234 -3.60E-06 -6236 0.000162593 -6238 -5.28839E-05 -6240 -0.000174024 -6242 -0.000101802 -6244 1.47698E-05 -6246 4.79099E-05 -6248 -8.95552E-05 -6250 0.000146406 -6252 0.000106973 -6254 7.08576E-05 -6256 -5.01693E-05 -6258 5.31355E-05 -6260 -0.000233967 -6262 4.08849E-05 -6264 -7.93998E-05 -6266 0.00014663 -6268 -4.49E-07 -6270 0.000121188 -6272 -4.01289E-05 -6274 9.46038E-05 -6276 4.40081E-05 -6278 8.76714E-05 -6280 -0.000191742 -6282 -0.000105518 -6284 -4.94007E-05 -6286 -4.65298E-05 -6288 1.22E-07 -6290 0.000159264 -6292 3.10034E-05 -6294 6.24514E-05 -6296 -2.04794E-05 -6298 -0.000228969 -6300 7.75386E-05 -6302 -8.37533E-05 -6304 -4.76962E-05 -6306 0.000134281 -6308 -9.41E-06 -6310 -0.000141126 -6312 -0.000133436 -6314 9.32692E-05 -6316 0.000130775 -6318 0.000198152 -6320 -5.79899E-05 -6322 -4.41423E-05 -6324 0.000143831 -6326 0.000107897 -6328 1.79488E-05 -6330 -0.000148111 -6332 0.000107348 -6334 -2.49393E-05 -6336 -0.000148447 -6338 0.000163246 -6340 2.64628E-05 -6342 6.50765E-05 -6344 -5.74688E-05 -6346 9.16788E-05 -6348 0.000115457 -6350 2.51624E-05 -6352 -6.82336E-05 -6354 0.000175589 -6356 -2.47157E-05 -6358 0.000300847 -6360 4.29191E-05 -6362 -0.000102159 -6364 -0.000150186 -6366 -0.000137124 -6368 -3.6448E-05 -6370 6.31217E-05 -6372 -2.17468E-05 -6374 0.00020514 -6376 -0.000288874 -6378 -0.000196896 -6380 5.33731E-05 -6382 -0.00018922 -6384 5.94367E-05 -6386 0.00018609 -6388 -0.000231268 -6390 0.000188414 -6392 8.58249E-05 -6394 0.000322554 -6396 -8.18526E-05 -6398 6.46391E-05 -6400 -3.654E-05 -6402 -5.43539E-05 -6404 0.00011808 -6406 -0.000111429 -6408 3.37446E-05 -6410 0.000103862 -6412 -2.73016E-05 -6414 0.000148599 -6416 -0.000175049 -6418 -7.87E-06 -6420 -1.44832E-05 -6422 -8.69714E-05 -6424 7.46194E-05 -6426 -8.40362E-05 -6428 0.000255133 -6430 -7.29877E-05 -6432 0.000251098 -6434 -6.47746E-05 -6436 -0.000116293 -6438 0.000176731 -6440 -8.31E-06 -6442 -0.000133431 -6444 -0.000148146 -6446 1.85739E-05 -6448 -7.49236E-05 -6450 7.86825E-05 -6452 0.000150351 -6454 8.30916E-05 -6456 -2.89466E-05 -6458 2.75E-07 -6460 -7.6078E-05 -6462 0.000127013 -6464 0.000125654 -6466 -9.06547E-05 -6468 -0.000245214 -6470 -9.9701E-05 -6472 -7.93695E-05 -6474 -0.000114213 -6476 0.000128301 -6478 -7.09795E-05 -6480 0.00014139 -6482 6.9353E-05 -6484 0.000113504 -6486 -0.000222003 -6488 0.00011384 -6490 5.82324E-05 -6492 -4.78533E-05 -6494 -0.000172427 -6496 3.94829E-05 -6498 -0.000207402 -6500 -0.000158524 -6502 7.13359E-05 -6504 -0.00015144 -6506 -0.000166462 -6508 -1.63887E-05 -6510 8.49982E-05 -6512 -0.000133497 -6514 -2.65249E-05 -6516 -0.000187609 -6518 -1.77176E-05 -6520 -0.000139934 -6522 1.97547E-05 -6524 -0.000213204 -6526 -2.25511E-05 -6528 -5.93047E-05 -6530 -0.000104047 -6532 -0.000306345 -6534 -3.98042E-05 -6536 -7.78457E-05 -6538 -7.13E-06 -6540 -0.000280079 -6542 0.000154768 -6544 9.83578E-05 -6546 0.000181306 -6548 -0.000133643 -6550 0.000105885 -6552 -0.000157576 -6554 -9.20987E-05 -6556 -5.51079E-05 -6558 -3.02747E-05 -6560 -7.17904E-05 -6562 -0.000280564 -6564 -6.67912E-05 -6566 0.000184375 -6568 -8.73372E-05 -6570 -0.000100174 -6572 -2.82062E-05 -6574 -8.84695E-05 -6576 0.000144169 -6578 -0.000240943 -6580 -0.000139581 -6582 0.000120571 -6584 0.000138317 -6586 -0.00022769 -6588 -0.000275816 -6590 0.00010466 -6592 7.78823E-05 -6594 -5.28282E-05 -6596 -2.40E-06 -6598 0.000117892 -6600 -4.19631E-05 -6602 -0.000315964 -6604 -0.000410462 -6606 -0.000120959 -6608 9.99E-06 -6610 4.37964E-05 -6612 -3.31902E-05 -6614 -8.51607E-05 -6616 -0.000154694 -6618 -9.29603E-05 -6620 5.289E-05 -6622 -0.000125816 -6624 -0.000314679 -6626 -0.00016154 -6628 -0.000141162 -6630 -0.000119437 -6632 -0.0001569 -6634 -0.000166503 -6636 0.000112686 -6638 1.99608E-05 -6640 4.35539E-05 -6642 -0.000166097 -6644 -4.87333E-05 -6646 -0.000336465 -6648 -0.00029665 -6650 -0.000145957 -6652 7.43624E-05 -6654 -0.000223543 -6656 0.000141507 -6658 0.000143548 -6660 -0.000207983 -6662 -3.80663E-05 -6664 -0.000115808 -6666 -0.000371392 -6668 -0.000146251 -6670 -0.000330336 -6672 -0.000268665 -6674 -8.44355E-05 -6676 -1.45736E-05 -6678 -0.000355467 -6680 -0.000112196 -6682 2.59378E-05 -6684 -5.07584E-05 -6686 -2.74706E-05 -6688 -0.000184275 -6690 -8.74E-06 -6692 -2.95378E-05 -6694 2.54E-06 -6696 -0.000101312 -6698 -0.000211174 -6700 -0.000164924 -6702 -0.000398584 -6704 -0.000146533 -6706 -0.000348778 -6708 -0.000143255 -6710 0.000147283 -6712 -9.8179E-05 -6714 9.34795E-05 -6716 -0.000150882 -6718 -0.000297166 -6720 1.32743E-05 -6722 -0.000120746 -6724 -8.11384E-05 -6726 -0.000325532 -6728 -0.000194586 -6730 -0.00012466 -6732 -4.78812E-05 -6734 -9.19999E-05 -6736 -0.000107843 -6738 -6.23358E-05 -6740 -0.000286347 -6742 -3.71682E-05 -6744 -4.80E-06 -6746 -0.000319234 -6748 -0.000279883 -6750 -0.000272827 -6752 -0.000101761 -6754 -0.000146361 -6756 -0.000266156 -6758 0.000102535 -6760 -0.000386606 -6762 -0.00018995 -6764 -0.000215715 -6766 -0.00023779 -6768 -0.000211241 -6770 -0.000283036 -6772 -0.000106436 -6774 -0.000187373 -6776 -0.000190231 -6778 -1.71093E-05 -6780 -0.000351549 -6782 -0.000167132 -6784 6.03858E-05 -6786 -0.000311376 -6788 -0.000142106 -6790 -1.62293E-05 -6792 -0.000231522 -6794 -8.28732E-05 -6796 -0.000337511 -6798 -0.000203157 -6800 -3.72712E-05 -6802 -0.000234517 -6804 -1.30E-06 -6806 -8.99819E-05 -6808 -3.03547E-05 -6810 -7.82862E-05 -6812 -0.000275055 -6814 8.78416E-05 -6816 -0.000124671 -6818 -0.000332395 -6820 -0.000120407 -6822 -0.000196254 -6824 -0.000143466 -6826 -0.00023199 -6828 -2.32556E-05 -6830 -0.000506958 -6832 1.30E-06 -6834 -0.000349053 -6836 -0.000105324 -6838 -0.000365336 -6840 -0.000376516 -6842 -0.000268123 -6844 -0.000216535 -6846 -0.000149111 -6848 -0.000224848 -6850 -0.000219525 -6852 3.8059E-05 -6854 -0.000306124 -6856 -0.000480935 -6858 -7.56657E-05 -6860 -0.000234094 -6862 -8.62146E-05 -6864 -4.34679E-05 -6866 -6.9076E-05 -6868 -0.000343807 -6870 -2.52463E-05 -6872 0.00013412 -6874 -0.000136273 -6876 -6.21612E-05 -6878 -0.000382671 -6880 -3.57982E-05 -6882 -0.000173088 -6884 9.16434E-05 -6886 -0.000290802 -6888 -0.00033873 -6890 -0.000100816 -6892 -0.000332355 -6894 -2.15443E-05 -6896 -0.000139886 -6898 -0.000147969 -6900 -0.000250801 -6902 -0.000287541 -6904 3.96189E-05 -6906 -0.00043964 -6908 -0.000144297 -6910 -0.000259311 -6912 -0.000307546 -6914 -0.000207326 -6916 -0.000311028 -6918 1.09E-06 -6920 -0.000316103 -6922 -0.000116125 -6924 -0.0004364 -6926 -0.00019726 -6928 2.21665E-05 -6930 -0.000196139 -6932 -0.000150559 -6934 -0.00021327 -6936 -0.000242659 -6938 -0.000324069 -6940 -0.000156015 -6942 -0.000114122 -6944 -0.000116531 -6946 -0.0002098 -6948 -0.000403686 -6950 -0.000428051 -6952 -0.000205227 -6954 -0.000263236 -6956 -7.86915E-05 -6958 -0.000295775 -6960 -0.000232486 -6962 -0.000143043 -6964 -0.000239739 -6966 -0.000219405 -6968 -0.000354447 -6970 9.11346E-05 -6972 -0.00030139 -6974 -0.00035907 -6976 -0.000467083 -6978 -2.82218E-05 -6980 -7.5117E-05 -6982 -0.000384305 -6984 -0.000260206 -6986 -0.000183068 -6988 -0.000267272 -6990 -0.000436363 -6992 0.000209017 -6994 0.000133107 -6996 -0.000135045 -6998 -0.00045575 +600 0.0241342 +602 0.027446631 +604 0.02823961 +606 0.029234628 +608 0.025898145 +610 0.027709774 +612 0.025719063 +614 0.024429068 +616 0.02854507 +618 0.028690732 +620 0.027360949 +622 0.026091157 +624 0.028641792 +626 0.025692568 +628 0.027570268 +630 0.026608215 +632 0.025158608 +634 0.027824888 +636 0.027869757 +638 0.028231098 +640 0.027216732 +642 0.027256791 +644 0.026774291 +646 0.025499332 +648 0.026889976 +650 0.030071764 +652 0.028157525 +654 0.027086256 +656 0.023530438 +658 0.026059433 +660 0.024346599 +662 0.028048226 +664 0.026330259 +666 0.026601859 +668 0.026131422 +670 0.024728621 +672 0.02338841 +674 0.025137265 +676 0.024573728 +678 0.02555457 +680 0.026601251 +682 0.02396367 +684 0.023990388 +686 0.022609513 +688 0.02293027 +690 0.023659684 +692 0.023029444 +694 0.02354769 +696 0.022885431 +698 0.020916068 +700 0.017366832 +702 0.020254317 +704 0.02021588 +706 0.019612931 +708 0.020605736 +710 0.019409 +712 0.020098812 +714 0.017859943 +716 0.017200361 +718 0.017415851 +720 0.016738256 +722 0.017480257 +724 0.016505558 +726 0.017110302 +728 0.017027064 +730 0.016024705 +732 0.017486817 +734 0.01747258 +736 0.018679356 +738 0.0198481 +740 0.021190117 +742 0.023716217 +744 0.03056829 +746 0.038271622 +748 0.04379452 +750 0.044251529 +752 0.0407681 +754 0.034103515 +756 0.029061414 +758 0.02617678 +760 0.022539928 +762 0.021165925 +764 0.019846463 +766 0.018521271 +768 0.018036484 +770 0.017126223 +772 0.016586444 +774 0.016483205 +776 0.01531947 +778 0.014237011 +780 0.013740482 +782 0.012463683 +784 0.012601353 +786 0.012687382 +788 0.011956341 +790 0.012597304 +792 0.01301531 +794 0.013443559 +796 0.014187849 +798 0.014467894 +800 0.015065439 +802 0.014878516 +804 0.015873769 +806 0.016515435 +808 0.016709374 +810 0.017771403 +812 0.016772822 +814 0.015531226 +816 0.014555445 +818 0.013874898 +820 0.015212008 +822 0.016378744 +824 0.017775592 +826 0.01866164 +828 0.018518393 +830 0.016763911 +832 0.015599009 +834 0.017242919 +836 0.020302394 +838 0.023933252 +840 0.026400268 +842 0.02629389 +844 0.024144284 +846 0.022565086 +848 0.020193958 +850 0.018896857 +852 0.01763933 +854 0.016642232 +856 0.015634651 +858 0.014645714 +860 0.014138096 +862 0.014067378 +864 0.013168089 +866 0.012439437 +868 0.011586666 +870 0.011339401 +872 0.010914962 +874 0.011187976 +876 0.01107262 +878 0.010671149 +880 0.010509334 +882 0.010691428 +884 0.010463665 +886 0.010732772 +888 0.01113261 +890 0.011327793 +892 0.011556208 +894 0.011574848 +896 0.012311955 +898 0.012752431 +900 0.013542695 +902 0.014021246 +904 0.01526174 +906 0.016386114 +908 0.017710929 +910 0.01815038 +912 0.018485943 +914 0.017942962 +916 0.017253983 +918 0.01673434 +920 0.01576578 +922 0.014969642 +924 0.014914081 +926 0.014775756 +928 0.01494549 +930 0.015163243 +932 0.015246393 +934 0.01532558 +936 0.015787325 +938 0.016231344 +940 0.016554737 +942 0.017506803 +944 0.018319774 +946 0.019145212 +948 0.02028672 +950 0.021535268 +952 0.02275816 +954 0.024219016 +956 0.025883888 +958 0.028191904 +960 0.02973823 +962 0.032138566 +964 0.034003184 +966 0.03499998 +968 0.034104727 +970 0.032129204 +972 0.029984542 +974 0.028583373 +976 0.029296818 +978 0.030947438 +980 0.033218509 +982 0.035106761 +984 0.037063027 +986 0.037990186 +988 0.03843855 +990 0.038237958 +992 0.037541096 +994 0.035408946 +996 0.032268154 +998 0.027709144 +1000 0.022616564 +1002 0.017792654 +1004 0.013769074 +1006 0.010837077 +1008 0.009454576 +1010 0.008332445 +1012 0.008116192 +1014 0.007675599 +1016 0.007566205 +1018 0.007612047 +1020 0.007823547 +1022 0.007966098 +1024 0.00809757 +1026 0.008065411 +1028 0.007845732 +1030 0.008024275 +1032 0.008148742 +1034 0.00829201 +1036 0.008417171 +1038 0.008776959 +1040 0.008930208 +1042 0.009109161 +1044 0.009556965 +1046 0.010041021 +1048 0.010441404 +1050 0.011689312 +1052 0.013463372 +1054 0.016068878 +1056 0.019131748 +1058 0.022191274 +1060 0.024570002 +1062 0.025823144 +1064 0.025672626 +1066 0.024900161 +1068 0.023916478 +1070 0.022915273 +1072 0.021869278 +1074 0.021291225 +1076 0.020732279 +1078 0.020423981 +1080 0.019941966 +1082 0.019763979 +1084 0.020171972 +1086 0.020501795 +1088 0.020890993 +1090 0.020973014 +1092 0.021622654 +1094 0.021985718 +1096 0.022794049 +1098 0.023588335 +1100 0.024728944 +1102 0.025840943 +1104 0.027215918 +1106 0.028776335 +1108 0.030474863 +1110 0.032132728 +1112 0.03432894 +1114 0.03658024 +1116 0.039269767 +1118 0.042412102 +1120 0.04564282 +1122 0.048808874 +1124 0.052149974 +1126 0.056015747 +1128 0.060459226 +1130 0.066082016 +1132 0.073004102 +1134 0.082002822 +1136 0.092694241 +1138 0.105040768 +1140 0.119005198 +1142 0.134765364 +1144 0.151290317 +1146 0.166711247 +1148 0.177289661 +1150 0.177581202 +1152 0.168819305 +1154 0.153355038 +1156 0.137689641 +1158 0.124839415 +1160 0.114845252 +1162 0.107880108 +1164 0.102774174 +1166 0.099425166 +1168 0.097407674 +1170 0.09593259 +1172 0.095228179 +1174 0.094643601 +1176 0.093962003 +1178 0.092950837 +1180 0.092259317 +1182 0.092367257 +1184 0.09505949 +1186 0.10084115 +1188 0.108423217 +1190 0.11487388 +1192 0.117710488 +1194 0.115505139 +1196 0.108980564 +1198 0.099427356 +1200 0.088724245 +1202 0.077275287 +1204 0.065974487 +1206 0.055639191 +1208 0.046756707 +1210 0.040144578 +1212 0.035787746 +1214 0.033682891 +1216 0.033223632 +1218 0.034677454 +1220 0.036745772 +1222 0.038893257 +1224 0.041363039 +1226 0.044436197 +1228 0.048838267 +1230 0.054463569 +1232 0.06102213 +1234 0.068108657 +1236 0.074819063 +1238 0.080199202 +1240 0.083557607 +1242 0.084416767 +1244 0.082399867 +1246 0.078105449 +1248 0.072146041 +1250 0.065513193 +1252 0.059389805 +1254 0.054233076 +1256 0.05069896 +1258 0.048560539 +1260 0.048145702 +1262 0.049521078 +1264 0.051961126 +1266 0.055154907 +1268 0.058810026 +1270 0.062094907 +1272 0.063453855 +1274 0.061370974 +1276 0.056096801 +1278 0.048835689 +1280 0.041617703 +1282 0.035115884 +1284 0.029979602 +1286 0.02577722 +1288 0.022496209 +1290 0.020126584 +1292 0.018027203 +1294 0.016327132 +1296 0.014932173 +1298 0.013739422 +1300 0.01257841 +1302 0.011667794 +1304 0.010851348 +1306 0.010116636 +1308 0.009717891 +1310 0.009400051 +1312 0.009109718 +1314 0.00888188 +1316 0.008728033 +1318 0.008555248 +1320 0.008339087 +1322 0.008263885 +1324 0.008135335 +1326 0.008024262 +1328 0.00807128 +1330 0.008133836 +1332 0.008127452 +1334 0.008138716 +1336 0.008226431 +1338 0.008523101 +1340 0.008850838 +1342 0.008854893 +1344 0.009270106 +1346 0.009499399 +1348 0.010017198 +1350 0.01059085 +1352 0.011038176 +1354 0.011773896 +1356 0.012769294 +1358 0.013638295 +1360 0.014465589 +1362 0.01518012 +1364 0.015838836 +1366 0.015586918 +1368 0.015225006 +1370 0.014610879 +1372 0.014078189 +1374 0.013891646 +1376 0.01474375 +1378 0.016541246 +1380 0.019262753 +1382 0.02160541 +1384 0.022915428 +1386 0.023594535 +1388 0.023160304 +1390 0.021560851 +1392 0.019284629 +1394 0.017224111 +1396 0.015715596 +1398 0.01451186 +1400 0.013747084 +1402 0.012838691 +1404 0.011692484 +1406 0.010730102 +1408 0.009879522 +1410 0.009532642 +1412 0.009405445 +1414 0.009421966 +1416 0.009767846 +1418 0.010469222 +1420 0.012306655 +1422 0.014024908 +1424 0.017706846 +1426 0.022583787 +1428 0.029021083 +1430 0.037190928 +1432 0.044809253 +1434 0.049326808 +1436 0.046321255 +1438 0.046591991 +1440 0.044754161 +1442 0.045191988 +1444 0.047429807 +1446 0.05017989 +1448 0.051372585 +1450 0.051926052 +1452 0.048877221 +1454 0.045080598 +1456 0.038315863 +1458 0.036421716 +1460 0.035921234 +1462 0.033572486 +1464 0.030617138 +1466 0.029223629 +1468 0.028215261 +1470 0.027700175 +1472 0.026917795 +1474 0.029504607 +1476 0.030149502 +1478 0.032100457 +1480 0.033473881 +1482 0.035300299 +1484 0.036565357 +1486 0.036261041 +1488 0.033080071 +1490 0.027177502 +1492 0.022131254 +1494 0.01709778 +1496 0.013099563 +1498 0.010530086 +1500 0.008297551 +1502 0.006882263 +1504 0.005898158 +1506 0.007390398 +1508 0.005394371 +1510 0.00469017 +1512 0.004858713 +1514 0.004664992 +1516 0.005005949 +1518 0.004056874 +1520 0.004193847 +1522 0.003657278 +1524 0.00283663 +1526 0.002752255 +1528 0.002349934 +1530 0.002245644 +1532 0.002485224 +1534 0.002614123 +1536 0.002208785 +1538 0.003534115 +1540 0.00409184 +1542 0.003070369 +1544 0.00262039 +1546 0.002380277 +1548 0.00226781 +1550 0.002599999 +1552 0.002356906 +1554 0.003044914 +1556 0.002653725 +1558 0.006023148 +1560 0.004062994 +1562 0.002457177 +1564 0.002618192 +1566 0.002533502 +1568 0.002721934 +1570 0.002891702 +1572 0.002507352 +1574 0.002683978 +1576 0.003586049 +1578 0.002836659 +1580 0.002886234 +1582 0.002913471 +1584 0.003031189 +1586 0.003179643 +1588 0.003307134 +1590 0.003664506 +1592 0.003805406 +1594 0.004094776 +1596 0.00401814 +1598 0.00397432 +1600 0.004099774 +1602 0.00426046 +1604 0.004405449 +1606 0.004566685 +1608 0.004628619 +1610 0.004477913 +1612 0.004433744 +1614 0.004491011 +1616 0.005192656 +1618 0.004285009 +1620 0.004036026 +1622 0.004059854 +1624 0.004105975 +1626 0.003885176 +1628 0.003981282 +1630 0.003952543 +1632 0.003835627 +1634 0.004359047 +1636 0.004402303 +1638 0.004037436 +1640 0.003885624 +1642 0.004009201 +1644 0.003952529 +1646 0.004816486 +1648 0.004304189 +1650 0.003965589 +1652 0.006019426 +1654 0.004885376 +1656 0.004123694 +1658 0.004174164 +1660 0.004235089 +1662 0.004542281 +1664 0.004486926 +1666 0.004614867 +1668 0.004894575 +1670 0.005436912 +1672 0.005431509 +1674 0.005651576 +1676 0.006442447 +1678 0.006865513 +1680 0.007569476 +1682 0.008151428 +1684 0.009926234 +1686 0.010149147 +1688 0.010811564 +1690 0.011577639 +1692 0.012317587 +1694 0.013020018 +1696 0.014610942 +1698 0.015805372 +1700 0.016720898 +1702 0.02059107 +1704 0.022843417 +1706 0.026263481 +1708 0.031574962 +1710 0.03724565 +1712 0.044695611 +1714 0.051489334 +1716 0.064252636 +1718 0.079812715 +1720 0.111108131 +1722 0.134689923 +1724 0.159768011 +1726 0.178664944 +1728 0.189550156 +1730 0.187519211 +1732 0.184568007 +1734 0.148052948 +1736 0.174327833 +1738 0.157782681 +1740 0.130983773 +1742 0.111415729 +1744 0.081721546 +1746 0.057792152 +1748 0.038151926 +1750 0.026069798 +1752 0.017267407 +1754 0.012278154 +1756 0.009329721 +1758 0.007209351 +1760 0.00592142 +1762 0.005374228 +1764 0.004826348 +1766 0.004458699 +1768 0.004270598 +1770 0.003616544 +1772 0.003541228 +1774 0.002583577 +1776 0.002217011 +1778 0.001893818 +1780 0.001935542 +1782 0.001759374 +1784 0.001804172 +1786 0.001733619 +1788 0.001749405 +1790 0.001883088 +1792 0.001990676 +1794 0.00144261 +1796 0.001341056 +1798 0.001334477 +1800 0.001226004 +1802 0.001154986 +1804 0.000870076 +1806 0.000948184 +1808 0.000819373 +1810 0.000877109 +1812 0.000856967 +1814 0.000711407 +1816 0.000664166 +1818 0.000672376 +1820 0.000554067 +1822 0.000636656 +1824 0.000592955 +1826 0.000628019 +1828 0.000694044 +1830 0.000821293 +1832 0.000514679 +1834 0.000528808 +1836 0.000521469 +1838 0.000459258 +1840 0.000346335 +1842 0.000454894 +1844 0.000686447 +1846 0.000322626 +1848 0.00024672 +1850 0.00021652 +1852 0.000228231 +1854 0.000175338 +1856 0.00010178 +1858 4.80366E-05 +1860 0.000163555 +1862 0.000163557 +1864 3.29655E-05 +1866 0.000122024 +1868 0.000276251 +1870 0.000119215 +1872 1.50667E-05 +1874 -6.10E-07 +1876 -6.29537E-05 +1878 -3.01E-06 +1880 -6.19819E-05 +1882 -2.89042E-05 +1884 -4.73032E-05 +1886 2.07543E-05 +1888 5.82048E-05 +1890 9.61175E-05 +1892 -2.35233E-05 +1894 6.6847E-05 +1896 0.000103985 +1898 5.14422E-05 +1900 9.67797E-05 +1902 0.000135013 +1904 0.000172139 +1906 0.000245935 +1908 0.000218667 +1910 0.000249944 +1912 0.000254151 +1914 0.000274606 +1916 0.000246846 +1918 0.000361489 +1920 0.000280901 +1922 0.000476067 +1924 0.00036462 +1926 0.000395353 +1928 0.000442112 +1930 0.000468113 +1932 0.000455817 +1934 0.000471815 +1936 0.000469251 +1938 0.000476748 +1940 0.00051635 +1942 0.000755845 +1944 0.000598315 +1946 0.000708495 +1948 0.000720105 +1950 0.000663963 +1952 0.000798318 +1954 0.000793038 +1956 0.000829472 +1958 0.000848898 +1960 0.000777441 +1962 0.000809709 +1964 0.000740382 +1966 0.000844927 +1968 0.000846562 +1970 0.000842945 +1972 0.000866656 +1974 0.000750066 +1976 0.000875148 +1978 0.000812096 +1980 0.000791832 +1982 0.000795131 +1984 0.000805046 +1986 0.000780545 +1988 0.000796985 +1990 0.000649182 +1992 0.000745563 +1994 0.000695543 +1996 0.00063712 +1998 0.000601964 +2000 0.000563163 +2002 0.000453067 +2004 0.00044115 +2006 0.000470968 +2008 0.000335742 +2010 0.000382163 +2012 0.000362654 +2014 0.000330121 +2016 0.000389084 +2018 0.000292435 +2020 0.000305525 +2022 0.000329511 +2024 0.00038482 +2026 0.000336523 +2028 0.000404901 +2030 0.000380554 +2032 0.000412551 +2034 0.000374696 +2036 0.000440636 +2038 0.000381711 +2040 0.000517346 +2042 0.00051384 +2044 0.000565282 +2046 0.000565683 +2048 0.000568611 +2050 0.000481456 +2052 0.000617706 +2054 0.000528906 +2056 0.00052708 +2058 0.000555077 +2060 0.00050699 +2062 0.000525236 +2064 0.000487272 +2066 0.000539501 +2068 0.000504029 +2070 0.000447441 +2072 0.000516835 +2074 0.00047662 +2076 0.000495004 +2078 0.000456273 +2080 0.000388805 +2082 0.000385634 +2084 0.000323494 +2086 0.00038231 +2088 0.000394126 +2090 0.000383939 +2092 0.000373967 +2094 0.000377053 +2096 0.00038487 +2098 0.000382643 +2100 0.000328327 +2102 0.000300287 +2104 0.000310617 +2106 0.000316786 +2108 0.000333295 +2110 0.000370022 +2112 0.000374474 +2114 0.000401404 +2116 0.000356568 +2118 0.000405314 +2120 0.000407752 +2122 0.000390354 +2124 0.000442652 +2126 0.000408173 +2128 0.000418827 +2130 0.000441786 +2132 0.000344844 +2134 0.000381584 +2136 0.000341404 +2138 0.000395361 +2140 0.000367725 +2142 0.000336463 +2144 0.000391147 +2146 0.000325835 +2148 0.000385238 +2150 0.000365225 +2152 0.000332808 +2154 0.000289714 +2156 0.000283791 +2158 0.000238881 +2160 0.000322866 +2162 0.000286869 +2164 0.000285061 +2166 0.000257684 +2168 0.000312025 +2170 0.000207802 +2172 0.000257015 +2174 0.000220017 +2176 0.00016785 +2178 0.000255717 +2180 0.000290103 +2182 0.000157789 +2184 0.000325881 +2186 0.000247926 +2188 0.000261432 +2190 0.000291347 +2192 0.000280254 +2194 0.000229609 +2196 0.000271056 +2198 0.000270504 +2200 0.000244769 +2202 0.000314874 +2204 0.000229367 +2206 0.00024547 +2208 0.000334635 +2210 0.000279933 +2212 0.000306569 +2214 0.000225706 +2216 0.000278309 +2218 0.000248559 +2220 0.000348697 +2222 0.000245079 +2224 0.000279928 +2226 0.000255734 +2228 0.000240166 +2230 0.000266871 +2232 0.000303392 +2234 0.000314343 +2236 0.000334341 +2238 0.000374558 +2240 0.000341859 +2242 0.000368978 +2244 0.000431373 +2246 0.000366414 +2248 0.000483577 +2250 0.00045685 +2252 0.000405578 +2254 0.000512095 +2256 0.000481377 +2258 0.000514157 +2260 0.000530324 +2262 0.000568964 +2264 0.000509579 +2266 0.000580748 +2268 0.000682969 +2270 0.000728429 +2272 0.000734436 +2274 0.000792405 +2276 0.000821361 +2278 0.000877556 +2280 0.000862509 +2282 0.000976614 +2284 0.000949856 +2286 0.001073058 +2288 0.001016429 +2290 0.001170663 +2292 0.001220265 +2294 0.001173101 +2296 0.001152461 +2298 0.001179885 +2300 0.001206089 +2302 0.001211066 +2304 0.00121729 +2306 0.001241695 +2308 0.001235318 +2310 0.001195495 +2312 0.001301991 +2314 0.001355443 +2316 0.001254785 +2318 0.001389052 +2320 0.001444937 +2322 0.001558414 +2324 0.001760601 +2326 0.001728333 +2328 0.002103392 +2330 0.002092697 +2332 0.002022837 +2334 0.001938495 +2336 0.0020431 +2338 0.001919468 +2340 0.001964749 +2342 0.002282832 +2344 0.00218892 +2346 0.001801857 +2348 0.001061079 +2350 0.001380168 +2352 0.001870321 +2354 0.002102202 +2356 0.002848422 +2358 0.003216502 +2360 0.003213061 +2362 0.003205797 +2364 0.003022776 +2366 0.002849123 +2368 0.002401033 +2370 0.001848448 +2372 0.001970318 +2374 0.001607119 +2376 0.001408379 +2378 0.001289805 +2380 0.001123742 +2382 0.000998744 +2384 0.001002353 +2386 0.001086115 +2388 0.000939055 +2390 0.000948007 +2392 0.000892462 +2394 0.000979962 +2396 0.000928222 +2398 0.000862539 +2400 0.000864195 +2402 0.000886066 +2404 0.000871955 +2406 0.000811919 +2408 0.000766513 +2410 0.000651421 +2412 0.00073298 +2414 0.000708139 +2416 0.000667666 +2418 0.000600986 +2420 0.000610649 +2422 0.000609326 +2424 0.000516116 +2426 0.000492454 +2428 0.00053116 +2430 0.000488114 +2432 0.000460177 +2434 0.000548829 +2436 0.000464511 +2438 0.000491215 +2440 0.000416051 +2442 0.000427695 +2444 0.000395537 +2446 0.000472624 +2448 0.000432484 +2450 0.00050012 +2452 0.000445504 +2454 0.00047767 +2456 0.000445421 +2458 0.000485085 +2460 0.000498423 +2462 0.000507363 +2464 0.000520304 +2466 0.000539524 +2468 0.000608413 +2470 0.000641548 +2472 0.000638234 +2474 0.00070156 +2476 0.000583209 +2478 0.000691745 +2480 0.00069634 +2482 0.000725514 +2484 0.000664786 +2486 0.000695592 +2488 0.000664905 +2490 0.000711927 +2492 0.000729764 +2494 0.000642008 +2496 0.000666359 +2498 0.000576481 +2500 0.000582793 +2502 0.00060028 +2504 0.000485827 +2506 0.00060824 +2508 0.000551492 +2510 0.000514196 +2512 0.000506979 +2514 0.000475469 +2516 0.000432219 +2518 0.000503847 +2520 0.00046777 +2522 0.000500639 +2524 0.00049432 +2526 0.000561426 +2528 0.000522532 +2530 0.000573555 +2532 0.000597892 +2534 0.000685061 +2536 0.000686714 +2538 0.000669184 +2540 0.000688841 +2542 0.000718256 +2544 0.000663613 +2546 0.000709431 +2548 0.000608731 +2550 0.000729101 +2552 0.000729371 +2554 0.000708222 +2556 0.000702107 +2558 0.000589917 +2560 0.00054794 +2562 0.000549422 +2564 0.000571636 +2566 0.000514345 +2568 0.000549508 +2570 0.000524453 +2572 0.000519339 +2574 0.000493066 +2576 0.000434176 +2578 0.000398249 +2580 0.000438974 +2582 0.000447631 +2584 0.000447255 +2586 0.000326312 +2588 0.000408195 +2590 0.000469383 +2592 0.000485155 +2594 0.000414225 +2596 0.000405927 +2598 0.000367873 +2600 0.000355028 +2602 0.000408022 +2604 0.000409804 +2606 0.000337436 +2608 0.000348352 +2610 0.00035314 +2612 0.000285114 +2614 0.000328725 +2616 0.000270909 +2618 0.000295957 +2620 0.000316483 +2622 0.000322541 +2624 0.000283893 +2626 0.000314178 +2628 0.000268822 +2630 0.000266477 +2632 0.000268892 +2634 0.0002953 +2636 0.000292207 +2638 0.000215858 +2640 0.000294136 +2642 0.000272093 +2644 0.000275717 +2646 0.000346284 +2648 0.000283192 +2650 0.000339755 +2652 0.000255491 +2654 0.000208977 +2656 0.000272149 +2658 0.000282438 +2660 0.000158046 +2662 0.000224042 +2664 0.000228577 +2666 0.00017862 +2668 0.000245571 +2670 0.000196986 +2672 0.000252557 +2674 0.000234491 +2676 0.000203408 +2678 0.00017293 +2680 0.000159348 +2682 0.000234691 +2684 0.000214546 +2686 0.000196188 +2688 0.000157204 +2690 0.000208069 +2692 0.000169639 +2694 0.000218734 +2696 0.000218285 +2698 0.000204734 +2700 0.000201751 +2702 0.000264115 +2704 0.000234648 +2706 0.000212676 +2708 0.000270374 +2710 0.000290756 +2712 0.000240304 +2714 0.000316656 +2716 0.000291376 +2718 0.000294754 +2720 0.000351815 +2722 0.000272567 +2724 0.000249977 +2726 0.00035259 +2728 0.000384766 +2730 0.000393084 +2732 0.000410739 +2734 0.000433305 +2736 0.000404912 +2738 0.000420901 +2740 0.000492476 +2742 0.000399805 +2744 0.000456151 +2746 0.00044387 +2748 0.000409688 +2750 0.000418955 +2752 0.000424004 +2754 0.000451382 +2756 0.000482778 +2758 0.000547175 +2760 0.000552162 +2762 0.000570681 +2764 0.000622641 +2766 0.000691426 +2768 0.000597925 +2770 0.000652725 +2772 0.000584151 +2774 0.000624201 +2776 0.000699342 +2778 0.000638496 +2780 0.000707106 +2782 0.000646861 +2784 0.000709634 +2786 0.000679525 +2788 0.000632315 +2790 0.000696032 +2792 0.000664708 +2794 0.000621352 +2796 0.00073734 +2798 0.000724259 +2800 0.000739695 +2802 0.000776947 +2804 0.000896622 +2806 0.000903473 +2808 0.000879962 +2810 0.000961547 +2812 0.00109481 +2814 0.001158287 +2816 0.001209232 +2818 0.001357019 +2820 0.001408481 +2822 0.001613266 +2824 0.001685368 +2826 0.001927973 +2828 0.002122571 +2830 0.00244482 +2832 0.002763225 +2834 0.003192688 +2836 0.003562301 +2838 0.003995446 +2840 0.004252916 +2842 0.004459092 +2844 0.004622304 +2846 0.004644934 +2848 0.004645169 +2850 0.004785238 +2852 0.004798618 +2854 0.004792012 +2856 0.004820004 +2858 0.004727274 +2860 0.004620571 +2862 0.004699273 +2864 0.004703525 +2866 0.004822295 +2868 0.005009114 +2870 0.005093301 +2872 0.005139671 +2874 0.005266593 +2876 0.005667 +2878 0.005788315 +2880 0.006064578 +2882 0.006338457 +2884 0.006550395 +2886 0.006741246 +2888 0.006945089 +2890 0.007130231 +2892 0.007372441 +2894 0.007579747 +2896 0.007731345 +2898 0.00819576 +2900 0.008562466 +2902 0.00903157 +2904 0.00937914 +2906 0.009851342 +2908 0.010332156 +2910 0.010793932 +2912 0.011308225 +2914 0.011939272 +2916 0.012554826 +2918 0.01337334 +2920 0.014110037 +2922 0.014829331 +2924 0.01536142 +2926 0.015789718 +2928 0.016096233 +2930 0.016316084 +2932 0.016308141 +2934 0.016443279 +2936 0.016680791 +2938 0.017027608 +2940 0.017818197 +2942 0.019401865 +2944 0.021799227 +2946 0.024186537 +2948 0.025801865 +2950 0.02625 +2952 0.02550612 +2954 0.023583511 +2956 0.021342843 +2958 0.01914838 +2960 0.017090145 +2962 0.01539656 +2964 0.013855732 +2966 0.012593295 +2968 0.011483726 +2970 0.01054501 +2972 0.009914023 +2974 0.009757613 +2976 0.009809223 +2978 0.010218257 +2980 0.010809435 +2982 0.011797056 +2984 0.012770905 +2986 0.013636468 +2988 0.014480479 +2990 0.01515069 +2992 0.015619918 +2994 0.015682193 +2996 0.015754709 +2998 0.015366002 +3000 0.014715111 +3002 0.014003 +3004 0.013206518 +3006 0.012292597 +3008 0.011394086 +3010 0.010691684 +3012 0.009936019 +3014 0.009296964 +3016 0.008612659 +3018 0.007984566 +3020 0.007436537 +3022 0.006815112 +3024 0.006429191 +3026 0.005806243 +3028 0.005262323 +3030 0.004768602 +3032 0.004320524 +3034 0.003912193 +3036 0.003421985 +3038 0.003098582 +3040 0.002900269 +3042 0.002511091 +3044 0.002161083 +3046 0.002025539 +3048 0.001869605 +3050 0.001691835 +3052 0.001471398 +3054 0.001359149 +3056 0.00124824 +3058 0.001133357 +3060 0.001085935 +3062 0.001030814 +3064 0.00097166 +3066 0.001020728 +3068 0.000940853 +3070 0.000807141 +3072 0.000755513 +3074 0.000751446 +3076 0.000821568 +3078 0.000793843 +3080 0.000633856 +3082 0.000705054 +3084 0.000693464 +3086 0.000648687 +3088 0.00057882 +3090 0.000621521 +3092 0.000491364 +3094 0.000437328 +3096 0.000406632 +3098 0.000537293 +3100 0.000556879 +3102 0.000452115 +3104 0.000463953 +3106 0.00044965 +3108 0.000471158 +3110 0.000432904 +3112 0.00036216 +3114 0.000454401 +3116 0.000412792 +3118 0.000349278 +3120 0.000378075 +3122 0.000285745 +3124 0.000288687 +3126 0.000338756 +3128 0.000323915 +3130 0.000314324 +3132 0.000371908 +3134 0.00034566 +3136 0.000289967 +3138 0.000259827 +3140 0.000334098 +3142 0.000249786 +3144 0.000306433 +3146 0.000164054 +3148 0.000268845 +3150 0.000311615 +3152 0.000402332 +3154 0.000315994 +3156 0.000353941 +3158 0.000336543 +3160 0.000344823 +3162 0.000370153 +3164 0.000362917 +3166 0.000298576 +3168 0.000363507 +3170 0.000287784 +3172 0.000308446 +3174 0.000250863 +3176 0.000301188 +3178 0.00030549 +3180 0.000281667 +3182 0.00027927 +3184 0.00027765 +3186 0.000293586 +3188 0.000355302 +3190 0.000335228 +3192 0.000335549 +3194 0.000362798 +3196 0.000295649 +3198 0.000373852 +3200 0.000328326 +3202 0.000358333 +3204 0.00032544 +3206 0.000387597 +3208 0.000430661 +3210 0.000417581 +3212 0.000324994 +3214 0.000444512 +3216 0.000400082 +3218 0.000377286 +3220 0.000437329 +3222 0.000356377 +3224 0.000352642 +3226 0.000311089 +3228 0.000382579 +3230 0.000329813 +3232 0.000447714 +3234 0.000472512 +3236 0.000457032 +3238 0.000472607 +3240 0.000363677 +3242 0.000394328 +3244 0.000461889 +3246 0.000490442 +3248 0.000438482 +3250 0.000423751 +3252 0.000433888 +3254 0.000499297 +3256 0.000498987 +3258 0.000465415 +3260 0.000421804 +3262 0.000414397 +3264 0.000405735 +3266 0.000487632 +3268 0.000512952 +3270 0.000538537 +3272 0.000552512 +3274 0.000565302 +3276 0.00052271 +3278 0.000486071 +3280 0.000553016 +3282 0.000551074 +3284 0.000550423 +3286 0.000552049 +3288 0.000582685 +3290 0.000602594 +3292 0.00065031 +3294 0.000492417 +3296 0.000568134 +3298 0.000560644 +3300 0.000606052 +3302 0.000632562 +3304 0.000613536 +3306 0.000629737 +3308 0.000723508 +3310 0.000610128 +3312 0.000629599 +3314 0.00061646 +3316 0.000644116 +3318 0.000657711 +3320 0.000671348 +3322 0.000732666 +3324 0.000591952 +3326 0.000639223 +3328 0.000631524 +3330 0.000664578 +3332 0.000750598 +3334 0.000710665 +3336 0.000775822 +3338 0.000768051 +3340 0.000722316 +3342 0.000659833 +3344 0.000705481 +3346 0.000739379 +3348 0.000754306 +3350 0.000858934 +3352 0.000773878 +3354 0.000745424 +3356 0.000749742 +3358 0.00082974 +3360 0.000824431 +3362 0.000877307 +3364 0.000932521 +3366 0.00087025 +3368 0.000887279 +3370 0.000847555 +3372 0.000884819 +3374 0.00087596 +3376 0.000857088 +3378 0.00093776 +3380 0.001039654 +3382 0.001065518 +3384 0.00099205 +3386 0.00099477 +3388 0.000961683 +3390 0.001041186 +3392 0.001128488 +3394 0.001144315 +3396 0.001224228 +3398 0.001154251 +3400 0.001138032 +3402 0.001173604 +3404 0.001248265 +3406 0.001356015 +3408 0.001285042 +3410 0.001316454 +3412 0.001415994 +3414 0.001463886 +3416 0.001644794 +3418 0.001713653 +3420 0.001730308 +3422 0.001932657 +3424 0.001949152 +3426 0.002006968 +3428 0.0020619 +3430 0.002087098 +3432 0.002206993 +3434 0.001964774 +3436 0.002028821 +3438 0.002393625 +3440 0.002708104 +3442 0.002798177 +3444 0.002983385 +3446 0.00291298 +3448 0.002991802 +3450 0.003001868 +3452 0.003042922 +3454 0.002947307 +3456 0.003051547 +3458 0.00264556 +3460 0.002413914 +3462 0.002811906 +3464 0.002335021 +3466 0.001661673 +3468 0.001509012 +3470 0.002093659 +3472 0.002451124 +3474 0.002367439 +3476 0.002393187 +3478 0.001892594 +3480 0.002007355 +3482 0.002249049 +3484 0.002021025 +3486 0.001697064 +3488 0.001840785 +3490 0.001717791 +3492 0.001588541 +3494 0.001424759 +3496 0.001349834 +3498 0.001273596 +3500 0.001208783 +3502 0.001134414 +3504 0.001144532 +3506 0.001002239 +3508 0.001010699 +3510 0.001003586 +3512 0.000904709 +3514 0.000965619 +3516 0.000937276 +3518 0.00097229 +3520 0.000924807 +3522 0.00095119 +3524 0.000890108 +3526 0.000873585 +3528 0.000885436 +3530 0.000885047 +3532 0.000952793 +3534 0.001030164 +3536 0.000992343 +3538 0.000971817 +3540 0.000915465 +3542 0.000959877 +3544 0.001059664 +3546 0.001041402 +3548 0.00090259 +3550 0.000980567 +3552 0.000914447 +3554 0.00080593 +3556 0.000844328 +3558 0.000743256 +3560 0.000855686 +3562 0.000738947 +3564 0.000834279 +3566 0.001144887 +3568 0.000842023 +3570 0.00067585 +3572 0.000602224 +3574 0.000682329 +3576 0.000581809 +3578 0.000568449 +3580 0.000575447 +3582 0.000481773 +3584 0.000581484 +3586 0.00081874 +3588 0.000617644 +3590 0.000442477 +3592 0.000640158 +3594 0.000675461 +3596 0.00051728 +3598 0.000597346 +3600 0.000584266 +3602 0.0004527 +3604 0.000522512 +3606 0.000624314 +3608 0.000574119 +3610 0.000608948 +3612 0.0008001 +3614 0.000712729 +3616 0.000617938 +3618 0.000826828 +3620 0.000760759 +3622 0.000538546 +3624 0.000557439 +3626 0.0007446 +3628 0.00119225 +3630 0.000526519 +3632 0.000556606 +3634 0.000556875 +3636 0.000506369 +3638 0.000552368 +3640 0.000484705 +3642 0.000499876 +3644 0.000531957 +3646 0.001003344 +3648 0.000945893 +3650 0.000999296 +3652 0.000369562 +3654 0.000439893 +3656 0.000386363 +3658 0.000306059 +3660 0.000268561 +3662 0.000200995 +3664 0.000216152 +3666 0.00031073 +3668 0.000539568 +3670 0.000482811 +3672 0.000170902 +3674 0.001357086 +3676 0.00034876 +3678 0.000117241 +3680 0.000137332 +3682 0.000159181 +3684 0.000118508 +3686 0.000149121 +3688 0.000421635 +3690 0.000330956 +3692 -1.81766E-05 +3694 -2.72672E-05 +3696 -6.55202E-05 +3698 -8.60E-06 +3700 1.51871E-05 +3702 2.32458E-05 +3704 -0.000101734 +3706 -5.30903E-05 +3708 0.000113641 +3710 0.000309234 +3712 0.000106649 +3714 -3.12E-06 +3716 -5.76521E-05 +3718 0.000110276 +3720 9.06626E-05 +3722 9.32628E-05 +3724 -1.2309E-05 +3726 4.60304E-05 +3728 -8.27521E-05 +3730 0.000105094 +3732 0.000359337 +3734 0.000615865 +3736 0.000442528 +3738 3.18536E-05 +3740 3.5789E-05 +3742 0.000292863 +3744 0.000969885 +3746 0.000136573 +3748 0.000457883 +3750 0.00039287 +3752 0.000280102 +3754 8.33166E-05 +3756 0.000108764 +3758 0.00020727 +3760 7.00378E-05 +3762 -5.27051E-05 +3764 0.000139553 +3766 -1.72393E-05 +3768 7.03872E-05 +3770 -2.01502E-05 +3772 -0.000120557 +3774 -8.82563E-05 +3776 -2.43E-06 +3778 0.00019793 +3780 4.93405E-05 +3782 1.94903E-05 +3784 1.86442E-05 +3786 -0.000137666 +3788 -3.29324E-05 +3790 -9.87411E-05 +3792 -1.07826E-05 +3794 2.08248E-05 +3796 0.000114587 +3798 7.00175E-05 +3800 0.000491793 +3802 6.04807E-05 +3804 3.25705E-05 +3806 0.000310394 +3808 2.15496E-05 +3810 8.00694E-05 +3812 0.000109453 +3814 0.00030066 +3816 0.000393264 +3818 0.000178967 +3820 0.000808506 +3822 0.000105035 +3824 8.46296E-05 +3826 0.000121773 +3828 0.000135065 +3830 0.000274273 +3832 8.69895E-05 +3834 0.000222838 +3836 0.000601996 +3838 0.000338187 +3840 0.00024193 +3842 0.000133521 +3844 8.45357E-05 +3846 1.83423E-05 +3848 3.48799E-05 +3850 0.000272218 +3852 0.001030866 +3854 0.000469528 +3856 0.000142735 +3858 6.34538E-05 +3860 0.000145079 +3862 0.000227556 +3864 0.000296134 +3866 0.000137378 +3868 0.000451376 +3870 0.000226189 +3872 0.000119799 +3874 0.000122617 +3876 5.18662E-05 +3878 0.000219086 +3880 0.000268173 +3882 0.000210735 +3884 0.000346726 +3886 0.000183689 +3888 0.000124343 +3890 0.000288181 +3892 1.78834E-05 +3894 9.95453E-05 +3896 0.000185088 +3898 0.000404097 +3900 0.000218476 +3902 0.000267402 +3904 0.000295706 +3906 0.000103094 +3908 0.000101332 +3910 0.000105612 +3912 5.01633E-05 +3914 5.69529E-05 +3916 0.000170528 +3918 9.52556E-05 +3920 0.000168842 +3922 0.00010632 +3924 0.000344961 +3926 7.59984E-05 +3928 0.000221155 +3930 8.75421E-05 +3932 0.000298592 +3934 9.37313E-05 +3936 0.000114365 +3938 0.000223073 +3940 0.000267331 +3942 0.000273424 +3944 0.000143308 +3946 0.000155693 +3948 0.000195926 +3950 0.00020435 +3952 0.000132183 +3954 0.000197331 +3956 0.000248508 +3958 0.000140694 +3960 0.000166407 +3962 0.000118974 +3964 7.31663E-05 +3966 0.00011566 +3968 7.56379E-05 +3970 0.000137593 +3972 0.000116022 +3974 0.000186931 +3976 0.000201803 +3978 0.000150322 +3980 0.000141396 +3982 0.000187293 +3984 0.000263054 +3986 0.000212817 +3988 0.000210708 +3990 0.000217985 +3992 0.000192881 +3994 0.000182579 +3996 0.000164746 +3998 0.000200347 +4000 0.000253085 +4002 0.000171612 +4004 0.000149877 +4006 0.000208808 +4008 0.000140164 +4010 0.000188787 +4012 0.000168944 +4014 0.000177989 +4016 0.000163891 +4018 0.000158359 +4020 0.000136663 +4022 0.000216707 +4024 0.000191577 +4026 0.000150521 +4028 0.000122795 +4030 0.000181619 +4032 0.000211165 +4034 0.000247671 +4036 0.000213884 +4038 0.000193577 +4040 0.000142549 +4042 0.000158466 +4044 0.000246274 +4046 0.000177406 +4048 0.000166641 +4050 0.000176623 +4052 0.000228601 +4054 0.000144074 +4056 0.000218833 +4058 0.000200763 +4060 0.000151771 +4062 0.00015336 +4064 0.000139108 +4066 0.000169462 +4068 0.000123463 +4070 0.000202624 +4072 0.000208393 +4074 0.000167816 +4076 0.000174958 +4078 0.000210896 +4080 0.000207398 +4082 0.000127384 +4084 0.000173693 +4086 0.000200631 +4088 0.000269673 +4090 0.000223231 +4092 0.00029172 +4094 0.00031649 +4096 0.000285588 +4098 0.000251761 +4100 0.000339028 +4102 0.000298703 +4104 0.00024852 +4106 0.000209136 +4108 0.000246085 +4110 0.000282685 +4112 0.000191696 +4114 0.000254014 +4116 0.000228422 +4118 0.000306607 +4120 0.000229142 +4122 0.000348631 +4124 0.000287556 +4126 0.000264232 +4128 0.000209319 +4130 0.000242237 +4132 0.000281044 +4134 0.000321739 +4136 0.000294847 +4138 0.000347712 +4140 0.00036883 +4142 0.000328563 +4144 0.000261437 +4146 0.000334065 +4148 0.000325497 +4150 0.000275545 +4152 0.000358192 +4154 0.000286392 +4156 0.000456376 +4158 0.000388783 +4160 0.000360544 +4162 0.000365173 +4164 0.00028698 +4166 0.000371822 +4168 0.000364618 +4170 0.000288243 +4172 0.000307984 +4174 0.000332854 +4176 0.00032695 +4178 0.000388172 +4180 0.000348726 +4182 0.000368687 +4184 0.000341082 +4186 0.000304622 +4188 0.000287432 +4190 0.00031641 +4192 0.000327385 +4194 0.000313965 +4196 0.000378199 +4198 0.000292018 +4200 0.000371458 +4202 0.000405758 +4204 0.000408023 +4206 0.000371601 +4208 0.000316549 +4210 0.000408096 +4212 0.000363203 +4214 0.00032933 +4216 0.00043362 +4218 0.000370029 +4220 0.000360431 +4222 0.000390905 +4224 0.000308371 +4226 0.000243889 +4228 0.000400749 +4230 0.000232047 +4232 0.00038913 +4234 0.000202101 +4236 0.000313043 +4238 0.000234972 +4240 0.000299282 +4242 0.000291387 +4244 0.000257221 +4246 0.000254894 +4248 0.000313133 +4250 0.000272395 +4252 0.000329282 +4254 0.000211776 +4256 0.000161765 +4258 0.0002771 +4260 0.000244175 +4262 0.00024201 +4264 0.000174491 +4266 0.000304066 +4268 0.000350939 +4270 0.000355563 +4272 0.000271775 +4274 0.000291467 +4276 0.000230176 +4278 0.000394533 +4280 0.000249728 +4282 0.000215013 +4284 0.000246479 +4286 0.000326038 +4288 0.000189699 +4290 0.000268778 +4292 0.00013331 +4294 0.000323916 +4296 0.000216853 +4298 0.000291581 +4300 0.000314194 +4302 0.000279978 +4304 0.00021133 +4306 0.000270665 +4308 0.000204827 +4310 0.000296492 +4312 0.000272268 +4314 0.000237342 +4316 0.000281693 +4318 0.000289106 +4320 0.000303374 +4322 0.000325679 +4324 0.000239933 +4326 0.000314462 +4328 0.000253209 +4330 0.000241805 +4332 0.000351215 +4334 0.000286358 +4336 0.000330223 +4338 0.000369278 +4340 0.000329129 +4342 0.000275593 +4344 0.00029688 +4346 0.000346473 +4348 0.000352509 +4350 0.000355569 +4352 0.000461464 +4354 0.000250317 +4356 0.000427547 +4358 0.000434099 +4360 0.000343595 +4362 0.000350079 +4364 0.000408112 +4366 0.000350043 +4368 0.000411028 +4370 0.000434798 +4372 0.000409623 +4374 0.000423228 +4376 0.00037185 +4378 0.000433805 +4380 0.000454019 +4382 0.000443482 +4384 0.000545947 +4386 0.000429948 +4388 0.00038776 +4390 0.000416255 +4392 0.00040207 +4394 0.000397386 +4396 0.00040638 +4398 0.000369246 +4400 0.000460818 +4402 0.000381619 +4404 0.000382068 +4406 0.00032482 +4408 0.000457543 +4410 0.000455416 +4412 0.000487212 +4414 0.000417398 +4416 0.000382643 +4418 0.000403196 +4420 0.000493331 +4422 0.000341439 +4424 0.000513969 +4426 0.000587223 +4428 0.000580159 +4430 0.000557957 +4432 0.000556266 +4434 0.000517113 +4436 0.000660822 +4438 0.000569927 +4440 0.000582118 +4442 0.000542652 +4444 0.000591509 +4446 0.000512382 +4448 0.000560221 +4450 0.000487317 +4452 0.000482114 +4454 0.000461281 +4456 0.000393521 +4458 0.000388897 +4460 0.000397314 +4462 0.000315475 +4464 0.000310207 +4466 0.000266723 +4468 0.000339416 +4470 0.000292223 +4472 0.000281582 +4474 0.000329826 +4476 0.000289373 +4478 0.00021093 +4480 0.000174358 +4482 0.000341538 +4484 0.000247057 +4486 0.000273322 +4488 0.000234901 +4490 0.000203559 +4492 0.000129721 +4494 7.83785E-05 +4496 0.000190952 +4498 0.000131392 +4500 0.000193057 +4502 1.24492E-05 +4504 9.08797E-05 +4506 0.000144288 +4508 0.000127571 +4510 2.51343E-05 +4512 7.48194E-05 +4514 0.000103584 +4516 4.19407E-05 +4518 2.40009E-05 +4520 0.000102142 +4522 1.18914E-05 +4524 5.72128E-05 +4526 -8.73734E-05 +4528 -1.76682E-05 +4530 -4.90721E-05 +4532 -4.71309E-05 +4534 3.91112E-05 +4536 1.34E-06 +4538 9.62881E-05 +4540 3.37309E-05 +4542 -2.91281E-05 +4544 -3.2849E-05 +4546 -1.58304E-05 +4548 0.000110588 +4550 7.05284E-05 +4552 7.94542E-05 +4554 3.37392E-05 +4556 -9.20E-06 +4558 -2.21519E-05 +4560 3.46914E-05 +4562 5.61431E-05 +4564 8.01E-06 +4566 -0.000103626 +4568 3.34905E-05 +4570 -2.32184E-05 +4572 -1.08982E-05 +4574 4.1603E-05 +4576 -5.00568E-05 +4578 -6.83E-06 +4580 2.7055E-05 +4582 2.86344E-05 +4584 5.87E-06 +4586 -6.99461E-05 +4588 -8.39377E-05 +4590 3.60434E-05 +4592 7.96765E-05 +4594 -0.000177672 +4596 -3.17066E-05 +4598 3.72168E-05 +4600 -6.88E-06 +4602 -6.03735E-05 +4604 4.66722E-05 +4606 -3.54641E-05 +4608 -1.74806E-05 +4610 -1.28922E-05 +4612 7.60359E-05 +4614 8.66487E-05 +4616 9.21211E-05 +4618 -5.23373E-05 +4620 -5.48989E-05 +4622 -6.38442E-05 +4624 3.55E-07 +4626 5.57926E-05 +4628 -4.49083E-05 +4630 -2.67924E-05 +4632 -7.71728E-05 +4634 3.694E-05 +4636 0.00012611 +4638 -5.57319E-05 +4640 -4.87582E-05 +4642 9.33695E-05 +4644 0.000127693 +4646 -2.1893E-05 +4648 3.65E-06 +4650 -3.07E-06 +4652 -2.23231E-05 +4654 5.90752E-05 +4656 1.12225E-05 +4658 3.36415E-05 +4660 -9.07325E-05 +4662 -2.33188E-05 +4664 7.71021E-05 +4666 2.75205E-05 +4668 5.73118E-05 +4670 0.000100899 +4672 5.6625E-05 +4674 0.000142437 +4676 -2.07439E-05 +4678 -1.93856E-05 +4680 9.87695E-05 +4682 4.89309E-05 +4684 3.68502E-05 +4686 0.000153062 +4688 8.76468E-05 +4690 0.000112023 +4692 -9.49E-06 +4694 2.66218E-05 +4696 -5.76107E-05 +4698 -8.38058E-05 +4700 -2.9238E-05 +4702 -3.11E-06 +4704 8.99146E-05 +4706 1.31697E-05 +4708 -9.5303E-05 +4710 -2.87252E-05 +4712 3.52673E-05 +4714 0.000136868 +4716 7.36812E-05 +4718 4.36516E-05 +4720 -4.05162E-05 +4722 -2.18182E-05 +4724 1.13599E-05 +4726 -4.26783E-05 +4728 4.49779E-05 +4730 5.46657E-05 +4732 6.31277E-05 +4734 9.201E-05 +4736 -2.84995E-05 +4738 -1.96E-06 +4740 4.16116E-05 +4742 2.40E-06 +4744 0.000106433 +4746 7.86067E-05 +4748 -2.31924E-05 +4750 0.000110697 +4752 -0.000105205 +4754 -4.20045E-05 +4756 5.92E-06 +4758 -4.33579E-05 +4760 -0.00010886 +4762 -7.24948E-05 +4764 3.96924E-05 +4766 -0.000191847 +4768 -0.000117285 +4770 -6.34291E-05 +4772 2.12932E-05 +4774 -3.24E-06 +4776 1.09424E-05 +4778 -8.83467E-05 +4780 3.50E-06 +4782 -0.000107665 +4784 -4.71369E-05 +4786 -0.000105939 +4788 -1.78558E-05 +4790 -6.54974E-05 +4792 -6.69849E-05 +4794 -0.000104735 +4796 6.49E-06 +4798 -0.000146163 +4800 8.23E-06 +4802 -3.12394E-05 +4804 -0.000185322 +4806 -8.58323E-05 +4808 -0.000100005 +4810 -0.00011669 +4812 -0.000133039 +4814 -7.84302E-05 +4816 -9.72117E-05 +4818 -7.66769E-05 +4820 -9.0187E-05 +4822 -0.000155309 +4824 2.07393E-05 +4826 5.72E-06 +4828 -4.57609E-05 +4830 -0.000194768 +4832 -0.000133392 +4834 -0.000165423 +4836 -0.000152181 +4838 -0.00017315 +4840 -6.8367E-05 +4842 -0.000168049 +4844 -9.85448E-05 +4846 -1.83435E-05 +4848 -4.66214E-05 +4850 -6.72124E-05 +4852 -8.60337E-05 +4854 -0.000139507 +4856 -7.10E-06 +4858 -9.54554E-05 +4860 -7.87667E-05 +4862 -0.000169032 +4864 4.42985E-05 +4866 -5.87E-06 +4868 -5.49307E-05 +4870 -9.6575E-05 +4872 -0.000134905 +4874 -9.29933E-05 +4876 -8.09305E-05 +4878 -0.000291688 +4880 -9.6625E-05 +4882 -0.000130894 +4884 -0.000118673 +4886 -0.00013703 +4888 -0.000117201 +4890 -2.7273E-05 +4892 -0.000149352 +4894 -6.61949E-05 +4896 -0.000129105 +4898 -0.000158602 +4900 -8.34552E-05 +4902 -0.000109603 +4904 -0.00014692 +4906 -0.000183268 +4908 -9.97988E-05 +4910 -0.000229024 +4912 -1.11176E-05 +4914 -0.000155447 +4916 -8.83261E-05 +4918 -7.58636E-05 +4920 -0.000157625 +4922 -0.000196801 +4924 -8.35149E-05 +4926 -9.21691E-05 +4928 -3.23171E-05 +4930 -0.000193988 +4932 -9.61135E-05 +4934 -0.000101847 +4936 -6.05769E-05 +4938 -0.000123916 +4940 -0.000132141 +4942 -0.00013735 +4944 -0.000136462 +4946 -0.000101766 +4948 -0.000154092 +4950 -0.000214223 +4952 -0.000117774 +4954 -7.17024E-05 +4956 -0.000183699 +4958 -0.00017453 +4960 -0.000249751 +4962 -0.000132127 +4964 5.13399E-05 +4966 -4.20862E-05 +4968 -2.52E-06 +4970 -0.000180519 +4972 -9.29657E-05 +4974 -0.000190246 +4976 -0.000125231 +4978 3.1279E-05 +4980 -0.000248043 +4982 -0.000134352 +4984 -2.83712E-05 +4986 -0.000106364 +4988 -0.000176678 +4990 -4.92341E-05 +4992 -5.76105E-05 +4994 -0.000122315 +4996 -0.000196789 +4998 -5.34783E-05 +5000 -6.5335E-05 +5002 -0.000226349 +5004 -0.000101908 +5006 -6.35036E-05 +5008 -0.000183858 +5010 -1.66743E-05 +5012 -0.000130706 +5014 4.27E-06 +5016 -3.28712E-05 +5018 -0.000182452 +5020 -6.57517E-05 +5022 -6.14048E-05 +5024 -5.15595E-05 +5026 -5.28437E-05 +5028 -0.000128204 +5030 -8.17912E-05 +5032 -5.30334E-05 +5034 4.59457E-05 +5036 -5.073E-05 +5038 -1.4378E-05 +5040 -0.000191915 +5042 -7.42078E-05 +5044 -0.000115069 +5046 -0.000147359 +5048 -5.59493E-05 +5050 -0.000110795 +5052 2.13693E-05 +5054 -3.90667E-05 +5056 -4.18254E-05 +5058 -0.000221218 +5060 -0.000171646 +5062 -4.28584E-05 +5064 -0.000103295 +5066 6.28557E-05 +5068 -6.38849E-05 +5070 -7.2519E-05 +5072 -4.04725E-05 +5074 -0.000162146 +5076 -6.50715E-05 +5078 -4.47088E-05 +5080 -8.4281E-05 +5082 -8.43487E-05 +5084 -0.000186466 +5086 -0.000247114 +5088 -3.90E-07 +5090 -0.000131357 +5092 -0.000165973 +5094 3.69467E-05 +5096 -1.92271E-05 +5098 -3.22E-06 +5100 -2.12904E-05 +5102 -6.97464E-05 +5104 -0.000102491 +5106 -0.000121148 +5108 -3.97039E-05 +5110 -5.85939E-05 +5112 -0.000273178 +5114 -5.84787E-05 +5116 5.61396E-05 +5118 -5.16509E-05 +5120 -0.00018082 +5122 -5.49575E-05 +5124 -0.000178501 +5126 -0.000111293 +5128 -0.000142361 +5130 3.78E-06 +5132 -5.02351E-05 +5134 9.15343E-05 +5136 -4.70089E-05 +5138 -0.00010954 +5140 1.13571E-05 +5142 4.82898E-05 +5144 3.77874E-05 +5146 -5.93503E-05 +5148 -0.000164972 +5150 -8.57053E-05 +5152 -0.000197877 +5154 -1.85536E-05 +5156 -0.000278435 +5158 -5.9856E-05 +5160 -5.08827E-05 +5162 0.000122482 +5164 5.08896E-05 +5166 5.83805E-05 +5168 -0.00012685 +5170 0.000164092 +5172 -0.000114154 +5174 4.62051E-05 +5176 5.11492E-05 +5178 -4.62975E-05 +5180 0.000174738 +5182 -0.000105599 +5184 -2.24336E-05 +5186 6.56395E-05 +5188 -5.17781E-05 +5190 7.28549E-05 +5192 -6.157E-05 +5194 2.61121E-05 +5196 0.000121307 +5198 3.9461E-05 +5200 6.95204E-05 +5202 -0.000152101 +5204 -1.45664E-05 +5206 -2.81734E-05 +5208 3.3733E-05 +5210 -0.000191675 +5212 -0.000238876 +5214 5.27E-06 +5216 -5.55352E-05 +5218 -0.000242827 +5220 3.41334E-05 +5222 -0.000214394 +5224 1.97708E-05 +5226 8.8285E-05 +5228 0.000103699 +5230 -6.78999E-05 +5232 -6.29237E-05 +5234 5.72257E-05 +5236 -1.89721E-05 +5238 -0.000113873 +5240 -4.68908E-05 +5242 -3.77538E-05 +5244 0.000139638 +5246 -4.43735E-05 +5248 -0.000102626 +5250 -2.08864E-05 +5252 7.16191E-05 +5254 -0.000179139 +5256 -0.000204764 +5258 5.62019E-05 +5260 6.92956E-05 +5262 -0.00011329 +5264 -2.34642E-05 +5266 4.14054E-05 +5268 1.74697E-05 +5270 -0.000238236 +5272 -9.28767E-05 +5274 -7.16975E-05 +5276 -0.000127366 +5278 -0.000230925 +5280 -2.65856E-05 +5282 -6.2476E-05 +5284 -7.327E-05 +5286 1.91461E-05 +5288 -7.2295E-05 +5290 -0.000147312 +5292 -7.62531E-05 +5294 -0.000144729 +5296 -0.000126474 +5298 -2.27904E-05 +5300 -0.000112916 +5302 -8.64288E-05 +5304 5.86161E-05 +5306 -0.000139173 +5308 9.46683E-05 +5310 -0.000149661 +5312 -0.000271663 +5314 1.51686E-05 +5316 -5.13603E-05 +5318 4.16107E-05 +5320 -0.00018097 +5322 -0.000168231 +5324 -8.75568E-05 +5326 1.26443E-05 +5328 -2.70E-06 +5330 -0.000102704 +5332 -3.18529E-05 +5334 -0.000107168 +5336 -3.44404E-05 +5338 5.39579E-05 +5340 -9.77379E-05 +5342 0.000125462 +5344 4.98398E-05 +5346 -0.000146261 +5348 -0.000171159 +5350 -1.69326E-05 +5352 0.000177523 +5354 -7.21671E-05 +5356 -0.000260525 +5358 -0.000169717 +5360 -0.000120504 +5362 -0.000136292 +5364 -8.95291E-05 +5366 -0.000137501 +5368 2.8667E-05 +5370 -8.19487E-05 +5372 -0.000148664 +5374 -2.76867E-05 +5376 -7.21953E-05 +5378 -9.64493E-05 +5380 -0.000148179 +5382 -5.98436E-05 +5384 -0.000124761 +5386 -0.000202081 +5388 -0.000166304 +5390 -0.000210005 +5392 -0.00010521 +5394 -7.30E-07 +5396 0.000138772 +5398 -6.01E-06 +5400 -0.000188874 +5402 -5.08203E-05 +5404 -0.000270553 +5406 -0.000140069 +5408 -0.000148844 +5410 9.32963E-05 +5412 -0.000131394 +5414 -0.00011106 +5416 -9.04442E-05 +5418 -0.000154567 +5420 -8.9573E-05 +5422 -0.000150372 +5424 -5.82735E-05 +5426 -0.000166476 +5428 -1.28661E-05 +5430 6.85E-06 +5432 -7.06364E-05 +5434 -0.000111032 +5436 -0.000211053 +5438 -8.24E-06 +5440 -7.89619E-05 +5442 1.04035E-05 +5444 0.000147427 +5446 -9.76797E-05 +5448 -0.000136429 +5450 -0.000211055 +5452 -0.000161586 +5454 -5.84473E-05 +5456 -5.15973E-05 +5458 -2.10924E-05 +5460 4.70888E-05 +5462 -0.000356925 +5464 -0.000285499 +5466 -9.7915E-05 +5468 -7.49916E-05 +5470 -7.99851E-05 +5472 -0.000156726 +5474 7.08954E-05 +5476 -0.000235041 +5478 4.11383E-05 +5480 -8.73586E-05 +5482 -0.000263069 +5484 -0.000131456 +5486 -0.000217176 +5488 -0.000123259 +5490 -0.000162573 +5492 8.80588E-05 +5494 -5.13835E-05 +5496 -0.000177107 +5498 -1.08686E-05 +5500 -0.00013401 +5502 -2.17232E-05 +5504 -0.000204563 +5506 -0.000130573 +5508 -0.000138882 +5510 -4.71656E-05 +5512 -0.000226241 +5514 -0.000158162 +5516 -0.00016349 +5518 -0.00022113 +5520 -1.90E-06 +5522 -8.43313E-05 +5524 -0.000294269 +5526 -8.10355E-05 +5528 -0.0001755 +5530 -0.000149491 +5532 -0.000185625 +5534 -0.000181539 +5536 -0.000227489 +5538 -0.000142212 +5540 -6.22151E-05 +5542 -4.10673E-05 +5544 -0.000129738 +5546 -0.000165541 +5548 -0.000120703 +5550 -0.000250116 +5552 -0.000189888 +5554 -9.45214E-05 +5556 -0.000206709 +5558 -0.000114229 +5560 -2.74E-06 +5562 -0.000174771 +5564 -0.000215381 +5566 -0.000435337 +5568 -7.92925E-05 +5570 -0.000264598 +5572 -5.21323E-05 +5574 -0.000184079 +5576 -0.000195211 +5578 6.14E-06 +5580 -1.34219E-05 +5582 -0.000142205 +5584 -0.000201266 +5586 -0.000136273 +5588 -4.36936E-05 +5590 -0.000177113 +5592 -0.000192107 +5594 -0.000285436 +5596 -0.000206806 +5598 -0.000143489 +5600 -0.000197125 +5602 -0.000227679 +5604 -0.000228332 +5606 -6.73004E-05 +5608 -0.00010937 +5610 -0.000349687 +5612 -0.000177179 +5614 -0.00025193 +5616 -5.64675E-05 +5618 -0.000170188 +5620 -0.000230005 +5622 -0.00040001 +5624 -3.67655E-05 +5626 -7.16761E-05 +5628 -0.000397345 +5630 -4.36E-07 +5632 -4.1559E-05 +5634 -0.000190926 +5636 -0.000371965 +5638 -0.00024466 +5640 2.96284E-05 +5642 -3.24397E-05 +5644 -0.000369574 +5646 -9.12484E-05 +5648 -0.000200854 +5650 -0.0002112 +5652 -0.00010615 +5654 -0.0002109 +5656 -0.000131312 +5658 -7.34227E-05 +5660 -0.000125623 +5662 -0.000222683 +5664 -3.11127E-05 +5666 -0.000142646 +5668 -9.98779E-05 +5670 -2.86769E-05 +5672 -0.000218787 +5674 -7.01801E-05 +5676 -0.000370383 +5678 1.93936E-05 +5680 -0.000236552 +5682 -0.000114162 +5684 -1.40634E-05 +5686 -9.94189E-05 +5688 5.44862E-05 +5690 -9.22632E-05 +5692 -0.000235726 +5694 -0.000286721 +5696 -9.80563E-05 +5698 -0.000186885 +5700 -8.91076E-05 +5702 -0.000116416 +5704 -0.00014795 +5706 2.03924E-05 +5708 -9.58288E-05 +5710 -6.8708E-05 +5712 -0.000150654 +5714 -3.29562E-05 +5716 -0.000217313 +5718 1.36356E-05 +5720 -4.4006E-05 +5722 -0.000146933 +5724 -3.21571E-05 +5726 -0.000122156 +5728 -0.000269322 +5730 -0.000197751 +5732 -0.000130912 +5734 -0.000154111 +5736 -9.53856E-05 +5738 -0.000240261 +5740 -0.000161401 +5742 6.45E-06 +5744 -0.000184411 +5746 -0.000245277 +5748 -0.000212489 +5750 -4.43252E-05 +5752 -0.000107688 +5754 1.07502E-05 +5756 -0.000167197 +5758 -6.68704E-05 +5760 -4.80992E-05 +5762 -5.66434E-05 +5764 -0.000228705 +5766 -0.000265847 +5768 -9.75073E-05 +5770 -0.000122477 +5772 -0.00013384 +5774 -0.00030111 +5776 -6.26301E-05 +5778 3.12553E-05 +5780 -5.04101E-05 +5782 -0.000160911 +5784 -3.53197E-05 +5786 -0.000214252 +5788 2.99878E-05 +5790 -0.000147791 +5792 -4.13023E-05 +5794 -6.57403E-05 +5796 -0.000122902 +5798 2.21647E-05 +5800 -6.32159E-05 +5802 -6.96488E-05 +5804 -0.000176959 +5806 -0.000104603 +5808 -2.97849E-05 +5810 -2.13517E-05 +5812 -0.000310097 +5814 -0.000234544 +5816 -0.000306688 +5818 -0.000134224 +5820 -4.62987E-05 +5822 -8.32075E-05 +5824 -0.000124491 +5826 -0.000227533 +5828 7.63E-06 +5830 -0.000100538 +5832 -0.000209111 +5834 -6.65844E-05 +5836 -0.000147125 +5838 -0.000133334 +5840 -8.70E-06 +5842 -2.23727E-05 +5844 -0.000315383 +5846 -0.000185853 +5848 0.000154914 +5850 -0.000121906 +5852 -6.5162E-05 +5854 -0.000181952 +5856 -4.16013E-05 +5858 -3.0724E-05 +5860 3.03096E-05 +5862 6.01019E-05 +5864 -0.000205749 +5866 -7.91329E-05 +5868 -3.1756E-05 +5870 -0.000153925 +5872 -4.92637E-05 +5874 8.94E-06 +5876 0.000167884 +5878 2.81044E-05 +5880 -0.000172485 +5882 3.85173E-05 +5884 -0.000199897 +5886 5.97079E-05 +5888 1.12013E-05 +5890 -0.000182001 +5892 -0.000170865 +5894 2.87266E-05 +5896 0.000188198 +5898 0.000162068 +5900 6.77282E-05 +5902 -0.000100557 +5904 0.000172774 +5906 5.45068E-05 +5908 6.71451E-05 +5910 1.42267E-05 +5912 0.000159991 +5914 0.000176915 +5916 0.000201461 +5918 7.24557E-05 +5920 -0.000214255 +5922 0.000185476 +5924 5.55465E-05 +5926 5.85444E-05 +5928 2.38107E-05 +5930 0.000209259 +5932 2.68625E-05 +5934 6.93668E-05 +5936 -0.00010269 +5938 0.000204459 +5940 4.3037E-05 +5942 0.000134317 +5944 0.00011353 +5946 -1.1138E-05 +5948 -0.00021765 +5950 0.000113405 +5952 -6.84037E-05 +5954 -6.10258E-05 +5956 0.000128848 +5958 6.24606E-05 +5960 -1.7243E-05 +5962 -9.28901E-05 +5964 -0.000124651 +5966 -0.000180665 +5968 0.000142526 +5970 -0.000128998 +5972 0.000184577 +5974 -3.74491E-05 +5976 -0.00013039 +5978 2.31888E-05 +5980 0.000132512 +5982 -0.000132757 +5984 -0.000164463 +5986 8.58551E-05 +5988 -0.000140773 +5990 -4.35385E-05 +5992 7.0978E-05 +5994 -6.24E-06 +5996 0.000148403 +5998 0.000188021 +6000 2.66254E-05 +6002 8.84368E-05 +6004 3.65224E-05 +6006 5.78793E-05 +6008 3.50034E-05 +6010 5.62399E-05 +6012 -5.14362E-05 +6014 0.00034933 +6016 0.000168918 +6018 5.34508E-05 +6020 0.000122075 +6022 -4.05053E-05 +6024 8.9883E-05 +6026 0.000161734 +6028 -7.37436E-05 +6030 -4.95E-06 +6032 0.00022485 +6034 -0.000253566 +6036 0.000122794 +6038 -2.70286E-05 +6040 7.11802E-05 +6042 0.000129984 +6044 1.57E-06 +6046 -0.000117867 +6048 -2.15324E-05 +6050 -1.38764E-05 +6052 6.69437E-05 +6054 -0.000117569 +6056 1.94807E-05 +6058 -1.96687E-05 +6060 -0.000147066 +6062 5.52879E-05 +6064 -3.51488E-05 +6066 1.65759E-05 +6068 0.000194312 +6070 -9.75251E-05 +6072 -0.000286519 +6074 -0.000133893 +6076 -0.000144305 +6078 -0.000206774 +6080 9.70323E-05 +6082 0.000105616 +6084 7.76744E-05 +6086 -1.85213E-05 +6088 2.1601E-05 +6090 2.86444E-05 +6092 -7.78625E-05 +6094 -0.000103451 +6096 5.06513E-05 +6098 -0.000126614 +6100 -0.000291543 +6102 -3.20512E-05 +6104 -0.00034077 +6106 4.78E-06 +6108 -0.00021435 +6110 -3.06885E-05 +6112 -0.00013895 +6114 -6.48402E-05 +6116 -7.10551E-05 +6118 -0.000288181 +6120 -6.09779E-05 +6122 -0.000224615 +6124 -8.03908E-05 +6126 -7.04685E-05 +6128 7.00613E-05 +6130 -0.000187151 +6132 -0.00015411 +6134 -0.000142311 +6136 0.000311664 +6138 0.000185075 +6140 0.000302768 +6142 -0.000104647 +6144 0.000119734 +6146 -4.93308E-05 +6148 1.16225E-05 +6150 -0.000114402 +6152 -0.00021231 +6154 7.1843E-05 +6156 -5.21411E-05 +6158 -8.98771E-05 +6160 0.000148557 +6162 -5.44653E-05 +6164 -0.00012796 +6166 9.70156E-05 +6168 -0.000101064 +6170 -0.00013553 +6172 9.9476E-05 +6174 1.62078E-05 +6176 -4.40928E-05 +6178 0.000102579 +6180 1.77941E-05 +6182 -0.000149253 +6184 -8.96427E-05 +6186 -0.000108399 +6188 6.41861E-05 +6190 0.000121833 +6192 -2.42281E-05 +6194 -0.000112157 +6196 -2.51081E-05 +6198 -3.95046E-05 +6200 0.000178628 +6202 -0.000148793 +6204 -9.57E-06 +6206 -7.90421E-05 +6208 -8.07858E-05 +6210 -4.14175E-05 +6212 -7.21446E-05 +6214 0.000149076 +6216 3.91353E-05 +6218 -0.000114591 +6220 -9.9288E-05 +6222 -0.000113439 +6224 -2.5277E-05 +6226 -8.29E-07 +6228 8.26896E-05 +6230 -6.24E-06 +6232 0.000107177 +6234 -3.60E-06 +6236 0.000162593 +6238 -5.28839E-05 +6240 -0.000174024 +6242 -0.000101802 +6244 1.47698E-05 +6246 4.79099E-05 +6248 -8.95552E-05 +6250 0.000146406 +6252 0.000106973 +6254 7.08576E-05 +6256 -5.01693E-05 +6258 5.31355E-05 +6260 -0.000233967 +6262 4.08849E-05 +6264 -7.93998E-05 +6266 0.00014663 +6268 -4.49E-07 +6270 0.000121188 +6272 -4.01289E-05 +6274 9.46038E-05 +6276 4.40081E-05 +6278 8.76714E-05 +6280 -0.000191742 +6282 -0.000105518 +6284 -4.94007E-05 +6286 -4.65298E-05 +6288 1.22E-07 +6290 0.000159264 +6292 3.10034E-05 +6294 6.24514E-05 +6296 -2.04794E-05 +6298 -0.000228969 +6300 7.75386E-05 +6302 -8.37533E-05 +6304 -4.76962E-05 +6306 0.000134281 +6308 -9.41E-06 +6310 -0.000141126 +6312 -0.000133436 +6314 9.32692E-05 +6316 0.000130775 +6318 0.000198152 +6320 -5.79899E-05 +6322 -4.41423E-05 +6324 0.000143831 +6326 0.000107897 +6328 1.79488E-05 +6330 -0.000148111 +6332 0.000107348 +6334 -2.49393E-05 +6336 -0.000148447 +6338 0.000163246 +6340 2.64628E-05 +6342 6.50765E-05 +6344 -5.74688E-05 +6346 9.16788E-05 +6348 0.000115457 +6350 2.51624E-05 +6352 -6.82336E-05 +6354 0.000175589 +6356 -2.47157E-05 +6358 0.000300847 +6360 4.29191E-05 +6362 -0.000102159 +6364 -0.000150186 +6366 -0.000137124 +6368 -3.6448E-05 +6370 6.31217E-05 +6372 -2.17468E-05 +6374 0.00020514 +6376 -0.000288874 +6378 -0.000196896 +6380 5.33731E-05 +6382 -0.00018922 +6384 5.94367E-05 +6386 0.00018609 +6388 -0.000231268 +6390 0.000188414 +6392 8.58249E-05 +6394 0.000322554 +6396 -8.18526E-05 +6398 6.46391E-05 +6400 -3.654E-05 +6402 -5.43539E-05 +6404 0.00011808 +6406 -0.000111429 +6408 3.37446E-05 +6410 0.000103862 +6412 -2.73016E-05 +6414 0.000148599 +6416 -0.000175049 +6418 -7.87E-06 +6420 -1.44832E-05 +6422 -8.69714E-05 +6424 7.46194E-05 +6426 -8.40362E-05 +6428 0.000255133 +6430 -7.29877E-05 +6432 0.000251098 +6434 -6.47746E-05 +6436 -0.000116293 +6438 0.000176731 +6440 -8.31E-06 +6442 -0.000133431 +6444 -0.000148146 +6446 1.85739E-05 +6448 -7.49236E-05 +6450 7.86825E-05 +6452 0.000150351 +6454 8.30916E-05 +6456 -2.89466E-05 +6458 2.75E-07 +6460 -7.6078E-05 +6462 0.000127013 +6464 0.000125654 +6466 -9.06547E-05 +6468 -0.000245214 +6470 -9.9701E-05 +6472 -7.93695E-05 +6474 -0.000114213 +6476 0.000128301 +6478 -7.09795E-05 +6480 0.00014139 +6482 6.9353E-05 +6484 0.000113504 +6486 -0.000222003 +6488 0.00011384 +6490 5.82324E-05 +6492 -4.78533E-05 +6494 -0.000172427 +6496 3.94829E-05 +6498 -0.000207402 +6500 -0.000158524 +6502 7.13359E-05 +6504 -0.00015144 +6506 -0.000166462 +6508 -1.63887E-05 +6510 8.49982E-05 +6512 -0.000133497 +6514 -2.65249E-05 +6516 -0.000187609 +6518 -1.77176E-05 +6520 -0.000139934 +6522 1.97547E-05 +6524 -0.000213204 +6526 -2.25511E-05 +6528 -5.93047E-05 +6530 -0.000104047 +6532 -0.000306345 +6534 -3.98042E-05 +6536 -7.78457E-05 +6538 -7.13E-06 +6540 -0.000280079 +6542 0.000154768 +6544 9.83578E-05 +6546 0.000181306 +6548 -0.000133643 +6550 0.000105885 +6552 -0.000157576 +6554 -9.20987E-05 +6556 -5.51079E-05 +6558 -3.02747E-05 +6560 -7.17904E-05 +6562 -0.000280564 +6564 -6.67912E-05 +6566 0.000184375 +6568 -8.73372E-05 +6570 -0.000100174 +6572 -2.82062E-05 +6574 -8.84695E-05 +6576 0.000144169 +6578 -0.000240943 +6580 -0.000139581 +6582 0.000120571 +6584 0.000138317 +6586 -0.00022769 +6588 -0.000275816 +6590 0.00010466 +6592 7.78823E-05 +6594 -5.28282E-05 +6596 -2.40E-06 +6598 0.000117892 +6600 -4.19631E-05 +6602 -0.000315964 +6604 -0.000410462 +6606 -0.000120959 +6608 9.99E-06 +6610 4.37964E-05 +6612 -3.31902E-05 +6614 -8.51607E-05 +6616 -0.000154694 +6618 -9.29603E-05 +6620 5.289E-05 +6622 -0.000125816 +6624 -0.000314679 +6626 -0.00016154 +6628 -0.000141162 +6630 -0.000119437 +6632 -0.0001569 +6634 -0.000166503 +6636 0.000112686 +6638 1.99608E-05 +6640 4.35539E-05 +6642 -0.000166097 +6644 -4.87333E-05 +6646 -0.000336465 +6648 -0.00029665 +6650 -0.000145957 +6652 7.43624E-05 +6654 -0.000223543 +6656 0.000141507 +6658 0.000143548 +6660 -0.000207983 +6662 -3.80663E-05 +6664 -0.000115808 +6666 -0.000371392 +6668 -0.000146251 +6670 -0.000330336 +6672 -0.000268665 +6674 -8.44355E-05 +6676 -1.45736E-05 +6678 -0.000355467 +6680 -0.000112196 +6682 2.59378E-05 +6684 -5.07584E-05 +6686 -2.74706E-05 +6688 -0.000184275 +6690 -8.74E-06 +6692 -2.95378E-05 +6694 2.54E-06 +6696 -0.000101312 +6698 -0.000211174 +6700 -0.000164924 +6702 -0.000398584 +6704 -0.000146533 +6706 -0.000348778 +6708 -0.000143255 +6710 0.000147283 +6712 -9.8179E-05 +6714 9.34795E-05 +6716 -0.000150882 +6718 -0.000297166 +6720 1.32743E-05 +6722 -0.000120746 +6724 -8.11384E-05 +6726 -0.000325532 +6728 -0.000194586 +6730 -0.00012466 +6732 -4.78812E-05 +6734 -9.19999E-05 +6736 -0.000107843 +6738 -6.23358E-05 +6740 -0.000286347 +6742 -3.71682E-05 +6744 -4.80E-06 +6746 -0.000319234 +6748 -0.000279883 +6750 -0.000272827 +6752 -0.000101761 +6754 -0.000146361 +6756 -0.000266156 +6758 0.000102535 +6760 -0.000386606 +6762 -0.00018995 +6764 -0.000215715 +6766 -0.00023779 +6768 -0.000211241 +6770 -0.000283036 +6772 -0.000106436 +6774 -0.000187373 +6776 -0.000190231 +6778 -1.71093E-05 +6780 -0.000351549 +6782 -0.000167132 +6784 6.03858E-05 +6786 -0.000311376 +6788 -0.000142106 +6790 -1.62293E-05 +6792 -0.000231522 +6794 -8.28732E-05 +6796 -0.000337511 +6798 -0.000203157 +6800 -3.72712E-05 +6802 -0.000234517 +6804 -1.30E-06 +6806 -8.99819E-05 +6808 -3.03547E-05 +6810 -7.82862E-05 +6812 -0.000275055 +6814 8.78416E-05 +6816 -0.000124671 +6818 -0.000332395 +6820 -0.000120407 +6822 -0.000196254 +6824 -0.000143466 +6826 -0.00023199 +6828 -2.32556E-05 +6830 -0.000506958 +6832 1.30E-06 +6834 -0.000349053 +6836 -0.000105324 +6838 -0.000365336 +6840 -0.000376516 +6842 -0.000268123 +6844 -0.000216535 +6846 -0.000149111 +6848 -0.000224848 +6850 -0.000219525 +6852 3.8059E-05 +6854 -0.000306124 +6856 -0.000480935 +6858 -7.56657E-05 +6860 -0.000234094 +6862 -8.62146E-05 +6864 -4.34679E-05 +6866 -6.9076E-05 +6868 -0.000343807 +6870 -2.52463E-05 +6872 0.00013412 +6874 -0.000136273 +6876 -6.21612E-05 +6878 -0.000382671 +6880 -3.57982E-05 +6882 -0.000173088 +6884 9.16434E-05 +6886 -0.000290802 +6888 -0.00033873 +6890 -0.000100816 +6892 -0.000332355 +6894 -2.15443E-05 +6896 -0.000139886 +6898 -0.000147969 +6900 -0.000250801 +6902 -0.000287541 +6904 3.96189E-05 +6906 -0.00043964 +6908 -0.000144297 +6910 -0.000259311 +6912 -0.000307546 +6914 -0.000207326 +6916 -0.000311028 +6918 1.09E-06 +6920 -0.000316103 +6922 -0.000116125 +6924 -0.0004364 +6926 -0.00019726 +6928 2.21665E-05 +6930 -0.000196139 +6932 -0.000150559 +6934 -0.00021327 +6936 -0.000242659 +6938 -0.000324069 +6940 -0.000156015 +6942 -0.000114122 +6944 -0.000116531 +6946 -0.0002098 +6948 -0.000403686 +6950 -0.000428051 +6952 -0.000205227 +6954 -0.000263236 +6956 -7.86915E-05 +6958 -0.000295775 +6960 -0.000232486 +6962 -0.000143043 +6964 -0.000239739 +6966 -0.000219405 +6968 -0.000354447 +6970 9.11346E-05 +6972 -0.00030139 +6974 -0.00035907 +6976 -0.000467083 +6978 -2.82218E-05 +6980 -7.5117E-05 +6982 -0.000384305 +6984 -0.000260206 +6986 -0.000183068 +6988 -0.000267272 +6990 -0.000436363 +6992 0.000209017 +6994 0.000133107 +6996 -0.000135045 +6998 -0.00045575 7000 -5.24841E-05 \ No newline at end of file diff --git a/main.cpp b/main.cpp index e6d3458..53fe4d9 100644 --- a/main.cpp +++ b/main.cpp @@ -1,321 +1,321 @@ -#include -using namespace std; -#include "interactivemie.h" -#include -#include "qtSpectrumDisplay.h" -#include "globals.h" -#include "rtsGUIConsole.h" -#include "PerformanceData.h" -#include -//#include - -PerformanceData PD; - -qtSpectrumDisplay* gpSpectrumDisplay; - -vector > RefSpectrum; -vector SimSpectrum; -vector EtaK; -vector EtaN; -int currentSpec = 0; - -double nuMin = 800; -double nuMax = 4000; -double dNu = 2; - -double aMin = 0; -double aMax = 1; - -double scaleI0 = 1.0; -double refSlope = 0.0; - -bool dispRefSpec = true; -bool dispSimSpec = true; -bool dispSimK = true; -bool dispMatK = true; -bool dispSimN = true; -bool dispMatN = true; -double dispScaleK = 1.0; -double dispScaleN = 1.0; -SpecType dispSimType = AbsorbanceSpecType; -bool dispNormalize = false; -double dispNormFactor = 1.0; - - -//material parameters -double radius = 4.0f; -double baseIR = 1.49f; -double cA = 1.0; -//vector KMaterial; -//vector NMaterial; -bool applyMaterial = true; -vector MaterialList; -int currentMaterial = 0; - -//optical parameters -double cNAi = 0.0; -double cNAo = 0.6; -double oNAi = 0.0; -double oNAo = 0.6; -OpticsType opticsMode = TransmissionOpticsType; -bool pointDetector = false; -int objectiveSamples = 200; - -//fitting parameters -double minMSE = 0.00001; -int maxFitIter = 20; - -void TempSimSpectrum() -{ - SpecPair temp; - for(int i=800; i<4000; i++) - { - temp.nu = i; - temp.A = sin((double)i/200); - SimSpectrum.push_back(temp); - } -} - -void UpdateDisplay(){ - gpSpectrumDisplay->updateGL(); -} - -void LoadMaterial(string fileNameK, string fileNameN, string materialName) -{ - Material newMaterial; - newMaterial.name = materialName; - - vector KMaterial = LoadSpectrum(fileNameK.c_str()); - vector NMaterial = LoadSpectrum(fileNameN.c_str()); - - //make sure that the sizes are the same - if(KMaterial.size() != NMaterial.size()){ - cout<<"Error, material properties don't match."< eta; - //int j; - for(unsigned int i=0; i(NMaterial[i].A, KMaterial[i].A); - newMaterial.eta.push_back(eta); - } - MaterialList.push_back(newMaterial); - -} - -void LoadMaterial(string fileNameK, string materialName){ - - //load the material absorbance - vector KMaterial = LoadSpectrum(fileNameK.c_str()); - vector NMaterial; - //KMaterial = LoadSpectrum("eta_TolueneK.txt"); - - //compute the real IR using Kramers Kronig - //copy the absorbance values into a linear array - double* k = (double*)malloc(sizeof(double) * KMaterial.size()); - double* n = (double*)malloc(sizeof(double) * KMaterial.size()); - for(unsigned int i=0; i eta; - for(unsigned int i=0; i(NMaterial[i].A, KMaterial[i].A); - newMaterial.eta.push_back(eta); - } - - MaterialList.push_back(newMaterial); -} - -void FitDisplay(){ - double minA = 99999.0; - double maxA = -99999.0; - double k, n; - - if(dispSimSpec) - for(unsigned int i=0; i maxA) - maxA = SimSpectrum[i].A; - } - - if(dispRefSpec && RefSpectrum.size() > 0) - for(unsigned int i=0; i maxA) - maxA = RefSpectrum[currentSpec][i].A; - } - if(dispMatK) - for(unsigned int i=0; i maxA) - maxA = k; - } - if(dispSimK) - for(unsigned int i=0; i maxA) - maxA = k; - } - if(dispMatN) - for(unsigned int i=0; i maxA) - maxA = n; - } - if(dispSimN) - for(unsigned int i=0; i maxA) - maxA = n; - } - - aMin = minA; - aMax = maxA; - UpdateDisplay(); -} - -void ChangeAbsorbance(){ - - //compute the real part of the index of refraction - - //copy the absorbance values into a linear array - int nSamples = MaterialList[currentMaterial].eta.size(); - double startNu = MaterialList[currentMaterial].nu.front(); - double endNu = MaterialList[currentMaterial].nu.back(); - double* k = (double*)malloc(sizeof(double) * nSamples); - double* n = (double*)malloc(sizeof(double) * nSamples); - for(int i=0; i= nuMin && nu <= nuMax){ - temp.nu = nu; - temp.A = k[i]; - EtaK.push_back(temp); - //temp.A = NMaterial[i].A; - temp.A = n[i]; - EtaN.push_back(temp); - } - } - - free(k); - free(n); -} - -void SetMaterial() -{ - EtaK.clear(); - EtaN.clear(); - - int nSamples = MaterialList[currentMaterial].eta.size(); - double nu; - SpecPair temp; - - //initialize the current nuMin and nuMax values - nuMin = MaterialList[currentMaterial].nu[0]; - nuMax = nuMin; - for(int i=0; i= nuMin && nu <= nuMax){ - - //update the min and max values for display - if(nu < nuMin) nuMin = nu; - if(nu > nuMax) nuMax = nu; - - temp.nu = nu; - temp.A = MaterialList[currentMaterial].eta[i].imag(); - EtaK.push_back(temp); - temp.A = MaterialList[currentMaterial].eta[i].real(); - EtaN.push_back(temp); - } - cA = 1.0; - -} - - - -int main(int argc, char *argv[]) -{ - - - //load the default project file (any previous optical settings) - LoadState(); - - //load the default materials - LoadMaterial("eta_TolueneK.txt", "eta_TolueneN.txt", "Toluene"); - LoadMaterial("kPMMA.txt", "PMMA"); - //LoadMaterial("../../../../data/materials/rtsSU8_k.txt", "../../../../data/materials/rtsSU8_n.txt", "SU8"); - SetMaterial(); - - //compute the analytical solution for the Mie scattered spectrum - SimulateSpectrum(); - - QApplication a(argc, argv); - InteractiveMie w; - - - w.show(); - - - w.move(0, 0); - QRect frame = w.frameGeometry(); - QRect inside = w.geometry(); - - //activate a console for output - RedirectIOToConsole(0, frame.height(), frame.width()); - - gpSpectrumDisplay = new qtSpectrumDisplay(); - gpSpectrumDisplay->move(frame.width(), 0); - gpSpectrumDisplay->resize(2*inside.height(), inside.height()); - - gpSpectrumDisplay->show(); - - //refresh the UI - w.refreshUI(); - - return a.exec(); -} +#include +using namespace std; +#include "interactivemie.h" +#include +#include "qtSpectrumDisplay.h" +#include "globals.h" +#include "rtsGUIConsole.h" +#include "PerformanceData.h" +#include +//#include + +PerformanceData PD; + +qtSpectrumDisplay* gpSpectrumDisplay; + +vector > RefSpectrum; +vector SimSpectrum; +vector EtaK; +vector EtaN; +int currentSpec = 0; + +double nuMin = 800; +double nuMax = 4000; +double dNu = 2; + +double aMin = 0; +double aMax = 1; + +double scaleI0 = 1.0; +double refSlope = 0.0; + +bool dispRefSpec = true; +bool dispSimSpec = true; +bool dispSimK = true; +bool dispMatK = true; +bool dispSimN = true; +bool dispMatN = true; +double dispScaleK = 1.0; +double dispScaleN = 1.0; +SpecType dispSimType = AbsorbanceSpecType; +bool dispNormalize = false; +double dispNormFactor = 1.0; + + +//material parameters +double radius = 4.0f; +double baseIR = 1.49f; +double cA = 1.0; +//vector KMaterial; +//vector NMaterial; +bool applyMaterial = true; +vector MaterialList; +int currentMaterial = 0; + +//optical parameters +double cNAi = 0.0; +double cNAo = 0.6; +double oNAi = 0.0; +double oNAo = 0.6; +OpticsType opticsMode = TransmissionOpticsType; +bool pointDetector = false; +int objectiveSamples = 200; + +//fitting parameters +double minMSE = 0.00001; +int maxFitIter = 20; + +void TempSimSpectrum() +{ + SpecPair temp; + for(int i=800; i<4000; i++) + { + temp.nu = i; + temp.A = sin((double)i/200); + SimSpectrum.push_back(temp); + } +} + +void UpdateDisplay(){ + gpSpectrumDisplay->updateGL(); +} + +void LoadMaterial(string fileNameK, string fileNameN, string materialName) +{ + Material newMaterial; + newMaterial.name = materialName; + + vector KMaterial = LoadSpectrum(fileNameK.c_str()); + vector NMaterial = LoadSpectrum(fileNameN.c_str()); + + //make sure that the sizes are the same + if(KMaterial.size() != NMaterial.size()){ + cout<<"Error, material properties don't match."< eta; + //int j; + for(unsigned int i=0; i(NMaterial[i].A, KMaterial[i].A); + newMaterial.eta.push_back(eta); + } + MaterialList.push_back(newMaterial); + +} + +void LoadMaterial(string fileNameK, string materialName){ + + //load the material absorbance + vector KMaterial = LoadSpectrum(fileNameK.c_str()); + vector NMaterial; + //KMaterial = LoadSpectrum("eta_TolueneK.txt"); + + //compute the real IR using Kramers Kronig + //copy the absorbance values into a linear array + double* k = (double*)malloc(sizeof(double) * KMaterial.size()); + double* n = (double*)malloc(sizeof(double) * KMaterial.size()); + for(unsigned int i=0; i eta; + for(unsigned int i=0; i(NMaterial[i].A, KMaterial[i].A); + newMaterial.eta.push_back(eta); + } + + MaterialList.push_back(newMaterial); +} + +void FitDisplay(){ + double minA = 99999.0; + double maxA = -99999.0; + double k, n; + + if(dispSimSpec) + for(unsigned int i=0; i maxA) + maxA = SimSpectrum[i].A; + } + + if(dispRefSpec && RefSpectrum.size() > 0) + for(unsigned int i=0; i maxA) + maxA = RefSpectrum[currentSpec][i].A; + } + if(dispMatK) + for(unsigned int i=0; i maxA) + maxA = k; + } + if(dispSimK) + for(unsigned int i=0; i maxA) + maxA = k; + } + if(dispMatN) + for(unsigned int i=0; i maxA) + maxA = n; + } + if(dispSimN) + for(unsigned int i=0; i maxA) + maxA = n; + } + + aMin = minA; + aMax = maxA; + UpdateDisplay(); +} + +void ChangeAbsorbance(){ + + //compute the real part of the index of refraction + + //copy the absorbance values into a linear array + int nSamples = MaterialList[currentMaterial].eta.size(); + double startNu = MaterialList[currentMaterial].nu.front(); + double endNu = MaterialList[currentMaterial].nu.back(); + double* k = (double*)malloc(sizeof(double) * nSamples); + double* n = (double*)malloc(sizeof(double) * nSamples); + for(int i=0; i= nuMin && nu <= nuMax){ + temp.nu = nu; + temp.A = k[i]; + EtaK.push_back(temp); + //temp.A = NMaterial[i].A; + temp.A = n[i]; + EtaN.push_back(temp); + } + } + + free(k); + free(n); +} + +void SetMaterial() +{ + EtaK.clear(); + EtaN.clear(); + + int nSamples = MaterialList[currentMaterial].eta.size(); + double nu; + SpecPair temp; + + //initialize the current nuMin and nuMax values + nuMin = MaterialList[currentMaterial].nu[0]; + nuMax = nuMin; + for(int i=0; i= nuMin && nu <= nuMax){ + + //update the min and max values for display + if(nu < nuMin) nuMin = nu; + if(nu > nuMax) nuMax = nu; + + temp.nu = nu; + temp.A = MaterialList[currentMaterial].eta[i].imag(); + EtaK.push_back(temp); + temp.A = MaterialList[currentMaterial].eta[i].real(); + EtaN.push_back(temp); + } + cA = 1.0; + +} + + + +int main(int argc, char *argv[]) +{ + + + //load the default project file (any previous optical settings) + LoadState(); + + //load the default materials + LoadMaterial("eta_TolueneK.txt", "eta_TolueneN.txt", "Toluene"); + LoadMaterial("kPMMA.txt", "PMMA"); + //LoadMaterial("../../../../data/materials/rtsSU8_k.txt", "../../../../data/materials/rtsSU8_n.txt", "SU8"); + SetMaterial(); + + //compute the analytical solution for the Mie scattered spectrum + SimulateSpectrum(); + + QApplication a(argc, argv); + InteractiveMie w; + + + w.show(); + + + w.move(0, 0); + QRect frame = w.frameGeometry(); + QRect inside = w.geometry(); + + //activate a console for output + RedirectIOToConsole(0, frame.height(), frame.width()); + + gpSpectrumDisplay = new qtSpectrumDisplay(); + gpSpectrumDisplay->move(frame.width(), 0); + gpSpectrumDisplay->resize(2*inside.height(), inside.height()); + + gpSpectrumDisplay->show(); + + //refresh the UI + w.refreshUI(); + + return a.exec(); +} diff --git a/qtSpectrumDisplay.cpp b/qtSpectrumDisplay.cpp index b2a4ee2..4945415 100644 --- a/qtSpectrumDisplay.cpp +++ b/qtSpectrumDisplay.cpp @@ -1,298 +1,298 @@ - #include - #include -#include - - #include - - #include "qtSpectrumDisplay.h" - - qtSpectrumDisplay::qtSpectrumDisplay(QWidget *parent) - : QGLWidget(parent) - { - object = 0; - xRot = 0; - yRot = 0; - zRot = 0; - - qtGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0); - qtPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0); - } - - qtSpectrumDisplay::~qtSpectrumDisplay() - { - makeCurrent(); - glDeleteLists(object, 1); - } - - QSize qtSpectrumDisplay::minimumSizeHint() const - { - return QSize(50, 50); - } - - QSize qtSpectrumDisplay::sizeHint() const - { - return QSize(400, 400); - } - - /*void qtSpectrumDisplay::setXRotation(int angle) - { - normalizeAngle(&angle); - if (angle != xRot) { - xRot = angle; - emit xRotationChanged(angle); - updateGL(); - } - } - - void qtSpectrumDisplay::setYRotation(int angle) - { - normalizeAngle(&angle); - if (angle != yRot) { - yRot = angle; - emit yRotationChanged(angle); - updateGL(); - } - } - - void qtSpectrumDisplay::setZRotation(int angle) - { - normalizeAngle(&angle); - if (angle != zRot) { - zRot = angle; - emit zRotationChanged(angle); - updateGL(); - } - }*/ - - void qtSpectrumDisplay::initializeGL() - { - qglClearColor(qtPurple.dark()); - //object = makeObject(); - glShadeModel(GL_FLAT); - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - } - - void qtSpectrumDisplay::printWavenumber(int xPos) - { - int viewParams[4]; - glGetIntegerv(GL_VIEWPORT, viewParams); - - float a = (float)xPos/(float)viewParams[2]; - - int wn = a * (nuMax - nuMin) + nuMin; - cout< 0) - { - glColor3f(0.5, 0.5, 0.5); - glBegin(GL_LINE_STRIP); - float nu; - for(unsigned int i=0; ipos(); - - if(event->buttons() & Qt::LeftButton) - { - int wn = 0; - printWavenumber(event->x()); - } - } - - void qtSpectrumDisplay::mouseMoveEvent(QMouseEvent *event) - { - int dx = event->x() - lastPos.x(); - int dy = event->y() - lastPos.y(); - /* - if (event->buttons() & Qt::LeftButton) { - setXRotation(xRot + 8 * dy); - setYRotation(yRot + 8 * dx); - } else if (event->buttons() & Qt::RightButton) { - setXRotation(xRot + 8 * dy); - setZRotation(zRot + 8 * dx); - }*/ - lastPos = event->pos(); - } - - /*GLuint qtSpectrumDisplay::makeObject() - { - GLuint list = glGenLists(1); - glNewList(list, GL_COMPILE); - - glBegin(GL_QUADS); - - GLdouble x1 = +0.06; - GLdouble y1 = -0.14; - GLdouble x2 = +0.14; - GLdouble y2 = -0.06; - GLdouble x3 = +0.08; - GLdouble y3 = +0.00; - GLdouble x4 = +0.30; - GLdouble y4 = +0.22; - - quad(x1, y1, x2, y2, y2, x2, y1, x1); - quad(x3, y3, x4, y4, y4, x4, y3, x3); - - extrude(x1, y1, x2, y2); - extrude(x2, y2, y2, x2); - extrude(y2, x2, y1, x1); - extrude(y1, x1, x1, y1); - extrude(x3, y3, x4, y4); - extrude(x4, y4, y4, x4); - extrude(y4, x4, y3, x3); - - const double Pi = 3.14159265358979323846; - const int NumSectors = 200; - - for (int i = 0; i < NumSectors; ++i) { - double angle1 = (i * 2 * Pi) / NumSectors; - GLdouble x5 = 0.30 * sin(angle1); - GLdouble y5 = 0.30 * cos(angle1); - GLdouble x6 = 0.20 * sin(angle1); - GLdouble y6 = 0.20 * cos(angle1); - - double angle2 = ((i + 1) * 2 * Pi) / NumSectors; - GLdouble x7 = 0.20 * sin(angle2); - GLdouble y7 = 0.20 * cos(angle2); - GLdouble x8 = 0.30 * sin(angle2); - GLdouble y8 = 0.30 * cos(angle2); - - quad(x5, y5, x6, y6, x7, y7, x8, y8); - - extrude(x6, y6, x7, y7); - extrude(x8, y8, x5, y5); - } - - glEnd(); - - glEndList(); - return list; - }*/ - - void qtSpectrumDisplay::quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2, - GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4) - { - qglColor(qtGreen); - - glVertex3d(x1, y1, -0.05); - glVertex3d(x2, y2, -0.05); - glVertex3d(x3, y3, -0.05); - glVertex3d(x4, y4, -0.05); - - glVertex3d(x4, y4, +0.05); - glVertex3d(x3, y3, +0.05); - glVertex3d(x2, y2, +0.05); - glVertex3d(x1, y1, +0.05); - } - - /*void qtSpectrumDisplay::extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) - { - qglColor(qtGreen.dark(250 + int(100 * x1))); - - glVertex3d(x1, y1, +0.05); - glVertex3d(x2, y2, +0.05); - glVertex3d(x2, y2, -0.05); - glVertex3d(x1, y1, -0.05); - }*/ - - void qtSpectrumDisplay::normalizeAngle(int *angle) - { - while (*angle < 0) - *angle += 360 * 16; - while (*angle > 360 * 16) - *angle -= 360 * 16; + #include + #include +#include + + #include + + #include "qtSpectrumDisplay.h" + + qtSpectrumDisplay::qtSpectrumDisplay(QWidget *parent) + : QGLWidget(parent) + { + object = 0; + xRot = 0; + yRot = 0; + zRot = 0; + + qtGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0); + qtPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0); + } + + qtSpectrumDisplay::~qtSpectrumDisplay() + { + makeCurrent(); + glDeleteLists(object, 1); + } + + QSize qtSpectrumDisplay::minimumSizeHint() const + { + return QSize(50, 50); + } + + QSize qtSpectrumDisplay::sizeHint() const + { + return QSize(400, 400); + } + + /*void qtSpectrumDisplay::setXRotation(int angle) + { + normalizeAngle(&angle); + if (angle != xRot) { + xRot = angle; + emit xRotationChanged(angle); + updateGL(); + } + } + + void qtSpectrumDisplay::setYRotation(int angle) + { + normalizeAngle(&angle); + if (angle != yRot) { + yRot = angle; + emit yRotationChanged(angle); + updateGL(); + } + } + + void qtSpectrumDisplay::setZRotation(int angle) + { + normalizeAngle(&angle); + if (angle != zRot) { + zRot = angle; + emit zRotationChanged(angle); + updateGL(); + } + }*/ + + void qtSpectrumDisplay::initializeGL() + { + qglClearColor(qtPurple.dark()); + //object = makeObject(); + glShadeModel(GL_FLAT); + glEnable(GL_DEPTH_TEST); + glEnable(GL_CULL_FACE); + } + + void qtSpectrumDisplay::printWavenumber(int xPos) + { + int viewParams[4]; + glGetIntegerv(GL_VIEWPORT, viewParams); + + float a = (float)xPos/(float)viewParams[2]; + + int wn = a * (nuMax - nuMin) + nuMin; + cout< 0) + { + glColor3f(0.5, 0.5, 0.5); + glBegin(GL_LINE_STRIP); + float nu; + for(unsigned int i=0; ipos(); + + if(event->buttons() & Qt::LeftButton) + { + int wn = 0; + printWavenumber(event->x()); + } + } + + void qtSpectrumDisplay::mouseMoveEvent(QMouseEvent *event) + { + int dx = event->x() - lastPos.x(); + int dy = event->y() - lastPos.y(); + /* + if (event->buttons() & Qt::LeftButton) { + setXRotation(xRot + 8 * dy); + setYRotation(yRot + 8 * dx); + } else if (event->buttons() & Qt::RightButton) { + setXRotation(xRot + 8 * dy); + setZRotation(zRot + 8 * dx); + }*/ + lastPos = event->pos(); + } + + /*GLuint qtSpectrumDisplay::makeObject() + { + GLuint list = glGenLists(1); + glNewList(list, GL_COMPILE); + + glBegin(GL_QUADS); + + GLdouble x1 = +0.06; + GLdouble y1 = -0.14; + GLdouble x2 = +0.14; + GLdouble y2 = -0.06; + GLdouble x3 = +0.08; + GLdouble y3 = +0.00; + GLdouble x4 = +0.30; + GLdouble y4 = +0.22; + + quad(x1, y1, x2, y2, y2, x2, y1, x1); + quad(x3, y3, x4, y4, y4, x4, y3, x3); + + extrude(x1, y1, x2, y2); + extrude(x2, y2, y2, x2); + extrude(y2, x2, y1, x1); + extrude(y1, x1, x1, y1); + extrude(x3, y3, x4, y4); + extrude(x4, y4, y4, x4); + extrude(y4, x4, y3, x3); + + const double Pi = 3.14159265358979323846; + const int NumSectors = 200; + + for (int i = 0; i < NumSectors; ++i) { + double angle1 = (i * 2 * Pi) / NumSectors; + GLdouble x5 = 0.30 * sin(angle1); + GLdouble y5 = 0.30 * cos(angle1); + GLdouble x6 = 0.20 * sin(angle1); + GLdouble y6 = 0.20 * cos(angle1); + + double angle2 = ((i + 1) * 2 * Pi) / NumSectors; + GLdouble x7 = 0.20 * sin(angle2); + GLdouble y7 = 0.20 * cos(angle2); + GLdouble x8 = 0.30 * sin(angle2); + GLdouble y8 = 0.30 * cos(angle2); + + quad(x5, y5, x6, y6, x7, y7, x8, y8); + + extrude(x6, y6, x7, y7); + extrude(x8, y8, x5, y5); + } + + glEnd(); + + glEndList(); + return list; + }*/ + + void qtSpectrumDisplay::quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2, + GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4) + { + qglColor(qtGreen); + + glVertex3d(x1, y1, -0.05); + glVertex3d(x2, y2, -0.05); + glVertex3d(x3, y3, -0.05); + glVertex3d(x4, y4, -0.05); + + glVertex3d(x4, y4, +0.05); + glVertex3d(x3, y3, +0.05); + glVertex3d(x2, y2, +0.05); + glVertex3d(x1, y1, +0.05); + } + + /*void qtSpectrumDisplay::extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2) + { + qglColor(qtGreen.dark(250 + int(100 * x1))); + + glVertex3d(x1, y1, +0.05); + glVertex3d(x2, y2, +0.05); + glVertex3d(x2, y2, -0.05); + glVertex3d(x1, y1, -0.05); + }*/ + + void qtSpectrumDisplay::normalizeAngle(int *angle) + { + while (*angle < 0) + *angle += 360 * 16; + while (*angle > 360 * 16) + *angle -= 360 * 16; } \ No newline at end of file diff --git a/qtSpectrumDisplay.h b/qtSpectrumDisplay.h index 376058f..209cfc5 100644 --- a/qtSpectrumDisplay.h +++ b/qtSpectrumDisplay.h @@ -1,52 +1,52 @@ - #ifndef GLWIDGET_H - #define GLWIDGET_H - -#include -#include "globals.h" - - class qtSpectrumDisplay : public QGLWidget - { - Q_OBJECT - - public: - qtSpectrumDisplay(QWidget *parent = 0); - ~qtSpectrumDisplay(); - - QSize minimumSizeHint() const; - QSize sizeHint() const; - - public slots: - /*void setXRotation(int angle); - void setYRotation(int angle); - void setZRotation(int angle);*/ - - signals: - void xRotationChanged(int angle); - void yRotationChanged(int angle); - void zRotationChanged(int angle); - - protected: - void initializeGL(); - void paintGL(); - void resizeGL(int width, int height); - void mousePressEvent(QMouseEvent *event); - void mouseMoveEvent(QMouseEvent *event); - - private: - //GLuint makeObject(); - void quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2, - GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4); - //void extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); - void normalizeAngle(int *angle); - void printWavenumber(int wn); - - GLuint object; - int xRot; - int yRot; - int zRot; - QPoint lastPos; - QColor qtGreen; - QColor qtPurple; - }; - + #ifndef GLWIDGET_H + #define GLWIDGET_H + +#include +#include "globals.h" + + class qtSpectrumDisplay : public QGLWidget + { + Q_OBJECT + + public: + qtSpectrumDisplay(QWidget *parent = 0); + ~qtSpectrumDisplay(); + + QSize minimumSizeHint() const; + QSize sizeHint() const; + + public slots: + /*void setXRotation(int angle); + void setYRotation(int angle); + void setZRotation(int angle);*/ + + signals: + void xRotationChanged(int angle); + void yRotationChanged(int angle); + void zRotationChanged(int angle); + + protected: + void initializeGL(); + void paintGL(); + void resizeGL(int width, int height); + void mousePressEvent(QMouseEvent *event); + void mouseMoveEvent(QMouseEvent *event); + + private: + //GLuint makeObject(); + void quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2, + GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4); + //void extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); + void normalizeAngle(int *angle); + void printWavenumber(int wn); + + GLuint object; + int xRot; + int yRot; + int zRot; + QPoint lastPos; + QColor qtGreen; + QColor qtPurple; + }; + #endif \ No newline at end of file diff --git a/rtsGUIConsole.cpp b/rtsGUIConsole.cpp index 3e2917c..07559fc 100644 --- a/rtsGUIConsole.cpp +++ b/rtsGUIConsole.cpp @@ -1,65 +1,65 @@ -#ifdef WIN32 -#include -#include -#include -#include -#include -#include - -#ifndef _USE_OLD_IOSTREAMS - -using namespace std; -#endif - -// maximum mumber of lines the output console should have - -static const WORD MAX_CONSOLE_LINES = 500; -//#ifdef _DEBUG - -void RedirectIOToConsole(int Xpos, int Ypos, int Width, int Height) -{ - int hConHandle; - long lStdHandle; - CONSOLE_SCREEN_BUFFER_INFO coninfo; - FILE *fp; - // allocate a console for this app - AllocConsole(); - // set the screen buffer to be big enough to let us scroll text - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); - coninfo.dwSize.Y = MAX_CONSOLE_LINES; - SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), - coninfo.dwSize); - // redirect unbuffered STDOUT to the console - lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); - fp = _fdopen( hConHandle, "w" ); - *stdout = *fp; - setvbuf( stdout, NULL, _IONBF, 0 ); - // redirect unbuffered STDIN to the console - lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE); - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); - fp = _fdopen( hConHandle, "r" ); - *stdin = *fp; - setvbuf( stdin, NULL, _IONBF, 0 ); - - // redirect unbuffered STDERR to the console - lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE); - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); - fp = _fdopen( hConHandle, "w" ); - *stderr = *fp; - setvbuf( stderr, NULL, _IONBF, 0 ); - - // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog - // point to console as well - ios::sync_with_stdio(); - //position - MoveWindow(GetConsoleWindow(), Xpos, Ypos, Width, Height, true); -} - -#else -void RedirectIOToConsole(int Xpos, int Ypos, int Width, int Height) -{ -} -#endif - +#ifdef WIN32 +#include +#include +#include +#include +#include +#include + +#ifndef _USE_OLD_IOSTREAMS + +using namespace std; +#endif + +// maximum mumber of lines the output console should have + +static const WORD MAX_CONSOLE_LINES = 500; +//#ifdef _DEBUG + +void RedirectIOToConsole(int Xpos, int Ypos, int Width, int Height) +{ + int hConHandle; + long lStdHandle; + CONSOLE_SCREEN_BUFFER_INFO coninfo; + FILE *fp; + // allocate a console for this app + AllocConsole(); + // set the screen buffer to be big enough to let us scroll text + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); + coninfo.dwSize.Y = MAX_CONSOLE_LINES; + SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), + coninfo.dwSize); + // redirect unbuffered STDOUT to the console + lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); + fp = _fdopen( hConHandle, "w" ); + *stdout = *fp; + setvbuf( stdout, NULL, _IONBF, 0 ); + // redirect unbuffered STDIN to the console + lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE); + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); + fp = _fdopen( hConHandle, "r" ); + *stdin = *fp; + setvbuf( stdin, NULL, _IONBF, 0 ); + + // redirect unbuffered STDERR to the console + lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE); + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); + fp = _fdopen( hConHandle, "w" ); + *stderr = *fp; + setvbuf( stderr, NULL, _IONBF, 0 ); + + // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog + // point to console as well + ios::sync_with_stdio(); + //position + MoveWindow(GetConsoleWindow(), Xpos, Ypos, Width, Height, true); +} + +#else +void RedirectIOToConsole(int Xpos, int Ypos, int Width, int Height) +{ +} +#endif + //End of File \ No newline at end of file diff --git a/rtsGUIConsole.h b/rtsGUIConsole.h index 9eb6c45..d74d721 100644 --- a/rtsGUIConsole.h +++ b/rtsGUIConsole.h @@ -1,13 +1,13 @@ -#ifndef __GUICON_H__ - -#define __GUICON_H__ - -//#ifdef _DEBUG - -void RedirectIOToConsole(int Xpos = 0, int Ypos = 0, int Width = 700, int Height = 400); - -//#endif - -#endif - +#ifndef __GUICON_H__ + +#define __GUICON_H__ + +//#ifdef _DEBUG + +void RedirectIOToConsole(int Xpos = 0, int Ypos = 0, int Width = 700, int Height = 400); + +//#endif + +#endif + /* End of File */ \ No newline at end of file -- libgit2 0.21.4