Commit f095146f8a8052705b1edd70ac7380a8a18aea96

Authored by dmayerich
1 parent bfe3f56b

Case-sensitive errors with the bessel functions.

BESSEL.h deleted
1 -#ifndef bessH  
2 -#define bessH  
3 -#define _USE_MATH_DEFINES  
4 -#include <math.h>  
5 -#include <complex>  
6 -using namespace std;  
7 -#define eps 1e-15  
8 -#define el 0.5772156649015329  
9 -  
10 -int msta1(double x,int mp);  
11 -int msta2(double x,int n,int mp);  
12 -int bessjy01a(double x,double &j0,double &j1,double &y0,double &y1,  
13 - double &j0p,double &j1p,double &y0p,double &y1p);  
14 -int bessjy01b(double x,double &j0,double &j1,double &y0,double &y1,  
15 - double &j0p,double &j1p,double &y0p,double &y1p);  
16 -int bessjyna(int n,double x,int &nm,double *jn,double *yn,  
17 - double *jnp,double *ynp);  
18 -int bessjynb(int n,double x,int &nm,double *jn,double *yn,  
19 - double *jnp,double *ynp);  
20 -int bessjyv(double v,double x,double &vm,double *jv,double *yv,  
21 - double *jvp,double *yvp);  
22 -int bessik01a(double x,double &i0,double &i1,double &k0,double &k1,  
23 - double &i0p,double &i1p,double &k0p,double &k1p);  
24 -int bessik01b(double x,double &i0,double &i1,double &k0,double &k1,  
25 - double &i0p,double &i1p,double &k0p,double &k1p);  
26 -int bessikna(int n,double x,int &nm,double *in,double *kn,  
27 - double *inp,double *knp);  
28 -int bessiknb(int n,double x,int &nm,double *in,double *kn,  
29 - double *inp,double *knp);  
30 -int bessikv(double v,double x,double &vm,double *iv,double *kv,  
31 - double *ivp,double *kvp);  
32 -int cbessjy01(complex<double> z,complex<double> &cj0,complex<double> &cj1,  
33 - complex<double> &cy0,complex<double> &cy1,complex<double> &cj0p,  
34 - complex<double> &cj1p,complex<double> &cy0p,complex<double> &cy1p);  
35 -int cbessjyna(int n,complex<double> z,int &nm,complex<double> *cj,  
36 - complex<double> *cy,complex<double> *cjp,complex<double> *cyp);  
37 -int cbessjynb(int n,complex<double> z,int &nm,complex<double> *cj,  
38 - complex<double> *cy,complex<double> *cjp,complex<double> *cyp);  
39 -int cbessik01(complex<double>z,complex<double>&ci0,complex<double>&ci1,  
40 - complex<double>&ck0,complex<double>&ck1,complex<double>&ci0p,  
41 - complex<double>&ci1p,complex<double>&ck0p,complex<double>&ck1p);  
42 -int cbessikna(int n,complex<double> z,int &nm,complex<double> *ci,  
43 - complex<double> *ck,complex<double> *cip,complex<double> *ckp);  
44 -int cbessiknb(int n,complex<double> z,int &nm,complex<double> *ci,  
45 - complex<double> *ck,complex<double> *cip,complex<double> *ckp);  
46 -int cbessjyva(double v,complex<double> z,double &vm,complex<double>*cjv,  
47 - complex<double>*cyv,complex<double>*cjvp,complex<double>*cyvp);  
48 -int cbessikv(double v,complex<double>z,double &vm,complex<double> *civ,  
49 - complex<double> *ckv,complex<double> *civp,complex<double> *ckvp);  
50 -  
51 -#endif  
BESSIK.CPP deleted
1 -// bessik.cpp -- computation of modified Bessel functions In, Kn  
2 -// and their derivatives. Algorithms and coefficient values from  
3 -// "Computation of Special Functions", Zhang and Jin, John  
4 -// Wiley and Sons, 1996.  
5 -//  
6 -// (C) 2003, C. Bond. All rights reserved.  
7 -//  
8 -#define _USE_MATH_DEFINES  
9 -#include <math.h>  
10 -#include "bessel.h"  
11 -  
12 -double gamma(double x);  
13 -  
14 -int bessik01a(double x,double &i0,double &i1,double &k0,double &k1,  
15 - double &i0p,double &i1p,double &k0p,double &k1p)  
16 -{  
17 - double r,x2,ca,cb,ct,ww,w0,xr,xr2;  
18 - int k,kz;  
19 - static double a[] = {  
20 - 0.125,  
21 - 7.03125e-2,  
22 - 7.32421875e-2,  
23 - 1.1215209960938e-1,  
24 - 2.2710800170898e-1,  
25 - 5.7250142097473e-1,  
26 - 1.7277275025845,  
27 - 6.0740420012735,  
28 - 2.4380529699556e1,  
29 - 1.1001714026925e2,  
30 - 5.5133589612202e2,  
31 - 3.0380905109224e3};  
32 - static double b[] = {  
33 - -0.375,  
34 - -1.171875e-1,  
35 - -1.025390625e-1,  
36 - -1.4419555664063e-1,  
37 - -2.7757644653320e-1,  
38 - -6.7659258842468e-1,  
39 - -1.9935317337513,  
40 - -6.8839142681099,  
41 - -2.7248827311269e1,  
42 - -1.2159789187654e2,  
43 - -6.0384407670507e2,  
44 - -3.3022722944809e3};  
45 - static double a1[] = {  
46 - 0.125,  
47 - 0.2109375,  
48 - 1.0986328125,  
49 - 1.1775970458984e1,  
50 - 2.1461706161499e2,  
51 - 5.9511522710323e3,  
52 - 2.3347645606175e5,  
53 - 1.2312234987631e7};  
54 -  
55 - if (x < 0.0) return 1;  
56 - if (x == 0.0) {  
57 - i0 = 1.0;  
58 - i1 = 0.0;  
59 - k0 = 1e308;  
60 - k1 = 1e308;  
61 - i0p = 0.0;  
62 - i1p = 0.5;  
63 - k0p = -1e308;  
64 - k1p = -1e308;  
65 - return 0;  
66 - }  
67 - x2 = x*x;  
68 - if (x <= 18.0) {  
69 - i0 = 1.0;  
70 - r = 1.0;  
71 - for (k=1;k<=50;k++) {  
72 - r *= 0.25*x2/(k*k);  
73 - i0 += r;  
74 - if (fabs(r/i0) < eps) break;  
75 - }  
76 - i1 = 1.0;  
77 - r = 1.0;  
78 - for (k=1;k<=50;k++) {  
79 - r *= 0.25*x2/(k*(k+1));  
80 - i1 += r;  
81 - if (fabs(r/i1) < eps) break;  
82 - }  
83 - i1 *= 0.5*x;  
84 - }  
85 - else {  
86 - if (x >= 50.0) kz = 7;  
87 - else if (x >= 35.0) kz = 9;  
88 - else kz = 12;  
89 - ca = exp(x)/sqrt(2.0*M_PI*x);  
90 - i0 = 1.0;  
91 - xr = 1.0/x;  
92 - for (k=0;k<kz;k++) {  
93 - i0 += a[k]*pow(xr,k+1);  
94 - }  
95 - i0 *= ca;  
96 - i1 = 1.0;  
97 - for (k=0;k<kz;k++) {  
98 - i1 += b[k]*pow(xr,k+1);  
99 - }  
100 - i1 *= ca;  
101 - }  
102 - if (x <= 9.0) {  
103 - ct = -(log(0.5*x)+el);  
104 - k0 = 0.0;  
105 - w0 = 0.0;  
106 - r = 1.0;  
107 - ww = 0.0;  
108 - for (k=1;k<=50;k++) {  
109 - w0 += 1.0/k;  
110 - r *= 0.25*x2/(k*k);  
111 - k0 += r*(w0+ct);  
112 - if (fabs((k0-ww)/k0) < eps) break;  
113 - ww = k0;  
114 - }  
115 - k0 += ct;  
116 - }  
117 - else {  
118 - cb = 0.5/x;  
119 - xr2 = 1.0/x2;  
120 - k0 = 1.0;  
121 - for (k=0;k<8;k++) {  
122 - k0 += a1[k]*pow(xr2,k+1);  
123 - }  
124 - k0 *= cb/i0;  
125 - }  
126 - k1 = (1.0/x - i1*k0)/i0;  
127 - i0p = i1;  
128 - i1p = i0-i1/x;  
129 - k0p = -k1;  
130 - k1p = -k0-k1/x;  
131 - return 0;  
132 -}  
133 -  
134 -int bessik01b(double x,double &i0,double &i1,double &k0,double &k1,  
135 - double &i0p,double &i1p,double &k0p,double &k1p)  
136 -{  
137 - double t,t2,dtmp,dtmp1;  
138 -  
139 - if (x < 0.0) return 1;  
140 - if (x == 0.0) {  
141 - i0 = 1.0;  
142 - i1 = 0.0;  
143 - k0 = 1e308;  
144 - k1 = 1e308;  
145 - i0p = 0.0;  
146 - i1p = 0.5;  
147 - k0p = -1e308;  
148 - k1p = -1e308;  
149 - return 0;  
150 - }  
151 - if (x < 3.75) {  
152 - t = x/3.75;  
153 - t2 = t*t;  
154 - i0 = (((((0.0045813*t2+0.0360768)*t2+0.2659732)*t2+  
155 - 1.2067492)*t2+3.0899424)*t2+3.5156229)*t2+1.0;  
156 - i1 = x*(((((0.00032411*t2+0.00301532)*t2+0.02658733*t2+  
157 - 0.15084934)*t2+0.51498869)*t2+0.87890594)*t2+0.5);  
158 - }  
159 - else {  
160 - t = 3.75/x;  
161 - dtmp1 = exp(x)/sqrt(x);  
162 - dtmp = (((((((0.00392377*t-0.01647633)*t+0.026355537)*t-0.02057706)*t+  
163 - 0.00916281)*t-0.00157565)*t+0.00225319)*t+0.01328592)*t+0.39894228;  
164 - i0 = dtmp*dtmp1;  
165 - dtmp = (((((((-0.00420059*t+0.01787654)*t-0.02895312)*t+0.02282967)*t-  
166 - 0.01031555)*t+0.00163801)*t-0.00362018)*t-0.03988024)*t+0.39894228;  
167 - i1 = dtmp*dtmp1;  
168 - }  
169 - if (x < 2.0) {  
170 - t = 0.5*x;  
171 - t2 = t*t; // already calculated above  
172 - dtmp = (((((0.0000074*t2+0.0001075)*t2+0.00262698)*t2+0.0348859)*t2+  
173 - 0.23069756)*t2+0.4227842)*t2-0.57721566;  
174 - k0 = dtmp - i0*log(t);  
175 - dtmp = (((((-0.00004686*t2-0.00110404)*t2-0.01919402)*t2-  
176 - 0.18156897)*t2-0.67278578)*t2+0.15443144)*t2+1.0;  
177 - k1 = dtmp/x + i1*log(t);  
178 - }  
179 - else {  
180 - t = 2.0/x;  
181 - dtmp1 = exp(-x)/sqrt(x);  
182 - dtmp = (((((0.00053208*t-0.0025154)*t+0.00587872)*t-0.01062446)*t+  
183 - 0.02189568)*t-0.07832358)*t+1.25331414;  
184 - k0 = dtmp*dtmp1;  
185 - dtmp = (((((-0.00068245*t+0.00325614)*t-0.00780353)*t+0.01504268)*t-  
186 - 0.0365562)*t+0.23498619)*t+1.25331414;  
187 - k1 = dtmp*dtmp1;  
188 - }  
189 - i0p = i1;  
190 - i1p = i0 - i1/x;  
191 - k0p = -k1;  
192 - k1p = -k0 - k1/x;  
193 - return 0;  
194 -}  
195 -int bessikna(int n,double x,int &nm,double *in,double *kn,  
196 - double *inp,double *knp)  
197 -{  
198 - double bi0,bi1,bk0,bk1,g,g0,g1,f,f0,f1,h,h0,h1,s0;  
199 - int k,m,ecode;  
200 -  
201 - if ((x < 0.0) || (n < 0)) return 1;  
202 - if (x < eps) {  
203 - for (k=0;k<=n;k++) {  
204 - in[k] = 0.0;  
205 - kn[k] = 1e308;  
206 - inp[k] = 0.0;  
207 - knp[k] = -1e308;  
208 - }  
209 - in[0] = 1.0;  
210 - inp[1] = 0.5;  
211 - return 0;  
212 - }  
213 - nm = n;  
214 - ecode = bessik01a(x,in[0],in[1],kn[0],kn[1],inp[0],inp[1],knp[0],knp[1]);  
215 - if (n < 2) return 0;  
216 - bi0 = in[0];  
217 - bi1 = in[1];  
218 - bk0 = kn[0];  
219 - bk1 = kn[1];  
220 - if ((x > 40.0) && (n < (int)(0.25*x))) {  
221 - h0 = bi0;  
222 - h1 = bi1;  
223 - for (k=2;k<=n;k++) {  
224 - h = -2.0*(k-1.0)*h1/x+h0;  
225 - in[k] = h;  
226 - h0 = h1;  
227 - h1 = h;  
228 - }  
229 - }  
230 - else {  
231 - m = msta1(x,200);  
232 - if (m < n) nm = m;  
233 - else m = msta2(x,n,15);  
234 - f0 = 0.0;  
235 - f1 = 1.0e-100;  
236 - for (k=m;k>=0;k--) {  
237 - f = 2.0*(k+1.0)*f1/x+f0;  
238 - if (x <= nm) in[k] = f;  
239 - f0 = f1;  
240 - f1 = f;  
241 - }  
242 - s0 = bi0/f;  
243 - for (k=0;k<=m;k++) {  
244 - in[k] *= s0;  
245 - }  
246 - }  
247 - g0 = bk0;  
248 - g1 = bk1;  
249 - for (k=2;k<=nm;k++) {  
250 - g = 2.0*(k-1.0)*g1/x+g0;  
251 - kn[k] = g;  
252 - g0 = g1;  
253 - g1 = g;  
254 - }  
255 - for (k=2;k<=nm;k++) {  
256 - inp[k] = in[k-1]-k*in[k]/x;  
257 - knp[k] = -kn[k-1]-k*kn[k]/x;  
258 - }  
259 - return 0;  
260 -}  
261 -int bessiknb(int n,double x,int &nm,double *in,double *kn,  
262 - double *inp,double *knp)  
263 -{  
264 - double s0,bs,f,f0,f1,sk0,a0,bkl,vt,r,g,g0,g1;  
265 - int k,kz,m,l;  
266 -  
267 - if ((x < 0.0) || (n < 0)) return 1;  
268 - if (x < eps) {  
269 - for (k=0;k<=n;k++) {  
270 - in[k] = 0.0;  
271 - kn[k] = 1e308;  
272 - inp[k] = 0.0;  
273 - knp[k] = -1e308;  
274 - }  
275 - in[0] = 1.0;  
276 - inp[1] = 0.5;  
277 - return 0;  
278 - }  
279 - nm = n;  
280 - if (n == 0) nm = 1;  
281 - m = msta1(x,200);  
282 - if (m < nm) nm = m;  
283 - else m = msta2(x,nm,15);  
284 - bs = 0.0;  
285 - sk0 = 0.0;  
286 - f0 = 0.0;  
287 - f1 = 1.0e-100;  
288 - for (k=m;k>=0;k--) {  
289 - f = 2.0*(k+1.0)*f1/x+f0;  
290 - if (k <= nm) in[k] = f;  
291 - if ((k != 0) && (k == 2*(int)(k/2))) {  
292 - sk0 += 4.0*f/k;  
293 - }  
294 - bs += 2.0*f;  
295 - f0 = f1;  
296 - f1 = f;  
297 - }  
298 - s0 = exp(x)/(bs-f);  
299 - for (k=0;k<=nm;k++) {  
300 - in[k] *= s0;  
301 - }  
302 - if (x <= 8.0) {  
303 - kn[0] = -(log(0.5*x)+el)*in[0]+s0*sk0;  
304 - kn[1] = (1.0/x-in[1]*kn[0])/in[0];  
305 - }  
306 - else {  
307 - a0 = sqrt(M_PI_2/x)*exp(-x);  
308 - if (x >= 200.0) kz = 6;  
309 - else if (x >= 80.0) kz = 8;  
310 - else if (x >= 25.0) kz = 10;  
311 - else kz = 16;  
312 - for (l=0;l<2;l++) {  
313 - bkl = 1.0;  
314 - vt = 4.0*l;  
315 - r = 1.0;  
316 - for (k=1;k<=kz;k++) {  
317 - r *= 0.125*(vt-pow(2.0*k-1.0,2))/(k*x);  
318 - bkl += r;  
319 - }  
320 - kn[l] = a0*bkl;  
321 - }  
322 - }  
323 - g0 = kn[0];  
324 - g1 = kn[1];  
325 - for (k=2;k<=nm;k++) {  
326 - g = 2.0*(k-1.0)*g1/x+g0;  
327 - kn[k] = g;  
328 - g0 = g1;  
329 - g1 = g;  
330 - }  
331 - inp[0] = in[1];  
332 - knp[0] = -kn[1];  
333 - for (k=1;k<=nm;k++) {  
334 - inp[k] = in[k-1]-k*in[k]/x;  
335 - knp[k] = -kn[k-1]-k*kn[k]/x;  
336 - }  
337 - return 0;  
338 -}  
339 -  
340 -// The following program computes the modified Bessel functions  
341 -// Iv(x) and Kv(x) for arbitrary positive order. For negative  
342 -// order use:  
343 -//  
344 -// I-v(x) = Iv(x) + 2/pi sin(v pi) Kv(x)  
345 -// K-v(x) = Kv(x)  
346 -//  
347 -int bessikv(double v,double x,double &vm,double *iv,double *kv,  
348 - double *ivp,double *kvp)  
349 -{  
350 - double x2,v0,piv,vt,a1,v0p,gap,r,bi0,ca,sum;  
351 - double f,f1,f2,ct,cs,wa,gan,ww,w0,v0n;  
352 - double r1,r2,bk0,bk1,bk2,a2,cb;  
353 - int n,k,kz,m;  
354 -  
355 - if ((v < 0.0) || (x < 0.0)) return 1;  
356 - x2 = x*x;  
357 - n = (int)v;  
358 - v0 = v-n;  
359 - if (n == 0) n = 1;  
360 - if (x == 0.0) {  
361 - for (k=0;k<=n;k++) {  
362 - iv[k] = 0.0;  
363 - kv[k] = -1e308;  
364 - ivp[k] = 0.0;  
365 - kvp[k] = 1e308;  
366 - }  
367 - if (v0 == 0.0) {  
368 - iv[0] = 1.0;  
369 - ivp[1] = 0.5;  
370 - }  
371 - vm = v;  
372 - return 0;  
373 - }  
374 - piv = M_PI*v0;  
375 - vt = 4.0*v0*v0;  
376 - if (v0 == 0.0) {  
377 - a1 = 1.0;  
378 - }  
379 - else {  
380 - v0p = 1.0+v0;  
381 - gap = gamma(v0p);  
382 - a1 = pow(0.5*x,v0)/gap;  
383 - }  
384 - if (x >= 50.0) kz = 8;  
385 - else if (x >= 35.0) kz = 10;  
386 - else kz = 14;  
387 - if (x <= 18.0) {  
388 - bi0 = 1.0;  
389 - r = 1.0;  
390 - for (k=1;k<=30;k++) {  
391 - r *= 0.25*x2/(k*(k+v0));  
392 - bi0 += r;  
393 - if (fabs(r/bi0) < eps) break;  
394 - }  
395 - bi0 *= a1;  
396 - }  
397 - else {  
398 - ca = exp(x)/sqrt(2.0*M_PI*x);  
399 - sum = 1.0;  
400 - r = 1.0;  
401 - for (k=1;k<=kz;k++) {  
402 - r *= -0.125*(vt-pow(2.0*k-1.0,2.0))/(k*x);  
403 - sum += r;  
404 - }  
405 - bi0 = ca*sum;  
406 - }  
407 - m = msta1(x,200);  
408 - if (m < n) n = m;  
409 - else m = msta2(x,n,15);  
410 - f2 = 0.0;  
411 - f1 = 1.0e-100;  
412 - for (k=m;k>=0;k--) {  
413 - f = 2.0*(v0+k+1.0)*f1/x+f2;  
414 - if (k <= n) iv[k] = f;  
415 - f2 = f1;  
416 - f1 = f;  
417 - }  
418 - cs = bi0/f;  
419 - for (k=0;k<=n;k++) {  
420 - iv[k] *= cs;  
421 - }  
422 - ivp[0] = v0*iv[0]/x+iv[1];  
423 - for (k=1;k<=n;k++) {  
424 - ivp[k] = -(k+v0)*iv[k]/x+iv[k-1];  
425 - }  
426 - ww = 0.0;  
427 - if (x <= 9.0) {  
428 - if (v0 == 0.0) {  
429 - ct = -log(0.5*x)-el;  
430 - cs = 0.0;  
431 - w0 = 0.0;  
432 - r = 1.0;  
433 - for (k=1;k<=50;k++) {  
434 - w0 += 1.0/k;  
435 - r *= 0.25*x2/(k*k);  
436 - cs += r*(w0+ct);  
437 - wa = fabs(cs);  
438 - if (fabs((wa-ww)/wa) < eps) break;  
439 - ww = wa;  
440 - }  
441 - bk0 = ct+cs;  
442 - }  
443 - else {  
444 - v0n = 1.0-v0;  
445 - gan = gamma(v0n);  
446 - a2 = 1.0/(gan*pow(0.5*x,v0));  
447 - a1 = pow(0.5*x,v0)/gap;  
448 - sum = a2-a1;  
449 - r1 = 1.0;  
450 - r2 = 1.0;  
451 - for (k=1;k<=120;k++) {  
452 - r1 *= 0.25*x2/(k*(k-v0));  
453 - r2 *= 0.25*x2/(k*(k+v0));  
454 - sum += a2*r1-a1*r2;  
455 - wa = fabs(sum);  
456 - if (fabs((wa-ww)/wa) < eps) break;  
457 - ww = wa;  
458 - }  
459 - bk0 = M_PI_2*sum/sin(piv);  
460 - }  
461 - }  
462 - else {  
463 - cb = exp(-x)*sqrt(M_PI_2/x);  
464 - sum = 1.0;  
465 - r = 1.0;  
466 - for (k=1;k<=kz;k++) {  
467 - r *= 0.125*(vt-pow(2.0*k-1.0,2.0))/(k*x);  
468 - sum += r;  
469 - }  
470 - bk0 = cb*sum;  
471 - }  
472 - bk1 = (1.0/x-iv[1]*bk0)/iv[0];  
473 - kv[0] = bk0;  
474 - kv[1] = bk1;  
475 - for (k=2;k<=n;k++) {  
476 - bk2 = 2.0*(v0+k-1.0)*bk1/x+bk0;  
477 - kv[k] = bk2;  
478 - bk0 = bk1;  
479 - bk1 = bk2;  
480 - }  
481 - kvp[0] = v0*kv[0]/x-kv[1];  
482 - for (k=1;k<=n;k++) {  
483 - kvp[k] = -(k+v0)*kv[k]/x-kv[k-1];  
484 - }  
485 - vm = n+v0;  
486 - return 0;  
487 -}  
BESSJY.CPP deleted
1 -// bessjy.cpp -- computation of Bessel functions Jn, Yn and their  
2 -// derivatives. Algorithms and coefficient values from  
3 -// "Computation of Special Functions", Zhang and Jin, John  
4 -// Wiley and Sons, 1996.  
5 -//  
6 -// (C) 2003, C. Bond. All rights reserved.  
7 -//  
8 -// Note that 'math.h' provides (or should provide) values for:  
9 -// pi M_PI  
10 -// 2/pi M_2_PI  
11 -// pi/4 M_PI_4  
12 -// pi/2 M_PI_2  
13 -//  
14 -#define _USE_MATH_DEFINES  
15 -#include <math.h>  
16 -#include "bessel.h"  
17 -  
18 -double gamma(double x);  
19 -//  
20 -// INPUT:  
21 -// double x -- argument of Bessel function  
22 -//  
23 -// OUTPUT (via address pointers):  
24 -// double j0 -- Bessel function of 1st kind, 0th order  
25 -// double j1 -- Bessel function of 1st kind, 1st order  
26 -// double y0 -- Bessel function of 2nd kind, 0th order  
27 -// double y1 -- Bessel function of 2nd kind, 1st order  
28 -// double j0p -- derivative of Bessel function of 1st kind, 0th order  
29 -// double j1p -- derivative of Bessel function of 1st kind, 1st order  
30 -// double y0p -- derivative of Bessel function of 2nd kind, 0th order  
31 -// double y1p -- derivative of Bessel function of 2nd kind, 1st order  
32 -//  
33 -// RETURN:  
34 -// int error code: 0 = OK, 1 = error  
35 -//  
36 -// This algorithm computes the above functions using series expansions.  
37 -//  
38 -int bessjy01a(double x,double &j0,double &j1,double &y0,double &y1,  
39 - double &j0p,double &j1p,double &y0p,double &y1p)  
40 -{  
41 - double x2,r,ec,w0,w1,r0,r1,cs0,cs1;  
42 - double cu,p0,q0,p1,q1,t1,t2;  
43 - int k,kz;  
44 - static double a[] = {  
45 - -7.03125e-2,  
46 - 0.112152099609375,  
47 - -0.5725014209747314,  
48 - 6.074042001273483,  
49 - -1.100171402692467e2,  
50 - 3.038090510922384e3,  
51 - -1.188384262567832e5,  
52 - 6.252951493434797e6,  
53 - -4.259392165047669e8,  
54 - 3.646840080706556e10,  
55 - -3.833534661393944e12,  
56 - 4.854014686852901e14,  
57 - -7.286857349377656e16,  
58 - 1.279721941975975e19};  
59 - static double b[] = {  
60 - 7.32421875e-2,  
61 - -0.2271080017089844,  
62 - 1.727727502584457,  
63 - -2.438052969955606e1,  
64 - 5.513358961220206e2,  
65 - -1.825775547429318e4,  
66 - 8.328593040162893e5,  
67 - -5.006958953198893e7,  
68 - 3.836255180230433e9,  
69 - -3.649010818849833e11,  
70 - 4.218971570284096e13,  
71 - -5.827244631566907e15,  
72 - 9.476288099260110e17,  
73 - -1.792162323051699e20};  
74 - static double a1[] = {  
75 - 0.1171875,  
76 - -0.1441955566406250,  
77 - 0.6765925884246826,  
78 - -6.883914268109947,  
79 - 1.215978918765359e2,  
80 - -3.302272294480852e3,  
81 - 1.276412726461746e5,  
82 - -6.656367718817688e6,  
83 - 4.502786003050393e8,  
84 - -3.833857520742790e10,  
85 - 4.011838599133198e12,  
86 - -5.060568503314727e14,  
87 - 7.572616461117958e16,  
88 - -1.326257285320556e19};  
89 - static double b1[] = {  
90 - -0.1025390625,  
91 - 0.2775764465332031,  
92 - -1.993531733751297,  
93 - 2.724882731126854e1,  
94 - -6.038440767050702e2,  
95 - 1.971837591223663e4,  
96 - -8.902978767070678e5,  
97 - 5.310411010968522e7,  
98 - -4.043620325107754e9,  
99 - 3.827011346598605e11,  
100 - -4.406481417852278e13,  
101 - 6.065091351222699e15,  
102 - -9.833883876590679e17,  
103 - 1.855045211579828e20};  
104 -  
105 - if (x < 0.0) return 1;  
106 - if (x == 0.0) {  
107 - j0 = 1.0;  
108 - j1 = 0.0;  
109 - y0 = -1e308;  
110 - y1 = -1e308;  
111 - j0p = 0.0;  
112 - j1p = 0.5;  
113 - y0p = 1e308;  
114 - y1p = 1e308;  
115 - return 0;  
116 - }  
117 - x2 = x*x;  
118 - if (x <= 12.0) {  
119 - j0 = 1.0;  
120 - r = 1.0;  
121 - for (k=1;k<=30;k++) {  
122 - r *= -0.25*x2/(k*k);  
123 - j0 += r;  
124 - if (fabs(r) < fabs(j0)*1e-15) break;  
125 - }  
126 - j1 = 1.0;  
127 - r = 1.0;  
128 - for (k=1;k<=30;k++) {  
129 - r *= -0.25*x2/(k*(k+1));  
130 - j1 += r;  
131 - if (fabs(r) < fabs(j1)*1e-15) break;  
132 - }  
133 - j1 *= 0.5*x;  
134 - ec = log(0.5*x)+el;  
135 - cs0 = 0.0;  
136 - w0 = 0.0;  
137 - r0 = 1.0;  
138 - for (k=1;k<=30;k++) {  
139 - w0 += 1.0/k;  
140 - r0 *= -0.25*x2/(k*k);  
141 - r = r0 * w0;  
142 - cs0 += r;  
143 - if (fabs(r) < fabs(cs0)*1e-15) break;  
144 - }  
145 - y0 = M_2_PI*(ec*j0-cs0);  
146 - cs1 = 1.0;  
147 - w1 = 0.0;  
148 - r1 = 1.0;  
149 - for (k=1;k<=30;k++) {  
150 - w1 += 1.0/k;  
151 - r1 *= -0.25*x2/(k*(k+1));  
152 - r = r1*(2.0*w1+1.0/(k+1));  
153 - cs1 += r;  
154 - if (fabs(r) < fabs(cs1)*1e-15) break;  
155 - }  
156 - y1 = M_2_PI * (ec*j1-1.0/x-0.25*x*cs1);  
157 - }  
158 - else {  
159 - if (x >= 50.0) kz = 8; // Can be changed to 10  
160 - else if (x >= 35.0) kz = 10; // " " 12  
161 - else kz = 12; // " " 14  
162 - t1 = x-M_PI_4;  
163 - p0 = 1.0;  
164 - q0 = -0.125/x;  
165 - for (k=0;k<kz;k++) {  
166 - p0 += a[k]*pow(x,-2*k-2);  
167 - q0 += b[k]*pow(x,-2*k-3);  
168 - }  
169 - cu = sqrt(M_2_PI/x);  
170 - j0 = cu*(p0*cos(t1)-q0*sin(t1));  
171 - y0 = cu*(p0*sin(t1)+q0*cos(t1));  
172 - t2 = x-0.75*M_PI;  
173 - p1 = 1.0;  
174 - q1 = 0.375/x;  
175 - for (k=0;k<kz;k++) {  
176 - p1 += a1[k]*pow(x,-2*k-2);  
177 - q1 += b1[k]*pow(x,-2*k-3);  
178 - }  
179 - j1 = cu*(p1*cos(t2)-q1*sin(t2));  
180 - y1 = cu*(p1*sin(t2)+q1*cos(t2));  
181 - }  
182 - j0p = -j1;  
183 - j1p = j0-j1/x;  
184 - y0p = -y1;  
185 - y1p = y0-y1/x;  
186 - return 0;  
187 -}  
188 -//  
189 -// INPUT:  
190 -// double x -- argument of Bessel function  
191 -//  
192 -// OUTPUT:  
193 -// double j0 -- Bessel function of 1st kind, 0th order  
194 -// double j1 -- Bessel function of 1st kind, 1st order  
195 -// double y0 -- Bessel function of 2nd kind, 0th order  
196 -// double y1 -- Bessel function of 2nd kind, 1st order  
197 -// double j0p -- derivative of Bessel function of 1st kind, 0th order  
198 -// double j1p -- derivative of Bessel function of 1st kind, 1st order  
199 -// double y0p -- derivative of Bessel function of 2nd kind, 0th order  
200 -// double y1p -- derivative of Bessel function of 2nd kind, 1st order  
201 -//  
202 -// RETURN:  
203 -// int error code: 0 = OK, 1 = error  
204 -//  
205 -// This algorithm computes the functions using polynomial approximations.  
206 -//  
207 -int bessjy01b(double x,double &j0,double &j1,double &y0,double &y1,  
208 - double &j0p,double &j1p,double &y0p,double &y1p)  
209 -{  
210 - double t,t2,dtmp,a0,p0,q0,p1,q1,ta0,ta1;  
211 - if (x < 0.0) return 1;  
212 - if (x == 0.0) {  
213 - j0 = 1.0;  
214 - j1 = 0.0;  
215 - y0 = -1e308;  
216 - y1 = -1e308;  
217 - j0p = 0.0;  
218 - j1p = 0.5;  
219 - y0p = 1e308;  
220 - y1p = 1e308;  
221 - return 0;  
222 - }  
223 - if(x <= 4.0) {  
224 - t = x/4.0;  
225 - t2 = t*t;  
226 - j0 = ((((((-0.5014415e-3*t2+0.76771853e-2)*t2-0.0709253492)*t2+  
227 - 0.4443584263)*t2-1.7777560599)*t2+3.9999973021)*t2  
228 - -3.9999998721)*t2+1.0;  
229 - j1 = t*(((((((-0.1289769e-3*t2+0.22069155e-2)*t2-0.0236616773)*t2+  
230 - 0.1777582922)*t2-0.8888839649)*t2+2.6666660544)*t2-  
231 - 3.999999971)*t2+1.9999999998);  
232 - dtmp = (((((((-0.567433e-4*t2+0.859977e-3)*t2-0.94855882e-2)*t2+  
233 - 0.0772975809)*t2-0.4261737419)*t2+1.4216421221)*t2-  
234 - 2.3498519931)*t2+1.0766115157)*t2+0.3674669052;  
235 - y0 = M_2_PI*log(0.5*x)*j0+dtmp;  
236 - dtmp = (((((((0.6535773e-3*t2-0.0108175626)*t2+0.107657607)*t2-  
237 - 0.7268945577)*t2+3.1261399273)*t2-7.3980241381)*t2+  
238 - 6.8529236342)*t2+0.3932562018)*t2-0.6366197726;  
239 - y1 = M_2_PI*log(0.5*x)*j1+dtmp/x;  
240 - }  
241 - else {  
242 - t = 4.0/x;  
243 - t2 = t*t;  
244 - a0 = sqrt(M_2_PI/x);  
245 - p0 = ((((-0.9285e-5*t2+0.43506e-4)*t2-0.122226e-3)*t2+  
246 - 0.434725e-3)*t2-0.4394275e-2)*t2+0.999999997;  
247 - q0 = t*(((((0.8099e-5*t2-0.35614e-4)*t2+0.85844e-4)*t2-  
248 - 0.218024e-3)*t2+0.1144106e-2)*t2-0.031249995);  
249 - ta0 = x-M_PI_4;  
250 - j0 = a0*(p0*cos(ta0)-q0*sin(ta0));  
251 - y0 = a0*(p0*sin(ta0)+q0*cos(ta0));  
252 - p1 = ((((0.10632e-4*t2-0.50363e-4)*t2+0.145575e-3)*t2  
253 - -0.559487e-3)*t2+0.7323931e-2)*t2+1.000000004;  
254 - q1 = t*(((((-0.9173e-5*t2+0.40658e-4)*t2-0.99941e-4)*t2  
255 - +0.266891e-3)*t2-0.1601836e-2)*t2+0.093749994);  
256 - ta1 = x-0.75*M_PI;  
257 - j1 = a0*(p1*cos(ta1)-q1*sin(ta1));  
258 - y1 = a0*(p1*sin(ta1)+q1*cos(ta1));  
259 - }  
260 - j0p = -j1;  
261 - j1p = j0-j1/x;  
262 - y0p = -y1;  
263 - y1p = y0-y1/x;  
264 - return 0;  
265 -}  
266 -int msta1(double x,int mp)  
267 -{  
268 - double a0,f0,f1,f;  
269 - int i,n0,n1,nn;  
270 -  
271 - a0 = fabs(x);  
272 - n0 = (int)(1.1*a0)+1;  
273 - f0 = 0.5*log10(6.28*n0)-n0*log10(1.36*a0/n0)-mp;  
274 - n1 = n0+5;  
275 - f1 = 0.5*log10(6.28*n1)-n1*log10(1.36*a0/n1)-mp;  
276 - for (i=0;i<20;i++) {  
277 - nn = (int)(n1-(n1-n0)/(1.0-f0/f1));  
278 - f = 0.5*log10(6.28*nn)-nn*log10(1.36*a0/nn)-mp;  
279 - if (abs(nn-n1) < 1) break;  
280 - n0 = n1;  
281 - f0 = f1;  
282 - n1 = nn;  
283 - f1 = f;  
284 - }  
285 - return nn;  
286 -}  
287 -int msta2(double x,int n,int mp)  
288 -{  
289 - double a0,ejn,hmp,f0,f1,f,obj;  
290 - int i,n0,n1,nn;  
291 -  
292 - a0 = fabs(x);  
293 - hmp = 0.5*mp;  
294 - ejn = 0.5*log10(6.28*n)-n*log10(1.36*a0/n);  
295 - if (ejn <= hmp) {  
296 - obj = mp;  
297 - n0 = (int)(1.1*a0);  
298 - if (n0 < 1) n0 = 1;  
299 - }  
300 - else {  
301 - obj = hmp+ejn;  
302 - n0 = n;  
303 - }  
304 - f0 = 0.5*log10(6.28*n0)-n0*log10(1.36*a0/n0)-obj;  
305 - n1 = n0+5;  
306 - f1 = 0.5*log10(6.28*n1)-n1*log10(1.36*a0/n1)-obj;  
307 - for (i=0;i<20;i++) {  
308 - nn = (int)(n1-(n1-n0)/(1.0-f0/f1));  
309 - f = 0.5*log10(6.28*nn)-nn*log10(1.36*a0/nn)-obj;  
310 - if (abs(nn-n1) < 1) break;  
311 - n0 = n1;  
312 - f0 = f1;  
313 - n1 = nn;  
314 - f1 = f;  
315 - }  
316 - return nn+10;  
317 -}  
318 -//  
319 -// INPUT:  
320 -// double x -- argument of Bessel function of 1st and 2nd kind.  
321 -// int n -- order  
322 -//  
323 -// OUPUT:  
324 -//  
325 -// int nm -- highest order actually computed (nm <= n)  
326 -// double jn[] -- Bessel function of 1st kind, orders from 0 to nm  
327 -// double yn[] -- Bessel function of 2nd kind, orders from 0 to nm  
328 -// double j'n[]-- derivative of Bessel function of 1st kind,  
329 -// orders from 0 to nm  
330 -// double y'n[]-- derivative of Bessel function of 2nd kind,  
331 -// orders from 0 to nm  
332 -//  
333 -// Computes Bessel functions of all order up to 'n' using recurrence  
334 -// relations. If 'nm' < 'n' only 'nm' orders are returned.  
335 -//  
336 -int bessjyna(int n,double x,int &nm,double *jn,double *yn,  
337 - double *jnp,double *ynp)  
338 -{  
339 - double bj0,bj1,f,f0,f1,f2,cs;  
340 - int i,k,m,ecode;  
341 -  
342 - nm = n;  
343 - if ((x < 0.0) || (n < 0)) return 1;  
344 - if (x < 1e-15) {  
345 - for (i=0;i<=n;i++) {  
346 - jn[i] = 0.0;  
347 - yn[i] = -1e308;  
348 - jnp[i] = 0.0;  
349 - ynp[i] = 1e308;  
350 - }  
351 - jn[0] = 1.0;  
352 - jnp[1] = 0.5;  
353 - return 0;  
354 - }  
355 - ecode = bessjy01a(x,jn[0],jn[1],yn[0],yn[1],jnp[0],jnp[1],ynp[0],ynp[1]);  
356 - if (n < 2) return 0;  
357 - bj0 = jn[0];  
358 - bj1 = jn[1];  
359 - if (n < (int)0.9*x) {  
360 - for (k=2;k<=n;k++) {  
361 - jn[k] = 2.0*(k-1.0)*bj1/x-bj0;  
362 - bj0 = bj1;  
363 - bj1 = jn[k];  
364 - }  
365 - }  
366 - else {  
367 - m = msta1(x,200);  
368 - if (m < n) nm = m;  
369 - else m = msta2(x,n,15);  
370 - f2 = 0.0;  
371 - f1 = 1.0e-100;  
372 - for (k=m;k>=0;k--) {  
373 - f = 2.0*(k+1.0)/x*f1-f2;  
374 - if (k <= nm) jn[k] = f;  
375 - f2 = f1;  
376 - f1 = f;  
377 - }  
378 - if (fabs(bj0) > fabs(bj1)) cs = bj0/f;  
379 - else cs = bj1/f2;  
380 - for (k=0;k<=nm;k++) {  
381 - jn[k] *= cs;  
382 - }  
383 - }  
384 - for (k=2;k<=nm;k++) {  
385 - jnp[k] = jn[k-1]-k*jn[k]/x;  
386 - }  
387 - f0 = yn[0];  
388 - f1 = yn[1];  
389 - for (k=2;k<=nm;k++) {  
390 - f = 2.0*(k-1.0)*f1/x-f0;  
391 - yn[k] = f;  
392 - f0 = f1;  
393 - f1 = f;  
394 - }  
395 - for (k=2;k<=nm;k++) {  
396 - ynp[k] = yn[k-1]-k*yn[k]/x;  
397 - }  
398 - return 0;  
399 -}  
400 -//  
401 -// Same input and output conventions as above. Different recurrence  
402 -// relations used for 'x' < 300.  
403 -//  
404 -int bessjynb(int n,double x,int &nm,double *jn,double *yn,  
405 - double *jnp,double *ynp)  
406 -{  
407 - double t1,t2,f,f1,f2,bj0,bj1,bjk,by0,by1,cu,s0,su,sv;  
408 - double ec,bs,byk,p0,p1,q0,q1;  
409 - static double a[] = {  
410 - -0.7031250000000000e-1,  
411 - 0.1121520996093750,  
412 - -0.5725014209747314,  
413 - 6.074042001273483};  
414 - static double b[] = {  
415 - 0.7324218750000000e-1,  
416 - -0.2271080017089844,  
417 - 1.727727502584457,  
418 - -2.438052969955606e1};  
419 - static double a1[] = {  
420 - 0.1171875,  
421 - -0.1441955566406250,  
422 - 0.6765925884246826,  
423 - -6.883914268109947};  
424 - static double b1[] = {  
425 - -0.1025390625,  
426 - 0.2775764465332031,  
427 - -1.993531733751297,  
428 - 2.724882731126854e1};  
429 -  
430 - int i,k,m;  
431 - nm = n;  
432 - if ((x < 0.0) || (n < 0)) return 1;  
433 - if (x < 1e-15) {  
434 - for (i=0;i<=n;i++) {  
435 - jn[i] = 0.0;  
436 - yn[i] = -1e308;  
437 - jnp[i] = 0.0;  
438 - ynp[i] = 1e308;  
439 - }  
440 - jn[0] = 1.0;  
441 - jnp[1] = 0.5;  
442 - return 0;  
443 - }  
444 - if (x <= 300.0 || n > (int)(0.9*x)) {  
445 - if (n == 0) nm = 1;  
446 - m = msta1(x,200);  
447 - if (m < nm) nm = m;  
448 - else m = msta2(x,nm,15);  
449 - bs = 0.0;  
450 - su = 0.0;  
451 - sv = 0.0;  
452 - f2 = 0.0;  
453 - f1 = 1.0e-100;  
454 - for (k = m;k>=0;k--) {  
455 - f = 2.0*(k+1.0)/x*f1 - f2;  
456 - if (k <= nm) jn[k] = f;  
457 - if ((k == 2*(int)(k/2)) && (k != 0)) {  
458 - bs += 2.0*f;  
459 -// su += pow(-1,k>>1)*f/(double)k;  
460 - su += (-1)*((k & 2)-1)*f/(double)k;  
461 - }  
462 - else if (k > 1) {  
463 -// sv += pow(-1,k>>1)*k*f/(k*k-1.0);  
464 - sv += (-1)*((k & 2)-1)*(double)k*f/(k*k-1.0);  
465 - }  
466 - f2 = f1;  
467 - f1 = f;  
468 - }  
469 - s0 = bs+f;  
470 - for (k=0;k<=nm;k++) {  
471 - jn[k] /= s0;  
472 - }  
473 - ec = log(0.5*x) +0.5772156649015329;  
474 - by0 = M_2_PI*(ec*jn[0]-4.0*su/s0);  
475 - yn[0] = by0;  
476 - by1 = M_2_PI*((ec-1.0)*jn[1]-jn[0]/x-4.0*sv/s0);  
477 - yn[1] = by1;  
478 - }  
479 - else {  
480 - t1 = x-M_PI_4;  
481 - p0 = 1.0;  
482 - q0 = -0.125/x;  
483 - for (k=0;k<4;k++) {  
484 - p0 += a[k]*pow(x,-2*k-2);  
485 - q0 += b[k]*pow(x,-2*k-3);  
486 - }  
487 - cu = sqrt(M_2_PI/x);  
488 - bj0 = cu*(p0*cos(t1)-q0*sin(t1));  
489 - by0 = cu*(p0*sin(t1)+q0*cos(t1));  
490 - jn[0] = bj0;  
491 - yn[0] = by0;  
492 - t2 = x-0.75*M_PI;  
493 - p1 = 1.0;  
494 - q1 = 0.375/x;  
495 - for (k=0;k<4;k++) {  
496 - p1 += a1[k]*pow(x,-2*k-2);  
497 - q1 += b1[k]*pow(x,-2*k-3);  
498 - }  
499 - bj1 = cu*(p1*cos(t2)-q1*sin(t2));  
500 - by1 = cu*(p1*sin(t2)+q1*cos(t2));  
501 - jn[1] = bj1;  
502 - yn[1] = by1;  
503 - for (k=2;k<=nm;k++) {  
504 - bjk = 2.0*(k-1.0)*bj1/x-bj0;  
505 - jn[k] = bjk;  
506 - bj0 = bj1;  
507 - bj1 = bjk;  
508 - }  
509 - }  
510 - jnp[0] = -jn[1];  
511 - for (k=1;k<=nm;k++) {  
512 - jnp[k] = jn[k-1]-k*jn[k]/x;  
513 - }  
514 - for (k=2;k<=nm;k++) {  
515 - byk = 2.0*(k-1.0)*by1/x-by0;  
516 - yn[k] = byk;  
517 - by0 = by1;  
518 - by1 = byk;  
519 - }  
520 - ynp[0] = -yn[1];  
521 - for (k=1;k<=nm;k++) {  
522 - ynp[k] = yn[k-1]-k*yn[k]/x;  
523 - }  
524 - return 0;  
525 -  
526 -}  
527 -  
528 -// The following routine computes Bessel Jv(x) and Yv(x) for  
529 -// arbitrary positive order (v). For negative order, use:  
530 -//  
531 -// J-v(x) = Jv(x)cos(v pi) - Yv(x)sin(v pi)  
532 -// Y-v(x) = Jv(x)sin(v pi) + Yv(x)cos(v pi)  
533 -//  
534 -int bessjyv(double v,double x,double &vm,double *jv,double *yv,  
535 - double *djv,double *dyv)  
536 -{  
537 - double v0,vl,vg,vv,a,a0,r,x2,bjv0,bjv1,bjvl,f,f0,f1,f2;  
538 - double r0,r1,ck,cs,cs0,cs1,sk,qx,px,byv0,byv1,rp,xk,rq;  
539 - double b,ec,w0,w1,bju0,bju1,pv0,pv1,byvk;  
540 - int j,k,l,m,n,kz;  
541 -  
542 - x2 = x*x;  
543 - n = (int)v;  
544 - v0 = v-n;  
545 - if ((x < 0.0) || (v < 0.0)) return 1;  
546 - if (x < 1e-15) {  
547 - for (k=0;k<=n;k++) {  
548 - jv[k] = 0.0;  
549 - yv[k] = -1e308;  
550 - djv[k] = 0.0;  
551 - dyv[k] = 1e308;  
552 - if (v0 == 0.0) {  
553 - jv[0] = 1.0;  
554 - djv[1] = 0.5;  
555 - }  
556 - else djv[0] = 1e308;  
557 - }  
558 - vm = v;  
559 - return 0;  
560 - }  
561 - if (x <= 12.0) {  
562 - for (l=0;l<2;l++) {  
563 - vl = v0 + l;  
564 - bjvl = 1.0;  
565 - r = 1.0;  
566 - for (k=1;k<=40;k++) {  
567 - r *= -0.25*x2/(k*(k+vl));  
568 - bjvl += r;  
569 - if (fabs(r) < fabs(bjvl)*1e-15) break;  
570 - }  
571 - vg = 1.0 + vl;  
572 - a = pow(0.5*x,vl)/gamma(vg);  
573 - if (l == 0) bjv0 = bjvl*a;  
574 - else bjv1 = bjvl*a;  
575 - }  
576 - }  
577 - else {  
578 - if (x >= 50.0) kz = 8;  
579 - else if (x >= 35.0) kz = 10;  
580 - else kz = 11;  
581 - for (j=0;j<2;j++) {  
582 - vv = 4.0*(j+v0)*(j+v0);  
583 - px = 1.0;  
584 - rp = 1.0;  
585 - for (k=1;k<=kz;k++) {  
586 - rp *= (-0.78125e-2)*(vv-pow(4.0*k-3.0,2.0))*  
587 - (vv-pow(4.0*k-1.0,2.0))/(k*(2.0*k-1.0)*x2);  
588 - px += rp;  
589 - }  
590 - qx = 1.0;  
591 - rq = 1.0;  
592 - for (k=1;k<=kz;k++) {  
593 - rq *= (-0.78125e-2)*(vv-pow(4.0*k-1.0,2.0))*  
594 - (vv-pow(4.0*k+1.0,2.0))/(k*(2.0*k+1.0)*x2);  
595 - qx += rq;  
596 - }  
597 - qx *= 0.125*(vv-1.0)/x;  
598 - xk = x-(0.5*(j+v0)+0.25)*M_PI;  
599 - a0 = sqrt(M_2_PI/x);  
600 - ck = cos(xk);  
601 - sk = sin(xk);  
602 -  
603 - if (j == 0) {  
604 - bjv0 = a0*(px*ck-qx*sk);  
605 - byv0 = a0*(px*sk+qx*ck);  
606 - }  
607 - else if (j == 1) {  
608 - bjv1 = a0*(px*ck-qx*sk);  
609 - byv1 = a0*(px*sk+qx*ck);  
610 - }  
611 - }  
612 - }  
613 - jv[0] = bjv0;  
614 - jv[1] = bjv1;  
615 - djv[0] = v0*jv[0]/x-jv[1];  
616 - djv[1] = -(1.0+v0)*jv[1]/x+jv[0];  
617 - if ((n >= 2) && (n <= (int)(0.9*x))) {  
618 - f0 = bjv0;  
619 - f1 = bjv1;  
620 - for (k=2;k<=n;k++) {  
621 - f = 2.0*(k+v0-1.0)*f1/x-f0;  
622 - jv[k] = f;  
623 - f0 = f1;  
624 - f1 = f;  
625 - }  
626 - }  
627 - else if (n >= 2) {  
628 - m = msta1(x,200);  
629 - if (m < n) n = m;  
630 - else m = msta2(x,n,15);  
631 - f2 = 0.0;  
632 - f1 = 1.0e-100;  
633 - for (k=m;k>=0;k--) {  
634 - f = 2.0*(v0+k+1.0)*f1/x-f2;  
635 - if (k <= n) jv[k] = f;  
636 - f2 = f1;  
637 - f1 = f;  
638 - }  
639 - if (fabs(bjv0) > fabs(bjv1)) cs = bjv0/f;  
640 - else cs = bjv1/f2;  
641 - for (k=0;k<=n;k++) {  
642 - jv[k] *= cs;  
643 - }  
644 - }  
645 - for (k=2;k<=n;k++) {  
646 - djv[k] = -(k+v0)*jv[k]/x+jv[k-1];  
647 - }  
648 - if (x <= 12.0) {  
649 - if (v0 != 0.0) {  
650 - for (l=0;l<2;l++) {  
651 - vl = v0 +l;  
652 - bjvl = 1.0;  
653 - r = 1.0;  
654 - for (k=1;k<=40;k++) {  
655 - r *= -0.25*x2/(k*(k-vl));  
656 - bjvl += r;  
657 - if (fabs(r) < fabs(bjvl)*1e-15) break;  
658 - }  
659 - vg = 1.0-vl;  
660 - b = pow(2.0/x,vl)/gamma(vg);  
661 - if (l == 0) bju0 = bjvl*b;  
662 - else bju1 = bjvl*b;  
663 - }  
664 - pv0 = M_PI*v0;  
665 - pv1 = M_PI*(1.0+v0);  
666 - byv0 = (bjv0*cos(pv0)-bju0)/sin(pv0);  
667 - byv1 = (bjv1*cos(pv1)-bju1)/sin(pv1);  
668 - }  
669 - else {  
670 - ec = log(0.5*x)+el;  
671 - cs0 = 0.0;  
672 - w0 = 0.0;  
673 - r0 = 1.0;  
674 - for (k=1;k<=30;k++) {  
675 - w0 += 1.0/k;  
676 - r0 *= -0.25*x2/(k*k);  
677 - cs0 += r0*w0;  
678 - }  
679 - byv0 = M_2_PI*(ec*bjv0-cs0);  
680 - cs1 = 1.0;  
681 - w1 = 0.0;  
682 - r1 = 1.0;  
683 - for (k=1;k<=30;k++) {  
684 - w1 += 1.0/k;  
685 - r1 *= -0.25*x2/(k*(k+1));  
686 - cs1 += r1*(2.0*w1+1.0/(k+1.0));  
687 - }  
688 - byv1 = M_2_PI*(ec*bjv1-1.0/x-0.25*x*cs1);  
689 - }  
690 - }  
691 - yv[0] = byv0;  
692 - yv[1] = byv1;  
693 - for (k=2;k<=n;k++) {  
694 - byvk = 2.0*(v0+k-1.0)*byv1/x-byv0;  
695 - yv[k] = byvk;  
696 - byv0 = byv1;  
697 - byv1 = byvk;  
698 - }  
699 - dyv[0] = v0*yv[0]/x-yv[1];  
700 - for (k=1;k<=n;k++) {  
701 - dyv[k] = -(k+v0)*yv[k]/x+yv[k-1];  
702 - }  
703 - vm = n + v0;  
704 - return 0;  
705 -}  
706 -  
CBESSIK.CPP deleted
1 -// cbessik.cpp -- complex modified Bessel functions.  
2 -// Algorithms and coefficient values from "Computation of Special  
3 -// Functions", Zhang and Jin, John Wiley and Sons, 1996.  
4 -//  
5 -// (C) 2003, C. Bond. All rights reserved.  
6 -//  
7 -#include <complex>  
8 -using namespace std;  
9 -#include "bessel.h"  
10 -  
11 -static complex<double> cii(0.0,1.0);  
12 -static complex<double> czero(0.0,0.0);  
13 -static complex<double> cone(1.0,0.0);  
14 -  
15 -double gamma(double x);  
16 -  
17 -int cbessik01(complex<double>z,complex<double>&ci0,complex<double>&ci1,  
18 - complex<double>&ck0,complex<double>&ck1,complex<double>&ci0p,  
19 - complex<double>&ci1p,complex<double>&ck0p,complex<double>&ck1p)  
20 -{  
21 - complex<double> z1,z2,zr,zr2,cr,ca,cb,cs,ct,cw;  
22 - double a0,w0;  
23 - int k,kz;  
24 - static double a[] = {  
25 - 0.125,  
26 - 7.03125e-2,  
27 - 7.32421875e-2,  
28 - 1.1215209960938e-1,  
29 - 2.2710800170898e-1,  
30 - 5.7250142097473e-1,  
31 - 1.7277275025845,  
32 - 6.0740420012735,  
33 - 2.4380529699556e1,  
34 - 1.1001714026925e2,  
35 - 5.5133589612202e2,  
36 - 3.0380905109224e3};  
37 - static double b[] = {  
38 - -0.375,  
39 - -1.171875e-1,  
40 - -1.025390625e-1,  
41 - -1.4419555664063e-1,  
42 - -2.7757644653320e-1,  
43 - -6.7659258842468e-1,  
44 - -1.9935317337513,  
45 - -6.8839142681099,  
46 - -2.7248827311269e1,  
47 - -1.2159789187654e2,  
48 - -6.0384407670507e2,  
49 - -3.3022722944809e3};  
50 - static double a1[] = {  
51 - 0.125,  
52 - 0.2109375,  
53 - 1.0986328125,  
54 - 1.1775970458984e1,  
55 - 2.1461706161499e2,  
56 - 5.9511522710323e3,  
57 - 2.3347645606175e5,  
58 - 1.2312234987631e7,  
59 - 8.401390346421e08,  
60 - 7.2031420482627e10};  
61 -  
62 - a0 = abs(z);  
63 - z2 = z*z;  
64 - z1 = z;  
65 - if (a0 == 0.0) {  
66 - ci0 = cone;  
67 - ci1 = czero;  
68 - ck0 = complex<double> (1e308,0);  
69 - ck1 = complex<double> (1e308,0);  
70 - ci0p = czero;  
71 - ci1p = complex<double>(0.5,0.0);  
72 - ck0p = complex<double>(-1e308,0);  
73 - ck1p = complex<double>(-1e308,0);  
74 - return 0;  
75 - }  
76 - if (real(z) < 0.0) z1 = -z;  
77 - if (a0 <= 18.0) {  
78 - ci0 = cone;  
79 - cr = cone;  
80 - for (k=1;k<=50;k++) {  
81 - cr *= 0.25*z2/(double)(k*k);  
82 - ci0 += cr;  
83 - if (abs(cr/ci0) < eps) break;  
84 - }  
85 - ci1 = cone;  
86 - cr = cone;  
87 - for (k=1;k<=50;k++) {  
88 - cr *= 0.25*z2/(double)(k*(k+1.0));  
89 - ci1 += cr;  
90 - if (abs(cr/ci1) < eps) break;  
91 - }  
92 - ci1 *= 0.5*z1;  
93 - }  
94 - else {  
95 - if (a0 >= 50.0) kz = 7;  
96 - else if (a0 >= 35.0) kz = 9;  
97 - else kz = 12;  
98 - ca = exp(z1)/sqrt(2.0*M_PI*z1);  
99 - ci0 = cone;  
100 - zr = 1.0/z1;  
101 - for (k=0;k<kz;k++) {  
102 - ci0 += a[k]*pow(zr,k+1.0);  
103 - }  
104 - ci0 *= ca;  
105 - ci1 = cone;  
106 - for (k=0;k<kz;k++) {  
107 - ci1 += b[k]*pow(zr,k+1.0);  
108 - }  
109 - ci1 *= ca;  
110 - }  
111 - if (a0 <= 9.0) {  
112 - cs = czero;  
113 - ct = -log(0.5*z1)-el;  
114 - w0 = 0.0;  
115 - cr = cone;  
116 - for (k=1;k<=50;k++) {  
117 - w0 += 1.0/k;  
118 - cr *= 0.25*z2/(double)(k*k);  
119 - cs += cr*(w0+ct);  
120 - if (abs((cs-cw)/cs) < eps) break;  
121 - cw = cs;  
122 - }  
123 - ck0 = ct+cs;  
124 - }  
125 - else {  
126 - cb = 0.5/z1;  
127 - zr2 = 1.0/z2;  
128 - ck0 = cone;  
129 - for (k=0;k<10;k++) {  
130 - ck0 += a1[k]*pow(zr2,k+1.0);  
131 - }  
132 - ck0 *= cb/ci0;  
133 - }  
134 - ck1 = (1.0/z1 - ci1*ck0)/ci0;  
135 - if (real(z) < 0.0) {  
136 - if (imag(z) < 0.0) {  
137 - ck0 += cii*M_PI*ci0;  
138 - ck1 = -ck1+cii*M_PI*ci1;  
139 - }  
140 - else if (imag(z) > 0.0) {  
141 - ck0 -= cii*M_PI*ci0;  
142 - ck1 = -ck1-cii*M_PI*ci1;  
143 - }  
144 - ci1 = -ci1;  
145 - }  
146 - ci0p = ci1;  
147 - ci1p = ci0-1.0*ci1/z;  
148 - ck0p = -ck1;  
149 - ck1p = -ck0-1.0*ck1/z;  
150 - return 0;  
151 -}  
152 -int cbessikna(int n,complex<double> z,int &nm,complex<double> *ci,  
153 - complex<double> *ck,complex<double> *cip,complex<double> *ckp)  
154 -{  
155 - complex<double> ci0,ci1,ck0,ck1,ckk,cf,cf1,cf2,cs;  
156 - double a0;  
157 - int k,m,ecode;  
158 - a0 = abs(z);  
159 - nm = n;  
160 - if (a0 < 1.0e-100) {  
161 - for (k=0;k<=n;k++) {  
162 - ci[k] = czero;  
163 - ck[k] = complex<double>(-1e308,0);  
164 - cip[k] = czero;  
165 - ckp[k] = complex<double>(1e308,0);  
166 - }  
167 - ci[0] = cone;  
168 - cip[1] = complex<double>(0.5,0.0);  
169 - return 0;  
170 - }  
171 - ecode = cbessik01(z,ci[0],ci[1],ck[0],ck[1],cip[0],cip[1],ckp[0],ckp[1]);  
172 - if (n < 2) return 0;  
173 - ci0 = ci[0];  
174 - ci1 = ci[1];  
175 - ck0 = ck[0];  
176 - ck1 = ck[1];  
177 - m = msta1(a0,200);  
178 - if (m < n) nm = m;  
179 - else m = msta2(a0,n,15);  
180 - cf2 = czero;  
181 - cf1 = complex<double>(1.0e-100,0.0);  
182 - for (k=m;k>=0;k--) {  
183 - cf = 2.0*(k+1.0)*cf1/z+cf2;  
184 - if (k <= nm) ci[k] = cf;  
185 - cf2 = cf1;  
186 - cf1 = cf;  
187 - }  
188 - cs = ci0/cf;  
189 - for (k=0;k<=nm;k++) {  
190 - ci[k] *= cs;  
191 - }  
192 - for (k=2;k<=nm;k++) {  
193 - if (abs(ci[k-1]) > abs(ci[k-2])) {  
194 - ckk = (1.0/z-ci[k]*ck[k-1])/ci[k-1];  
195 - }  
196 - else {  
197 - ckk = (ci[k]*ck[k-2]+2.0*(k-1.0)/(z*z))/ci[k-2];  
198 - }  
199 - ck[k] = ckk;  
200 - }  
201 - for (k=2;k<=nm;k++) {  
202 - cip[k] = ci[k-1]-(double)k*ci[k]/z;  
203 - ckp[k] = -ck[k-1]-(double)k*ck[k]/z;  
204 - }  
205 - return 0;  
206 -}  
207 -int cbessiknb(int n,complex<double> z,int &nm,complex<double> *ci,  
208 - complex<double> *ck,complex<double> *cip,complex<double> *ckp)  
209 -{  
210 - complex<double> z1,cbs,csk0,cf,cf0,cf1,ca0,cbkl;  
211 - complex<double> cg,cg0,cg1,cs0,cs,cr;  
212 - double a0,vt,fac;  
213 - int k,kz,l,m;  
214 -  
215 - a0 = abs(z);  
216 - nm = n;  
217 - if (a0 < 1.0e-100) {  
218 - for (k=0;k<=n;k++) {  
219 - ci[k] = czero;  
220 - ck[k] = complex<double>(1e308,0);  
221 - cip[k] = czero;  
222 - ckp[k] = complex<double>(-1e308,0);  
223 - }  
224 - ci[0] = complex<double>(1.0,0.0);  
225 - cip[1] = complex<double>(0.5,0.0);  
226 - return 0;  
227 - }  
228 - z1 = z;  
229 - if (real(z) < 0.0) z1 = -z;  
230 - if (n == 0) nm = 1;  
231 - m = msta1(a0,200);  
232 - if (m < nm) nm = m;  
233 - else m = msta2(a0,nm,15);  
234 - cbs = czero;  
235 - csk0 = czero;  
236 - cf0 = czero;  
237 - cf1 = complex<double>(1.0e-100,0.0);  
238 - for (k=m;k>=0;k--) {  
239 - cf = 2.0*(k+1.0)*cf1/z1+cf0;  
240 - if (k <=nm) ci[k] = cf;  
241 - if ((k != 0) && (k == 2*(k>>1))) csk0 += 4.0*cf/(double)k;  
242 - cbs += 2.0*cf;  
243 - cf0 = cf1;  
244 - cf1 = cf;  
245 - }  
246 - cs0 = exp(z1)/(cbs-cf);  
247 - for (k=0;k<=nm;k++) {  
248 - ci[k] *= cs0;  
249 - }  
250 - if (a0 <= 9.0) {  
251 - ck[0] = -(log(0.5*z1)+el)*ci[0]+cs0*csk0;  
252 - ck[1] = (1.0/z1-ci[1]*ck[0])/ci[0];  
253 - }  
254 - else {  
255 - ca0 = sqrt(M_PI_2/z1)*exp(-z1);  
256 - if (a0 >= 200.0) kz = 6;  
257 - else if (a0 >= 80.0) kz = 8;  
258 - else if (a0 >= 25.0) kz = 10;  
259 - else kz = 16;  
260 - for (l=0;l<2;l++) {  
261 - cbkl = cone;  
262 - vt = 4.0*l;  
263 - cr = cone;  
264 - for (k=1;k<=kz;k++) {  
265 - cr *= 0.125*(vt-pow(2.0*k-1.0,2.0))/((double)k*z1);  
266 - cbkl += cr;  
267 - }  
268 - ck[l] = ca0*cbkl;  
269 - }  
270 - }  
271 - cg0 = ck[0];  
272 - cg1 = ck[1];  
273 - for (k=2;k<=nm;k++) {  
274 - cg = 2.0*(k-1.0)*cg1/z1+cg0;  
275 - ck[k] = cg;  
276 - cg0 = cg1;  
277 - cg1 = cg;  
278 - }  
279 - if (real(z) < 0.0) {  
280 - fac = 1.0;  
281 - for (k=0;k<=nm;k++) {  
282 - if (imag(z) < 0.0) {  
283 - ck[k] = fac*ck[k]+cii*M_PI*ci[k];  
284 - }  
285 - else {  
286 - ck[k] = fac*ck[k]-cii*M_PI*ci[k];  
287 - }  
288 - ci[k] *= fac;  
289 - fac = -fac;  
290 - }  
291 - }  
292 - cip[0] = ci[1];  
293 - ckp[0] = -ck[1];  
294 - for (k=1;k<=nm;k++) {  
295 - cip[k] = ci[k-1]-(double)k*ci[k]/z;  
296 - ckp[k] = -ck[k-1]-(double)k*ck[k]/z;  
297 - }  
298 - return 0;  
299 -}  
300 -int cbessikv(double v,complex<double>z,double &vm,complex<double> *civ,  
301 - complex<double> *ckv,complex<double> *civp,complex<double> *ckvp)  
302 -{  
303 - complex<double> z1,z2,ca1,ca,cs,cr,ci0,cbi0,cf,cf1,cf2;  
304 - complex<double> ct,cp,cbk0,ca2,cr1,cr2,csu,cws,cb;  
305 - complex<double> cg0,cg1,cgk,cbk1,cvk;  
306 - double a0,v0,v0p,v0n,vt,w0,piv,gap,gan;  
307 - int m,n,k,kz;  
308 -  
309 - a0 = abs(z);  
310 - z1 = z;  
311 - z2 = z*z;  
312 - n = (int)v;  
313 - v0 = v-n;  
314 - piv = M_PI*v0;  
315 - vt = 4.0*v0*v0;  
316 - if (n == 0) n = 1;  
317 - if (a0 < 1e-100) {  
318 - for (k=0;k<=n;k++) {  
319 - civ[k] = czero;  
320 - ckv[k] = complex<double>(-1e308,0);  
321 - civp[k] = czero;  
322 - ckvp[k] = complex<double>(1e308,0);  
323 - }  
324 - if (v0 == 0.0) {  
325 - civ[0] = cone;  
326 - civp[1] = complex<double> (0.5,0.0);  
327 - }  
328 - vm = v;  
329 - return 0;  
330 - }  
331 - if (a0 >= 50.0) kz = 8;  
332 - else if (a0 >= 35.0) kz = 10;  
333 - else kz = 14;  
334 - if (real(z) <= 0.0) z1 = -z;  
335 - if (a0 < 18.0) {  
336 - if (v0 == 0.0) {  
337 - ca1 = cone;  
338 - }  
339 - else {  
340 - v0p = 1.0+v0;  
341 - gap = gamma(v0p);  
342 - ca1 = pow(0.5*z1,v0)/gap;  
343 - }  
344 - ci0 = cone;  
345 - cr = cone;  
346 - for (k=1;k<=50;k++) {  
347 - cr *= 0.25*z2/(k*(k+v0));  
348 - ci0 += cr;  
349 - if (abs(cr/ci0) < eps) break;  
350 - }  
351 - cbi0 = ci0*ca1;  
352 - }  
353 - else {  
354 - ca = exp(z1)/sqrt(2.0*M_PI*z1);  
355 - cs = cone;  
356 - cr = cone;  
357 - for (k=1;k<=kz;k++) {  
358 - cr *= -0.125*(vt-pow(2.0*k-1.0,2.0))/((double)k*z1);  
359 - cs += cr;  
360 - }  
361 - cbi0 = ca*cs;  
362 - }  
363 - m = msta1(a0,200);  
364 - if (m < n) n = m;  
365 - else m = msta2(a0,n,15);  
366 - cf2 = czero;  
367 - cf1 = complex<double>(1.0e-100,0.0);  
368 - for (k=m;k>=0;k--) {  
369 - cf = 2.0*(v0+k+1.0)*cf1/z1+cf2;  
370 - if (k <= n) civ[k] = cf;  
371 - cf2 = cf1;  
372 - cf1 = cf;  
373 - }  
374 - cs = cbi0/cf;  
375 - for (k=0;k<=n;k++) {  
376 - civ[k] *= cs;  
377 - }  
378 - if (a0 <= 9.0) {  
379 - if (v0 == 0.0) {  
380 - ct = -log(0.5*z1)-el;  
381 - cs = czero;  
382 - w0 = 0.0;  
383 - cr = cone;  
384 - for (k=1;k<=50;k++) {  
385 - w0 += 1.0/k;  
386 - cr *= 0.25*z2/(double)(k*k);  
387 - cp = cr*(w0+ct);  
388 - cs += cp;  
389 - if ((k >= 10) && (abs(cp/cs) < eps)) break;  
390 - }  
391 - cbk0 = ct+cs;  
392 - }  
393 - else {  
394 - v0n = 1.0-v0;  
395 - gan = gamma(v0n);  
396 - ca2 = 1.0/(gan*pow(0.5*z1,v0));  
397 - ca1 = pow(0.5*z1,v0)/gap;  
398 - csu = ca2-ca1;  
399 - cr1 = cone;  
400 - cr2 = cone;  
401 - cws = czero;  
402 - for (k=1;k<=50;k++) {  
403 - cr1 *= 0.25*z2/(k*(k-v0));  
404 - cr2 *= 0.25*z2/(k*(k+v0));  
405 - csu += ca2*cr1-ca1*cr2;  
406 - if ((k >= 10) && (abs((cws-csu)/csu) < eps)) break;  
407 - cws = csu;  
408 - }  
409 - cbk0 = csu*M_PI_2/sin(piv);  
410 - }  
411 - }  
412 - else {  
413 - cb = exp(-z1)*sqrt(M_PI_2/z1);  
414 - cs = cone;  
415 - cr = cone;  
416 - for (k=1;k<=kz;k++) {  
417 - cr *= 0.125*(vt-pow(2.0*k-1.0,2.0))/((double)k*z1);  
418 - cs += cr;  
419 - }  
420 - cbk0 = cb*cs;  
421 - }  
422 - cbk1 = (1.0/z1-civ[1]*cbk0)/civ[0];  
423 - ckv[0] = cbk0;  
424 - ckv[1] = cbk1;  
425 - cg0 = cbk0;  
426 - cg1 = cbk1;  
427 - for (k=2;k<=n;k++) {  
428 - cgk = 2.0*(v0+k-1.0)*cg1/z1+cg0;  
429 - ckv[k] = cgk;  
430 - cg0 = cg1;  
431 - cg1 = cgk;  
432 - }  
433 - if (real(z) < 0.0) {  
434 - for (k=0;k<=n;k++) {  
435 - cvk = exp((k+v0)*M_PI*cii);  
436 - if (imag(z) < 0.0) {  
437 - ckv[k] = cvk*ckv[k]+M_PI*cii*civ[k];  
438 - civ[k] /= cvk;  
439 - }  
440 - else if (imag(z) > 0.0) {  
441 - ckv[k] = ckv[k]/cvk-M_PI*cii*civ[k];  
442 - civ[k] *= cvk;  
443 - }  
444 - }  
445 - }  
446 - civp[0] = v0*civ[0]/z+civ[1];  
447 - ckvp[0] = v0*ckv[0]/z-ckv[1];  
448 - for (k=1;k<=n;k++) {  
449 - civp[k] = -(k+v0)*civ[k]/z+civ[k-1];  
450 - ckvp[k] = -(k+v0)*ckv[k]/z-ckv[k-1];  
451 - }  
452 - vm = n+v0;  
453 - return 0;  
454 -}  
CBESSJY.CPP deleted
1 -// cbessjy.cpp -- complex Bessel functions.  
2 -// Algorithms and coefficient values from "Computation of Special  
3 -// Functions", Zhang and Jin, John Wiley and Sons, 1996.  
4 -//  
5 -// (C) 2003, C. Bond. All rights reserved.  
6 -//  
7 -#include <complex>  
8 -using namespace std;  
9 -#include "bessel.h"  
10 -double gamma(double);  
11 -  
12 -static complex<double> cii(0.0,1.0);  
13 -static complex<double> cone(1.0,0.0);  
14 -static complex<double> czero(0.0,0.0);  
15 -  
16 -int cbessjy01(complex<double> z,complex<double> &cj0,complex<double> &cj1,  
17 - complex<double> &cy0,complex<double> &cy1,complex<double> &cj0p,  
18 - complex<double> &cj1p,complex<double> &cy0p,complex<double> &cy1p)  
19 -{  
20 - complex<double> z1,z2,cr,cp,cs,cp0,cq0,cp1,cq1,ct1,ct2,cu;  
21 - double a0,w0,w1;  
22 - int k,kz;  
23 -  
24 - static double a[] = {  
25 - -7.03125e-2,  
26 - 0.112152099609375,  
27 - -0.5725014209747314,  
28 - 6.074042001273483,  
29 - -1.100171402692467e2,  
30 - 3.038090510922384e3,  
31 - -1.188384262567832e5,  
32 - 6.252951493434797e6,  
33 - -4.259392165047669e8,  
34 - 3.646840080706556e10,  
35 - -3.833534661393944e12,  
36 - 4.854014686852901e14,  
37 - -7.286857349377656e16,  
38 - 1.279721941975975e19};  
39 - static double b[] = {  
40 - 7.32421875e-2,  
41 - -0.2271080017089844,  
42 - 1.727727502584457,  
43 - -2.438052969955606e1,  
44 - 5.513358961220206e2,  
45 - -1.825775547429318e4,  
46 - 8.328593040162893e5,  
47 - -5.006958953198893e7,  
48 - 3.836255180230433e9,  
49 - -3.649010818849833e11,  
50 - 4.218971570284096e13,  
51 - -5.827244631566907e15,  
52 - 9.476288099260110e17,  
53 - -1.792162323051699e20};  
54 - static double a1[] = {  
55 - 0.1171875,  
56 - -0.1441955566406250,  
57 - 0.6765925884246826,  
58 - -6.883914268109947,  
59 - 1.215978918765359e2,  
60 - -3.302272294480852e3,  
61 - 1.276412726461746e5,  
62 - -6.656367718817688e6,  
63 - 4.502786003050393e8,  
64 - -3.833857520742790e10,  
65 - 4.011838599133198e12,  
66 - -5.060568503314727e14,  
67 - 7.572616461117958e16,  
68 - -1.326257285320556e19};  
69 - static double b1[] = {  
70 - -0.1025390625,  
71 - 0.2775764465332031,  
72 - -1.993531733751297,  
73 - 2.724882731126854e1,  
74 - -6.038440767050702e2,  
75 - 1.971837591223663e4,  
76 - -8.902978767070678e5,  
77 - 5.310411010968522e7,  
78 - -4.043620325107754e9,  
79 - 3.827011346598605e11,  
80 - -4.406481417852278e13,  
81 - 6.065091351222699e15,  
82 - -9.833883876590679e17,  
83 - 1.855045211579828e20};  
84 -  
85 - a0 = abs(z);  
86 - z2 = z*z;  
87 - z1 = z;  
88 - if (a0 == 0.0) {  
89 - cj0 = cone;  
90 - cj1 = czero;  
91 - cy0 = complex<double>(-1e308,0);  
92 - cy1 = complex<double>(-1e308,0);  
93 - cj0p = czero;  
94 - cj1p = complex<double>(0.5,0.0);  
95 - cy0p = complex<double>(1e308,0);  
96 - cy1p = complex<double>(1e308,0);  
97 - return 0;  
98 - }  
99 - if (real(z) < 0.0) z1 = -z;  
100 - if (a0 <= 12.0) {  
101 - cj0 = cone;  
102 - cr = cone;  
103 - for (k=1;k<=40;k++) {  
104 - cr *= -0.25*z2/(double)(k*k);  
105 - cj0 += cr;  
106 - if (abs(cr) < abs(cj0)*eps) break;  
107 - }  
108 - cj1 = cone;  
109 - cr = cone;  
110 - for (k=1;k<=40;k++) {  
111 - cr *= -0.25*z2/(k*(k+1.0));  
112 - cj1 += cr;  
113 - if (abs(cr) < abs(cj1)*eps) break;  
114 - }  
115 - cj1 *= 0.5*z1;  
116 - w0 = 0.0;  
117 - cr = cone;  
118 - cs = czero;  
119 - for (k=1;k<=40;k++) {  
120 - w0 += 1.0/k;  
121 - cr *= -0.25*z2/(double)(k*k);  
122 - cp = cr*w0;  
123 - cs += cp;  
124 - if (abs(cp) < abs(cs)*eps) break;  
125 - }  
126 - cy0 = M_2_PI*((log(0.5*z1)+el)*cj0-cs);  
127 - w1 = 0.0;  
128 - cr = cone;  
129 - cs = cone;  
130 - for (k=1;k<=40;k++) {  
131 - w1 += 1.0/k;  
132 - cr *= -0.25*z2/(k*(k+1.0));  
133 - cp = cr*(2.0*w1+1.0/(k+1.0));  
134 - cs += cp;  
135 - if (abs(cp) < abs(cs)*eps) break;  
136 - }  
137 - cy1 = M_2_PI*((log(0.5*z1)+el)*cj1-1.0/z1-0.25*z1*cs);  
138 - }  
139 - else {  
140 - if (a0 >= 50.0) kz = 8; // can be changed to 10  
141 - else if (a0 >= 35.0) kz = 10; // " " " 12  
142 - else kz = 12; // " " " 14  
143 - ct1 = z1 - M_PI_4;  
144 - cp0 = cone;  
145 - for (k=0;k<kz;k++) {  
146 - cp0 += a[k]*pow(z1,-2.0*k-2.0);  
147 - }  
148 - cq0 = -0.125/z1;  
149 - for (k=0;k<kz;k++) {  
150 - cq0 += b[k]*pow(z1,-2.0*k-3.0);  
151 - }  
152 - cu = sqrt(M_2_PI/z1);  
153 - cj0 = cu*(cp0*cos(ct1)-cq0*sin(ct1));  
154 - cy0 = cu*(cp0*sin(ct1)+cq0*cos(ct1));  
155 - ct2 = z1 - 0.75*M_PI;  
156 - cp1 = cone;  
157 - for (k=0;k<kz;k++) {  
158 - cp1 += a1[k]*pow(z1,-2.0*k-2.0);  
159 - }  
160 - cq1 = 0.375/z1;  
161 - for (k=0;k<kz;k++) {  
162 - cq1 += b1[k]*pow(z1,-2.0*k-3.0);  
163 - }  
164 - cj1 = cu*(cp1*cos(ct2)-cq1*sin(ct2));  
165 - cy1 = cu*(cp1*sin(ct2)+cq1*cos(ct2));  
166 - }  
167 - if (real(z) < 0.0) {  
168 - if (imag(z) < 0.0) {  
169 - cy0 -= 2.0*cii*cj0;  
170 - cy1 = -(cy1-2.0*cii*cj1);  
171 - }  
172 - else if (imag(z) > 0.0) {  
173 - cy0 += 2.0*cii*cj0;  
174 - cy1 = -(cy1+2.0*cii*cj1);  
175 - }  
176 - cj1 = -cj1;  
177 - }  
178 - cj0p = -cj1;  
179 - cj1p = cj0-cj1/z;  
180 - cy0p = -cy1;  
181 - cy1p = cy0-cy1/z;  
182 - return 0;  
183 -}  
184 -  
185 -int cbessjyna(int n,complex<double> z,int &nm,complex<double> *cj,  
186 - complex<double> *cy,complex<double> *cjp,complex<double> *cyp)  
187 -{  
188 - complex<double> cbj0,cbj1,cby0,cby1,cj0,cjk,cj1,cf,cf1,cf2;  
189 - complex<double> cs,cg0,cg1,cyk,cyl1,cyl2,cylk,cp11,cp12,cp21,cp22;  
190 - complex<double> ch0,ch1,ch2;  
191 - double a0,yak,ya1,ya0,wa;  
192 - int m,k,lb,lb0;  
193 -  
194 - if (n < 0) return 1;  
195 - a0 = abs(z);  
196 - nm = n;  
197 - if (a0 < 1.0e-100) {  
198 - for (k=0;k<=n;k++) {  
199 - cj[k] = czero;  
200 - cy[k] = complex<double> (-1e308,0);  
201 - cjp[k] = czero;  
202 - cyp[k] = complex<double>(1e308,0);  
203 - }  
204 - cj[0] = cone;  
205 - cjp[1] = complex<double>(0.5,0.0);  
206 - return 0;  
207 - }  
208 - cbessjy01(z,cj[0],cj[1],cy[0],cy[1],cjp[0],cjp[1],cyp[0],cyp[1]);  
209 - cbj0 = cj[0];  
210 - cbj1 = cj[1];  
211 - cby0 = cy[0];  
212 - cby1 = cy[1];  
213 - if (n <= 1) return 0;  
214 - if (n < (int)0.25*a0) {  
215 - cj0 = cbj0;  
216 - cj1 = cbj1;  
217 - for (k=2;k<=n;k++) {  
218 - cjk = 2.0*(k-1.0)*cj1/z-cj0;  
219 - cj[k] = cjk;  
220 - cj0 = cj1;  
221 - cj1 = cjk;  
222 - }  
223 - }  
224 - else {  
225 - m = msta1(a0,200);  
226 - if (m < n) nm = m;  
227 - else m = msta2(a0,n,15);  
228 - cf2 = czero;  
229 - cf1 = complex<double> (1.0e-100,0.0);  
230 - for (k=m;k>=0;k--) {  
231 - cf = 2.0*(k+1.0)*cf1/z-cf2;  
232 - if (k <=nm) cj[k] = cf;  
233 - cf2 = cf1;  
234 - cf1 = cf;  
235 - }  
236 - if (abs(cbj0) > abs(cbj1)) cs = cbj0/cf;  
237 - else cs = cbj1/cf2;  
238 - for (k=0;k<=nm;k++) {  
239 - cj[k] *= cs;  
240 - }  
241 - }  
242 - for (k=2;k<=nm;k++) {  
243 - cjp[k] = cj[k-1]-(double)k*cj[k]/z;  
244 - }  
245 - ya0 = abs(cby0);  
246 - lb = 0;  
247 - cg0 = cby0;  
248 - cg1 = cby1;  
249 - for (k=2;k<=nm;k++) {  
250 - cyk = 2.0*(k-1.0)*cg1/z-cg0;  
251 - yak = abs(cyk);  
252 - ya1 = abs(cg0);  
253 - if ((yak < ya0) && (yak < ya1)) lb = k;  
254 - cy[k] = cyk;  
255 - cg0 = cg1;  
256 - cg1 = cyk;  
257 - }  
258 - lb0 = 0;  
259 - if ((lb > 4) && (imag(z) != 0.0)) {  
260 - while (lb != lb0) {  
261 - ch2 = cone;  
262 - ch1 = czero;  
263 - lb0 = lb;  
264 - for (k=lb;k>=1;k--) {  
265 - ch0 = 2.0*k*ch1/z-ch2;  
266 - ch2 = ch1;  
267 - ch1 = ch0;  
268 - }  
269 - cp12 = ch0;  
270 - cp22 = ch2;  
271 - ch2 = czero;  
272 - ch1 = cone;  
273 - for (k=lb;k>=1;k--) {  
274 - ch0 = 2.0*k*ch1/z-ch2;  
275 - ch2 = ch1;  
276 - ch1 = ch0;  
277 - }  
278 - cp11 = ch0;  
279 - cp21 = ch2;  
280 - if (lb == nm)  
281 - cj[lb+1] = 2.0*lb*cj[lb]/z-cj[lb-1];  
282 - if (abs(cj[0]) > abs(cj[1])) {  
283 - cy[lb+1] = (cj[lb+1]*cby0-2.0*cp11/(M_PI*z))/cj[0];  
284 - cy[lb] = (cj[lb]*cby0+2.0*cp12/(M_PI*z))/cj[0];  
285 - }  
286 - else {  
287 - cy[lb+1] = (cj[lb+1]*cby1-2.0*cp21/(M_PI*z))/cj[1];  
288 - cy[lb] = (cj[lb]*cby1+2.0*cp22/(M_PI*z))/cj[1];  
289 - }  
290 - cyl2 = cy[lb+1];  
291 - cyl1 = cy[lb];  
292 - for (k=lb-1;k>=0;k--) {  
293 - cylk = 2.0*(k+1.0)*cyl1/z-cyl2;  
294 - cy[k] = cylk;  
295 - cyl2 = cyl1;  
296 - cyl1 = cylk;  
297 - }  
298 - cyl1 = cy[lb];  
299 - cyl2 = cy[lb+1];  
300 - for (k=lb+1;k<n;k++) {  
301 - cylk = 2.0*k*cyl2/z-cyl1;  
302 - cy[k+1] = cylk;  
303 - cyl1 = cyl2;  
304 - cyl2 = cylk;  
305 - }  
306 - for (k=2;k<=nm;k++) {  
307 - wa = abs(cy[k]);  
308 - if (wa < abs(cy[k-1])) lb = k;  
309 - }  
310 - }  
311 - }  
312 - for (k=2;k<=nm;k++) {  
313 - cyp[k] = cy[k-1]-(double)k*cy[k]/z;  
314 - }  
315 - return 0;  
316 -}  
317 -  
318 -int cbessjynb(int n,complex<double> z,int &nm,complex<double> *cj,  
319 - complex<double> *cy,complex<double> *cjp,complex<double> *cyp)  
320 -{  
321 - complex<double> cf,cf0,cf1,cf2,cbs,csu,csv,cs0,ce;  
322 - complex<double> ct1,cp0,cq0,cp1,cq1,cu,cbj0,cby0,cbj1,cby1;  
323 - complex<double> cyy,cbjk,ct2;  
324 - double a0,y0;  
325 - int k,m;  
326 - static double a[] = {  
327 - -0.7031250000000000e-1,  
328 - 0.1121520996093750,  
329 - -0.5725014209747314,  
330 - 6.074042001273483};  
331 - static double b[] = {  
332 - 0.7324218750000000e-1,  
333 - -0.2271080017089844,  
334 - 1.727727502584457,  
335 - -2.438052969955606e1};  
336 - static double a1[] = {  
337 - 0.1171875,  
338 - -0.1441955566406250,  
339 - 0.6765925884246826,  
340 - -6.883914268109947};  
341 - static double b1[] = {  
342 - -0.1025390625,  
343 - 0.2775764465332031,  
344 - -1.993531733751297,  
345 - 2.724882731126854e1};  
346 -  
347 - y0 = abs(imag(z));  
348 - a0 = abs(z);  
349 - nm = n;  
350 - if (a0 < 1.0e-100) {  
351 - for (k=0;k<=n;k++) {  
352 - cj[k] = czero;  
353 - cy[k] = complex<double> (-1e308,0);  
354 - cjp[k] = czero;  
355 - cyp[k] = complex<double>(1e308,0);  
356 - }  
357 - cj[0] = cone;  
358 - cjp[1] = complex<double>(0.5,0.0);  
359 - return 0;  
360 - }  
361 - if ((a0 <= 300.0) || (n > (int)(0.25*a0))) {  
362 - if (n == 0) nm = 1;  
363 - m = msta1(a0,200);  
364 - if (m < nm) nm = m;  
365 - else m = msta2(a0,nm,15);  
366 - cbs = czero;  
367 - csu = czero;  
368 - csv = czero;  
369 - cf2 = czero;  
370 - cf1 = complex<double> (1.0e-100,0.0);  
371 - for (k=m;k>=0;k--) {  
372 - cf = 2.0*(k+1.0)*cf1/z-cf2;  
373 - if (k <= nm) cj[k] = cf;  
374 - if (((k & 1) == 0) && (k != 0)) {  
375 - if (y0 <= 1.0) {  
376 - cbs += 2.0*cf;  
377 - }  
378 - else {  
379 - cbs += (-1)*((k & 2)-1)*2.0*cf;  
380 - }  
381 - csu += (double)((-1)*((k & 2)-1))*cf/(double)k;  
382 - }  
383 - else if (k > 1) {  
384 - csv += (double)((-1)*((k & 2)-1)*k)*cf/(double)(k*k-1.0);  
385 - }  
386 - cf2 = cf1;  
387 - cf1 = cf;  
388 - }  
389 - if (y0 <= 1.0) cs0 = cbs+cf;  
390 - else cs0 = (cbs+cf)/cos(z);  
391 - for (k=0;k<=nm;k++) {  
392 - cj[k] /= cs0;  
393 - }  
394 - ce = log(0.5*z)+el;  
395 - cy[0] = M_2_PI*(ce*cj[0]-4.0*csu/cs0);  
396 - cy[1] = M_2_PI*(-cj[0]/z+(ce-1.0)*cj[1]-4.0*csv/cs0);  
397 - }  
398 - else {  
399 - ct1 = z-M_PI_4;  
400 - cp0 = cone;  
401 - for (k=0;k<4;k++) {  
402 - cp0 += a[k]*pow(z,-2.0*k-2.0);  
403 - }  
404 - cq0 = -0.125/z;  
405 - for (k=0;k<4;k++) {  
406 - cq0 += b[k] *pow(z,-2.0*k-3.0);  
407 - }  
408 - cu = sqrt(M_2_PI/z);  
409 - cbj0 = cu*(cp0*cos(ct1)-cq0*sin(ct1));  
410 - cby0 = cu*(cp0*sin(ct1)+cq0*cos(ct1));  
411 - cj[0] = cbj0;  
412 - cy[0] = cby0;  
413 - ct2 = z-0.75*M_PI;  
414 - cp1 = cone;  
415 - for (k=0;k<4;k++) {  
416 - cp1 += a1[k]*pow(z,-2.0*k-2.0);  
417 - }  
418 - cq1 = 0.375/z;  
419 - for (k=0;k<4;k++) {  
420 - cq1 += b1[k]*pow(z,-2.0*k-3.0);  
421 - }  
422 - cbj1 = cu*(cp1*cos(ct2)-cq1*sin(ct2));  
423 - cby1 = cu*(cp1*sin(ct2)+cq1*cos(ct2));  
424 - cj[1] = cbj1;  
425 - cy[1] = cby1;  
426 - for (k=2;k<=n;k++) {  
427 - cbjk = 2.0*(k-1.0)*cbj1/z-cbj0;  
428 - cj[k] = cbjk;  
429 - cbj0 = cbj1;  
430 - cbj1 = cbjk;  
431 - }  
432 - }  
433 - cjp[0] = -cj[1];  
434 - for (k=1;k<=nm;k++) {  
435 - cjp[k] = cj[k-1]-(double)k*cj[k]/z;  
436 - }  
437 - if (abs(cj[0]) > 1.0)  
438 - cy[1] = (cj[1]*cy[0]-2.0/(M_PI*z))/cj[0];  
439 - for (k=2;k<=nm;k++) {  
440 - if (abs(cj[k-1]) >= abs(cj[k-2]))  
441 - cyy = (cj[k]*cy[k-1]-2.0/(M_PI*z))/cj[k-1];  
442 - else  
443 - cyy = (cj[k]*cy[k-2]-4.0*(k-1.0)/(M_PI*z*z))/cj[k-2];  
444 - cy[k] = cyy;  
445 - }  
446 - cyp[0] = -cy[1];  
447 - for (k=1;k<=nm;k++) {  
448 - cyp[k] = cy[k-1]-(double)k*cy[k]/z;  
449 - }  
450 -  
451 - return 0;  
452 -}  
453 -  
454 -int cbessjyva(double v,complex<double> z,double &vm,complex<double>*cjv,  
455 - complex<double>*cyv,complex<double>*cjvp,complex<double>*cyvp)  
456 -{  
457 - complex<double> z1,z2,zk,cjvl,cr,ca,cjv0,cjv1,cpz,crp;  
458 - complex<double> cqz,crq,ca0,cck,csk,cyv0,cyv1,cju0,cju1,cb;  
459 - complex<double> cs,cs0,cr0,cs1,cr1,cec,cf,cf0,cf1,cf2;  
460 - complex<double> cfac0,cfac1,cg0,cg1,cyk,cp11,cp12,cp21,cp22;  
461 - complex<double> ch0,ch1,ch2,cyl1,cyl2,cylk;  
462 -  
463 - double a0,v0,pv0,pv1,vl,ga,gb,vg,vv,w0,w1,ya0,yak,ya1,wa;  
464 - int j,n,k,kz,l,lb,lb0,m;  
465 -  
466 - a0 = abs(z);  
467 - z1 = z;  
468 - z2 = z*z;  
469 - n = (int)v;  
470 -  
471 -  
472 - v0 = v-n;  
473 -  
474 - pv0 = M_PI*v0;  
475 - pv1 = M_PI*(1.0+v0);  
476 - if (a0 < 1.0e-100) {  
477 - for (k=0;k<=n;k++) {  
478 - cjv[k] = czero;  
479 - cyv[k] = complex<double> (-1e308,0);  
480 - cjvp[k] = czero;  
481 - cyvp[k] = complex<double> (1e308,0);  
482 -  
483 - }  
484 - if (v0 == 0.0) {  
485 - cjv[0] = cone;  
486 - cjvp[1] = complex<double> (0.5,0.0);  
487 - }  
488 - else {  
489 - cjvp[0] = complex<double> (1e308,0);  
490 - }  
491 - vm = v;  
492 - return 0;  
493 - }  
494 - if (real(z1) < 0.0) z1 = -z;  
495 - if (a0 <= 12.0) {  
496 - for (l=0;l<2;l++) {  
497 - vl = v0+l;  
498 - cjvl = cone;  
499 - cr = cone;  
500 - for (k=1;k<=40;k++) {  
501 - cr *= -0.25*z2/(k*(k+vl));  
502 - cjvl += cr;  
503 - if (abs(cr) < abs(cjvl)*eps) break;  
504 - }  
505 - vg = 1.0 + vl;  
506 - ga = gamma(vg);  
507 - ca = pow(0.5*z1,vl)/ga;  
508 - if (l == 0) cjv0 = cjvl*ca;  
509 - else cjv1 = cjvl*ca;  
510 - }  
511 - }  
512 - else {  
513 - if (a0 >= 50.0) kz = 8;  
514 - else if (a0 >= 35.0) kz = 10;  
515 - else kz = 11;  
516 - for (j=0;j<2;j++) {  
517 - vv = 4.0*(j+v0)*(j+v0);  
518 - cpz = cone;  
519 - crp = cone;  
520 - for (k=1;k<=kz;k++) {  
521 - crp = -0.78125e-2*crp*(vv-pow(4.0*k-3.0,2.0))*  
522 - (vv-pow(4.0*k-1.0,2.0))/(k*(2.0*k-1.0)*z2);  
523 - cpz += crp;  
524 - }  
525 - cqz = cone;  
526 - crq = cone;  
527 - for (k=1;k<=kz;k++) {  
528 - crq = -0.78125e-2*crq*(vv-pow(4.0*k-1.0,2.0))*  
529 - (vv-pow(4.0*k+1.0,2.0))/(k*(2.0*k+1.0)*z2);  
530 - cqz += crq;  
531 - }  
532 - cqz *= 0.125*(vv-1.0)/z1;  
533 - zk = z1-(0.5*(j+v0)+0.25)*M_PI;  
534 - ca0 = sqrt(M_2_PI/z1);  
535 - cck = cos(zk);  
536 - csk = sin(zk);  
537 - if (j == 0) {  
538 - cjv0 = ca0*(cpz*cck-cqz*csk);  
539 - cyv0 = ca0*(cpz*csk+cqz+cck);  
540 - }  
541 - else {  
542 - cjv1 = ca0*(cpz*cck-cqz*csk);  
543 - cyv1 = ca0*(cpz*csk+cqz*cck);  
544 - }  
545 - }  
546 - }  
547 - if (a0 <= 12.0) {  
548 - if (v0 != 0.0) {  
549 - for (l=0;l<2;l++) {  
550 - vl = v0+l;  
551 - cjvl = cone;  
552 - cr = cone;  
553 - for (k=1;k<=40;k++) {  
554 - cr *= -0.25*z2/(k*(k-vl));  
555 - cjvl += cr;  
556 - if (abs(cr) < abs(cjvl)*eps) break;  
557 - }  
558 - vg = 1.0-vl;  
559 - gb = gamma(vg);  
560 - cb = pow(2.0/z1,vl)/gb;  
561 - if (l == 0) cju0 = cjvl*cb;  
562 - else cju1 = cjvl*cb;  
563 - }  
564 - cyv0 = (cjv0*cos(pv0)-cju0)/sin(pv0);  
565 - cyv1 = (cjv1*cos(pv1)-cju1)/sin(pv1);  
566 - }  
567 - else {  
568 - cec = log(0.5*z1)+el;  
569 - cs0 = czero;  
570 - w0 = 0.0;  
571 - cr0 = cone;  
572 - for (k=1;k<=30;k++) {  
573 - w0 += 1.0/k;  
574 - cr0 *= -0.25*z2/(double)(k*k);  
575 - cs0 += cr0*w0;  
576 - }  
577 - cyv0 = M_2_PI*(cec*cjv0-cs0);  
578 - cs1 = cone;  
579 - w1 = 0.0;  
580 - cr1 = cone;  
581 - for (k=1;k<=30;k++) {  
582 - w1 += 1.0/k;  
583 - cr1 *= -0.25*z2/(k*(k+1.0));  
584 - cs1 += cr1*(2.0*w1+1.0/(k+1.0));  
585 - }  
586 - cyv1 = M_2_PI*(cec*cjv1-1.0/z1-0.25*z1*cs1);  
587 - }  
588 - }  
589 - if (real(z) < 0.0) {  
590 - cfac0 = exp(pv0*cii);  
591 - cfac1 = exp(pv1*cii);  
592 - if (imag(z) < 0.0) {  
593 - cyv0 = cfac0*cyv0-2.0*cii*cos(pv0)*cjv0;  
594 - cyv1 = cfac1*cyv1-2.0*cii*cos(pv1)*cjv1;  
595 - cjv0 /= cfac0;  
596 - cjv1 /= cfac1;  
597 - }  
598 - else if (imag(z) > 0.0) {  
599 - cyv0 = cyv0/cfac0+2.0*cii*cos(pv0)*cjv0;  
600 - cyv1 = cyv1/cfac1+2.0*cii*cos(pv1)*cjv1;  
601 - cjv0 *= cfac0;  
602 - cjv1 *= cfac1;  
603 - }  
604 - }  
605 - cjv[0] = cjv0;  
606 - cjv[1] = cjv1;  
607 - if ((n >= 2) && (n <= (int)(0.25*a0))) {  
608 - cf0 = cjv0;  
609 - cf1 = cjv1;  
610 - for (k=2;k<= n;k++) {  
611 - cf = 2.0*(k+v0-1.0)*cf1/z-cf0;  
612 - cjv[k] = cf;  
613 - cf0 = cf1;  
614 - cf1 = cf;  
615 - }  
616 - }  
617 - else if (n >= 2) {  
618 - m = msta1(a0,200);  
619 - if (m < n) n = m;  
620 - else m = msta2(a0,n,15);  
621 - cf2 = czero;  
622 - cf1 = complex<double>(1.0e-100,0.0);  
623 - for (k=m;k>=0;k--) {  
624 - cf = 2.0*(v0+k+1.0)*cf1/z-cf2;  
625 - if (k <= n) cjv[k] = cf;  
626 - cf2 = cf1;  
627 - cf1 = cf;  
628 - }  
629 - if (abs(cjv0) > abs(cjv1)) cs = cjv0/cf;  
630 - else cs = cjv1/cf2;  
631 - for (k=0;k<=n;k++) {  
632 - cjv[k] *= cs;  
633 - }  
634 - }  
635 - cjvp[0] = v0*cjv[0]/z-cjv[1];  
636 - for (k=1;k<=n;k++) {  
637 - cjvp[k] = -(k+v0)*cjv[k]/z+cjv[k-1];  
638 - }  
639 - cyv[0] = cyv0;  
640 - cyv[1] = cyv1;  
641 - ya0 = abs(cyv0);  
642 - lb = 0;  
643 - cg0 = cyv0;  
644 - cg1 = cyv1;  
645 - for (k=2;k<=n;k++) {  
646 - cyk = 2.0*(v0+k-1.0)*cg1/z-cg0;  
647 - yak = abs(cyk);  
648 - ya1 = abs(cg0);  
649 - if ((yak < ya0) && (yak< ya1)) lb = k;  
650 - cyv[k] = cyk;  
651 - cg0 = cg1;  
652 - cg1 = cyk;  
653 - }  
654 - lb0 = 0;  
655 - if ((lb > 4) && (imag(z) != 0.0)) {  
656 - while(lb != lb0) {  
657 - ch2 = cone;  
658 - ch1 = czero;  
659 - lb0 = lb;  
660 - for (k=lb;k>=1;k--) {  
661 - ch0 = 2.0*(k+v0)*ch1/z-ch2;  
662 - ch2 = ch1;  
663 - ch1 = ch0;  
664 - }  
665 - cp12 = ch0;  
666 - cp22 = ch2;  
667 - ch2 = czero;  
668 - ch1 = cone;  
669 - for (k=lb;k>=1;k--) {  
670 - ch0 = 2.0*(k+v0)*ch1/z-ch2;  
671 - ch2 = ch1;  
672 - ch1 = ch0;  
673 - }  
674 - cp11 = ch0;  
675 - cp21 = ch2;  
676 - if (lb == n)  
677 - cjv[lb+1] = 2.0*(lb+v0)*cjv[lb]/z-cjv[lb-1];  
678 - if (abs(cjv[0]) > abs(cjv[1])) {  
679 - cyv[lb+1] = (cjv[lb+1]*cyv0-2.0*cp11/(M_PI*z))/cjv[0];  
680 - cyv[lb] = (cjv[lb]*cyv0+2.0*cp12/(M_PI*z))/cjv[0];  
681 - }  
682 - else {  
683 - cyv[lb+1] = (cjv[lb+1]*cyv1-2.0*cp21/(M_PI*z))/cjv[1];  
684 - cyv[lb] = (cjv[lb]*cyv1+2.0*cp22/(M_PI*z))/cjv[1];  
685 - }  
686 - cyl2 = cyv[lb+1];  
687 - cyl1 = cyv[lb];  
688 - for (k=lb-1;k>=0;k--) {  
689 - cylk = 2.0*(k+v0+1.0)*cyl1/z-cyl2;  
690 - cyv[k] = cylk;  
691 - cyl2 = cyl1;  
692 - cyl1 = cylk;  
693 - }  
694 - cyl1 = cyv[lb];  
695 - cyl2 = cyv[lb+1];  
696 - for (k=lb+1;k<n;k++) {  
697 - cylk = 2.0*(k+v0)*cyl2/z-cyl1;  
698 - cyv[k+1] = cylk;  
699 - cyl1 = cyl2;  
700 - cyl2 = cylk;  
701 - }  
702 - for (k=2;k<=n;k++) {  
703 - wa = abs(cyv[k]);  
704 - if (wa < abs(cyv[k-1])) lb = k;  
705 - }  
706 - }  
707 - }  
708 - cyvp[0] = v0*cyv[0]/z-cyv[1];  
709 - for (k=1;k<=n;k++) {  
710 - cyvp[k] = cyv[k-1]-(k+v0)*cyv[k]/z;  
711 - }  
712 - vm = n+v0;  
713 - return 0;  
714 -}  
715 -  
716 -  
1 -#Specify the version being used aswell as the language  
2 -cmake_minimum_required(VERSION 2.8)  
3 -#Name your project here  
4 -project(IMie)  
5 -  
6 -#set the module directory  
7 -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}")  
8 -  
9 -#find the Qt4  
10 -find_package(Qt4 REQUIRED)  
11 -find_package(Qt4 REQUIRED)  
12 -include_directories(${QT_INCLUDE_DIRECTORY})  
13 -include(${QT_USE_FILE})  
14 -  
15 -#set up CUDA  
16 -find_package(CUDA)  
17 -  
18 -#find OpenGL  
19 -find_package(OpenGL REQUIRED)  
20 -  
21 -#find GLUT  
22 -set(GLUT_ROOT_PATH $ENV{GLUT_ROOT_PATH})  
23 -find_package(GLUT REQUIRED)  
24 -  
25 -#find GLEW  
26 -find_package(GLEW REQUIRED)  
27 -  
28 -#add Qt OpenGL stuff  
29 -set(QT_USE_QTOPENGL TRUE)  
30 -  
31 -#ask the user for the RTS location  
32 -set(RTS_ROOT_PATH $ENV{RTS_ROOT_PATH})  
33 -find_package(RTS REQUIRED)  
34 -  
35 -#set the include directories  
36 -include_directories(  
37 - ${CMAKE_CURRENT_BINARY_DIR}  
38 - ${QT_INCLUDES}  
39 - ${QT_QTOPENGL_INCLUDE_DIR}  
40 - ${OPENGL_INCLUDE_DIR}  
41 - ${GLEW_INCLUDE_PATH}  
42 - ${GLUT_INCLUDE_DIR}  
43 - ${RTS_INCLUDE_DIR}  
44 -)  
45 -  
46 -#Assign source files to the appropriate variables  
47 -file(GLOB SRC_CPP "*.cpp")  
48 -file(GLOB SRC_H "*.h")  
49 -file(GLOB SRC_UI "*.ui")  
50 -file(GLOB SRC_QRC "*.qrc")  
51 -file(GLOB SRC_CU "*.cu")  
52 -  
53 -#set up copying data files  
54 -configure_file(kPMMA.txt ${CMAKE_CURRENT_BINARY_DIR}/kPMMA.txt @ONLY)  
55 -configure_file(eta_TolueneK.txt ${CMAKE_CURRENT_BINARY_DIR}/eta_TolueneK.txt @ONLY)  
56 -configure_file(eta_TolueneN.txt ${CMAKE_CURRENT_BINARY_DIR}/eta_TolueneN.txt @ONLY)  
57 -  
58 -#determine which source files have to be moc'd  
59 -Qt4_wrap_cpp(UI_MOC ${SRC_H})  
60 -Qt4_wrap_ui(UI_H ${SRC_UI})  
61 -Qt4_add_resources(ALL_RCC ${ALL_QRC})  
62 -  
63 -#moc the necessary files  
64 -Qt4_automoc(${ALL_CPP})  
65 -  
66 -source_group(QtMoc FILES ${UI_MOC})  
67 -source_group(QtUI FILES ${SRC_UI})  
68 -  
69 -#create an executable  
70 -cuda_add_executable(IMie ${SRC_CPP} ${SRC_H} ${UI_H} ${UI_MOC} ${ALL_RCC} ${SRC_CU})  
71 -  
72 -#set the link libraries  
73 -target_link_libraries(IMie ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${GLEW_LIBRARY})  
74 -  
75 -  
76 - 1 +#Specify the version being used aswell as the language
  2 +cmake_minimum_required(VERSION 2.8)
  3 +#Name your project here
  4 +project(IMie)
  5 +
  6 +#set the module directory
  7 +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}")
  8 +
  9 +#find the Qt4
  10 +find_package(Qt4 REQUIRED)
  11 +find_package(Qt4 REQUIRED)
  12 +include_directories(${QT_INCLUDE_DIRECTORY})
  13 +include(${QT_USE_FILE})
  14 +
  15 +#set up CUDA
  16 +find_package(CUDA)
  17 +
  18 +#find OpenGL
  19 +find_package(OpenGL REQUIRED)
  20 +
  21 +#find GLUT
  22 +set(GLUT_ROOT_PATH $ENV{GLUT_ROOT_PATH})
  23 +find_package(GLUT REQUIRED)
  24 +
  25 +#find GLEW
  26 +find_package(GLEW REQUIRED)
  27 +
  28 +#add Qt OpenGL stuff
  29 +set(QT_USE_QTOPENGL TRUE)
  30 +
  31 +#ask the user for the RTS location
  32 +set(RTS_ROOT_PATH $ENV{RTS_ROOT_PATH})
  33 +find_package(RTS REQUIRED)
  34 +
  35 +#set the include directories
  36 +include_directories(
  37 + ${CMAKE_CURRENT_BINARY_DIR}
  38 + ${QT_INCLUDES}
  39 + ${QT_QTOPENGL_INCLUDE_DIR}
  40 + ${OPENGL_INCLUDE_DIR}
  41 + ${GLEW_INCLUDE_PATH}
  42 + ${GLUT_INCLUDE_DIR}
  43 + ${RTS_INCLUDE_DIR}
  44 +)
  45 +
  46 +#Assign source files to the appropriate variables
  47 +file(GLOB SRC_CPP "*.cpp")
  48 +file(GLOB SRC_H "*.h")
  49 +file(GLOB SRC_UI "*.ui")
  50 +file(GLOB SRC_QRC "*.qrc")
  51 +file(GLOB SRC_CU "*.cu")
  52 +
  53 +#set up copying data files
  54 +configure_file(kPMMA.txt ${CMAKE_CURRENT_BINARY_DIR}/kPMMA.txt @ONLY)
  55 +configure_file(eta_TolueneK.txt ${CMAKE_CURRENT_BINARY_DIR}/eta_TolueneK.txt @ONLY)
  56 +configure_file(eta_TolueneN.txt ${CMAKE_CURRENT_BINARY_DIR}/eta_TolueneN.txt @ONLY)
  57 +
  58 +#determine which source files have to be moc'd
  59 +Qt4_wrap_cpp(UI_MOC ${SRC_H})
  60 +Qt4_wrap_ui(UI_H ${SRC_UI})
  61 +Qt4_add_resources(ALL_RCC ${ALL_QRC})
  62 +
  63 +#moc the necessary files
  64 +Qt4_automoc(${ALL_CPP})
  65 +
  66 +source_group(QtMoc FILES ${UI_MOC})
  67 +source_group(QtUI FILES ${SRC_UI})
  68 +
  69 +#create an executable
  70 +cuda_add_executable(IMie ${SRC_CPP} ${SRC_H} ${UI_H} ${UI_MOC} ${ALL_RCC} ${SRC_CU})
  71 +
  72 +#set the link libraries
  73 +target_link_libraries(IMie ${QT_LIBRARIES} ${QT_QTOPENGL_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${GLEW_LIBRARY})
  74 +
  75 +
  76 +
EstimateMaterial.cpp
1 -#include "globals.h"  
2 -#include <stdlib.h>  
3 -#define PI 3.14159  
4 -  
5 -double CalculateError(double* E)  
6 -{  
7 - //Calculate the error between the Reference Spectrum and the Simulated Spectrum  
8 - double sumE = 0.0;  
9 - int nVals = RefSpectrum[currentSpec].size();  
10 - double nu;  
11 - for(int i=0; i<nVals; i++)  
12 - {  
13 - nu = RefSpectrum[currentSpec][i].nu;  
14 - E[i] = RefSpectrum[currentSpec][i].A + nu * refSlope - SimSpectrum[i].A;  
15 - sumE += E[i]*E[i];  
16 - }  
17 -  
18 - return sumE/nVals;  
19 -}  
20 -  
21 -void EstimateK(double* E)  
22 -{  
23 - int nVals = RefSpectrum[currentSpec].size();  
24 - double nuStart = RefSpectrum[currentSpec].front().nu;  
25 - double nuEnd = RefSpectrum[currentSpec].back().nu;  
26 -  
27 - double r = radius/10000.0;  
28 - double nu;  
29 - double dNu = (nuEnd - nuStart)/(nVals-1);  
30 - double eScale;  
31 - for(int i=0; i<nVals; i++)  
32 - {  
33 - nu = nuStart + i*2;  
34 -  
35 - eScale = 1/(8*PI*r*nu);  
36 - EtaK[i].A = EtaK[i].A + eScale * E[i];  
37 - if(EtaK[i].A < 0.0) EtaK[i].A = 0.0;  
38 - }  
39 -}  
40 -  
41 -void EstimateMaterial()  
42 -{  
43 - /*This function estimates the material properties of a sphere based on the  
44 - input spectrum RefSpectrum and the optical properties of the system.  
45 - 1) The material properties are stored in EtaK and EtaN  
46 - 2) The best fit is stored in SimSpectrum*/  
47 -  
48 - //initialize the material index of refraction  
49 - EtaN.clear();  
50 - EtaK.clear();  
51 -  
52 - //insert the default material properties  
53 - SpecPair temp;  
54 - for(int s=0; s<(int)RefSpectrum[currentSpec].size(); s++)  
55 - {  
56 - //the real part of the IR is the user-specified baseline IR  
57 - temp.nu = RefSpectrum[currentSpec][s].nu;  
58 - temp.A = baseIR;  
59 - EtaN.push_back(temp);  
60 - //the imaginary part of the IR is zero absorbance  
61 - temp.A = 0.0f;  
62 - EtaK.push_back(temp);  
63 - }  
64 -  
65 -  
66 - //allocate space to store the list of error values  
67 - double* E = (double*)malloc(sizeof(double) * RefSpectrum[currentSpec].size());  
68 - //copy the absorbance values into a linear array  
69 - double* k = (double*)malloc(sizeof(double) * EtaK.size());  
70 - double* n = (double*)malloc(sizeof(double) * EtaN.size());  
71 -  
72 - //iterate to solve for both n and k  
73 - double sumE = 99999.9;  
74 - int j=0;  
75 - //clear the console  
76 - system("cls");  
77 - while(sumE > minMSE && j < maxFitIter)  
78 - {  
79 - //simulate a spectrum based on the current IR  
80 - SimulateSpectrum();  
81 -  
82 - //calculate the error term  
83 - sumE = CalculateError(E);  
84 -  
85 - //estimate the new absorbance  
86 - EstimateK(E);  
87 -  
88 - //use Kramers-Kronig to compute n  
89 -  
90 - for(unsigned int i=0; i<EtaK.size(); i++)  
91 - k[i] = EtaK[i].A;  
92 - cudaKramersKronig(n, k, EtaK.size(), EtaK.front().nu, EtaK.back().nu, baseIR);  
93 -  
94 - //copy the real part of the index of refraction into the vector  
95 - EtaN.clear();  
96 - for(int i=0; i<(int)EtaK.size(); i++)  
97 - {  
98 - temp.nu = EtaK[i].nu;  
99 - temp.A = n[i];  
100 - EtaN.push_back(temp);  
101 - }  
102 -  
103 - cout<<" E = "<<sumE<<endl;  
104 - j++;  
105 - //SaveSpectrum(n, nVals, "simNj.txt");  
106 - //SaveSpectrum(k, nVals, "simKj.txt");  
107 - //SaveSpectrum(simSpec, nVals, "simSpec.txt");  
108 - //exit(1);  
109 -  
110 - }  
111 -  
112 - free(E);  
113 - free(k);  
114 - free(n);  
115 -  
116 -  
117 -  
118 - 1 +#include "globals.h"
  2 +#include <stdlib.h>
  3 +#define PI 3.14159
  4 +
  5 +double CalculateError(double* E)
  6 +{
  7 + //Calculate the error between the Reference Spectrum and the Simulated Spectrum
  8 + double sumE = 0.0;
  9 + int nVals = RefSpectrum[currentSpec].size();
  10 + double nu;
  11 + for(int i=0; i<nVals; i++)
  12 + {
  13 + nu = RefSpectrum[currentSpec][i].nu;
  14 + E[i] = RefSpectrum[currentSpec][i].A + nu * refSlope - SimSpectrum[i].A;
  15 + sumE += E[i]*E[i];
  16 + }
  17 +
  18 + return sumE/nVals;
  19 +}
  20 +
  21 +void EstimateK(double* E)
  22 +{
  23 + int nVals = RefSpectrum[currentSpec].size();
  24 + double nuStart = RefSpectrum[currentSpec].front().nu;
  25 + double nuEnd = RefSpectrum[currentSpec].back().nu;
  26 +
  27 + double r = radius/10000.0;
  28 + double nu;
  29 + double dNu = (nuEnd - nuStart)/(nVals-1);
  30 + double eScale;
  31 + for(int i=0; i<nVals; i++)
  32 + {
  33 + nu = nuStart + i*2;
  34 +
  35 + eScale = 1/(8*PI*r*nu);
  36 + EtaK[i].A = EtaK[i].A + eScale * E[i];
  37 + if(EtaK[i].A < 0.0) EtaK[i].A = 0.0;
  38 + }
  39 +}
  40 +
  41 +void EstimateMaterial()
  42 +{
  43 + /*This function estimates the material properties of a sphere based on the
  44 + input spectrum RefSpectrum and the optical properties of the system.
  45 + 1) The material properties are stored in EtaK and EtaN
  46 + 2) The best fit is stored in SimSpectrum*/
  47 +
  48 + //initialize the material index of refraction
  49 + EtaN.clear();
  50 + EtaK.clear();
  51 +
  52 + //insert the default material properties
  53 + SpecPair temp;
  54 + for(int s=0; s<(int)RefSpectrum[currentSpec].size(); s++)
  55 + {
  56 + //the real part of the IR is the user-specified baseline IR
  57 + temp.nu = RefSpectrum[currentSpec][s].nu;
  58 + temp.A = baseIR;
  59 + EtaN.push_back(temp);
  60 + //the imaginary part of the IR is zero absorbance
  61 + temp.A = 0.0f;
  62 + EtaK.push_back(temp);
  63 + }
  64 +
  65 +
  66 + //allocate space to store the list of error values
  67 + double* E = (double*)malloc(sizeof(double) * RefSpectrum[currentSpec].size());
  68 + //copy the absorbance values into a linear array
  69 + double* k = (double*)malloc(sizeof(double) * EtaK.size());
  70 + double* n = (double*)malloc(sizeof(double) * EtaN.size());
  71 +
  72 + //iterate to solve for both n and k
  73 + double sumE = 99999.9;
  74 + int j=0;
  75 + //clear the console
  76 + system("cls");
  77 + while(sumE > minMSE && j < maxFitIter)
  78 + {
  79 + //simulate a spectrum based on the current IR
  80 + SimulateSpectrum();
  81 +
  82 + //calculate the error term
  83 + sumE = CalculateError(E);
  84 +
  85 + //estimate the new absorbance
  86 + EstimateK(E);
  87 +
  88 + //use Kramers-Kronig to compute n
  89 +
  90 + for(unsigned int i=0; i<EtaK.size(); i++)
  91 + k[i] = EtaK[i].A;
  92 + cudaKramersKronig(n, k, EtaK.size(), EtaK.front().nu, EtaK.back().nu, baseIR);
  93 +
  94 + //copy the real part of the index of refraction into the vector
  95 + EtaN.clear();
  96 + for(int i=0; i<(int)EtaK.size(); i++)
  97 + {
  98 + temp.nu = EtaK[i].nu;
  99 + temp.A = n[i];
  100 + EtaN.push_back(temp);
  101 + }
  102 +
  103 + cout<<" E = "<<sumE<<endl;
  104 + j++;
  105 + //SaveSpectrum(n, nVals, "simNj.txt");
  106 + //SaveSpectrum(k, nVals, "simKj.txt");
  107 + //SaveSpectrum(simSpec, nVals, "simSpec.txt");
  108 + //exit(1);
  109 +
  110 + }
  111 +
  112 + free(E);
  113 + free(k);
  114 + free(n);
  115 +
  116 +
  117 +
  118 +
119 } 119 }
120 \ No newline at end of file 120 \ No newline at end of file
1 -#include "globals.h"  
2 -#include <sstream>  
3 -#include <fstream>  
4 -#include <iostream>  
5 -using namespace std;  
6 -  
7 -vector<SpecPair> LoadSpectrum(string filename)  
8 -{  
9 - //load a spectrum from a file and resample to 2wn intervals  
10 -  
11 - //create the spectrum  
12 - vector<SpecPair> S;  
13 -  
14 - //open the file  
15 - ifstream inFile(filename.c_str());  
16 -  
17 -  
18 - SpecPair temp;  
19 - while(!inFile.eof()){  
20 - inFile>>temp.nu;  
21 - inFile>>temp.A;  
22 - S.push_back(temp);  
23 - }  
24 -  
25 - //compute the minimum and maximum input wavenumbers  
26 - double inMin = S.front().nu;  
27 - double inMax = S.back().nu;  
28 -  
29 - int nuMin = (int)ceil(inMin);  
30 - int nuMax = (int)floor(inMax);  
31 -  
32 - //make sure both are either even or odd  
33 - if(nuMin % 2 != nuMax % 2)  
34 - nuMax--;  
35 -  
36 - //compute the number of values in the resampled spectrum  
37 - int nVals = (nuMax - nuMin)/2 + 1;  
38 -  
39 - //allocate space for the spectrum  
40 - vector<SpecPair> outSpec;  
41 -  
42 - double nu, highVal, lowVal, a;  
43 - int j=1;  
44 - for(int i=0; i<nVals; i++)  
45 - {  
46 - nu = nuMin + i * 2;  
47 - temp.nu = nu;  
48 -  
49 - //handle the boundary cases  
50 - if(nu < inMin || nu > inMax)  
51 - temp.A = 0.0;  
52 - else  
53 - {  
54 - //move to the correct position in the input array  
55 - while(j < (int)S.size()-1 && S[j].nu <= nu)  
56 - j++;  
57 -  
58 - lowVal = S[j-1].nu;  
59 - highVal = S[j].nu;  
60 - a = (nu - lowVal)/(highVal - lowVal);  
61 - temp.A = S[j-1].A * (1.0 - a) + S[j].A * a;  
62 - }  
63 - outSpec.push_back(temp);  
64 - }  
65 -  
66 -  
67 -  
68 - return outSpec;  
69 -}  
70 -  
71 -vector<SpecPair> SetReferenceSpectrum(char* text)  
72 -{  
73 - stringstream inString(text);  
74 -  
75 - //create the spectrum  
76 - vector<SpecPair> S;  
77 -  
78 - SpecPair temp;  
79 - while(!inString.eof()){  
80 - inString>>temp.nu;  
81 - inString>>temp.A;  
82 - S.push_back(temp);  
83 - }  
84 -  
85 - return S;  
86 -}  
87 -  
88 -void SaveK(string fileName)  
89 -{  
90 - ofstream outFile(fileName.c_str());  
91 - for(unsigned int i=0; i<EtaK.size(); i++)  
92 - {  
93 - outFile<<EtaK[i].nu<<" ";  
94 - outFile<<EtaK[i].A<<endl;  
95 - }  
96 - outFile.close();  
97 -}  
98 -  
99 -void SaveN(string fileName)  
100 -{  
101 - ofstream outFile(fileName.c_str());  
102 - for(unsigned int i=0; i<EtaN.size(); i++)  
103 - {  
104 - outFile<<EtaN[i].nu<<" ";  
105 - outFile<<EtaN[i].A<<endl;  
106 - }  
107 - outFile.close();  
108 -}  
109 -  
110 -void SaveSimulation(string fileName)  
111 -{  
112 - ofstream outFile(fileName.c_str());  
113 - outFile.precision(10);  
114 - for(unsigned int i=0; i<SimSpectrum.size(); i++)  
115 - {  
116 - outFile<<SimSpectrum[i].nu<<" ";  
117 - outFile<<SimSpectrum[i].A<<endl;  
118 - }  
119 - outFile.close();  
120 -}  
121 -  
122 -void SaveState()  
123 -{  
124 - ofstream outFile("main.prj");  
125 - //Window Parameters  
126 - outFile<<nuMin<<endl;  
127 - outFile<<nuMax<<endl;  
128 - outFile<<aMin<<endl;  
129 - outFile<<aMax<<endl;  
130 - outFile<<dNu<<endl;  
131 -  
132 - //material parameters  
133 - outFile<<radius<<endl;  
134 - outFile<<baseIR<<endl;  
135 - outFile<<cA<<endl;  
136 -  
137 - //optical parameters  
138 - outFile<<cNAi<<endl;  
139 - outFile<<cNAo<<endl;  
140 - outFile<<oNAi<<endl;  
141 - outFile<<oNAo<<endl;  
142 -  
143 - outFile.close();  
144 -  
145 -}  
146 -  
147 -void LoadState()  
148 -{  
149 - ifstream inFile("main.prj");  
150 - //Window Parameters  
151 - inFile>>nuMin;  
152 - inFile>>nuMax;  
153 - inFile>>aMin;  
154 - inFile>>aMax;  
155 - inFile>>dNu;  
156 -  
157 - //material parameters  
158 - inFile>>radius;  
159 - inFile>>baseIR;  
160 - inFile>>cA;  
161 -  
162 - //optical parameters  
163 - inFile>>cNAi;  
164 - inFile>>cNAo;  
165 - inFile>>oNAi;  
166 - inFile>>oNAo;  
167 -  
168 - inFile.close();  
169 -  
170 -}  
171 -  
172 -void SetDefaults()  
173 -{  
174 -  
175 - nuMin = 800;  
176 - nuMax = 4000;  
177 - dNu = 2;  
178 -  
179 - aMin = 0;  
180 - aMax = 1;  
181 -  
182 -  
183 - //material parameters  
184 - radius = 4.0f;  
185 - baseIR = 1.49f;  
186 - cA = 1.0;  
187 - vector<SpecPair> KMaterial;  
188 - vector<SpecPair> NMaterial;  
189 -  
190 - //optical parameters  
191 - cNAi = 0.0;  
192 - cNAo = 0.6;  
193 - oNAi = 0.0;  
194 - oNAo = 0.6; 1 +#include "globals.h"
  2 +#include <sstream>
  3 +#include <fstream>
  4 +#include <iostream>
  5 +using namespace std;
  6 +
  7 +vector<SpecPair> LoadSpectrum(string filename)
  8 +{
  9 + //load a spectrum from a file and resample to 2wn intervals
  10 +
  11 + //create the spectrum
  12 + vector<SpecPair> S;
  13 +
  14 + //open the file
  15 + ifstream inFile(filename.c_str());
  16 +
  17 +
  18 + SpecPair temp;
  19 + while(!inFile.eof()){
  20 + inFile>>temp.nu;
  21 + inFile>>temp.A;
  22 + S.push_back(temp);
  23 + }
  24 +
  25 + //compute the minimum and maximum input wavenumbers
  26 + double inMin = S.front().nu;
  27 + double inMax = S.back().nu;
  28 +
  29 + int nuMin = (int)ceil(inMin);
  30 + int nuMax = (int)floor(inMax);
  31 +
  32 + //make sure both are either even or odd
  33 + if(nuMin % 2 != nuMax % 2)
  34 + nuMax--;
  35 +
  36 + //compute the number of values in the resampled spectrum
  37 + int nVals = (nuMax - nuMin)/2 + 1;
  38 +
  39 + //allocate space for the spectrum
  40 + vector<SpecPair> outSpec;
  41 +
  42 + double nu, highVal, lowVal, a;
  43 + int j=1;
  44 + for(int i=0; i<nVals; i++)
  45 + {
  46 + nu = nuMin + i * 2;
  47 + temp.nu = nu;
  48 +
  49 + //handle the boundary cases
  50 + if(nu < inMin || nu > inMax)
  51 + temp.A = 0.0;
  52 + else
  53 + {
  54 + //move to the correct position in the input array
  55 + while(j < (int)S.size()-1 && S[j].nu <= nu)
  56 + j++;
  57 +
  58 + lowVal = S[j-1].nu;
  59 + highVal = S[j].nu;
  60 + a = (nu - lowVal)/(highVal - lowVal);
  61 + temp.A = S[j-1].A * (1.0 - a) + S[j].A * a;
  62 + }
  63 + outSpec.push_back(temp);
  64 + }
  65 +
  66 +
  67 +
  68 + return outSpec;
  69 +}
  70 +
  71 +vector<SpecPair> SetReferenceSpectrum(char* text)
  72 +{
  73 + stringstream inString(text);
  74 +
  75 + //create the spectrum
  76 + vector<SpecPair> S;
  77 +
  78 + SpecPair temp;
  79 + while(!inString.eof()){
  80 + inString>>temp.nu;
  81 + inString>>temp.A;
  82 + S.push_back(temp);
  83 + }
  84 +
  85 + return S;
  86 +}
  87 +
  88 +void SaveK(string fileName)
  89 +{
  90 + ofstream outFile(fileName.c_str());
  91 + for(unsigned int i=0; i<EtaK.size(); i++)
  92 + {
  93 + outFile<<EtaK[i].nu<<" ";
  94 + outFile<<EtaK[i].A<<endl;
  95 + }
  96 + outFile.close();
  97 +}
  98 +
  99 +void SaveN(string fileName)
  100 +{
  101 + ofstream outFile(fileName.c_str());
  102 + for(unsigned int i=0; i<EtaN.size(); i++)
  103 + {
  104 + outFile<<EtaN[i].nu<<" ";
  105 + outFile<<EtaN[i].A<<endl;
  106 + }
  107 + outFile.close();
  108 +}
  109 +
  110 +void SaveSimulation(string fileName)
  111 +{
  112 + ofstream outFile(fileName.c_str());
  113 + outFile.precision(10);
  114 + for(unsigned int i=0; i<SimSpectrum.size(); i++)
  115 + {
  116 + outFile<<SimSpectrum[i].nu<<" ";
  117 + outFile<<SimSpectrum[i].A<<endl;
  118 + }
  119 + outFile.close();
  120 +}
  121 +
  122 +void SaveState()
  123 +{
  124 + ofstream outFile("main.prj");
  125 + //Window Parameters
  126 + outFile<<nuMin<<endl;
  127 + outFile<<nuMax<<endl;
  128 + outFile<<aMin<<endl;
  129 + outFile<<aMax<<endl;
  130 + outFile<<dNu<<endl;
  131 +
  132 + //material parameters
  133 + outFile<<radius<<endl;
  134 + outFile<<baseIR<<endl;
  135 + outFile<<cA<<endl;
  136 +
  137 + //optical parameters
  138 + outFile<<cNAi<<endl;
  139 + outFile<<cNAo<<endl;
  140 + outFile<<oNAi<<endl;
  141 + outFile<<oNAo<<endl;
  142 +
  143 + outFile.close();
  144 +
  145 +}
  146 +
  147 +void LoadState()
  148 +{
  149 + ifstream inFile("main.prj");
  150 + //Window Parameters
  151 + inFile>>nuMin;
  152 + inFile>>nuMax;
  153 + inFile>>aMin;
  154 + inFile>>aMax;
  155 + inFile>>dNu;
  156 +
  157 + //material parameters
  158 + inFile>>radius;
  159 + inFile>>baseIR;
  160 + inFile>>cA;
  161 +
  162 + //optical parameters
  163 + inFile>>cNAi;
  164 + inFile>>cNAo;
  165 + inFile>>oNAi;
  166 + inFile>>oNAo;
  167 +
  168 + inFile.close();
  169 +
  170 +}
  171 +
  172 +void SetDefaults()
  173 +{
  174 +
  175 + nuMin = 800;
  176 + nuMax = 4000;
  177 + dNu = 2;
  178 +
  179 + aMin = 0;
  180 + aMax = 1;
  181 +
  182 +
  183 + //material parameters
  184 + radius = 4.0f;
  185 + baseIR = 1.49f;
  186 + cA = 1.0;
  187 + vector<SpecPair> KMaterial;
  188 + vector<SpecPair> NMaterial;
  189 +
  190 + //optical parameters
  191 + cNAi = 0.0;
  192 + cNAo = 0.6;
  193 + oNAi = 0.0;
  194 + oNAo = 0.6;
195 } 195 }
196 \ No newline at end of file 196 \ No newline at end of file
1 -#  
2 -# The script defines the following variables:  
3 -#  
4 -##############################################################################  
5 -# Note: Removed everything related to CUDA_SDK_ROOT_DIR and only left this as  
6 -# a possible environment variable to set the SDK directory.  
7 -# Include file will be: CUDA_CUT_INCLUDE_DIR  
8 -# Cutil library: CUDA_CUT_LIBRARY  
9 -##############################################################################  
10 -#  
11 -#  
12 -# CUDA_SDK_ROOT_DIR -- Path to the CUDA SDK. Use this to find files in the  
13 -# SDK. This script will not directly support finding  
14 -# specific libraries or headers, as that isn't  
15 -# supported by NVIDIA. If you want to change  
16 -# libraries when the path changes see the  
17 -# FindCUDA.cmake script for an example of how to clear  
18 -# these variables. There are also examples of how to  
19 -# use the CUDA_SDK_ROOT_DIR to locate headers or  
20 -# libraries, if you so choose (at your own risk).  
21 -#  
22 -# This code is licensed under the MIT License. See the FindCUDASDK.cmake script  
23 -# for the text of the license.  
24 -  
25 -# The MIT License  
26 -#  
27 -# License for the specific language governing rights and limitations under  
28 -# Permission is hereby granted, free of charge, to any person obtaining a  
29 -# copy of this software and associated documentation files (the "Software"),  
30 -# to deal in the Software without restriction, including without limitation  
31 -# the rights to use, copy, modify, merge, publish, distribute, sublicense,  
32 -# and/or sell copies of the Software, and to permit persons to whom the  
33 -# Software is furnished to do so, subject to the following conditions:  
34 -#  
35 -# The above copyright notice and this permission notice shall be included  
36 -# in all copies or substantial portions of the Software.  
37 -#  
38 -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  
39 -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  
40 -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL  
41 -# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER  
42 -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING  
43 -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER  
44 -# DEALINGS IN THE SOFTWARE.  
45 -#  
46 -###############################################################################  
47 -  
48 -# FindCUDASDK.cmake  
49 -  
50 -# # Check to see if the CUDA_SDK_ROOT_DIR has changed,  
51 -# # if it has then clear the cache variable, so that it will be detected again.  
52 -# if(NOT "${CUDA_SDK_ROOT_DIR}" STREQUAL "${CUDA_SDK_ROOT_DIR_INTERNAL}")  
53 -# # No specific variables to catch. Use this kind of code before calling  
54 -# # find_package(CUDA) to clean up any variables that may depend on this path.  
55 -#  
56 -# # unset(MY_SPECIAL_CUDA_SDK_INCLUDE_DIR CACHE)  
57 -# # unset(MY_SPECIAL_CUDA_SDK_LIBRARY CACHE)  
58 -# endif()  
59 -#  
60 -# ########################  
61 -# # Look for the SDK stuff  
62 -# find_path(CUDA_SDK_ROOT_DIR cutil.h  
63 -# PATH_SUFFIXES "common/inc" "C/common/inc"  
64 -# "$ENV{NVSDKCUDA_ROOT}"  
65 -# "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]"  
66 -# "/Developer/GPU\ Computing/C"  
67 -# )  
68 -#  
69 -# # fallback method for determining CUDA_SDK_ROOT_DIR in case the previous one failed!  
70 -# if (NOT CUDA_SDK_ROOT_DIR)  
71 -# find_path(CUDA_SDK_ROOT_DIR C/common/inc/cutil.h  
72 -# "$ENV{NVSDKCUDA_ROOT}"  
73 -# "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]"  
74 -# "/Developer/GPU\ Computing/C"  
75 -# )  
76 -# endif()  
77 -  
78 -# Keep the CUDA_SDK_ROOT_DIR first in order to be able to override the  
79 -# environment variables.  
80 -set(CUDA_SDK_SEARCH_PATH  
81 - "${CUDA_SDK_ROOT_DIR}"  
82 - "${CUDA_TOOLKIT_ROOT_DIR}/local/NVSDK0.2"  
83 - "${CUDA_TOOLKIT_ROOT_DIR}/NVSDK0.2"  
84 - "${CUDA_TOOLKIT_ROOT_DIR}/NV_SDK"  
85 - "${CUDA_TOOLKIT_ROOT_DIR}/NV_CUDA_SDK"  
86 - "$ENV{HOME}/NVIDIA_CUDA_SDK"  
87 - "$ENV{HOME}/NVIDIA_CUDA_SDK_MACOSX"  
88 - "$ENV{HOME}/NVIDIA_GPU_Computing_SDK"  
89 - "/Developer/CUDA"  
90 - )  
91 -  
92 -# Find include file from the CUDA_SDK_SEARCH_PATH  
93 -  
94 -find_path(CUDA_CUT_INCLUDE_DIR  
95 - cutil.h  
96 - PATHS ${CUDA_SDK_SEARCH_PATH}  
97 - PATH_SUFFIXES "common/inc" "C/common/inc"  
98 - DOC "Location of cutil.h"  
99 - NO_DEFAULT_PATH  
100 - )  
101 -# Now search system paths  
102 -find_path(CUDA_CUT_INCLUDE_DIR cutil.h DOC "Location of cutil.h")  
103 -  
104 -# mark_as_advanced(CUDA_CUT_INCLUDE_DIR)  
105 -  
106 -  
107 -# Example of how to find a library in the CUDA_SDK_ROOT_DIR  
108 -  
109 -# cutil library is called cutil64 for 64 bit builds on windows. We don't want  
110 -# to get these confused, so we are setting the name based on the word size of  
111 -# the build.  
112 -  
113 -# New library might be called cutil_x86_64 !  
114 -  
115 -if(CMAKE_SIZEOF_VOID_P EQUAL 8)  
116 - set(cuda_cutil_name cutil64)  
117 -else(CMAKE_SIZEOF_VOID_P EQUAL 8)  
118 - set(cuda_cutil_name cutil32)  
119 -endif(CMAKE_SIZEOF_VOID_P EQUAL 8)  
120 -  
121 -find_library(CUDA_CUT_LIBRARY  
122 - NAMES ${cuda_cutil_name} cutil cutil_x86_64 cutil_i386  
123 - PATHS ${CUDA_SDK_SEARCH_PATH}  
124 - # The new version of the sdk shows up in common/lib, but the old one is in lib  
125 - # The very newest installation Path of the SDK is in subdirectory 'C'. Please add this Path to the possible suffixes.  
126 - PATH_SUFFIXES "C/lib" "common/lib" "lib" "C/common/lib" "common/lib"  
127 - DOC "Location of cutil library"  
128 - NO_DEFAULT_PATH  
129 - )  
130 -# # Now search system paths  
131 -# find_library(CUDA_CUT_LIBRARY NAMES cutil ${cuda_cutil_name} DOC "Location of cutil library")  
132 -mark_as_advanced(CUDA_CUT_LIBRARY)  
133 -set(CUDA_CUT_LIBRARIES ${CUDA_CUT_LIBRARY})  
134 -  
135 -#############################  
136 -# Check for required components  
137 -if(CUDA_CUT_INCLUDE_DIR)  
138 - set(CUDASDK_FOUND TRUE)  
139 -endif(CUDA_CUT_INCLUDE_DIR)  
140 -  
141 -# set(CUDA_SDK_ROOT_DIR_INTERNAL "${CUDA_SDK_ROOT_DIR}" CACHE INTERNAL  
142 -# "This is the value of the last time CUDA_SDK_ROOT_DIR was set successfully." FORCE) 1 +#
  2 +# The script defines the following variables:
  3 +#
  4 +##############################################################################
  5 +# Note: Removed everything related to CUDA_SDK_ROOT_DIR and only left this as
  6 +# a possible environment variable to set the SDK directory.
  7 +# Include file will be: CUDA_CUT_INCLUDE_DIR
  8 +# Cutil library: CUDA_CUT_LIBRARY
  9 +##############################################################################
  10 +#
  11 +#
  12 +# CUDA_SDK_ROOT_DIR -- Path to the CUDA SDK. Use this to find files in the
  13 +# SDK. This script will not directly support finding
  14 +# specific libraries or headers, as that isn't
  15 +# supported by NVIDIA. If you want to change
  16 +# libraries when the path changes see the
  17 +# FindCUDA.cmake script for an example of how to clear
  18 +# these variables. There are also examples of how to
  19 +# use the CUDA_SDK_ROOT_DIR to locate headers or
  20 +# libraries, if you so choose (at your own risk).
  21 +#
  22 +# This code is licensed under the MIT License. See the FindCUDASDK.cmake script
  23 +# for the text of the license.
  24 +
  25 +# The MIT License
  26 +#
  27 +# License for the specific language governing rights and limitations under
  28 +# Permission is hereby granted, free of charge, to any person obtaining a
  29 +# copy of this software and associated documentation files (the "Software"),
  30 +# to deal in the Software without restriction, including without limitation
  31 +# the rights to use, copy, modify, merge, publish, distribute, sublicense,
  32 +# and/or sell copies of the Software, and to permit persons to whom the
  33 +# Software is furnished to do so, subject to the following conditions:
  34 +#
  35 +# The above copyright notice and this permission notice shall be included
  36 +# in all copies or substantial portions of the Software.
  37 +#
  38 +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  39 +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  40 +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  41 +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  42 +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  43 +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  44 +# DEALINGS IN THE SOFTWARE.
  45 +#
  46 +###############################################################################
  47 +
  48 +# FindCUDASDK.cmake
  49 +
  50 +# # Check to see if the CUDA_SDK_ROOT_DIR has changed,
  51 +# # if it has then clear the cache variable, so that it will be detected again.
  52 +# if(NOT "${CUDA_SDK_ROOT_DIR}" STREQUAL "${CUDA_SDK_ROOT_DIR_INTERNAL}")
  53 +# # No specific variables to catch. Use this kind of code before calling
  54 +# # find_package(CUDA) to clean up any variables that may depend on this path.
  55 +#
  56 +# # unset(MY_SPECIAL_CUDA_SDK_INCLUDE_DIR CACHE)
  57 +# # unset(MY_SPECIAL_CUDA_SDK_LIBRARY CACHE)
  58 +# endif()
  59 +#
  60 +# ########################
  61 +# # Look for the SDK stuff
  62 +# find_path(CUDA_SDK_ROOT_DIR cutil.h
  63 +# PATH_SUFFIXES "common/inc" "C/common/inc"
  64 +# "$ENV{NVSDKCUDA_ROOT}"
  65 +# "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]"
  66 +# "/Developer/GPU\ Computing/C"
  67 +# )
  68 +#
  69 +# # fallback method for determining CUDA_SDK_ROOT_DIR in case the previous one failed!
  70 +# if (NOT CUDA_SDK_ROOT_DIR)
  71 +# find_path(CUDA_SDK_ROOT_DIR C/common/inc/cutil.h
  72 +# "$ENV{NVSDKCUDA_ROOT}"
  73 +# "[HKEY_LOCAL_MACHINE\\SOFTWARE\\NVIDIA Corporation\\Installed Products\\NVIDIA SDK 10\\Compute;InstallDir]"
  74 +# "/Developer/GPU\ Computing/C"
  75 +# )
  76 +# endif()
  77 +
  78 +# Keep the CUDA_SDK_ROOT_DIR first in order to be able to override the
  79 +# environment variables.
  80 +set(CUDA_SDK_SEARCH_PATH
  81 + "${CUDA_SDK_ROOT_DIR}"
  82 + "${CUDA_TOOLKIT_ROOT_DIR}/local/NVSDK0.2"
  83 + "${CUDA_TOOLKIT_ROOT_DIR}/NVSDK0.2"
  84 + "${CUDA_TOOLKIT_ROOT_DIR}/NV_SDK"
  85 + "${CUDA_TOOLKIT_ROOT_DIR}/NV_CUDA_SDK"
  86 + "$ENV{HOME}/NVIDIA_CUDA_SDK"
  87 + "$ENV{HOME}/NVIDIA_CUDA_SDK_MACOSX"
  88 + "$ENV{HOME}/NVIDIA_GPU_Computing_SDK"
  89 + "/Developer/CUDA"
  90 + )
  91 +
  92 +# Find include file from the CUDA_SDK_SEARCH_PATH
  93 +
  94 +find_path(CUDA_CUT_INCLUDE_DIR
  95 + cutil.h
  96 + PATHS ${CUDA_SDK_SEARCH_PATH}
  97 + PATH_SUFFIXES "common/inc" "C/common/inc"
  98 + DOC "Location of cutil.h"
  99 + NO_DEFAULT_PATH
  100 + )
  101 +# Now search system paths
  102 +find_path(CUDA_CUT_INCLUDE_DIR cutil.h DOC "Location of cutil.h")
  103 +
  104 +# mark_as_advanced(CUDA_CUT_INCLUDE_DIR)
  105 +
  106 +
  107 +# Example of how to find a library in the CUDA_SDK_ROOT_DIR
  108 +
  109 +# cutil library is called cutil64 for 64 bit builds on windows. We don't want
  110 +# to get these confused, so we are setting the name based on the word size of
  111 +# the build.
  112 +
  113 +# New library might be called cutil_x86_64 !
  114 +
  115 +if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  116 + set(cuda_cutil_name cutil64)
  117 +else(CMAKE_SIZEOF_VOID_P EQUAL 8)
  118 + set(cuda_cutil_name cutil32)
  119 +endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
  120 +
  121 +find_library(CUDA_CUT_LIBRARY
  122 + NAMES ${cuda_cutil_name} cutil cutil_x86_64 cutil_i386
  123 + PATHS ${CUDA_SDK_SEARCH_PATH}
  124 + # The new version of the sdk shows up in common/lib, but the old one is in lib
  125 + # The very newest installation Path of the SDK is in subdirectory 'C'. Please add this Path to the possible suffixes.
  126 + PATH_SUFFIXES "C/lib" "common/lib" "lib" "C/common/lib" "common/lib"
  127 + DOC "Location of cutil library"
  128 + NO_DEFAULT_PATH
  129 + )
  130 +# # Now search system paths
  131 +# find_library(CUDA_CUT_LIBRARY NAMES cutil ${cuda_cutil_name} DOC "Location of cutil library")
  132 +mark_as_advanced(CUDA_CUT_LIBRARY)
  133 +set(CUDA_CUT_LIBRARIES ${CUDA_CUT_LIBRARY})
  134 +
  135 +#############################
  136 +# Check for required components
  137 +if(CUDA_CUT_INCLUDE_DIR)
  138 + set(CUDASDK_FOUND TRUE)
  139 +endif(CUDA_CUT_INCLUDE_DIR)
  140 +
  141 +# set(CUDA_SDK_ROOT_DIR_INTERNAL "${CUDA_SDK_ROOT_DIR}" CACHE INTERNAL
  142 +# "This is the value of the last time CUDA_SDK_ROOT_DIR was set successfully." FORCE)
1 -#  
2 -# Try to find GLEW library and include path.  
3 -# Once done this will define  
4 -#  
5 -# GLEW_FOUND  
6 -# GLEW_INCLUDE_PATH  
7 -# GLEW_LIBRARY  
8 -#  
9 -  
10 -IF (WIN32)  
11 - FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h  
12 - $ENV{PROGRAMFILES}/GLEW/include  
13 - ${PROJECT_SOURCE_DIR}/src/nvgl/glew/include  
14 - DOC "The directory where GL/glew.h resides")  
15 - FIND_LIBRARY( GLEW_LIBRARY  
16 - NAMES glew GLEW glew32 glew32s  
17 - PATHS  
18 - $ENV{PROGRAMFILES}/GLEW/lib  
19 - ${PROJECT_SOURCE_DIR}/src/nvgl/glew/bin  
20 - ${PROJECT_SOURCE_DIR}/src/nvgl/glew/lib  
21 - DOC "The GLEW library")  
22 -ELSE (WIN32)  
23 - FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h  
24 - /usr/include  
25 - /usr/local/include  
26 - /sw/include  
27 - /opt/local/include  
28 - DOC "The directory where GL/glew.h resides")  
29 - FIND_LIBRARY( GLEW_LIBRARY  
30 - NAMES GLEW glew  
31 - PATHS  
32 - /usr/lib64  
33 - /usr/lib  
34 - /usr/local/lib64  
35 - /usr/local/lib  
36 - /sw/lib  
37 - /opt/local/lib  
38 - DOC "The GLEW library")  
39 -ENDIF (WIN32)  
40 -  
41 -IF (GLEW_INCLUDE_PATH)  
42 - SET( GLEW_FOUND 1 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise")  
43 -ELSE (GLEW_INCLUDE_PATH)  
44 - SET( GLEW_FOUND 0 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise")  
45 -ENDIF (GLEW_INCLUDE_PATH)  
46 -  
47 -MARK_AS_ADVANCED(  
48 - GLEW_FOUND  
49 - GLEW_INCLUDE_PATH  
50 - GLEW_LIBRARY 1 +#
  2 +# Try to find GLEW library and include path.
  3 +# Once done this will define
  4 +#
  5 +# GLEW_FOUND
  6 +# GLEW_INCLUDE_PATH
  7 +# GLEW_LIBRARY
  8 +#
  9 +
  10 +IF (WIN32)
  11 + FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h
  12 + $ENV{PROGRAMFILES}/GLEW/include
  13 + ${PROJECT_SOURCE_DIR}/src/nvgl/glew/include
  14 + DOC "The directory where GL/glew.h resides")
  15 + FIND_LIBRARY( GLEW_LIBRARY
  16 + NAMES glew GLEW glew32 glew32s
  17 + PATHS
  18 + $ENV{PROGRAMFILES}/GLEW/lib
  19 + ${PROJECT_SOURCE_DIR}/src/nvgl/glew/bin
  20 + ${PROJECT_SOURCE_DIR}/src/nvgl/glew/lib
  21 + DOC "The GLEW library")
  22 +ELSE (WIN32)
  23 + FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h
  24 + /usr/include
  25 + /usr/local/include
  26 + /sw/include
  27 + /opt/local/include
  28 + DOC "The directory where GL/glew.h resides")
  29 + FIND_LIBRARY( GLEW_LIBRARY
  30 + NAMES GLEW glew
  31 + PATHS
  32 + /usr/lib64
  33 + /usr/lib
  34 + /usr/local/lib64
  35 + /usr/local/lib
  36 + /sw/lib
  37 + /opt/local/lib
  38 + DOC "The GLEW library")
  39 +ENDIF (WIN32)
  40 +
  41 +IF (GLEW_INCLUDE_PATH)
  42 + SET( GLEW_FOUND 1 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise")
  43 +ELSE (GLEW_INCLUDE_PATH)
  44 + SET( GLEW_FOUND 0 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise")
  45 +ENDIF (GLEW_INCLUDE_PATH)
  46 +
  47 +MARK_AS_ADVANCED(
  48 + GLEW_FOUND
  49 + GLEW_INCLUDE_PATH
  50 + GLEW_LIBRARY
51 ) 51 )
52 \ No newline at end of file 52 \ No newline at end of file
1 -# Tries to find the RTS include directory  
2 -  
3 - FIND_PATH( RTS_INCLUDE_DIR NAMES rts_glShaderProgram.h  
4 - PATHS  
5 - ${CMAKE_CURRENT_SOURCE_DIR}/rts  
6 - ${RTS_ROOT_PATH}  
7 -)  
8 -  
9 -IF (RTS_FOUND)  
10 - #The following deprecated settings are for backwards compatibility with CMake1.4  
11 - SET (RTS_INCLUDE_PATH ${RTS_INCLUDE_DIR})  
12 -ENDIF(RTS_FOUND)  
13 -  
14 -FIND_PACKAGE_HANDLE_STANDARD_ARGS(RTS REQUIRED_VARS TRUE RTS_INCLUDE_DIR) 1 +# Tries to find the RTS include directory
  2 +
  3 + FIND_PATH( RTS_INCLUDE_DIR NAMES rts_glShaderProgram.h
  4 + PATHS
  5 + ${CMAKE_CURRENT_SOURCE_DIR}/rts
  6 + ${RTS_ROOT_PATH}
  7 +)
  8 +
  9 +IF (RTS_FOUND)
  10 + #The following deprecated settings are for backwards compatibility with CMake1.4
  11 + SET (RTS_INCLUDE_PATH ${RTS_INCLUDE_DIR})
  12 +ENDIF(RTS_FOUND)
  13 +
  14 +FIND_PACKAGE_HANDLE_STANDARD_ARGS(RTS REQUIRED_VARS TRUE RTS_INCLUDE_DIR)
1 -// gamma.cpp -- computation of gamma function.  
2 -// Algorithms and coefficient values from "Computation of Special  
3 -// Functions", Zhang and Jin, John Wiley and Sons, 1996.  
4 -//  
5 -// (C) 2003, C. Bond. All rights reserved.  
6 -//  
7 -// Returns gamma function of argument 'x'.  
8 -//  
9 -// NOTE: Returns 1e308 if argument is a negative integer or 0,  
10 -// or if argument exceeds 171.  
11 -//  
12 -#define _USE_MATH_DEFINES  
13 -#include <math.h>  
14 -double gamma(double x)  
15 -{  
16 - int i,k,m;  
17 - double ga,gr,r,z;  
18 -  
19 - static double g[] = {  
20 - 1.0,  
21 - 0.5772156649015329,  
22 - -0.6558780715202538,  
23 - -0.420026350340952e-1,  
24 - 0.1665386113822915,  
25 - -0.421977345555443e-1,  
26 - -0.9621971527877e-2,  
27 - 0.7218943246663e-2,  
28 - -0.11651675918591e-2,  
29 - -0.2152416741149e-3,  
30 - 0.1280502823882e-3,  
31 - -0.201348547807e-4,  
32 - -0.12504934821e-5,  
33 - 0.1133027232e-5,  
34 - -0.2056338417e-6,  
35 - 0.6116095e-8,  
36 - 0.50020075e-8,  
37 - -0.11812746e-8,  
38 - 0.1043427e-9,  
39 - 0.77823e-11,  
40 - -0.36968e-11,  
41 - 0.51e-12,  
42 - -0.206e-13,  
43 - -0.54e-14,  
44 - 0.14e-14};  
45 -  
46 - if (x > 171.0) return 1e308; // This value is an overflow flag.  
47 - if (x == (int)x) {  
48 - if (x > 0.0) {  
49 - ga = 1.0; // use factorial  
50 - for (i=2;i<x;i++) {  
51 - ga *= i;  
52 - }  
53 - }  
54 - else  
55 - ga = 1e308;  
56 - }  
57 - else {  
58 - if (fabs(x) > 1.0) {  
59 - z = fabs(x);  
60 - m = (int)z;  
61 - r = 1.0;  
62 - for (k=1;k<=m;k++) {  
63 - r *= (z-k);  
64 - }  
65 - z -= m;  
66 - }  
67 - else  
68 - z = x;  
69 - gr = g[24];  
70 - for (k=23;k>=0;k--) {  
71 - gr = gr*z+g[k];  
72 - }  
73 - ga = 1.0/(gr*z);  
74 - if (fabs(x) > 1.0) {  
75 - ga *= r;  
76 - if (x < 0.0) {  
77 - ga = -M_PI/(x*ga*sin(M_PI*x));  
78 - }  
79 - }  
80 - }  
81 - return ga;  
82 -} 1 +// gamma.cpp -- computation of gamma function.
  2 +// Algorithms and coefficient values from "Computation of Special
  3 +// Functions", Zhang and Jin, John Wiley and Sons, 1996.
  4 +//
  5 +// (C) 2003, C. Bond. All rights reserved.
  6 +//
  7 +// Returns gamma function of argument 'x'.
  8 +//
  9 +// NOTE: Returns 1e308 if argument is a negative integer or 0,
  10 +// or if argument exceeds 171.
  11 +//
  12 +#define _USE_MATH_DEFINES
  13 +#include <math.h>
  14 +double gamma(double x)
  15 +{
  16 + int i,k,m;
  17 + double ga,gr,r,z;
  18 +
  19 + static double g[] = {
  20 + 1.0,
  21 + 0.5772156649015329,
  22 + -0.6558780715202538,
  23 + -0.420026350340952e-1,
  24 + 0.1665386113822915,
  25 + -0.421977345555443e-1,
  26 + -0.9621971527877e-2,
  27 + 0.7218943246663e-2,
  28 + -0.11651675918591e-2,
  29 + -0.2152416741149e-3,
  30 + 0.1280502823882e-3,
  31 + -0.201348547807e-4,
  32 + -0.12504934821e-5,
  33 + 0.1133027232e-5,
  34 + -0.2056338417e-6,
  35 + 0.6116095e-8,
  36 + 0.50020075e-8,
  37 + -0.11812746e-8,
  38 + 0.1043427e-9,
  39 + 0.77823e-11,
  40 + -0.36968e-11,
  41 + 0.51e-12,
  42 + -0.206e-13,
  43 + -0.54e-14,
  44 + 0.14e-14};
  45 +
  46 + if (x > 171.0) return 1e308; // This value is an overflow flag.
  47 + if (x == (int)x) {
  48 + if (x > 0.0) {
  49 + ga = 1.0; // use factorial
  50 + for (i=2;i<x;i++) {
  51 + ga *= i;
  52 + }
  53 + }
  54 + else
  55 + ga = 1e308;
  56 + }
  57 + else {
  58 + if (fabs(x) > 1.0) {
  59 + z = fabs(x);
  60 + m = (int)z;
  61 + r = 1.0;
  62 + for (k=1;k<=m;k++) {
  63 + r *= (z-k);
  64 + }
  65 + z -= m;
  66 + }
  67 + else
  68 + z = x;
  69 + gr = g[24];
  70 + for (k=23;k>=0;k--) {
  71 + gr = gr*z+g[k];
  72 + }
  73 + ga = 1.0/(gr*z);
  74 + if (fabs(x) > 1.0) {
  75 + ga *= r;
  76 + if (x < 0.0) {
  77 + ga = -M_PI/(x*ga*sin(M_PI*x));
  78 + }
  79 + }
  80 + }
  81 + return ga;
  82 +}
1 -// add the following to a cpp file:  
2 -// PerformanceData PD;  
3 -  
4 -  
5 -#pragma once  
6 -#include <ostream>  
7 -using namespace std;  
8 -  
9 -enum PerformanceDataType  
10 -{  
11 - PD_DISPLAY=0,  
12 - PD_SPS,  
13 - PD_UNUSED0,  
14 -  
15 - //my stuff  
16 - SIMULATE_SPECTRUM,  
17 - SIMULATE_GPU,  
18 - KRAMERS_KRONIG,  
19 -  
20 -  
21 -  
22 - //end my stuff  
23 - PERFORMANCE_DATA_TYPE_COUNT  
24 -};  
25 -  
26 -static char PDTypeNames[][255] = {  
27 - "Display ",  
28 - "Simulation Total ",  
29 - " ----------------- ",  
30 - //my stuff  
31 - "Simulate Spectrum ",  
32 - " GPU Portion ",  
33 - "Kramers-Kronig ",  
34 -  
35 - //end my stuff  
36 -  
37 -};  
38 -#ifdef WIN32  
39 -#include <stdio.h>  
40 -#include <windows.h>  
41 -#include <float.h>  
42 -  
43 -#include <iostream>  
44 -#include <iomanip>  
45 -  
46 -//-------------------------------------------------------------------------------  
47 -  
48 -class PerformanceData  
49 -{  
50 -public:  
51 - PerformanceData() { ClearAll(); QueryPerformanceFrequency(&cps); }  
52 - ~PerformanceData(){}  
53 -  
54 - void ClearAll()  
55 - {  
56 - for ( int i=0; i<PERFORMANCE_DATA_TYPE_COUNT; i++ ) {  
57 - for ( int j=0; j<256; j++ ) times[i][j] = 0;  
58 - pos[i] = 0;  
59 - minTime[i] = 0xFFFFFFFF;  
60 - maxTime[i] = 0;  
61 - totalTime[i] = 0;  
62 - dataReady[i] = false;  
63 - }  
64 - }  
65 -  
66 - void StartTimer( int type ) { QueryPerformanceCounter( &startTime[type] );}  
67 - void EndTimer( int type ) {  
68 - LARGE_INTEGER endTime;  
69 - QueryPerformanceCounter( &endTime );  
70 - double t = (double)(endTime.QuadPart - startTime[type].QuadPart);  
71 - //unsigned int t = GetTickCount() - startTime[type];  
72 - if ( t < minTime[type] ) minTime[type] = t;  
73 - if ( t > maxTime[type] ) maxTime[type] = t;  
74 - totalTime[type] -= times[type][ pos[type] ];  
75 - times[type][ pos[type] ] = t;  
76 - totalTime[type] += t;  
77 - pos[type]++;  
78 - if ( pos[type] == 0 ) dataReady[type] = true;  
79 - }  
80 -  
81 - void PrintResult( ostream &os,int i=PERFORMANCE_DATA_TYPE_COUNT)  
82 - {  
83 - os.setf(ios::fixed);  
84 - if ((i<PERFORMANCE_DATA_TYPE_COUNT)&&(i>=0)){  
85 - double a = GetAvrgTime(i);  
86 - if ( a )  
87 - os<< PDTypeNames[i]<<" : avrg="<<setw(8)<<setprecision(3)<<a<<"\tmin="<<setw(8)<<setprecision(3)<< GetMinTime(i) <<"\tmax="<<setw(8)<<setprecision(3)<< GetMaxTime(i) <<endl ;  
88 - else  
89 - os<< PDTypeNames[i]<<" : avrg= -----\tmin= -----\tmax= -----"<<endl;  
90 - }  
91 - }  
92 -  
93 - void PrintResults( ostream &os)  
94 - {  
95 - for ( int i=0; i<PERFORMANCE_DATA_TYPE_COUNT; i++ )  
96 - PrintResult(os,i);  
97 - }  
98 -  
99 - double GetLastTime( int type ) { return times[type][pos[type]]; }  
100 - double GetAvrgTime( int type ) { double a = 1000.0 * totalTime[type] / (float)cps.QuadPart / ( (dataReady[type]) ? 256.0 : (double)pos[type] ); return (_finite(a))? a:0; }  
101 - double GetMinTime( int type ) { return 1000.0 * minTime[type] / (float)cps.LowPart; }  
102 - double GetMaxTime( int type ) { return 1000.0 * maxTime[type] / (float)cps.LowPart; }  
103 -  
104 -private:  
105 - double times[PERFORMANCE_DATA_TYPE_COUNT][256];  
106 - unsigned char pos[PERFORMANCE_DATA_TYPE_COUNT];  
107 - LARGE_INTEGER startTime[PERFORMANCE_DATA_TYPE_COUNT];  
108 - double minTime[ PERFORMANCE_DATA_TYPE_COUNT ];  
109 - double maxTime[ PERFORMANCE_DATA_TYPE_COUNT ];  
110 - double totalTime[ PERFORMANCE_DATA_TYPE_COUNT ];  
111 - bool dataReady[ PERFORMANCE_DATA_TYPE_COUNT ];  
112 - LARGE_INTEGER cps;  
113 -};  
114 -  
115 -//-------------------------------------------------------------------------------  
116 -#else  
117 -  
118 -class PerformanceData{  
119 -public:  
120 - PerformanceData() {;};  
121 - ~PerformanceData(){;};  
122 - void ClearAll(){;};  
123 - void StartTimer( int type ) {;};  
124 - void EndTimer( int type ) {;};  
125 - void PrintResults( ostream &os){;};  
126 - void PrintResult( ostream &os, int i=PERFORMANCE_DATA_TYPE_COUNT){;};  
127 - double GetLastTime( int type ) { return 0.0; };  
128 - double GetAvrgTime( int type ) { return 0.0; };  
129 - double GetMinTime( int type ) { return 0.0; };  
130 - double GetMaxTime( int type ) { return 0.0; };  
131 -};  
132 -  
133 -#endif  
134 -//-------------------------------------------------------------------------------  
135 -  
136 -extern PerformanceData PD;  
137 -  
138 -//------------------------------------------------------------------------------- 1 +// add the following to a cpp file:
  2 +// PerformanceData PD;
  3 +
  4 +
  5 +#pragma once
  6 +#include <ostream>
  7 +using namespace std;
  8 +
  9 +enum PerformanceDataType
  10 +{
  11 + PD_DISPLAY=0,
  12 + PD_SPS,
  13 + PD_UNUSED0,
  14 +
  15 + //my stuff
  16 + SIMULATE_SPECTRUM,
  17 + SIMULATE_GPU,
  18 + KRAMERS_KRONIG,
  19 +
  20 +
  21 +
  22 + //end my stuff
  23 + PERFORMANCE_DATA_TYPE_COUNT
  24 +};
  25 +
  26 +static char PDTypeNames[][255] = {
  27 + "Display ",
  28 + "Simulation Total ",
  29 + " ----------------- ",
  30 + //my stuff
  31 + "Simulate Spectrum ",
  32 + " GPU Portion ",
  33 + "Kramers-Kronig ",
  34 +
  35 + //end my stuff
  36 +
  37 +};
  38 +#ifdef WIN32
  39 +#include <stdio.h>
  40 +#include <windows.h>
  41 +#include <float.h>
  42 +
  43 +#include <iostream>
  44 +#include <iomanip>
  45 +
  46 +//-------------------------------------------------------------------------------
  47 +
  48 +class PerformanceData
  49 +{
  50 +public:
  51 + PerformanceData() { ClearAll(); QueryPerformanceFrequency(&cps); }
  52 + ~PerformanceData(){}
  53 +
  54 + void ClearAll()
  55 + {
  56 + for ( int i=0; i<PERFORMANCE_DATA_TYPE_COUNT; i++ ) {
  57 + for ( int j=0; j<256; j++ ) times[i][j] = 0;
  58 + pos[i] = 0;
  59 + minTime[i] = 0xFFFFFFFF;
  60 + maxTime[i] = 0;
  61 + totalTime[i] = 0;
  62 + dataReady[i] = false;
  63 + }
  64 + }
  65 +
  66 + void StartTimer( int type ) { QueryPerformanceCounter( &startTime[type] );}
  67 + void EndTimer( int type ) {
  68 + LARGE_INTEGER endTime;
  69 + QueryPerformanceCounter( &endTime );
  70 + double t = (double)(endTime.QuadPart - startTime[type].QuadPart);
  71 + //unsigned int t = GetTickCount() - startTime[type];
  72 + if ( t < minTime[type] ) minTime[type] = t;
  73 + if ( t > maxTime[type] ) maxTime[type] = t;
  74 + totalTime[type] -= times[type][ pos[type] ];
  75 + times[type][ pos[type] ] = t;
  76 + totalTime[type] += t;
  77 + pos[type]++;
  78 + if ( pos[type] == 0 ) dataReady[type] = true;
  79 + }
  80 +
  81 + void PrintResult( ostream &os,int i=PERFORMANCE_DATA_TYPE_COUNT)
  82 + {
  83 + os.setf(ios::fixed);
  84 + if ((i<PERFORMANCE_DATA_TYPE_COUNT)&&(i>=0)){
  85 + double a = GetAvrgTime(i);
  86 + if ( a )
  87 + os<< PDTypeNames[i]<<" : avrg="<<setw(8)<<setprecision(3)<<a<<"\tmin="<<setw(8)<<setprecision(3)<< GetMinTime(i) <<"\tmax="<<setw(8)<<setprecision(3)<< GetMaxTime(i) <<endl ;
  88 + else
  89 + os<< PDTypeNames[i]<<" : avrg= -----\tmin= -----\tmax= -----"<<endl;
  90 + }
  91 + }
  92 +
  93 + void PrintResults( ostream &os)
  94 + {
  95 + for ( int i=0; i<PERFORMANCE_DATA_TYPE_COUNT; i++ )
  96 + PrintResult(os,i);
  97 + }
  98 +
  99 + double GetLastTime( int type ) { return times[type][pos[type]]; }
  100 + double GetAvrgTime( int type ) { double a = 1000.0 * totalTime[type] / (float)cps.QuadPart / ( (dataReady[type]) ? 256.0 : (double)pos[type] ); return (_finite(a))? a:0; }
  101 + double GetMinTime( int type ) { return 1000.0 * minTime[type] / (float)cps.LowPart; }
  102 + double GetMaxTime( int type ) { return 1000.0 * maxTime[type] / (float)cps.LowPart; }
  103 +
  104 +private:
  105 + double times[PERFORMANCE_DATA_TYPE_COUNT][256];
  106 + unsigned char pos[PERFORMANCE_DATA_TYPE_COUNT];
  107 + LARGE_INTEGER startTime[PERFORMANCE_DATA_TYPE_COUNT];
  108 + double minTime[ PERFORMANCE_DATA_TYPE_COUNT ];
  109 + double maxTime[ PERFORMANCE_DATA_TYPE_COUNT ];
  110 + double totalTime[ PERFORMANCE_DATA_TYPE_COUNT ];
  111 + bool dataReady[ PERFORMANCE_DATA_TYPE_COUNT ];
  112 + LARGE_INTEGER cps;
  113 +};
  114 +
  115 +//-------------------------------------------------------------------------------
  116 +#else
  117 +
  118 +class PerformanceData{
  119 +public:
  120 + PerformanceData() {;};
  121 + ~PerformanceData(){;};
  122 + void ClearAll(){;};
  123 + void StartTimer( int type ) {;};
  124 + void EndTimer( int type ) {;};
  125 + void PrintResults( ostream &os){;};
  126 + void PrintResult( ostream &os, int i=PERFORMANCE_DATA_TYPE_COUNT){;};
  127 + double GetLastTime( int type ) { return 0.0; };
  128 + double GetAvrgTime( int type ) { return 0.0; };
  129 + double GetMinTime( int type ) { return 0.0; };
  130 + double GetMaxTime( int type ) { return 0.0; };
  131 +};
  132 +
  133 +#endif
  134 +//-------------------------------------------------------------------------------
  135 +
  136 +extern PerformanceData PD;
  137 +
  138 +//-------------------------------------------------------------------------------
1 -I've just added support for double-precision values. This allows simulation of extremely small (nano-scale) particles, however a GPU with a compute capability of at least 1.3 is required.  
2 -  
3 -TrueEyes requires the following libraries:  
4 -  
5 -GLUT (OpenGL Utility Toolkit) http://www.opengl.org/resources/libraries/glut/  
6 -GLEW (OpenGL Extension Wrangler) http://glew.sourceforge.net/  
7 -Qt http://qt-project.org/  
8 -RTS (my personal codebase) https://github.com/dmayerich/RTS  
9 -CUDA http://www.nvidia.com/object/cuda_home_new.html  
10 - 1 +I've just added support for double-precision values. This allows simulation of extremely small (nano-scale) particles, however a GPU with a compute capability of at least 1.3 is required.
  2 +
  3 +TrueEyes requires the following libraries:
  4 +
  5 +GLUT (OpenGL Utility Toolkit) http://www.opengl.org/resources/libraries/glut/
  6 +GLEW (OpenGL Extension Wrangler) http://glew.sourceforge.net/
  7 +Qt http://qt-project.org/
  8 +RTS (my personal codebase) https://github.com/dmayerich/RTS
  9 +CUDA http://www.nvidia.com/object/cuda_home_new.html
  10 +
11 If CMake is unable to find these, make sure to specify their locations. 11 If CMake is unable to find these, make sure to specify their locations.
12 \ No newline at end of file 12 \ No newline at end of file
SimulateSpectrum.cpp
1 -#include <math.h>  
2 -#include <complex>  
3 -#include <iostream>  
4 -#include <fstream>  
5 -#include "globals.h"  
6 -#include <stdlib.h>  
7 -//#include "cufft.h"  
8 -using namespace std;  
9 -  
10 -#define pi 3.14159  
11 -  
12 -typedef complex<double> scComplex;  
13 -  
14 -extern int cbessjyva(double v,complex<double> z,double &vm,complex<double>*cjv,  
15 - complex<double>*cyv,complex<double>*cjvp,complex<double>*cyvp);  
16 -extern int bessjyv(double v,double x,double &vm,double *jv,double *yv,  
17 - double *djv,double *dyv);  
18 -  
19 -complex<double> Jl_neg(complex<double> x)  
20 -{  
21 - //this function computes the bessel function of the first kind Jl(x) for l = -0.5  
22 - return ( sqrt(2.0/pi) * cos(x) )/sqrt(x);  
23 -}  
24 -  
25 -double Jl_neg(double x)  
26 -{  
27 - //this function computes the bessel function of the first kind Jl(x) for l = -0.5  
28 - return ( sqrt(2.0/pi) * cos(x) )/sqrt(x);  
29 -}  
30 -  
31 -double Yl_neg(double x)  
32 -{  
33 - //this function computes the bessel function of the second kind Yl(x) for l = -0.5;  
34 - return ( sqrt(2.0/pi) * sin(x) )/sqrt(x);  
35 -}  
36 -  
37 -void computeB(complex<double>* B, double radius, complex<double> refIndex, double lambda, int Nl)  
38 -{  
39 - double k = (2*pi)/lambda;  
40 - int b = 2;  
41 -  
42 - //allocate space for the real bessel functions  
43 - double* jv = (double*)malloc(sizeof(double)*(Nl+b));  
44 - double* yv = (double*)malloc(sizeof(double)*(Nl+b));  
45 - double* jvp = (double*)malloc(sizeof(double)*(Nl+b));  
46 - double* yvp = (double*)malloc(sizeof(double)*(Nl+b));  
47 -  
48 - //allocate space for the complex bessel functions  
49 - complex<double>* cjv = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b));  
50 - complex<double>* cyv = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b));  
51 - complex<double>* cjvp = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b));  
52 - complex<double>* cyvp = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b));  
53 -  
54 - double kr = k*radius;  
55 - complex<double> knr = k*refIndex*(double)radius;  
56 - complex<double> n = refIndex;  
57 -  
58 - //compute the bessel functions for k*r  
59 - double vm;// = Nl - 1;  
60 - bessjyv((Nl)+0.5, kr, vm, jv, yv, jvp, yvp);  
61 - //cout<<"Nl: "<<Nl<<" vm: "<<vm<<endl;  
62 - //printf("Nl: %f, vm: %f\n", (float)Nl, (float)vm);  
63 -  
64 - //compute the bessel functions for k*n*r  
65 - cbessjyva((Nl)+0.5, knr, vm, cjv, cyv, cjvp, cyvp);  
66 -  
67 - //scale factor for spherical bessel functions  
68 - double scale_kr = sqrt(pi/(2.0*kr));  
69 - complex<double> scale_knr = sqrt(pi/(2.0*knr));  
70 -  
71 - complex<double> numer, denom;  
72 - double j_kr;  
73 - double y_kr;  
74 - complex<double> j_knr;  
75 - complex<double> j_d_knr;  
76 - double j_d_kr;  
77 - complex<double> h_kr;  
78 - complex<double> h_d_kr;  
79 - complex<double> h_neg;  
80 - complex<double> h_pos;  
81 -  
82 - //cout<<"B coefficients:"<<endl;  
83 - for(int l=0; l<Nl; l++)  
84 - {  
85 - //compute the spherical bessel functions  
86 - j_kr = jv[l] * scale_kr;  
87 - y_kr = yv[l] * scale_kr;  
88 - j_knr = cjv[l] * scale_knr;  
89 -  
90 - //compute the Hankel function  
91 - h_kr = complex<double>(j_kr, y_kr);  
92 -  
93 - //compute the derivatives  
94 - if(l == 0)  
95 - {  
96 - //spherical bessel functions for l=0  
97 - j_d_kr = scale_kr * (Jl_neg(kr) - (jv[l] + kr*jv[l+1])/kr )/2.0;  
98 - j_d_knr = scale_knr * ( Jl_neg(knr) - (cjv[l] + knr*cjv[l+1])/knr )/2.0;  
99 - h_neg = complex<double>(scale_kr*Jl_neg(kr), scale_kr*Yl_neg(kr));  
100 - h_pos = complex<double>(scale_kr*jv[l+1], scale_kr*yv[l+1]);  
101 - h_d_kr = (h_neg - (h_kr + kr*h_pos)/kr)/2.0;  
102 - }  
103 - else  
104 - {  
105 - //spherical bessel functions  
106 - j_d_kr = scale_kr * (jv[l-1] - (jv[l] + kr*jv[l+1])/kr )/2.0;  
107 - j_d_knr = scale_knr * ( cjv[l-1] - (cjv[l] + knr*cjv[l+1])/knr )/2.0;  
108 - h_neg = complex<double>(scale_kr*jv[l-1], scale_kr*yv[l-1]);  
109 - h_pos = complex<double>(scale_kr*jv[l+1], scale_kr*yv[l+1]);  
110 - h_d_kr = (h_neg - (h_kr + kr*h_pos)/kr)/2.0;  
111 - }  
112 -  
113 - numer = j_kr*j_d_knr*n - j_knr*j_d_kr;  
114 - denom = j_knr*h_d_kr - h_kr*j_d_knr*n;  
115 - B[l] = numer/denom;  
116 -  
117 - //B[l] = scComplex(temp.real(), temp.imag());  
118 - //cout<<B[l]<<endl;  
119 - }  
120 -  
121 - free(jv);  
122 - free(yv);  
123 - free(jvp);  
124 - free(yvp);  
125 - free(cjv);  
126 - free(cyv);  
127 - free(cjvp);  
128 - free(cyvp);  
129 -}  
130 -  
131 -void Legendre(double* P, double x, int Nl)  
132 -{  
133 - //computes the legendre polynomials from orders 0 to Nl-1  
134 - P[0] = 1;  
135 - if(Nl == 1) return;  
136 - P[1] = x;  
137 - for(int l = 2; l < Nl; l++)  
138 - {  
139 - P[l] = ((2*l - 1)*x*P[l-1] - (l - 1)*P[l-2])/l;  
140 - }  
141 -  
142 -}  
143 -  
144 -complex<double> integrateUi(double cAngleI, double cAngleO, double oAngleI, double oAngleO, double M = 2*pi)  
145 -{  
146 - /*This function integrates the incident field of magnitude M in the far zone  
147 - in order to evaluate the field at the central pixel of a detector.  
148 - cNAi = condenser inner angle  
149 - cNAo = condenser outer angle  
150 - oNAi = objective inner angle  
151 - oNAo = objective outer angle  
152 - M = field magnitude*/  
153 -  
154 - double alphaIn = max(cAngleI, oAngleI);  
155 - double alphaOut = min(cAngleO,oAngleO);  
156 -  
157 - complex<double> Ui;  
158 - if(alphaIn > alphaOut)  
159 - Ui = complex<double>(0.0, 0.0);  
160 - else  
161 - Ui = complex<double>(M * 2 * pi * (cos(alphaIn) - cos(alphaOut)), 0.0f);  
162 -  
163 - return Ui;  
164 -  
165 -}  
166 -  
167 -void computeCondenserAlpha(double* alpha, int Nl, double cAngleI, double cAngleO)  
168 -{  
169 - /*This function computes the condenser integral in order to build the field of incident light  
170 - alpha = list of Nl floating point values representing the condenser alpha as a function of l  
171 - Nl = number of orders in the incident field  
172 - cAngleI, cAngleO = inner and outer condenser angles (inner and outer NA)*/  
173 -  
174 - //compute the Legendre polynomials for the condenser aperature  
175 - double* PcNAo = (double*)malloc(sizeof(double)*(Nl+1));  
176 - Legendre(PcNAo, cos(cAngleO), Nl+1);  
177 - double* PcNAi = (double*)malloc(sizeof(double)*(Nl+1));  
178 - Legendre(PcNAi, cos(cAngleI), Nl+1);  
179 -  
180 - for(int l=0; l<Nl; l++)  
181 - {  
182 - //integration term  
183 - if(l == 0)  
184 - alpha[l] = -PcNAo[l+1] + PcNAo[0] + PcNAi[l+1] - PcNAi[0];  
185 - else  
186 - alpha[l] = -PcNAo[l+1] + PcNAo[l-1] + PcNAi[l+1] - PcNAi[l-1];  
187 -  
188 - alpha[l] *= 2 * pi;  
189 - }  
190 -  
191 -}  
192 -  
193 -complex<double> integrateUs(double r, double lambda, complex<double> eta,  
194 - double cAngleI, double cAngleO, double oAngleI, double oAngleO, double M = 2*pi)  
195 -{  
196 - /*This function integrates the incident field of magnitude M in the far zone  
197 - in order to evaluate the field at the central pixel of a detector.  
198 - r = sphere radius  
199 - lambda = wavelength  
200 - eta = index of refraction  
201 - cNAi = condenser inner NA  
202 - cNAo = condenser outer NA  
203 - oNAi = objective inner NA  
204 - oNAo = objective outer NA  
205 - M = field magnitude*/  
206 -  
207 - //compute the required number of orders  
208 - double k = 2*pi/lambda;  
209 - int Nl = (int)ceil( k + 4 * exp(log(k*r)/3) + 3 );  
210 -  
211 - //compute the material coefficients B  
212 - complex<double>* B = (complex<double>*)malloc(sizeof(complex<double>)*Nl);  
213 - //compute the Legendre polynomials for the condenser and objective aperatures  
214 - double* PcNAo = (double*)malloc(sizeof(double)*(Nl+1));  
215 - Legendre(PcNAo, cos(cAngleO), Nl+1);  
216 - double* PcNAi = (double*)malloc(sizeof(double)*(Nl+1));  
217 - Legendre(PcNAi, cos(cAngleI), Nl+1);  
218 -  
219 - double* PoNAo = (double*)malloc(sizeof(double)*(Nl+1));  
220 - Legendre(PoNAo, cos(oAngleO), Nl+1);  
221 - double* PoNAi = (double*)malloc(sizeof(double)*(Nl+1));  
222 - Legendre(PoNAi, cos(oAngleI), Nl+1);  
223 -  
224 - //store the index of refraction;  
225 - complex<double> IR(eta.real(), eta.imag());  
226 -  
227 - //compute the scattering coefficients  
228 - computeB(B, r, IR, lambda, Nl);  
229 -  
230 - //aperature terms for the condenser (alpha) and objective (beta)  
231 - double alpha;  
232 - double beta;  
233 - double c;  
234 - complex<double> Us(0.0, 0.0);  
235 -  
236 - for(int l=0; l<Nl; l++)  
237 - {  
238 - //integration term  
239 - if(l == 0)  
240 - {  
241 - alpha = -PcNAo[l+1] + PcNAo[0] + PcNAi[l+1] - PcNAi[0];  
242 - beta = -PoNAo[l+1] + PoNAo[0] + PoNAi[l+1] - PoNAi[0];  
243 - }  
244 - else  
245 - {  
246 - alpha = -PcNAo[l+1] + PcNAo[l-1] + PcNAi[l+1] - PcNAi[l-1];  
247 - beta = -PoNAo[l+1] + PoNAo[l-1] + PoNAi[l+1] - PoNAi[l-1];  
248 - }  
249 - c = (2*pi)/(2.0 * l + 1.0);  
250 - Us += c * alpha * beta * B[l] * M;  
251 -  
252 -  
253 - }  
254 - free(PcNAo);  
255 - free(PcNAi);  
256 - free(PoNAo);  
257 - free(PoNAi);  
258 - free(B);  
259 -  
260 - return Us;  
261 -  
262 -}  
263 -  
264 -void pointSpectrum()  
265 -{  
266 - PD.StartTimer(SIMULATE_SPECTRUM);  
267 - //clear the previous spectrum  
268 - SimSpectrum.clear();  
269 -  
270 - double dNu = 2.0f;  
271 - double lambda;  
272 -  
273 - //compute the angles based on NA  
274 - double cAngleI = asin(cNAi);  
275 - double cAngleO = asin(cNAo);  
276 - double oAngleI = asin(oNAi);  
277 - double oAngleO = asin(oNAo);  
278 -  
279 - //implement a reflection-mode system if necessary  
280 - if(opticsMode == ReflectionOpticsType){  
281 -  
282 - //set the condenser to match the objective  
283 - cAngleI = oAngleI;  
284 - cAngleO = oAngleO;  
285 -  
286 - //invert the objective  
287 - oAngleO = pi - cAngleI;  
288 - oAngleI = pi - cAngleO;  
289 - }  
290 -  
291 - //integrate the incident field at the detector position  
292 - complex<double> Ui = integrateUi(cAngleI, cAngleO, oAngleI, oAngleO, 2*pi);  
293 - double I0 = Ui.real() * Ui.real() + Ui.imag() * Ui.imag();  
294 - I0 *= scaleI0;  
295 -  
296 -  
297 -  
298 - //double I;  
299 - SpecPair temp;  
300 - double nu;  
301 - complex<double> eta;  
302 - complex<double> Us, U;  
303 -  
304 - double vecLen = 0.0;  
305 - for(unsigned int i=0; i<EtaK.size(); i++)  
306 - {  
307 - nu = EtaK[i].nu;  
308 - lambda = 10000.0f/nu;  
309 - if(applyMaterial)  
310 - eta = complex<double>(EtaN[i].A, EtaK[i].A);  
311 - else  
312 - eta = complex<double>(baseIR, 0.0);  
313 -  
314 -  
315 - //integrate the scattered field at the detector position  
316 - Us = integrateUs(radius, lambda, eta, cAngleI, cAngleO, oAngleI, oAngleO, 2*pi);  
317 - U = Us + Ui;  
318 - double I = U.real() * U.real() + U.imag() * U.imag();  
319 -  
320 - temp.nu = nu;  
321 -  
322 - //set the spectrum value based on the current display type  
323 - if(dispSimType == AbsorbanceSpecType)  
324 - temp.A = -log10(I/I0);  
325 - else  
326 - temp.A = I;  
327 -  
328 - if(dispNormalize)  
329 - vecLen += temp.A * temp.A;  
330 -  
331 - SimSpectrum.push_back(temp);  
332 - }  
333 - vecLen = sqrt(vecLen);  
334 -  
335 - if(dispNormalize)  
336 - for(unsigned int i=0; i<SimSpectrum.size(); i++)  
337 - SimSpectrum[i].A = (SimSpectrum[i].A / vecLen) * dispNormFactor;  
338 -  
339 - PD.EndTimer(SIMULATE_SPECTRUM);  
340 -}  
341 -  
342 -void updateSpectrum(double* I, double I0, int n)  
343 -{  
344 - SimSpectrum.clear();  
345 - SpecPair temp;  
346 -  
347 - //update the displayed spectrum based on the computed intensity I  
348 - for(int i=0; i<n; i++)  
349 - {  
350 - temp.nu = EtaK[i].nu;  
351 -  
352 - //set the spectrum value based on the current display type  
353 - if(dispSimType == AbsorbanceSpecType)  
354 - temp.A = -log10(I[i]/I0);  
355 - else  
356 - temp.A = I[i];  
357 -  
358 - SimSpectrum.push_back(temp);  
359 - }  
360 -}  
361 -  
362 -void computeCassegrainAngles(double& cAngleI, double& cAngleO, double& oAngleI, double& oAngleO)  
363 -{  
364 - //compute the angles based on NA  
365 - cAngleI = asin(cNAi);  
366 - cAngleO = asin(cNAo);  
367 - oAngleI = asin(oNAi);  
368 - oAngleO = asin(oNAo);  
369 -  
370 - //implement a reflection-mode system if necessary  
371 - if(opticsMode == ReflectionOpticsType){  
372 -  
373 - //set the condenser to match the objective  
374 - cAngleI = oAngleI;  
375 - cAngleO = oAngleO;  
376 -  
377 - //invert the objective  
378 - oAngleO = pi - cAngleI;  
379 - oAngleI = pi - cAngleO;  
380 - }  
381 -  
382 -  
383 -}  
384 -  
385 -int computeNl()  
386 -{  
387 - double maxNu = EtaK.back().nu;  
388 - double maxLambda = 10000.0f/maxNu;  
389 - double k = 2*pi/maxLambda;  
390 - int Nl = (int)ceil( k + 4 * exp(log(k*radius)/3) + 3 );  
391 -  
392 - return Nl;  
393 -}  
394 -  
395 -void computeBArray(complex<double>* B, int Nl, int nLambda)  
396 -{  
397 - double nu;  
398 - complex<double> eta;  
399 - double* Lambda = (double*)malloc(sizeof(double) * nLambda);  
400 -  
401 - //for each wavenumber nu  
402 - for(unsigned int i=0; i<EtaK.size(); i++)  
403 - {  
404 - //compute information based on wavelength and material  
405 - nu = EtaK[i].nu;  
406 - Lambda[i] = 10000.0f/nu;  
407 - if(applyMaterial)  
408 - eta = complex<double>(EtaN[i].A, EtaK[i].A);  
409 - else  
410 - eta = complex<double>(baseIR, 0.0);  
411 -  
412 - //allocate memory for the scattering coefficients  
413 - //complex<float>* B = (complex<float>*)malloc(sizeof(complex<float>)*Nl);  
414 -  
415 - complex<double> IR(eta.real(), eta.imag());  
416 - computeB(&B[i * Nl], radius, IR, Lambda[i], Nl);  
417 - }  
418 -}  
419 -  
420 -void computeOpticalParameters(double& cAngleI, double& cAngleO, double& oAngleI, double& oAngleO, double& I0, double* alpha, int Nl)  
421 -{  
422 - computeCassegrainAngles(cAngleI, cAngleO, oAngleI, oAngleO);  
423 -  
424 - //evaluate the incident field intensity  
425 - I0 = 0.0;  
426 - complex<double> Ui;  
427 -  
428 - Ui = integrateUi(cAngleI, cAngleO, oAngleI, oAngleO, 2*pi);  
429 - I0 = Ui.real()*2*pi;  
430 -  
431 - //compute alpha (condenser integral)  
432 - computeCondenserAlpha(alpha, Nl, cAngleI, cAngleO);  
433 -}  
434 -  
435 -void gpuDetectorSpectrum(int numSamples)  
436 -{  
437 - //integrate across the objective aperature and calculate the resulting intensity on a detector  
438 - PD.StartTimer(SIMULATE_SPECTRUM);  
439 - //clear the previous spectrum  
440 - SimSpectrum.clear();  
441 -  
442 - //compute Nl (maximum order of the spectrum)  
443 - int Nl = computeNl();  
444 -  
445 - double* alpha = (double*)malloc(sizeof(double)*(Nl + 1));  
446 - double cAngleI, cAngleO, oAngleI, oAngleO, I0;  
447 - computeOpticalParameters(cAngleI, cAngleO, oAngleI, oAngleO, I0, alpha, Nl);  
448 -  
449 - //allocate space for a list of wavelengths  
450 - int nLambda = EtaK.size();  
451 -  
452 - //allocate space for the 2D array (Nl x nu) of scattering coefficients  
453 - complex<double>* B = (complex<double>*)malloc(sizeof(complex<double>) * Nl * nLambda);  
454 - computeBArray(B, Nl, nLambda);  
455 -  
456 -  
457 - //allocate temporary space for the spectrum  
458 - double* I = (double*)malloc(sizeof(double) * EtaK.size());  
459 -  
460 - //compute the spectrum on the GPU  
461 - PD.StartTimer(SIMULATE_GPU);  
462 - cudaComputeSpectrum(I, (double*)B, alpha, Nl, nLambda, oAngleI, oAngleO, cAngleI, cAngleO, numSamples);  
463 - PD.EndTimer(SIMULATE_GPU);  
464 -  
465 - updateSpectrum(I, I0, nLambda);  
466 -  
467 - PD.EndTimer(SIMULATE_SPECTRUM);  
468 -  
469 -}  
470 -  
471 -void SimulateSpectrum()  
472 -{  
473 - if(pointDetector)  
474 - pointSpectrum();  
475 - else  
476 - gpuDetectorSpectrum(objectiveSamples);  
477 - //detectorSpectrum(objectiveSamples);  
478 -}  
479 -  
480 -double absorbanceDistortion(){  
481 -  
482 - //compute the mean of the spectrum  
483 - double sumSim = 0.0;  
484 - for(unsigned int i=0; i<SimSpectrum.size(); i++)  
485 - {  
486 - sumSim += SimSpectrum[i].A;  
487 - }  
488 - double meanSim = sumSim/SimSpectrum.size();  
489 -  
490 - //compute the distortion (MSE from the mean)  
491 - double sumSE = 0.0;  
492 - for(unsigned int i=0; i<SimSpectrum.size(); i++)  
493 - {  
494 - sumSE += pow(SimSpectrum[i].A - meanSim, 2);  
495 - }  
496 - double MSE = sumSE / SimSpectrum.size();  
497 -  
498 - return MSE;  
499 -}  
500 -  
501 -double intensityDistortion(){  
502 -  
503 - //compute the magnitude of the spectrum  
504 - double sumSim = 0.0;  
505 - for(unsigned int i=0; i<SimSpectrum.size(); i++)  
506 - {  
507 - sumSim += SimSpectrum[i].A * SimSpectrum[i].A;  
508 - }  
509 - double magSim = sqrt(sumSim);  
510 -  
511 - //compute the distortion (MSE from the mean)  
512 - double sumSE = 0.0;  
513 - for(unsigned int i=0; i<SimSpectrum.size(); i++)  
514 - {  
515 - sumSE += (SimSpectrum[i].A/magSim) * (1.0/SimSpectrum.size());  
516 - }  
517 - double MSE = sumSE;  
518 -  
519 - return MSE;  
520 -}  
521 -  
522 -void MinimizeDistortion(){  
523 - ofstream outFile("distortion.txt");  
524 -  
525 - //set the parameters for the distortion simulation  
526 - double step = 0.001;  
527 -  
528 - oNAi = 0.2;  
529 - oNAo = 0.5;  
530 -  
531 - //compute the optical parameters  
532 - //compute Nl (maximum order of the spectrum)  
533 - int Nl = computeNl();  
534 -  
535 - double* alpha = (double*)malloc(sizeof(double)*(Nl + 1));  
536 - double cAngleI, cAngleO, oAngleI, oAngleO, I0;  
537 -  
538 - //allocate space for a list of wavelengths  
539 - int nLambda = EtaK.size();  
540 -  
541 - //allocate temporary space for the spectrum  
542 - double* I = (double*)malloc(sizeof(double) * EtaK.size());  
543 -  
544 - //calculate the material parameters  
545 - //allocate space for the 2D array (Nl x nu) of scattering coefficients  
546 - complex<double>* B = (complex<double>*)malloc(sizeof(complex<double>) * Nl * nLambda);  
547 - computeBArray(B, Nl, nLambda);  
548 -  
549 -  
550 -  
551 - double D;  
552 - double e = 0.001;  
553 - for(double i=0.0; i<=oNAo-step; i+=step)  
554 - {  
555 -  
556 - for(double o=oNAi+step; o<=1.0; o+=step)  
557 - {  
558 -  
559 -  
560 - //set the current optical parameters  
561 - cNAi = i;  
562 - cNAo = o;  
563 -  
564 - //compute the optical parameters  
565 - computeOpticalParameters(cAngleI, cAngleO, oAngleI, oAngleO, I0, alpha, Nl);  
566 -  
567 - //simulate the spectrum  
568 - cudaComputeSpectrum(I, (double*)B, alpha, Nl, nLambda, oAngleI, oAngleO, cAngleI, cAngleO, objectiveSamples);  
569 - updateSpectrum(I, I0, nLambda);  
570 -  
571 - if(dispSimType == AbsorbanceSpecType)  
572 - {  
573 - if(i + e >= o || i + e >= oNAo || oNAi + e >= o || oNAi + e >= oNAo)  
574 - D = 0.0;  
575 - else  
576 - D = absorbanceDistortion();  
577 - }  
578 - else  
579 - {  
580 - if(i >= o || oNAi >= oNAo)  
581 - D=0;  
582 - else  
583 - D = intensityDistortion();  
584 - }  
585 - outFile<<D<<" ";  
586 - }  
587 - outFile<<endl;  
588 - cout<<i<<endl;  
589 - }  
590 - outFile.close(); 1 +#include <math.h>
  2 +#include <complex>
  3 +#include <iostream>
  4 +#include <fstream>
  5 +#include "globals.h"
  6 +#include <stdlib.h>
  7 +//#include "cufft.h"
  8 +using namespace std;
  9 +
  10 +#define pi 3.14159
  11 +
  12 +typedef complex<double> scComplex;
  13 +
  14 +extern int cbessjyva(double v,complex<double> z,double &vm,complex<double>*cjv,
  15 + complex<double>*cyv,complex<double>*cjvp,complex<double>*cyvp);
  16 +extern int bessjyv(double v,double x,double &vm,double *jv,double *yv,
  17 + double *djv,double *dyv);
  18 +
  19 +complex<double> Jl_neg(complex<double> x)
  20 +{
  21 + //this function computes the bessel function of the first kind Jl(x) for l = -0.5
  22 + return ( sqrt(2.0/pi) * cos(x) )/sqrt(x);
  23 +}
  24 +
  25 +double Jl_neg(double x)
  26 +{
  27 + //this function computes the bessel function of the first kind Jl(x) for l = -0.5
  28 + return ( sqrt(2.0/pi) * cos(x) )/sqrt(x);
  29 +}
  30 +
  31 +double Yl_neg(double x)
  32 +{
  33 + //this function computes the bessel function of the second kind Yl(x) for l = -0.5;
  34 + return ( sqrt(2.0/pi) * sin(x) )/sqrt(x);
  35 +}
  36 +
  37 +void computeB(complex<double>* B, double radius, complex<double> refIndex, double lambda, int Nl)
  38 +{
  39 + double k = (2*pi)/lambda;
  40 + int b = 2;
  41 +
  42 + //allocate space for the real bessel functions
  43 + double* jv = (double*)malloc(sizeof(double)*(Nl+b));
  44 + double* yv = (double*)malloc(sizeof(double)*(Nl+b));
  45 + double* jvp = (double*)malloc(sizeof(double)*(Nl+b));
  46 + double* yvp = (double*)malloc(sizeof(double)*(Nl+b));
  47 +
  48 + //allocate space for the complex bessel functions
  49 + complex<double>* cjv = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b));
  50 + complex<double>* cyv = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b));
  51 + complex<double>* cjvp = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b));
  52 + complex<double>* cyvp = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b));
  53 +
  54 + double kr = k*radius;
  55 + complex<double> knr = k*refIndex*(double)radius;
  56 + complex<double> n = refIndex;
  57 +
  58 + //compute the bessel functions for k*r
  59 + double vm;// = Nl - 1;
  60 + bessjyv((Nl)+0.5, kr, vm, jv, yv, jvp, yvp);
  61 + //cout<<"Nl: "<<Nl<<" vm: "<<vm<<endl;
  62 + //printf("Nl: %f, vm: %f\n", (float)Nl, (float)vm);
  63 +
  64 + //compute the bessel functions for k*n*r
  65 + cbessjyva((Nl)+0.5, knr, vm, cjv, cyv, cjvp, cyvp);
  66 +
  67 + //scale factor for spherical bessel functions
  68 + double scale_kr = sqrt(pi/(2.0*kr));
  69 + complex<double> scale_knr = sqrt(pi/(2.0*knr));
  70 +
  71 + complex<double> numer, denom;
  72 + double j_kr;
  73 + double y_kr;
  74 + complex<double> j_knr;
  75 + complex<double> j_d_knr;
  76 + double j_d_kr;
  77 + complex<double> h_kr;
  78 + complex<double> h_d_kr;
  79 + complex<double> h_neg;
  80 + complex<double> h_pos;
  81 +
  82 + //cout<<"B coefficients:"<<endl;
  83 + for(int l=0; l<Nl; l++)
  84 + {
  85 + //compute the spherical bessel functions
  86 + j_kr = jv[l] * scale_kr;
  87 + y_kr = yv[l] * scale_kr;
  88 + j_knr = cjv[l] * scale_knr;
  89 +
  90 + //compute the Hankel function
  91 + h_kr = complex<double>(j_kr, y_kr);
  92 +
  93 + //compute the derivatives
  94 + if(l == 0)
  95 + {
  96 + //spherical bessel functions for l=0
  97 + j_d_kr = scale_kr * (Jl_neg(kr) - (jv[l] + kr*jv[l+1])/kr )/2.0;
  98 + j_d_knr = scale_knr * ( Jl_neg(knr) - (cjv[l] + knr*cjv[l+1])/knr )/2.0;
  99 + h_neg = complex<double>(scale_kr*Jl_neg(kr), scale_kr*Yl_neg(kr));
  100 + h_pos = complex<double>(scale_kr*jv[l+1], scale_kr*yv[l+1]);
  101 + h_d_kr = (h_neg - (h_kr + kr*h_pos)/kr)/2.0;
  102 + }
  103 + else
  104 + {
  105 + //spherical bessel functions
  106 + j_d_kr = scale_kr * (jv[l-1] - (jv[l] + kr*jv[l+1])/kr )/2.0;
  107 + j_d_knr = scale_knr * ( cjv[l-1] - (cjv[l] + knr*cjv[l+1])/knr )/2.0;
  108 + h_neg = complex<double>(scale_kr*jv[l-1], scale_kr*yv[l-1]);
  109 + h_pos = complex<double>(scale_kr*jv[l+1], scale_kr*yv[l+1]);
  110 + h_d_kr = (h_neg - (h_kr + kr*h_pos)/kr)/2.0;
  111 + }
  112 +
  113 + numer = j_kr*j_d_knr*n - j_knr*j_d_kr;
  114 + denom = j_knr*h_d_kr - h_kr*j_d_knr*n;
  115 + B[l] = numer/denom;
  116 +
  117 + //B[l] = scComplex(temp.real(), temp.imag());
  118 + //cout<<B[l]<<endl;
  119 + }
  120 +
  121 + free(jv);
  122 + free(yv);
  123 + free(jvp);
  124 + free(yvp);
  125 + free(cjv);
  126 + free(cyv);
  127 + free(cjvp);
  128 + free(cyvp);
  129 +}
  130 +
  131 +void Legendre(double* P, double x, int Nl)
  132 +{
  133 + //computes the legendre polynomials from orders 0 to Nl-1
  134 + P[0] = 1;
  135 + if(Nl == 1) return;
  136 + P[1] = x;
  137 + for(int l = 2; l < Nl; l++)
  138 + {
  139 + P[l] = ((2*l - 1)*x*P[l-1] - (l - 1)*P[l-2])/l;
  140 + }
  141 +
  142 +}
  143 +
  144 +complex<double> integrateUi(double cAngleI, double cAngleO, double oAngleI, double oAngleO, double M = 2*pi)
  145 +{
  146 + /*This function integrates the incident field of magnitude M in the far zone
  147 + in order to evaluate the field at the central pixel of a detector.
  148 + cNAi = condenser inner angle
  149 + cNAo = condenser outer angle
  150 + oNAi = objective inner angle
  151 + oNAo = objective outer angle
  152 + M = field magnitude*/
  153 +
  154 + double alphaIn = max(cAngleI, oAngleI);
  155 + double alphaOut = min(cAngleO,oAngleO);
  156 +
  157 + complex<double> Ui;
  158 + if(alphaIn > alphaOut)
  159 + Ui = complex<double>(0.0, 0.0);
  160 + else
  161 + Ui = complex<double>(M * 2 * pi * (cos(alphaIn) - cos(alphaOut)), 0.0f);
  162 +
  163 + return Ui;
  164 +
  165 +}
  166 +
  167 +void computeCondenserAlpha(double* alpha, int Nl, double cAngleI, double cAngleO)
  168 +{
  169 + /*This function computes the condenser integral in order to build the field of incident light
  170 + alpha = list of Nl floating point values representing the condenser alpha as a function of l
  171 + Nl = number of orders in the incident field
  172 + cAngleI, cAngleO = inner and outer condenser angles (inner and outer NA)*/
  173 +
  174 + //compute the Legendre polynomials for the condenser aperature
  175 + double* PcNAo = (double*)malloc(sizeof(double)*(Nl+1));
  176 + Legendre(PcNAo, cos(cAngleO), Nl+1);
  177 + double* PcNAi = (double*)malloc(sizeof(double)*(Nl+1));
  178 + Legendre(PcNAi, cos(cAngleI), Nl+1);
  179 +
  180 + for(int l=0; l<Nl; l++)
  181 + {
  182 + //integration term
  183 + if(l == 0)
  184 + alpha[l] = -PcNAo[l+1] + PcNAo[0] + PcNAi[l+1] - PcNAi[0];
  185 + else
  186 + alpha[l] = -PcNAo[l+1] + PcNAo[l-1] + PcNAi[l+1] - PcNAi[l-1];
  187 +
  188 + alpha[l] *= 2 * pi;
  189 + }
  190 +
  191 +}
  192 +
  193 +complex<double> integrateUs(double r, double lambda, complex<double> eta,
  194 + double cAngleI, double cAngleO, double oAngleI, double oAngleO, double M = 2*pi)
  195 +{
  196 + /*This function integrates the incident field of magnitude M in the far zone
  197 + in order to evaluate the field at the central pixel of a detector.
  198 + r = sphere radius
  199 + lambda = wavelength
  200 + eta = index of refraction
  201 + cNAi = condenser inner NA
  202 + cNAo = condenser outer NA
  203 + oNAi = objective inner NA
  204 + oNAo = objective outer NA
  205 + M = field magnitude*/
  206 +
  207 + //compute the required number of orders
  208 + double k = 2*pi/lambda;
  209 + int Nl = (int)ceil( k + 4 * exp(log(k*r)/3) + 3 );
  210 +
  211 + //compute the material coefficients B
  212 + complex<double>* B = (complex<double>*)malloc(sizeof(complex<double>)*Nl);
  213 + //compute the Legendre polynomials for the condenser and objective aperatures
  214 + double* PcNAo = (double*)malloc(sizeof(double)*(Nl+1));
  215 + Legendre(PcNAo, cos(cAngleO), Nl+1);
  216 + double* PcNAi = (double*)malloc(sizeof(double)*(Nl+1));
  217 + Legendre(PcNAi, cos(cAngleI), Nl+1);
  218 +
  219 + double* PoNAo = (double*)malloc(sizeof(double)*(Nl+1));
  220 + Legendre(PoNAo, cos(oAngleO), Nl+1);
  221 + double* PoNAi = (double*)malloc(sizeof(double)*(Nl+1));
  222 + Legendre(PoNAi, cos(oAngleI), Nl+1);
  223 +
  224 + //store the index of refraction;
  225 + complex<double> IR(eta.real(), eta.imag());
  226 +
  227 + //compute the scattering coefficients
  228 + computeB(B, r, IR, lambda, Nl);
  229 +
  230 + //aperature terms for the condenser (alpha) and objective (beta)
  231 + double alpha;
  232 + double beta;
  233 + double c;
  234 + complex<double> Us(0.0, 0.0);
  235 +
  236 + for(int l=0; l<Nl; l++)
  237 + {
  238 + //integration term
  239 + if(l == 0)
  240 + {
  241 + alpha = -PcNAo[l+1] + PcNAo[0] + PcNAi[l+1] - PcNAi[0];
  242 + beta = -PoNAo[l+1] + PoNAo[0] + PoNAi[l+1] - PoNAi[0];
  243 + }
  244 + else
  245 + {
  246 + alpha = -PcNAo[l+1] + PcNAo[l-1] + PcNAi[l+1] - PcNAi[l-1];
  247 + beta = -PoNAo[l+1] + PoNAo[l-1] + PoNAi[l+1] - PoNAi[l-1];
  248 + }
  249 + c = (2*pi)/(2.0 * l + 1.0);
  250 + Us += c * alpha * beta * B[l] * M;
  251 +
  252 +
  253 + }
  254 + free(PcNAo);
  255 + free(PcNAi);
  256 + free(PoNAo);
  257 + free(PoNAi);
  258 + free(B);
  259 +
  260 + return Us;
  261 +
  262 +}
  263 +
  264 +void pointSpectrum()
  265 +{
  266 + PD.StartTimer(SIMULATE_SPECTRUM);
  267 + //clear the previous spectrum
  268 + SimSpectrum.clear();
  269 +
  270 + double dNu = 2.0f;
  271 + double lambda;
  272 +
  273 + //compute the angles based on NA
  274 + double cAngleI = asin(cNAi);
  275 + double cAngleO = asin(cNAo);
  276 + double oAngleI = asin(oNAi);
  277 + double oAngleO = asin(oNAo);
  278 +
  279 + //implement a reflection-mode system if necessary
  280 + if(opticsMode == ReflectionOpticsType){
  281 +
  282 + //set the condenser to match the objective
  283 + cAngleI = oAngleI;
  284 + cAngleO = oAngleO;
  285 +
  286 + //invert the objective
  287 + oAngleO = pi - cAngleI;
  288 + oAngleI = pi - cAngleO;
  289 + }
  290 +
  291 + //integrate the incident field at the detector position
  292 + complex<double> Ui = integrateUi(cAngleI, cAngleO, oAngleI, oAngleO, 2*pi);
  293 + double I0 = Ui.real() * Ui.real() + Ui.imag() * Ui.imag();
  294 + I0 *= scaleI0;
  295 +
  296 +
  297 +
  298 + //double I;
  299 + SpecPair temp;
  300 + double nu;
  301 + complex<double> eta;
  302 + complex<double> Us, U;
  303 +
  304 + double vecLen = 0.0;
  305 + for(unsigned int i=0; i<EtaK.size(); i++)
  306 + {
  307 + nu = EtaK[i].nu;
  308 + lambda = 10000.0f/nu;
  309 + if(applyMaterial)
  310 + eta = complex<double>(EtaN[i].A, EtaK[i].A);
  311 + else
  312 + eta = complex<double>(baseIR, 0.0);
  313 +
  314 +
  315 + //integrate the scattered field at the detector position
  316 + Us = integrateUs(radius, lambda, eta, cAngleI, cAngleO, oAngleI, oAngleO, 2*pi);
  317 + U = Us + Ui;
  318 + double I = U.real() * U.real() + U.imag() * U.imag();
  319 +
  320 + temp.nu = nu;
  321 +
  322 + //set the spectrum value based on the current display type
  323 + if(dispSimType == AbsorbanceSpecType)
  324 + temp.A = -log10(I/I0);
  325 + else
  326 + temp.A = I;
  327 +
  328 + if(dispNormalize)
  329 + vecLen += temp.A * temp.A;
  330 +
  331 + SimSpectrum.push_back(temp);
  332 + }
  333 + vecLen = sqrt(vecLen);
  334 +
  335 + if(dispNormalize)
  336 + for(unsigned int i=0; i<SimSpectrum.size(); i++)
  337 + SimSpectrum[i].A = (SimSpectrum[i].A / vecLen) * dispNormFactor;
  338 +
  339 + PD.EndTimer(SIMULATE_SPECTRUM);
  340 +}
  341 +
  342 +void updateSpectrum(double* I, double I0, int n)
  343 +{
  344 + SimSpectrum.clear();
  345 + SpecPair temp;
  346 +
  347 + //update the displayed spectrum based on the computed intensity I
  348 + for(int i=0; i<n; i++)
  349 + {
  350 + temp.nu = EtaK[i].nu;
  351 +
  352 + //set the spectrum value based on the current display type
  353 + if(dispSimType == AbsorbanceSpecType)
  354 + temp.A = -log10(I[i]/I0);
  355 + else
  356 + temp.A = I[i];
  357 +
  358 + SimSpectrum.push_back(temp);
  359 + }
  360 +}
  361 +
  362 +void computeCassegrainAngles(double& cAngleI, double& cAngleO, double& oAngleI, double& oAngleO)
  363 +{
  364 + //compute the angles based on NA
  365 + cAngleI = asin(cNAi);
  366 + cAngleO = asin(cNAo);
  367 + oAngleI = asin(oNAi);
  368 + oAngleO = asin(oNAo);
  369 +
  370 + //implement a reflection-mode system if necessary
  371 + if(opticsMode == ReflectionOpticsType){
  372 +
  373 + //set the condenser to match the objective
  374 + cAngleI = oAngleI;
  375 + cAngleO = oAngleO;
  376 +
  377 + //invert the objective
  378 + oAngleO = pi - cAngleI;
  379 + oAngleI = pi - cAngleO;
  380 + }
  381 +
  382 +
  383 +}
  384 +
  385 +int computeNl()
  386 +{
  387 + double maxNu = EtaK.back().nu;
  388 + double maxLambda = 10000.0f/maxNu;
  389 + double k = 2*pi/maxLambda;
  390 + int Nl = (int)ceil( k + 4 * exp(log(k*radius)/3) + 3 );
  391 +
  392 + return Nl;
  393 +}
  394 +
  395 +void computeBArray(complex<double>* B, int Nl, int nLambda)
  396 +{
  397 + double nu;
  398 + complex<double> eta;
  399 + double* Lambda = (double*)malloc(sizeof(double) * nLambda);
  400 +
  401 + //for each wavenumber nu
  402 + for(unsigned int i=0; i<EtaK.size(); i++)
  403 + {
  404 + //compute information based on wavelength and material
  405 + nu = EtaK[i].nu;
  406 + Lambda[i] = 10000.0f/nu;
  407 + if(applyMaterial)
  408 + eta = complex<double>(EtaN[i].A, EtaK[i].A);
  409 + else
  410 + eta = complex<double>(baseIR, 0.0);
  411 +
  412 + //allocate memory for the scattering coefficients
  413 + //complex<float>* B = (complex<float>*)malloc(sizeof(complex<float>)*Nl);
  414 +
  415 + complex<double> IR(eta.real(), eta.imag());
  416 + computeB(&B[i * Nl], radius, IR, Lambda[i], Nl);
  417 + }
  418 +}
  419 +
  420 +void computeOpticalParameters(double& cAngleI, double& cAngleO, double& oAngleI, double& oAngleO, double& I0, double* alpha, int Nl)
  421 +{
  422 + computeCassegrainAngles(cAngleI, cAngleO, oAngleI, oAngleO);
  423 +
  424 + //evaluate the incident field intensity
  425 + I0 = 0.0;
  426 + complex<double> Ui;
  427 +
  428 + Ui = integrateUi(cAngleI, cAngleO, oAngleI, oAngleO, 2*pi);
  429 + I0 = Ui.real()*2*pi;
  430 +
  431 + //compute alpha (condenser integral)
  432 + computeCondenserAlpha(alpha, Nl, cAngleI, cAngleO);
  433 +}
  434 +
  435 +void gpuDetectorSpectrum(int numSamples)
  436 +{
  437 + //integrate across the objective aperature and calculate the resulting intensity on a detector
  438 + PD.StartTimer(SIMULATE_SPECTRUM);
  439 + //clear the previous spectrum
  440 + SimSpectrum.clear();
  441 +
  442 + //compute Nl (maximum order of the spectrum)
  443 + int Nl = computeNl();
  444 +
  445 + double* alpha = (double*)malloc(sizeof(double)*(Nl + 1));
  446 + double cAngleI, cAngleO, oAngleI, oAngleO, I0;
  447 + computeOpticalParameters(cAngleI, cAngleO, oAngleI, oAngleO, I0, alpha, Nl);
  448 +
  449 + //allocate space for a list of wavelengths
  450 + int nLambda = EtaK.size();
  451 +
  452 + //allocate space for the 2D array (Nl x nu) of scattering coefficients
  453 + complex<double>* B = (complex<double>*)malloc(sizeof(complex<double>) * Nl * nLambda);
  454 + computeBArray(B, Nl, nLambda);
  455 +
  456 +
  457 + //allocate temporary space for the spectrum
  458 + double* I = (double*)malloc(sizeof(double) * EtaK.size());
  459 +
  460 + //compute the spectrum on the GPU
  461 + PD.StartTimer(SIMULATE_GPU);
  462 + cudaComputeSpectrum(I, (double*)B, alpha, Nl, nLambda, oAngleI, oAngleO, cAngleI, cAngleO, numSamples);
  463 + PD.EndTimer(SIMULATE_GPU);
  464 +
  465 + updateSpectrum(I, I0, nLambda);
  466 +
  467 + PD.EndTimer(SIMULATE_SPECTRUM);
  468 +
  469 +}
  470 +
  471 +void SimulateSpectrum()
  472 +{
  473 + if(pointDetector)
  474 + pointSpectrum();
  475 + else
  476 + gpuDetectorSpectrum(objectiveSamples);
  477 + //detectorSpectrum(objectiveSamples);
  478 +}
  479 +
  480 +double absorbanceDistortion(){
  481 +
  482 + //compute the mean of the spectrum
  483 + double sumSim = 0.0;
  484 + for(unsigned int i=0; i<SimSpectrum.size(); i++)
  485 + {
  486 + sumSim += SimSpectrum[i].A;
  487 + }
  488 + double meanSim = sumSim/SimSpectrum.size();
  489 +
  490 + //compute the distortion (MSE from the mean)
  491 + double sumSE = 0.0;
  492 + for(unsigned int i=0; i<SimSpectrum.size(); i++)
  493 + {
  494 + sumSE += pow(SimSpectrum[i].A - meanSim, 2);
  495 + }
  496 + double MSE = sumSE / SimSpectrum.size();
  497 +
  498 + return MSE;
  499 +}
  500 +
  501 +double intensityDistortion(){
  502 +
  503 + //compute the magnitude of the spectrum
  504 + double sumSim = 0.0;
  505 + for(unsigned int i=0; i<SimSpectrum.size(); i++)
  506 + {
  507 + sumSim += SimSpectrum[i].A * SimSpectrum[i].A;
  508 + }
  509 + double magSim = sqrt(sumSim);
  510 +
  511 + //compute the distortion (MSE from the mean)
  512 + double sumSE = 0.0;
  513 + for(unsigned int i=0; i<SimSpectrum.size(); i++)
  514 + {
  515 + sumSE += (SimSpectrum[i].A/magSim) * (1.0/SimSpectrum.size());
  516 + }
  517 + double MSE = sumSE;
  518 +
  519 + return MSE;
  520 +}
  521 +
  522 +void MinimizeDistortion(){
  523 + ofstream outFile("distortion.txt");
  524 +
  525 + //set the parameters for the distortion simulation
  526 + double step = 0.001;
  527 +
  528 + oNAi = 0.2;
  529 + oNAo = 0.5;
  530 +
  531 + //compute the optical parameters
  532 + //compute Nl (maximum order of the spectrum)
  533 + int Nl = computeNl();
  534 +
  535 + double* alpha = (double*)malloc(sizeof(double)*(Nl + 1));
  536 + double cAngleI, cAngleO, oAngleI, oAngleO, I0;
  537 +
  538 + //allocate space for a list of wavelengths
  539 + int nLambda = EtaK.size();
  540 +
  541 + //allocate temporary space for the spectrum
  542 + double* I = (double*)malloc(sizeof(double) * EtaK.size());
  543 +
  544 + //calculate the material parameters
  545 + //allocate space for the 2D array (Nl x nu) of scattering coefficients
  546 + complex<double>* B = (complex<double>*)malloc(sizeof(complex<double>) * Nl * nLambda);
  547 + computeBArray(B, Nl, nLambda);
  548 +
  549 +
  550 +
  551 + double D;
  552 + double e = 0.001;
  553 + for(double i=0.0; i<=oNAo-step; i+=step)
  554 + {
  555 +
  556 + for(double o=oNAi+step; o<=1.0; o+=step)
  557 + {
  558 +
  559 +
  560 + //set the current optical parameters
  561 + cNAi = i;
  562 + cNAo = o;
  563 +
  564 + //compute the optical parameters
  565 + computeOpticalParameters(cAngleI, cAngleO, oAngleI, oAngleO, I0, alpha, Nl);
  566 +
  567 + //simulate the spectrum
  568 + cudaComputeSpectrum(I, (double*)B, alpha, Nl, nLambda, oAngleI, oAngleO, cAngleI, cAngleO, objectiveSamples);
  569 + updateSpectrum(I, I0, nLambda);
  570 +
  571 + if(dispSimType == AbsorbanceSpecType)
  572 + {
  573 + if(i + e >= o || i + e >= oNAo || oNAi + e >= o || oNAi + e >= oNAo)
  574 + D = 0.0;
  575 + else
  576 + D = absorbanceDistortion();
  577 + }
  578 + else
  579 + {
  580 + if(i >= o || oNAi >= oNAo)
  581 + D=0;
  582 + else
  583 + D = intensityDistortion();
  584 + }
  585 + outFile<<D<<" ";
  586 + }
  587 + outFile<<endl;
  588 + cout<<i<<endl;
  589 + }
  590 + outFile.close();
591 } 591 }
592 \ No newline at end of file 592 \ No newline at end of file
1 -__device__ double g(double v0, double v1)  
2 -{  
3 - return (v0 + v1)*log(abs(v0+v1)) + (v0-v1)*log(abs(v0-v1));  
4 -}  
5 -  
6 -__device__ double hfin(double v0, double v1, double dv)  
7 -{  
8 - double e = 0.001;  
9 - double t0 = g(v0+e, v1-dv)/dv;  
10 - double t1 = 2*g(v0+e, v1)/dv;  
11 - double t2 = g(v0+e, v1+dv)/dv;  
12 -  
13 - return -1.0/PI * (t0 - t1 + t2);  
14 -}  
15 -  
16 -__global__ void devKramersKronig(double* gpuN, double* gpuK, int numVals, double nuStart, double nuEnd, double nOffset)  
17 -{  
18 - int i = blockIdx.x * blockDim.x + threadIdx.x;  
19 -  
20 - if(i >= numVals) return;  
21 - double nuDelta = (nuEnd - nuStart)/(numVals - 1);  
22 -  
23 - double nu = nuStart + i*nuDelta;  
24 - double n = 0.0;  
25 - double jNu;  
26 - double jK;  
27 - for(int j=1; j<numVals-1; j++)  
28 - {  
29 - jNu = nuStart + j*nuDelta;  
30 - jK = gpuK[j];  
31 - n += hfin(nu, jNu, nuDelta) * jK;  
32 - }  
33 - gpuN[i] = n + nOffset;  
34 -  
35 -  
36 -}  
37 -  
38 -void cudaKramersKronig(double* cpuN, double* cpuK, int nVals, double nuStart, double nuEnd, double nOffset)  
39 -{  
40 - double* gpuK;  
41 - HANDLE_ERROR(cudaMalloc(&gpuK, sizeof(double)*nVals));  
42 - HANDLE_ERROR(cudaMemcpy(gpuK, cpuK, sizeof(double)*nVals, cudaMemcpyHostToDevice));  
43 - double* gpuN;  
44 - HANDLE_ERROR(cudaMalloc(&gpuN, sizeof(double)*nVals));  
45 -  
46 - dim3 block(BLOCK_SIZE*BLOCK_SIZE);  
47 - dim3 grid(nVals/block.x + 1);  
48 - devKramersKronig<<<grid, block>>>(gpuN, gpuK, nVals, nuStart, nuEnd, nOffset);  
49 -  
50 - HANDLE_ERROR(cudaMemcpy(cpuN, gpuN, sizeof(double)*nVals, cudaMemcpyDeviceToHost));  
51 -  
52 - //free resources  
53 - HANDLE_ERROR(cudaFree(gpuK));  
54 - HANDLE_ERROR(cudaFree(gpuN));  
55 -}  
56 -  
57 -__global__ void devComputeSpectrum(double* I, double2* B, double* alpha, int Nl,  
58 - int nSamples, double oThetaI, double oThetaO, double cThetaI, double cThetaO)  
59 -{  
60 - int i = blockIdx.x * blockDim.x + threadIdx.x;  
61 -  
62 - //compute the delta-theta value  
63 - double dTheta = (oThetaO - oThetaI)/nSamples;  
64 -  
65 - //allocate space for the Legendre polynomials  
66 - double Ptheta[2];  
67 -  
68 - double cosTheta, theta;  
69 - cuDoubleComplex Us;  
70 - cuDoubleComplex UsSample;  
71 - cuDoubleComplex U;  
72 - //cuComplex Ui;  
73 - //Ui.x = 2*PI;  
74 - //Ui.y = 0.0;  
75 - cuDoubleComplex numer;  
76 - numer.x = 0.0;  
77 - cuDoubleComplex exp_numer;  
78 - cuDoubleComplex iL;  
79 - cuDoubleComplex imag;  
80 - imag.x = 0.0; imag.y = 1.0;  
81 - double realFac;  
82 - cuDoubleComplex complexFac;  
83 - double PlTheta;  
84 - double Isum = 0.0;  
85 - //float maxVal = 0;  
86 - //float val;  
87 - for(int iTheta = 0; iTheta < nSamples; iTheta++)  
88 - {  
89 - //calculate theta  
90 - theta = iTheta * dTheta + oThetaI;  
91 - cosTheta = cos(theta);  
92 -  
93 - //initialize the theta Legendre polynomial  
94 - Ptheta[0] = 1.0;  
95 - Ptheta[1] = cosTheta;  
96 -  
97 - //initialize the scattered field  
98 - Us.x = Us.y = 0.0;  
99 - iL.x = 1.0;  
100 - iL.y = 0.0;  
101 - for(int l = 0; l<Nl; l++)  
102 - {  
103 - //compute the theta legendre polynomial  
104 - if(l == 0)  
105 - PlTheta = Ptheta[0];  
106 - else if(l == 1)  
107 - PlTheta = Ptheta[1];  
108 - else  
109 - {  
110 - PlTheta = ((2*l - 1)*cosTheta*Ptheta[1] - (l - 1)*Ptheta[0])/l;  
111 - Ptheta[0] = Ptheta[1];  
112 - Ptheta[1] = PlTheta;  
113 - }  
114 -  
115 - //compute the real components of the scattered field  
116 - realFac = alpha[l] * PlTheta;  
117 -  
118 - //compute the complex components of the scattered field  
119 - numer.x = 0.0;  
120 - numer.y = -(l*PI)/2.0;  
121 - exp_numer = cExp(numer);  
122 -  
123 - complexFac = cMult(B[Nl * i + l], exp_numer);  
124 - complexFac = cMult(complexFac, iL);  
125 -  
126 -  
127 - //combine the real and complex components  
128 - UsSample = cMult(complexFac, realFac);  
129 - Us = cAdd(Us, UsSample);  
130 -  
131 - //increment the imaginary exponent i^l  
132 - iL = cMult(iL, imag);  
133 -  
134 -  
135 - }  
136 -  
137 - //sum the scattered and incident fields  
138 - if(theta >= cThetaI && theta <= cThetaO)  
139 - U = cAdd(Us, 2*PI);  
140 - else  
141 - U = Us;  
142 - Isum += (U.x*U.x + U.y*U.y) * sin(theta) * 2 * PI * dTheta;  
143 - }  
144 -  
145 - I[i] = Isum;  
146 -}  
147 -  
148 -void cudaComputeSpectrum(double* cpuI, double* cpuB, double* cpuAlpha,  
149 - int Nl, int nLambda, double oThetaI, double oThetaO, double cThetaI, double cThetaO, int nSamples)  
150 -{  
151 - //copy everything to the GPU  
152 - double2* gpuB;  
153 - HANDLE_ERROR(cudaMalloc(&gpuB, sizeof(double2) * nLambda * Nl));  
154 - HANDLE_ERROR(cudaMemcpy(gpuB, cpuB, sizeof(double2) * nLambda * Nl, cudaMemcpyHostToDevice));  
155 -  
156 - double* gpuAlpha;  
157 - HANDLE_ERROR(cudaMalloc(&gpuAlpha, sizeof(double) * Nl));  
158 - HANDLE_ERROR(cudaMemcpy(gpuAlpha, cpuAlpha, sizeof(double) * Nl, cudaMemcpyHostToDevice));  
159 -  
160 - double* gpuI;  
161 - HANDLE_ERROR(cudaMalloc(&gpuI, sizeof(double) * nLambda));  
162 -  
163 -  
164 - //call the kernel to compute the spectrum  
165 - dim3 block(BLOCK_SIZE*BLOCK_SIZE);  
166 - dim3 grid(nLambda/block.x + 1);  
167 -  
168 - //devComputeSpectrum  
169 - devComputeSpectrum<<<grid, block>>>(gpuI, (double2*)gpuB, gpuAlpha, Nl,  
170 - nSamples, oThetaI, oThetaO, cThetaI, cThetaO);  
171 -  
172 - HANDLE_ERROR(cudaMemcpy(cpuI, gpuI, sizeof(double) * nLambda, cudaMemcpyDeviceToHost));  
173 -  
174 - HANDLE_ERROR(cudaFree(gpuB));  
175 - HANDLE_ERROR(cudaFree(gpuAlpha));  
176 - HANDLE_ERROR(cudaFree(gpuI));  
177 -  
178 -  
179 -  
180 - 1 +__device__ double g(double v0, double v1)
  2 +{
  3 + return (v0 + v1)*log(abs(v0+v1)) + (v0-v1)*log(abs(v0-v1));
  4 +}
  5 +
  6 +__device__ double hfin(double v0, double v1, double dv)
  7 +{
  8 + double e = 0.001;
  9 + double t0 = g(v0+e, v1-dv)/dv;
  10 + double t1 = 2*g(v0+e, v1)/dv;
  11 + double t2 = g(v0+e, v1+dv)/dv;
  12 +
  13 + return -1.0/PI * (t0 - t1 + t2);
  14 +}
  15 +
  16 +__global__ void devKramersKronig(double* gpuN, double* gpuK, int numVals, double nuStart, double nuEnd, double nOffset)
  17 +{
  18 + int i = blockIdx.x * blockDim.x + threadIdx.x;
  19 +
  20 + if(i >= numVals) return;
  21 + double nuDelta = (nuEnd - nuStart)/(numVals - 1);
  22 +
  23 + double nu = nuStart + i*nuDelta;
  24 + double n = 0.0;
  25 + double jNu;
  26 + double jK;
  27 + for(int j=1; j<numVals-1; j++)
  28 + {
  29 + jNu = nuStart + j*nuDelta;
  30 + jK = gpuK[j];
  31 + n += hfin(nu, jNu, nuDelta) * jK;
  32 + }
  33 + gpuN[i] = n + nOffset;
  34 +
  35 +
  36 +}
  37 +
  38 +void cudaKramersKronig(double* cpuN, double* cpuK, int nVals, double nuStart, double nuEnd, double nOffset)
  39 +{
  40 + double* gpuK;
  41 + HANDLE_ERROR(cudaMalloc(&gpuK, sizeof(double)*nVals));
  42 + HANDLE_ERROR(cudaMemcpy(gpuK, cpuK, sizeof(double)*nVals, cudaMemcpyHostToDevice));
  43 + double* gpuN;
  44 + HANDLE_ERROR(cudaMalloc(&gpuN, sizeof(double)*nVals));
  45 +
  46 + dim3 block(BLOCK_SIZE*BLOCK_SIZE);
  47 + dim3 grid(nVals/block.x + 1);
  48 + devKramersKronig<<<grid, block>>>(gpuN, gpuK, nVals, nuStart, nuEnd, nOffset);
  49 +
  50 + HANDLE_ERROR(cudaMemcpy(cpuN, gpuN, sizeof(double)*nVals, cudaMemcpyDeviceToHost));
  51 +
  52 + //free resources
  53 + HANDLE_ERROR(cudaFree(gpuK));
  54 + HANDLE_ERROR(cudaFree(gpuN));
  55 +}
  56 +
  57 +__global__ void devComputeSpectrum(double* I, double2* B, double* alpha, int Nl,
  58 + int nSamples, double oThetaI, double oThetaO, double cThetaI, double cThetaO)
  59 +{
  60 + int i = blockIdx.x * blockDim.x + threadIdx.x;
  61 +
  62 + //compute the delta-theta value
  63 + double dTheta = (oThetaO - oThetaI)/nSamples;
  64 +
  65 + //allocate space for the Legendre polynomials
  66 + double Ptheta[2];
  67 +
  68 + double cosTheta, theta;
  69 + cuDoubleComplex Us;
  70 + cuDoubleComplex UsSample;
  71 + cuDoubleComplex U;
  72 + //cuComplex Ui;
  73 + //Ui.x = 2*PI;
  74 + //Ui.y = 0.0;
  75 + cuDoubleComplex numer;
  76 + numer.x = 0.0;
  77 + cuDoubleComplex exp_numer;
  78 + cuDoubleComplex iL;
  79 + cuDoubleComplex imag;
  80 + imag.x = 0.0; imag.y = 1.0;
  81 + double realFac;
  82 + cuDoubleComplex complexFac;
  83 + double PlTheta;
  84 + double Isum = 0.0;
  85 + //float maxVal = 0;
  86 + //float val;
  87 + for(int iTheta = 0; iTheta < nSamples; iTheta++)
  88 + {
  89 + //calculate theta
  90 + theta = iTheta * dTheta + oThetaI;
  91 + cosTheta = cos(theta);
  92 +
  93 + //initialize the theta Legendre polynomial
  94 + Ptheta[0] = 1.0;
  95 + Ptheta[1] = cosTheta;
  96 +
  97 + //initialize the scattered field
  98 + Us.x = Us.y = 0.0;
  99 + iL.x = 1.0;
  100 + iL.y = 0.0;
  101 + for(int l = 0; l<Nl; l++)
  102 + {
  103 + //compute the theta legendre polynomial
  104 + if(l == 0)
  105 + PlTheta = Ptheta[0];
  106 + else if(l == 1)
  107 + PlTheta = Ptheta[1];
  108 + else
  109 + {
  110 + PlTheta = ((2*l - 1)*cosTheta*Ptheta[1] - (l - 1)*Ptheta[0])/l;
  111 + Ptheta[0] = Ptheta[1];
  112 + Ptheta[1] = PlTheta;
  113 + }
  114 +
  115 + //compute the real components of the scattered field
  116 + realFac = alpha[l] * PlTheta;
  117 +
  118 + //compute the complex components of the scattered field
  119 + numer.x = 0.0;
  120 + numer.y = -(l*PI)/2.0;
  121 + exp_numer = cExp(numer);
  122 +
  123 + complexFac = cMult(B[Nl * i + l], exp_numer);
  124 + complexFac = cMult(complexFac, iL);
  125 +
  126 +
  127 + //combine the real and complex components
  128 + UsSample = cMult(complexFac, realFac);
  129 + Us = cAdd(Us, UsSample);
  130 +
  131 + //increment the imaginary exponent i^l
  132 + iL = cMult(iL, imag);
  133 +
  134 +
  135 + }
  136 +
  137 + //sum the scattered and incident fields
  138 + if(theta >= cThetaI && theta <= cThetaO)
  139 + U = cAdd(Us, 2*PI);
  140 + else
  141 + U = Us;
  142 + Isum += (U.x*U.x + U.y*U.y) * sin(theta) * 2 * PI * dTheta;
  143 + }
  144 +
  145 + I[i] = Isum;
  146 +}
  147 +
  148 +void cudaComputeSpectrum(double* cpuI, double* cpuB, double* cpuAlpha,
  149 + int Nl, int nLambda, double oThetaI, double oThetaO, double cThetaI, double cThetaO, int nSamples)
  150 +{
  151 + //copy everything to the GPU
  152 + double2* gpuB;
  153 + HANDLE_ERROR(cudaMalloc(&gpuB, sizeof(double2) * nLambda * Nl));
  154 + HANDLE_ERROR(cudaMemcpy(gpuB, cpuB, sizeof(double2) * nLambda * Nl, cudaMemcpyHostToDevice));
  155 +
  156 + double* gpuAlpha;
  157 + HANDLE_ERROR(cudaMalloc(&gpuAlpha, sizeof(double) * Nl));
  158 + HANDLE_ERROR(cudaMemcpy(gpuAlpha, cpuAlpha, sizeof(double) * Nl, cudaMemcpyHostToDevice));
  159 +
  160 + double* gpuI;
  161 + HANDLE_ERROR(cudaMalloc(&gpuI, sizeof(double) * nLambda));
  162 +
  163 +
  164 + //call the kernel to compute the spectrum
  165 + dim3 block(BLOCK_SIZE*BLOCK_SIZE);
  166 + dim3 grid(nLambda/block.x + 1);
  167 +
  168 + //devComputeSpectrum
  169 + devComputeSpectrum<<<grid, block>>>(gpuI, (double2*)gpuB, gpuAlpha, Nl,
  170 + nSamples, oThetaI, oThetaO, cThetaI, cThetaO);
  171 +
  172 + HANDLE_ERROR(cudaMemcpy(cpuI, gpuI, sizeof(double) * nLambda, cudaMemcpyDeviceToHost));
  173 +
  174 + HANDLE_ERROR(cudaFree(gpuB));
  175 + HANDLE_ERROR(cudaFree(gpuAlpha));
  176 + HANDLE_ERROR(cudaFree(gpuI));
  177 +
  178 +
  179 +
  180 +
181 } 181 }
182 \ No newline at end of file 182 \ No newline at end of file
1 -#include "cuComplex.h"  
2 -#include "cudaHandleError.h"  
3 -  
4 -  
5 -#define PI 3.14159  
6 -#define BLOCK_SIZE 16  
7 -  
8 -__device__ cuDoubleComplex cMult(cuDoubleComplex a, cuDoubleComplex b)  
9 -{  
10 - cuDoubleComplex result;  
11 - result.x = a.x * b.x - a.y * b.y;  
12 - result.y = a.x * b.y + a.y * b.x;  
13 -  
14 - return result;  
15 -}  
16 -  
17 -__device__ cuDoubleComplex cMult(cuDoubleComplex a, float b)  
18 -{  
19 - cuDoubleComplex result;  
20 - result.x = a.x * b;  
21 - result.y = a.y * b;  
22 -  
23 - return result;  
24 -}  
25 -  
26 -__device__ cuDoubleComplex cAdd(cuDoubleComplex a, cuDoubleComplex b)  
27 -{  
28 - cuDoubleComplex r;  
29 - r.x = a.x + b.x;  
30 - r.y = a.y + b.y;  
31 -  
32 - return r;  
33 -}  
34 -  
35 -__device__ cuDoubleComplex cAdd(cuDoubleComplex a, float b)  
36 -{  
37 - cuDoubleComplex r;  
38 - r.x = a.x + b;  
39 - r.y = a.y;  
40 -  
41 - return r;  
42 -}  
43 -  
44 -__device__ cuDoubleComplex cExp(cuDoubleComplex a)  
45 -{  
46 - cuDoubleComplex r;  
47 -  
48 - r.x = exp(a.x) * cos(a.y);  
49 - r.y = exp(a.x) * sin(a.y);  
50 -  
51 - return r;  
52 -}  
53 -  
54 -__device__ double cMag(cuDoubleComplex a)  
55 -{  
56 - double r = sqrt(a.x * a.x + a.y * a.y);  
57 - return r;  
58 -}  
59 -  
60 -#include "cudaKK.h"  
61 - 1 +#include "cuComplex.h"
  2 +#include "cudaHandleError.h"
  3 +
  4 +
  5 +#define PI 3.14159
  6 +#define BLOCK_SIZE 16
  7 +
  8 +__device__ cuDoubleComplex cMult(cuDoubleComplex a, cuDoubleComplex b)
  9 +{
  10 + cuDoubleComplex result;
  11 + result.x = a.x * b.x - a.y * b.y;
  12 + result.y = a.x * b.y + a.y * b.x;
  13 +
  14 + return result;
  15 +}
  16 +
  17 +__device__ cuDoubleComplex cMult(cuDoubleComplex a, float b)
  18 +{
  19 + cuDoubleComplex result;
  20 + result.x = a.x * b;
  21 + result.y = a.y * b;
  22 +
  23 + return result;
  24 +}
  25 +
  26 +__device__ cuDoubleComplex cAdd(cuDoubleComplex a, cuDoubleComplex b)
  27 +{
  28 + cuDoubleComplex r;
  29 + r.x = a.x + b.x;
  30 + r.y = a.y + b.y;
  31 +
  32 + return r;
  33 +}
  34 +
  35 +__device__ cuDoubleComplex cAdd(cuDoubleComplex a, float b)
  36 +{
  37 + cuDoubleComplex r;
  38 + r.x = a.x + b;
  39 + r.y = a.y;
  40 +
  41 + return r;
  42 +}
  43 +
  44 +__device__ cuDoubleComplex cExp(cuDoubleComplex a)
  45 +{
  46 + cuDoubleComplex r;
  47 +
  48 + r.x = exp(a.x) * cos(a.y);
  49 + r.y = exp(a.x) * sin(a.y);
  50 +
  51 + return r;
  52 +}
  53 +
  54 +__device__ double cMag(cuDoubleComplex a)
  55 +{
  56 + double r = sqrt(a.x * a.x + a.y * a.y);
  57 + return r;
  58 +}
  59 +
  60 +#include "cudaKK.h"
  61 +
1 -800 0.00237097091817457  
2 -802 0.00227949941219620  
3 -804 0.00221816388191892  
4 -806 0.00217471041775780  
5 -808 0.00215481795727275  
6 -810 0.00213388387011066  
7 -812 0.00209363211698535  
8 -814 0.00202082763908315  
9 -816 0.00193585066178408  
10 -818 0.00188250850160370  
11 -820 0.00184538369212481  
12 -822 0.00183536653704965  
13 -824 0.00185974183080381  
14 -826 0.00190647188683237  
15 -828 0.00199326404385590  
16 -830 0.00213499888469032  
17 -832 0.00233225842027966  
18 -834 0.00257593995310952  
19 -836 0.00287502014227382  
20 -838 0.00318754088914534  
21 -840 0.00349170996961850  
22 -842 0.00366108155160527  
23 -844 0.00362683356184450  
24 -846 0.00340059748640139  
25 -848 0.00305608088262669  
26 -850 0.00270129337895778  
27 -852 0.00239675724637807  
28 -854 0.00217864428240924  
29 -856 0.00203021645685105  
30 -858 0.00193686140678899  
31 -860 0.00187749764181973  
32 -862 0.00185772044069943  
33 -864 0.00188910883086452  
34 -866 0.00195093483930895  
35 -868 0.00204692017755064  
36 -870 0.00215522059478817  
37 -872 0.00226016367314688  
38 -874 0.00224604514385606  
39 -876 0.00210230179408609  
40 -878 0.00199743674523776  
41 -880 0.00199218269491360  
42 -882 0.00208480862951801  
43 -884 0.00228270137034088  
44 -886 0.00262030644370857  
45 -888 0.00319352984551477  
46 -890 0.00421972378192706  
47 -892 0.00602385856914103  
48 -894 0.00840405009274333  
49 -896 0.00900675480510885  
50 -898 0.00696613165618276  
51 -900 0.00499554830114596  
52 -902 0.00383849939561442  
53 -904 0.00320523678732641  
54 -906 0.00285555041538049  
55 -908 0.00266476454212409  
56 -910 0.00254627716354120  
57 -912 0.00245341529587653  
58 -914 0.00236459307673934  
59 -916 0.00229282344387905  
60 -918 0.00223035979386559  
61 -920 0.00221227947671869  
62 -922 0.00224238729804433  
63 -924 0.00235007654381494  
64 -926 0.00256726325953723  
65 -928 0.00284644035247116  
66 -930 0.00294228033320561  
67 -932 0.00275916688965430  
68 -934 0.00258731026217053  
69 -936 0.00255719587176405  
70 -938 0.00262153336828821  
71 -940 0.00273896371051358  
72 -942 0.00287538936255749  
73 -944 0.00299732885131251  
74 -946 0.00309698674175826  
75 -948 0.00316605202547143  
76 -950 0.00320470876397792  
77 -952 0.00323491311445059  
78 -954 0.00329692599734166  
79 -956 0.00338582912769461  
80 -958 0.00350331602393855  
81 -960 0.00365994789379712  
82 -962 0.00382797968742639  
83 -964 0.00395048819829240  
84 -966 0.00399909330987952  
85 -968 0.00397747867047571  
86 -970 0.00393338530466517  
87 -972 0.00391527408455760  
88 -974 0.00393711464406835  
89 -976 0.00402058186620085  
90 -978 0.00414801626311813  
91 -980 0.00426028437517640  
92 -982 0.00424343298749414  
93 -984 0.00411994903649494  
94 -986 0.00399867235513141  
95 -988 0.00388651104937391  
96 -990 0.00379950457370988  
97 -992 0.00373977952014182  
98 -994 0.00373881240280082  
99 -996 0.00379956481032446  
100 -998 0.00393643103780800  
101 -1000 0.00418426742600855  
102 -1002 0.00448366832068703  
103 -1004 0.00421395149528264  
104 -1006 0.00400806256602511  
105 -1008 0.00395963930728052  
106 -1010 0.00399586579501438  
107 -1012 0.00412453345420230  
108 -1014 0.00435650139468447  
109 -1016 0.00470823294497344  
110 -1018 0.00525652222711324  
111 -1020 0.00620034607293144  
112 -1022 0.00761074657742514  
113 -1024 0.00904862587038915  
114 -1026 0.0128420613454482  
115 -1028 0.0232054647758307  
116 -1030 0.0401070318402723  
117 -1032 0.0237662509507289  
118 -1034 0.0150900768702586  
119 -1036 0.0136209302389719  
120 -1038 0.0140722804433677  
121 -1040 0.0148520038780156  
122 -1042 0.0150418759020717  
123 -1044 0.0142741299011939  
124 -1046 0.0127983598294137  
125 -1048 0.0111020250322553  
126 -1050 0.00953886802849649  
127 -1052 0.00823573530792714  
128 -1054 0.00722015941851439  
129 -1056 0.00647199198407014  
130 -1058 0.00595450625097980  
131 -1060 0.00562081994003704  
132 -1062 0.00547155564647798  
133 -1064 0.00551163119086301  
134 -1066 0.00577378575211103  
135 -1068 0.00633217061275026  
136 -1070 0.00731526451760166  
137 -1072 0.00888941764012196  
138 -1074 0.0111936669094970  
139 -1076 0.0145627178352916  
140 -1078 0.0198820542781815  
141 -1080 0.0272101442099741  
142 -1082 0.0294763996691438  
143 -1084 0.0207090896497001  
144 -1086 0.0127655286195192  
145 -1088 0.00854004269533275  
146 -1090 0.00635526613490286  
147 -1092 0.00518140755178082  
148 -1094 0.00455405026737381  
149 -1096 0.00426268956025233  
150 -1098 0.00423510235887238  
151 -1100 0.00446505970250814  
152 -1102 0.00496653746864136  
153 -1104 0.00580707926483870  
154 -1106 0.00666740083564581  
155 -1108 0.00624732665593806  
156 -1110 0.00479908163793379  
157 -1112 0.00361121925654796  
158 -1114 0.00287942570706319  
159 -1116 0.00246148742161380  
160 -1118 0.00222778888171568  
161 -1120 0.00209650525411750  
162 -1122 0.00202121838132918  
163 -1124 0.00199323955812561  
164 -1126 0.00200797851417853  
165 -1128 0.00204812470413808  
166 -1130 0.00209417368698948  
167 -1132 0.00209849682757402  
168 -1134 0.00210954008712956  
169 -1136 0.00214927272221614  
170 -1138 0.00221781253558492  
171 -1140 0.00231654284254776  
172 -1142 0.00241700276584513  
173 -1144 0.00252090482583751  
174 -1146 0.00265926205183231  
175 -1148 0.00286652526484237  
176 -1150 0.00313647720191737  
177 -1152 0.00347416081610501  
178 -1154 0.00387661923259805  
179 -1156 0.00410043342018308  
180 -1158 0.00394886198110498  
181 -1160 0.00373148843650175  
182 -1162 0.00350494607394550  
183 -1164 0.00334022215869222  
184 -1166 0.00324053812759405  
185 -1168 0.00323728249115084  
186 -1170 0.00337030363472976  
187 -1172 0.00370331752537631  
188 -1174 0.00446861428672600  
189 -1176 0.00627098368325835  
190 -1178 0.00931078620410600  
191 -1180 0.00795027706068620  
192 -1182 0.00505648215885331  
193 -1184 0.00377716421438011  
194 -1186 0.00319136495849046  
195 -1188 0.00290137589052677  
196 -1190 0.00275791558623964  
197 -1192 0.00269226681474014  
198 -1194 0.00266088014296474  
199 -1196 0.00258817828799466  
200 -1198 0.00241700923017517  
201 -1200 0.00221558969693162  
202 -1202 0.00211217407863773  
203 -1204 0.00220182940076526  
204 -1206 0.00261294695511882  
205 -1208 0.00347974535374746  
206 -1210 0.00437930056728570  
207 -1212 0.00342648851242818  
208 -1214 0.00227260060290268  
209 -1216 0.00178258728885112  
210 -1218 0.00154392622881232  
211 -1220 0.00139698451678244  
212 -1222 0.00129280677379398  
213 -1224 0.00121946854787068  
214 -1226 0.00117184455170345  
215 -1228 0.00113722984861070  
216 -1230 0.00111912311009601  
217 -1232 0.00111390956612134  
218 -1234 0.00112443805885795  
219 -1236 0.00115660063219376  
220 -1238 0.00121045559427169  
221 -1240 0.00129274578774778  
222 -1242 0.00140396276384137  
223 -1244 0.00154410614148823  
224 -1246 0.00169860381220359  
225 -1248 0.00180840115780576  
226 -1250 0.00177688982988028  
227 -1252 0.00157601125295148  
228 -1254 0.00138106340282942  
229 -1256 0.00125620905206826  
230 -1258 0.00118717226425611  
231 -1260 0.00114496451549449  
232 -1262 0.00111429933337465  
233 -1264 0.00109740533980092  
234 -1266 0.00108967549075875  
235 -1268 0.00109315730663637  
236 -1270 0.00110701272913057  
237 -1272 0.00112547293050748  
238 -1274 0.00114417070376777  
239 -1276 0.00115549769406343  
240 -1278 0.00115861723477586  
241 -1280 0.00114576824540165  
242 -1282 0.00112307423917382  
243 -1284 0.00110803299150391  
244 -1286 0.00109790695605719  
245 -1288 0.00109710433202375  
246 -1290 0.00110698710171340  
247 -1292 0.00113245942678089  
248 -1294 0.00117552067320688  
249 -1296 0.00124267198974583  
250 -1298 0.00132277561158489  
251 -1300 0.00139217958266282  
252 -1302 0.00142973694885209  
253 -1304 0.00144188181676038  
254 -1306 0.00147541483276765  
255 -1308 0.00159956692209740  
256 -1310 0.00186843894759088  
257 -1312 0.00216486082449073  
258 -1314 0.00211728875491887  
259 -1316 0.00187507564071290  
260 -1318 0.00171677440706927  
261 -1320 0.00164837511625716  
262 -1322 0.00163899782669962  
263 -1324 0.00166410609076352  
264 -1326 0.00171764577889364  
265 -1328 0.00180479473401823  
266 -1330 0.00194274885535529  
267 -1332 0.00206022538770732  
268 -1334 0.00196217286057273  
269 -1336 0.00188492778401013  
270 -1338 0.00187122231048589  
271 -1340 0.00188921428962955  
272 -1342 0.00193700700412885  
273 -1344 0.00200313353323991  
274 -1346 0.00208778115174581  
275 -1348 0.00218066174704292  
276 -1350 0.00226588109762249  
277 -1352 0.00236276913468593  
278 -1354 0.00248915903884931  
279 -1356 0.00265547420500685  
280 -1358 0.00284820286383517  
281 -1360 0.00303211548157874  
282 -1362 0.00319538643027851  
283 -1364 0.00338011260813816  
284 -1366 0.00363996415682390  
285 -1368 0.00400265764738686  
286 -1370 0.00448976968523854  
287 -1372 0.00525773678870123  
288 -1374 0.00662029687278425  
289 -1376 0.00908376119233617  
290 -1378 0.0123031513241818  
291 -1380 0.0121671979448086  
292 -1382 0.00940007546463800  
293 -1384 0.00754318150864360  
294 -1386 0.00640356392721685  
295 -1388 0.00563257119321882  
296 -1390 0.00511010869784208  
297 -1392 0.00475789415695825  
298 -1394 0.00452833517370964  
299 -1396 0.00440186171426137  
300 -1398 0.00433687786700866  
301 -1400 0.00432317844214779  
302 -1402 0.00436175400856741  
303 -1404 0.00444654158141412  
304 -1406 0.00458045165701961  
305 -1408 0.00472070193080689  
306 -1410 0.00484730108752061  
307 -1412 0.00499169569971829  
308 -1414 0.00517526500052341  
309 -1416 0.00540856165680758  
310 -1418 0.00569301961826355  
311 -1420 0.00603609386579061  
312 -1422 0.00639815529754280  
313 -1424 0.00676704333943306  
314 -1426 0.00709702523848474  
315 -1428 0.00735286473751553  
316 -1430 0.00758946104003622  
317 -1432 0.00786781701959305  
318 -1434 0.00830202970708910  
319 -1436 0.00898232020613486  
320 -1438 0.0100197835148382  
321 -1440 0.0115095063570045  
322 -1442 0.0133985990853930  
323 -1444 0.0153768866835411  
324 -1446 0.0171765347348967  
325 -1448 0.0189361099169456  
326 -1450 0.0208245294344141  
327 -1452 0.0228039247538198  
328 -1454 0.0246810508004892  
329 -1456 0.0262618411626106  
330 -1458 0.0273608063623162  
331 -1460 0.0277930934742346  
332 -1462 0.0274706237226478  
333 -1464 0.0264211185824187  
334 -1466 0.0247980788620200  
335 -1468 0.0228296555480849  
336 -1470 0.0207834609064780  
337 -1472 0.0188724652439656  
338 -1474 0.0171801988754876  
339 -1476 0.0157920753997752  
340 -1478 0.0147283011159520  
341 -1480 0.0140030494767984  
342 -1482 0.0137569248084170  
343 -1484 0.0141879797029108  
344 -1486 0.0159226244331294  
345 -1488 0.0201940578220826  
346 -1490 0.0260836787125339  
347 -1492 0.0401202763896059  
348 -1494 0.0761786772950870  
349 -1496 0.108223079178941  
350 -1498 0.0527249260725011  
351 -1500 0.0271635520581988  
352 -1502 0.0173322191403291  
353 -1504 0.0124889207648925  
354 -1506 0.00992131298532918  
355 -1508 0.00839752655521901  
356 -1510 0.00745176347821015  
357 -1512 0.00688020881374870  
358 -1514 0.00648533490268327  
359 -1516 0.00628100243994201  
360 -1518 0.00629379543847072  
361 -1520 0.00670033315002658  
362 -1522 0.00786453088070098  
363 -1524 0.00861000109877936  
364 -1526 0.00697026673858113  
365 -1528 0.00565227380276001  
366 -1530 0.00510003019871344  
367 -1532 0.00487330093915990  
368 -1534 0.00477643425469498  
369 -1536 0.00467177280329912  
370 -1538 0.00449022432901730  
371 -1540 0.00423934685882746  
372 -1542 0.00393426018189818  
373 -1544 0.00365660104528498  
374 -1546 0.00348923385240243  
375 -1548 0.00342710802865492  
376 -1550 0.00346898664460405  
377 -1552 0.00338295466527580  
378 -1554 0.00321378452613121  
379 -1556 0.00313430635529189  
380 -1558 0.00316907431392649  
381 -1560 0.00330481737182376  
382 -1562 0.00356172011440931  
383 -1564 0.00388898354936485  
384 -1566 0.00429638887941885  
385 -1568 0.00472113284868973  
386 -1570 0.00504929184964361  
387 -1572 0.00519286093716334  
388 -1574 0.00509202242388202  
389 -1576 0.00481769783190026  
390 -1578 0.00455543799934706  
391 -1580 0.00435935962171553  
392 -1582 0.00433990247775519  
393 -1584 0.00460726311748136  
394 -1586 0.00492003737038605  
395 -1588 0.00490704034351103  
396 -1590 0.00492753522146188  
397 -1592 0.00518588888004375  
398 -1594 0.00592543183304241  
399 -1596 0.00720757954725413  
400 -1598 0.00912890526935344  
401 -1600 0.0130293680056744  
402 -1602 0.0206809953186127  
403 -1604 0.0299953585748135  
404 -1606 0.0248157340286292  
405 -1608 0.0127358449020555  
406 -1610 0.00746783575970784  
407 -1612 0.00537209761858949  
408 -1614 0.00445129559785390  
409 -1616 0.00405329276394375  
410 -1618 0.00399146289131384  
411 -1620 0.00409659649670941  
412 -1622 0.00425086095548363  
413 -1624 0.00425306230534309  
414 -1626 0.00388013491422351  
415 -1628 0.00322765310314340  
416 -1630 0.00259805094537761  
417 -1632 0.00208657181154715  
418 -1634 0.00169843933990688  
419 -1636 0.00141785441008406  
420 -1638 0.00123234974672297  
421 -1640 0.00109764310439106  
422 -1642 0.000997096490971439  
423 -1644 0.000923943814992787  
424 -1646 0.000867694719207358  
425 -1648 0.000857989573211860  
426 -1650 0.000876925837508371  
427 -1652 0.000900483600662835  
428 -1654 0.000924599031590994  
429 -1656 0.000943402878947833  
430 -1658 0.000957189946759812  
431 -1660 0.000919301596934912  
432 -1662 0.000829980699381760  
433 -1664 0.000741920416434289  
434 -1666 0.000684454640853614  
435 -1668 0.000660487010052916  
436 -1670 0.000677329699540855  
437 -1672 0.000733663772686657  
438 -1674 0.000829672252398670  
439 -1676 0.000923202402787059  
440 -1678 0.000900896424649981  
441 -1680 0.000787132461270056  
442 -1682 0.000676995955481515  
443 -1684 0.000611701232515841  
444 -1686 0.000595044263899243  
445 -1688 0.000601913444772076  
446 -1690 0.000631185451917075  
447 -1692 0.000675093910401457  
448 -1694 0.000731422393886708  
449 -1696 0.000808376337564176  
450 -1698 0.000794279618925047  
451 -1700 0.000709354504802398  
452 -1702 0.000657251178127169  
453 -1704 0.000631084077034609  
454 -1706 0.000620630016846374  
455 -1708 0.000614804872029308  
456 -1710 0.000610379344278778  
457 -1712 0.000608365704329393  
458 -1714 0.000610177708447017  
459 -1716 0.000628060629349526  
460 -1718 0.000671390695691186  
461 -1720 0.000748670745348075  
462 -1722 0.000874314265691752  
463 -1724 0.00104123844277088  
464 -1726 0.00123749183518020  
465 -1728 0.00147184752955714  
466 -1730 0.00173223404858593  
467 -1732 0.00197582318555127  
468 -1734 0.00215543372945357  
469 -1736 0.00220452603076912  
470 -1738 0.00209119301342784  
471 -1740 0.00185700091397871  
472 -1742 0.00156445999707629  
473 -1744 0.00127824303920924  
474 -1746 0.00103830550711541  
475 -1748 0.000858082809524967  
476 -1750 0.000736720622233361  
477 -1752 0.000665836151632355  
478 -1754 0.000633014507978860  
479 -1756 0.000636204186868655  
480 -1758 0.000664560791933513  
481 -1760 0.000700854142871225  
482 -1762 0.000738249770728404  
483 -1764 0.000779473476320026  
484 -1766 0.000831332837575542  
485 -1768 0.000887483745995595  
486 -1770 0.000943100942235622  
487 -1772 0.00100855983483948  
488 -1774 0.00108815587341361  
489 -1776 0.00117336763806935  
490 -1778 0.00122720647155439  
491 -1780 0.00120867298099444  
492 -1782 0.00117346527655232  
493 -1784 0.00119371865588136  
494 -1786 0.00128533671400934  
495 -1788 0.00142590894789679  
496 -1790 0.00158054902116715  
497 -1792 0.00179850758319075  
498 -1794 0.00213331852757031  
499 -1796 0.00258371206804431  
500 -1798 0.00310651819625664  
501 -1800 0.00358456135015573  
502 -1802 0.00384535056234718  
503 -1804 0.00377208677963125  
504 -1806 0.00340950704775298  
505 -1808 0.00292589878928829  
506 -1810 0.00246230467854199  
507 -1812 0.00209503276430901  
508 -1814 0.00185262669472132  
509 -1816 0.00171702079169156  
510 -1818 0.00163886439352206  
511 -1820 0.00157730777183400  
512 -1822 0.00149679229624579  
513 -1824 0.00138863730310920  
514 -1826 0.00127743508882463  
515 -1828 0.00118456389012839  
516 -1830 0.00112905353317808  
517 -1832 0.00108606377735617  
518 -1834 0.00103086061641581  
519 -1836 0.000984959950309749  
520 -1838 0.000979289058512249  
521 -1840 0.00102288594610930  
522 -1842 0.00112067935890798  
523 -1844 0.00128394592127716  
524 -1846 0.00152723861251123  
525 -1848 0.00188826636609761  
526 -1850 0.00239227576491655  
527 -1852 0.00300971905084921  
528 -1854 0.00364059420885185  
529 -1856 0.00414527688649222  
530 -1858 0.00428418417776257  
531 -1860 0.00397341781363892  
532 -1862 0.00343437915842565  
533 -1864 0.00294698351848267  
534 -1866 0.00265685216170442  
535 -1868 0.00257554798807387  
536 -1870 0.00262362192114651  
537 -1872 0.00267320615475132  
538 -1874 0.00259670566832300  
539 -1876 0.00235341832549094  
540 -1878 0.00201352392982882  
541 -1880 0.00167162491751218  
542 -1882 0.00138756730843950  
543 -1884 0.00117032979189392  
544 -1886 0.00101120581308014  
545 -1888 0.000892343360827370  
546 -1890 0.000799797724248844  
547 -1892 0.000722584304592367  
548 -1894 0.000668205830350704  
549 -1896 0.000645563701038960  
550 -1898 0.000645767881929762  
551 -1900 0.000633984361915526  
552 -1902 0.000588098076669510  
553 -1904 0.000535948959936282  
554 -1906 0.000500979831672727  
555 -1908 0.000480503614669823  
556 -1910 0.000475812984522745  
557 -1912 0.000486823903968232  
558 -1914 0.000515195500000000  
559 -1916 0.000562568109473544  
560 -1918 0.000630427523781356  
561 -1920 0.000723610116430462  
562 -1922 0.000847642176098185  
563 -1924 0.000992789644339751  
564 -1926 0.00114429259972093  
565 -1928 0.00131728542788928  
566 -1930 0.00155893716312052  
567 -1932 0.00190373075161683  
568 -1934 0.00237556565013185  
569 -1936 0.00298040121387223  
570 -1938 0.00364293200808332  
571 -1940 0.00416589638649938  
572 -1942 0.00433944387091247  
573 -1944 0.00420413532397440  
574 -1946 0.00380161374653215  
575 -1948 0.00327719918178656  
576 -1950 0.00282576366330091  
577 -1952 0.00253348765310892  
578 -1954 0.00239437526824859  
579 -1956 0.00234603768444204  
580 -1958 0.00232574864667046  
581 -1960 0.00220039532483667  
582 -1962 0.00199445232375287  
583 -1964 0.00170495488495039  
584 -1966 0.00137875775323702  
585 -1968 0.00109690552229723  
586 -1970 0.000878128994624433  
587 -1972 0.000721601368959039  
588 -1974 0.000617419916987627  
589 -1976 0.000562113218832075  
590 -1978 0.000551026292591773  
591 -1980 0.000575711660935202  
592 -1982 0.000615370850112472  
593 -1984 0.000626638864213787  
594 -1986 0.000619344762051612  
595 -1988 0.000644972987040071  
596 -1990 0.000691941782910493  
597 -1992 0.000694254646432683  
598 -1994 0.000622443290799324  
599 -1996 0.000495200120138662  
600 -1998 0.000402620427801543  
601 -2000 0.000357520428000267  
602 -2002 0.000340715817783006  
603 -2004 0.000340725563484929  
604 -2006 0.000349587604938024  
605 -2008 0.000357889528657337  
606 -2010 0.000352782837535485  
607 -2012 0.000327904929253038  
608 -2014 0.000298699882098499  
609 -2016 0.000271842376811093  
610 -2018 0.000242333037716520  
611 -2020 0.000218337240170542  
612 -2022 0.000199194821720737  
613 -2024 0.000183911806628813  
614 -2026 0.000171888258235563  
615 -2028 0.000164785282634461  
616 -2030 0.000164391739593814  
617 -2032 0.000169011600820695  
618 -2034 0.000154127618321273  
619 -2036 0.000133850562902313  
620 -2038 0.000121768011512588  
621 -2040 0.000114542173977814  
622 -2042 0.000109960714942027  
623 -2044 0.000107324747708015  
624 -2046 0.000105319938271901  
625 -2048 0.000104400109927128  
626 -2050 0.000104560803595480  
627 -2052 0.000105682984195988  
628 -2054 0.000107138188290709  
629 -2056 0.000109850938702712  
630 -2058 0.000113964387835913  
631 -2060 0.000119159665067584  
632 -2062 0.000125394011284327  
633 -2064 0.000135383120416356  
634 -2066 0.000150829077064515  
635 -2068 0.000163896208951784  
636 -2070 0.000158538657020860  
637 -2072 0.000143857048326539  
638 -2074 0.000133838990991728  
639 -2076 0.000126082674541763  
640 -2078 0.000119111322229434  
641 -2080 0.000113978504701401  
642 -2082 0.000110907574969952  
643 -2084 0.000108574694668308  
644 -2086 0.000105750311657561  
645 -2088 0.000102757884920459  
646 -2090 0.000100315348970678  
647 -2092 9.88998809699028e-05  
648 -2094 9.84636051990861e-05  
649 -2096 9.86736776470892e-05  
650 -2098 9.86832304001427e-05  
651 -2100 9.94847029581411e-05  
652 -2102 0.000102501492433386  
653 -2104 0.000108578252528750  
654 -2106 0.000117598982731806  
655 -2108 0.000128810423312497  
656 -2110 0.000138078130156183  
657 -2112 0.000139894738408702  
658 -2114 0.000140372347283306  
659 -2116 0.000147183990385426  
660 -2118 0.000142580842940779  
661 -2120 0.000126124302551768  
662 -2122 0.000119111147897455  
663 -2124 0.000117761941379516  
664 -2126 0.000110386213471180  
665 -2128 0.000100586367430428  
666 -2130 9.65127771567695e-05  
667 -2132 9.71593180254151e-05  
668 -2134 0.000100588542105452  
669 -2136 0.000104481772978239  
670 -2138 0.000107041125533866  
671 -2140 0.000108872498221666  
672 -2142 0.000111489568147590  
673 -2144 0.000115451529322482  
674 -2146 0.000120558240114413  
675 -2148 0.000126537781071288  
676 -2150 0.000134733619506300  
677 -2152 0.000148643632029954  
678 -2154 0.000172040859828778  
679 -2156 0.000210048660817435  
680 -2158 0.000268125741557685  
681 -2160 0.000351069215958102  
682 -2162 0.000450344598032358  
683 -2164 0.000489938528699291  
684 -2166 0.000409492796412179  
685 -2168 0.000304387639702614  
686 -2170 0.000235891130206754  
687 -2172 0.000200519075056806  
688 -2174 0.000185710828669175  
689 -2176 0.000182424899321747  
690 -2178 0.000187448554282292  
691 -2180 0.000203021437757415  
692 -2182 0.000231533383222207  
693 -2184 0.000266979354976650  
694 -2186 0.000274670338797065  
695 -2188 0.000249531305296574  
696 -2190 0.000224075465024111  
697 -2192 0.000200276630934979  
698 -2194 0.000177273244376758  
699 -2196 0.000160285923199765  
700 -2198 0.000150581068702164  
701 -2200 0.000148630566016007  
702 -2202 0.000159418644068291  
703 -2204 0.000190928483551684  
704 -2206 0.000246685640401459  
705 -2208 0.000270254541506430  
706 -2210 0.000222823187679136  
707 -2212 0.000183299674920404  
708 -2214 0.000159208446689860  
709 -2216 0.000141367831176120  
710 -2218 0.000133886240444937  
711 -2220 0.000133377867922854  
712 -2222 0.000136687110101880  
713 -2224 0.000141595068371183  
714 -2226 0.000145519316291541  
715 -2228 0.000148458736825531  
716 -2230 0.000153316938474443  
717 -2232 0.000163253960273079  
718 -2234 0.000178923069609914  
719 -2236 0.000194257120755014  
720 -2238 0.000196450490452201  
721 -2240 0.000188281502894665  
722 -2242 0.000182547056123856  
723 -2244 0.000184193400303698  
724 -2246 0.000192794200162931  
725 -2248 0.000207468879582850  
726 -2250 0.000228635659533982  
727 -2252 0.000256821954754517  
728 -2254 0.000293238050530334  
729 -2256 0.000339843587945316  
730 -2258 0.000394697192716897  
731 -2260 0.000433841600455809  
732 -2262 0.000418808222045475  
733 -2264 0.000365652480977041  
734 -2266 0.000317992842743265  
735 -2268 0.000289251978678528  
736 -2270 0.000276323460348606  
737 -2272 0.000276007776761593  
738 -2274 0.000285194711508216  
739 -2276 0.000305840459677383  
740 -2278 0.000341614672459952  
741 -2280 0.000378323694871339  
742 -2282 0.000375183465200990  
743 -2284 0.000372499291886178  
744 -2286 0.000379130457959152  
745 -2288 0.000369071052928138  
746 -2290 0.000344203099796142  
747 -2292 0.000313724278864159  
748 -2294 0.000283180068926335  
749 -2296 0.000260398235921227  
750 -2298 0.000248364444837745  
751 -2300 0.000246962256014277  
752 -2302 0.000257337196851115  
753 -2304 0.000282117167464228  
754 -2306 0.000327011660272884  
755 -2308 0.000402901410624785  
756 -2310 0.000515678907419335  
757 -2312 0.000613221545587734  
758 -2314 0.000587317319167494  
759 -2316 0.000479703817387008  
760 -2318 0.000387543339108333  
761 -2320 0.000331935579008350  
762 -2322 0.000305882244139694  
763 -2324 0.000301743073919341  
764 -2326 0.000318021837096887  
765 -2328 0.000360763254301904  
766 -2330 0.000442864766710211  
767 -2332 0.000580146273004247  
768 -2334 0.000746878008138738  
769 -2336 0.000778905767997363  
770 -2338 0.000655878707879373  
771 -2340 0.000549860316308082  
772 -2342 0.000474310426764780  
773 -2344 0.000414796574428013  
774 -2346 0.000384139069758195  
775 -2348 0.000382158356339707  
776 -2350 0.000402158338733409  
777 -2352 0.000435516153586227  
778 -2354 0.000472182760873504  
779 -2356 0.000515961034751272  
780 -2358 0.000592576004516974  
781 -2360 0.000693206523120231  
782 -2362 0.000643638218785556  
783 -2364 0.000478341631402279  
784 -2366 0.000369914098808752  
785 -2368 0.000314093467617302  
786 -2370 0.000287309303030045  
787 -2372 0.000274524402561852  
788 -2374 0.000270061869985669  
789 -2376 0.000271829601590763  
790 -2378 0.000279194809335497  
791 -2380 0.000294905061876556  
792 -2382 0.000319347534507768  
793 -2384 0.000350241467027989  
794 -2386 0.000391786089197638  
795 -2388 0.000432288381112108  
796 -2390 0.000431894838874137  
797 -2392 0.000400306861211915  
798 -2394 0.000373780803138032  
799 -2396 0.000355410966982535  
800 -2398 0.000347151739593354  
801 -2400 0.000350924151462325  
802 -2402 0.000365706536144189  
803 -2404 0.000389705426960732  
804 -2406 0.000421334803876133  
805 -2408 0.000459934423654906  
806 -2410 0.000500616815279102  
807 -2412 0.000525702627325844  
808 -2414 0.000513223543953278  
809 -2416 0.000478247500654749  
810 -2418 0.000439595749420076  
811 -2420 0.000399407179067621  
812 -2422 0.000365631853681067  
813 -2424 0.000342099304419797  
814 -2426 0.000327643185447820  
815 -2428 0.000319852482413628  
816 -2430 0.000318090248146717  
817 -2432 0.000318226888962093  
818 -2434 0.000307017564256603  
819 -2436 0.000284561022911212  
820 -2438 0.000265983112770141  
821 -2440 0.000252937611403322  
822 -2442 0.000242679401171322  
823 -2444 0.000236093051616947  
824 -2446 0.000233130690914760  
825 -2448 0.000233167378896135  
826 -2450 0.000235415965609999  
827 -2452 0.000239364304311204  
828 -2454 0.000244209499641596  
829 -2456 0.000248579466181052  
830 -2458 0.000251144773278908  
831 -2460 0.000252431049719579  
832 -2462 0.000253691712617762  
833 -2464 0.000255788005476147  
834 -2466 0.000256434321853842  
835 -2468 0.000251072591655402  
836 -2470 0.000241597521259849  
837 -2472 0.000234162117014666  
838 -2474 0.000229676856991507  
839 -2476 0.000227592143774873  
840 -2478 0.000226834091088810  
841 -2480 0.000227168703547583  
842 -2482 0.000228588584217583  
843 -2484 0.000231746296813716  
844 -2486 0.000236823965966075  
845 -2488 0.000241600139160114  
846 -2490 0.000244394482975018  
847 -2492 0.000244248137929474  
848 -2494 0.000245127828260994  
849 -2496 0.000251434891521320  
850 -2498 0.000247993851620619  
851 -2500 0.000232735996433491  
852 -2502 0.000222497793867323  
853 -2504 0.000221589422451279  
854 -2506 0.000232579945681551  
855 -2508 0.000250427153657126  
856 -2510 0.000252498000507853  
857 -2512 0.000232189718802120  
858 -2514 0.000211050185590214  
859 -2516 0.000198391157226399  
860 -2518 0.000193635707688150  
861 -2520 0.000193341820452081  
862 -2522 0.000193371593068733  
863 -2524 0.000189643081211288  
864 -2526 0.000181794690676754  
865 -2528 0.000178838464388285  
866 -2530 0.000183501803348288  
867 -2532 0.000194837096053966  
868 -2534 0.000211327514566071  
869 -2536 0.000231393834808824  
870 -2538 0.000255837394665623  
871 -2540 0.000275709996672117  
872 -2542 0.000266055047783776  
873 -2544 0.000243859757637041  
874 -2546 0.000235285437161138  
875 -2548 0.000236304976186297  
876 -2550 0.000232544359689715  
877 -2552 0.000218806075082454  
878 -2554 0.000204743746363893  
879 -2556 0.000196655427865349  
880 -2558 0.000191976123078746  
881 -2560 0.000186392842736032  
882 -2562 0.000182465243677096  
883 -2564 0.000182341770175991  
884 -2566 0.000186622668096877  
885 -2568 0.000194771585308041  
886 -2570 0.000207509200230819  
887 -2572 0.000227536779149540  
888 -2574 0.000256126025913237  
889 -2576 0.000293783533966409  
890 -2578 0.000344606705405512  
891 -2580 0.000421000900491490  
892 -2582 0.000539940417278290  
893 -2584 0.000691325137774485  
894 -2586 0.000768064347900480  
895 -2588 0.000684349300000000  
896 -2590 0.000536495643153772  
897 -2592 0.000418107936641488  
898 -2594 0.000348162932430616  
899 -2596 0.000316562063243598  
900 -2598 0.000311605992448936  
901 -2600 0.000329718943031756  
902 -2602 0.000370011429187919  
903 -2604 0.000412184734144213  
904 -2606 0.000402481978671523  
905 -2608 0.000368470211663778  
906 -2610 0.000353398410510846  
907 -2612 0.000328281593188018  
908 -2614 0.000295400882956194  
909 -2616 0.000275902521470556  
910 -2618 0.000268299167514448  
911 -2620 0.000267511791747167  
912 -2622 0.000270974116559811  
913 -2624 0.000277238419508473  
914 -2626 0.000286763887252883  
915 -2628 0.000300107477286003  
916 -2630 0.000316524811935304  
917 -2632 0.000327263381122722  
918 -2634 0.000305877054698251  
919 -2636 0.000269148133708810  
920 -2638 0.000248172907618610  
921 -2640 0.000239823700606054  
922 -2642 0.000238746030638882  
923 -2644 0.000239868631298371  
924 -2646 0.000237697572301885  
925 -2648 0.000231658620506580  
926 -2650 0.000224559727594560  
927 -2652 0.000220154792342943  
928 -2654 0.000220025182909045  
929 -2656 0.000220821585838385  
930 -2658 0.000219097069889182  
931 -2660 0.000213668868513552  
932 -2662 0.000206551642880241  
933 -2664 0.000200132874030954  
934 -2666 0.000198263371264169  
935 -2668 0.000204157476079366  
936 -2670 0.000219581959345431  
937 -2672 0.000228529275997830  
938 -2674 0.000212671171569940  
939 -2676 0.000198554340066309  
940 -2678 0.000193733620852842  
941 -2680 0.000194427317307389  
942 -2682 0.000197546011671515  
943 -2684 0.000200581527813713  
944 -2686 0.000203985348880727  
945 -2688 0.000208935024070450  
946 -2690 0.000213885837983080  
947 -2692 0.000215780646355564  
948 -2694 0.000215167439140776  
949 -2696 0.000214895725221701  
950 -2698 0.000217360387387823  
951 -2700 0.000222623944199778  
952 -2702 0.000229950531867105  
953 -2704 0.000237779651458241  
954 -2706 0.000247270953949545  
955 -2708 0.000260083526905394  
956 -2710 0.000275286056335416  
957 -2712 0.000293138008774478  
958 -2714 0.000315098638979930  
959 -2716 0.000342140022611386  
960 -2718 0.000376355762584957  
961 -2720 0.000422618703820090  
962 -2722 0.000488803228667163  
963 -2724 0.000585387059813060  
964 -2726 0.000728318801443707  
965 -2728 0.000938827018235910  
966 -2730 0.00123037571269695  
967 -2732 0.00155229568740433  
968 -2734 0.00172266995984292  
969 -2736 0.00158429227183195  
970 -2738 0.00126235409603059  
971 -2740 0.000954219558161654  
972 -2742 0.000733284051680574  
973 -2744 0.000590574186925838  
974 -2746 0.000500913503228797  
975 -2748 0.000444283569806984  
976 -2750 0.000408552058896459  
977 -2752 0.000386442879562956  
978 -2754 0.000373264157615818  
979 -2756 0.000366670327661857  
980 -2758 0.000363876514149830  
981 -2760 0.000361532536949891  
982 -2762 0.000363675314741141  
983 -2764 0.000366718711717702  
984 -2766 0.000373487709343178  
985 -2768 0.000385907143020104  
986 -2770 0.000398462101615587  
987 -2772 0.000413801469177668  
988 -2774 0.000425659990486031  
989 -2776 0.000436402382617843  
990 -2778 0.000446662734946199  
991 -2780 0.000455121187378285  
992 -2782 0.000464083631949392  
993 -2784 0.000471837814603525  
994 -2786 0.000485996560282024  
995 -2788 0.000502172804216709  
996 -2790 0.000522830212064553  
997 -2792 0.000548289451554969  
998 -2794 0.000579634288120943  
999 -2796 0.000611379237870225  
1000 -2798 0.000641158616950349  
1001 -2800 0.000672247209660977  
1002 -2802 0.000711615716417748  
1003 -2804 0.000756204442404881  
1004 -2806 0.000806513382136127  
1005 -2808 0.000854383801707436  
1006 -2810 0.000899046135928726  
1007 -2812 0.000920533253907859  
1008 -2814 0.000922946174823163  
1009 -2816 0.000938823165339874  
1010 -2818 0.000975854382639431  
1011 -2820 0.00103794809306155  
1012 -2822 0.00111441105526966  
1013 -2824 0.00117124310275486  
1014 -2826 0.00120584112843460  
1015 -2828 0.00126141309789025  
1016 -2830 0.00134778284367920  
1017 -2832 0.00146199663837007  
1018 -2834 0.00159718851386329  
1019 -2836 0.00175330338362696  
1020 -2838 0.00193523559724759  
1021 -2840 0.00214829304268432  
1022 -2842 0.00239693861672905  
1023 -2844 0.00270947510257679  
1024 -2846 0.00308962037090872  
1025 -2848 0.00355940585209848  
1026 -2850 0.00412210422108316  
1027 -2852 0.00476891854151234  
1028 -2854 0.00547214050611261  
1029 -2856 0.00617409172881556  
1030 -2858 0.00678722786702444  
1031 -2860 0.00723807939551757  
1032 -2862 0.00752048939258356  
1033 -2864 0.00769405118384194  
1034 -2866 0.00780672387589873  
1035 -2868 0.00789211778455793  
1036 -2870 0.00795935754077555  
1037 -2872 0.00799733164350610  
1038 -2874 0.00795934759033912  
1039 -2876 0.00778684233057949  
1040 -2878 0.00748513477927108  
1041 -2880 0.00712782450019760  
1042 -2882 0.00674716793892496  
1043 -2884 0.00636559086703165  
1044 -2886 0.00600252759803496  
1045 -2888 0.00568003469443299  
1046 -2890 0.00541869257628554  
1047 -2892 0.00523149924308805  
1048 -2894 0.00513859281992941  
1049 -2896 0.00514912231818864  
1050 -2898 0.00528298553786387  
1051 -2900 0.00554846488279469  
1052 -2902 0.00596670745150011  
1053 -2904 0.00656025912947429  
1054 -2906 0.00737309118502326  
1055 -2908 0.00844343143196328  
1056 -2910 0.00980783562233305  
1057 -2912 0.0114361820721680  
1058 -2914 0.0132043723140582  
1059 -2916 0.0148639399258050  
1060 -2918 0.0160322637171387  
1061 -2920 0.0163848402191419  
1062 -2922 0.0159315596024990  
1063 -2924 0.0149712224125917  
1064 -2926 0.0138179195741240  
1065 -2928 0.0126830001717222  
1066 -2930 0.0117051760061400  
1067 -2932 0.0109454119425227  
1068 -2934 0.0104094926683649  
1069 -2936 0.0100777464854532  
1070 -2938 0.00991576239015874  
1071 -2940 0.00989092758914217  
1072 -2942 0.00995253861794336  
1073 -2944 0.0100558436016283  
1074 -2946 0.0101466649820268  
1075 -2948 0.0101700911447294  
1076 -2950 0.0100970420129300  
1077 -2952 0.00995445488065370  
1078 -2954 0.00977184847019253  
1079 -2956 0.00956031409076577  
1080 -2958 0.00931672833064324  
1081 -2960 0.00900841342025127  
1082 -2962 0.00860452512496009  
1083 -2964 0.00819173199579369  
1084 -2966 0.00793188379052879  
1085 -2968 0.00787856977180025  
1086 -2970 0.00795406658370171  
1087 -2972 0.00807021356855313  
1088 -2974 0.00817433984043233  
1089 -2976 0.00825003493744345  
1090 -2978 0.00828855603001654  
1091 -2980 0.00828386290179407  
1092 -2982 0.00816950979044141  
1093 -2984 0.00795147116279175  
1094 -2986 0.00771875813248752  
1095 -2988 0.00752177579743462  
1096 -2990 0.00739482968641806  
1097 -2992 0.00735495102785436  
1098 -2994 0.00742400805444368  
1099 -2996 0.00762947734762659  
1100 -2998 0.00800350176450487  
1101 -3000 0.00849881078288103  
1102 -3002 0.00896624168638865  
1103 -3004 0.00925040248900867  
1104 -3006 0.00945455630611128  
1105 -3008 0.00976581762927042  
1106 -3010 0.0103150719126273  
1107 -3012 0.0112091641279662  
1108 -3014 0.0125665741882334  
1109 -3016 0.0144920310150755  
1110 -3018 0.0171523311364697  
1111 -3020 0.0206588071576588  
1112 -3022 0.0247927573582982  
1113 -3024 0.0285338257471566  
1114 -3026 0.0305737428191527  
1115 -3028 0.0304197730378849  
1116 -3030 0.0285285708945381  
1117 -3032 0.0254626182993726  
1118 -3034 0.0218417847555673  
1119 -3036 0.0183214780469989  
1120 -3038 0.0154367262434714  
1121 -3040 0.0134174271105468  
1122 -3042 0.0121814306436623  
1123 -3044 0.0114802419869786  
1124 -3046 0.0111082334096508  
1125 -3048 0.0110364952795097  
1126 -3050 0.0112341213861221  
1127 -3052 0.0116521403194674  
1128 -3054 0.0121679353995795  
1129 -3056 0.0126492093791370  
1130 -3058 0.0130640240273400  
1131 -3060 0.0134217837485980  
1132 -3062 0.0136027351521215  
1133 -3064 0.0133566760196114  
1134 -3066 0.0124957830807641  
1135 -3068 0.0111185801076637  
1136 -3070 0.00962312187980008  
1137 -3072 0.00840019013916095  
1138 -3074 0.00762785975903174  
1139 -3076 0.00731431659052294  
1140 -3078 0.00742769361429674  
1141 -3080 0.00800169947155848  
1142 -3082 0.00909924810606661  
1143 -3084 0.0105612984915747  
1144 -3086 0.0115953458981882  
1145 -3088 0.0108915516715014  
1146 -3090 0.00855348266587572  
1147 -3092 0.00625766310903960  
1148 -3094 0.00474250996240750  
1149 -3096 0.00389487972553113  
1150 -3098 0.00350242093033435  
1151 -3100 0.00342566123955596  
1152 -3102 0.00354245491578370  
1153 -3104 0.00366329979669444  
1154 -3106 0.00351255659174282  
1155 -3108 0.00307160622386024  
1156 -3110 0.00262319086310484  
1157 -3112 0.00230238895472291  
1158 -3114 0.00208330628877116  
1159 -3116 0.00190296000440166  
1160 -3118 0.00170124594674715  
1161 -3120 0.00147221774746264  
1162 -3122 0.00126680203340060  
1163 -3124 0.00110221512874358  
1164 -3126 0.000972843085744223  
1165 -3128 0.000865976217229730  
1166 -3130 0.000787123046176519  
1167 -3132 0.000725569824317256  
1168 -3134 0.000678619961272403  
1169 -3136 0.000643376054198741  
1170 -3138 0.000613508276940799  
1171 -3140 0.000585754400051242  
1172 -3142 0.000561171104171409  
1173 -3144 0.000538801514536514  
1174 -3146 0.000520080512301793  
1175 -3148 0.000505696831504068  
1176 -3150 0.000493470880103411  
1177 -3152 0.000480268222246598  
1178 -3154 0.000470385004364871  
1179 -3156 0.000459220112914975  
1180 -3158 0.000450945450269378  
1181 -3160 0.000450827328828143  
1182 -3162 0.000455120896574839  
1183 -3164 0.000465883832863404  
1184 -3166 0.000478798660924222  
1185 -3168 0.000482832083650923  
1186 -3170 0.000455625596338195  
1187 -3172 0.000403338720059331  
1188 -3174 0.000360438306588196  
1189 -3176 0.000332520864586029  
1190 -3178 0.000313938694862586  
1191 -3180 0.000300705768353348  
1192 -3182 0.000290665831960273  
1193 -3184 0.000282478444260369  
1194 -3186 0.000275747274780963  
1195 -3188 0.000269274452306063  
1196 -3190 0.000262630704721266  
1197 -3192 0.000255445037852355  
1198 -3194 0.000248377973867383  
1199 -3196 0.000241977580841794  
1200 -3198 0.000236251689540068  
1201 -3200 0.000230923454004864  
1202 -3202 0.000226049100105626  
1203 -3204 0.000221226160126354  
1204 -3206 0.000214716060376866  
1205 -3208 0.000206517982920749  
1206 -3210 0.000198104526951019  
1207 -3212 0.000190353242003341  
1208 -3214 0.000183841618071712  
1209 -3216 0.000178536526886377  
1210 -3218 0.000173732996508941  
1211 -3220 0.000169365792718528  
1212 -3222 0.000165299675350027  
1213 -3224 0.000161252739783070  
1214 -3226 0.000157550287906591  
1215 -3228 0.000154290860671044  
1216 -3230 0.000151403187559336  
1217 -3232 0.000148762116611554  
1218 -3234 0.000146608972658800  
1219 -3236 0.000144929084687115  
1220 -3238 0.000143621190469325  
1221 -3240 0.000142423755040669  
1222 -3242 0.000141225309365069  
1223 -3244 0.000139879705280103  
1224 -3246 0.000138120388481842  
1225 -3248 0.000136557609027687  
1226 -3250 0.000135029965649156  
1227 -3252 0.000133891483928728  
1228 -3254 0.000133096425324259  
1229 -3256 0.000132368577771128  
1230 -3258 0.000131178881840028  
1231 -3260 0.000129611032335659  
1232 -3262 0.000128050800000000  
1233 -3264 0.000126496752229370  
1234 -3266 0.000125487476864466  
1235 -3268 0.000124918363511663  
1236 -3270 0.000124282902673504  
1237 -3272 0.000123524889665480  
1238 -3274 0.000122442491776109  
1239 -3276 0.000121443655497364  
1240 -3278 0.000120760252331750  
1241 -3280 0.000120133235127335  
1242 -3282 0.000119422774440518  
1243 -3284 0.000118787091342885  
1244 -3286 0.000118050006014353  
1245 -3288 0.000117490615311207  
1246 -3290 0.000116940876538515  
1247 -3292 0.000116411722780357  
1248 -3294 0.000116040811167173  
1249 -3296 0.000115834700717885  
1250 -3298 0.000116085966839459  
1251 -3300 0.000116986523436758  
1252 -3302 0.000118267730379294  
1253 -3304 0.000119505403103670  
1254 -3306 0.000120364280297837  
1255 -3308 0.000119982615737227  
1256 -3310 0.000118961448074642  
1257 -3312 0.000117873723711904  
1258 -3314 0.000117091085003690  
1259 -3316 0.000116576391297391  
1260 -3318 0.000116630812029799  
1261 -3320 0.000116648622872189  
1262 -3322 0.000116640410140475  
1263 -3324 0.000116601640984688  
1264 -3326 0.000116254038453171  
1265 -3328 0.000115188264691018  
1266 -3330 0.000113811841076524  
1267 -3332 0.000111681446514179  
1268 -3334 0.000108818040972509  
1269 -3336 0.000105958252604406  
1270 -3338 0.000103151741537451  
1271 -3340 0.000100395217441575  
1272 -3342 9.80332064093372e-05  
1273 -3344 9.53544349575209e-05  
1274 -3346 9.25223256784850e-05  
1275 -3348 9.00829101787277e-05  
1276 -3350 8.83163531062304e-05  
1277 -3352 8.72118771260860e-05  
1278 -3354 8.64440098119140e-05  
1279 -3356 8.60520504254794e-05  
1280 -3358 8.61965597139509e-05  
1281 -3360 8.70019144324470e-05  
1282 -3362 8.83318478317726e-05  
1283 -3364 9.00079714359512e-05  
1284 -3366 9.23139048671722e-05  
1285 -3368 9.50882502511675e-05  
1286 -3370 9.78832163580005e-05  
1287 -3372 0.000100096171211192  
1288 -3374 0.000102179086616863  
1289 -3376 0.000103749608742208  
1290 -3378 0.000105213237160669  
1291 -3380 0.000106688938713341  
1292 -3382 0.000107853667399164  
1293 -3384 0.000108503663896066  
1294 -3386 0.000108465998629706  
1295 -3388 0.000107522134166390  
1296 -3390 0.000105586354148376  
1297 -3392 0.000103099282581304  
1298 -3394 0.000100324257650923  
1299 -3396 9.74485799284953e-05  
1300 -3398 9.51596059704078e-05  
1301 -3400 9.35013107298140e-05  
1302 -3402 9.21170196430098e-05  
1303 -3404 9.07360614712649e-05  
1304 -3406 8.91138931604199e-05  
1305 -3408 8.74505590276362e-05  
1306 -3410 8.56664975562433e-05  
1307 -3412 8.43848055968202e-05  
1308 -3414 8.35095737363273e-05  
1309 -3416 8.28173663218536e-05  
1310 -3418 8.25803390851867e-05  
1311 -3420 8.34887031217918e-05  
1312 -3422 8.50941717249168e-05  
1313 -3424 8.76826565386191e-05  
1314 -3426 9.18893425240818e-05  
1315 -3428 9.72727573628125e-05  
1316 -3430 0.000103498414055259  
1317 -3432 0.000110175431772886  
1318 -3434 0.000116489353052258  
1319 -3436 0.000121652113320222  
1320 -3438 0.000125199891677689  
1321 -3440 0.000126017012084730  
1322 -3442 0.000123363542579961  
1323 -3444 0.000118359425974797  
1324 -3446 0.000111284305442118  
1325 -3448 0.000102049297013716  
1326 -3450 9.29060570294263e-05  
1327 -3452 8.56830126047782e-05  
1328 -3454 8.03943044406067e-05  
1329 -3456 7.64946805035534e-05  
1330 -3458 7.35384095568400e-05  
1331 -3460 7.15607792666279e-05  
1332 -3462 7.00113147312602e-05  
1333 -3464 6.86840886320734e-05  
1334 -3466 6.76516046709459e-05  
1335 -3468 6.66317002099573e-05  
1336 -3470 6.58163245627029e-05  
1337 -3472 6.48526803819241e-05  
1338 -3474 6.41769150098627e-05  
1339 -3476 6.33519637219242e-05  
1340 -3478 6.21036964756407e-05  
1341 -3480 6.07594134549892e-05  
1342 -3482 5.99888706228529e-05  
1343 -3484 5.95355056229478e-05  
1344 -3486 5.98196476615315e-05  
1345 -3488 6.07067305157839e-05  
1346 -3490 6.20707024404776e-05  
1347 -3492 6.35630004076309e-05  
1348 -3494 6.39802692410745e-05  
1349 -3496 6.36894878745265e-05  
1350 -3498 6.27365377476382e-05  
1351 -3500 6.17431130904710e-05  
1352 -3502 6.13279727787810e-05  
1353 -3504 6.13193515749704e-05  
1354 -3506 6.24903413403870e-05  
1355 -3508 6.43864144265415e-05  
1356 -3510 6.71410924962580e-05  
1357 -3512 7.03539058487688e-05  
1358 -3514 7.47946182109209e-05  
1359 -3516 7.95754496113107e-05  
1360 -3518 8.34700851824913e-05  
1361 -3520 8.39873348467991e-05  
1362 -3522 8.07272560865977e-05  
1363 -3524 7.56312308938946e-05  
1364 -3526 7.10894728276635e-05  
1365 -3528 6.81632208726418e-05  
1366 -3530 6.64216930115337e-05  
1367 -3532 6.58132280866232e-05  
1368 -3534 6.67321753128692e-05  
1369 -3536 6.94647085013537e-05  
1370 -3538 7.44308734240544e-05  
1371 -3540 8.16543395123198e-05  
1372 -3542 9.03200858171377e-05  
1373 -3544 9.85535954298993e-05  
1374 -3546 0.000104547035052111  
1375 -3548 0.000107433770750519  
1376 -3550 0.000108038450708995  
1377 -3552 0.000107166592996916  
1378 -3554 0.000105178798896553  
1379 -3556 0.000101095184756009  
1380 -3558 9.50814999627662e-05  
1381 -3560 8.82058228394490e-05  
1382 -3562 8.18208514354733e-05  
1383 -3564 7.68850700845907e-05  
1384 -3566 7.38744666163043e-05  
1385 -3568 7.27642291486909e-05  
1386 -3570 7.33994731408140e-05  
1387 -3572 7.56627166220080e-05  
1388 -3574 7.96660140607364e-05  
1389 -3576 8.51090055206606e-05  
1390 -3578 9.29167699145132e-05  
1391 -3580 0.000102526366929820  
1392 -3582 0.000114877275226176  
1393 -3584 0.000126190559302250  
1394 -3586 0.000124628073841470  
1395 -3588 0.000119415520864134  
1396 -3590 0.000112006712936662  
1397 -3592 0.000105579072932928  
1398 -3594 0.000100691596209911  
1399 -3596 9.80454508807073e-05  
1400 -3598 9.79289585249404e-05  
1401 -3600 9.76517090509766e-05  
1402 -3602 9.63252158538093e-05  
1403 -3604 9.47873503300014e-05  
1404 -3606 9.40807594813255e-05  
1405 -3608 9.38724750866359e-05  
1406 -3610 9.46504942395723e-05  
1407 -3612 9.80150733458878e-05  
1408 -3614 0.000104630751802908  
1409 -3616 0.000115783489148453  
1410 -3618 0.000130667214647273  
1411 -3620 0.000146477404898454  
1412 -3622 0.000158530547818508  
1413 -3624 0.000162318596543099  
1414 -3626 0.000158125871191841  
1415 -3628 0.000150672245587412  
1416 -3630 0.000144549679683140  
1417 -3632 0.000142051097385185  
1418 -3634 0.000145529942933542  
1419 -3636 0.000153343488815115  
1420 -3638 0.000167576397035396  
1421 -3640 0.000187305749491179  
1422 -3642 0.000211282337261951  
1423 -3644 0.000235521019158824  
1424 -3646 0.000255526042383438  
1425 -3648 0.000267309387292886  
1426 -3650 0.000267620489558132  
1427 -3652 0.000257281965913234  
1428 -3654 0.000238427431722088  
1429 -3656 0.000215910141107563  
1430 -3658 0.000194198641163347  
1431 -3660 0.000175915805990763  
1432 -3662 0.000162335012119966  
1433 -3664 0.000152841199834750  
1434 -3666 0.000146981907091703  
1435 -3668 0.000143997827610619  
1436 -3670 0.000143648436802218  
1437 -3672 0.000144734329787788  
1438 -3674 0.000145900823579283  
1439 -3676 0.000145536357339105  
1440 -3678 0.000142791335633658  
1441 -3680 0.000138712508096908  
1442 -3682 0.000133854756804407  
1443 -3684 0.000128953007630511  
1444 -3686 0.000123724720918296  
1445 -3688 0.000118053544364748  
1446 -3690 0.000112538647366327  
1447 -3692 0.000108762709162428  
1448 -3694 0.000106869096858975  
1449 -3696 0.000106178550226360  
1450 -3698 0.000108026299705946  
1451 -3700 0.000113499289845608  
1452 -3702 0.000122346067036449  
1453 -3704 0.000132017367154307  
1454 -3706 0.000138204981263169  
1455 -3708 0.000137812952692201  
1456 -3710 0.000131957371338105  
1457 -3712 0.000124911657013813  
1458 -3714 0.000120086480186131  
1459 -3716 0.000119368867384451  
1460 -3718 0.000123023160227338  
1461 -3720 0.000129681526292498  
1462 -3722 0.000136685573712829  
1463 -3724 0.000140355687154432  
1464 -3726 0.000137643004943763  
1465 -3728 0.000130059156127694  
1466 -3730 0.000121898190215580  
1467 -3732 0.000115279209639364  
1468 -3734 0.000109785664308487  
1469 -3736 0.000105299764060944  
1470 -3738 0.000101063203615323  
1471 -3740 9.68651180755000e-05  
1472 -3742 9.31808749176699e-05  
1473 -3744 9.10149507453584e-05  
1474 -3746 8.98056206735940e-05  
1475 -3748 8.93161375554986e-05  
1476 -3750 8.95680290795053e-05  
1477 -3752 9.07085327291721e-05  
1478 -3754 9.23144122730348e-05  
1479 -3756 9.51698234276085e-05  
1480 -3758 9.88200437936328e-05  
1481 -3760 0.000102897737658181  
1482 -3762 0.000106541912714358  
1483 -3764 0.000108638955977754  
1484 -3766 0.000107125969211894  
1485 -3768 0.000104745321090008  
1486 -3770 0.000104907149891996  
1487 -3772 0.000107524035997495  
1488 -3774 0.000112565658169961  
1489 -3776 0.000120128967951347  
1490 -3778 0.000130377699611365  
1491 -3780 0.000143388258757916  
1492 -3782 0.000157827987118552  
1493 -3784 0.000171336843948261  
1494 -3786 0.000178285748324712  
1495 -3788 0.000174781489954516  
1496 -3790 0.000164121439128089  
1497 -3792 0.000152610210570708  
1498 -3794 0.000144162759638053  
1499 -3796 0.000139239462639203  
1500 -3798 0.000137792736182703  
1501 -3800 0.000140104567703810  
1502 -3802 0.000145422058851258  
1503 -3804 0.000152835113748305  
1504 -3806 0.000161127793420174  
1505 -3808 0.000168581867788859  
1506 -3810 0.000173330279437380  
1507 -3812 0.000175195783104517  
1508 -3814 0.000174404180004515  
1509 -3816 0.000172977411115116  
1510 -3818 0.000172632535041757  
1511 -3820 0.000174761333878933  
1512 -3822 0.000179015946250825  
1513 -3824 0.000183474569007118  
1514 -3826 0.000187609784690581  
1515 -3828 0.000192418303544244  
1516 -3830 0.000199638672160316  
1517 -3832 0.000209346193913544  
1518 -3834 0.000221078085152779  
1519 -3836 0.000233276912915708  
1520 -3838 0.000243302212259793  
1521 -3840 0.000248219562860653  
1522 -3842 0.000249318750764567  
1523 -3844 0.000250161224209589  
1524 -3846 0.000251130509086889  
1525 -3848 0.000250954031996911  
1526 -3850 0.000247448125111366  
1527 -3852 0.000239298068537633  
1528 -3854 0.000227630000846504  
1529 -3856 0.000215807191993378  
1530 -3858 0.000207046517196079  
1531 -3860 0.000202157638401237  
1532 -3862 0.000202101096220524  
1533 -3864 0.000206089427126992  
1534 -3866 0.000212972794266054  
1535 -3868 0.000220069608188463  
1536 -3870 0.000223160954785535  
1537 -3872 0.000217701230702324  
1538 -3874 0.000205680240569784  
1539 -3876 0.000194071196201460  
1540 -3878 0.000186624022776833  
1541 -3880 0.000183260750499541  
1542 -3882 0.000183370917787493  
1543 -3884 0.000186002682616268  
1544 -3886 0.000190704000843751  
1545 -3888 0.000195753159488382  
1546 -3890 0.000199899173040718  
1547 -3892 0.000202664798143917  
1548 -3894 0.000204320562044854  
1549 -3896 0.000204971280265517  
1550 -3898 0.000204184602522533  
1551 -3900 0.000202879694728580  
1552 -3902 0.000202091110448804  
1553 -3904 0.000203200507821011  
1554 -3906 0.000206777694070363  
1555 -3908 0.000212730193424292  
1556 -3910 0.000215758904170297  
1557 -3912 0.000211571330269805  
1558 -3914 0.000205958146733392  
1559 -3916 0.000202885902366098  
1560 -3918 0.000203859899346076  
1561 -3920 0.000208043821414469  
1562 -3922 0.000213749060271441  
1563 -3924 0.000216258022232613  
1564 -3926 0.000210993095532934  
1565 -3928 0.000200360509814737  
1566 -3930 0.000190403984953153  
1567 -3932 0.000185294952858894  
1568 -3934 0.000184723195717293  
1569 -3936 0.000186124269760876  
1570 -3938 0.000187274520079713  
1571 -3940 0.000189148765118607  
1572 -3942 0.000191266181204903  
1573 -3944 0.000194823747520104  
1574 -3946 0.000199962536960736  
1575 -3948 0.000206117700447747  
1576 -3950 0.000211964821297933  
1577 -3952 0.000211771907916455  
1578 -3954 0.000207210064931517  
1579 -3956 0.000200358454677226  
1580 -3958 0.000194986979879340  
1581 -3960 0.000191410166101308  
1582 -3962 0.000188811490516811  
1583 -3964 0.000186954388139908  
1584 -3966 0.000184972375095875  
1585 -3968 0.000183218705269115  
1586 -3970 0.000181796902747989  
1587 -3972 0.000181759132648531  
1588 -3974 0.000184824282283672  
1589 -3976 0.000192623374739583  
1590 -3978 0.000205576802325497  
1591 -3980 0.000216734030830589  
1592 -3982 0.000209196916619900  
1593 -3984 0.000193026471982283  
1594 -3986 0.000183362654697217  
1595 -3988 0.000180228706844783  
1596 -3990 0.000181565573496817  
1597 -3992 0.000186254988451223  
1598 -3994 0.000193691373041908  
1599 -3996 0.000204148918879724  
1600 -3998 0.000217163156382698 1 +800 0.00237097091817457
  2 +802 0.00227949941219620
  3 +804 0.00221816388191892
  4 +806 0.00217471041775780
  5 +808 0.00215481795727275
  6 +810 0.00213388387011066
  7 +812 0.00209363211698535
  8 +814 0.00202082763908315
  9 +816 0.00193585066178408
  10 +818 0.00188250850160370
  11 +820 0.00184538369212481
  12 +822 0.00183536653704965
  13 +824 0.00185974183080381
  14 +826 0.00190647188683237
  15 +828 0.00199326404385590
  16 +830 0.00213499888469032
  17 +832 0.00233225842027966
  18 +834 0.00257593995310952
  19 +836 0.00287502014227382
  20 +838 0.00318754088914534
  21 +840 0.00349170996961850
  22 +842 0.00366108155160527
  23 +844 0.00362683356184450
  24 +846 0.00340059748640139
  25 +848 0.00305608088262669
  26 +850 0.00270129337895778
  27 +852 0.00239675724637807
  28 +854 0.00217864428240924
  29 +856 0.00203021645685105
  30 +858 0.00193686140678899
  31 +860 0.00187749764181973
  32 +862 0.00185772044069943
  33 +864 0.00188910883086452
  34 +866 0.00195093483930895
  35 +868 0.00204692017755064
  36 +870 0.00215522059478817
  37 +872 0.00226016367314688
  38 +874 0.00224604514385606
  39 +876 0.00210230179408609
  40 +878 0.00199743674523776
  41 +880 0.00199218269491360
  42 +882 0.00208480862951801
  43 +884 0.00228270137034088
  44 +886 0.00262030644370857
  45 +888 0.00319352984551477
  46 +890 0.00421972378192706
  47 +892 0.00602385856914103
  48 +894 0.00840405009274333
  49 +896 0.00900675480510885
  50 +898 0.00696613165618276
  51 +900 0.00499554830114596
  52 +902 0.00383849939561442
  53 +904 0.00320523678732641
  54 +906 0.00285555041538049
  55 +908 0.00266476454212409
  56 +910 0.00254627716354120
  57 +912 0.00245341529587653
  58 +914 0.00236459307673934
  59 +916 0.00229282344387905
  60 +918 0.00223035979386559
  61 +920 0.00221227947671869
  62 +922 0.00224238729804433
  63 +924 0.00235007654381494
  64 +926 0.00256726325953723
  65 +928 0.00284644035247116
  66 +930 0.00294228033320561
  67 +932 0.00275916688965430
  68 +934 0.00258731026217053
  69 +936 0.00255719587176405
  70 +938 0.00262153336828821
  71 +940 0.00273896371051358
  72 +942 0.00287538936255749
  73 +944 0.00299732885131251
  74 +946 0.00309698674175826
  75 +948 0.00316605202547143
  76 +950 0.00320470876397792
  77 +952 0.00323491311445059
  78 +954 0.00329692599734166
  79 +956 0.00338582912769461
  80 +958 0.00350331602393855
  81 +960 0.00365994789379712
  82 +962 0.00382797968742639
  83 +964 0.00395048819829240
  84 +966 0.00399909330987952
  85 +968 0.00397747867047571
  86 +970 0.00393338530466517
  87 +972 0.00391527408455760
  88 +974 0.00393711464406835
  89 +976 0.00402058186620085
  90 +978 0.00414801626311813
  91 +980 0.00426028437517640
  92 +982 0.00424343298749414
  93 +984 0.00411994903649494
  94 +986 0.00399867235513141
  95 +988 0.00388651104937391
  96 +990 0.00379950457370988
  97 +992 0.00373977952014182
  98 +994 0.00373881240280082
  99 +996 0.00379956481032446
  100 +998 0.00393643103780800
  101 +1000 0.00418426742600855
  102 +1002 0.00448366832068703
  103 +1004 0.00421395149528264
  104 +1006 0.00400806256602511
  105 +1008 0.00395963930728052
  106 +1010 0.00399586579501438
  107 +1012 0.00412453345420230
  108 +1014 0.00435650139468447
  109 +1016 0.00470823294497344
  110 +1018 0.00525652222711324
  111 +1020 0.00620034607293144
  112 +1022 0.00761074657742514
  113 +1024 0.00904862587038915
  114 +1026 0.0128420613454482
  115 +1028 0.0232054647758307
  116 +1030 0.0401070318402723
  117 +1032 0.0237662509507289
  118 +1034 0.0150900768702586
  119 +1036 0.0136209302389719
  120 +1038 0.0140722804433677
  121 +1040 0.0148520038780156
  122 +1042 0.0150418759020717
  123 +1044 0.0142741299011939
  124 +1046 0.0127983598294137
  125 +1048 0.0111020250322553
  126 +1050 0.00953886802849649
  127 +1052 0.00823573530792714
  128 +1054 0.00722015941851439
  129 +1056 0.00647199198407014
  130 +1058 0.00595450625097980
  131 +1060 0.00562081994003704
  132 +1062 0.00547155564647798
  133 +1064 0.00551163119086301
  134 +1066 0.00577378575211103
  135 +1068 0.00633217061275026
  136 +1070 0.00731526451760166
  137 +1072 0.00888941764012196
  138 +1074 0.0111936669094970
  139 +1076 0.0145627178352916
  140 +1078 0.0198820542781815
  141 +1080 0.0272101442099741
  142 +1082 0.0294763996691438
  143 +1084 0.0207090896497001
  144 +1086 0.0127655286195192
  145 +1088 0.00854004269533275
  146 +1090 0.00635526613490286
  147 +1092 0.00518140755178082
  148 +1094 0.00455405026737381
  149 +1096 0.00426268956025233
  150 +1098 0.00423510235887238
  151 +1100 0.00446505970250814
  152 +1102 0.00496653746864136
  153 +1104 0.00580707926483870
  154 +1106 0.00666740083564581
  155 +1108 0.00624732665593806
  156 +1110 0.00479908163793379
  157 +1112 0.00361121925654796
  158 +1114 0.00287942570706319
  159 +1116 0.00246148742161380
  160 +1118 0.00222778888171568
  161 +1120 0.00209650525411750
  162 +1122 0.00202121838132918
  163 +1124 0.00199323955812561
  164 +1126 0.00200797851417853
  165 +1128 0.00204812470413808
  166 +1130 0.00209417368698948
  167 +1132 0.00209849682757402
  168 +1134 0.00210954008712956
  169 +1136 0.00214927272221614
  170 +1138 0.00221781253558492
  171 +1140 0.00231654284254776
  172 +1142 0.00241700276584513
  173 +1144 0.00252090482583751
  174 +1146 0.00265926205183231
  175 +1148 0.00286652526484237
  176 +1150 0.00313647720191737
  177 +1152 0.00347416081610501
  178 +1154 0.00387661923259805
  179 +1156 0.00410043342018308
  180 +1158 0.00394886198110498
  181 +1160 0.00373148843650175
  182 +1162 0.00350494607394550
  183 +1164 0.00334022215869222
  184 +1166 0.00324053812759405
  185 +1168 0.00323728249115084
  186 +1170 0.00337030363472976
  187 +1172 0.00370331752537631
  188 +1174 0.00446861428672600
  189 +1176 0.00627098368325835
  190 +1178 0.00931078620410600
  191 +1180 0.00795027706068620
  192 +1182 0.00505648215885331
  193 +1184 0.00377716421438011
  194 +1186 0.00319136495849046
  195 +1188 0.00290137589052677
  196 +1190 0.00275791558623964
  197 +1192 0.00269226681474014
  198 +1194 0.00266088014296474
  199 +1196 0.00258817828799466
  200 +1198 0.00241700923017517
  201 +1200 0.00221558969693162
  202 +1202 0.00211217407863773
  203 +1204 0.00220182940076526
  204 +1206 0.00261294695511882
  205 +1208 0.00347974535374746
  206 +1210 0.00437930056728570
  207 +1212 0.00342648851242818
  208 +1214 0.00227260060290268
  209 +1216 0.00178258728885112
  210 +1218 0.00154392622881232
  211 +1220 0.00139698451678244
  212 +1222 0.00129280677379398
  213 +1224 0.00121946854787068
  214 +1226 0.00117184455170345
  215 +1228 0.00113722984861070
  216 +1230 0.00111912311009601
  217 +1232 0.00111390956612134
  218 +1234 0.00112443805885795
  219 +1236 0.00115660063219376
  220 +1238 0.00121045559427169
  221 +1240 0.00129274578774778
  222 +1242 0.00140396276384137
  223 +1244 0.00154410614148823
  224 +1246 0.00169860381220359
  225 +1248 0.00180840115780576
  226 +1250 0.00177688982988028
  227 +1252 0.00157601125295148
  228 +1254 0.00138106340282942
  229 +1256 0.00125620905206826
  230 +1258 0.00118717226425611
  231 +1260 0.00114496451549449
  232 +1262 0.00111429933337465
  233 +1264 0.00109740533980092
  234 +1266 0.00108967549075875
  235 +1268 0.00109315730663637
  236 +1270 0.00110701272913057
  237 +1272 0.00112547293050748
  238 +1274 0.00114417070376777
  239 +1276 0.00115549769406343
  240 +1278 0.00115861723477586
  241 +1280 0.00114576824540165
  242 +1282 0.00112307423917382
  243 +1284 0.00110803299150391
  244 +1286 0.00109790695605719
  245 +1288 0.00109710433202375
  246 +1290 0.00110698710171340
  247 +1292 0.00113245942678089
  248 +1294 0.00117552067320688
  249 +1296 0.00124267198974583
  250 +1298 0.00132277561158489
  251 +1300 0.00139217958266282
  252 +1302 0.00142973694885209
  253 +1304 0.00144188181676038
  254 +1306 0.00147541483276765
  255 +1308 0.00159956692209740
  256 +1310 0.00186843894759088
  257 +1312 0.00216486082449073
  258 +1314 0.00211728875491887
  259 +1316 0.00187507564071290
  260 +1318 0.00171677440706927
  261 +1320 0.00164837511625716
  262 +1322 0.00163899782669962
  263 +1324 0.00166410609076352
  264 +1326 0.00171764577889364
  265 +1328 0.00180479473401823
  266 +1330 0.00194274885535529
  267 +1332 0.00206022538770732
  268 +1334 0.00196217286057273
  269 +1336 0.00188492778401013
  270 +1338 0.00187122231048589
  271 +1340 0.00188921428962955
  272 +1342 0.00193700700412885
  273 +1344 0.00200313353323991
  274 +1346 0.00208778115174581
  275 +1348 0.00218066174704292
  276 +1350 0.00226588109762249
  277 +1352 0.00236276913468593
  278 +1354 0.00248915903884931
  279 +1356 0.00265547420500685
  280 +1358 0.00284820286383517
  281 +1360 0.00303211548157874
  282 +1362 0.00319538643027851
  283 +1364 0.00338011260813816
  284 +1366 0.00363996415682390
  285 +1368 0.00400265764738686
  286 +1370 0.00448976968523854
  287 +1372 0.00525773678870123
  288 +1374 0.00662029687278425
  289 +1376 0.00908376119233617
  290 +1378 0.0123031513241818
  291 +1380 0.0121671979448086
  292 +1382 0.00940007546463800
  293 +1384 0.00754318150864360
  294 +1386 0.00640356392721685
  295 +1388 0.00563257119321882
  296 +1390 0.00511010869784208
  297 +1392 0.00475789415695825
  298 +1394 0.00452833517370964
  299 +1396 0.00440186171426137
  300 +1398 0.00433687786700866
  301 +1400 0.00432317844214779
  302 +1402 0.00436175400856741
  303 +1404 0.00444654158141412
  304 +1406 0.00458045165701961
  305 +1408 0.00472070193080689
  306 +1410 0.00484730108752061
  307 +1412 0.00499169569971829
  308 +1414 0.00517526500052341
  309 +1416 0.00540856165680758
  310 +1418 0.00569301961826355
  311 +1420 0.00603609386579061
  312 +1422 0.00639815529754280
  313 +1424 0.00676704333943306
  314 +1426 0.00709702523848474
  315 +1428 0.00735286473751553
  316 +1430 0.00758946104003622
  317 +1432 0.00786781701959305
  318 +1434 0.00830202970708910
  319 +1436 0.00898232020613486
  320 +1438 0.0100197835148382
  321 +1440 0.0115095063570045
  322 +1442 0.0133985990853930
  323 +1444 0.0153768866835411
  324 +1446 0.0171765347348967
  325 +1448 0.0189361099169456
  326 +1450 0.0208245294344141
  327 +1452 0.0228039247538198
  328 +1454 0.0246810508004892
  329 +1456 0.0262618411626106
  330 +1458 0.0273608063623162
  331 +1460 0.0277930934742346
  332 +1462 0.0274706237226478
  333 +1464 0.0264211185824187
  334 +1466 0.0247980788620200
  335 +1468 0.0228296555480849
  336 +1470 0.0207834609064780
  337 +1472 0.0188724652439656
  338 +1474 0.0171801988754876
  339 +1476 0.0157920753997752
  340 +1478 0.0147283011159520
  341 +1480 0.0140030494767984
  342 +1482 0.0137569248084170
  343 +1484 0.0141879797029108
  344 +1486 0.0159226244331294
  345 +1488 0.0201940578220826
  346 +1490 0.0260836787125339
  347 +1492 0.0401202763896059
  348 +1494 0.0761786772950870
  349 +1496 0.108223079178941
  350 +1498 0.0527249260725011
  351 +1500 0.0271635520581988
  352 +1502 0.0173322191403291
  353 +1504 0.0124889207648925
  354 +1506 0.00992131298532918
  355 +1508 0.00839752655521901
  356 +1510 0.00745176347821015
  357 +1512 0.00688020881374870
  358 +1514 0.00648533490268327
  359 +1516 0.00628100243994201
  360 +1518 0.00629379543847072
  361 +1520 0.00670033315002658
  362 +1522 0.00786453088070098
  363 +1524 0.00861000109877936
  364 +1526 0.00697026673858113
  365 +1528 0.00565227380276001
  366 +1530 0.00510003019871344
  367 +1532 0.00487330093915990
  368 +1534 0.00477643425469498
  369 +1536 0.00467177280329912
  370 +1538 0.00449022432901730
  371 +1540 0.00423934685882746
  372 +1542 0.00393426018189818
  373 +1544 0.00365660104528498
  374 +1546 0.00348923385240243
  375 +1548 0.00342710802865492
  376 +1550 0.00346898664460405
  377 +1552 0.00338295466527580
  378 +1554 0.00321378452613121
  379 +1556 0.00313430635529189
  380 +1558 0.00316907431392649
  381 +1560 0.00330481737182376
  382 +1562 0.00356172011440931
  383 +1564 0.00388898354936485
  384 +1566 0.00429638887941885
  385 +1568 0.00472113284868973
  386 +1570 0.00504929184964361
  387 +1572 0.00519286093716334
  388 +1574 0.00509202242388202
  389 +1576 0.00481769783190026
  390 +1578 0.00455543799934706
  391 +1580 0.00435935962171553
  392 +1582 0.00433990247775519
  393 +1584 0.00460726311748136
  394 +1586 0.00492003737038605
  395 +1588 0.00490704034351103
  396 +1590 0.00492753522146188
  397 +1592 0.00518588888004375
  398 +1594 0.00592543183304241
  399 +1596 0.00720757954725413
  400 +1598 0.00912890526935344
  401 +1600 0.0130293680056744
  402 +1602 0.0206809953186127
  403 +1604 0.0299953585748135
  404 +1606 0.0248157340286292
  405 +1608 0.0127358449020555
  406 +1610 0.00746783575970784
  407 +1612 0.00537209761858949
  408 +1614 0.00445129559785390
  409 +1616 0.00405329276394375
  410 +1618 0.00399146289131384
  411 +1620 0.00409659649670941
  412 +1622 0.00425086095548363
  413 +1624 0.00425306230534309
  414 +1626 0.00388013491422351
  415 +1628 0.00322765310314340
  416 +1630 0.00259805094537761
  417 +1632 0.00208657181154715
  418 +1634 0.00169843933990688
  419 +1636 0.00141785441008406
  420 +1638 0.00123234974672297
  421 +1640 0.00109764310439106
  422 +1642 0.000997096490971439
  423 +1644 0.000923943814992787
  424 +1646 0.000867694719207358
  425 +1648 0.000857989573211860
  426 +1650 0.000876925837508371
  427 +1652 0.000900483600662835
  428 +1654 0.000924599031590994
  429 +1656 0.000943402878947833
  430 +1658 0.000957189946759812
  431 +1660 0.000919301596934912
  432 +1662 0.000829980699381760
  433 +1664 0.000741920416434289
  434 +1666 0.000684454640853614
  435 +1668 0.000660487010052916
  436 +1670 0.000677329699540855
  437 +1672 0.000733663772686657
  438 +1674 0.000829672252398670
  439 +1676 0.000923202402787059
  440 +1678 0.000900896424649981
  441 +1680 0.000787132461270056
  442 +1682 0.000676995955481515
  443 +1684 0.000611701232515841
  444 +1686 0.000595044263899243
  445 +1688 0.000601913444772076
  446 +1690 0.000631185451917075
  447 +1692 0.000675093910401457
  448 +1694 0.000731422393886708
  449 +1696 0.000808376337564176
  450 +1698 0.000794279618925047
  451 +1700 0.000709354504802398
  452 +1702 0.000657251178127169
  453 +1704 0.000631084077034609
  454 +1706 0.000620630016846374
  455 +1708 0.000614804872029308
  456 +1710 0.000610379344278778
  457 +1712 0.000608365704329393
  458 +1714 0.000610177708447017
  459 +1716 0.000628060629349526
  460 +1718 0.000671390695691186
  461 +1720 0.000748670745348075
  462 +1722 0.000874314265691752
  463 +1724 0.00104123844277088
  464 +1726 0.00123749183518020
  465 +1728 0.00147184752955714
  466 +1730 0.00173223404858593
  467 +1732 0.00197582318555127
  468 +1734 0.00215543372945357
  469 +1736 0.00220452603076912
  470 +1738 0.00209119301342784
  471 +1740 0.00185700091397871
  472 +1742 0.00156445999707629
  473 +1744 0.00127824303920924
  474 +1746 0.00103830550711541
  475 +1748 0.000858082809524967
  476 +1750 0.000736720622233361
  477 +1752 0.000665836151632355
  478 +1754 0.000633014507978860
  479 +1756 0.000636204186868655
  480 +1758 0.000664560791933513
  481 +1760 0.000700854142871225
  482 +1762 0.000738249770728404
  483 +1764 0.000779473476320026
  484 +1766 0.000831332837575542
  485 +1768 0.000887483745995595
  486 +1770 0.000943100942235622
  487 +1772 0.00100855983483948
  488 +1774 0.00108815587341361
  489 +1776 0.00117336763806935
  490 +1778 0.00122720647155439
  491 +1780 0.00120867298099444
  492 +1782 0.00117346527655232
  493 +1784 0.00119371865588136
  494 +1786 0.00128533671400934
  495 +1788 0.00142590894789679
  496 +1790 0.00158054902116715
  497 +1792 0.00179850758319075
  498 +1794 0.00213331852757031
  499 +1796 0.00258371206804431
  500 +1798 0.00310651819625664
  501 +1800 0.00358456135015573
  502 +1802 0.00384535056234718
  503 +1804 0.00377208677963125
  504 +1806 0.00340950704775298
  505 +1808 0.00292589878928829
  506 +1810 0.00246230467854199
  507 +1812 0.00209503276430901
  508 +1814 0.00185262669472132
  509 +1816 0.00171702079169156
  510 +1818 0.00163886439352206
  511 +1820 0.00157730777183400
  512 +1822 0.00149679229624579
  513 +1824 0.00138863730310920
  514 +1826 0.00127743508882463
  515 +1828 0.00118456389012839
  516 +1830 0.00112905353317808
  517 +1832 0.00108606377735617
  518 +1834 0.00103086061641581
  519 +1836 0.000984959950309749
  520 +1838 0.000979289058512249
  521 +1840 0.00102288594610930
  522 +1842 0.00112067935890798
  523 +1844 0.00128394592127716
  524 +1846 0.00152723861251123
  525 +1848 0.00188826636609761
  526 +1850 0.00239227576491655
  527 +1852 0.00300971905084921
  528 +1854 0.00364059420885185
  529 +1856 0.00414527688649222
  530 +1858 0.00428418417776257
  531 +1860 0.00397341781363892
  532 +1862 0.00343437915842565
  533 +1864 0.00294698351848267
  534 +1866 0.00265685216170442
  535 +1868 0.00257554798807387
  536 +1870 0.00262362192114651
  537 +1872 0.00267320615475132
  538 +1874 0.00259670566832300
  539 +1876 0.00235341832549094
  540 +1878 0.00201352392982882
  541 +1880 0.00167162491751218
  542 +1882 0.00138756730843950
  543 +1884 0.00117032979189392
  544 +1886 0.00101120581308014
  545 +1888 0.000892343360827370
  546 +1890 0.000799797724248844
  547 +1892 0.000722584304592367
  548 +1894 0.000668205830350704
  549 +1896 0.000645563701038960
  550 +1898 0.000645767881929762
  551 +1900 0.000633984361915526
  552 +1902 0.000588098076669510
  553 +1904 0.000535948959936282
  554 +1906 0.000500979831672727
  555 +1908 0.000480503614669823
  556 +1910 0.000475812984522745
  557 +1912 0.000486823903968232
  558 +1914 0.000515195500000000
  559 +1916 0.000562568109473544
  560 +1918 0.000630427523781356
  561 +1920 0.000723610116430462
  562 +1922 0.000847642176098185
  563 +1924 0.000992789644339751
  564 +1926 0.00114429259972093
  565 +1928 0.00131728542788928
  566 +1930 0.00155893716312052
  567 +1932 0.00190373075161683
  568 +1934 0.00237556565013185
  569 +1936 0.00298040121387223
  570 +1938 0.00364293200808332
  571 +1940 0.00416589638649938
  572 +1942 0.00433944387091247
  573 +1944 0.00420413532397440
  574 +1946 0.00380161374653215
  575 +1948 0.00327719918178656
  576 +1950 0.00282576366330091
  577 +1952 0.00253348765310892
  578 +1954 0.00239437526824859
  579 +1956 0.00234603768444204
  580 +1958 0.00232574864667046
  581 +1960 0.00220039532483667
  582 +1962 0.00199445232375287
  583 +1964 0.00170495488495039
  584 +1966 0.00137875775323702
  585 +1968 0.00109690552229723
  586 +1970 0.000878128994624433
  587 +1972 0.000721601368959039
  588 +1974 0.000617419916987627
  589 +1976 0.000562113218832075
  590 +1978 0.000551026292591773
  591 +1980 0.000575711660935202
  592 +1982 0.000615370850112472
  593 +1984 0.000626638864213787
  594 +1986 0.000619344762051612
  595 +1988 0.000644972987040071
  596 +1990 0.000691941782910493
  597 +1992 0.000694254646432683
  598 +1994 0.000622443290799324
  599 +1996 0.000495200120138662
  600 +1998 0.000402620427801543
  601 +2000 0.000357520428000267
  602 +2002 0.000340715817783006
  603 +2004 0.000340725563484929
  604 +2006 0.000349587604938024
  605 +2008 0.000357889528657337
  606 +2010 0.000352782837535485
  607 +2012 0.000327904929253038
  608 +2014 0.000298699882098499
  609 +2016 0.000271842376811093
  610 +2018 0.000242333037716520
  611 +2020 0.000218337240170542
  612 +2022 0.000199194821720737
  613 +2024 0.000183911806628813
  614 +2026 0.000171888258235563
  615 +2028 0.000164785282634461
  616 +2030 0.000164391739593814
  617 +2032 0.000169011600820695
  618 +2034 0.000154127618321273
  619 +2036 0.000133850562902313
  620 +2038 0.000121768011512588
  621 +2040 0.000114542173977814
  622 +2042 0.000109960714942027
  623 +2044 0.000107324747708015
  624 +2046 0.000105319938271901
  625 +2048 0.000104400109927128
  626 +2050 0.000104560803595480
  627 +2052 0.000105682984195988
  628 +2054 0.000107138188290709
  629 +2056 0.000109850938702712
  630 +2058 0.000113964387835913
  631 +2060 0.000119159665067584
  632 +2062 0.000125394011284327
  633 +2064 0.000135383120416356
  634 +2066 0.000150829077064515
  635 +2068 0.000163896208951784
  636 +2070 0.000158538657020860
  637 +2072 0.000143857048326539
  638 +2074 0.000133838990991728
  639 +2076 0.000126082674541763
  640 +2078 0.000119111322229434
  641 +2080 0.000113978504701401
  642 +2082 0.000110907574969952
  643 +2084 0.000108574694668308
  644 +2086 0.000105750311657561
  645 +2088 0.000102757884920459
  646 +2090 0.000100315348970678
  647 +2092 9.88998809699028e-05
  648 +2094 9.84636051990861e-05
  649 +2096 9.86736776470892e-05
  650 +2098 9.86832304001427e-05
  651 +2100 9.94847029581411e-05
  652 +2102 0.000102501492433386
  653 +2104 0.000108578252528750
  654 +2106 0.000117598982731806
  655 +2108 0.000128810423312497
  656 +2110 0.000138078130156183
  657 +2112 0.000139894738408702
  658 +2114 0.000140372347283306
  659 +2116 0.000147183990385426
  660 +2118 0.000142580842940779
  661 +2120 0.000126124302551768
  662 +2122 0.000119111147897455
  663 +2124 0.000117761941379516
  664 +2126 0.000110386213471180
  665 +2128 0.000100586367430428
  666 +2130 9.65127771567695e-05
  667 +2132 9.71593180254151e-05
  668 +2134 0.000100588542105452
  669 +2136 0.000104481772978239
  670 +2138 0.000107041125533866
  671 +2140 0.000108872498221666
  672 +2142 0.000111489568147590
  673 +2144 0.000115451529322482
  674 +2146 0.000120558240114413
  675 +2148 0.000126537781071288
  676 +2150 0.000134733619506300
  677 +2152 0.000148643632029954
  678 +2154 0.000172040859828778
  679 +2156 0.000210048660817435
  680 +2158 0.000268125741557685
  681 +2160 0.000351069215958102
  682 +2162 0.000450344598032358
  683 +2164 0.000489938528699291
  684 +2166 0.000409492796412179
  685 +2168 0.000304387639702614
  686 +2170 0.000235891130206754
  687 +2172 0.000200519075056806
  688 +2174 0.000185710828669175
  689 +2176 0.000182424899321747
  690 +2178 0.000187448554282292
  691 +2180 0.000203021437757415
  692 +2182 0.000231533383222207
  693 +2184 0.000266979354976650
  694 +2186 0.000274670338797065
  695 +2188 0.000249531305296574
  696 +2190 0.000224075465024111
  697 +2192 0.000200276630934979
  698 +2194 0.000177273244376758
  699 +2196 0.000160285923199765
  700 +2198 0.000150581068702164
  701 +2200 0.000148630566016007
  702 +2202 0.000159418644068291
  703 +2204 0.000190928483551684
  704 +2206 0.000246685640401459
  705 +2208 0.000270254541506430
  706 +2210 0.000222823187679136
  707 +2212 0.000183299674920404
  708 +2214 0.000159208446689860
  709 +2216 0.000141367831176120
  710 +2218 0.000133886240444937
  711 +2220 0.000133377867922854
  712 +2222 0.000136687110101880
  713 +2224 0.000141595068371183
  714 +2226 0.000145519316291541
  715 +2228 0.000148458736825531
  716 +2230 0.000153316938474443
  717 +2232 0.000163253960273079
  718 +2234 0.000178923069609914
  719 +2236 0.000194257120755014
  720 +2238 0.000196450490452201
  721 +2240 0.000188281502894665
  722 +2242 0.000182547056123856
  723 +2244 0.000184193400303698
  724 +2246 0.000192794200162931
  725 +2248 0.000207468879582850
  726 +2250 0.000228635659533982
  727 +2252 0.000256821954754517
  728 +2254 0.000293238050530334
  729 +2256 0.000339843587945316
  730 +2258 0.000394697192716897
  731 +2260 0.000433841600455809
  732 +2262 0.000418808222045475
  733 +2264 0.000365652480977041
  734 +2266 0.000317992842743265
  735 +2268 0.000289251978678528
  736 +2270 0.000276323460348606
  737 +2272 0.000276007776761593
  738 +2274 0.000285194711508216
  739 +2276 0.000305840459677383
  740 +2278 0.000341614672459952
  741 +2280 0.000378323694871339
  742 +2282 0.000375183465200990
  743 +2284 0.000372499291886178
  744 +2286 0.000379130457959152
  745 +2288 0.000369071052928138
  746 +2290 0.000344203099796142
  747 +2292 0.000313724278864159
  748 +2294 0.000283180068926335
  749 +2296 0.000260398235921227
  750 +2298 0.000248364444837745
  751 +2300 0.000246962256014277
  752 +2302 0.000257337196851115
  753 +2304 0.000282117167464228
  754 +2306 0.000327011660272884
  755 +2308 0.000402901410624785
  756 +2310 0.000515678907419335
  757 +2312 0.000613221545587734
  758 +2314 0.000587317319167494
  759 +2316 0.000479703817387008
  760 +2318 0.000387543339108333
  761 +2320 0.000331935579008350
  762 +2322 0.000305882244139694
  763 +2324 0.000301743073919341
  764 +2326 0.000318021837096887
  765 +2328 0.000360763254301904
  766 +2330 0.000442864766710211
  767 +2332 0.000580146273004247
  768 +2334 0.000746878008138738
  769 +2336 0.000778905767997363
  770 +2338 0.000655878707879373
  771 +2340 0.000549860316308082
  772 +2342 0.000474310426764780
  773 +2344 0.000414796574428013
  774 +2346 0.000384139069758195
  775 +2348 0.000382158356339707
  776 +2350 0.000402158338733409
  777 +2352 0.000435516153586227
  778 +2354 0.000472182760873504
  779 +2356 0.000515961034751272
  780 +2358 0.000592576004516974
  781 +2360 0.000693206523120231
  782 +2362 0.000643638218785556
  783 +2364 0.000478341631402279
  784 +2366 0.000369914098808752
  785 +2368 0.000314093467617302
  786 +2370 0.000287309303030045
  787 +2372 0.000274524402561852
  788 +2374 0.000270061869985669
  789 +2376 0.000271829601590763
  790 +2378 0.000279194809335497
  791 +2380 0.000294905061876556
  792 +2382 0.000319347534507768
  793 +2384 0.000350241467027989
  794 +2386 0.000391786089197638
  795 +2388 0.000432288381112108
  796 +2390 0.000431894838874137
  797 +2392 0.000400306861211915
  798 +2394 0.000373780803138032
  799 +2396 0.000355410966982535
  800 +2398 0.000347151739593354
  801 +2400 0.000350924151462325
  802 +2402 0.000365706536144189
  803 +2404 0.000389705426960732
  804 +2406 0.000421334803876133
  805 +2408 0.000459934423654906
  806 +2410 0.000500616815279102
  807 +2412 0.000525702627325844
  808 +2414 0.000513223543953278
  809 +2416 0.000478247500654749
  810 +2418 0.000439595749420076
  811 +2420 0.000399407179067621
  812 +2422 0.000365631853681067
  813 +2424 0.000342099304419797
  814 +2426 0.000327643185447820
  815 +2428 0.000319852482413628
  816 +2430 0.000318090248146717
  817 +2432 0.000318226888962093
  818 +2434 0.000307017564256603
  819 +2436 0.000284561022911212
  820 +2438 0.000265983112770141
  821 +2440 0.000252937611403322
  822 +2442 0.000242679401171322
  823 +2444 0.000236093051616947
  824 +2446 0.000233130690914760
  825 +2448 0.000233167378896135
  826 +2450 0.000235415965609999
  827 +2452 0.000239364304311204
  828 +2454 0.000244209499641596
  829 +2456 0.000248579466181052
  830 +2458 0.000251144773278908
  831 +2460 0.000252431049719579
  832 +2462 0.000253691712617762
  833 +2464 0.000255788005476147
  834 +2466 0.000256434321853842
  835 +2468 0.000251072591655402
  836 +2470 0.000241597521259849
  837 +2472 0.000234162117014666
  838 +2474 0.000229676856991507
  839 +2476 0.000227592143774873
  840 +2478 0.000226834091088810
  841 +2480 0.000227168703547583
  842 +2482 0.000228588584217583
  843 +2484 0.000231746296813716
  844 +2486 0.000236823965966075
  845 +2488 0.000241600139160114
  846 +2490 0.000244394482975018
  847 +2492 0.000244248137929474
  848 +2494 0.000245127828260994
  849 +2496 0.000251434891521320
  850 +2498 0.000247993851620619
  851 +2500 0.000232735996433491
  852 +2502 0.000222497793867323
  853 +2504 0.000221589422451279
  854 +2506 0.000232579945681551
  855 +2508 0.000250427153657126
  856 +2510 0.000252498000507853
  857 +2512 0.000232189718802120
  858 +2514 0.000211050185590214
  859 +2516 0.000198391157226399
  860 +2518 0.000193635707688150
  861 +2520 0.000193341820452081
  862 +2522 0.000193371593068733
  863 +2524 0.000189643081211288
  864 +2526 0.000181794690676754
  865 +2528 0.000178838464388285
  866 +2530 0.000183501803348288
  867 +2532 0.000194837096053966
  868 +2534 0.000211327514566071
  869 +2536 0.000231393834808824
  870 +2538 0.000255837394665623
  871 +2540 0.000275709996672117
  872 +2542 0.000266055047783776
  873 +2544 0.000243859757637041
  874 +2546 0.000235285437161138
  875 +2548 0.000236304976186297
  876 +2550 0.000232544359689715
  877 +2552 0.000218806075082454
  878 +2554 0.000204743746363893
  879 +2556 0.000196655427865349
  880 +2558 0.000191976123078746
  881 +2560 0.000186392842736032
  882 +2562 0.000182465243677096
  883 +2564 0.000182341770175991
  884 +2566 0.000186622668096877
  885 +2568 0.000194771585308041
  886 +2570 0.000207509200230819
  887 +2572 0.000227536779149540
  888 +2574 0.000256126025913237
  889 +2576 0.000293783533966409
  890 +2578 0.000344606705405512
  891 +2580 0.000421000900491490
  892 +2582 0.000539940417278290
  893 +2584 0.000691325137774485
  894 +2586 0.000768064347900480
  895 +2588 0.000684349300000000
  896 +2590 0.000536495643153772
  897 +2592 0.000418107936641488
  898 +2594 0.000348162932430616
  899 +2596 0.000316562063243598
  900 +2598 0.000311605992448936
  901 +2600 0.000329718943031756
  902 +2602 0.000370011429187919
  903 +2604 0.000412184734144213
  904 +2606 0.000402481978671523
  905 +2608 0.000368470211663778
  906 +2610 0.000353398410510846
  907 +2612 0.000328281593188018
  908 +2614 0.000295400882956194
  909 +2616 0.000275902521470556
  910 +2618 0.000268299167514448
  911 +2620 0.000267511791747167
  912 +2622 0.000270974116559811
  913 +2624 0.000277238419508473
  914 +2626 0.000286763887252883
  915 +2628 0.000300107477286003
  916 +2630 0.000316524811935304
  917 +2632 0.000327263381122722
  918 +2634 0.000305877054698251
  919 +2636 0.000269148133708810
  920 +2638 0.000248172907618610
  921 +2640 0.000239823700606054
  922 +2642 0.000238746030638882
  923 +2644 0.000239868631298371
  924 +2646 0.000237697572301885
  925 +2648 0.000231658620506580
  926 +2650 0.000224559727594560
  927 +2652 0.000220154792342943
  928 +2654 0.000220025182909045
  929 +2656 0.000220821585838385
  930 +2658 0.000219097069889182
  931 +2660 0.000213668868513552
  932 +2662 0.000206551642880241
  933 +2664 0.000200132874030954
  934 +2666 0.000198263371264169
  935 +2668 0.000204157476079366
  936 +2670 0.000219581959345431
  937 +2672 0.000228529275997830
  938 +2674 0.000212671171569940
  939 +2676 0.000198554340066309
  940 +2678 0.000193733620852842
  941 +2680 0.000194427317307389
  942 +2682 0.000197546011671515
  943 +2684 0.000200581527813713
  944 +2686 0.000203985348880727
  945 +2688 0.000208935024070450
  946 +2690 0.000213885837983080
  947 +2692 0.000215780646355564
  948 +2694 0.000215167439140776
  949 +2696 0.000214895725221701
  950 +2698 0.000217360387387823
  951 +2700 0.000222623944199778
  952 +2702 0.000229950531867105
  953 +2704 0.000237779651458241
  954 +2706 0.000247270953949545
  955 +2708 0.000260083526905394
  956 +2710 0.000275286056335416
  957 +2712 0.000293138008774478
  958 +2714 0.000315098638979930
  959 +2716 0.000342140022611386
  960 +2718 0.000376355762584957
  961 +2720 0.000422618703820090
  962 +2722 0.000488803228667163
  963 +2724 0.000585387059813060
  964 +2726 0.000728318801443707
  965 +2728 0.000938827018235910
  966 +2730 0.00123037571269695
  967 +2732 0.00155229568740433
  968 +2734 0.00172266995984292
  969 +2736 0.00158429227183195
  970 +2738 0.00126235409603059
  971 +2740 0.000954219558161654
  972 +2742 0.000733284051680574
  973 +2744 0.000590574186925838
  974 +2746 0.000500913503228797
  975 +2748 0.000444283569806984
  976 +2750 0.000408552058896459
  977 +2752 0.000386442879562956
  978 +2754 0.000373264157615818
  979 +2756 0.000366670327661857
  980 +2758 0.000363876514149830
  981 +2760 0.000361532536949891
  982 +2762 0.000363675314741141
  983 +2764 0.000366718711717702
  984 +2766 0.000373487709343178
  985 +2768 0.000385907143020104
  986 +2770 0.000398462101615587
  987 +2772 0.000413801469177668
  988 +2774 0.000425659990486031
  989 +2776 0.000436402382617843
  990 +2778 0.000446662734946199
  991 +2780 0.000455121187378285
  992 +2782 0.000464083631949392
  993 +2784 0.000471837814603525
  994 +2786 0.000485996560282024
  995 +2788 0.000502172804216709
  996 +2790 0.000522830212064553
  997 +2792 0.000548289451554969
  998 +2794 0.000579634288120943
  999 +2796 0.000611379237870225
  1000 +2798 0.000641158616950349
  1001 +2800 0.000672247209660977
  1002 +2802 0.000711615716417748
  1003 +2804 0.000756204442404881
  1004 +2806 0.000806513382136127
  1005 +2808 0.000854383801707436
  1006 +2810 0.000899046135928726
  1007 +2812 0.000920533253907859
  1008 +2814 0.000922946174823163
  1009 +2816 0.000938823165339874
  1010 +2818 0.000975854382639431
  1011 +2820 0.00103794809306155
  1012 +2822 0.00111441105526966
  1013 +2824 0.00117124310275486
  1014 +2826 0.00120584112843460
  1015 +2828 0.00126141309789025
  1016 +2830 0.00134778284367920
  1017 +2832 0.00146199663837007
  1018 +2834 0.00159718851386329
  1019 +2836 0.00175330338362696
  1020 +2838 0.00193523559724759
  1021 +2840 0.00214829304268432
  1022 +2842 0.00239693861672905
  1023 +2844 0.00270947510257679
  1024 +2846 0.00308962037090872
  1025 +2848 0.00355940585209848
  1026 +2850 0.00412210422108316
  1027 +2852 0.00476891854151234
  1028 +2854 0.00547214050611261
  1029 +2856 0.00617409172881556
  1030 +2858 0.00678722786702444
  1031 +2860 0.00723807939551757
  1032 +2862 0.00752048939258356
  1033 +2864 0.00769405118384194
  1034 +2866 0.00780672387589873
  1035 +2868 0.00789211778455793
  1036 +2870 0.00795935754077555
  1037 +2872 0.00799733164350610
  1038 +2874 0.00795934759033912
  1039 +2876 0.00778684233057949
  1040 +2878 0.00748513477927108
  1041 +2880 0.00712782450019760
  1042 +2882 0.00674716793892496
  1043 +2884 0.00636559086703165
  1044 +2886 0.00600252759803496
  1045 +2888 0.00568003469443299
  1046 +2890 0.00541869257628554
  1047 +2892 0.00523149924308805
  1048 +2894 0.00513859281992941
  1049 +2896 0.00514912231818864
  1050 +2898 0.00528298553786387
  1051 +2900 0.00554846488279469
  1052 +2902 0.00596670745150011
  1053 +2904 0.00656025912947429
  1054 +2906 0.00737309118502326
  1055 +2908 0.00844343143196328
  1056 +2910 0.00980783562233305
  1057 +2912 0.0114361820721680
  1058 +2914 0.0132043723140582
  1059 +2916 0.0148639399258050
  1060 +2918 0.0160322637171387
  1061 +2920 0.0163848402191419
  1062 +2922 0.0159315596024990
  1063 +2924 0.0149712224125917
  1064 +2926 0.0138179195741240
  1065 +2928 0.0126830001717222
  1066 +2930 0.0117051760061400
  1067 +2932 0.0109454119425227
  1068 +2934 0.0104094926683649
  1069 +2936 0.0100777464854532
  1070 +2938 0.00991576239015874
  1071 +2940 0.00989092758914217
  1072 +2942 0.00995253861794336
  1073 +2944 0.0100558436016283
  1074 +2946 0.0101466649820268
  1075 +2948 0.0101700911447294
  1076 +2950 0.0100970420129300
  1077 +2952 0.00995445488065370
  1078 +2954 0.00977184847019253
  1079 +2956 0.00956031409076577
  1080 +2958 0.00931672833064324
  1081 +2960 0.00900841342025127
  1082 +2962 0.00860452512496009
  1083 +2964 0.00819173199579369
  1084 +2966 0.00793188379052879
  1085 +2968 0.00787856977180025
  1086 +2970 0.00795406658370171
  1087 +2972 0.00807021356855313
  1088 +2974 0.00817433984043233
  1089 +2976 0.00825003493744345
  1090 +2978 0.00828855603001654
  1091 +2980 0.00828386290179407
  1092 +2982 0.00816950979044141
  1093 +2984 0.00795147116279175
  1094 +2986 0.00771875813248752
  1095 +2988 0.00752177579743462
  1096 +2990 0.00739482968641806
  1097 +2992 0.00735495102785436
  1098 +2994 0.00742400805444368
  1099 +2996 0.00762947734762659
  1100 +2998 0.00800350176450487
  1101 +3000 0.00849881078288103
  1102 +3002 0.00896624168638865
  1103 +3004 0.00925040248900867
  1104 +3006 0.00945455630611128
  1105 +3008 0.00976581762927042
  1106 +3010 0.0103150719126273
  1107 +3012 0.0112091641279662
  1108 +3014 0.0125665741882334
  1109 +3016 0.0144920310150755
  1110 +3018 0.0171523311364697
  1111 +3020 0.0206588071576588
  1112 +3022 0.0247927573582982
  1113 +3024 0.0285338257471566
  1114 +3026 0.0305737428191527
  1115 +3028 0.0304197730378849
  1116 +3030 0.0285285708945381
  1117 +3032 0.0254626182993726
  1118 +3034 0.0218417847555673
  1119 +3036 0.0183214780469989
  1120 +3038 0.0154367262434714
  1121 +3040 0.0134174271105468
  1122 +3042 0.0121814306436623
  1123 +3044 0.0114802419869786
  1124 +3046 0.0111082334096508
  1125 +3048 0.0110364952795097
  1126 +3050 0.0112341213861221
  1127 +3052 0.0116521403194674
  1128 +3054 0.0121679353995795
  1129 +3056 0.0126492093791370
  1130 +3058 0.0130640240273400
  1131 +3060 0.0134217837485980
  1132 +3062 0.0136027351521215
  1133 +3064 0.0133566760196114
  1134 +3066 0.0124957830807641
  1135 +3068 0.0111185801076637
  1136 +3070 0.00962312187980008
  1137 +3072 0.00840019013916095
  1138 +3074 0.00762785975903174
  1139 +3076 0.00731431659052294
  1140 +3078 0.00742769361429674
  1141 +3080 0.00800169947155848
  1142 +3082 0.00909924810606661
  1143 +3084 0.0105612984915747
  1144 +3086 0.0115953458981882
  1145 +3088 0.0108915516715014
  1146 +3090 0.00855348266587572
  1147 +3092 0.00625766310903960
  1148 +3094 0.00474250996240750
  1149 +3096 0.00389487972553113
  1150 +3098 0.00350242093033435
  1151 +3100 0.00342566123955596
  1152 +3102 0.00354245491578370
  1153 +3104 0.00366329979669444
  1154 +3106 0.00351255659174282
  1155 +3108 0.00307160622386024
  1156 +3110 0.00262319086310484
  1157 +3112 0.00230238895472291
  1158 +3114 0.00208330628877116
  1159 +3116 0.00190296000440166
  1160 +3118 0.00170124594674715
  1161 +3120 0.00147221774746264
  1162 +3122 0.00126680203340060
  1163 +3124 0.00110221512874358
  1164 +3126 0.000972843085744223
  1165 +3128 0.000865976217229730
  1166 +3130 0.000787123046176519
  1167 +3132 0.000725569824317256
  1168 +3134 0.000678619961272403
  1169 +3136 0.000643376054198741
  1170 +3138 0.000613508276940799
  1171 +3140 0.000585754400051242
  1172 +3142 0.000561171104171409
  1173 +3144 0.000538801514536514
  1174 +3146 0.000520080512301793
  1175 +3148 0.000505696831504068
  1176 +3150 0.000493470880103411
  1177 +3152 0.000480268222246598
  1178 +3154 0.000470385004364871
  1179 +3156 0.000459220112914975
  1180 +3158 0.000450945450269378
  1181 +3160 0.000450827328828143
  1182 +3162 0.000455120896574839
  1183 +3164 0.000465883832863404
  1184 +3166 0.000478798660924222
  1185 +3168 0.000482832083650923
  1186 +3170 0.000455625596338195
  1187 +3172 0.000403338720059331
  1188 +3174 0.000360438306588196
  1189 +3176 0.000332520864586029
  1190 +3178 0.000313938694862586
  1191 +3180 0.000300705768353348
  1192 +3182 0.000290665831960273
  1193 +3184 0.000282478444260369
  1194 +3186 0.000275747274780963
  1195 +3188 0.000269274452306063
  1196 +3190 0.000262630704721266
  1197 +3192 0.000255445037852355
  1198 +3194 0.000248377973867383
  1199 +3196 0.000241977580841794
  1200 +3198 0.000236251689540068
  1201 +3200 0.000230923454004864
  1202 +3202 0.000226049100105626
  1203 +3204 0.000221226160126354
  1204 +3206 0.000214716060376866
  1205 +3208 0.000206517982920749
  1206 +3210 0.000198104526951019
  1207 +3212 0.000190353242003341
  1208 +3214 0.000183841618071712
  1209 +3216 0.000178536526886377
  1210 +3218 0.000173732996508941
  1211 +3220 0.000169365792718528
  1212 +3222 0.000165299675350027
  1213 +3224 0.000161252739783070
  1214 +3226 0.000157550287906591
  1215 +3228 0.000154290860671044
  1216 +3230 0.000151403187559336
  1217 +3232 0.000148762116611554
  1218 +3234 0.000146608972658800
  1219 +3236 0.000144929084687115
  1220 +3238 0.000143621190469325
  1221 +3240 0.000142423755040669
  1222 +3242 0.000141225309365069
  1223 +3244 0.000139879705280103
  1224 +3246 0.000138120388481842
  1225 +3248 0.000136557609027687
  1226 +3250 0.000135029965649156
  1227 +3252 0.000133891483928728
  1228 +3254 0.000133096425324259
  1229 +3256 0.000132368577771128
  1230 +3258 0.000131178881840028
  1231 +3260 0.000129611032335659
  1232 +3262 0.000128050800000000
  1233 +3264 0.000126496752229370
  1234 +3266 0.000125487476864466
  1235 +3268 0.000124918363511663
  1236 +3270 0.000124282902673504
  1237 +3272 0.000123524889665480
  1238 +3274 0.000122442491776109
  1239 +3276 0.000121443655497364
  1240 +3278 0.000120760252331750
  1241 +3280 0.000120133235127335
  1242 +3282 0.000119422774440518
  1243 +3284 0.000118787091342885
  1244 +3286 0.000118050006014353
  1245 +3288 0.000117490615311207
  1246 +3290 0.000116940876538515
  1247 +3292 0.000116411722780357
  1248 +3294 0.000116040811167173
  1249 +3296 0.000115834700717885
  1250 +3298 0.000116085966839459
  1251 +3300 0.000116986523436758
  1252 +3302 0.000118267730379294
  1253 +3304 0.000119505403103670
  1254 +3306 0.000120364280297837
  1255 +3308 0.000119982615737227
  1256 +3310 0.000118961448074642
  1257 +3312 0.000117873723711904
  1258 +3314 0.000117091085003690
  1259 +3316 0.000116576391297391
  1260 +3318 0.000116630812029799
  1261 +3320 0.000116648622872189
  1262 +3322 0.000116640410140475
  1263 +3324 0.000116601640984688
  1264 +3326 0.000116254038453171
  1265 +3328 0.000115188264691018
  1266 +3330 0.000113811841076524
  1267 +3332 0.000111681446514179
  1268 +3334 0.000108818040972509
  1269 +3336 0.000105958252604406
  1270 +3338 0.000103151741537451
  1271 +3340 0.000100395217441575
  1272 +3342 9.80332064093372e-05
  1273 +3344 9.53544349575209e-05
  1274 +3346 9.25223256784850e-05
  1275 +3348 9.00829101787277e-05
  1276 +3350 8.83163531062304e-05
  1277 +3352 8.72118771260860e-05
  1278 +3354 8.64440098119140e-05
  1279 +3356 8.60520504254794e-05
  1280 +3358 8.61965597139509e-05
  1281 +3360 8.70019144324470e-05
  1282 +3362 8.83318478317726e-05
  1283 +3364 9.00079714359512e-05
  1284 +3366 9.23139048671722e-05
  1285 +3368 9.50882502511675e-05
  1286 +3370 9.78832163580005e-05
  1287 +3372 0.000100096171211192
  1288 +3374 0.000102179086616863
  1289 +3376 0.000103749608742208
  1290 +3378 0.000105213237160669
  1291 +3380 0.000106688938713341
  1292 +3382 0.000107853667399164
  1293 +3384 0.000108503663896066
  1294 +3386 0.000108465998629706
  1295 +3388 0.000107522134166390
  1296 +3390 0.000105586354148376
  1297 +3392 0.000103099282581304
  1298 +3394 0.000100324257650923
  1299 +3396 9.74485799284953e-05
  1300 +3398 9.51596059704078e-05
  1301 +3400 9.35013107298140e-05
  1302 +3402 9.21170196430098e-05
  1303 +3404 9.07360614712649e-05
  1304 +3406 8.91138931604199e-05
  1305 +3408 8.74505590276362e-05
  1306 +3410 8.56664975562433e-05
  1307 +3412 8.43848055968202e-05
  1308 +3414 8.35095737363273e-05
  1309 +3416 8.28173663218536e-05
  1310 +3418 8.25803390851867e-05
  1311 +3420 8.34887031217918e-05
  1312 +3422 8.50941717249168e-05
  1313 +3424 8.76826565386191e-05
  1314 +3426 9.18893425240818e-05
  1315 +3428 9.72727573628125e-05
  1316 +3430 0.000103498414055259
  1317 +3432 0.000110175431772886
  1318 +3434 0.000116489353052258
  1319 +3436 0.000121652113320222
  1320 +3438 0.000125199891677689
  1321 +3440 0.000126017012084730
  1322 +3442 0.000123363542579961
  1323 +3444 0.000118359425974797
  1324 +3446 0.000111284305442118
  1325 +3448 0.000102049297013716
  1326 +3450 9.29060570294263e-05
  1327 +3452 8.56830126047782e-05
  1328 +3454 8.03943044406067e-05
  1329 +3456 7.64946805035534e-05
  1330 +3458 7.35384095568400e-05
  1331 +3460 7.15607792666279e-05
  1332 +3462 7.00113147312602e-05
  1333 +3464 6.86840886320734e-05
  1334 +3466 6.76516046709459e-05
  1335 +3468 6.66317002099573e-05
  1336 +3470 6.58163245627029e-05
  1337 +3472 6.48526803819241e-05
  1338 +3474 6.41769150098627e-05
  1339 +3476 6.33519637219242e-05
  1340 +3478 6.21036964756407e-05
  1341 +3480 6.07594134549892e-05
  1342 +3482 5.99888706228529e-05
  1343 +3484 5.95355056229478e-05
  1344 +3486 5.98196476615315e-05
  1345 +3488 6.07067305157839e-05
  1346 +3490 6.20707024404776e-05
  1347 +3492 6.35630004076309e-05
  1348 +3494 6.39802692410745e-05
  1349 +3496 6.36894878745265e-05
  1350 +3498 6.27365377476382e-05
  1351 +3500 6.17431130904710e-05
  1352 +3502 6.13279727787810e-05
  1353 +3504 6.13193515749704e-05
  1354 +3506 6.24903413403870e-05
  1355 +3508 6.43864144265415e-05
  1356 +3510 6.71410924962580e-05
  1357 +3512 7.03539058487688e-05
  1358 +3514 7.47946182109209e-05
  1359 +3516 7.95754496113107e-05
  1360 +3518 8.34700851824913e-05
  1361 +3520 8.39873348467991e-05
  1362 +3522 8.07272560865977e-05
  1363 +3524 7.56312308938946e-05
  1364 +3526 7.10894728276635e-05
  1365 +3528 6.81632208726418e-05
  1366 +3530 6.64216930115337e-05
  1367 +3532 6.58132280866232e-05
  1368 +3534 6.67321753128692e-05
  1369 +3536 6.94647085013537e-05
  1370 +3538 7.44308734240544e-05
  1371 +3540 8.16543395123198e-05
  1372 +3542 9.03200858171377e-05
  1373 +3544 9.85535954298993e-05
  1374 +3546 0.000104547035052111
  1375 +3548 0.000107433770750519
  1376 +3550 0.000108038450708995
  1377 +3552 0.000107166592996916
  1378 +3554 0.000105178798896553
  1379 +3556 0.000101095184756009
  1380 +3558 9.50814999627662e-05
  1381 +3560 8.82058228394490e-05
  1382 +3562 8.18208514354733e-05
  1383 +3564 7.68850700845907e-05
  1384 +3566 7.38744666163043e-05
  1385 +3568 7.27642291486909e-05
  1386 +3570 7.33994731408140e-05
  1387 +3572 7.56627166220080e-05
  1388 +3574 7.96660140607364e-05
  1389 +3576 8.51090055206606e-05
  1390 +3578 9.29167699145132e-05
  1391 +3580 0.000102526366929820
  1392 +3582 0.000114877275226176
  1393 +3584 0.000126190559302250
  1394 +3586 0.000124628073841470
  1395 +3588 0.000119415520864134
  1396 +3590 0.000112006712936662
  1397 +3592 0.000105579072932928
  1398 +3594 0.000100691596209911
  1399 +3596 9.80454508807073e-05
  1400 +3598 9.79289585249404e-05
  1401 +3600 9.76517090509766e-05
  1402 +3602 9.63252158538093e-05
  1403 +3604 9.47873503300014e-05
  1404 +3606 9.40807594813255e-05
  1405 +3608 9.38724750866359e-05
  1406 +3610 9.46504942395723e-05
  1407 +3612 9.80150733458878e-05
  1408 +3614 0.000104630751802908
  1409 +3616 0.000115783489148453
  1410 +3618 0.000130667214647273
  1411 +3620 0.000146477404898454
  1412 +3622 0.000158530547818508
  1413 +3624 0.000162318596543099
  1414 +3626 0.000158125871191841
  1415 +3628 0.000150672245587412
  1416 +3630 0.000144549679683140
  1417 +3632 0.000142051097385185
  1418 +3634 0.000145529942933542
  1419 +3636 0.000153343488815115
  1420 +3638 0.000167576397035396
  1421 +3640 0.000187305749491179
  1422 +3642 0.000211282337261951
  1423 +3644 0.000235521019158824
  1424 +3646 0.000255526042383438
  1425 +3648 0.000267309387292886
  1426 +3650 0.000267620489558132
  1427 +3652 0.000257281965913234
  1428 +3654 0.000238427431722088
  1429 +3656 0.000215910141107563
  1430 +3658 0.000194198641163347
  1431 +3660 0.000175915805990763
  1432 +3662 0.000162335012119966
  1433 +3664 0.000152841199834750
  1434 +3666 0.000146981907091703
  1435 +3668 0.000143997827610619
  1436 +3670 0.000143648436802218
  1437 +3672 0.000144734329787788
  1438 +3674 0.000145900823579283
  1439 +3676 0.000145536357339105
  1440 +3678 0.000142791335633658
  1441 +3680 0.000138712508096908
  1442 +3682 0.000133854756804407
  1443 +3684 0.000128953007630511
  1444 +3686 0.000123724720918296
  1445 +3688 0.000118053544364748
  1446 +3690 0.000112538647366327
  1447 +3692 0.000108762709162428
  1448 +3694 0.000106869096858975
  1449 +3696 0.000106178550226360
  1450 +3698 0.000108026299705946
  1451 +3700 0.000113499289845608
  1452 +3702 0.000122346067036449
  1453 +3704 0.000132017367154307
  1454 +3706 0.000138204981263169
  1455 +3708 0.000137812952692201
  1456 +3710 0.000131957371338105
  1457 +3712 0.000124911657013813
  1458 +3714 0.000120086480186131
  1459 +3716 0.000119368867384451
  1460 +3718 0.000123023160227338
  1461 +3720 0.000129681526292498
  1462 +3722 0.000136685573712829
  1463 +3724 0.000140355687154432
  1464 +3726 0.000137643004943763
  1465 +3728 0.000130059156127694
  1466 +3730 0.000121898190215580
  1467 +3732 0.000115279209639364
  1468 +3734 0.000109785664308487
  1469 +3736 0.000105299764060944
  1470 +3738 0.000101063203615323
  1471 +3740 9.68651180755000e-05
  1472 +3742 9.31808749176699e-05
  1473 +3744 9.10149507453584e-05
  1474 +3746 8.98056206735940e-05
  1475 +3748 8.93161375554986e-05
  1476 +3750 8.95680290795053e-05
  1477 +3752 9.07085327291721e-05
  1478 +3754 9.23144122730348e-05
  1479 +3756 9.51698234276085e-05
  1480 +3758 9.88200437936328e-05
  1481 +3760 0.000102897737658181
  1482 +3762 0.000106541912714358
  1483 +3764 0.000108638955977754
  1484 +3766 0.000107125969211894
  1485 +3768 0.000104745321090008
  1486 +3770 0.000104907149891996
  1487 +3772 0.000107524035997495
  1488 +3774 0.000112565658169961
  1489 +3776 0.000120128967951347
  1490 +3778 0.000130377699611365
  1491 +3780 0.000143388258757916
  1492 +3782 0.000157827987118552
  1493 +3784 0.000171336843948261
  1494 +3786 0.000178285748324712
  1495 +3788 0.000174781489954516
  1496 +3790 0.000164121439128089
  1497 +3792 0.000152610210570708
  1498 +3794 0.000144162759638053
  1499 +3796 0.000139239462639203
  1500 +3798 0.000137792736182703
  1501 +3800 0.000140104567703810
  1502 +3802 0.000145422058851258
  1503 +3804 0.000152835113748305
  1504 +3806 0.000161127793420174
  1505 +3808 0.000168581867788859
  1506 +3810 0.000173330279437380
  1507 +3812 0.000175195783104517
  1508 +3814 0.000174404180004515
  1509 +3816 0.000172977411115116
  1510 +3818 0.000172632535041757
  1511 +3820 0.000174761333878933
  1512 +3822 0.000179015946250825
  1513 +3824 0.000183474569007118
  1514 +3826 0.000187609784690581
  1515 +3828 0.000192418303544244
  1516 +3830 0.000199638672160316
  1517 +3832 0.000209346193913544
  1518 +3834 0.000221078085152779
  1519 +3836 0.000233276912915708
  1520 +3838 0.000243302212259793
  1521 +3840 0.000248219562860653
  1522 +3842 0.000249318750764567
  1523 +3844 0.000250161224209589
  1524 +3846 0.000251130509086889
  1525 +3848 0.000250954031996911
  1526 +3850 0.000247448125111366
  1527 +3852 0.000239298068537633
  1528 +3854 0.000227630000846504
  1529 +3856 0.000215807191993378
  1530 +3858 0.000207046517196079
  1531 +3860 0.000202157638401237
  1532 +3862 0.000202101096220524
  1533 +3864 0.000206089427126992
  1534 +3866 0.000212972794266054
  1535 +3868 0.000220069608188463
  1536 +3870 0.000223160954785535
  1537 +3872 0.000217701230702324
  1538 +3874 0.000205680240569784
  1539 +3876 0.000194071196201460
  1540 +3878 0.000186624022776833
  1541 +3880 0.000183260750499541
  1542 +3882 0.000183370917787493
  1543 +3884 0.000186002682616268
  1544 +3886 0.000190704000843751
  1545 +3888 0.000195753159488382
  1546 +3890 0.000199899173040718
  1547 +3892 0.000202664798143917
  1548 +3894 0.000204320562044854
  1549 +3896 0.000204971280265517
  1550 +3898 0.000204184602522533
  1551 +3900 0.000202879694728580
  1552 +3902 0.000202091110448804
  1553 +3904 0.000203200507821011
  1554 +3906 0.000206777694070363
  1555 +3908 0.000212730193424292
  1556 +3910 0.000215758904170297
  1557 +3912 0.000211571330269805
  1558 +3914 0.000205958146733392
  1559 +3916 0.000202885902366098
  1560 +3918 0.000203859899346076
  1561 +3920 0.000208043821414469
  1562 +3922 0.000213749060271441
  1563 +3924 0.000216258022232613
  1564 +3926 0.000210993095532934
  1565 +3928 0.000200360509814737
  1566 +3930 0.000190403984953153
  1567 +3932 0.000185294952858894
  1568 +3934 0.000184723195717293
  1569 +3936 0.000186124269760876
  1570 +3938 0.000187274520079713
  1571 +3940 0.000189148765118607
  1572 +3942 0.000191266181204903
  1573 +3944 0.000194823747520104
  1574 +3946 0.000199962536960736
  1575 +3948 0.000206117700447747
  1576 +3950 0.000211964821297933
  1577 +3952 0.000211771907916455
  1578 +3954 0.000207210064931517
  1579 +3956 0.000200358454677226
  1580 +3958 0.000194986979879340
  1581 +3960 0.000191410166101308
  1582 +3962 0.000188811490516811
  1583 +3964 0.000186954388139908
  1584 +3966 0.000184972375095875
  1585 +3968 0.000183218705269115
  1586 +3970 0.000181796902747989
  1587 +3972 0.000181759132648531
  1588 +3974 0.000184824282283672
  1589 +3976 0.000192623374739583
  1590 +3978 0.000205576802325497
  1591 +3980 0.000216734030830589
  1592 +3982 0.000209196916619900
  1593 +3984 0.000193026471982283
  1594 +3986 0.000183362654697217
  1595 +3988 0.000180228706844783
  1596 +3990 0.000181565573496817
  1597 +3992 0.000186254988451223
  1598 +3994 0.000193691373041908
  1599 +3996 0.000204148918879724
  1600 +3998 0.000217163156382698
1601 4000 0.000231947733021415 1601 4000 0.000231947733021415
1602 \ No newline at end of file 1602 \ No newline at end of file
1 -800 1.44120102496924  
2 -802 1.44244952355793  
3 -804 1.44362241452370  
4 -806 1.44473157548162  
5 -808 1.44576931343185  
6 -810 1.44673515341541  
7 -812 1.44763153740528  
8 -814 1.44849997645288  
9 -816 1.44937159368323  
10 -818 1.45024511061741  
11 -820 1.45109838059394  
12 -822 1.45193180052550  
13 -824 1.45274307737647  
14 -826 1.45353862658166  
15 -828 1.45431614422343  
16 -830 1.45505783090997  
17 -832 1.45575257351567  
18 -834 1.45637393495922  
19 -836 1.45689903981153  
20 -838 1.45730768949019  
21 -840 1.45754105585989  
22 -842 1.45762277914234  
23 -844 1.45763704972226  
24 -846 1.45770974157519  
25 -848 1.45792998369439  
26 -850 1.45831194599516  
27 -852 1.45879214084464  
28 -854 1.45933254646700  
29 -856 1.45988983429307  
30 -858 1.46043988459777  
31 -860 1.46098292821135  
32 -862 1.46151723624776  
33 -864 1.46203872496248  
34 -866 1.46253192223325  
35 -868 1.46297856786196  
36 -870 1.46337643775072  
37 -872 1.46369146339390  
38 -874 1.46394643585616  
39 -876 1.46431343981134  
40 -878 1.46483594897202  
41 -880 1.46543855156632  
42 -882 1.46608462990801  
43 -884 1.46677023178158  
44 -886 1.46750898169590  
45 -888 1.46831763414834  
46 -890 1.46912802427779  
47 -892 1.46954514029358  
48 -894 1.46839331789610  
49 -896 1.46522362501208  
50 -898 1.46324102369024  
51 -900 1.46324805165743  
52 -902 1.46389477313103  
53 -904 1.46460285834673  
54 -906 1.46524189063531  
55 -908 1.46578615865865  
56 -910 1.46624870624222  
57 -912 1.46665117759441  
58 -914 1.46703266934571  
59 -916 1.46740765502925  
60 -918 1.46779668973951  
61 -920 1.46820189802559  
62 -922 1.46861141696830  
63 -924 1.46901759517687  
64 -926 1.46935992609941  
65 -928 1.46951316452951  
66 -930 1.46945198189589  
67 -932 1.46950773718789  
68 -934 1.46980252488385  
69 -936 1.47016397014931  
70 -938 1.47050527825284  
71 -940 1.47079802225791  
72 -942 1.47102956241248  
73 -944 1.47121559715866  
74 -946 1.47137193902005  
75 -948 1.47152008803324  
76 -950 1.47167672882319  
77 -952 1.47187041329055  
78 -954 1.47208448275609  
79 -956 1.47229737949647  
80 -958 1.47250268786501  
81 -960 1.47267011513556  
82 -962 1.47277605897765  
83 -964 1.47281096169045  
84 -966 1.47283377833869  
85 -968 1.47288521062562  
86 -970 1.47300680592029  
87 -972 1.47318336590741  
88 -974 1.47338081764773  
89 -976 1.47357969584368  
90 -978 1.47371821017195  
91 -980 1.47375527316737  
92 -982 1.47374243519460  
93 -984 1.47381322933363  
94 -986 1.47398487555170  
95 -988 1.47420629302573  
96 -990 1.47448130861459  
97 -992 1.47481507770761  
98 -994 1.47518229617302  
99 -996 1.47557023171639  
100 -998 1.47596326572828  
101 -1000 1.47630080652934  
102 -1002 1.47636823234471  
103 -1004 1.47636996678396  
104 -1006 1.47689524896944  
105 -1008 1.47750032220134  
106 -1010 1.47819158796836  
107 -1012 1.47897505869564  
108 -1014 1.47986167058547  
109 -1016 1.48089513800264  
110 -1018 1.48214271193312  
111 -1020 1.48362438976875  
112 -1022 1.48502767979268  
113 -1024 1.48723564000764  
114 -1026 1.49092289691198  
115 -1028 1.49396375951509  
116 -1030 1.47873935405011  
117 -1032 1.46178488502145  
118 -1034 1.46614728364263  
119 -1036 1.46944972756204  
120 -1038 1.47076139801307  
121 -1040 1.47051860247504  
122 -1042 1.46925108082617  
123 -1044 1.46777888639623  
124 -1046 1.46677062217283  
125 -1048 1.46644104430282  
126 -1050 1.46666085838594  
127 -1052 1.46724995592262  
128 -1054 1.46804818971542  
129 -1056 1.46897681608261  
130 -1058 1.46995585496974  
131 -1060 1.47098590895262  
132 -1062 1.47206714530921  
133 -1064 1.47321734998274  
134 -1066 1.47445175619764  
135 -1068 1.47579194531028  
136 -1070 1.47721681438477  
137 -1072 1.47863578920406  
138 -1074 1.47989036409651  
139 -1076 1.48086017571181  
140 -1078 1.48069474784801  
141 -1080 1.47616731467815  
142 -1082 1.46390771869497  
143 -1084 1.45570223896581  
144 -1086 1.45597971475891  
145 -1088 1.45836941934247  
146 -1090 1.46066235559752  
147 -1092 1.46255873201846  
148 -1094 1.46411051824312  
149 -1096 1.46540793776881  
150 -1098 1.46651204425965  
151 -1100 1.46743001960627  
152 -1102 1.46810891059625  
153 -1104 1.46835826348699  
154 -1106 1.46762316195694  
155 -1108 1.46618573784309  
156 -1110 1.46572358542781  
157 -1112 1.46614920302751  
158 -1114 1.46684472613418  
159 -1116 1.46754366818093  
160 -1118 1.46816766240122  
161 -1120 1.46871860517754  
162 -1122 1.46920770699094  
163 -1124 1.46965073082635  
164 -1126 1.47005259957817  
165 -1128 1.47040212564529  
166 -1130 1.47068773768668  
167 -1132 1.47096001810126  
168 -1134 1.47125261448772  
169 -1136 1.47154891832636  
170 -1138 1.47183699189280  
171 -1140 1.47209800955853  
172 -1142 1.47233456778191  
173 -1144 1.47257573473017  
174 -1146 1.47283356711807  
175 -1148 1.47307259446091  
176 -1150 1.47326381831914  
177 -1152 1.47336996150258  
178 -1154 1.47330710459724  
179 -1156 1.47293509477181  
180 -1158 1.47266594765858  
181 -1160 1.47259707273045  
182 -1162 1.47267982619196  
183 -1164 1.47288581951866  
184 -1166 1.47317564562733  
185 -1168 1.47355761342796  
186 -1170 1.47402209612147  
187 -1172 1.47459197223784  
188 -1174 1.47529073492465  
189 -1176 1.47579201984062  
190 -1178 1.47389452829121  
191 -1180 1.46944888964386  
192 -1182 1.46919538008765  
193 -1184 1.46993706618235  
194 -1186 1.47058584953654  
195 -1188 1.47109418040909  
196 -1190 1.47148385016616  
197 -1192 1.47177356227783  
198 -1194 1.47196611004565  
199 -1196 1.47207728619391  
200 -1198 1.47220096862104  
201 -1200 1.47245042725556  
202 -1202 1.47283662225685  
203 -1204 1.47330431122777  
204 -1206 1.47375342391676  
205 -1208 1.47385318037376  
206 -1210 1.47280027515132  
207 -1212 1.47140252001622  
208 -1214 1.47159489093342  
209 -1216 1.47205516262945  
210 -1218 1.47243159969193  
211 -1220 1.47273916940180  
212 -1222 1.47301272972689  
213 -1224 1.47326393439881  
214 -1226 1.47349889542765  
215 -1228 1.47371659199003  
216 -1230 1.47393059180901  
217 -1232 1.47413378656172  
218 -1234 1.47433469964923  
219 -1236 1.47453039235071  
220 -1238 1.47471647903353  
221 -1240 1.47488491964895  
222 -1242 1.47502851521336  
223 -1244 1.47512495593972  
224 -1246 1.47514408931247  
225 -1248 1.47505892212860  
226 -1250 1.47489972136187  
227 -1252 1.47484106680061  
228 -1254 1.47493923662727  
229 -1256 1.47509846252746  
230 -1258 1.47526567770392  
231 -1260 1.47542057167793  
232 -1262 1.47557439533574  
233 -1264 1.47572116951863  
234 -1266 1.47586745130108  
235 -1268 1.47601147334394  
236 -1270 1.47614701936603  
237 -1272 1.47627015399601  
238 -1274 1.47638091039797  
239 -1276 1.47648361938200  
240 -1278 1.47658183373250  
241 -1280 1.47668313548634  
242 -1282 1.47679959880658  
243 -1284 1.47693261142928  
244 -1286 1.47707297484201  
245 -1288 1.47722283448259  
246 -1290 1.47738070554226  
247 -1292 1.47754337420682  
248 -1294 1.47770716341215  
249 -1296 1.47786028165421  
250 -1298 1.47798887584323  
251 -1300 1.47808934206014  
252 -1302 1.47818243145329  
253 -1304 1.47830827158180  
254 -1306 1.47849364056186  
255 -1308 1.47871221118251  
256 -1310 1.47885808674696  
257 -1312 1.47873010242650  
258 -1314 1.47845803582890  
259 -1316 1.47844930632483  
260 -1318 1.47861179184706  
261 -1320 1.47881460317012  
262 -1322 1.47902291732804  
263 -1324 1.47922066571969  
264 -1326 1.47941412833592  
265 -1328 1.47959210849367  
266 -1330 1.47973167816960  
267 -1332 1.47972691925884  
268 -1334 1.47975105896865  
269 -1336 1.47993512250321  
270 -1338 1.48014837613309  
271 -1340 1.48037360725078  
272 -1342 1.48060038757184  
273 -1344 1.48082753333001  
274 -1346 1.48104968129957  
275 -1348 1.48126553234897  
276 -1350 1.48148716441519  
277 -1352 1.48173647624861  
278 -1354 1.48200446828695  
279 -1356 1.48227599517218  
280 -1358 1.48252791950314  
281 -1360 1.48276324869435  
282 -1362 1.48303458306896  
283 -1364 1.48338223264961  
284 -1366 1.48379902481358  
285 -1368 1.48427223592360  
286 -1370 1.48482960284728  
287 -1372 1.48552801978829  
288 -1374 1.48627546417750  
289 -1376 1.48651700069497  
290 -1378 1.48432599213190  
291 -1380 1.47977968972337  
292 -1382 1.47800355097223  
293 -1384 1.47805316502072  
294 -1386 1.47842143243600  
295 -1388 1.47890024839336  
296 -1390 1.47940651645865  
297 -1392 1.47991712903019  
298 -1394 1.48041754934745  
299 -1396 1.48089750917415  
300 -1398 1.48135158724828  
301 -1400 1.48179771126525  
302 -1402 1.48224069922095  
303 -1404 1.48266579602562  
304 -1406 1.48305944158359  
305 -1408 1.48342298716122  
306 -1410 1.48379030750588  
307 -1412 1.48419035949659  
308 -1414 1.48461342812701  
309 -1416 1.48505164072948  
310 -1418 1.48548005566484  
311 -1420 1.48588588173361  
312 -1422 1.48626036521862  
313 -1424 1.48659663343317  
314 -1426 1.48690837523274  
315 -1428 1.48726752634633  
316 -1430 1.48775649947673  
317 -1432 1.48841619746365  
318 -1434 1.48924758721438  
319 -1436 1.49022965011215  
320 -1438 1.49126109208233  
321 -1440 1.49220157896289  
322 -1442 1.49274786168208  
323 -1444 1.49275436842747  
324 -1446 1.49244040803637  
325 -1448 1.49203506779732  
326 -1450 1.49142867984501  
327 -1452 1.49040469923150  
328 -1454 1.48888698396754  
329 -1456 1.48687784303199  
330 -1458 1.48442850436533  
331 -1460 1.48174723159373  
332 -1462 1.47906693249971  
333 -1464 1.47667955286596  
334 -1466 1.47482397028080  
335 -1468 1.47364425598396  
336 -1470 1.47319928261846  
337 -1472 1.47339047699181  
338 -1474 1.47411629804730  
339 -1476 1.47533374680842  
340 -1478 1.47696195971213  
341 -1480 1.47908527215456  
342 -1482 1.48180866451580  
343 -1484 1.48531763958917  
344 -1486 1.48994928684771  
345 -1488 1.49499065429219  
346 -1490 1.50119515596543  
347 -1492 1.50990378628749  
348 -1494 1.51196694565470  
349 -1496 1.44560795826024  
350 -1498 1.41456003179507  
351 -1500 1.42568725767340  
352 -1502 1.43509242814603  
353 -1504 1.44179871660811  
354 -1506 1.44669596130319  
355 -1508 1.45033176716821  
356 -1510 1.45318682655572  
357 -1512 1.45545228048253  
358 -1514 1.45731921509841  
359 -1516 1.45894932377219  
360 -1518 1.46041227592838  
361 -1520 1.46176173499470  
362 -1522 1.46244384736929  
363 -1524 1.46122289585454  
364 -1526 1.46043285810887  
365 -1528 1.46128161485975  
366 -1530 1.46226970833946  
367 -1532 1.46306701307330  
368 -1534 1.46366399954379  
369 -1536 1.46409417910494  
370 -1538 1.46444109535269  
371 -1540 1.46477704752644  
372 -1542 1.46519165698743  
373 -1544 1.46568852566980  
374 -1546 1.46623889292729  
375 -1548 1.46677632998672  
376 -1550 1.46719167293357  
377 -1552 1.46747772804745  
378 -1554 1.46791932189599  
379 -1556 1.46844756268659  
380 -1558 1.46898255634672  
381 -1560 1.46952197034328  
382 -1562 1.46999610489784  
383 -1564 1.47038792635287  
384 -1566 1.47066419723057  
385 -1568 1.47075696992025  
386 -1570 1.47067580679212  
387 -1572 1.47047224204500  
388 -1574 1.47030976437525  
389 -1576 1.47033092176687  
390 -1578 1.47057489703138  
391 -1580 1.47099907306615  
392 -1582 1.47158364170880  
393 -1584 1.47213789972489  
394 -1586 1.47240454856960  
395 -1588 1.47273455527947  
396 -1590 1.47343724065447  
397 -1592 1.47446091811145  
398 -1594 1.47574194447918  
399 -1596 1.47705173230297  
400 -1598 1.47867335885708  
401 -1600 1.48062028756105  
402 -1602 1.48036168324124  
403 -1604 1.47134299168096  
404 -1606 1.45508276794757  
405 -1608 1.45359592019623  
406 -1610 1.45693626090464  
407 -1612 1.45964926448336  
408 -1614 1.46156535264851  
409 -1616 1.46294485069237  
410 -1618 1.46393384687173  
411 -1620 1.46454159062356  
412 -1622 1.46478536173497  
413 -1624 1.46467572345167  
414 -1626 1.46443675069875  
415 -1628 1.46442873304410  
416 -1630 1.46468245393626  
417 -1632 1.46507304958839  
418 -1634 1.46551002264583  
419 -1636 1.46597619450157  
420 -1638 1.46639465048447  
421 -1640 1.46677714745798  
422 -1642 1.46713350654907  
423 -1644 1.46746066478520  
424 -1646 1.46777688897226  
425 -1648 1.46807230212257  
426 -1650 1.46832313178042  
427 -1652 1.46853535477890  
428 -1654 1.46871126235072  
429 -1656 1.46886441952877  
430 -1658 1.46897717842913  
431 -1660 1.46906019325977  
432 -1662 1.46917336129198  
433 -1664 1.46933992968848  
434 -1666 1.46953218537231  
435 -1668 1.46973458666196  
436 -1670 1.46993137012353  
437 -1672 1.47010972990258  
438 -1674 1.47023592719105  
439 -1676 1.47026189453436  
440 -1678 1.47023042790416  
441 -1680 1.47026824213020  
442 -1682 1.47039195163007  
443 -1684 1.47055816296083  
444 -1686 1.47072223030395  
445 -1688 1.47088122473311  
446 -1690 1.47102029360098  
447 -1692 1.47114084717626  
448 -1694 1.47123960018069  
449 -1696 1.47128779153643  
450 -1698 1.47126399416326  
451 -1700 1.47132896383171  
452 -1702 1.47143681802407  
453 -1704 1.47155945773850  
454 -1706 1.47167556592223  
455 -1708 1.47178940246904  
456 -1710 1.47190604771198  
457 -1712 1.47202944260493  
458 -1714 1.47216568678700  
459 -1716 1.47231539851653  
460 -1718 1.47248386890388  
461 -1720 1.47265447525274  
462 -1722 1.47281731074269  
463 -1724 1.47295042900518  
464 -1726 1.47304600716400  
465 -1728 1.47309375883840  
466 -1730 1.47305939547434  
467 -1732 1.47291741773166  
468 -1734 1.47267688996611  
469 -1736 1.47235533806185  
470 -1738 1.47204881790723  
471 -1740 1.47183343980199  
472 -1742 1.47174243401936  
473 -1744 1.47176880507034  
474 -1746 1.47188162854264  
475 -1748 1.47204632190602  
476 -1750 1.47223241396135  
477 -1752 1.47242316015794  
478 -1754 1.47260867420886  
479 -1756 1.47278327809895  
480 -1758 1.47293258838400  
481 -1760 1.47306085751883  
482 -1762 1.47317848011178  
483 -1764 1.47329045336641  
484 -1766 1.47339550159425  
485 -1768 1.47349145470639  
486 -1770 1.47357817480071  
487 -1772 1.47366712599018  
488 -1774 1.47373929846121  
489 -1776 1.47378551120112  
490 -1778 1.47379002011073  
491 -1780 1.47381389620918  
492 -1782 1.47392354891587  
493 -1784 1.47409170003533  
494 -1786 1.47427198188798  
495 -1788 1.47442615650942  
496 -1790 1.47457291909648  
497 -1792 1.47474878427437  
498 -1794 1.47489348470272  
499 -1796 1.47493489892040  
500 -1798 1.47478110512949  
501 -1800 1.47437081445076  
502 -1802 1.47373622085690  
503 -1804 1.47304588258769  
504 -1806 1.47251222749590  
505 -1808 1.47223472657190  
506 -1810 1.47217821063195  
507 -1812 1.47227236503443  
508 -1814 1.47243859996067  
509 -1816 1.47259748640805  
510 -1818 1.47271718154483  
511 -1820 1.47279535803734  
512 -1822 1.47284920630461  
513 -1824 1.47291235631300  
514 -1826 1.47301397376823  
515 -1828 1.47314852957960  
516 -1830 1.47329330162724  
517 -1832 1.47342543709755  
518 -1834 1.47357056562475  
519 -1836 1.47375873628681  
520 -1838 1.47398158101288  
521 -1840 1.47422445263378  
522 -1842 1.47448077748417  
523 -1844 1.47474586805163  
524 -1846 1.47500613122839  
525 -1848 1.47524723874056  
526 -1850 1.47539669943437  
527 -1852 1.47535125830335  
528 -1854 1.47504217493076  
529 -1856 1.47442394463698  
530 -1858 1.47358493716912  
531 -1860 1.47284787021825  
532 -1862 1.47246109965773  
533 -1864 1.47241132718491  
534 -1866 1.47253616431924  
535 -1868 1.47266502935955  
536 -1870 1.47267966566327  
537 -1872 1.47252923128383  
538 -1874 1.47227196419049  
539 -1876 1.47203509622402  
540 -1878 1.47192107290153  
541 -1880 1.47194298711947  
542 -1882 1.47205363793314  
543 -1884 1.47220708298649  
544 -1886 1.47237095289447  
545 -1888 1.47253062677600  
546 -1890 1.47268167466003  
547 -1892 1.47283038859118  
548 -1894 1.47298500841240  
549 -1896 1.47313109785186  
550 -1898 1.47324769232051  
551 -1900 1.47333129201763  
552 -1902 1.47341557098201  
553 -1904 1.47353087942641  
554 -1906 1.47366534069078  
555 -1908 1.47380841038952  
556 -1910 1.47395828541387  
557 -1912 1.47411340271346  
558 -1914 1.47427400000000  
559 -1916 1.47443781042483  
560 -1918 1.47460593444462  
561 -1920 1.47477582054714  
562 -1922 1.47493879861924  
563 -1924 1.47508438695513  
564 -1926 1.47522698209875  
565 -1928 1.47539264822422  
566 -1930 1.47558260671450  
567 -1932 1.47576219402042  
568 -1934 1.47587640732885  
569 -1936 1.47583908582835  
570 -1938 1.47553060901904  
571 -1940 1.47489150443496  
572 -1942 1.47409542930774  
573 -1944 1.47334201979217  
574 -1946 1.47275002485068  
575 -1948 1.47244925775411  
576 -1950 1.47239944627947  
577 -1952 1.47247579265655  
578 -1954 1.47255459735783  
579 -1956 1.47256197135638  
580 -1958 1.47246521668706  
581 -1960 1.47228135320174  
582 -1962 1.47212551111344  
583 -1964 1.47202075140180  
584 -1966 1.47202761573580  
585 -1968 1.47213420575515  
586 -1970 1.47229043240161  
587 -1972 1.47246807810995  
588 -1974 1.47265001716927  
589 -1976 1.47282643638217  
590 -1978 1.47298226071844  
591 -1980 1.47310651432274  
592 -1982 1.47317949653548  
593 -1984 1.47321671851061  
594 -1986 1.47327006170979  
595 -1988 1.47332686296001  
596 -1990 1.47332929557274  
597 -1992 1.47327822607353  
598 -1994 1.47322150680404  
599 -1996 1.47323618581223  
600 -1998 1.47331824302286  
601 -2000 1.47341135456857  
602 -2002 1.47349412728021  
603 -2004 1.47356154386820  
604 -2006 1.47361224775319  
605 -2008 1.47364186456648  
606 -2010 1.47365636042820  
607 -2012 1.47367336928224  
608 -2014 1.47370233665225  
609 -2016 1.47373443692998  
610 -2018 1.47377205797454  
611 -2020 1.47381648358614  
612 -2022 1.47386111301432  
613 -2024 1.47390577969427  
614 -2026 1.47395028817579  
615 -2028 1.47399564538301  
616 -2030 1.47403660265942  
617 -2032 1.47406519767252  
618 -2034 1.47408330994744  
619 -2036 1.47412047010970  
620 -2038 1.47416098226622  
621 -2040 1.47420115643528  
622 -2042 1.47423947043298  
623 -2044 1.47427612941305  
624 -2046 1.47431218419212  
625 -2048 1.47434648116260  
626 -2050 1.47438071427926  
627 -2052 1.47441278409228  
628 -2054 1.47444520616084  
629 -2056 1.47447627049456  
630 -2058 1.47450675882064  
631 -2060 1.47453588733404  
632 -2062 1.47456386702353  
633 -2064 1.47459073458299  
634 -2066 1.47461205370700  
635 -2068 1.47461817299827  
636 -2070 1.47461840283149  
637 -2072 1.47463277175523  
638 -2074 1.47465427880758  
639 -2076 1.47467709152152  
640 -2078 1.47470098997954  
641 -2080 1.47472590140090  
642 -2082 1.47475065118331  
643 -2084 1.47477468067538  
644 -2086 1.47479776494193  
645 -2088 1.47482142195457  
646 -2090 1.47484633615274  
647 -2092 1.47487121877337  
648 -2094 1.47489609572630  
649 -2096 1.47491999718268  
650 -2098 1.47494434691905  
651 -2100 1.47496980619050  
652 -2102 1.47499564254391  
653 -2104 1.47502159030193  
654 -2106 1.47504417582923  
655 -2108 1.47506264533273  
656 -2110 1.47507395400220  
657 -2112 1.47508393678745  
658 -2114 1.47510043049552  
659 -2116 1.47511198378437  
660 -2118 1.47511214568773  
661 -2120 1.47512762848859  
662 -2122 1.47515211305019  
663 -2124 1.47517182375646  
664 -2126 1.47518774789092  
665 -2128 1.47521310826668  
666 -2130 1.47524116489652  
667 -2132 1.47527005212030  
668 -2134 1.47529590535418  
669 -2136 1.47531935031383  
670 -2138 1.47534209120029  
671 -2140 1.47536554624085  
672 -2142 1.47539141048574  
673 -2144 1.47541735186985  
674 -2146 1.47544449187503  
675 -2148 1.47547342544397  
676 -2150 1.47550619668115  
677 -2152 1.47554178363426  
678 -2154 1.47558203516447  
679 -2156 1.47562160093130  
680 -2158 1.47565253763469  
681 -2160 1.47566151568534  
682 -2162 1.47561225894049  
683 -2164 1.47548068559088  
684 -2166 1.47537296738995  
685 -2168 1.47536211403117  
686 -2170 1.47539890926361  
687 -2172 1.47544656614673  
688 -2174 1.47549197749543  
689 -2176 1.47553203213436  
690 -2178 1.47556864358705  
691 -2180 1.47560215753198  
692 -2182 1.47562464470162  
693 -2184 1.47562085582639  
694 -2186 1.47558980476200  
695 -2188 1.47557480988891  
696 -2190 1.47558033450347  
697 -2192 1.47559232749770  
698 -2194 1.47561457143455  
699 -2196 1.47564434139990  
700 -2198 1.47567857523082  
701 -2200 1.47571617803152  
702 -2202 1.47575726786490  
703 -2204 1.47579337721307  
704 -2206 1.47579746772491  
705 -2208 1.47574189594736  
706 -2210 1.47571194854898  
707 -2212 1.47572956986763  
708 -2214 1.47575472007504  
709 -2216 1.47578621163266  
710 -2218 1.47581942101129  
711 -2220 1.47585088742314  
712 -2222 1.47587897173469  
713 -2224 1.47590298856875  
714 -2226 1.47592470046514  
715 -2228 1.47594779372938  
716 -2230 1.47597265137572  
717 -2232 1.47599748726300  
718 -2234 1.47601807246604  
719 -2236 1.47602689076481  
720 -2238 1.47603005518190  
721 -2240 1.47604281703214  
722 -2242 1.47606726159445  
723 -2244 1.47609784881235  
724 -2246 1.47612902016881  
725 -2248 1.47615949406397  
726 -2250 1.47618852095385  
727 -2252 1.47621446243625  
728 -2254 1.47623489680521  
729 -2256 1.47624408046323  
730 -2258 1.47623018458297  
731 -2260 1.47617742404058  
732 -2262 1.47611228816094  
733 -2264 1.47608500995198  
734 -2266 1.47609867784140  
735 -2268 1.47612909924113  
736 -2270 1.47616476482454  
737 -2272 1.47619947439469  
738 -2274 1.47623253066542  
739 -2276 1.47626319551276  
740 -2278 1.47628200368923  
741 -2280 1.47626680426481  
742 -2282 1.47624376410414  
743 -2284 1.47624714378783  
744 -2286 1.47623939342228  
745 -2288 1.47622263640102  
746 -2290 1.47621701248520  
747 -2292 1.47622414847935  
748 -2294 1.47624639786310  
749 -2296 1.47628230617739  
750 -2298 1.47632637399547  
751 -2300 1.47637356620751  
752 -2302 1.47642523943489  
753 -2304 1.47647814675017  
754 -2306 1.47652996718143  
755 -2308 1.47657059295077  
756 -2310 1.47656605147736  
757 -2312 1.47646451238365  
758 -2314 1.47632139830172  
759 -2316 1.47626434895975  
760 -2318 1.47628666976549  
761 -2320 1.47634178441866  
762 -2322 1.47640626197946  
763 -2324 1.47647367980355  
764 -2326 1.47654420112269  
765 -2328 1.47661693748934  
766 -2330 1.47668220577778  
767 -2332 1.47670897421522  
768 -2334 1.47661953024202  
769 -2336 1.47640699456743  
770 -2338 1.47628918090598  
771 -2340 1.47627922381635  
772 -2342 1.47629610568572  
773 -2344 1.47633775742674  
774 -2346 1.47639668853055  
775 -2348 1.47645464076621  
776 -2350 1.47650252320800  
777 -2352 1.47653396769864  
778 -2354 1.47655188224605  
779 -2356 1.47656625779288  
780 -2358 1.47656342537266  
781 -2360 1.47646841808416  
782 -2362 1.47627988649258  
783 -2364 1.47623361007945  
784 -2366 1.47628349602868  
785 -2368 1.47634714131595  
786 -2370 1.47640579435613  
787 -2372 1.47645673781608  
788 -2374 1.47650329311272  
789 -2376 1.47654473856361  
790 -2378 1.47658519751564  
791 -2380 1.47662360662062  
792 -2382 1.47665509133976  
793 -2384 1.47667939867421  
794 -2386 1.47668999377568  
795 -2388 1.47666832266751  
796 -2390 1.47662551968266  
797 -2392 1.47661227607686  
798 -2394 1.47662326945870  
799 -2396 1.47664538468599  
800 -2398 1.47667621017793  
801 -2400 1.47670840326370  
802 -2402 1.47673732384369  
803 -2404 1.47676080113293  
804 -2406 1.47677566835384  
805 -2408 1.47677747426079  
806 -2410 1.47675773033081  
807 -2412 1.47671176533526  
808 -2414 1.47665898774225  
809 -2416 1.47662888566870  
810 -2418 1.47661609885311  
811 -2420 1.47661804906686  
812 -2422 1.47663361079607  
813 -2424 1.47665615258179  
814 -2426 1.47667989702189  
815 -2428 1.47670167875450  
816 -2430 1.47671889251986  
817 -2432 1.47672660033007  
818 -2434 1.47672581905542  
819 -2436 1.47673588691547  
820 -2438 1.47675625346807  
821 -2440 1.47677811479011  
822 -2442 1.47680201299431  
823 -2444 1.47682690323960  
824 -2446 1.47685134280847  
825 -2448 1.47687468838441  
826 -2450 1.47689577948214  
827 -2452 1.47691461221252  
828 -2454 1.47693121483650  
829 -2456 1.47694483659804  
830 -2458 1.47695706614166  
831 -2460 1.47696841245298  
832 -2462 1.47698092980728  
833 -2464 1.47699165258073  
834 -2466 1.47699892231642  
835 -2468 1.47700518850467  
836 -2470 1.47701681917772  
837 -2472 1.47703371133993  
838 -2474 1.47705172804537  
839 -2476 1.47706963205611  
840 -2478 1.47708839046513  
841 -2480 1.47710595182822  
842 -2482 1.47712353018048  
843 -2484 1.47714045399508  
844 -2486 1.47715526898974  
845 -2488 1.47716785931325  
846 -2490 1.47717746351979  
847 -2492 1.47718774105152  
848 -2494 1.47720108087222  
849 -2496 1.47721116876733  
850 -2498 1.47720908793559  
851 -2500 1.47721975153658  
852 -2502 1.47724153102797  
853 -2504 1.47726842063502  
854 -2506 1.47729164115863  
855 -2508 1.47729793164711  
856 -2510 1.47728751673010  
857 -2512 1.47728595976167  
858 -2514 1.47730346177822  
859 -2516 1.47732866245654  
860 -2518 1.47735480680865  
861 -2520 1.47737778321487  
862 -2522 1.47739640465051  
863 -2524 1.47741388745850  
864 -2526 1.47743674344455  
865 -2528 1.47746686662636  
866 -2530 1.47749859543051  
867 -2532 1.47752798101785  
868 -2534 1.47755196992726  
869 -2536 1.47757059463727  
870 -2538 1.47758008928483  
871 -2540 1.47756988987874  
872 -2542 1.47755427512999  
873 -2544 1.47756361259663  
874 -2546 1.47758639316885  
875 -2548 1.47760210701986  
876 -2550 1.47761136589934  
877 -2552 1.47762359682751  
878 -2554 1.47764677677048  
879 -2556 1.47767474710701  
880 -2558 1.47770246497527  
881 -2560 1.47773042785198  
882 -2562 1.47776361629940  
883 -2564 1.47779998470837  
884 -2566 1.47783821733131  
885 -2568 1.47787806111451  
886 -2570 1.47792064098960  
887 -2572 1.47796488547863  
888 -2574 1.47800956216730  
889 -2576 1.47805314833494  
890 -2578 1.47809883475004  
891 -2580 1.47814186001493  
892 -2582 1.47815997256423  
893 -2584 1.47809360441189  
894 -2586 1.47790866325303  
895 -2588 1.47773400000000  
896 -2590 1.47767480433235  
897 -2592 1.47770364229106  
898 -2594 1.47776662663767  
899 -2596 1.47783459041379  
900 -2598 1.47789713249225  
901 -2600 1.47795076443856  
902 -2602 1.47798212010995  
903 -2604 1.47796839500240  
904 -2606 1.47793022585363  
905 -2608 1.47793384355028  
906 -2610 1.47794564701586  
907 -2612 1.47795047312967  
908 -2614 1.47797539539217  
909 -2616 1.47801274460181  
910 -2618 1.47805108460942  
911 -2620 1.47808604011951  
912 -2622 1.47811663248782  
913 -2624 1.47814577420760  
914 -2626 1.47817100891022  
915 -2628 1.47819185746701  
916 -2630 1.47820200756835  
917 -2632 1.47819509341812  
918 -2634 1.47818069648523  
919 -2636 1.47819937787229  
920 -2638 1.47823535219485  
921 -2640 1.47827081637876  
922 -2642 1.47830404351228  
923 -2644 1.47832995386373  
924 -2646 1.47835243329009  
925 -2648 1.47837673632241  
926 -2650 1.47840422324866  
927 -2652 1.47843503880664  
928 -2654 1.47846525754672  
929 -2656 1.47849229804531  
930 -2658 1.47851619218461  
931 -2660 1.47854228554823  
932 -2662 1.47857183053155  
933 -2664 1.47860675830984  
934 -2666 1.47864502580642  
935 -2668 1.47868442524625  
936 -2670 1.47871645234617  
937 -2672 1.47872844710197  
938 -2674 1.47874644966096  
939 -2676 1.47878367512841  
940 -2678 1.47882577091271  
941 -2680 1.47886734102623  
942 -2682 1.47890576030499  
943 -2684 1.47894410487476  
944 -2686 1.47898246676081  
945 -2688 1.47902078634990  
946 -2690 1.47905697663379  
947 -2692 1.47909348635787  
948 -2694 1.47913253241860  
949 -2696 1.47917713682535  
950 -2698 1.47922494363690  
951 -2700 1.47927370219512  
952 -2702 1.47932350132184  
953 -2704 1.47937477829841  
954 -2706 1.47942977955203  
955 -2708 1.47948662996503  
956 -2710 1.47954572465315  
957 -2712 1.47960899951982  
958 -2714 1.47967582145469  
959 -2716 1.47974783424700  
960 -2718 1.47982686383801  
961 -2720 1.47991434869689  
962 -2722 1.48001161889876  
963 -2724 1.48011529035864  
964 -2726 1.48021743640732  
965 -2728 1.48029271013490  
966 -2730 1.48028469924544  
967 -2732 1.48009333694647  
968 -2734 1.47968604519118  
969 -2736 1.47926069770098  
970 -2738 1.47904382199068  
971 -2740 1.47903137276969  
972 -2742 1.47912234371550  
973 -2744 1.47924475242006  
974 -2746 1.47936896123536  
975 -2748 1.47948547683776  
976 -2750 1.47959346670195  
977 -2752 1.47969391424782  
978 -2754 1.47978696270901  
979 -2756 1.47987478298896  
980 -2758 1.47995758449142  
981 -2760 1.48003727324589  
982 -2762 1.48011924219933  
983 -2764 1.48019913384442  
984 -2766 1.48027922637338  
985 -2768 1.48035769798330  
986 -2770 1.48043385800477  
987 -2772 1.48050725415469  
988 -2774 1.48057567058368  
989 -2776 1.48065105935983  
990 -2778 1.48072266299449  
991 -2780 1.48079977415031  
992 -2782 1.48088053164822  
993 -2784 1.48096687278145  
994 -2786 1.48105512159158  
995 -2788 1.48114937559786  
996 -2790 1.48124466747644  
997 -2792 1.48134118881539  
998 -2794 1.48144014454067  
999 -2796 1.48153308521599  
1000 -2798 1.48162875830237  
1001 -2800 1.48173023207917  
1002 -2802 1.48183567152155  
1003 -2804 1.48193764434860  
1004 -2806 1.48203772197889  
1005 -2808 1.48213332822876  
1006 -2810 1.48221893030834  
1007 -2812 1.48230128068059  
1008 -2814 1.48241543210576  
1009 -2816 1.48256188329700  
1010 -2818 1.48272146386266  
1011 -2820 1.48288593713105  
1012 -2822 1.48303146156846  
1013 -2824 1.48316535466125  
1014 -2826 1.48333287967432  
1015 -2828 1.48353886468435  
1016 -2830 1.48376233940652  
1017 -2832 1.48399372362724  
1018 -2834 1.48422859660869  
1019 -2836 1.48446914811588  
1020 -2838 1.48472335986644  
1021 -2840 1.48498891752954  
1022 -2842 1.48526978967144  
1023 -2844 1.48556244410920  
1024 -2846 1.48585030113417  
1025 -2848 1.48611635747129  
1026 -2850 1.48631703683473  
1027 -2852 1.48642616794096  
1028 -2854 1.48638931900690  
1029 -2856 1.48617288132870  
1030 -2858 1.48578055258264  
1031 -2860 1.48528254616381  
1032 -2862 1.48477473720320  
1033 -2864 1.48431306898547  
1034 -2866 1.48390294869478  
1035 -2868 1.48352758708888  
1036 -2870 1.48315923324289  
1037 -2872 1.48276317318322  
1038 -2874 1.48233036174381  
1039 -2876 1.48190033197863  
1040 -2878 1.48156989857095  
1041 -2880 1.48135829837939  
1042 -2882 1.48127046426508  
1043 -2884 1.48129224687463  
1044 -2886 1.48142276034719  
1045 -2888 1.48166152381514  
1046 -2890 1.48199469355260  
1047 -2892 1.48241286263108  
1048 -2894 1.48290615618025  
1049 -2896 1.48346174779728  
1050 -2898 1.48406068695481  
1051 -2900 1.48469749104873  
1052 -2902 1.48534901849277  
1053 -2904 1.48600451268347  
1054 -2906 1.48663330502903  
1055 -2908 1.48716049340272  
1056 -2910 1.48749427432860  
1057 -2912 1.48745634999468  
1058 -2914 1.48687918789111  
1059 -2916 1.48564647709805  
1060 -2918 1.48378138421067  
1061 -2920 1.48160842259702  
1062 -2922 1.47963902212310  
1063 -2924 1.47817563267450  
1064 -2926 1.47725366173650  
1065 -2928 1.47680009878321  
1066 -2930 1.47670600337876  
1067 -2932 1.47683592850229  
1068 -2934 1.47707848906770  
1069 -2936 1.47736368012666  
1070 -2938 1.47761998820843  
1071 -2940 1.47780991969196  
1072 -2942 1.47790616610153  
1073 -2944 1.47789352215007  
1074 -2946 1.47776642994662  
1075 -2948 1.47755303644224  
1076 -2950 1.47732098571495  
1077 -2952 1.47710982305520  
1078 -2954 1.47692656410946  
1079 -2956 1.47677865708199  
1080 -2958 1.47664389769752  
1081 -2960 1.47653950030308  
1082 -2962 1.47652380859929  
1083 -2964 1.47671143784641  
1084 -2966 1.47706590558488  
1085 -2968 1.47742684312635  
1086 -2970 1.47770009243870  
1087 -2972 1.47786247321149  
1088 -2974 1.47794741384886  
1089 -2976 1.47797899370123  
1090 -2978 1.47798223648454  
1091 -2980 1.47795004028588  
1092 -2982 1.47790147416153  
1093 -2984 1.47795735389707  
1094 -2986 1.47814496927765  
1095 -2988 1.47844692443850  
1096 -2990 1.47884918651108  
1097 -2992 1.47932344250011  
1098 -2994 1.47986306802417  
1099 -2996 1.48043188046815  
1100 -2998 1.48097537656156  
1101 -3000 1.48138517100778  
1102 -3002 1.48162356419426  
1103 -3004 1.48185212024737  
1104 -3006 1.48228440440630  
1105 -3008 1.48297178567222  
1106 -3010 1.48385673952528  
1107 -3012 1.48487993544870  
1108 -3014 1.48595665242293  
1109 -3016 1.48695938009756  
1110 -3018 1.48767468298278  
1111 -3020 1.48765524108674  
1112 -3022 1.48618132554454  
1113 -3024 1.48268461964750  
1114 -3026 1.47762082421352  
1115 -3028 1.47232727506644  
1116 -3030 1.46776463943145  
1117 -3032 1.46440878935946  
1118 -3034 1.46247197560802  
1119 -3036 1.46196769309556  
1120 -3038 1.46253947223186  
1121 -3040 1.46367382189299  
1122 -3042 1.46491417717244  
1123 -3044 1.46601563099238  
1124 -3046 1.46697686500990  
1125 -3048 1.46781464802766  
1126 -3050 1.46847402904648  
1127 -3052 1.46887853308036  
1128 -3054 1.46895675121188  
1129 -3056 1.46875323941201  
1130 -3058 1.46834302704055  
1131 -3060 1.46771282666113  
1132 -3062 1.46675300487368  
1133 -3064 1.46553703632205  
1134 -3066 1.46435734374414  
1135 -3068 1.46364333274111  
1136 -3070 1.46361967631567  
1137 -3072 1.46416270683630  
1138 -3074 1.46500589551713  
1139 -3076 1.46593266001109  
1140 -3078 1.46681497080407  
1141 -3080 1.46754108115619  
1142 -3082 1.46785690887919  
1143 -3084 1.46726760945338  
1144 -3086 1.46533247163430  
1145 -3088 1.46268292062625  
1146 -3090 1.46120303549580  
1147 -3092 1.46134478479294  
1148 -3094 1.46221369798373  
1149 -3096 1.46321247938499  
1150 -3098 1.46411661764251  
1151 -3100 1.46482369285261  
1152 -3102 1.46525636685728  
1153 -3104 1.46533581524600  
1154 -3106 1.46519098442260  
1155 -3108 1.46516907412280  
1156 -3110 1.46538060689336  
1157 -3112 1.46568276755924  
1158 -3114 1.46596931336371  
1159 -3116 1.46619739482536  
1160 -3118 1.46639101964608  
1161 -3120 1.46661054944789  
1162 -3122 1.46687049156442  
1163 -3124 1.46713909721892  
1164 -3126 1.46740251735782  
1165 -3128 1.46765965900548  
1166 -3130 1.46790595336806  
1167 -3132 1.46813448944673  
1168 -3134 1.46834723054744  
1169 -3136 1.46854553575727  
1170 -3138 1.46872578997706  
1171 -3140 1.46889606787041  
1172 -3142 1.46905361684206  
1173 -3144 1.46920788445114  
1174 -3146 1.46935155893370  
1175 -3148 1.46948926642375  
1176 -3150 1.46961711994727  
1177 -3152 1.46973932284344  
1178 -3154 1.46985771524525  
1179 -3156 1.46997084147302  
1180 -3158 1.47008125375275  
1181 -3160 1.47018834504960  
1182 -3162 1.47028749194193  
1183 -3164 1.47037561555632  
1184 -3166 1.47044733671974  
1185 -3168 1.47049523638823  
1186 -3170 1.47053287904761  
1187 -3172 1.47059397007388  
1188 -3174 1.47068028883230  
1189 -3176 1.47077100092966  
1190 -3178 1.47085834352883  
1191 -3180 1.47094237966502  
1192 -3182 1.47102127140257  
1193 -3184 1.47109691171596  
1194 -3186 1.47116815404231  
1195 -3188 1.47123618567128  
1196 -3190 1.47130184743484  
1197 -3192 1.47136511381017  
1198 -3194 1.47142734846007  
1199 -3196 1.47148851688128  
1200 -3198 1.47154755038698  
1201 -3200 1.47160533014890  
1202 -3202 1.47166012795457  
1203 -3204 1.47171224992608  
1204 -3206 1.47176315489772  
1205 -3208 1.47181395071669  
1206 -3210 1.47186466789480  
1207 -3212 1.47191661577937  
1208 -3214 1.47196738520913  
1209 -3216 1.47201707857991  
1210 -3218 1.47206588870145  
1211 -3220 1.47211365240659  
1212 -3222 1.47215936522226  
1213 -3224 1.47220500735251  
1214 -3226 1.47225033231421  
1215 -3228 1.47229424065224  
1216 -3230 1.47233733691715  
1217 -3232 1.47237980638024  
1218 -3234 1.47242122252104  
1219 -3236 1.47246173766460  
1220 -3238 1.47250090500984  
1221 -3240 1.47253933121953  
1222 -3242 1.47257666559418  
1223 -3244 1.47261289353408  
1224 -3246 1.47264942225475  
1225 -3248 1.47268468000033  
1226 -3250 1.47271896562139  
1227 -3252 1.47275329822459  
1228 -3254 1.47278723826016  
1229 -3256 1.47281957643892  
1230 -3258 1.47285086138010  
1231 -3260 1.47288192451579  
1232 -3262 1.47291300000000  
1233 -3264 1.47294399234620  
1234 -3266 1.47297519999867  
1235 -3268 1.47300456597122  
1236 -3270 1.47303306949960  
1237 -3272 1.47306229798834  
1238 -3274 1.47309029819990  
1239 -3276 1.47311725100397  
1240 -3278 1.47314519229524  
1241 -3280 1.47317191831342  
1242 -3282 1.47319904835607  
1243 -3284 1.47322480511295  
1244 -3286 1.47325068033533  
1245 -3288 1.47327558727819  
1246 -3290 1.47330149637565  
1247 -3292 1.47332523279087  
1248 -3294 1.47335025198767  
1249 -3296 1.47337510971327  
1250 -3298 1.47339905996618  
1251 -3300 1.47342296954304  
1252 -3302 1.47344582202335  
1253 -3304 1.47346658074592  
1254 -3306 1.47348738493031  
1255 -3308 1.47350703202034  
1256 -3310 1.47352683574489  
1257 -3312 1.47354755048152  
1258 -3314 1.47356829450234  
1259 -3316 1.47358903215508  
1260 -3318 1.47360880465673  
1261 -3320 1.47362855417648  
1262 -3322 1.47364734936801  
1263 -3324 1.47366547803442  
1264 -3326 1.47368305009043  
1265 -3328 1.47369959979993  
1266 -3330 1.47371718446385  
1267 -3332 1.47373378124277  
1268 -3334 1.47375068696817  
1269 -3336 1.47376844875514  
1270 -3338 1.47378666053286  
1271 -3340 1.47380404591194  
1272 -3342 1.47382276516742  
1273 -3344 1.47384040963255  
1274 -3346 1.47385904663877  
1275 -3348 1.47387858239480  
1276 -3350 1.47389752320424  
1277 -3352 1.47391752328576  
1278 -3354 1.47393606713734  
1279 -3356 1.47395488874822  
1280 -3358 1.47397353990369  
1281 -3360 1.47399234620080  
1282 -3362 1.47401055721405  
1283 -3364 1.47402826981442  
1284 -3366 1.47404508175359  
1285 -3368 1.47406141829832  
1286 -3370 1.47407704342040  
1287 -3372 1.47409059132764  
1288 -3374 1.47410503032631  
1289 -3376 1.47411782704824  
1290 -3378 1.47413081528590  
1291 -3380 1.47414326557675  
1292 -3382 1.47415571156753  
1293 -3384 1.47416717298263  
1294 -3386 1.47417841575972  
1295 -3388 1.47418915024028  
1296 -3390 1.47419998707473  
1297 -3392 1.47421190062571  
1298 -3394 1.47422443429139  
1299 -3396 1.47423683452363  
1300 -3398 1.47425033505022  
1301 -3400 1.47426480528893  
1302 -3402 1.47427826680738  
1303 -3404 1.47429170418534  
1304 -3406 1.47430477066294  
1305 -3408 1.47431835512023  
1306 -3410 1.47433193595530  
1307 -3412 1.47434642118416  
1308 -3414 1.47436087920127  
1309 -3416 1.47437532634686  
1310 -3418 1.47439018109776  
1311 -3420 1.47440515622779  
1312 -3422 1.47442044328205  
1313 -3424 1.47443606103306  
1314 -3426 1.47444964436527  
1315 -3428 1.47446294847254  
1316 -3430 1.47447439134230  
1317 -3432 1.47448416869267  
1318 -3434 1.47449072019392  
1319 -3436 1.47449591374259  
1320 -3438 1.47449903792179  
1321 -3440 1.47449993449953  
1322 -3442 1.47450135456237  
1323 -3444 1.47450458795612  
1324 -3446 1.47450875108451  
1325 -3448 1.47451445884208  
1326 -3450 1.47452484258401  
1327 -3452 1.47453827241797  
1328 -3454 1.47455172262247  
1329 -3456 1.47456517206426  
1330 -3458 1.47457860151852  
1331 -3460 1.47459192059468  
1332 -3462 1.47460450298261  
1333 -3464 1.47461696547474  
1334 -3466 1.47462839859281  
1335 -3468 1.47463987388367  
1336 -3470 1.47465188200346  
1337 -3472 1.47466266389847  
1338 -3474 1.47467409691578  
1339 -3476 1.47468473670609  
1340 -3478 1.47469608306209  
1341 -3480 1.47470752002888  
1342 -3482 1.47471885889080  
1343 -3484 1.47473141107054  
1344 -3486 1.47474321664113  
1345 -3488 1.47475540477105  
1346 -3490 1.47476577603289  
1347 -3492 1.47477517654069  
1348 -3494 1.47478437686762  
1349 -3496 1.47479375265910  
1350 -3498 1.47480352784050  
1351 -3500 1.47481386454326  
1352 -3502 1.47482540254891  
1353 -3504 1.47483686546170  
1354 -3506 1.47484922964243  
1355 -3508 1.47486054239155  
1356 -3510 1.47487118057395  
1357 -3512 1.47488161773392  
1358 -3514 1.47489155648764  
1359 -3516 1.47489779215940  
1360 -3518 1.47490199751604  
1361 -3520 1.47490515212000  
1362 -3522 1.47490858576642  
1363 -3524 1.47491589352572  
1364 -3526 1.47492563809847  
1365 -3528 1.47493721829251  
1366 -3530 1.47494965183138  
1367 -3532 1.47496209482301  
1368 -3534 1.47497548127118  
1369 -3536 1.47498901026331  
1370 -3538 1.47500250064110  
1371 -3540 1.47501334375007  
1372 -3542 1.47502155988466  
1373 -3544 1.47502590855583  
1374 -3546 1.47502798788122  
1375 -3548 1.47502908741446  
1376 -3550 1.47503013111600  
1377 -3552 1.47503152066431  
1378 -3554 1.47503369017078  
1379 -3556 1.47503596161309  
1380 -3558 1.47503994401260  
1381 -3560 1.47504720780187  
1382 -3562 1.47505757685400  
1383 -3564 1.47506921753979  
1384 -3566 1.47508222835820  
1385 -3568 1.47509583612677  
1386 -3570 1.47510943592653  
1387 -3572 1.47512299244722  
1388 -3574 1.47513544229862  
1389 -3576 1.47514788646150  
1390 -3578 1.47515877336465  
1391 -3580 1.47516830010454  
1392 -3582 1.47517301097796  
1393 -3584 1.47516730096467  
1394 -3586 1.47516098788624  
1395 -3588 1.47515999912529  
1396 -3590 1.47516344979552  
1397 -3592 1.47516995891151  
1398 -3594 1.47517893497533  
1399 -3596 1.47518949533554  
1400 -3598 1.47519986950803  
1401 -3600 1.47520815315630  
1402 -3602 1.47521639684906  
1403 -3604 1.47522677803691  
1404 -3606 1.47523756307109  
1405 -3608 1.47524905817071  
1406 -3610 1.47526235394740  
1407 -3612 1.47527689090454  
1408 -3614 1.47529241512157  
1409 -3616 1.47530577596310  
1410 -3618 1.47531550675526  
1411 -3620 1.47531807217956  
1412 -3622 1.47531330897623  
1413 -3624 1.47530520668685  
1414 -3626 1.47530099713781  
1415 -3628 1.47530419555884  
1416 -3630 1.47531292297539  
1417 -3632 1.47532682994681  
1418 -3634 1.47534230166646  
1419 -3636 1.47535817866622  
1420 -3638 1.47537270802382  
1421 -3640 1.47538306617453  
1422 -3642 1.47538491013479  
1423 -3644 1.47537808441815  
1424 -3646 1.47536152773521  
1425 -3648 1.47533829820411  
1426 -3650 1.47531127187157  
1427 -3652 1.47528831452931  
1428 -3654 1.47527173292062  
1429 -3656 1.47526400688559  
1430 -3658 1.47526538002071  
1431 -3660 1.47527196497124  
1432 -3662 1.47528332467912  
1433 -3664 1.47529547167214  
1434 -3666 1.47530792033597  
1435 -3668 1.47531940264238  
1436 -3670 1.47532950934428  
1437 -3672 1.47533752543273  
1438 -3674 1.47534264633859  
1439 -3676 1.47534493660391  
1440 -3678 1.47534793834948  
1441 -3680 1.47535101048592  
1442 -3682 1.47535512741537  
1443 -3684 1.47536061029192  
1444 -3686 1.47536677517540  
1445 -3688 1.47537422152313  
1446 -3690 1.47538349069671  
1447 -3692 1.47539466802181  
1448 -3694 1.47540614815786  
1449 -3696 1.47541766757740  
1450 -3698 1.47543103564364  
1451 -3700 1.47544309274752  
1452 -3702 1.47545168948545  
1453 -3704 1.47545396563826  
1454 -3706 1.47545207507319  
1455 -3708 1.47544797484465  
1456 -3710 1.47544704753668  
1457 -3712 1.47545189667326  
1458 -3714 1.47545995926878  
1459 -3716 1.47547095072698  
1460 -3718 1.47548066602429  
1461 -3720 1.47548697893292  
1462 -3722 1.47548796009613  
1463 -3724 1.47548478177503  
1464 -3726 1.47547947641639  
1465 -3728 1.47547863259801  
1466 -3730 1.47548174475524  
1467 -3732 1.47548778078125  
1468 -3734 1.47549403635331  
1469 -3736 1.47550125363908  
1470 -3738 1.47550934180435  
1471 -3740 1.47551683167599  
1472 -3742 1.47552688594006  
1473 -3744 1.47553729090548  
1474 -3746 1.47554678198008  
1475 -3748 1.47555713325216  
1476 -3750 1.47556659302775  
1477 -3752 1.47557669459374  
1478 -3754 1.47558647315562  
1479 -3756 1.47559529768016  
1480 -3758 1.47560360009648  
1481 -3760 1.47561091508282  
1482 -3762 1.47561609735508  
1483 -3764 1.47562029070796  
1484 -3766 1.47562441780911  
1485 -3768 1.47563306550754  
1486 -3770 1.47564405166112  
1487 -3772 1.47565552291783  
1488 -3774 1.47566694809298  
1489 -3776 1.47567830857219  
1490 -3778 1.47568755133462  
1491 -3780 1.47569463620025  
1492 -3782 1.47569547492168  
1493 -3784 1.47568951387041  
1494 -3786 1.47567835935080  
1495 -3788 1.47566593929693  
1496 -3790 1.47566101977927  
1497 -3792 1.47566354952827  
1498 -3794 1.47567185732029  
1499 -3796 1.47568321348889  
1500 -3798 1.47569529254648  
1501 -3800 1.47570772530959  
1502 -3802 1.47571809962768  
1503 -3804 1.47572648401529  
1504 -3806 1.47573134192597  
1505 -3808 1.47573352027040  
1506 -3810 1.47573292361008  
1507 -3812 1.47573299326894  
1508 -3814 1.47573398673360  
1509 -3816 1.47573817632205  
1510 -3818 1.47574527524272  
1511 -3820 1.47575277086820  
1512 -3822 1.47575967350287  
1513 -3824 1.47576470303911  
1514 -3826 1.47576975528735  
1515 -3828 1.47577698612879  
1516 -3830 1.47578309783396  
1517 -3832 1.47578829704916  
1518 -3834 1.47579095824278  
1519 -3836 1.47578839924332  
1520 -3838 1.47578153880935  
1521 -3840 1.47577325828602  
1522 -3842 1.47576695658169  
1523 -3844 1.47576181472562  
1524 -3846 1.47575638975092  
1525 -3848 1.47574893511221  
1526 -3850 1.47574067656252  
1527 -3852 1.47573418960490  
1528 -3854 1.47573201348304  
1529 -3856 1.47573609448654  
1530 -3858 1.47574340076582  
1531 -3860 1.47575406506568  
1532 -3862 1.47576509594980  
1533 -3864 1.47577344240290  
1534 -3866 1.47577782298125  
1535 -3868 1.47577704417063  
1536 -3870 1.47576978782061  
1537 -3872 1.47576167888626  
1538 -3874 1.47575983530599  
1539 -3876 1.47576615931522  
1540 -3878 1.47577603616264  
1541 -3880 1.47578749602566  
1542 -3882 1.47579899049744  
1543 -3884 1.47580829754193  
1544 -3886 1.47581553191111  
1545 -3888 1.47582044576450  
1546 -3890 1.47582361486597  
1547 -3892 1.47582488670530  
1548 -3894 1.47582691190401  
1549 -3896 1.47582798767520  
1550 -3898 1.47583005776107  
1551 -3900 1.47583333559154  
1552 -3902 1.47583798052018  
1553 -3904 1.47584349792097  
1554 -3906 1.47584878503057  
1555 -3908 1.47585104104660  
1556 -3910 1.47584786442429  
1557 -3912 1.47584503864650  
1558 -3914 1.47584772763597  
1559 -3916 1.47585513011730  
1560 -3918 1.47586161194681  
1561 -3920 1.47586680114244  
1562 -3922 1.47586801742881  
1563 -3924 1.47586285228063  
1564 -3926 1.47585768990955  
1565 -3928 1.47585725672200  
1566 -3930 1.47586502926929  
1567 -3932 1.47587638834149  
1568 -3934 1.47588758559686  
1569 -3936 1.47589600406114  
1570 -3938 1.47590331354213  
1571 -3940 1.47591060804636  
1572 -3942 1.47591789591720  
1573 -3944 1.47592457142526  
1574 -3946 1.47593081059303  
1575 -3948 1.47593398581283  
1576 -3950 1.47593295565452  
1577 -3952 1.47592878275285  
1578 -3954 1.47592684349640  
1579 -3956 1.47592986168501  
1580 -3958 1.47593628896516  
1581 -3960 1.47594351825970  
1582 -3962 1.47595186222678  
1583 -3964 1.47595911320580  
1584 -3966 1.47596854991323  
1585 -3968 1.47597712871599  
1586 -3970 1.47598746992252  
1587 -3972 1.47600004422535  
1588 -3974 1.47601337421929  
1589 -3976 1.47602692154134  
1590 -3978 1.47603405627977  
1591 -3980 1.47602817354059  
1592 -3982 1.47601874488156  
1593 -3984 1.47602563707167  
1594 -3986 1.47604367443527  
1595 -3988 1.47606327560645  
1596 -3990 1.47608304122308  
1597 -3992 1.47610269526207  
1598 -3994 1.47612262206064  
1599 -3996 1.47614078459134  
1600 -3998 1.47615752083133 1 +800 1.44120102496924
  2 +802 1.44244952355793
  3 +804 1.44362241452370
  4 +806 1.44473157548162
  5 +808 1.44576931343185
  6 +810 1.44673515341541
  7 +812 1.44763153740528
  8 +814 1.44849997645288
  9 +816 1.44937159368323
  10 +818 1.45024511061741
  11 +820 1.45109838059394
  12 +822 1.45193180052550
  13 +824 1.45274307737647
  14 +826 1.45353862658166
  15 +828 1.45431614422343
  16 +830 1.45505783090997
  17 +832 1.45575257351567
  18 +834 1.45637393495922
  19 +836 1.45689903981153
  20 +838 1.45730768949019
  21 +840 1.45754105585989
  22 +842 1.45762277914234
  23 +844 1.45763704972226
  24 +846 1.45770974157519
  25 +848 1.45792998369439
  26 +850 1.45831194599516
  27 +852 1.45879214084464
  28 +854 1.45933254646700
  29 +856 1.45988983429307
  30 +858 1.46043988459777
  31 +860 1.46098292821135
  32 +862 1.46151723624776
  33 +864 1.46203872496248
  34 +866 1.46253192223325
  35 +868 1.46297856786196
  36 +870 1.46337643775072
  37 +872 1.46369146339390
  38 +874 1.46394643585616
  39 +876 1.46431343981134
  40 +878 1.46483594897202
  41 +880 1.46543855156632
  42 +882 1.46608462990801
  43 +884 1.46677023178158
  44 +886 1.46750898169590
  45 +888 1.46831763414834
  46 +890 1.46912802427779
  47 +892 1.46954514029358
  48 +894 1.46839331789610
  49 +896 1.46522362501208
  50 +898 1.46324102369024
  51 +900 1.46324805165743
  52 +902 1.46389477313103
  53 +904 1.46460285834673
  54 +906 1.46524189063531
  55 +908 1.46578615865865
  56 +910 1.46624870624222
  57 +912 1.46665117759441
  58 +914 1.46703266934571
  59 +916 1.46740765502925
  60 +918 1.46779668973951
  61 +920 1.46820189802559
  62 +922 1.46861141696830
  63 +924 1.46901759517687
  64 +926 1.46935992609941
  65 +928 1.46951316452951
  66 +930 1.46945198189589
  67 +932 1.46950773718789
  68 +934 1.46980252488385
  69 +936 1.47016397014931
  70 +938 1.47050527825284
  71 +940 1.47079802225791
  72 +942 1.47102956241248
  73 +944 1.47121559715866
  74 +946 1.47137193902005
  75 +948 1.47152008803324
  76 +950 1.47167672882319
  77 +952 1.47187041329055
  78 +954 1.47208448275609
  79 +956 1.47229737949647
  80 +958 1.47250268786501
  81 +960 1.47267011513556
  82 +962 1.47277605897765
  83 +964 1.47281096169045
  84 +966 1.47283377833869
  85 +968 1.47288521062562
  86 +970 1.47300680592029
  87 +972 1.47318336590741
  88 +974 1.47338081764773
  89 +976 1.47357969584368
  90 +978 1.47371821017195
  91 +980 1.47375527316737
  92 +982 1.47374243519460
  93 +984 1.47381322933363
  94 +986 1.47398487555170
  95 +988 1.47420629302573
  96 +990 1.47448130861459
  97 +992 1.47481507770761
  98 +994 1.47518229617302
  99 +996 1.47557023171639
  100 +998 1.47596326572828
  101 +1000 1.47630080652934
  102 +1002 1.47636823234471
  103 +1004 1.47636996678396
  104 +1006 1.47689524896944
  105 +1008 1.47750032220134
  106 +1010 1.47819158796836
  107 +1012 1.47897505869564
  108 +1014 1.47986167058547
  109 +1016 1.48089513800264
  110 +1018 1.48214271193312
  111 +1020 1.48362438976875
  112 +1022 1.48502767979268
  113 +1024 1.48723564000764
  114 +1026 1.49092289691198
  115 +1028 1.49396375951509
  116 +1030 1.47873935405011
  117 +1032 1.46178488502145
  118 +1034 1.46614728364263
  119 +1036 1.46944972756204
  120 +1038 1.47076139801307
  121 +1040 1.47051860247504
  122 +1042 1.46925108082617
  123 +1044 1.46777888639623
  124 +1046 1.46677062217283
  125 +1048 1.46644104430282
  126 +1050 1.46666085838594
  127 +1052 1.46724995592262
  128 +1054 1.46804818971542
  129 +1056 1.46897681608261
  130 +1058 1.46995585496974
  131 +1060 1.47098590895262
  132 +1062 1.47206714530921
  133 +1064 1.47321734998274
  134 +1066 1.47445175619764
  135 +1068 1.47579194531028
  136 +1070 1.47721681438477
  137 +1072 1.47863578920406
  138 +1074 1.47989036409651
  139 +1076 1.48086017571181
  140 +1078 1.48069474784801
  141 +1080 1.47616731467815
  142 +1082 1.46390771869497
  143 +1084 1.45570223896581
  144 +1086 1.45597971475891
  145 +1088 1.45836941934247
  146 +1090 1.46066235559752
  147 +1092 1.46255873201846
  148 +1094 1.46411051824312
  149 +1096 1.46540793776881
  150 +1098 1.46651204425965
  151 +1100 1.46743001960627
  152 +1102 1.46810891059625
  153 +1104 1.46835826348699
  154 +1106 1.46762316195694
  155 +1108 1.46618573784309
  156 +1110 1.46572358542781
  157 +1112 1.46614920302751
  158 +1114 1.46684472613418
  159 +1116 1.46754366818093
  160 +1118 1.46816766240122
  161 +1120 1.46871860517754
  162 +1122 1.46920770699094
  163 +1124 1.46965073082635
  164 +1126 1.47005259957817
  165 +1128 1.47040212564529
  166 +1130 1.47068773768668
  167 +1132 1.47096001810126
  168 +1134 1.47125261448772
  169 +1136 1.47154891832636
  170 +1138 1.47183699189280
  171 +1140 1.47209800955853
  172 +1142 1.47233456778191
  173 +1144 1.47257573473017
  174 +1146 1.47283356711807
  175 +1148 1.47307259446091
  176 +1150 1.47326381831914
  177 +1152 1.47336996150258
  178 +1154 1.47330710459724
  179 +1156 1.47293509477181
  180 +1158 1.47266594765858
  181 +1160 1.47259707273045
  182 +1162 1.47267982619196
  183 +1164 1.47288581951866
  184 +1166 1.47317564562733
  185 +1168 1.47355761342796
  186 +1170 1.47402209612147
  187 +1172 1.47459197223784
  188 +1174 1.47529073492465
  189 +1176 1.47579201984062
  190 +1178 1.47389452829121
  191 +1180 1.46944888964386
  192 +1182 1.46919538008765
  193 +1184 1.46993706618235
  194 +1186 1.47058584953654
  195 +1188 1.47109418040909
  196 +1190 1.47148385016616
  197 +1192 1.47177356227783
  198 +1194 1.47196611004565
  199 +1196 1.47207728619391
  200 +1198 1.47220096862104
  201 +1200 1.47245042725556
  202 +1202 1.47283662225685
  203 +1204 1.47330431122777
  204 +1206 1.47375342391676
  205 +1208 1.47385318037376
  206 +1210 1.47280027515132
  207 +1212 1.47140252001622
  208 +1214 1.47159489093342
  209 +1216 1.47205516262945
  210 +1218 1.47243159969193
  211 +1220 1.47273916940180
  212 +1222 1.47301272972689
  213 +1224 1.47326393439881
  214 +1226 1.47349889542765
  215 +1228 1.47371659199003
  216 +1230 1.47393059180901
  217 +1232 1.47413378656172
  218 +1234 1.47433469964923
  219 +1236 1.47453039235071
  220 +1238 1.47471647903353
  221 +1240 1.47488491964895
  222 +1242 1.47502851521336
  223 +1244 1.47512495593972
  224 +1246 1.47514408931247
  225 +1248 1.47505892212860
  226 +1250 1.47489972136187
  227 +1252 1.47484106680061
  228 +1254 1.47493923662727
  229 +1256 1.47509846252746
  230 +1258 1.47526567770392
  231 +1260 1.47542057167793
  232 +1262 1.47557439533574
  233 +1264 1.47572116951863
  234 +1266 1.47586745130108
  235 +1268 1.47601147334394
  236 +1270 1.47614701936603
  237 +1272 1.47627015399601
  238 +1274 1.47638091039797
  239 +1276 1.47648361938200
  240 +1278 1.47658183373250
  241 +1280 1.47668313548634
  242 +1282 1.47679959880658
  243 +1284 1.47693261142928
  244 +1286 1.47707297484201
  245 +1288 1.47722283448259
  246 +1290 1.47738070554226
  247 +1292 1.47754337420682
  248 +1294 1.47770716341215
  249 +1296 1.47786028165421
  250 +1298 1.47798887584323
  251 +1300 1.47808934206014
  252 +1302 1.47818243145329
  253 +1304 1.47830827158180
  254 +1306 1.47849364056186
  255 +1308 1.47871221118251
  256 +1310 1.47885808674696
  257 +1312 1.47873010242650
  258 +1314 1.47845803582890
  259 +1316 1.47844930632483
  260 +1318 1.47861179184706
  261 +1320 1.47881460317012
  262 +1322 1.47902291732804
  263 +1324 1.47922066571969
  264 +1326 1.47941412833592
  265 +1328 1.47959210849367
  266 +1330 1.47973167816960
  267 +1332 1.47972691925884
  268 +1334 1.47975105896865
  269 +1336 1.47993512250321
  270 +1338 1.48014837613309
  271 +1340 1.48037360725078
  272 +1342 1.48060038757184
  273 +1344 1.48082753333001
  274 +1346 1.48104968129957
  275 +1348 1.48126553234897
  276 +1350 1.48148716441519
  277 +1352 1.48173647624861
  278 +1354 1.48200446828695
  279 +1356 1.48227599517218
  280 +1358 1.48252791950314
  281 +1360 1.48276324869435
  282 +1362 1.48303458306896
  283 +1364 1.48338223264961
  284 +1366 1.48379902481358
  285 +1368 1.48427223592360
  286 +1370 1.48482960284728
  287 +1372 1.48552801978829
  288 +1374 1.48627546417750
  289 +1376 1.48651700069497
  290 +1378 1.48432599213190
  291 +1380 1.47977968972337
  292 +1382 1.47800355097223
  293 +1384 1.47805316502072
  294 +1386 1.47842143243600
  295 +1388 1.47890024839336
  296 +1390 1.47940651645865
  297 +1392 1.47991712903019
  298 +1394 1.48041754934745
  299 +1396 1.48089750917415
  300 +1398 1.48135158724828
  301 +1400 1.48179771126525
  302 +1402 1.48224069922095
  303 +1404 1.48266579602562
  304 +1406 1.48305944158359
  305 +1408 1.48342298716122
  306 +1410 1.48379030750588
  307 +1412 1.48419035949659
  308 +1414 1.48461342812701
  309 +1416 1.48505164072948
  310 +1418 1.48548005566484
  311 +1420 1.48588588173361
  312 +1422 1.48626036521862
  313 +1424 1.48659663343317
  314 +1426 1.48690837523274
  315 +1428 1.48726752634633
  316 +1430 1.48775649947673
  317 +1432 1.48841619746365
  318 +1434 1.48924758721438
  319 +1436 1.49022965011215
  320 +1438 1.49126109208233
  321 +1440 1.49220157896289
  322 +1442 1.49274786168208
  323 +1444 1.49275436842747
  324 +1446 1.49244040803637
  325 +1448 1.49203506779732
  326 +1450 1.49142867984501
  327 +1452 1.49040469923150
  328 +1454 1.48888698396754
  329 +1456 1.48687784303199
  330 +1458 1.48442850436533
  331 +1460 1.48174723159373
  332 +1462 1.47906693249971
  333 +1464 1.47667955286596
  334 +1466 1.47482397028080
  335 +1468 1.47364425598396
  336 +1470 1.47319928261846
  337 +1472 1.47339047699181
  338 +1474 1.47411629804730
  339 +1476 1.47533374680842
  340 +1478 1.47696195971213
  341 +1480 1.47908527215456
  342 +1482 1.48180866451580
  343 +1484 1.48531763958917
  344 +1486 1.48994928684771
  345 +1488 1.49499065429219
  346 +1490 1.50119515596543
  347 +1492 1.50990378628749
  348 +1494 1.51196694565470
  349 +1496 1.44560795826024
  350 +1498 1.41456003179507
  351 +1500 1.42568725767340
  352 +1502 1.43509242814603
  353 +1504 1.44179871660811
  354 +1506 1.44669596130319
  355 +1508 1.45033176716821
  356 +1510 1.45318682655572
  357 +1512 1.45545228048253
  358 +1514 1.45731921509841
  359 +1516 1.45894932377219
  360 +1518 1.46041227592838
  361 +1520 1.46176173499470
  362 +1522 1.46244384736929
  363 +1524 1.46122289585454
  364 +1526 1.46043285810887
  365 +1528 1.46128161485975
  366 +1530 1.46226970833946
  367 +1532 1.46306701307330
  368 +1534 1.46366399954379
  369 +1536 1.46409417910494
  370 +1538 1.46444109535269
  371 +1540 1.46477704752644
  372 +1542 1.46519165698743
  373 +1544 1.46568852566980
  374 +1546 1.46623889292729
  375 +1548 1.46677632998672
  376 +1550 1.46719167293357
  377 +1552 1.46747772804745
  378 +1554 1.46791932189599
  379 +1556 1.46844756268659
  380 +1558 1.46898255634672
  381 +1560 1.46952197034328
  382 +1562 1.46999610489784
  383 +1564 1.47038792635287
  384 +1566 1.47066419723057
  385 +1568 1.47075696992025
  386 +1570 1.47067580679212
  387 +1572 1.47047224204500
  388 +1574 1.47030976437525
  389 +1576 1.47033092176687
  390 +1578 1.47057489703138
  391 +1580 1.47099907306615
  392 +1582 1.47158364170880
  393 +1584 1.47213789972489
  394 +1586 1.47240454856960
  395 +1588 1.47273455527947
  396 +1590 1.47343724065447
  397 +1592 1.47446091811145
  398 +1594 1.47574194447918
  399 +1596 1.47705173230297
  400 +1598 1.47867335885708
  401 +1600 1.48062028756105
  402 +1602 1.48036168324124
  403 +1604 1.47134299168096
  404 +1606 1.45508276794757
  405 +1608 1.45359592019623
  406 +1610 1.45693626090464
  407 +1612 1.45964926448336
  408 +1614 1.46156535264851
  409 +1616 1.46294485069237
  410 +1618 1.46393384687173
  411 +1620 1.46454159062356
  412 +1622 1.46478536173497
  413 +1624 1.46467572345167
  414 +1626 1.46443675069875
  415 +1628 1.46442873304410
  416 +1630 1.46468245393626
  417 +1632 1.46507304958839
  418 +1634 1.46551002264583
  419 +1636 1.46597619450157
  420 +1638 1.46639465048447
  421 +1640 1.46677714745798
  422 +1642 1.46713350654907
  423 +1644 1.46746066478520
  424 +1646 1.46777688897226
  425 +1648 1.46807230212257
  426 +1650 1.46832313178042
  427 +1652 1.46853535477890
  428 +1654 1.46871126235072
  429 +1656 1.46886441952877
  430 +1658 1.46897717842913
  431 +1660 1.46906019325977
  432 +1662 1.46917336129198
  433 +1664 1.46933992968848
  434 +1666 1.46953218537231
  435 +1668 1.46973458666196
  436 +1670 1.46993137012353
  437 +1672 1.47010972990258
  438 +1674 1.47023592719105
  439 +1676 1.47026189453436
  440 +1678 1.47023042790416
  441 +1680 1.47026824213020
  442 +1682 1.47039195163007
  443 +1684 1.47055816296083
  444 +1686 1.47072223030395
  445 +1688 1.47088122473311
  446 +1690 1.47102029360098
  447 +1692 1.47114084717626
  448 +1694 1.47123960018069
  449 +1696 1.47128779153643
  450 +1698 1.47126399416326
  451 +1700 1.47132896383171
  452 +1702 1.47143681802407
  453 +1704 1.47155945773850
  454 +1706 1.47167556592223
  455 +1708 1.47178940246904
  456 +1710 1.47190604771198
  457 +1712 1.47202944260493
  458 +1714 1.47216568678700
  459 +1716 1.47231539851653
  460 +1718 1.47248386890388
  461 +1720 1.47265447525274
  462 +1722 1.47281731074269
  463 +1724 1.47295042900518
  464 +1726 1.47304600716400
  465 +1728 1.47309375883840
  466 +1730 1.47305939547434
  467 +1732 1.47291741773166
  468 +1734 1.47267688996611
  469 +1736 1.47235533806185
  470 +1738 1.47204881790723
  471 +1740 1.47183343980199
  472 +1742 1.47174243401936
  473 +1744 1.47176880507034
  474 +1746 1.47188162854264
  475 +1748 1.47204632190602
  476 +1750 1.47223241396135
  477 +1752 1.47242316015794
  478 +1754 1.47260867420886
  479 +1756 1.47278327809895
  480 +1758 1.47293258838400
  481 +1760 1.47306085751883
  482 +1762 1.47317848011178
  483 +1764 1.47329045336641
  484 +1766 1.47339550159425
  485 +1768 1.47349145470639
  486 +1770 1.47357817480071
  487 +1772 1.47366712599018
  488 +1774 1.47373929846121
  489 +1776 1.47378551120112
  490 +1778 1.47379002011073
  491 +1780 1.47381389620918
  492 +1782 1.47392354891587
  493 +1784 1.47409170003533
  494 +1786 1.47427198188798
  495 +1788 1.47442615650942
  496 +1790 1.47457291909648
  497 +1792 1.47474878427437
  498 +1794 1.47489348470272
  499 +1796 1.47493489892040
  500 +1798 1.47478110512949
  501 +1800 1.47437081445076
  502 +1802 1.47373622085690
  503 +1804 1.47304588258769
  504 +1806 1.47251222749590
  505 +1808 1.47223472657190
  506 +1810 1.47217821063195
  507 +1812 1.47227236503443
  508 +1814 1.47243859996067
  509 +1816 1.47259748640805
  510 +1818 1.47271718154483
  511 +1820 1.47279535803734
  512 +1822 1.47284920630461
  513 +1824 1.47291235631300
  514 +1826 1.47301397376823
  515 +1828 1.47314852957960
  516 +1830 1.47329330162724
  517 +1832 1.47342543709755
  518 +1834 1.47357056562475
  519 +1836 1.47375873628681
  520 +1838 1.47398158101288
  521 +1840 1.47422445263378
  522 +1842 1.47448077748417
  523 +1844 1.47474586805163
  524 +1846 1.47500613122839
  525 +1848 1.47524723874056
  526 +1850 1.47539669943437
  527 +1852 1.47535125830335
  528 +1854 1.47504217493076
  529 +1856 1.47442394463698
  530 +1858 1.47358493716912
  531 +1860 1.47284787021825
  532 +1862 1.47246109965773
  533 +1864 1.47241132718491
  534 +1866 1.47253616431924
  535 +1868 1.47266502935955
  536 +1870 1.47267966566327
  537 +1872 1.47252923128383
  538 +1874 1.47227196419049
  539 +1876 1.47203509622402
  540 +1878 1.47192107290153
  541 +1880 1.47194298711947
  542 +1882 1.47205363793314
  543 +1884 1.47220708298649
  544 +1886 1.47237095289447
  545 +1888 1.47253062677600
  546 +1890 1.47268167466003
  547 +1892 1.47283038859118
  548 +1894 1.47298500841240
  549 +1896 1.47313109785186
  550 +1898 1.47324769232051
  551 +1900 1.47333129201763
  552 +1902 1.47341557098201
  553 +1904 1.47353087942641
  554 +1906 1.47366534069078
  555 +1908 1.47380841038952
  556 +1910 1.47395828541387
  557 +1912 1.47411340271346
  558 +1914 1.47427400000000
  559 +1916 1.47443781042483
  560 +1918 1.47460593444462
  561 +1920 1.47477582054714
  562 +1922 1.47493879861924
  563 +1924 1.47508438695513
  564 +1926 1.47522698209875
  565 +1928 1.47539264822422
  566 +1930 1.47558260671450
  567 +1932 1.47576219402042
  568 +1934 1.47587640732885
  569 +1936 1.47583908582835
  570 +1938 1.47553060901904
  571 +1940 1.47489150443496
  572 +1942 1.47409542930774
  573 +1944 1.47334201979217
  574 +1946 1.47275002485068
  575 +1948 1.47244925775411
  576 +1950 1.47239944627947
  577 +1952 1.47247579265655
  578 +1954 1.47255459735783
  579 +1956 1.47256197135638
  580 +1958 1.47246521668706
  581 +1960 1.47228135320174
  582 +1962 1.47212551111344
  583 +1964 1.47202075140180
  584 +1966 1.47202761573580
  585 +1968 1.47213420575515
  586 +1970 1.47229043240161
  587 +1972 1.47246807810995
  588 +1974 1.47265001716927
  589 +1976 1.47282643638217
  590 +1978 1.47298226071844
  591 +1980 1.47310651432274
  592 +1982 1.47317949653548
  593 +1984 1.47321671851061
  594 +1986 1.47327006170979
  595 +1988 1.47332686296001
  596 +1990 1.47332929557274
  597 +1992 1.47327822607353
  598 +1994 1.47322150680404
  599 +1996 1.47323618581223
  600 +1998 1.47331824302286
  601 +2000 1.47341135456857
  602 +2002 1.47349412728021
  603 +2004 1.47356154386820
  604 +2006 1.47361224775319
  605 +2008 1.47364186456648
  606 +2010 1.47365636042820
  607 +2012 1.47367336928224
  608 +2014 1.47370233665225
  609 +2016 1.47373443692998
  610 +2018 1.47377205797454
  611 +2020 1.47381648358614
  612 +2022 1.47386111301432
  613 +2024 1.47390577969427
  614 +2026 1.47395028817579
  615 +2028 1.47399564538301
  616 +2030 1.47403660265942
  617 +2032 1.47406519767252
  618 +2034 1.47408330994744
  619 +2036 1.47412047010970
  620 +2038 1.47416098226622
  621 +2040 1.47420115643528
  622 +2042 1.47423947043298
  623 +2044 1.47427612941305
  624 +2046 1.47431218419212
  625 +2048 1.47434648116260
  626 +2050 1.47438071427926
  627 +2052 1.47441278409228
  628 +2054 1.47444520616084
  629 +2056 1.47447627049456
  630 +2058 1.47450675882064
  631 +2060 1.47453588733404
  632 +2062 1.47456386702353
  633 +2064 1.47459073458299
  634 +2066 1.47461205370700
  635 +2068 1.47461817299827
  636 +2070 1.47461840283149
  637 +2072 1.47463277175523
  638 +2074 1.47465427880758
  639 +2076 1.47467709152152
  640 +2078 1.47470098997954
  641 +2080 1.47472590140090
  642 +2082 1.47475065118331
  643 +2084 1.47477468067538
  644 +2086 1.47479776494193
  645 +2088 1.47482142195457
  646 +2090 1.47484633615274
  647 +2092 1.47487121877337
  648 +2094 1.47489609572630
  649 +2096 1.47491999718268
  650 +2098 1.47494434691905
  651 +2100 1.47496980619050
  652 +2102 1.47499564254391
  653 +2104 1.47502159030193
  654 +2106 1.47504417582923
  655 +2108 1.47506264533273
  656 +2110 1.47507395400220
  657 +2112 1.47508393678745
  658 +2114 1.47510043049552
  659 +2116 1.47511198378437
  660 +2118 1.47511214568773
  661 +2120 1.47512762848859
  662 +2122 1.47515211305019
  663 +2124 1.47517182375646
  664 +2126 1.47518774789092
  665 +2128 1.47521310826668
  666 +2130 1.47524116489652
  667 +2132 1.47527005212030
  668 +2134 1.47529590535418
  669 +2136 1.47531935031383
  670 +2138 1.47534209120029
  671 +2140 1.47536554624085
  672 +2142 1.47539141048574
  673 +2144 1.47541735186985
  674 +2146 1.47544449187503
  675 +2148 1.47547342544397
  676 +2150 1.47550619668115
  677 +2152 1.47554178363426
  678 +2154 1.47558203516447
  679 +2156 1.47562160093130
  680 +2158 1.47565253763469
  681 +2160 1.47566151568534
  682 +2162 1.47561225894049
  683 +2164 1.47548068559088
  684 +2166 1.47537296738995
  685 +2168 1.47536211403117
  686 +2170 1.47539890926361
  687 +2172 1.47544656614673
  688 +2174 1.47549197749543
  689 +2176 1.47553203213436
  690 +2178 1.47556864358705
  691 +2180 1.47560215753198
  692 +2182 1.47562464470162
  693 +2184 1.47562085582639
  694 +2186 1.47558980476200
  695 +2188 1.47557480988891
  696 +2190 1.47558033450347
  697 +2192 1.47559232749770
  698 +2194 1.47561457143455
  699 +2196 1.47564434139990
  700 +2198 1.47567857523082
  701 +2200 1.47571617803152
  702 +2202 1.47575726786490
  703 +2204 1.47579337721307
  704 +2206 1.47579746772491
  705 +2208 1.47574189594736
  706 +2210 1.47571194854898
  707 +2212 1.47572956986763
  708 +2214 1.47575472007504
  709 +2216 1.47578621163266
  710 +2218 1.47581942101129
  711 +2220 1.47585088742314
  712 +2222 1.47587897173469
  713 +2224 1.47590298856875
  714 +2226 1.47592470046514
  715 +2228 1.47594779372938
  716 +2230 1.47597265137572
  717 +2232 1.47599748726300
  718 +2234 1.47601807246604
  719 +2236 1.47602689076481
  720 +2238 1.47603005518190
  721 +2240 1.47604281703214
  722 +2242 1.47606726159445
  723 +2244 1.47609784881235
  724 +2246 1.47612902016881
  725 +2248 1.47615949406397
  726 +2250 1.47618852095385
  727 +2252 1.47621446243625
  728 +2254 1.47623489680521
  729 +2256 1.47624408046323
  730 +2258 1.47623018458297
  731 +2260 1.47617742404058
  732 +2262 1.47611228816094
  733 +2264 1.47608500995198
  734 +2266 1.47609867784140
  735 +2268 1.47612909924113
  736 +2270 1.47616476482454
  737 +2272 1.47619947439469
  738 +2274 1.47623253066542
  739 +2276 1.47626319551276
  740 +2278 1.47628200368923
  741 +2280 1.47626680426481
  742 +2282 1.47624376410414
  743 +2284 1.47624714378783
  744 +2286 1.47623939342228
  745 +2288 1.47622263640102
  746 +2290 1.47621701248520
  747 +2292 1.47622414847935
  748 +2294 1.47624639786310
  749 +2296 1.47628230617739
  750 +2298 1.47632637399547
  751 +2300 1.47637356620751
  752 +2302 1.47642523943489
  753 +2304 1.47647814675017
  754 +2306 1.47652996718143
  755 +2308 1.47657059295077
  756 +2310 1.47656605147736
  757 +2312 1.47646451238365
  758 +2314 1.47632139830172
  759 +2316 1.47626434895975
  760 +2318 1.47628666976549
  761 +2320 1.47634178441866
  762 +2322 1.47640626197946
  763 +2324 1.47647367980355
  764 +2326 1.47654420112269
  765 +2328 1.47661693748934
  766 +2330 1.47668220577778
  767 +2332 1.47670897421522
  768 +2334 1.47661953024202
  769 +2336 1.47640699456743
  770 +2338 1.47628918090598
  771 +2340 1.47627922381635
  772 +2342 1.47629610568572
  773 +2344 1.47633775742674
  774 +2346 1.47639668853055
  775 +2348 1.47645464076621
  776 +2350 1.47650252320800
  777 +2352 1.47653396769864
  778 +2354 1.47655188224605
  779 +2356 1.47656625779288
  780 +2358 1.47656342537266
  781 +2360 1.47646841808416
  782 +2362 1.47627988649258
  783 +2364 1.47623361007945
  784 +2366 1.47628349602868
  785 +2368 1.47634714131595
  786 +2370 1.47640579435613
  787 +2372 1.47645673781608
  788 +2374 1.47650329311272
  789 +2376 1.47654473856361
  790 +2378 1.47658519751564
  791 +2380 1.47662360662062
  792 +2382 1.47665509133976
  793 +2384 1.47667939867421
  794 +2386 1.47668999377568
  795 +2388 1.47666832266751
  796 +2390 1.47662551968266
  797 +2392 1.47661227607686
  798 +2394 1.47662326945870
  799 +2396 1.47664538468599
  800 +2398 1.47667621017793
  801 +2400 1.47670840326370
  802 +2402 1.47673732384369
  803 +2404 1.47676080113293
  804 +2406 1.47677566835384
  805 +2408 1.47677747426079
  806 +2410 1.47675773033081
  807 +2412 1.47671176533526
  808 +2414 1.47665898774225
  809 +2416 1.47662888566870
  810 +2418 1.47661609885311
  811 +2420 1.47661804906686
  812 +2422 1.47663361079607
  813 +2424 1.47665615258179
  814 +2426 1.47667989702189
  815 +2428 1.47670167875450
  816 +2430 1.47671889251986
  817 +2432 1.47672660033007
  818 +2434 1.47672581905542
  819 +2436 1.47673588691547
  820 +2438 1.47675625346807
  821 +2440 1.47677811479011
  822 +2442 1.47680201299431
  823 +2444 1.47682690323960
  824 +2446 1.47685134280847
  825 +2448 1.47687468838441
  826 +2450 1.47689577948214
  827 +2452 1.47691461221252
  828 +2454 1.47693121483650
  829 +2456 1.47694483659804
  830 +2458 1.47695706614166
  831 +2460 1.47696841245298
  832 +2462 1.47698092980728
  833 +2464 1.47699165258073
  834 +2466 1.47699892231642
  835 +2468 1.47700518850467
  836 +2470 1.47701681917772
  837 +2472 1.47703371133993
  838 +2474 1.47705172804537
  839 +2476 1.47706963205611
  840 +2478 1.47708839046513
  841 +2480 1.47710595182822
  842 +2482 1.47712353018048
  843 +2484 1.47714045399508
  844 +2486 1.47715526898974
  845 +2488 1.47716785931325
  846 +2490 1.47717746351979
  847 +2492 1.47718774105152
  848 +2494 1.47720108087222
  849 +2496 1.47721116876733
  850 +2498 1.47720908793559
  851 +2500 1.47721975153658
  852 +2502 1.47724153102797
  853 +2504 1.47726842063502
  854 +2506 1.47729164115863
  855 +2508 1.47729793164711
  856 +2510 1.47728751673010
  857 +2512 1.47728595976167
  858 +2514 1.47730346177822
  859 +2516 1.47732866245654
  860 +2518 1.47735480680865
  861 +2520 1.47737778321487
  862 +2522 1.47739640465051
  863 +2524 1.47741388745850
  864 +2526 1.47743674344455
  865 +2528 1.47746686662636
  866 +2530 1.47749859543051
  867 +2532 1.47752798101785
  868 +2534 1.47755196992726
  869 +2536 1.47757059463727
  870 +2538 1.47758008928483
  871 +2540 1.47756988987874
  872 +2542 1.47755427512999
  873 +2544 1.47756361259663
  874 +2546 1.47758639316885
  875 +2548 1.47760210701986
  876 +2550 1.47761136589934
  877 +2552 1.47762359682751
  878 +2554 1.47764677677048
  879 +2556 1.47767474710701
  880 +2558 1.47770246497527
  881 +2560 1.47773042785198
  882 +2562 1.47776361629940
  883 +2564 1.47779998470837
  884 +2566 1.47783821733131
  885 +2568 1.47787806111451
  886 +2570 1.47792064098960
  887 +2572 1.47796488547863
  888 +2574 1.47800956216730
  889 +2576 1.47805314833494
  890 +2578 1.47809883475004
  891 +2580 1.47814186001493
  892 +2582 1.47815997256423
  893 +2584 1.47809360441189
  894 +2586 1.47790866325303
  895 +2588 1.47773400000000
  896 +2590 1.47767480433235
  897 +2592 1.47770364229106
  898 +2594 1.47776662663767
  899 +2596 1.47783459041379
  900 +2598 1.47789713249225
  901 +2600 1.47795076443856
  902 +2602 1.47798212010995
  903 +2604 1.47796839500240
  904 +2606 1.47793022585363
  905 +2608 1.47793384355028
  906 +2610 1.47794564701586
  907 +2612 1.47795047312967
  908 +2614 1.47797539539217
  909 +2616 1.47801274460181
  910 +2618 1.47805108460942
  911 +2620 1.47808604011951
  912 +2622 1.47811663248782
  913 +2624 1.47814577420760
  914 +2626 1.47817100891022
  915 +2628 1.47819185746701
  916 +2630 1.47820200756835
  917 +2632 1.47819509341812
  918 +2634 1.47818069648523
  919 +2636 1.47819937787229
  920 +2638 1.47823535219485
  921 +2640 1.47827081637876
  922 +2642 1.47830404351228
  923 +2644 1.47832995386373
  924 +2646 1.47835243329009
  925 +2648 1.47837673632241
  926 +2650 1.47840422324866
  927 +2652 1.47843503880664
  928 +2654 1.47846525754672
  929 +2656 1.47849229804531
  930 +2658 1.47851619218461
  931 +2660 1.47854228554823
  932 +2662 1.47857183053155
  933 +2664 1.47860675830984
  934 +2666 1.47864502580642
  935 +2668 1.47868442524625
  936 +2670 1.47871645234617
  937 +2672 1.47872844710197
  938 +2674 1.47874644966096
  939 +2676 1.47878367512841
  940 +2678 1.47882577091271
  941 +2680 1.47886734102623
  942 +2682 1.47890576030499
  943 +2684 1.47894410487476
  944 +2686 1.47898246676081
  945 +2688 1.47902078634990
  946 +2690 1.47905697663379
  947 +2692 1.47909348635787
  948 +2694 1.47913253241860
  949 +2696 1.47917713682535
  950 +2698 1.47922494363690
  951 +2700 1.47927370219512
  952 +2702 1.47932350132184
  953 +2704 1.47937477829841
  954 +2706 1.47942977955203
  955 +2708 1.47948662996503
  956 +2710 1.47954572465315
  957 +2712 1.47960899951982
  958 +2714 1.47967582145469
  959 +2716 1.47974783424700
  960 +2718 1.47982686383801
  961 +2720 1.47991434869689
  962 +2722 1.48001161889876
  963 +2724 1.48011529035864
  964 +2726 1.48021743640732
  965 +2728 1.48029271013490
  966 +2730 1.48028469924544
  967 +2732 1.48009333694647
  968 +2734 1.47968604519118
  969 +2736 1.47926069770098
  970 +2738 1.47904382199068
  971 +2740 1.47903137276969
  972 +2742 1.47912234371550
  973 +2744 1.47924475242006
  974 +2746 1.47936896123536
  975 +2748 1.47948547683776
  976 +2750 1.47959346670195
  977 +2752 1.47969391424782
  978 +2754 1.47978696270901
  979 +2756 1.47987478298896
  980 +2758 1.47995758449142
  981 +2760 1.48003727324589
  982 +2762 1.48011924219933
  983 +2764 1.48019913384442
  984 +2766 1.48027922637338
  985 +2768 1.48035769798330
  986 +2770 1.48043385800477
  987 +2772 1.48050725415469
  988 +2774 1.48057567058368
  989 +2776 1.48065105935983
  990 +2778 1.48072266299449
  991 +2780 1.48079977415031
  992 +2782 1.48088053164822
  993 +2784 1.48096687278145
  994 +2786 1.48105512159158
  995 +2788 1.48114937559786
  996 +2790 1.48124466747644
  997 +2792 1.48134118881539
  998 +2794 1.48144014454067
  999 +2796 1.48153308521599
  1000 +2798 1.48162875830237
  1001 +2800 1.48173023207917
  1002 +2802 1.48183567152155
  1003 +2804 1.48193764434860
  1004 +2806 1.48203772197889
  1005 +2808 1.48213332822876
  1006 +2810 1.48221893030834
  1007 +2812 1.48230128068059
  1008 +2814 1.48241543210576
  1009 +2816 1.48256188329700
  1010 +2818 1.48272146386266
  1011 +2820 1.48288593713105
  1012 +2822 1.48303146156846
  1013 +2824 1.48316535466125
  1014 +2826 1.48333287967432
  1015 +2828 1.48353886468435
  1016 +2830 1.48376233940652
  1017 +2832 1.48399372362724
  1018 +2834 1.48422859660869
  1019 +2836 1.48446914811588
  1020 +2838 1.48472335986644
  1021 +2840 1.48498891752954
  1022 +2842 1.48526978967144
  1023 +2844 1.48556244410920
  1024 +2846 1.48585030113417
  1025 +2848 1.48611635747129
  1026 +2850 1.48631703683473
  1027 +2852 1.48642616794096
  1028 +2854 1.48638931900690
  1029 +2856 1.48617288132870
  1030 +2858 1.48578055258264
  1031 +2860 1.48528254616381
  1032 +2862 1.48477473720320
  1033 +2864 1.48431306898547
  1034 +2866 1.48390294869478
  1035 +2868 1.48352758708888
  1036 +2870 1.48315923324289
  1037 +2872 1.48276317318322
  1038 +2874 1.48233036174381
  1039 +2876 1.48190033197863
  1040 +2878 1.48156989857095
  1041 +2880 1.48135829837939
  1042 +2882 1.48127046426508
  1043 +2884 1.48129224687463
  1044 +2886 1.48142276034719
  1045 +2888 1.48166152381514
  1046 +2890 1.48199469355260
  1047 +2892 1.48241286263108
  1048 +2894 1.48290615618025
  1049 +2896 1.48346174779728
  1050 +2898 1.48406068695481
  1051 +2900 1.48469749104873
  1052 +2902 1.48534901849277
  1053 +2904 1.48600451268347
  1054 +2906 1.48663330502903
  1055 +2908 1.48716049340272
  1056 +2910 1.48749427432860
  1057 +2912 1.48745634999468
  1058 +2914 1.48687918789111
  1059 +2916 1.48564647709805
  1060 +2918 1.48378138421067
  1061 +2920 1.48160842259702
  1062 +2922 1.47963902212310
  1063 +2924 1.47817563267450
  1064 +2926 1.47725366173650
  1065 +2928 1.47680009878321
  1066 +2930 1.47670600337876
  1067 +2932 1.47683592850229
  1068 +2934 1.47707848906770
  1069 +2936 1.47736368012666
  1070 +2938 1.47761998820843
  1071 +2940 1.47780991969196
  1072 +2942 1.47790616610153
  1073 +2944 1.47789352215007
  1074 +2946 1.47776642994662
  1075 +2948 1.47755303644224
  1076 +2950 1.47732098571495
  1077 +2952 1.47710982305520
  1078 +2954 1.47692656410946
  1079 +2956 1.47677865708199
  1080 +2958 1.47664389769752
  1081 +2960 1.47653950030308
  1082 +2962 1.47652380859929
  1083 +2964 1.47671143784641
  1084 +2966 1.47706590558488
  1085 +2968 1.47742684312635
  1086 +2970 1.47770009243870
  1087 +2972 1.47786247321149
  1088 +2974 1.47794741384886
  1089 +2976 1.47797899370123
  1090 +2978 1.47798223648454
  1091 +2980 1.47795004028588
  1092 +2982 1.47790147416153
  1093 +2984 1.47795735389707
  1094 +2986 1.47814496927765
  1095 +2988 1.47844692443850
  1096 +2990 1.47884918651108
  1097 +2992 1.47932344250011
  1098 +2994 1.47986306802417
  1099 +2996 1.48043188046815
  1100 +2998 1.48097537656156
  1101 +3000 1.48138517100778
  1102 +3002 1.48162356419426
  1103 +3004 1.48185212024737
  1104 +3006 1.48228440440630
  1105 +3008 1.48297178567222
  1106 +3010 1.48385673952528
  1107 +3012 1.48487993544870
  1108 +3014 1.48595665242293
  1109 +3016 1.48695938009756
  1110 +3018 1.48767468298278
  1111 +3020 1.48765524108674
  1112 +3022 1.48618132554454
  1113 +3024 1.48268461964750
  1114 +3026 1.47762082421352
  1115 +3028 1.47232727506644
  1116 +3030 1.46776463943145
  1117 +3032 1.46440878935946
  1118 +3034 1.46247197560802
  1119 +3036 1.46196769309556
  1120 +3038 1.46253947223186
  1121 +3040 1.46367382189299
  1122 +3042 1.46491417717244
  1123 +3044 1.46601563099238
  1124 +3046 1.46697686500990
  1125 +3048 1.46781464802766
  1126 +3050 1.46847402904648
  1127 +3052 1.46887853308036
  1128 +3054 1.46895675121188
  1129 +3056 1.46875323941201
  1130 +3058 1.46834302704055
  1131 +3060 1.46771282666113
  1132 +3062 1.46675300487368
  1133 +3064 1.46553703632205
  1134 +3066 1.46435734374414
  1135 +3068 1.46364333274111
  1136 +3070 1.46361967631567
  1137 +3072 1.46416270683630
  1138 +3074 1.46500589551713
  1139 +3076 1.46593266001109
  1140 +3078 1.46681497080407
  1141 +3080 1.46754108115619
  1142 +3082 1.46785690887919
  1143 +3084 1.46726760945338
  1144 +3086 1.46533247163430
  1145 +3088 1.46268292062625
  1146 +3090 1.46120303549580
  1147 +3092 1.46134478479294
  1148 +3094 1.46221369798373
  1149 +3096 1.46321247938499
  1150 +3098 1.46411661764251
  1151 +3100 1.46482369285261
  1152 +3102 1.46525636685728
  1153 +3104 1.46533581524600
  1154 +3106 1.46519098442260
  1155 +3108 1.46516907412280
  1156 +3110 1.46538060689336
  1157 +3112 1.46568276755924
  1158 +3114 1.46596931336371
  1159 +3116 1.46619739482536
  1160 +3118 1.46639101964608
  1161 +3120 1.46661054944789
  1162 +3122 1.46687049156442
  1163 +3124 1.46713909721892
  1164 +3126 1.46740251735782
  1165 +3128 1.46765965900548
  1166 +3130 1.46790595336806
  1167 +3132 1.46813448944673
  1168 +3134 1.46834723054744
  1169 +3136 1.46854553575727
  1170 +3138 1.46872578997706
  1171 +3140 1.46889606787041
  1172 +3142 1.46905361684206
  1173 +3144 1.46920788445114
  1174 +3146 1.46935155893370
  1175 +3148 1.46948926642375
  1176 +3150 1.46961711994727
  1177 +3152 1.46973932284344
  1178 +3154 1.46985771524525
  1179 +3156 1.46997084147302
  1180 +3158 1.47008125375275
  1181 +3160 1.47018834504960
  1182 +3162 1.47028749194193
  1183 +3164 1.47037561555632
  1184 +3166 1.47044733671974
  1185 +3168 1.47049523638823
  1186 +3170 1.47053287904761
  1187 +3172 1.47059397007388
  1188 +3174 1.47068028883230
  1189 +3176 1.47077100092966
  1190 +3178 1.47085834352883
  1191 +3180 1.47094237966502
  1192 +3182 1.47102127140257
  1193 +3184 1.47109691171596
  1194 +3186 1.47116815404231
  1195 +3188 1.47123618567128
  1196 +3190 1.47130184743484
  1197 +3192 1.47136511381017
  1198 +3194 1.47142734846007
  1199 +3196 1.47148851688128
  1200 +3198 1.47154755038698
  1201 +3200 1.47160533014890
  1202 +3202 1.47166012795457
  1203 +3204 1.47171224992608
  1204 +3206 1.47176315489772
  1205 +3208 1.47181395071669
  1206 +3210 1.47186466789480
  1207 +3212 1.47191661577937
  1208 +3214 1.47196738520913
  1209 +3216 1.47201707857991
  1210 +3218 1.47206588870145
  1211 +3220 1.47211365240659
  1212 +3222 1.47215936522226
  1213 +3224 1.47220500735251
  1214 +3226 1.47225033231421
  1215 +3228 1.47229424065224
  1216 +3230 1.47233733691715
  1217 +3232 1.47237980638024
  1218 +3234 1.47242122252104
  1219 +3236 1.47246173766460
  1220 +3238 1.47250090500984
  1221 +3240 1.47253933121953
  1222 +3242 1.47257666559418
  1223 +3244 1.47261289353408
  1224 +3246 1.47264942225475
  1225 +3248 1.47268468000033
  1226 +3250 1.47271896562139
  1227 +3252 1.47275329822459
  1228 +3254 1.47278723826016
  1229 +3256 1.47281957643892
  1230 +3258 1.47285086138010
  1231 +3260 1.47288192451579
  1232 +3262 1.47291300000000
  1233 +3264 1.47294399234620
  1234 +3266 1.47297519999867
  1235 +3268 1.47300456597122
  1236 +3270 1.47303306949960
  1237 +3272 1.47306229798834
  1238 +3274 1.47309029819990
  1239 +3276 1.47311725100397
  1240 +3278 1.47314519229524
  1241 +3280 1.47317191831342
  1242 +3282 1.47319904835607
  1243 +3284 1.47322480511295
  1244 +3286 1.47325068033533
  1245 +3288 1.47327558727819
  1246 +3290 1.47330149637565
  1247 +3292 1.47332523279087
  1248 +3294 1.47335025198767
  1249 +3296 1.47337510971327
  1250 +3298 1.47339905996618
  1251 +3300 1.47342296954304
  1252 +3302 1.47344582202335
  1253 +3304 1.47346658074592
  1254 +3306 1.47348738493031
  1255 +3308 1.47350703202034
  1256 +3310 1.47352683574489
  1257 +3312 1.47354755048152
  1258 +3314 1.47356829450234
  1259 +3316 1.47358903215508
  1260 +3318 1.47360880465673
  1261 +3320 1.47362855417648
  1262 +3322 1.47364734936801
  1263 +3324 1.47366547803442
  1264 +3326 1.47368305009043
  1265 +3328 1.47369959979993
  1266 +3330 1.47371718446385
  1267 +3332 1.47373378124277
  1268 +3334 1.47375068696817
  1269 +3336 1.47376844875514
  1270 +3338 1.47378666053286
  1271 +3340 1.47380404591194
  1272 +3342 1.47382276516742
  1273 +3344 1.47384040963255
  1274 +3346 1.47385904663877
  1275 +3348 1.47387858239480
  1276 +3350 1.47389752320424
  1277 +3352 1.47391752328576
  1278 +3354 1.47393606713734
  1279 +3356 1.47395488874822
  1280 +3358 1.47397353990369
  1281 +3360 1.47399234620080
  1282 +3362 1.47401055721405
  1283 +3364 1.47402826981442
  1284 +3366 1.47404508175359
  1285 +3368 1.47406141829832
  1286 +3370 1.47407704342040
  1287 +3372 1.47409059132764
  1288 +3374 1.47410503032631
  1289 +3376 1.47411782704824
  1290 +3378 1.47413081528590
  1291 +3380 1.47414326557675
  1292 +3382 1.47415571156753
  1293 +3384 1.47416717298263
  1294 +3386 1.47417841575972
  1295 +3388 1.47418915024028
  1296 +3390 1.47419998707473
  1297 +3392 1.47421190062571
  1298 +3394 1.47422443429139
  1299 +3396 1.47423683452363
  1300 +3398 1.47425033505022
  1301 +3400 1.47426480528893
  1302 +3402 1.47427826680738
  1303 +3404 1.47429170418534
  1304 +3406 1.47430477066294
  1305 +3408 1.47431835512023
  1306 +3410 1.47433193595530
  1307 +3412 1.47434642118416
  1308 +3414 1.47436087920127
  1309 +3416 1.47437532634686
  1310 +3418 1.47439018109776
  1311 +3420 1.47440515622779
  1312 +3422 1.47442044328205
  1313 +3424 1.47443606103306
  1314 +3426 1.47444964436527
  1315 +3428 1.47446294847254
  1316 +3430 1.47447439134230
  1317 +3432 1.47448416869267
  1318 +3434 1.47449072019392
  1319 +3436 1.47449591374259
  1320 +3438 1.47449903792179
  1321 +3440 1.47449993449953
  1322 +3442 1.47450135456237
  1323 +3444 1.47450458795612
  1324 +3446 1.47450875108451
  1325 +3448 1.47451445884208
  1326 +3450 1.47452484258401
  1327 +3452 1.47453827241797
  1328 +3454 1.47455172262247
  1329 +3456 1.47456517206426
  1330 +3458 1.47457860151852
  1331 +3460 1.47459192059468
  1332 +3462 1.47460450298261
  1333 +3464 1.47461696547474
  1334 +3466 1.47462839859281
  1335 +3468 1.47463987388367
  1336 +3470 1.47465188200346
  1337 +3472 1.47466266389847
  1338 +3474 1.47467409691578
  1339 +3476 1.47468473670609
  1340 +3478 1.47469608306209
  1341 +3480 1.47470752002888
  1342 +3482 1.47471885889080
  1343 +3484 1.47473141107054
  1344 +3486 1.47474321664113
  1345 +3488 1.47475540477105
  1346 +3490 1.47476577603289
  1347 +3492 1.47477517654069
  1348 +3494 1.47478437686762
  1349 +3496 1.47479375265910
  1350 +3498 1.47480352784050
  1351 +3500 1.47481386454326
  1352 +3502 1.47482540254891
  1353 +3504 1.47483686546170
  1354 +3506 1.47484922964243
  1355 +3508 1.47486054239155
  1356 +3510 1.47487118057395
  1357 +3512 1.47488161773392
  1358 +3514 1.47489155648764
  1359 +3516 1.47489779215940
  1360 +3518 1.47490199751604
  1361 +3520 1.47490515212000
  1362 +3522 1.47490858576642
  1363 +3524 1.47491589352572
  1364 +3526 1.47492563809847
  1365 +3528 1.47493721829251
  1366 +3530 1.47494965183138
  1367 +3532 1.47496209482301
  1368 +3534 1.47497548127118
  1369 +3536 1.47498901026331
  1370 +3538 1.47500250064110
  1371 +3540 1.47501334375007
  1372 +3542 1.47502155988466
  1373 +3544 1.47502590855583
  1374 +3546 1.47502798788122
  1375 +3548 1.47502908741446
  1376 +3550 1.47503013111600
  1377 +3552 1.47503152066431
  1378 +3554 1.47503369017078
  1379 +3556 1.47503596161309
  1380 +3558 1.47503994401260
  1381 +3560 1.47504720780187
  1382 +3562 1.47505757685400
  1383 +3564 1.47506921753979
  1384 +3566 1.47508222835820
  1385 +3568 1.47509583612677
  1386 +3570 1.47510943592653
  1387 +3572 1.47512299244722
  1388 +3574 1.47513544229862
  1389 +3576 1.47514788646150
  1390 +3578 1.47515877336465
  1391 +3580 1.47516830010454
  1392 +3582 1.47517301097796
  1393 +3584 1.47516730096467
  1394 +3586 1.47516098788624
  1395 +3588 1.47515999912529
  1396 +3590 1.47516344979552
  1397 +3592 1.47516995891151
  1398 +3594 1.47517893497533
  1399 +3596 1.47518949533554
  1400 +3598 1.47519986950803
  1401 +3600 1.47520815315630
  1402 +3602 1.47521639684906
  1403 +3604 1.47522677803691
  1404 +3606 1.47523756307109
  1405 +3608 1.47524905817071
  1406 +3610 1.47526235394740
  1407 +3612 1.47527689090454
  1408 +3614 1.47529241512157
  1409 +3616 1.47530577596310
  1410 +3618 1.47531550675526
  1411 +3620 1.47531807217956
  1412 +3622 1.47531330897623
  1413 +3624 1.47530520668685
  1414 +3626 1.47530099713781
  1415 +3628 1.47530419555884
  1416 +3630 1.47531292297539
  1417 +3632 1.47532682994681
  1418 +3634 1.47534230166646
  1419 +3636 1.47535817866622
  1420 +3638 1.47537270802382
  1421 +3640 1.47538306617453
  1422 +3642 1.47538491013479
  1423 +3644 1.47537808441815
  1424 +3646 1.47536152773521
  1425 +3648 1.47533829820411
  1426 +3650 1.47531127187157
  1427 +3652 1.47528831452931
  1428 +3654 1.47527173292062
  1429 +3656 1.47526400688559
  1430 +3658 1.47526538002071
  1431 +3660 1.47527196497124
  1432 +3662 1.47528332467912
  1433 +3664 1.47529547167214
  1434 +3666 1.47530792033597
  1435 +3668 1.47531940264238
  1436 +3670 1.47532950934428
  1437 +3672 1.47533752543273
  1438 +3674 1.47534264633859
  1439 +3676 1.47534493660391
  1440 +3678 1.47534793834948
  1441 +3680 1.47535101048592
  1442 +3682 1.47535512741537
  1443 +3684 1.47536061029192
  1444 +3686 1.47536677517540
  1445 +3688 1.47537422152313
  1446 +3690 1.47538349069671
  1447 +3692 1.47539466802181
  1448 +3694 1.47540614815786
  1449 +3696 1.47541766757740
  1450 +3698 1.47543103564364
  1451 +3700 1.47544309274752
  1452 +3702 1.47545168948545
  1453 +3704 1.47545396563826
  1454 +3706 1.47545207507319
  1455 +3708 1.47544797484465
  1456 +3710 1.47544704753668
  1457 +3712 1.47545189667326
  1458 +3714 1.47545995926878
  1459 +3716 1.47547095072698
  1460 +3718 1.47548066602429
  1461 +3720 1.47548697893292
  1462 +3722 1.47548796009613
  1463 +3724 1.47548478177503
  1464 +3726 1.47547947641639
  1465 +3728 1.47547863259801
  1466 +3730 1.47548174475524
  1467 +3732 1.47548778078125
  1468 +3734 1.47549403635331
  1469 +3736 1.47550125363908
  1470 +3738 1.47550934180435
  1471 +3740 1.47551683167599
  1472 +3742 1.47552688594006
  1473 +3744 1.47553729090548
  1474 +3746 1.47554678198008
  1475 +3748 1.47555713325216
  1476 +3750 1.47556659302775
  1477 +3752 1.47557669459374
  1478 +3754 1.47558647315562
  1479 +3756 1.47559529768016
  1480 +3758 1.47560360009648
  1481 +3760 1.47561091508282
  1482 +3762 1.47561609735508
  1483 +3764 1.47562029070796
  1484 +3766 1.47562441780911
  1485 +3768 1.47563306550754
  1486 +3770 1.47564405166112
  1487 +3772 1.47565552291783
  1488 +3774 1.47566694809298
  1489 +3776 1.47567830857219
  1490 +3778 1.47568755133462
  1491 +3780 1.47569463620025
  1492 +3782 1.47569547492168
  1493 +3784 1.47568951387041
  1494 +3786 1.47567835935080
  1495 +3788 1.47566593929693
  1496 +3790 1.47566101977927
  1497 +3792 1.47566354952827
  1498 +3794 1.47567185732029
  1499 +3796 1.47568321348889
  1500 +3798 1.47569529254648
  1501 +3800 1.47570772530959
  1502 +3802 1.47571809962768
  1503 +3804 1.47572648401529
  1504 +3806 1.47573134192597
  1505 +3808 1.47573352027040
  1506 +3810 1.47573292361008
  1507 +3812 1.47573299326894
  1508 +3814 1.47573398673360
  1509 +3816 1.47573817632205
  1510 +3818 1.47574527524272
  1511 +3820 1.47575277086820
  1512 +3822 1.47575967350287
  1513 +3824 1.47576470303911
  1514 +3826 1.47576975528735
  1515 +3828 1.47577698612879
  1516 +3830 1.47578309783396
  1517 +3832 1.47578829704916
  1518 +3834 1.47579095824278
  1519 +3836 1.47578839924332
  1520 +3838 1.47578153880935
  1521 +3840 1.47577325828602
  1522 +3842 1.47576695658169
  1523 +3844 1.47576181472562
  1524 +3846 1.47575638975092
  1525 +3848 1.47574893511221
  1526 +3850 1.47574067656252
  1527 +3852 1.47573418960490
  1528 +3854 1.47573201348304
  1529 +3856 1.47573609448654
  1530 +3858 1.47574340076582
  1531 +3860 1.47575406506568
  1532 +3862 1.47576509594980
  1533 +3864 1.47577344240290
  1534 +3866 1.47577782298125
  1535 +3868 1.47577704417063
  1536 +3870 1.47576978782061
  1537 +3872 1.47576167888626
  1538 +3874 1.47575983530599
  1539 +3876 1.47576615931522
  1540 +3878 1.47577603616264
  1541 +3880 1.47578749602566
  1542 +3882 1.47579899049744
  1543 +3884 1.47580829754193
  1544 +3886 1.47581553191111
  1545 +3888 1.47582044576450
  1546 +3890 1.47582361486597
  1547 +3892 1.47582488670530
  1548 +3894 1.47582691190401
  1549 +3896 1.47582798767520
  1550 +3898 1.47583005776107
  1551 +3900 1.47583333559154
  1552 +3902 1.47583798052018
  1553 +3904 1.47584349792097
  1554 +3906 1.47584878503057
  1555 +3908 1.47585104104660
  1556 +3910 1.47584786442429
  1557 +3912 1.47584503864650
  1558 +3914 1.47584772763597
  1559 +3916 1.47585513011730
  1560 +3918 1.47586161194681
  1561 +3920 1.47586680114244
  1562 +3922 1.47586801742881
  1563 +3924 1.47586285228063
  1564 +3926 1.47585768990955
  1565 +3928 1.47585725672200
  1566 +3930 1.47586502926929
  1567 +3932 1.47587638834149
  1568 +3934 1.47588758559686
  1569 +3936 1.47589600406114
  1570 +3938 1.47590331354213
  1571 +3940 1.47591060804636
  1572 +3942 1.47591789591720
  1573 +3944 1.47592457142526
  1574 +3946 1.47593081059303
  1575 +3948 1.47593398581283
  1576 +3950 1.47593295565452
  1577 +3952 1.47592878275285
  1578 +3954 1.47592684349640
  1579 +3956 1.47592986168501
  1580 +3958 1.47593628896516
  1581 +3960 1.47594351825970
  1582 +3962 1.47595186222678
  1583 +3964 1.47595911320580
  1584 +3966 1.47596854991323
  1585 +3968 1.47597712871599
  1586 +3970 1.47598746992252
  1587 +3972 1.47600004422535
  1588 +3974 1.47601337421929
  1589 +3976 1.47602692154134
  1590 +3978 1.47603405627977
  1591 +3980 1.47602817354059
  1592 +3982 1.47601874488156
  1593 +3984 1.47602563707167
  1594 +3986 1.47604367443527
  1595 +3988 1.47606327560645
  1596 +3990 1.47608304122308
  1597 +3992 1.47610269526207
  1598 +3994 1.47612262206064
  1599 +3996 1.47614078459134
  1600 +3998 1.47615752083133
1601 4000 1.47617133599432 1601 4000 1.47617133599432
1602 \ No newline at end of file 1602 \ No newline at end of file
1 -#ifndef GLOBALS_H  
2 -#define GLOBALS_H  
3 -  
4 -#include <vector>  
5 -#include <string>  
6 -#include <iostream>  
7 -#include "PerformanceData.h"  
8 -#include <complex>  
9 -using namespace std;  
10 -  
11 -typedef float rtsFloat;  
12 -  
13 -struct SpecPair{  
14 - double nu;  
15 - double A;  
16 -};  
17 -  
18 -struct Material{  
19 - vector<double> nu;  
20 - vector<complex<double> > eta;  
21 - string name;  
22 -};  
23 -  
24 -enum SpecType {AbsorbanceSpecType, IntensitySpecType};  
25 -enum OpticsType {TransmissionOpticsType, ReflectionOpticsType};  
26 -  
27 -extern PerformanceData PD;  
28 -  
29 -  
30 -extern vector<vector<SpecPair> > RefSpectrum;  
31 -extern int currentSpec;  
32 -extern vector<SpecPair> SimSpectrum;  
33 -  
34 -//IO Functions  
35 -vector<SpecPair> LoadSpectrum(string filename);  
36 -vector<SpecPair> SetReferenceSpectrum(char* text);  
37 -void SaveState();  
38 -void LoadState();  
39 -void SetDefaults();  
40 -void SaveSimulation(string fileName);  
41 -void SaveK(string fileName);  
42 -void SaveN(string fileName);  
43 -void LoadMaterial(string fileNameK, string fileNameN, string materialName);  
44 -void LoadMaterial(string fileNameK, string materialName);  
45 -  
46 -//Display Functions  
47 -void FitDisplay();  
48 -  
49 -//Update Functions  
50 -void UpdateDisplay();  
51 -void SimulateSpectrum();  
52 -void cudaKramersKronig(double* cpuN, double* cpuK, int nVals, double nuStart, double nuEnd, double nOffset);  
53 -void cudaComputeSpectrum(double* cpuI, double* cpuB, double* alpha,  
54 - int Nl, int nLambda, double oThetaI, double oThetaO, double cThetaI, double cThetaO, int nSamples);  
55 -  
56 -//Window Parameters  
57 -extern double nuMin;  
58 -extern double nuMax;  
59 -extern double aMin;  
60 -extern double aMax;  
61 -extern double dNu;  
62 -extern bool dispRefSpec;  
63 -extern bool dispSimSpec;  
64 -extern bool dispSimK;  
65 -extern bool dispMatK;  
66 -extern bool dispSimN;  
67 -extern bool dispMatN;  
68 -extern SpecType dispSimType;  
69 -extern bool dispNormalize;  
70 -extern double dispNormFactor;  
71 -  
72 -  
73 -extern double dispScaleK;  
74 -extern double dispScaleN;  
75 -  
76 -//material parameters  
77 -extern double radius;  
78 -extern double baseIR;  
79 -extern double cA;  
80 -extern vector<SpecPair> EtaK;  
81 -extern vector<SpecPair> EtaN;  
82 -extern bool applyMaterial;  
83 -//extern vector<SpecPair> KMaterial;  
84 -//extern vector<SpecPair> NMaterial;  
85 -extern vector<Material> MaterialList;  
86 -extern int currentMaterial;  
87 -void ChangeAbsorbance();  
88 -void SetMaterial();  
89 -  
90 -//optical parameters  
91 -extern double cNAi;  
92 -extern double cNAo;  
93 -extern double oNAi;  
94 -extern double oNAo;  
95 -extern OpticsType opticsMode;  
96 -extern bool pointDetector;  
97 -extern int objectiveSamples;  
98 -  
99 -//fitting parameters  
100 -extern double minMSE;  
101 -extern int maxFitIter;  
102 -void EstimateMaterial();  
103 -extern double scaleI0;  
104 -extern double refSlope;  
105 -  
106 -double ComputeDistortion();  
107 -void MinimizeDistortion();  
108 -  
109 - 1 +#ifndef GLOBALS_H
  2 +#define GLOBALS_H
  3 +
  4 +#include <vector>
  5 +#include <string>
  6 +#include <iostream>
  7 +#include "PerformanceData.h"
  8 +#include <complex>
  9 +using namespace std;
  10 +
  11 +typedef float rtsFloat;
  12 +
  13 +struct SpecPair{
  14 + double nu;
  15 + double A;
  16 +};
  17 +
  18 +struct Material{
  19 + vector<double> nu;
  20 + vector<complex<double> > eta;
  21 + string name;
  22 +};
  23 +
  24 +enum SpecType {AbsorbanceSpecType, IntensitySpecType};
  25 +enum OpticsType {TransmissionOpticsType, ReflectionOpticsType};
  26 +
  27 +extern PerformanceData PD;
  28 +
  29 +
  30 +extern vector<vector<SpecPair> > RefSpectrum;
  31 +extern int currentSpec;
  32 +extern vector<SpecPair> SimSpectrum;
  33 +
  34 +//IO Functions
  35 +vector<SpecPair> LoadSpectrum(string filename);
  36 +vector<SpecPair> SetReferenceSpectrum(char* text);
  37 +void SaveState();
  38 +void LoadState();
  39 +void SetDefaults();
  40 +void SaveSimulation(string fileName);
  41 +void SaveK(string fileName);
  42 +void SaveN(string fileName);
  43 +void LoadMaterial(string fileNameK, string fileNameN, string materialName);
  44 +void LoadMaterial(string fileNameK, string materialName);
  45 +
  46 +//Display Functions
  47 +void FitDisplay();
  48 +
  49 +//Update Functions
  50 +void UpdateDisplay();
  51 +void SimulateSpectrum();
  52 +void cudaKramersKronig(double* cpuN, double* cpuK, int nVals, double nuStart, double nuEnd, double nOffset);
  53 +void cudaComputeSpectrum(double* cpuI, double* cpuB, double* alpha,
  54 + int Nl, int nLambda, double oThetaI, double oThetaO, double cThetaI, double cThetaO, int nSamples);
  55 +
  56 +//Window Parameters
  57 +extern double nuMin;
  58 +extern double nuMax;
  59 +extern double aMin;
  60 +extern double aMax;
  61 +extern double dNu;
  62 +extern bool dispRefSpec;
  63 +extern bool dispSimSpec;
  64 +extern bool dispSimK;
  65 +extern bool dispMatK;
  66 +extern bool dispSimN;
  67 +extern bool dispMatN;
  68 +extern SpecType dispSimType;
  69 +extern bool dispNormalize;
  70 +extern double dispNormFactor;
  71 +
  72 +
  73 +extern double dispScaleK;
  74 +extern double dispScaleN;
  75 +
  76 +//material parameters
  77 +extern double radius;
  78 +extern double baseIR;
  79 +extern double cA;
  80 +extern vector<SpecPair> EtaK;
  81 +extern vector<SpecPair> EtaN;
  82 +extern bool applyMaterial;
  83 +//extern vector<SpecPair> KMaterial;
  84 +//extern vector<SpecPair> NMaterial;
  85 +extern vector<Material> MaterialList;
  86 +extern int currentMaterial;
  87 +void ChangeAbsorbance();
  88 +void SetMaterial();
  89 +
  90 +//optical parameters
  91 +extern double cNAi;
  92 +extern double cNAo;
  93 +extern double oNAi;
  94 +extern double oNAo;
  95 +extern OpticsType opticsMode;
  96 +extern bool pointDetector;
  97 +extern int objectiveSamples;
  98 +
  99 +//fitting parameters
  100 +extern double minMSE;
  101 +extern int maxFitIter;
  102 +void EstimateMaterial();
  103 +extern double scaleI0;
  104 +extern double refSlope;
  105 +
  106 +double ComputeDistortion();
  107 +void MinimizeDistortion();
  108 +
  109 +
110 #endif 110 #endif
111 \ No newline at end of file 111 \ No newline at end of file
interactivemie.cpp
1 -#include "interactivemie.h"  
2 -  
3 -InteractiveMie::InteractiveMie(QWidget *parent, Qt::WFlags flags)  
4 - : QMainWindow(parent, flags)  
5 -{  
6 - ui.setupUi(this);  
7 -}  
8 -  
9 -InteractiveMie::~InteractiveMie()  
10 -{  
11 - updating = false;  
12 -} 1 +#include "interactivemie.h"
  2 +
  3 +InteractiveMie::InteractiveMie(QWidget *parent, Qt::WFlags flags)
  4 + : QMainWindow(parent, flags)
  5 +{
  6 + ui.setupUi(this);
  7 +}
  8 +
  9 +InteractiveMie::~InteractiveMie()
  10 +{
  11 + updating = false;
  12 +}
1 -#ifndef INTERACTIVEMIE_H  
2 -#define INTERACTIVEMIE_H  
3 -  
4 -#include <QtGui/QMainWindow>  
5 -#include <QDragEnterEvent>  
6 -#include <qfiledialog.h>  
7 -#include <qinputdialog.h>  
8 -#include "ui_interactivemie.h"  
9 -#include "globals.h"  
10 -  
11 -class InteractiveMie : public QMainWindow  
12 -{  
13 - Q_OBJECT  
14 -  
15 -public:  
16 - InteractiveMie(QWidget *parent = 0, Qt::WFlags flags = 0);  
17 - ~InteractiveMie();  
18 - bool updating;  
19 -  
20 - void refreshUI()  
21 - {  
22 - updating = true;  
23 -  
24 - ui.spinNuMin->setValue(nuMin);  
25 - ui.spinNuMax->setValue(nuMax);  
26 - ui.spinAMin->setValue(aMin);  
27 - ui.spinAMax->setValue(aMax);  
28 - ui.spinRadius->setValue(radius);  
29 - ui.spinBaseIR->setValue(baseIR);  
30 - ui.spinScaleK->setValue(cA);  
31 - ui.spinObjNAi->setValue(oNAi);  
32 - ui.spinObjNAo->setValue(oNAo);  
33 - ui.spinCondNAi->setValue(cNAi);  
34 - ui.spinCondNAo->setValue(cNAo);  
35 - ui.spinError->setValue(minMSE);  
36 - ui.spinMaxIter->setValue(maxFitIter);  
37 - ui.spinI0Scale->setValue(scaleI0);  
38 -  
39 - //display spectra values  
40 - ui.chkDisplaySimSpec->setChecked(dispSimSpec);  
41 - ui.chkDisplayRefSpec->setChecked(dispRefSpec);  
42 - ui.chkDisplaySimK->setChecked(dispSimK);  
43 - ui.chkDisplayMatK->setChecked(dispMatK);  
44 - ui.chkDisplaySimN->setChecked(dispSimN);  
45 - ui.chkDisplayMatN->setChecked(dispMatN);  
46 - ui.spinDispScaleK->setValue(dispScaleK);  
47 - ui.spinDispScaleN->setValue(dispScaleN);  
48 -  
49 - //material selection combo box  
50 - ui.cmbMaterial->clear();  
51 - for(unsigned int i=0; i<MaterialList.size(); i++)  
52 - ui.cmbMaterial->addItem(MaterialList[i].name.c_str(), i);  
53 - ui.cmbMaterial->setCurrentIndex(currentMaterial);  
54 -  
55 - updating = false;  
56 -  
57 - }  
58 -  
59 - void dragEnterEvent(QDragEnterEvent *event)  
60 - {  
61 - cout<<"This is a test."<<endl;  
62 - QStringList s = event->mimeData()->formats();  
63 - if (event->mimeData()->hasFormat("application/x-qt-windows-mime;value=\"FileName\"") ||  
64 - event->mimeData()->hasFormat("text/plain"))  
65 - {  
66 - event->acceptProposedAction();  
67 -  
68 - }  
69 - }  
70 -  
71 - void dropEvent(QDropEvent *event)  
72 - {  
73 - //cout<<"Challenge Accepted."<<endl;  
74 - RefSpectrum.clear();  
75 - RefSpectrum.push_back(SetReferenceSpectrum(event->mimeData()->text().toAscii().data()));  
76 - UpdateDisplay();  
77 - }  
78 -  
79 -private:  
80 - Ui::InteractiveMieClass ui;  
81 -  
82 -public slots:  
83 - //display parameters  
84 - void on_spinNuMin_valueChanged(int i){  
85 - nuMin = (float)i;  
86 - UpdateDisplay();  
87 - }  
88 - void on_spinNuMax_valueChanged(int i){  
89 - nuMax = (float)i;  
90 - UpdateDisplay();  
91 - }  
92 - void on_spinAMin_valueChanged(double d){  
93 - aMin = d;  
94 - UpdateDisplay();  
95 - }  
96 - void on_spinAMax_valueChanged(double d){  
97 - aMax = d;  
98 - UpdateDisplay();  
99 - }  
100 - void on_chkDisplaySimSpec_clicked(bool b){  
101 - dispSimSpec = b;  
102 - UpdateDisplay();  
103 - }  
104 - void on_chkDisplayRefSpec_clicked(bool b){  
105 - dispRefSpec = b;  
106 - UpdateDisplay();  
107 - }  
108 - void on_chkDisplaySimK_clicked(bool b){  
109 - dispSimK = b;  
110 - UpdateDisplay();  
111 - }  
112 - void on_chkDisplayMatK_clicked(bool b){  
113 - dispMatK = b;  
114 - UpdateDisplay();  
115 - }  
116 - void on_chkDisplaySimN_clicked(bool b){  
117 - dispSimN = b;  
118 - UpdateDisplay();  
119 - }  
120 - void on_chkDisplayMatN_clicked(bool b){  
121 - dispMatN = b;  
122 - UpdateDisplay();  
123 - }  
124 - void on_spinDispScaleK_valueChanged(double d){  
125 - dispScaleK = d;  
126 - UpdateDisplay();  
127 - }  
128 - void on_spinDispScaleN_valueChanged(double d){  
129 - dispScaleN = d;  
130 - UpdateDisplay();  
131 - }  
132 - void on_radDisplayAbsorbance_clicked(bool b){  
133 - dispSimType = AbsorbanceSpecType;  
134 - SimulateSpectrum();  
135 - UpdateDisplay();  
136 - }  
137 - void on_radDisplayIntensity_toggled(bool b){  
138 - dispSimType = IntensitySpecType;  
139 - SimulateSpectrum();  
140 - UpdateDisplay();  
141 - }  
142 - void on_chkNormalize_clicked(bool b){  
143 - dispNormalize = b;  
144 - SimulateSpectrum();  
145 - UpdateDisplay();  
146 - }  
147 - void on_spinNormFactor_valueChanged(double d){  
148 - dispNormFactor = d;  
149 - SimulateSpectrum();  
150 - UpdateDisplay();  
151 - }  
152 -  
153 - //material parameters  
154 - void on_spinRadius_valueChanged(double d){  
155 - radius = d;  
156 - SimulateSpectrum();  
157 - UpdateDisplay();  
158 - }  
159 - void on_spinBaseIR_valueChanged(double d){  
160 - baseIR = d;  
161 - ChangeAbsorbance();  
162 - SimulateSpectrum();  
163 - UpdateDisplay();  
164 - }  
165 - void on_spinScaleK_valueChanged(double d){  
166 - cA = d;  
167 - ChangeAbsorbance();  
168 - SimulateSpectrum();  
169 - UpdateDisplay();  
170 - }  
171 - void on_chkApplyMaterial_clicked(bool b){  
172 - applyMaterial = b;  
173 - SimulateSpectrum();  
174 - UpdateDisplay();  
175 - }  
176 - void on_cmbMaterial_currentIndexChanged(int i){  
177 - if(updating) return;  
178 -  
179 - currentMaterial = i;  
180 - SetMaterial();  
181 - SimulateSpectrum();  
182 - UpdateDisplay();  
183 - refreshUI();  
184 - }  
185 -  
186 - //optical parameters  
187 - void on_spinCondNAi_valueChanged(double d){  
188 - cNAi = d;  
189 - SimulateSpectrum();  
190 - UpdateDisplay();  
191 - }  
192 - void on_spinCondNAo_valueChanged(double d){  
193 - cNAo = d;  
194 - SimulateSpectrum();  
195 - UpdateDisplay();  
196 - }  
197 - void on_spinObjNAi_valueChanged(double d){  
198 - oNAi = d;  
199 - SimulateSpectrum();  
200 - UpdateDisplay();  
201 - }  
202 - void on_spinObjNAo_valueChanged(double d){  
203 - oNAo = d;  
204 - SimulateSpectrum();  
205 - UpdateDisplay();  
206 - }  
207 - void on_radTransmissionOptics_clicked(bool d){  
208 - ui.spinCondNAi->setEnabled(true);  
209 - ui.spinCondNAo->setEnabled(true);  
210 - opticsMode = TransmissionOpticsType;  
211 - SimulateSpectrum();  
212 - UpdateDisplay();  
213 - }  
214 - void on_radReflectionOptics_clicked(bool d){  
215 - ui.spinCondNAi->setEnabled(false);  
216 - ui.spinCondNAo->setEnabled(false);  
217 - ui.radDisplayAbsorbance->setEnabled(false);  
218 - ui.radDisplayIntensity->setChecked(true);  
219 - opticsMode = ReflectionOpticsType;  
220 - SimulateSpectrum();  
221 - UpdateDisplay();  
222 - }  
223 - void on_chkPointDetector_clicked(bool b){  
224 - if(b)  
225 - {  
226 - pointDetector = true;  
227 - ui.spinObjectiveSamples->setEnabled(false);  
228 - }  
229 - else  
230 - {  
231 - pointDetector = false;  
232 - ui.spinObjectiveSamples->setEnabled(true);  
233 - }  
234 -  
235 - SimulateSpectrum();  
236 - UpdateDisplay();  
237 - }  
238 -  
239 - void on_spinObjectiveSamples_valueChanged(int i){  
240 - objectiveSamples = i;  
241 - SimulateSpectrum();  
242 - UpdateDisplay();  
243 - }  
244 -  
245 - //Fitting  
246 - void on_spinMaxIter_valueChanged(int i){  
247 - maxFitIter = i;  
248 - }  
249 - void on_spinError_valueChanged(double d){  
250 - minMSE = d;  
251 - }  
252 - void on_spinI0Scale_valueChanged(double d){  
253 - scaleI0 = d;  
254 - SimulateSpectrum();  
255 - UpdateDisplay();  
256 - }  
257 - void on_spinRefSlope_valueChanged(double d){  
258 - refSlope = d;  
259 - UpdateDisplay();  
260 - }  
261 -  
262 - //display settings  
263 -  
264 - //Buttons  
265 - void on_btnFit_clicked(){  
266 - FitDisplay();  
267 - refreshUI();  
268 - }  
269 - void on_btnSave_clicked(){  
270 - SaveState();  
271 - }  
272 - void on_btnReset_clicked(){  
273 - SetDefaults();  
274 - SimulateSpectrum();  
275 - UpdateDisplay();  
276 - refreshUI();  
277 - }  
278 - void on_btnResetK_clicked(){  
279 - ChangeAbsorbance();  
280 - SimulateSpectrum();  
281 - UpdateDisplay();  
282 - }  
283 - void on_btnEstimateK_clicked(){  
284 - EstimateMaterial();  
285 - SimulateSpectrum();  
286 - UpdateDisplay();  
287 - }  
288 - void on_btnDistortion_clicked(){  
289 - //ComputeDistortion();  
290 - MinimizeDistortion();  
291 - }  
292 - void on_btnTimings_clicked(){  
293 - PD.PrintResults(cout);  
294 - }  
295 -  
296 - //menu items  
297 - void on_mnuLoadReference_triggered(){  
298 - QString fileName = QFileDialog::getOpenFileName(this, tr("Open Reference Spectrum"));  
299 -  
300 - if(fileName != QString::null){  
301 - RefSpectrum.clear();  
302 - RefSpectrum.push_back(LoadSpectrum(fileName.toAscii().data()));  
303 - }  
304 - UpdateDisplay();  
305 - }  
306 -  
307 - void on_mnuLoadMaterial_triggered(){  
308 -  
309 - //first load the imaginary part  
310 - QString kFileName = QFileDialog::getOpenFileName(this, tr("Open Imaginary (k) Spectrum"));  
311 -  
312 - //exit if no file was selected  
313 - if(kFileName == QString::null)  
314 - return;  
315 -  
316 - QString nFileName = QFileDialog::getOpenFileName(this, tr("Open Imaginary (n) Spectrum"));  
317 -  
318 - //request the material name  
319 - QString matName = QInputDialog::getText(this, tr("Material Name"), tr("Enter material name:"));  
320 -  
321 - //if a real part was given, load both  
322 - if(nFileName != QString::null)  
323 - LoadMaterial(kFileName.toAscii().data(), nFileName.toAscii().data(), matName.toAscii().data());  
324 - else  
325 - LoadMaterial(kFileName.toAscii().data(), matName.toAscii().data());  
326 -  
327 - //add the new material to the combo box  
328 - refreshUI();  
329 - }  
330 -  
331 - void on_mnuSaveSim_triggered(){  
332 - //first load the imaginary part  
333 - QString fileName = QFileDialog::getSaveFileName(this, tr("Save Simulated Spectrum"));  
334 - SaveSimulation(fileName.toAscii().data());  
335 - }  
336 -  
337 - void on_mnuSaveK_triggered(){  
338 - //first load the imaginary part  
339 - QString fileName = QFileDialog::getSaveFileName(this, tr("Save Imaginary Index of Refraction (k)"));  
340 - SaveK(fileName.toAscii().data());  
341 - }  
342 -  
343 - void on_mnuSaveN_triggered(){  
344 - //first load the imaginary part  
345 - QString fileName = QFileDialog::getSaveFileName(this, tr("Save Real Index of Refraction (n)"));  
346 - SaveN(fileName.toAscii().data());  
347 - }  
348 -  
349 -  
350 -  
351 -};  
352 -  
353 -#endif // INTERACTIVEMIE_H 1 +#ifndef INTERACTIVEMIE_H
  2 +#define INTERACTIVEMIE_H
  3 +
  4 +#include <QtGui/QMainWindow>
  5 +#include <QDragEnterEvent>
  6 +#include <qfiledialog.h>
  7 +#include <qinputdialog.h>
  8 +#include "ui_interactivemie.h"
  9 +#include "globals.h"
  10 +
  11 +class InteractiveMie : public QMainWindow
  12 +{
  13 + Q_OBJECT
  14 +
  15 +public:
  16 + InteractiveMie(QWidget *parent = 0, Qt::WFlags flags = 0);
  17 + ~InteractiveMie();
  18 + bool updating;
  19 +
  20 + void refreshUI()
  21 + {
  22 + updating = true;
  23 +
  24 + ui.spinNuMin->setValue(nuMin);
  25 + ui.spinNuMax->setValue(nuMax);
  26 + ui.spinAMin->setValue(aMin);
  27 + ui.spinAMax->setValue(aMax);
  28 + ui.spinRadius->setValue(radius);
  29 + ui.spinBaseIR->setValue(baseIR);
  30 + ui.spinScaleK->setValue(cA);
  31 + ui.spinObjNAi->setValue(oNAi);
  32 + ui.spinObjNAo->setValue(oNAo);
  33 + ui.spinCondNAi->setValue(cNAi);
  34 + ui.spinCondNAo->setValue(cNAo);
  35 + ui.spinError->setValue(minMSE);
  36 + ui.spinMaxIter->setValue(maxFitIter);
  37 + ui.spinI0Scale->setValue(scaleI0);
  38 +
  39 + //display spectra values
  40 + ui.chkDisplaySimSpec->setChecked(dispSimSpec);
  41 + ui.chkDisplayRefSpec->setChecked(dispRefSpec);
  42 + ui.chkDisplaySimK->setChecked(dispSimK);
  43 + ui.chkDisplayMatK->setChecked(dispMatK);
  44 + ui.chkDisplaySimN->setChecked(dispSimN);
  45 + ui.chkDisplayMatN->setChecked(dispMatN);
  46 + ui.spinDispScaleK->setValue(dispScaleK);
  47 + ui.spinDispScaleN->setValue(dispScaleN);
  48 +
  49 + //material selection combo box
  50 + ui.cmbMaterial->clear();
  51 + for(unsigned int i=0; i<MaterialList.size(); i++)
  52 + ui.cmbMaterial->addItem(MaterialList[i].name.c_str(), i);
  53 + ui.cmbMaterial->setCurrentIndex(currentMaterial);
  54 +
  55 + updating = false;
  56 +
  57 + }
  58 +
  59 + void dragEnterEvent(QDragEnterEvent *event)
  60 + {
  61 + cout<<"This is a test."<<endl;
  62 + QStringList s = event->mimeData()->formats();
  63 + if (event->mimeData()->hasFormat("application/x-qt-windows-mime;value=\"FileName\"") ||
  64 + event->mimeData()->hasFormat("text/plain"))
  65 + {
  66 + event->acceptProposedAction();
  67 +
  68 + }
  69 + }
  70 +
  71 + void dropEvent(QDropEvent *event)
  72 + {
  73 + //cout<<"Challenge Accepted."<<endl;
  74 + RefSpectrum.clear();
  75 + RefSpectrum.push_back(SetReferenceSpectrum(event->mimeData()->text().toAscii().data()));
  76 + UpdateDisplay();
  77 + }
  78 +
  79 +private:
  80 + Ui::InteractiveMieClass ui;
  81 +
  82 +public slots:
  83 + //display parameters
  84 + void on_spinNuMin_valueChanged(int i){
  85 + nuMin = (float)i;
  86 + UpdateDisplay();
  87 + }
  88 + void on_spinNuMax_valueChanged(int i){
  89 + nuMax = (float)i;
  90 + UpdateDisplay();
  91 + }
  92 + void on_spinAMin_valueChanged(double d){
  93 + aMin = d;
  94 + UpdateDisplay();
  95 + }
  96 + void on_spinAMax_valueChanged(double d){
  97 + aMax = d;
  98 + UpdateDisplay();
  99 + }
  100 + void on_chkDisplaySimSpec_clicked(bool b){
  101 + dispSimSpec = b;
  102 + UpdateDisplay();
  103 + }
  104 + void on_chkDisplayRefSpec_clicked(bool b){
  105 + dispRefSpec = b;
  106 + UpdateDisplay();
  107 + }
  108 + void on_chkDisplaySimK_clicked(bool b){
  109 + dispSimK = b;
  110 + UpdateDisplay();
  111 + }
  112 + void on_chkDisplayMatK_clicked(bool b){
  113 + dispMatK = b;
  114 + UpdateDisplay();
  115 + }
  116 + void on_chkDisplaySimN_clicked(bool b){
  117 + dispSimN = b;
  118 + UpdateDisplay();
  119 + }
  120 + void on_chkDisplayMatN_clicked(bool b){
  121 + dispMatN = b;
  122 + UpdateDisplay();
  123 + }
  124 + void on_spinDispScaleK_valueChanged(double d){
  125 + dispScaleK = d;
  126 + UpdateDisplay();
  127 + }
  128 + void on_spinDispScaleN_valueChanged(double d){
  129 + dispScaleN = d;
  130 + UpdateDisplay();
  131 + }
  132 + void on_radDisplayAbsorbance_clicked(bool b){
  133 + dispSimType = AbsorbanceSpecType;
  134 + SimulateSpectrum();
  135 + UpdateDisplay();
  136 + }
  137 + void on_radDisplayIntensity_toggled(bool b){
  138 + dispSimType = IntensitySpecType;
  139 + SimulateSpectrum();
  140 + UpdateDisplay();
  141 + }
  142 + void on_chkNormalize_clicked(bool b){
  143 + dispNormalize = b;
  144 + SimulateSpectrum();
  145 + UpdateDisplay();
  146 + }
  147 + void on_spinNormFactor_valueChanged(double d){
  148 + dispNormFactor = d;
  149 + SimulateSpectrum();
  150 + UpdateDisplay();
  151 + }
  152 +
  153 + //material parameters
  154 + void on_spinRadius_valueChanged(double d){
  155 + radius = d;
  156 + SimulateSpectrum();
  157 + UpdateDisplay();
  158 + }
  159 + void on_spinBaseIR_valueChanged(double d){
  160 + baseIR = d;
  161 + ChangeAbsorbance();
  162 + SimulateSpectrum();
  163 + UpdateDisplay();
  164 + }
  165 + void on_spinScaleK_valueChanged(double d){
  166 + cA = d;
  167 + ChangeAbsorbance();
  168 + SimulateSpectrum();
  169 + UpdateDisplay();
  170 + }
  171 + void on_chkApplyMaterial_clicked(bool b){
  172 + applyMaterial = b;
  173 + SimulateSpectrum();
  174 + UpdateDisplay();
  175 + }
  176 + void on_cmbMaterial_currentIndexChanged(int i){
  177 + if(updating) return;
  178 +
  179 + currentMaterial = i;
  180 + SetMaterial();
  181 + SimulateSpectrum();
  182 + UpdateDisplay();
  183 + refreshUI();
  184 + }
  185 +
  186 + //optical parameters
  187 + void on_spinCondNAi_valueChanged(double d){
  188 + cNAi = d;
  189 + SimulateSpectrum();
  190 + UpdateDisplay();
  191 + }
  192 + void on_spinCondNAo_valueChanged(double d){
  193 + cNAo = d;
  194 + SimulateSpectrum();
  195 + UpdateDisplay();
  196 + }
  197 + void on_spinObjNAi_valueChanged(double d){
  198 + oNAi = d;
  199 + SimulateSpectrum();
  200 + UpdateDisplay();
  201 + }
  202 + void on_spinObjNAo_valueChanged(double d){
  203 + oNAo = d;
  204 + SimulateSpectrum();
  205 + UpdateDisplay();
  206 + }
  207 + void on_radTransmissionOptics_clicked(bool d){
  208 + ui.spinCondNAi->setEnabled(true);
  209 + ui.spinCondNAo->setEnabled(true);
  210 + opticsMode = TransmissionOpticsType;
  211 + SimulateSpectrum();
  212 + UpdateDisplay();
  213 + }
  214 + void on_radReflectionOptics_clicked(bool d){
  215 + ui.spinCondNAi->setEnabled(false);
  216 + ui.spinCondNAo->setEnabled(false);
  217 + ui.radDisplayAbsorbance->setEnabled(false);
  218 + ui.radDisplayIntensity->setChecked(true);
  219 + opticsMode = ReflectionOpticsType;
  220 + SimulateSpectrum();
  221 + UpdateDisplay();
  222 + }
  223 + void on_chkPointDetector_clicked(bool b){
  224 + if(b)
  225 + {
  226 + pointDetector = true;
  227 + ui.spinObjectiveSamples->setEnabled(false);
  228 + }
  229 + else
  230 + {
  231 + pointDetector = false;
  232 + ui.spinObjectiveSamples->setEnabled(true);
  233 + }
  234 +
  235 + SimulateSpectrum();
  236 + UpdateDisplay();
  237 + }
  238 +
  239 + void on_spinObjectiveSamples_valueChanged(int i){
  240 + objectiveSamples = i;
  241 + SimulateSpectrum();
  242 + UpdateDisplay();
  243 + }
  244 +
  245 + //Fitting
  246 + void on_spinMaxIter_valueChanged(int i){
  247 + maxFitIter = i;
  248 + }
  249 + void on_spinError_valueChanged(double d){
  250 + minMSE = d;
  251 + }
  252 + void on_spinI0Scale_valueChanged(double d){
  253 + scaleI0 = d;
  254 + SimulateSpectrum();
  255 + UpdateDisplay();
  256 + }
  257 + void on_spinRefSlope_valueChanged(double d){
  258 + refSlope = d;
  259 + UpdateDisplay();
  260 + }
  261 +
  262 + //display settings
  263 +
  264 + //Buttons
  265 + void on_btnFit_clicked(){
  266 + FitDisplay();
  267 + refreshUI();
  268 + }
  269 + void on_btnSave_clicked(){
  270 + SaveState();
  271 + }
  272 + void on_btnReset_clicked(){
  273 + SetDefaults();
  274 + SimulateSpectrum();
  275 + UpdateDisplay();
  276 + refreshUI();
  277 + }
  278 + void on_btnResetK_clicked(){
  279 + ChangeAbsorbance();
  280 + SimulateSpectrum();
  281 + UpdateDisplay();
  282 + }
  283 + void on_btnEstimateK_clicked(){
  284 + EstimateMaterial();
  285 + SimulateSpectrum();
  286 + UpdateDisplay();
  287 + }
  288 + void on_btnDistortion_clicked(){
  289 + //ComputeDistortion();
  290 + MinimizeDistortion();
  291 + }
  292 + void on_btnTimings_clicked(){
  293 + PD.PrintResults(cout);
  294 + }
  295 +
  296 + //menu items
  297 + void on_mnuLoadReference_triggered(){
  298 + QString fileName = QFileDialog::getOpenFileName(this, tr("Open Reference Spectrum"));
  299 +
  300 + if(fileName != QString::null){
  301 + RefSpectrum.clear();
  302 + RefSpectrum.push_back(LoadSpectrum(fileName.toAscii().data()));
  303 + }
  304 + UpdateDisplay();
  305 + }
  306 +
  307 + void on_mnuLoadMaterial_triggered(){
  308 +
  309 + //first load the imaginary part
  310 + QString kFileName = QFileDialog::getOpenFileName(this, tr("Open Imaginary (k) Spectrum"));
  311 +
  312 + //exit if no file was selected
  313 + if(kFileName == QString::null)
  314 + return;
  315 +
  316 + QString nFileName = QFileDialog::getOpenFileName(this, tr("Open Imaginary (n) Spectrum"));
  317 +
  318 + //request the material name
  319 + QString matName = QInputDialog::getText(this, tr("Material Name"), tr("Enter material name:"));
  320 +
  321 + //if a real part was given, load both
  322 + if(nFileName != QString::null)
  323 + LoadMaterial(kFileName.toAscii().data(), nFileName.toAscii().data(), matName.toAscii().data());
  324 + else
  325 + LoadMaterial(kFileName.toAscii().data(), matName.toAscii().data());
  326 +
  327 + //add the new material to the combo box
  328 + refreshUI();
  329 + }
  330 +
  331 + void on_mnuSaveSim_triggered(){
  332 + //first load the imaginary part
  333 + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Simulated Spectrum"));
  334 + SaveSimulation(fileName.toAscii().data());
  335 + }
  336 +
  337 + void on_mnuSaveK_triggered(){
  338 + //first load the imaginary part
  339 + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Imaginary Index of Refraction (k)"));
  340 + SaveK(fileName.toAscii().data());
  341 + }
  342 +
  343 + void on_mnuSaveN_triggered(){
  344 + //first load the imaginary part
  345 + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Real Index of Refraction (n)"));
  346 + SaveN(fileName.toAscii().data());
  347 + }
  348 +
  349 +
  350 +
  351 +};
  352 +
  353 +#endif // INTERACTIVEMIE_H
interactivemie.qrc
1 -<RCC>  
2 - <qresource prefix="InteractiveMie">  
3 - </qresource>  
4 -</RCC> 1 +<RCC>
  2 + <qresource prefix="InteractiveMie">
  3 + </qresource>
  4 +</RCC>
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<ui version="4.0">  
3 - <class>InteractiveMieClass</class>  
4 - <widget class="QMainWindow" name="InteractiveMieClass">  
5 - <property name="geometry">  
6 - <rect>  
7 - <x>0</x>  
8 - <y>0</y>  
9 - <width>464</width>  
10 - <height>525</height>  
11 - </rect>  
12 - </property>  
13 - <property name="acceptDrops">  
14 - <bool>true</bool>  
15 - </property>  
16 - <property name="windowTitle">  
17 - <string>InteractiveMie</string>  
18 - </property>  
19 - <widget class="QWidget" name="centralWidget">  
20 - <widget class="QGroupBox" name="groupBox">  
21 - <property name="geometry">  
22 - <rect>  
23 - <x>20</x>  
24 - <y>140</y>  
25 - <width>151</width>  
26 - <height>181</height>  
27 - </rect>  
28 - </property>  
29 - <property name="title">  
30 - <string>Material</string>  
31 - </property>  
32 - <widget class="QDoubleSpinBox" name="spinScaleK">  
33 - <property name="geometry">  
34 - <rect>  
35 - <x>70</x>  
36 - <y>80</y>  
37 - <width>62</width>  
38 - <height>22</height>  
39 - </rect>  
40 - </property>  
41 - <property name="singleStep">  
42 - <double>0.100000000000000</double>  
43 - </property>  
44 - <property name="value">  
45 - <double>1.000000000000000</double>  
46 - </property>  
47 - </widget>  
48 - <widget class="QDoubleSpinBox" name="spinBaseIR">  
49 - <property name="geometry">  
50 - <rect>  
51 - <x>70</x>  
52 - <y>50</y>  
53 - <width>62</width>  
54 - <height>22</height>  
55 - </rect>  
56 - </property>  
57 - <property name="minimum">  
58 - <double>1.000000000000000</double>  
59 - </property>  
60 - <property name="singleStep">  
61 - <double>0.010000000000000</double>  
62 - </property>  
63 - <property name="value">  
64 - <double>1.490000000000000</double>  
65 - </property>  
66 - </widget>  
67 - <widget class="QLabel" name="label_8">  
68 - <property name="geometry">  
69 - <rect>  
70 - <x>30</x>  
71 - <y>50</y>  
72 - <width>46</width>  
73 - <height>13</height>  
74 - </rect>  
75 - </property>  
76 - <property name="text">  
77 - <string>base IR</string>  
78 - </property>  
79 - </widget>  
80 - <widget class="QDoubleSpinBox" name="spinRadius">  
81 - <property name="geometry">  
82 - <rect>  
83 - <x>70</x>  
84 - <y>20</y>  
85 - <width>62</width>  
86 - <height>22</height>  
87 - </rect>  
88 - </property>  
89 - <property name="accelerated">  
90 - <bool>true</bool>  
91 - </property>  
92 - <property name="singleStep">  
93 - <double>0.100000000000000</double>  
94 - </property>  
95 - <property name="value">  
96 - <double>4.000000000000000</double>  
97 - </property>  
98 - </widget>  
99 - <widget class="QLabel" name="label_4">  
100 - <property name="geometry">  
101 - <rect>  
102 - <x>30</x>  
103 - <y>20</y>  
104 - <width>46</width>  
105 - <height>13</height>  
106 - </rect>  
107 - </property>  
108 - <property name="text">  
109 - <string>radius</string>  
110 - </property>  
111 - </widget>  
112 - <widget class="QLabel" name="label_9">  
113 - <property name="geometry">  
114 - <rect>  
115 - <x>30</x>  
116 - <y>80</y>  
117 - <width>46</width>  
118 - <height>13</height>  
119 - </rect>  
120 - </property>  
121 - <property name="text">  
122 - <string>scale K</string>  
123 - </property>  
124 - </widget>  
125 - <widget class="QCheckBox" name="chkApplyMaterial">  
126 - <property name="geometry">  
127 - <rect>  
128 - <x>20</x>  
129 - <y>110</y>  
130 - <width>101</width>  
131 - <height>17</height>  
132 - </rect>  
133 - </property>  
134 - <property name="text">  
135 - <string>Apply Material</string>  
136 - </property>  
137 - <property name="checked">  
138 - <bool>true</bool>  
139 - </property>  
140 - </widget>  
141 - <widget class="QComboBox" name="cmbMaterial">  
142 - <property name="geometry">  
143 - <rect>  
144 - <x>20</x>  
145 - <y>140</y>  
146 - <width>111</width>  
147 - <height>22</height>  
148 - </rect>  
149 - </property>  
150 - </widget>  
151 - </widget>  
152 - <widget class="QGroupBox" name="groupBox_2">  
153 - <property name="geometry">  
154 - <rect>  
155 - <x>20</x>  
156 - <y>10</y>  
157 - <width>241</width>  
158 - <height>131</height>  
159 - </rect>  
160 - </property>  
161 - <property name="title">  
162 - <string>Optics</string>  
163 - </property>  
164 - <widget class="QLabel" name="label_7">  
165 - <property name="geometry">  
166 - <rect>  
167 - <x>5</x>  
168 - <y>50</y>  
169 - <width>71</width>  
170 - <height>20</height>  
171 - </rect>  
172 - </property>  
173 - <property name="text">  
174 - <string>Objective NA</string>  
175 - </property>  
176 - </widget>  
177 - <widget class="QDoubleSpinBox" name="spinCondNAi">  
178 - <property name="geometry">  
179 - <rect>  
180 - <x>80</x>  
181 - <y>20</y>  
182 - <width>62</width>  
183 - <height>22</height>  
184 - </rect>  
185 - </property>  
186 - <property name="maximum">  
187 - <double>1.000000000000000</double>  
188 - </property>  
189 - <property name="singleStep">  
190 - <double>0.010000000000000</double>  
191 - </property>  
192 - </widget>  
193 - <widget class="QLabel" name="label_6">  
194 - <property name="geometry">  
195 - <rect>  
196 - <x>5</x>  
197 - <y>20</y>  
198 - <width>71</width>  
199 - <height>20</height>  
200 - </rect>  
201 - </property>  
202 - <property name="text">  
203 - <string>Condenser NA</string>  
204 - </property>  
205 - </widget>  
206 - <widget class="QDoubleSpinBox" name="spinCondNAo">  
207 - <property name="geometry">  
208 - <rect>  
209 - <x>160</x>  
210 - <y>20</y>  
211 - <width>62</width>  
212 - <height>22</height>  
213 - </rect>  
214 - </property>  
215 - <property name="maximum">  
216 - <double>1.000000000000000</double>  
217 - </property>  
218 - <property name="singleStep">  
219 - <double>0.010000000000000</double>  
220 - </property>  
221 - <property name="value">  
222 - <double>0.600000000000000</double>  
223 - </property>  
224 - </widget>  
225 - <widget class="QDoubleSpinBox" name="spinObjNAo">  
226 - <property name="geometry">  
227 - <rect>  
228 - <x>160</x>  
229 - <y>50</y>  
230 - <width>62</width>  
231 - <height>22</height>  
232 - </rect>  
233 - </property>  
234 - <property name="maximum">  
235 - <double>1.000000000000000</double>  
236 - </property>  
237 - <property name="singleStep">  
238 - <double>0.010000000000000</double>  
239 - </property>  
240 - <property name="value">  
241 - <double>0.600000000000000</double>  
242 - </property>  
243 - </widget>  
244 - <widget class="QDoubleSpinBox" name="spinObjNAi">  
245 - <property name="geometry">  
246 - <rect>  
247 - <x>80</x>  
248 - <y>50</y>  
249 - <width>62</width>  
250 - <height>22</height>  
251 - </rect>  
252 - </property>  
253 - <property name="maximum">  
254 - <double>1.000000000000000</double>  
255 - </property>  
256 - <property name="singleStep">  
257 - <double>0.010000000000000</double>  
258 - </property>  
259 - </widget>  
260 - <widget class="QRadioButton" name="radTransmissionOptics">  
261 - <property name="geometry">  
262 - <rect>  
263 - <x>20</x>  
264 - <y>80</y>  
265 - <width>82</width>  
266 - <height>17</height>  
267 - </rect>  
268 - </property>  
269 - <property name="text">  
270 - <string>Transmission</string>  
271 - </property>  
272 - <property name="checked">  
273 - <bool>true</bool>  
274 - </property>  
275 - </widget>  
276 - <widget class="QRadioButton" name="radReflectionOptics">  
277 - <property name="geometry">  
278 - <rect>  
279 - <x>150</x>  
280 - <y>80</y>  
281 - <width>82</width>  
282 - <height>17</height>  
283 - </rect>  
284 - </property>  
285 - <property name="text">  
286 - <string>Reflection</string>  
287 - </property>  
288 - </widget>  
289 - <widget class="QCheckBox" name="chkPointDetector">  
290 - <property name="geometry">  
291 - <rect>  
292 - <x>150</x>  
293 - <y>100</y>  
294 - <width>101</width>  
295 - <height>17</height>  
296 - </rect>  
297 - </property>  
298 - <property name="text">  
299 - <string>Point Detector</string>  
300 - </property>  
301 - </widget>  
302 - <widget class="QSpinBox" name="spinObjectiveSamples">  
303 - <property name="geometry">  
304 - <rect>  
305 - <x>10</x>  
306 - <y>100</y>  
307 - <width>42</width>  
308 - <height>22</height>  
309 - </rect>  
310 - </property>  
311 - <property name="maximum">  
312 - <number>999</number>  
313 - </property>  
314 - <property name="value">  
315 - <number>200</number>  
316 - </property>  
317 - </widget>  
318 - <widget class="QLabel" name="label_12">  
319 - <property name="geometry">  
320 - <rect>  
321 - <x>60</x>  
322 - <y>100</y>  
323 - <width>71</width>  
324 - <height>16</height>  
325 - </rect>  
326 - </property>  
327 - <property name="text">  
328 - <string>Obj. Samples</string>  
329 - </property>  
330 - </widget>  
331 - </widget>  
332 - <widget class="QGroupBox" name="groupBox_3">  
333 - <property name="geometry">  
334 - <rect>  
335 - <x>280</x>  
336 - <y>20</y>  
337 - <width>161</width>  
338 - <height>411</height>  
339 - </rect>  
340 - </property>  
341 - <property name="title">  
342 - <string>Display</string>  
343 - </property>  
344 - <widget class="QDoubleSpinBox" name="spinAMin">  
345 - <property name="geometry">  
346 - <rect>  
347 - <x>80</x>  
348 - <y>70</y>  
349 - <width>71</width>  
350 - <height>22</height>  
351 - </rect>  
352 - </property>  
353 - <property name="decimals">  
354 - <number>6</number>  
355 - </property>  
356 - <property name="minimum">  
357 - <double>-9999.000000000000000</double>  
358 - </property>  
359 - <property name="maximum">  
360 - <double>9999.000000000000000</double>  
361 - </property>  
362 - <property name="singleStep">  
363 - <double>0.100000000000000</double>  
364 - </property>  
365 - </widget>  
366 - <widget class="QSpinBox" name="spinNuMin">  
367 - <property name="enabled">  
368 - <bool>true</bool>  
369 - </property>  
370 - <property name="geometry">  
371 - <rect>  
372 - <x>10</x>  
373 - <y>70</y>  
374 - <width>61</width>  
375 - <height>22</height>  
376 - </rect>  
377 - </property>  
378 - <property name="minimum">  
379 - <number>1</number>  
380 - </property>  
381 - <property name="maximum">  
382 - <number>100000</number>  
383 - </property>  
384 - <property name="singleStep">  
385 - <number>10</number>  
386 - </property>  
387 - <property name="value">  
388 - <number>800</number>  
389 - </property>  
390 - </widget>  
391 - <widget class="QLabel" name="label_2">  
392 - <property name="geometry">  
393 - <rect>  
394 - <x>110</x>  
395 - <y>20</y>  
396 - <width>16</width>  
397 - <height>16</height>  
398 - </rect>  
399 - </property>  
400 - <property name="text">  
401 - <string>A</string>  
402 - </property>  
403 - </widget>  
404 - <widget class="QDoubleSpinBox" name="spinAMax">  
405 - <property name="geometry">  
406 - <rect>  
407 - <x>80</x>  
408 - <y>40</y>  
409 - <width>71</width>  
410 - <height>22</height>  
411 - </rect>  
412 - </property>  
413 - <property name="decimals">  
414 - <number>6</number>  
415 - </property>  
416 - <property name="minimum">  
417 - <double>-9999.000000000000000</double>  
418 - </property>  
419 - <property name="maximum">  
420 - <double>9999.000000000000000</double>  
421 - </property>  
422 - <property name="singleStep">  
423 - <double>0.100000000000000</double>  
424 - </property>  
425 - <property name="value">  
426 - <double>1.000000000000000</double>  
427 - </property>  
428 - </widget>  
429 - <widget class="QSpinBox" name="spinNuMax">  
430 - <property name="enabled">  
431 - <bool>true</bool>  
432 - </property>  
433 - <property name="geometry">  
434 - <rect>  
435 - <x>10</x>  
436 - <y>40</y>  
437 - <width>61</width>  
438 - <height>22</height>  
439 - </rect>  
440 - </property>  
441 - <property name="minimum">  
442 - <number>1</number>  
443 - </property>  
444 - <property name="maximum">  
445 - <number>100000</number>  
446 - </property>  
447 - <property name="singleStep">  
448 - <number>10</number>  
449 - </property>  
450 - <property name="value">  
451 - <number>4000</number>  
452 - </property>  
453 - </widget>  
454 - <widget class="QLabel" name="label">  
455 - <property name="geometry">  
456 - <rect>  
457 - <x>20</x>  
458 - <y>20</y>  
459 - <width>61</width>  
460 - <height>16</height>  
461 - </rect>  
462 - </property>  
463 - <property name="text">  
464 - <string>nu (cm^-1)</string>  
465 - </property>  
466 - </widget>  
467 - <widget class="QCheckBox" name="chkDisplayRefSpec">  
468 - <property name="geometry">  
469 - <rect>  
470 - <x>10</x>  
471 - <y>230</y>  
472 - <width>131</width>  
473 - <height>17</height>  
474 - </rect>  
475 - </property>  
476 - <property name="text">  
477 - <string>Reference Spectrum</string>  
478 - </property>  
479 - <property name="checked">  
480 - <bool>true</bool>  
481 - </property>  
482 - </widget>  
483 - <widget class="QCheckBox" name="chkDisplaySimSpec">  
484 - <property name="geometry">  
485 - <rect>  
486 - <x>10</x>  
487 - <y>170</y>  
488 - <width>131</width>  
489 - <height>17</height>  
490 - </rect>  
491 - </property>  
492 - <property name="text">  
493 - <string>Simulated Spectrum</string>  
494 - </property>  
495 - <property name="checked">  
496 - <bool>true</bool>  
497 - </property>  
498 - </widget>  
499 - <widget class="QCheckBox" name="chkDisplaySimK">  
500 - <property name="geometry">  
501 - <rect>  
502 - <x>10</x>  
503 - <y>280</y>  
504 - <width>131</width>  
505 - <height>17</height>  
506 - </rect>  
507 - </property>  
508 - <property name="text">  
509 - <string>Simulated K</string>  
510 - </property>  
511 - <property name="checked">  
512 - <bool>false</bool>  
513 - </property>  
514 - </widget>  
515 - <widget class="QDoubleSpinBox" name="spinI0Scale">  
516 - <property name="geometry">  
517 - <rect>  
518 - <x>80</x>  
519 - <y>100</y>  
520 - <width>71</width>  
521 - <height>22</height>  
522 - </rect>  
523 - </property>  
524 - <property name="decimals">  
525 - <number>6</number>  
526 - </property>  
527 - <property name="minimum">  
528 - <double>-99.989999999999995</double>  
529 - </property>  
530 - <property name="singleStep">  
531 - <double>0.010000000000000</double>  
532 - </property>  
533 - </widget>  
534 - <widget class="QLabel" name="label_10">  
535 - <property name="geometry">  
536 - <rect>  
537 - <x>10</x>  
538 - <y>100</y>  
539 - <width>71</width>  
540 - <height>16</height>  
541 - </rect>  
542 - </property>  
543 - <property name="text">  
544 - <string>I0 Scale</string>  
545 - </property>  
546 - </widget>  
547 - <widget class="QDoubleSpinBox" name="spinRefSlope">  
548 - <property name="enabled">  
549 - <bool>false</bool>  
550 - </property>  
551 - <property name="geometry">  
552 - <rect>  
553 - <x>80</x>  
554 - <y>130</y>  
555 - <width>71</width>  
556 - <height>22</height>  
557 - </rect>  
558 - </property>  
559 - <property name="decimals">  
560 - <number>6</number>  
561 - </property>  
562 - <property name="minimum">  
563 - <double>-99.989999999999995</double>  
564 - </property>  
565 - <property name="singleStep">  
566 - <double>0.000010000000000</double>  
567 - </property>  
568 - </widget>  
569 - <widget class="QLabel" name="label_11">  
570 - <property name="geometry">  
571 - <rect>  
572 - <x>10</x>  
573 - <y>130</y>  
574 - <width>71</width>  
575 - <height>16</height>  
576 - </rect>  
577 - </property>  
578 - <property name="text">  
579 - <string>Ref Slope</string>  
580 - </property>  
581 - </widget>  
582 - <widget class="QCheckBox" name="chkDisplayMatK">  
583 - <property name="geometry">  
584 - <rect>  
585 - <x>10</x>  
586 - <y>300</y>  
587 - <width>91</width>  
588 - <height>17</height>  
589 - </rect>  
590 - </property>  
591 - <property name="text">  
592 - <string>Material K</string>  
593 - </property>  
594 - </widget>  
595 - <widget class="QCheckBox" name="chkDisplaySimN">  
596 - <property name="geometry">  
597 - <rect>  
598 - <x>10</x>  
599 - <y>330</y>  
600 - <width>131</width>  
601 - <height>17</height>  
602 - </rect>  
603 - </property>  
604 - <property name="text">  
605 - <string>Simulated N</string>  
606 - </property>  
607 - <property name="checked">  
608 - <bool>false</bool>  
609 - </property>  
610 - </widget>  
611 - <widget class="QCheckBox" name="chkDisplayMatN">  
612 - <property name="geometry">  
613 - <rect>  
614 - <x>10</x>  
615 - <y>350</y>  
616 - <width>91</width>  
617 - <height>17</height>  
618 - </rect>  
619 - </property>  
620 - <property name="text">  
621 - <string>Material N</string>  
622 - </property>  
623 - </widget>  
624 - <widget class="QDoubleSpinBox" name="spinDispScaleK">  
625 - <property name="geometry">  
626 - <rect>  
627 - <x>90</x>  
628 - <y>290</y>  
629 - <width>51</width>  
630 - <height>22</height>  
631 - </rect>  
632 - </property>  
633 - <property name="singleStep">  
634 - <double>0.100000000000000</double>  
635 - </property>  
636 - </widget>  
637 - <widget class="QDoubleSpinBox" name="spinDispScaleN">  
638 - <property name="geometry">  
639 - <rect>  
640 - <x>90</x>  
641 - <y>340</y>  
642 - <width>51</width>  
643 - <height>22</height>  
644 - </rect>  
645 - </property>  
646 - <property name="singleStep">  
647 - <double>0.100000000000000</double>  
648 - </property>  
649 - </widget>  
650 - <widget class="QCheckBox" name="chkNormalize">  
651 - <property name="geometry">  
652 - <rect>  
653 - <x>10</x>  
654 - <y>380</y>  
655 - <width>70</width>  
656 - <height>17</height>  
657 - </rect>  
658 - </property>  
659 - <property name="text">  
660 - <string>Normalize</string>  
661 - </property>  
662 - </widget>  
663 - <widget class="QRadioButton" name="radDisplayAbsorbance">  
664 - <property name="geometry">  
665 - <rect>  
666 - <x>50</x>  
667 - <y>190</y>  
668 - <width>82</width>  
669 - <height>17</height>  
670 - </rect>  
671 - </property>  
672 - <property name="text">  
673 - <string>Absorbance</string>  
674 - </property>  
675 - <property name="checked">  
676 - <bool>true</bool>  
677 - </property>  
678 - </widget>  
679 - <widget class="QRadioButton" name="radDisplayIntensity">  
680 - <property name="geometry">  
681 - <rect>  
682 - <x>50</x>  
683 - <y>210</y>  
684 - <width>82</width>  
685 - <height>17</height>  
686 - </rect>  
687 - </property>  
688 - <property name="text">  
689 - <string>Intensity</string>  
690 - </property>  
691 - </widget>  
692 - <widget class="QDoubleSpinBox" name="spinNormFactor">  
693 - <property name="geometry">  
694 - <rect>  
695 - <x>90</x>  
696 - <y>380</y>  
697 - <width>62</width>  
698 - <height>22</height>  
699 - </rect>  
700 - </property>  
701 - <property name="singleStep">  
702 - <double>1.000000000000000</double>  
703 - </property>  
704 - <property name="value">  
705 - <double>1.000000000000000</double>  
706 - </property>  
707 - </widget>  
708 - </widget>  
709 - <widget class="QPushButton" name="btnFit">  
710 - <property name="geometry">  
711 - <rect>  
712 - <x>180</x>  
713 - <y>150</y>  
714 - <width>75</width>  
715 - <height>23</height>  
716 - </rect>  
717 - </property>  
718 - <property name="text">  
719 - <string>Fit</string>  
720 - </property>  
721 - </widget>  
722 - <widget class="QPushButton" name="btnSave">  
723 - <property name="geometry">  
724 - <rect>  
725 - <x>180</x>  
726 - <y>180</y>  
727 - <width>75</width>  
728 - <height>23</height>  
729 - </rect>  
730 - </property>  
731 - <property name="text">  
732 - <string>Save</string>  
733 - </property>  
734 - </widget>  
735 - <widget class="QPushButton" name="btnReset">  
736 - <property name="geometry">  
737 - <rect>  
738 - <x>180</x>  
739 - <y>210</y>  
740 - <width>75</width>  
741 - <height>23</height>  
742 - </rect>  
743 - </property>  
744 - <property name="text">  
745 - <string>Reset</string>  
746 - </property>  
747 - </widget>  
748 - <widget class="QPushButton" name="btnDistortion">  
749 - <property name="enabled">  
750 - <bool>true</bool>  
751 - </property>  
752 - <property name="geometry">  
753 - <rect>  
754 - <x>180</x>  
755 - <y>240</y>  
756 - <width>75</width>  
757 - <height>23</height>  
758 - </rect>  
759 - </property>  
760 - <property name="text">  
761 - <string>Distortion</string>  
762 - </property>  
763 - </widget>  
764 - <widget class="QPushButton" name="btnTimings">  
765 - <property name="geometry">  
766 - <rect>  
767 - <x>180</x>  
768 - <y>270</y>  
769 - <width>75</width>  
770 - <height>23</height>  
771 - </rect>  
772 - </property>  
773 - <property name="text">  
774 - <string>Timings</string>  
775 - </property>  
776 - </widget>  
777 - <widget class="QGroupBox" name="groupBox_4">  
778 - <property name="geometry">  
779 - <rect>  
780 - <x>20</x>  
781 - <y>320</y>  
782 - <width>201</width>  
783 - <height>111</height>  
784 - </rect>  
785 - </property>  
786 - <property name="title">  
787 - <string>Fit Material</string>  
788 - </property>  
789 - <widget class="QSpinBox" name="spinMaxIter">  
790 - <property name="geometry">  
791 - <rect>  
792 - <x>110</x>  
793 - <y>70</y>  
794 - <width>61</width>  
795 - <height>22</height>  
796 - </rect>  
797 - </property>  
798 - <property name="maximum">  
799 - <number>9999</number>  
800 - </property>  
801 - <property name="value">  
802 - <number>20</number>  
803 - </property>  
804 - </widget>  
805 - <widget class="QLabel" name="label_3">  
806 - <property name="geometry">  
807 - <rect>  
808 - <x>40</x>  
809 - <y>50</y>  
810 - <width>46</width>  
811 - <height>13</height>  
812 - </rect>  
813 - </property>  
814 - <property name="text">  
815 - <string>Error</string>  
816 - </property>  
817 - </widget>  
818 - <widget class="QDoubleSpinBox" name="spinError">  
819 - <property name="geometry">  
820 - <rect>  
821 - <x>20</x>  
822 - <y>70</y>  
823 - <width>71</width>  
824 - <height>22</height>  
825 - </rect>  
826 - </property>  
827 - <property name="decimals">  
828 - <number>7</number>  
829 - </property>  
830 - <property name="maximum">  
831 - <double>0.100000000000000</double>  
832 - </property>  
833 - <property name="singleStep">  
834 - <double>0.000100000000000</double>  
835 - </property>  
836 - <property name="value">  
837 - <double>0.000100000000000</double>  
838 - </property>  
839 - </widget>  
840 - <widget class="QPushButton" name="btnEstimateK">  
841 - <property name="geometry">  
842 - <rect>  
843 - <x>20</x>  
844 - <y>20</y>  
845 - <width>75</width>  
846 - <height>23</height>  
847 - </rect>  
848 - </property>  
849 - <property name="text">  
850 - <string>Estimate K</string>  
851 - </property>  
852 - </widget>  
853 - <widget class="QPushButton" name="btnResetK">  
854 - <property name="geometry">  
855 - <rect>  
856 - <x>100</x>  
857 - <y>20</y>  
858 - <width>75</width>  
859 - <height>23</height>  
860 - </rect>  
861 - </property>  
862 - <property name="text">  
863 - <string>Reset K</string>  
864 - </property>  
865 - </widget>  
866 - <widget class="QLabel" name="label_5">  
867 - <property name="geometry">  
868 - <rect>  
869 - <x>120</x>  
870 - <y>50</y>  
871 - <width>46</width>  
872 - <height>13</height>  
873 - </rect>  
874 - </property>  
875 - <property name="text">  
876 - <string>Max Iter</string>  
877 - </property>  
878 - </widget>  
879 - </widget>  
880 - </widget>  
881 - <widget class="QMenuBar" name="menuBar">  
882 - <property name="geometry">  
883 - <rect>  
884 - <x>0</x>  
885 - <y>0</y>  
886 - <width>464</width>  
887 - <height>21</height>  
888 - </rect>  
889 - </property>  
890 - <widget class="QMenu" name="menuFile">  
891 - <property name="title">  
892 - <string>Load</string>  
893 - </property>  
894 - <addaction name="mnuLoadReference"/>  
895 - <addaction name="mnuLoadMaterial"/>  
896 - </widget>  
897 - <widget class="QMenu" name="menuSave">  
898 - <property name="title">  
899 - <string>Save</string>  
900 - </property>  
901 - <addaction name="mnuSaveSim"/>  
902 - <addaction name="mnuSaveK"/>  
903 - <addaction name="mnuSaveN"/>  
904 - </widget>  
905 - <widget class="QMenu" name="menuVersion_0_6">  
906 - <property name="title">  
907 - <string>Version 0.6</string>  
908 - </property>  
909 - </widget>  
910 - <addaction name="menuFile"/>  
911 - <addaction name="menuSave"/>  
912 - <addaction name="menuVersion_0_6"/>  
913 - </widget>  
914 - <widget class="QToolBar" name="mainToolBar">  
915 - <attribute name="toolBarArea">  
916 - <enum>TopToolBarArea</enum>  
917 - </attribute>  
918 - <attribute name="toolBarBreak">  
919 - <bool>false</bool>  
920 - </attribute>  
921 - </widget>  
922 - <widget class="QStatusBar" name="statusBar"/>  
923 - <action name="mnuLoadReference">  
924 - <property name="text">  
925 - <string>Load Reference</string>  
926 - </property>  
927 - </action>  
928 - <action name="mnuLoadMaterial">  
929 - <property name="text">  
930 - <string>Load Material</string>  
931 - </property>  
932 - </action>  
933 - <action name="mnuSaveSim">  
934 - <property name="text">  
935 - <string>Simulation</string>  
936 - </property>  
937 - </action>  
938 - <action name="mnuSaveK">  
939 - <property name="text">  
940 - <string>k</string>  
941 - </property>  
942 - </action>  
943 - <action name="mnuSaveN">  
944 - <property name="text">  
945 - <string>n</string>  
946 - </property>  
947 - </action>  
948 - </widget>  
949 - <layoutdefault spacing="6" margin="11"/>  
950 - <resources>  
951 - <include location="interactivemie.qrc"/>  
952 - </resources>  
953 - <connections/>  
954 -</ui> 1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<ui version="4.0">
  3 + <class>InteractiveMieClass</class>
  4 + <widget class="QMainWindow" name="InteractiveMieClass">
  5 + <property name="geometry">
  6 + <rect>
  7 + <x>0</x>
  8 + <y>0</y>
  9 + <width>464</width>
  10 + <height>525</height>
  11 + </rect>
  12 + </property>
  13 + <property name="acceptDrops">
  14 + <bool>true</bool>
  15 + </property>
  16 + <property name="windowTitle">
  17 + <string>InteractiveMie</string>
  18 + </property>
  19 + <widget class="QWidget" name="centralWidget">
  20 + <widget class="QGroupBox" name="groupBox">
  21 + <property name="geometry">
  22 + <rect>
  23 + <x>20</x>
  24 + <y>140</y>
  25 + <width>151</width>
  26 + <height>181</height>
  27 + </rect>
  28 + </property>
  29 + <property name="title">
  30 + <string>Material</string>
  31 + </property>
  32 + <widget class="QDoubleSpinBox" name="spinScaleK">
  33 + <property name="geometry">
  34 + <rect>
  35 + <x>70</x>
  36 + <y>80</y>
  37 + <width>62</width>
  38 + <height>22</height>
  39 + </rect>
  40 + </property>
  41 + <property name="singleStep">
  42 + <double>0.100000000000000</double>
  43 + </property>
  44 + <property name="value">
  45 + <double>1.000000000000000</double>
  46 + </property>
  47 + </widget>
  48 + <widget class="QDoubleSpinBox" name="spinBaseIR">
  49 + <property name="geometry">
  50 + <rect>
  51 + <x>70</x>
  52 + <y>50</y>
  53 + <width>62</width>
  54 + <height>22</height>
  55 + </rect>
  56 + </property>
  57 + <property name="minimum">
  58 + <double>1.000000000000000</double>
  59 + </property>
  60 + <property name="singleStep">
  61 + <double>0.010000000000000</double>
  62 + </property>
  63 + <property name="value">
  64 + <double>1.490000000000000</double>
  65 + </property>
  66 + </widget>
  67 + <widget class="QLabel" name="label_8">
  68 + <property name="geometry">
  69 + <rect>
  70 + <x>30</x>
  71 + <y>50</y>
  72 + <width>46</width>
  73 + <height>13</height>
  74 + </rect>
  75 + </property>
  76 + <property name="text">
  77 + <string>base IR</string>
  78 + </property>
  79 + </widget>
  80 + <widget class="QDoubleSpinBox" name="spinRadius">
  81 + <property name="geometry">
  82 + <rect>
  83 + <x>70</x>
  84 + <y>20</y>
  85 + <width>62</width>
  86 + <height>22</height>
  87 + </rect>
  88 + </property>
  89 + <property name="accelerated">
  90 + <bool>true</bool>
  91 + </property>
  92 + <property name="singleStep">
  93 + <double>0.100000000000000</double>
  94 + </property>
  95 + <property name="value">
  96 + <double>4.000000000000000</double>
  97 + </property>
  98 + </widget>
  99 + <widget class="QLabel" name="label_4">
  100 + <property name="geometry">
  101 + <rect>
  102 + <x>30</x>
  103 + <y>20</y>
  104 + <width>46</width>
  105 + <height>13</height>
  106 + </rect>
  107 + </property>
  108 + <property name="text">
  109 + <string>radius</string>
  110 + </property>
  111 + </widget>
  112 + <widget class="QLabel" name="label_9">
  113 + <property name="geometry">
  114 + <rect>
  115 + <x>30</x>
  116 + <y>80</y>
  117 + <width>46</width>
  118 + <height>13</height>
  119 + </rect>
  120 + </property>
  121 + <property name="text">
  122 + <string>scale K</string>
  123 + </property>
  124 + </widget>
  125 + <widget class="QCheckBox" name="chkApplyMaterial">
  126 + <property name="geometry">
  127 + <rect>
  128 + <x>20</x>
  129 + <y>110</y>
  130 + <width>101</width>
  131 + <height>17</height>
  132 + </rect>
  133 + </property>
  134 + <property name="text">
  135 + <string>Apply Material</string>
  136 + </property>
  137 + <property name="checked">
  138 + <bool>true</bool>
  139 + </property>
  140 + </widget>
  141 + <widget class="QComboBox" name="cmbMaterial">
  142 + <property name="geometry">
  143 + <rect>
  144 + <x>20</x>
  145 + <y>140</y>
  146 + <width>111</width>
  147 + <height>22</height>
  148 + </rect>
  149 + </property>
  150 + </widget>
  151 + </widget>
  152 + <widget class="QGroupBox" name="groupBox_2">
  153 + <property name="geometry">
  154 + <rect>
  155 + <x>20</x>
  156 + <y>10</y>
  157 + <width>241</width>
  158 + <height>131</height>
  159 + </rect>
  160 + </property>
  161 + <property name="title">
  162 + <string>Optics</string>
  163 + </property>
  164 + <widget class="QLabel" name="label_7">
  165 + <property name="geometry">
  166 + <rect>
  167 + <x>5</x>
  168 + <y>50</y>
  169 + <width>71</width>
  170 + <height>20</height>
  171 + </rect>
  172 + </property>
  173 + <property name="text">
  174 + <string>Objective NA</string>
  175 + </property>
  176 + </widget>
  177 + <widget class="QDoubleSpinBox" name="spinCondNAi">
  178 + <property name="geometry">
  179 + <rect>
  180 + <x>80</x>
  181 + <y>20</y>
  182 + <width>62</width>
  183 + <height>22</height>
  184 + </rect>
  185 + </property>
  186 + <property name="maximum">
  187 + <double>1.000000000000000</double>
  188 + </property>
  189 + <property name="singleStep">
  190 + <double>0.010000000000000</double>
  191 + </property>
  192 + </widget>
  193 + <widget class="QLabel" name="label_6">
  194 + <property name="geometry">
  195 + <rect>
  196 + <x>5</x>
  197 + <y>20</y>
  198 + <width>71</width>
  199 + <height>20</height>
  200 + </rect>
  201 + </property>
  202 + <property name="text">
  203 + <string>Condenser NA</string>
  204 + </property>
  205 + </widget>
  206 + <widget class="QDoubleSpinBox" name="spinCondNAo">
  207 + <property name="geometry">
  208 + <rect>
  209 + <x>160</x>
  210 + <y>20</y>
  211 + <width>62</width>
  212 + <height>22</height>
  213 + </rect>
  214 + </property>
  215 + <property name="maximum">
  216 + <double>1.000000000000000</double>
  217 + </property>
  218 + <property name="singleStep">
  219 + <double>0.010000000000000</double>
  220 + </property>
  221 + <property name="value">
  222 + <double>0.600000000000000</double>
  223 + </property>
  224 + </widget>
  225 + <widget class="QDoubleSpinBox" name="spinObjNAo">
  226 + <property name="geometry">
  227 + <rect>
  228 + <x>160</x>
  229 + <y>50</y>
  230 + <width>62</width>
  231 + <height>22</height>
  232 + </rect>
  233 + </property>
  234 + <property name="maximum">
  235 + <double>1.000000000000000</double>
  236 + </property>
  237 + <property name="singleStep">
  238 + <double>0.010000000000000</double>
  239 + </property>
  240 + <property name="value">
  241 + <double>0.600000000000000</double>
  242 + </property>
  243 + </widget>
  244 + <widget class="QDoubleSpinBox" name="spinObjNAi">
  245 + <property name="geometry">
  246 + <rect>
  247 + <x>80</x>
  248 + <y>50</y>
  249 + <width>62</width>
  250 + <height>22</height>
  251 + </rect>
  252 + </property>
  253 + <property name="maximum">
  254 + <double>1.000000000000000</double>
  255 + </property>
  256 + <property name="singleStep">
  257 + <double>0.010000000000000</double>
  258 + </property>
  259 + </widget>
  260 + <widget class="QRadioButton" name="radTransmissionOptics">
  261 + <property name="geometry">
  262 + <rect>
  263 + <x>20</x>
  264 + <y>80</y>
  265 + <width>82</width>
  266 + <height>17</height>
  267 + </rect>
  268 + </property>
  269 + <property name="text">
  270 + <string>Transmission</string>
  271 + </property>
  272 + <property name="checked">
  273 + <bool>true</bool>
  274 + </property>
  275 + </widget>
  276 + <widget class="QRadioButton" name="radReflectionOptics">
  277 + <property name="geometry">
  278 + <rect>
  279 + <x>150</x>
  280 + <y>80</y>
  281 + <width>82</width>
  282 + <height>17</height>
  283 + </rect>
  284 + </property>
  285 + <property name="text">
  286 + <string>Reflection</string>
  287 + </property>
  288 + </widget>
  289 + <widget class="QCheckBox" name="chkPointDetector">
  290 + <property name="geometry">
  291 + <rect>
  292 + <x>150</x>
  293 + <y>100</y>
  294 + <width>101</width>
  295 + <height>17</height>
  296 + </rect>
  297 + </property>
  298 + <property name="text">
  299 + <string>Point Detector</string>
  300 + </property>
  301 + </widget>
  302 + <widget class="QSpinBox" name="spinObjectiveSamples">
  303 + <property name="geometry">
  304 + <rect>
  305 + <x>10</x>
  306 + <y>100</y>
  307 + <width>42</width>
  308 + <height>22</height>
  309 + </rect>
  310 + </property>
  311 + <property name="maximum">
  312 + <number>999</number>
  313 + </property>
  314 + <property name="value">
  315 + <number>200</number>
  316 + </property>
  317 + </widget>
  318 + <widget class="QLabel" name="label_12">
  319 + <property name="geometry">
  320 + <rect>
  321 + <x>60</x>
  322 + <y>100</y>
  323 + <width>71</width>
  324 + <height>16</height>
  325 + </rect>
  326 + </property>
  327 + <property name="text">
  328 + <string>Obj. Samples</string>
  329 + </property>
  330 + </widget>
  331 + </widget>
  332 + <widget class="QGroupBox" name="groupBox_3">
  333 + <property name="geometry">
  334 + <rect>
  335 + <x>280</x>
  336 + <y>20</y>
  337 + <width>161</width>
  338 + <height>411</height>
  339 + </rect>
  340 + </property>
  341 + <property name="title">
  342 + <string>Display</string>
  343 + </property>
  344 + <widget class="QDoubleSpinBox" name="spinAMin">
  345 + <property name="geometry">
  346 + <rect>
  347 + <x>80</x>
  348 + <y>70</y>
  349 + <width>71</width>
  350 + <height>22</height>
  351 + </rect>
  352 + </property>
  353 + <property name="decimals">
  354 + <number>6</number>
  355 + </property>
  356 + <property name="minimum">
  357 + <double>-9999.000000000000000</double>
  358 + </property>
  359 + <property name="maximum">
  360 + <double>9999.000000000000000</double>
  361 + </property>
  362 + <property name="singleStep">
  363 + <double>0.100000000000000</double>
  364 + </property>
  365 + </widget>
  366 + <widget class="QSpinBox" name="spinNuMin">
  367 + <property name="enabled">
  368 + <bool>true</bool>
  369 + </property>
  370 + <property name="geometry">
  371 + <rect>
  372 + <x>10</x>
  373 + <y>70</y>
  374 + <width>61</width>
  375 + <height>22</height>
  376 + </rect>
  377 + </property>
  378 + <property name="minimum">
  379 + <number>1</number>
  380 + </property>
  381 + <property name="maximum">
  382 + <number>100000</number>
  383 + </property>
  384 + <property name="singleStep">
  385 + <number>10</number>
  386 + </property>
  387 + <property name="value">
  388 + <number>800</number>
  389 + </property>
  390 + </widget>
  391 + <widget class="QLabel" name="label_2">
  392 + <property name="geometry">
  393 + <rect>
  394 + <x>110</x>
  395 + <y>20</y>
  396 + <width>16</width>
  397 + <height>16</height>
  398 + </rect>
  399 + </property>
  400 + <property name="text">
  401 + <string>A</string>
  402 + </property>
  403 + </widget>
  404 + <widget class="QDoubleSpinBox" name="spinAMax">
  405 + <property name="geometry">
  406 + <rect>
  407 + <x>80</x>
  408 + <y>40</y>
  409 + <width>71</width>
  410 + <height>22</height>
  411 + </rect>
  412 + </property>
  413 + <property name="decimals">
  414 + <number>6</number>
  415 + </property>
  416 + <property name="minimum">
  417 + <double>-9999.000000000000000</double>
  418 + </property>
  419 + <property name="maximum">
  420 + <double>9999.000000000000000</double>
  421 + </property>
  422 + <property name="singleStep">
  423 + <double>0.100000000000000</double>
  424 + </property>
  425 + <property name="value">
  426 + <double>1.000000000000000</double>
  427 + </property>
  428 + </widget>
  429 + <widget class="QSpinBox" name="spinNuMax">
  430 + <property name="enabled">
  431 + <bool>true</bool>
  432 + </property>
  433 + <property name="geometry">
  434 + <rect>
  435 + <x>10</x>
  436 + <y>40</y>
  437 + <width>61</width>
  438 + <height>22</height>
  439 + </rect>
  440 + </property>
  441 + <property name="minimum">
  442 + <number>1</number>
  443 + </property>
  444 + <property name="maximum">
  445 + <number>100000</number>
  446 + </property>
  447 + <property name="singleStep">
  448 + <number>10</number>
  449 + </property>
  450 + <property name="value">
  451 + <number>4000</number>
  452 + </property>
  453 + </widget>
  454 + <widget class="QLabel" name="label">
  455 + <property name="geometry">
  456 + <rect>
  457 + <x>20</x>
  458 + <y>20</y>
  459 + <width>61</width>
  460 + <height>16</height>
  461 + </rect>
  462 + </property>
  463 + <property name="text">
  464 + <string>nu (cm^-1)</string>
  465 + </property>
  466 + </widget>
  467 + <widget class="QCheckBox" name="chkDisplayRefSpec">
  468 + <property name="geometry">
  469 + <rect>
  470 + <x>10</x>
  471 + <y>230</y>
  472 + <width>131</width>
  473 + <height>17</height>
  474 + </rect>
  475 + </property>
  476 + <property name="text">
  477 + <string>Reference Spectrum</string>
  478 + </property>
  479 + <property name="checked">
  480 + <bool>true</bool>
  481 + </property>
  482 + </widget>
  483 + <widget class="QCheckBox" name="chkDisplaySimSpec">
  484 + <property name="geometry">
  485 + <rect>
  486 + <x>10</x>
  487 + <y>170</y>
  488 + <width>131</width>
  489 + <height>17</height>
  490 + </rect>
  491 + </property>
  492 + <property name="text">
  493 + <string>Simulated Spectrum</string>
  494 + </property>
  495 + <property name="checked">
  496 + <bool>true</bool>
  497 + </property>
  498 + </widget>
  499 + <widget class="QCheckBox" name="chkDisplaySimK">
  500 + <property name="geometry">
  501 + <rect>
  502 + <x>10</x>
  503 + <y>280</y>
  504 + <width>131</width>
  505 + <height>17</height>
  506 + </rect>
  507 + </property>
  508 + <property name="text">
  509 + <string>Simulated K</string>
  510 + </property>
  511 + <property name="checked">
  512 + <bool>false</bool>
  513 + </property>
  514 + </widget>
  515 + <widget class="QDoubleSpinBox" name="spinI0Scale">
  516 + <property name="geometry">
  517 + <rect>
  518 + <x>80</x>
  519 + <y>100</y>
  520 + <width>71</width>
  521 + <height>22</height>
  522 + </rect>
  523 + </property>
  524 + <property name="decimals">
  525 + <number>6</number>
  526 + </property>
  527 + <property name="minimum">
  528 + <double>-99.989999999999995</double>
  529 + </property>
  530 + <property name="singleStep">
  531 + <double>0.010000000000000</double>
  532 + </property>
  533 + </widget>
  534 + <widget class="QLabel" name="label_10">
  535 + <property name="geometry">
  536 + <rect>
  537 + <x>10</x>
  538 + <y>100</y>
  539 + <width>71</width>
  540 + <height>16</height>
  541 + </rect>
  542 + </property>
  543 + <property name="text">
  544 + <string>I0 Scale</string>
  545 + </property>
  546 + </widget>
  547 + <widget class="QDoubleSpinBox" name="spinRefSlope">
  548 + <property name="enabled">
  549 + <bool>false</bool>
  550 + </property>
  551 + <property name="geometry">
  552 + <rect>
  553 + <x>80</x>
  554 + <y>130</y>
  555 + <width>71</width>
  556 + <height>22</height>
  557 + </rect>
  558 + </property>
  559 + <property name="decimals">
  560 + <number>6</number>
  561 + </property>
  562 + <property name="minimum">
  563 + <double>-99.989999999999995</double>
  564 + </property>
  565 + <property name="singleStep">
  566 + <double>0.000010000000000</double>
  567 + </property>
  568 + </widget>
  569 + <widget class="QLabel" name="label_11">
  570 + <property name="geometry">
  571 + <rect>
  572 + <x>10</x>
  573 + <y>130</y>
  574 + <width>71</width>
  575 + <height>16</height>
  576 + </rect>
  577 + </property>
  578 + <property name="text">
  579 + <string>Ref Slope</string>
  580 + </property>
  581 + </widget>
  582 + <widget class="QCheckBox" name="chkDisplayMatK">
  583 + <property name="geometry">
  584 + <rect>
  585 + <x>10</x>
  586 + <y>300</y>
  587 + <width>91</width>
  588 + <height>17</height>
  589 + </rect>
  590 + </property>
  591 + <property name="text">
  592 + <string>Material K</string>
  593 + </property>
  594 + </widget>
  595 + <widget class="QCheckBox" name="chkDisplaySimN">
  596 + <property name="geometry">
  597 + <rect>
  598 + <x>10</x>
  599 + <y>330</y>
  600 + <width>131</width>
  601 + <height>17</height>
  602 + </rect>
  603 + </property>
  604 + <property name="text">
  605 + <string>Simulated N</string>
  606 + </property>
  607 + <property name="checked">
  608 + <bool>false</bool>
  609 + </property>
  610 + </widget>
  611 + <widget class="QCheckBox" name="chkDisplayMatN">
  612 + <property name="geometry">
  613 + <rect>
  614 + <x>10</x>
  615 + <y>350</y>
  616 + <width>91</width>
  617 + <height>17</height>
  618 + </rect>
  619 + </property>
  620 + <property name="text">
  621 + <string>Material N</string>
  622 + </property>
  623 + </widget>
  624 + <widget class="QDoubleSpinBox" name="spinDispScaleK">
  625 + <property name="geometry">
  626 + <rect>
  627 + <x>90</x>
  628 + <y>290</y>
  629 + <width>51</width>
  630 + <height>22</height>
  631 + </rect>
  632 + </property>
  633 + <property name="singleStep">
  634 + <double>0.100000000000000</double>
  635 + </property>
  636 + </widget>
  637 + <widget class="QDoubleSpinBox" name="spinDispScaleN">
  638 + <property name="geometry">
  639 + <rect>
  640 + <x>90</x>
  641 + <y>340</y>
  642 + <width>51</width>
  643 + <height>22</height>
  644 + </rect>
  645 + </property>
  646 + <property name="singleStep">
  647 + <double>0.100000000000000</double>
  648 + </property>
  649 + </widget>
  650 + <widget class="QCheckBox" name="chkNormalize">
  651 + <property name="geometry">
  652 + <rect>
  653 + <x>10</x>
  654 + <y>380</y>
  655 + <width>70</width>
  656 + <height>17</height>
  657 + </rect>
  658 + </property>
  659 + <property name="text">
  660 + <string>Normalize</string>
  661 + </property>
  662 + </widget>
  663 + <widget class="QRadioButton" name="radDisplayAbsorbance">
  664 + <property name="geometry">
  665 + <rect>
  666 + <x>50</x>
  667 + <y>190</y>
  668 + <width>82</width>
  669 + <height>17</height>
  670 + </rect>
  671 + </property>
  672 + <property name="text">
  673 + <string>Absorbance</string>
  674 + </property>
  675 + <property name="checked">
  676 + <bool>true</bool>
  677 + </property>
  678 + </widget>
  679 + <widget class="QRadioButton" name="radDisplayIntensity">
  680 + <property name="geometry">
  681 + <rect>
  682 + <x>50</x>
  683 + <y>210</y>
  684 + <width>82</width>
  685 + <height>17</height>
  686 + </rect>
  687 + </property>
  688 + <property name="text">
  689 + <string>Intensity</string>
  690 + </property>
  691 + </widget>
  692 + <widget class="QDoubleSpinBox" name="spinNormFactor">
  693 + <property name="geometry">
  694 + <rect>
  695 + <x>90</x>
  696 + <y>380</y>
  697 + <width>62</width>
  698 + <height>22</height>
  699 + </rect>
  700 + </property>
  701 + <property name="singleStep">
  702 + <double>1.000000000000000</double>
  703 + </property>
  704 + <property name="value">
  705 + <double>1.000000000000000</double>
  706 + </property>
  707 + </widget>
  708 + </widget>
  709 + <widget class="QPushButton" name="btnFit">
  710 + <property name="geometry">
  711 + <rect>
  712 + <x>180</x>
  713 + <y>150</y>
  714 + <width>75</width>
  715 + <height>23</height>
  716 + </rect>
  717 + </property>
  718 + <property name="text">
  719 + <string>Fit</string>
  720 + </property>
  721 + </widget>
  722 + <widget class="QPushButton" name="btnSave">
  723 + <property name="geometry">
  724 + <rect>
  725 + <x>180</x>
  726 + <y>180</y>
  727 + <width>75</width>
  728 + <height>23</height>
  729 + </rect>
  730 + </property>
  731 + <property name="text">
  732 + <string>Save</string>
  733 + </property>
  734 + </widget>
  735 + <widget class="QPushButton" name="btnReset">
  736 + <property name="geometry">
  737 + <rect>
  738 + <x>180</x>
  739 + <y>210</y>
  740 + <width>75</width>
  741 + <height>23</height>
  742 + </rect>
  743 + </property>
  744 + <property name="text">
  745 + <string>Reset</string>
  746 + </property>
  747 + </widget>
  748 + <widget class="QPushButton" name="btnDistortion">
  749 + <property name="enabled">
  750 + <bool>true</bool>
  751 + </property>
  752 + <property name="geometry">
  753 + <rect>
  754 + <x>180</x>
  755 + <y>240</y>
  756 + <width>75</width>
  757 + <height>23</height>
  758 + </rect>
  759 + </property>
  760 + <property name="text">
  761 + <string>Distortion</string>
  762 + </property>
  763 + </widget>
  764 + <widget class="QPushButton" name="btnTimings">
  765 + <property name="geometry">
  766 + <rect>
  767 + <x>180</x>
  768 + <y>270</y>
  769 + <width>75</width>
  770 + <height>23</height>
  771 + </rect>
  772 + </property>
  773 + <property name="text">
  774 + <string>Timings</string>
  775 + </property>
  776 + </widget>
  777 + <widget class="QGroupBox" name="groupBox_4">
  778 + <property name="geometry">
  779 + <rect>
  780 + <x>20</x>
  781 + <y>320</y>
  782 + <width>201</width>
  783 + <height>111</height>
  784 + </rect>
  785 + </property>
  786 + <property name="title">
  787 + <string>Fit Material</string>
  788 + </property>
  789 + <widget class="QSpinBox" name="spinMaxIter">
  790 + <property name="geometry">
  791 + <rect>
  792 + <x>110</x>
  793 + <y>70</y>
  794 + <width>61</width>
  795 + <height>22</height>
  796 + </rect>
  797 + </property>
  798 + <property name="maximum">
  799 + <number>9999</number>
  800 + </property>
  801 + <property name="value">
  802 + <number>20</number>
  803 + </property>
  804 + </widget>
  805 + <widget class="QLabel" name="label_3">
  806 + <property name="geometry">
  807 + <rect>
  808 + <x>40</x>
  809 + <y>50</y>
  810 + <width>46</width>
  811 + <height>13</height>
  812 + </rect>
  813 + </property>
  814 + <property name="text">
  815 + <string>Error</string>
  816 + </property>
  817 + </widget>
  818 + <widget class="QDoubleSpinBox" name="spinError">
  819 + <property name="geometry">
  820 + <rect>
  821 + <x>20</x>
  822 + <y>70</y>
  823 + <width>71</width>
  824 + <height>22</height>
  825 + </rect>
  826 + </property>
  827 + <property name="decimals">
  828 + <number>7</number>
  829 + </property>
  830 + <property name="maximum">
  831 + <double>0.100000000000000</double>
  832 + </property>
  833 + <property name="singleStep">
  834 + <double>0.000100000000000</double>
  835 + </property>
  836 + <property name="value">
  837 + <double>0.000100000000000</double>
  838 + </property>
  839 + </widget>
  840 + <widget class="QPushButton" name="btnEstimateK">
  841 + <property name="geometry">
  842 + <rect>
  843 + <x>20</x>
  844 + <y>20</y>
  845 + <width>75</width>
  846 + <height>23</height>
  847 + </rect>
  848 + </property>
  849 + <property name="text">
  850 + <string>Estimate K</string>
  851 + </property>
  852 + </widget>
  853 + <widget class="QPushButton" name="btnResetK">
  854 + <property name="geometry">
  855 + <rect>
  856 + <x>100</x>
  857 + <y>20</y>
  858 + <width>75</width>
  859 + <height>23</height>
  860 + </rect>
  861 + </property>
  862 + <property name="text">
  863 + <string>Reset K</string>
  864 + </property>
  865 + </widget>
  866 + <widget class="QLabel" name="label_5">
  867 + <property name="geometry">
  868 + <rect>
  869 + <x>120</x>
  870 + <y>50</y>
  871 + <width>46</width>
  872 + <height>13</height>
  873 + </rect>
  874 + </property>
  875 + <property name="text">
  876 + <string>Max Iter</string>
  877 + </property>
  878 + </widget>
  879 + </widget>
  880 + </widget>
  881 + <widget class="QMenuBar" name="menuBar">
  882 + <property name="geometry">
  883 + <rect>
  884 + <x>0</x>
  885 + <y>0</y>
  886 + <width>464</width>
  887 + <height>21</height>
  888 + </rect>
  889 + </property>
  890 + <widget class="QMenu" name="menuFile">
  891 + <property name="title">
  892 + <string>Load</string>
  893 + </property>
  894 + <addaction name="mnuLoadReference"/>
  895 + <addaction name="mnuLoadMaterial"/>
  896 + </widget>
  897 + <widget class="QMenu" name="menuSave">
  898 + <property name="title">
  899 + <string>Save</string>
  900 + </property>
  901 + <addaction name="mnuSaveSim"/>
  902 + <addaction name="mnuSaveK"/>
  903 + <addaction name="mnuSaveN"/>
  904 + </widget>
  905 + <widget class="QMenu" name="menuVersion_0_6">
  906 + <property name="title">
  907 + <string>Version 0.6</string>
  908 + </property>
  909 + </widget>
  910 + <addaction name="menuFile"/>
  911 + <addaction name="menuSave"/>
  912 + <addaction name="menuVersion_0_6"/>
  913 + </widget>
  914 + <widget class="QToolBar" name="mainToolBar">
  915 + <attribute name="toolBarArea">
  916 + <enum>TopToolBarArea</enum>
  917 + </attribute>
  918 + <attribute name="toolBarBreak">
  919 + <bool>false</bool>
  920 + </attribute>
  921 + </widget>
  922 + <widget class="QStatusBar" name="statusBar"/>
  923 + <action name="mnuLoadReference">
  924 + <property name="text">
  925 + <string>Load Reference</string>
  926 + </property>
  927 + </action>
  928 + <action name="mnuLoadMaterial">
  929 + <property name="text">
  930 + <string>Load Material</string>
  931 + </property>
  932 + </action>
  933 + <action name="mnuSaveSim">
  934 + <property name="text">
  935 + <string>Simulation</string>
  936 + </property>
  937 + </action>
  938 + <action name="mnuSaveK">
  939 + <property name="text">
  940 + <string>k</string>
  941 + </property>
  942 + </action>
  943 + <action name="mnuSaveN">
  944 + <property name="text">
  945 + <string>n</string>
  946 + </property>
  947 + </action>
  948 + </widget>
  949 + <layoutdefault spacing="6" margin="11"/>
  950 + <resources>
  951 + <include location="interactivemie.qrc"/>
  952 + </resources>
  953 + <connections/>
  954 +</ui>
1 -600 0.0241342  
2 -602 0.027446631  
3 -604 0.02823961  
4 -606 0.029234628  
5 -608 0.025898145  
6 -610 0.027709774  
7 -612 0.025719063  
8 -614 0.024429068  
9 -616 0.02854507  
10 -618 0.028690732  
11 -620 0.027360949  
12 -622 0.026091157  
13 -624 0.028641792  
14 -626 0.025692568  
15 -628 0.027570268  
16 -630 0.026608215  
17 -632 0.025158608  
18 -634 0.027824888  
19 -636 0.027869757  
20 -638 0.028231098  
21 -640 0.027216732  
22 -642 0.027256791  
23 -644 0.026774291  
24 -646 0.025499332  
25 -648 0.026889976  
26 -650 0.030071764  
27 -652 0.028157525  
28 -654 0.027086256  
29 -656 0.023530438  
30 -658 0.026059433  
31 -660 0.024346599  
32 -662 0.028048226  
33 -664 0.026330259  
34 -666 0.026601859  
35 -668 0.026131422  
36 -670 0.024728621  
37 -672 0.02338841  
38 -674 0.025137265  
39 -676 0.024573728  
40 -678 0.02555457  
41 -680 0.026601251  
42 -682 0.02396367  
43 -684 0.023990388  
44 -686 0.022609513  
45 -688 0.02293027  
46 -690 0.023659684  
47 -692 0.023029444  
48 -694 0.02354769  
49 -696 0.022885431  
50 -698 0.020916068  
51 -700 0.017366832  
52 -702 0.020254317  
53 -704 0.02021588  
54 -706 0.019612931  
55 -708 0.020605736  
56 -710 0.019409  
57 -712 0.020098812  
58 -714 0.017859943  
59 -716 0.017200361  
60 -718 0.017415851  
61 -720 0.016738256  
62 -722 0.017480257  
63 -724 0.016505558  
64 -726 0.017110302  
65 -728 0.017027064  
66 -730 0.016024705  
67 -732 0.017486817  
68 -734 0.01747258  
69 -736 0.018679356  
70 -738 0.0198481  
71 -740 0.021190117  
72 -742 0.023716217  
73 -744 0.03056829  
74 -746 0.038271622  
75 -748 0.04379452  
76 -750 0.044251529  
77 -752 0.0407681  
78 -754 0.034103515  
79 -756 0.029061414  
80 -758 0.02617678  
81 -760 0.022539928  
82 -762 0.021165925  
83 -764 0.019846463  
84 -766 0.018521271  
85 -768 0.018036484  
86 -770 0.017126223  
87 -772 0.016586444  
88 -774 0.016483205  
89 -776 0.01531947  
90 -778 0.014237011  
91 -780 0.013740482  
92 -782 0.012463683  
93 -784 0.012601353  
94 -786 0.012687382  
95 -788 0.011956341  
96 -790 0.012597304  
97 -792 0.01301531  
98 -794 0.013443559  
99 -796 0.014187849  
100 -798 0.014467894  
101 -800 0.015065439  
102 -802 0.014878516  
103 -804 0.015873769  
104 -806 0.016515435  
105 -808 0.016709374  
106 -810 0.017771403  
107 -812 0.016772822  
108 -814 0.015531226  
109 -816 0.014555445  
110 -818 0.013874898  
111 -820 0.015212008  
112 -822 0.016378744  
113 -824 0.017775592  
114 -826 0.01866164  
115 -828 0.018518393  
116 -830 0.016763911  
117 -832 0.015599009  
118 -834 0.017242919  
119 -836 0.020302394  
120 -838 0.023933252  
121 -840 0.026400268  
122 -842 0.02629389  
123 -844 0.024144284  
124 -846 0.022565086  
125 -848 0.020193958  
126 -850 0.018896857  
127 -852 0.01763933  
128 -854 0.016642232  
129 -856 0.015634651  
130 -858 0.014645714  
131 -860 0.014138096  
132 -862 0.014067378  
133 -864 0.013168089  
134 -866 0.012439437  
135 -868 0.011586666  
136 -870 0.011339401  
137 -872 0.010914962  
138 -874 0.011187976  
139 -876 0.01107262  
140 -878 0.010671149  
141 -880 0.010509334  
142 -882 0.010691428  
143 -884 0.010463665  
144 -886 0.010732772  
145 -888 0.01113261  
146 -890 0.011327793  
147 -892 0.011556208  
148 -894 0.011574848  
149 -896 0.012311955  
150 -898 0.012752431  
151 -900 0.013542695  
152 -902 0.014021246  
153 -904 0.01526174  
154 -906 0.016386114  
155 -908 0.017710929  
156 -910 0.01815038  
157 -912 0.018485943  
158 -914 0.017942962  
159 -916 0.017253983  
160 -918 0.01673434  
161 -920 0.01576578  
162 -922 0.014969642  
163 -924 0.014914081  
164 -926 0.014775756  
165 -928 0.01494549  
166 -930 0.015163243  
167 -932 0.015246393  
168 -934 0.01532558  
169 -936 0.015787325  
170 -938 0.016231344  
171 -940 0.016554737  
172 -942 0.017506803  
173 -944 0.018319774  
174 -946 0.019145212  
175 -948 0.02028672  
176 -950 0.021535268  
177 -952 0.02275816  
178 -954 0.024219016  
179 -956 0.025883888  
180 -958 0.028191904  
181 -960 0.02973823  
182 -962 0.032138566  
183 -964 0.034003184  
184 -966 0.03499998  
185 -968 0.034104727  
186 -970 0.032129204  
187 -972 0.029984542  
188 -974 0.028583373  
189 -976 0.029296818  
190 -978 0.030947438  
191 -980 0.033218509  
192 -982 0.035106761  
193 -984 0.037063027  
194 -986 0.037990186  
195 -988 0.03843855  
196 -990 0.038237958  
197 -992 0.037541096  
198 -994 0.035408946  
199 -996 0.032268154  
200 -998 0.027709144  
201 -1000 0.022616564  
202 -1002 0.017792654  
203 -1004 0.013769074  
204 -1006 0.010837077  
205 -1008 0.009454576  
206 -1010 0.008332445  
207 -1012 0.008116192  
208 -1014 0.007675599  
209 -1016 0.007566205  
210 -1018 0.007612047  
211 -1020 0.007823547  
212 -1022 0.007966098  
213 -1024 0.00809757  
214 -1026 0.008065411  
215 -1028 0.007845732  
216 -1030 0.008024275  
217 -1032 0.008148742  
218 -1034 0.00829201  
219 -1036 0.008417171  
220 -1038 0.008776959  
221 -1040 0.008930208  
222 -1042 0.009109161  
223 -1044 0.009556965  
224 -1046 0.010041021  
225 -1048 0.010441404  
226 -1050 0.011689312  
227 -1052 0.013463372  
228 -1054 0.016068878  
229 -1056 0.019131748  
230 -1058 0.022191274  
231 -1060 0.024570002  
232 -1062 0.025823144  
233 -1064 0.025672626  
234 -1066 0.024900161  
235 -1068 0.023916478  
236 -1070 0.022915273  
237 -1072 0.021869278  
238 -1074 0.021291225  
239 -1076 0.020732279  
240 -1078 0.020423981  
241 -1080 0.019941966  
242 -1082 0.019763979  
243 -1084 0.020171972  
244 -1086 0.020501795  
245 -1088 0.020890993  
246 -1090 0.020973014  
247 -1092 0.021622654  
248 -1094 0.021985718  
249 -1096 0.022794049  
250 -1098 0.023588335  
251 -1100 0.024728944  
252 -1102 0.025840943  
253 -1104 0.027215918  
254 -1106 0.028776335  
255 -1108 0.030474863  
256 -1110 0.032132728  
257 -1112 0.03432894  
258 -1114 0.03658024  
259 -1116 0.039269767  
260 -1118 0.042412102  
261 -1120 0.04564282  
262 -1122 0.048808874  
263 -1124 0.052149974  
264 -1126 0.056015747  
265 -1128 0.060459226  
266 -1130 0.066082016  
267 -1132 0.073004102  
268 -1134 0.082002822  
269 -1136 0.092694241  
270 -1138 0.105040768  
271 -1140 0.119005198  
272 -1142 0.134765364  
273 -1144 0.151290317  
274 -1146 0.166711247  
275 -1148 0.177289661  
276 -1150 0.177581202  
277 -1152 0.168819305  
278 -1154 0.153355038  
279 -1156 0.137689641  
280 -1158 0.124839415  
281 -1160 0.114845252  
282 -1162 0.107880108  
283 -1164 0.102774174  
284 -1166 0.099425166  
285 -1168 0.097407674  
286 -1170 0.09593259  
287 -1172 0.095228179  
288 -1174 0.094643601  
289 -1176 0.093962003  
290 -1178 0.092950837  
291 -1180 0.092259317  
292 -1182 0.092367257  
293 -1184 0.09505949  
294 -1186 0.10084115  
295 -1188 0.108423217  
296 -1190 0.11487388  
297 -1192 0.117710488  
298 -1194 0.115505139  
299 -1196 0.108980564  
300 -1198 0.099427356  
301 -1200 0.088724245  
302 -1202 0.077275287  
303 -1204 0.065974487  
304 -1206 0.055639191  
305 -1208 0.046756707  
306 -1210 0.040144578  
307 -1212 0.035787746  
308 -1214 0.033682891  
309 -1216 0.033223632  
310 -1218 0.034677454  
311 -1220 0.036745772  
312 -1222 0.038893257  
313 -1224 0.041363039  
314 -1226 0.044436197  
315 -1228 0.048838267  
316 -1230 0.054463569  
317 -1232 0.06102213  
318 -1234 0.068108657  
319 -1236 0.074819063  
320 -1238 0.080199202  
321 -1240 0.083557607  
322 -1242 0.084416767  
323 -1244 0.082399867  
324 -1246 0.078105449  
325 -1248 0.072146041  
326 -1250 0.065513193  
327 -1252 0.059389805  
328 -1254 0.054233076  
329 -1256 0.05069896  
330 -1258 0.048560539  
331 -1260 0.048145702  
332 -1262 0.049521078  
333 -1264 0.051961126  
334 -1266 0.055154907  
335 -1268 0.058810026  
336 -1270 0.062094907  
337 -1272 0.063453855  
338 -1274 0.061370974  
339 -1276 0.056096801  
340 -1278 0.048835689  
341 -1280 0.041617703  
342 -1282 0.035115884  
343 -1284 0.029979602  
344 -1286 0.02577722  
345 -1288 0.022496209  
346 -1290 0.020126584  
347 -1292 0.018027203  
348 -1294 0.016327132  
349 -1296 0.014932173  
350 -1298 0.013739422  
351 -1300 0.01257841  
352 -1302 0.011667794  
353 -1304 0.010851348  
354 -1306 0.010116636  
355 -1308 0.009717891  
356 -1310 0.009400051  
357 -1312 0.009109718  
358 -1314 0.00888188  
359 -1316 0.008728033  
360 -1318 0.008555248  
361 -1320 0.008339087  
362 -1322 0.008263885  
363 -1324 0.008135335  
364 -1326 0.008024262  
365 -1328 0.00807128  
366 -1330 0.008133836  
367 -1332 0.008127452  
368 -1334 0.008138716  
369 -1336 0.008226431  
370 -1338 0.008523101  
371 -1340 0.008850838  
372 -1342 0.008854893  
373 -1344 0.009270106  
374 -1346 0.009499399  
375 -1348 0.010017198  
376 -1350 0.01059085  
377 -1352 0.011038176  
378 -1354 0.011773896  
379 -1356 0.012769294  
380 -1358 0.013638295  
381 -1360 0.014465589  
382 -1362 0.01518012  
383 -1364 0.015838836  
384 -1366 0.015586918  
385 -1368 0.015225006  
386 -1370 0.014610879  
387 -1372 0.014078189  
388 -1374 0.013891646  
389 -1376 0.01474375  
390 -1378 0.016541246  
391 -1380 0.019262753  
392 -1382 0.02160541  
393 -1384 0.022915428  
394 -1386 0.023594535  
395 -1388 0.023160304  
396 -1390 0.021560851  
397 -1392 0.019284629  
398 -1394 0.017224111  
399 -1396 0.015715596  
400 -1398 0.01451186  
401 -1400 0.013747084  
402 -1402 0.012838691  
403 -1404 0.011692484  
404 -1406 0.010730102  
405 -1408 0.009879522  
406 -1410 0.009532642  
407 -1412 0.009405445  
408 -1414 0.009421966  
409 -1416 0.009767846  
410 -1418 0.010469222  
411 -1420 0.012306655  
412 -1422 0.014024908  
413 -1424 0.017706846  
414 -1426 0.022583787  
415 -1428 0.029021083  
416 -1430 0.037190928  
417 -1432 0.044809253  
418 -1434 0.049326808  
419 -1436 0.046321255  
420 -1438 0.046591991  
421 -1440 0.044754161  
422 -1442 0.045191988  
423 -1444 0.047429807  
424 -1446 0.05017989  
425 -1448 0.051372585  
426 -1450 0.051926052  
427 -1452 0.048877221  
428 -1454 0.045080598  
429 -1456 0.038315863  
430 -1458 0.036421716  
431 -1460 0.035921234  
432 -1462 0.033572486  
433 -1464 0.030617138  
434 -1466 0.029223629  
435 -1468 0.028215261  
436 -1470 0.027700175  
437 -1472 0.026917795  
438 -1474 0.029504607  
439 -1476 0.030149502  
440 -1478 0.032100457  
441 -1480 0.033473881  
442 -1482 0.035300299  
443 -1484 0.036565357  
444 -1486 0.036261041  
445 -1488 0.033080071  
446 -1490 0.027177502  
447 -1492 0.022131254  
448 -1494 0.01709778  
449 -1496 0.013099563  
450 -1498 0.010530086  
451 -1500 0.008297551  
452 -1502 0.006882263  
453 -1504 0.005898158  
454 -1506 0.007390398  
455 -1508 0.005394371  
456 -1510 0.00469017  
457 -1512 0.004858713  
458 -1514 0.004664992  
459 -1516 0.005005949  
460 -1518 0.004056874  
461 -1520 0.004193847  
462 -1522 0.003657278  
463 -1524 0.00283663  
464 -1526 0.002752255  
465 -1528 0.002349934  
466 -1530 0.002245644  
467 -1532 0.002485224  
468 -1534 0.002614123  
469 -1536 0.002208785  
470 -1538 0.003534115  
471 -1540 0.00409184  
472 -1542 0.003070369  
473 -1544 0.00262039  
474 -1546 0.002380277  
475 -1548 0.00226781  
476 -1550 0.002599999  
477 -1552 0.002356906  
478 -1554 0.003044914  
479 -1556 0.002653725  
480 -1558 0.006023148  
481 -1560 0.004062994  
482 -1562 0.002457177  
483 -1564 0.002618192  
484 -1566 0.002533502  
485 -1568 0.002721934  
486 -1570 0.002891702  
487 -1572 0.002507352  
488 -1574 0.002683978  
489 -1576 0.003586049  
490 -1578 0.002836659  
491 -1580 0.002886234  
492 -1582 0.002913471  
493 -1584 0.003031189  
494 -1586 0.003179643  
495 -1588 0.003307134  
496 -1590 0.003664506  
497 -1592 0.003805406  
498 -1594 0.004094776  
499 -1596 0.00401814  
500 -1598 0.00397432  
501 -1600 0.004099774  
502 -1602 0.00426046  
503 -1604 0.004405449  
504 -1606 0.004566685  
505 -1608 0.004628619  
506 -1610 0.004477913  
507 -1612 0.004433744  
508 -1614 0.004491011  
509 -1616 0.005192656  
510 -1618 0.004285009  
511 -1620 0.004036026  
512 -1622 0.004059854  
513 -1624 0.004105975  
514 -1626 0.003885176  
515 -1628 0.003981282  
516 -1630 0.003952543  
517 -1632 0.003835627  
518 -1634 0.004359047  
519 -1636 0.004402303  
520 -1638 0.004037436  
521 -1640 0.003885624  
522 -1642 0.004009201  
523 -1644 0.003952529  
524 -1646 0.004816486  
525 -1648 0.004304189  
526 -1650 0.003965589  
527 -1652 0.006019426  
528 -1654 0.004885376  
529 -1656 0.004123694  
530 -1658 0.004174164  
531 -1660 0.004235089  
532 -1662 0.004542281  
533 -1664 0.004486926  
534 -1666 0.004614867  
535 -1668 0.004894575  
536 -1670 0.005436912  
537 -1672 0.005431509  
538 -1674 0.005651576  
539 -1676 0.006442447  
540 -1678 0.006865513  
541 -1680 0.007569476  
542 -1682 0.008151428  
543 -1684 0.009926234  
544 -1686 0.010149147  
545 -1688 0.010811564  
546 -1690 0.011577639  
547 -1692 0.012317587  
548 -1694 0.013020018  
549 -1696 0.014610942  
550 -1698 0.015805372  
551 -1700 0.016720898  
552 -1702 0.02059107  
553 -1704 0.022843417  
554 -1706 0.026263481  
555 -1708 0.031574962  
556 -1710 0.03724565  
557 -1712 0.044695611  
558 -1714 0.051489334  
559 -1716 0.064252636  
560 -1718 0.079812715  
561 -1720 0.111108131  
562 -1722 0.134689923  
563 -1724 0.159768011  
564 -1726 0.178664944  
565 -1728 0.189550156  
566 -1730 0.187519211  
567 -1732 0.184568007  
568 -1734 0.148052948  
569 -1736 0.174327833  
570 -1738 0.157782681  
571 -1740 0.130983773  
572 -1742 0.111415729  
573 -1744 0.081721546  
574 -1746 0.057792152  
575 -1748 0.038151926  
576 -1750 0.026069798  
577 -1752 0.017267407  
578 -1754 0.012278154  
579 -1756 0.009329721  
580 -1758 0.007209351  
581 -1760 0.00592142  
582 -1762 0.005374228  
583 -1764 0.004826348  
584 -1766 0.004458699  
585 -1768 0.004270598  
586 -1770 0.003616544  
587 -1772 0.003541228  
588 -1774 0.002583577  
589 -1776 0.002217011  
590 -1778 0.001893818  
591 -1780 0.001935542  
592 -1782 0.001759374  
593 -1784 0.001804172  
594 -1786 0.001733619  
595 -1788 0.001749405  
596 -1790 0.001883088  
597 -1792 0.001990676  
598 -1794 0.00144261  
599 -1796 0.001341056  
600 -1798 0.001334477  
601 -1800 0.001226004  
602 -1802 0.001154986  
603 -1804 0.000870076  
604 -1806 0.000948184  
605 -1808 0.000819373  
606 -1810 0.000877109  
607 -1812 0.000856967  
608 -1814 0.000711407  
609 -1816 0.000664166  
610 -1818 0.000672376  
611 -1820 0.000554067  
612 -1822 0.000636656  
613 -1824 0.000592955  
614 -1826 0.000628019  
615 -1828 0.000694044  
616 -1830 0.000821293  
617 -1832 0.000514679  
618 -1834 0.000528808  
619 -1836 0.000521469  
620 -1838 0.000459258  
621 -1840 0.000346335  
622 -1842 0.000454894  
623 -1844 0.000686447  
624 -1846 0.000322626  
625 -1848 0.00024672  
626 -1850 0.00021652  
627 -1852 0.000228231  
628 -1854 0.000175338  
629 -1856 0.00010178  
630 -1858 4.80366E-05  
631 -1860 0.000163555  
632 -1862 0.000163557  
633 -1864 3.29655E-05  
634 -1866 0.000122024  
635 -1868 0.000276251  
636 -1870 0.000119215  
637 -1872 1.50667E-05  
638 -1874 -6.10E-07  
639 -1876 -6.29537E-05  
640 -1878 -3.01E-06  
641 -1880 -6.19819E-05  
642 -1882 -2.89042E-05  
643 -1884 -4.73032E-05  
644 -1886 2.07543E-05  
645 -1888 5.82048E-05  
646 -1890 9.61175E-05  
647 -1892 -2.35233E-05  
648 -1894 6.6847E-05  
649 -1896 0.000103985  
650 -1898 5.14422E-05  
651 -1900 9.67797E-05  
652 -1902 0.000135013  
653 -1904 0.000172139  
654 -1906 0.000245935  
655 -1908 0.000218667  
656 -1910 0.000249944  
657 -1912 0.000254151  
658 -1914 0.000274606  
659 -1916 0.000246846  
660 -1918 0.000361489  
661 -1920 0.000280901  
662 -1922 0.000476067  
663 -1924 0.00036462  
664 -1926 0.000395353  
665 -1928 0.000442112  
666 -1930 0.000468113  
667 -1932 0.000455817  
668 -1934 0.000471815  
669 -1936 0.000469251  
670 -1938 0.000476748  
671 -1940 0.00051635  
672 -1942 0.000755845  
673 -1944 0.000598315  
674 -1946 0.000708495  
675 -1948 0.000720105  
676 -1950 0.000663963  
677 -1952 0.000798318  
678 -1954 0.000793038  
679 -1956 0.000829472  
680 -1958 0.000848898  
681 -1960 0.000777441  
682 -1962 0.000809709  
683 -1964 0.000740382  
684 -1966 0.000844927  
685 -1968 0.000846562  
686 -1970 0.000842945  
687 -1972 0.000866656  
688 -1974 0.000750066  
689 -1976 0.000875148  
690 -1978 0.000812096  
691 -1980 0.000791832  
692 -1982 0.000795131  
693 -1984 0.000805046  
694 -1986 0.000780545  
695 -1988 0.000796985  
696 -1990 0.000649182  
697 -1992 0.000745563  
698 -1994 0.000695543  
699 -1996 0.00063712  
700 -1998 0.000601964  
701 -2000 0.000563163  
702 -2002 0.000453067  
703 -2004 0.00044115  
704 -2006 0.000470968  
705 -2008 0.000335742  
706 -2010 0.000382163  
707 -2012 0.000362654  
708 -2014 0.000330121  
709 -2016 0.000389084  
710 -2018 0.000292435  
711 -2020 0.000305525  
712 -2022 0.000329511  
713 -2024 0.00038482  
714 -2026 0.000336523  
715 -2028 0.000404901  
716 -2030 0.000380554  
717 -2032 0.000412551  
718 -2034 0.000374696  
719 -2036 0.000440636  
720 -2038 0.000381711  
721 -2040 0.000517346  
722 -2042 0.00051384  
723 -2044 0.000565282  
724 -2046 0.000565683  
725 -2048 0.000568611  
726 -2050 0.000481456  
727 -2052 0.000617706  
728 -2054 0.000528906  
729 -2056 0.00052708  
730 -2058 0.000555077  
731 -2060 0.00050699  
732 -2062 0.000525236  
733 -2064 0.000487272  
734 -2066 0.000539501  
735 -2068 0.000504029  
736 -2070 0.000447441  
737 -2072 0.000516835  
738 -2074 0.00047662  
739 -2076 0.000495004  
740 -2078 0.000456273  
741 -2080 0.000388805  
742 -2082 0.000385634  
743 -2084 0.000323494  
744 -2086 0.00038231  
745 -2088 0.000394126  
746 -2090 0.000383939  
747 -2092 0.000373967  
748 -2094 0.000377053  
749 -2096 0.00038487  
750 -2098 0.000382643  
751 -2100 0.000328327  
752 -2102 0.000300287  
753 -2104 0.000310617  
754 -2106 0.000316786  
755 -2108 0.000333295  
756 -2110 0.000370022  
757 -2112 0.000374474  
758 -2114 0.000401404  
759 -2116 0.000356568  
760 -2118 0.000405314  
761 -2120 0.000407752  
762 -2122 0.000390354  
763 -2124 0.000442652  
764 -2126 0.000408173  
765 -2128 0.000418827  
766 -2130 0.000441786  
767 -2132 0.000344844  
768 -2134 0.000381584  
769 -2136 0.000341404  
770 -2138 0.000395361  
771 -2140 0.000367725  
772 -2142 0.000336463  
773 -2144 0.000391147  
774 -2146 0.000325835  
775 -2148 0.000385238  
776 -2150 0.000365225  
777 -2152 0.000332808  
778 -2154 0.000289714  
779 -2156 0.000283791  
780 -2158 0.000238881  
781 -2160 0.000322866  
782 -2162 0.000286869  
783 -2164 0.000285061  
784 -2166 0.000257684  
785 -2168 0.000312025  
786 -2170 0.000207802  
787 -2172 0.000257015  
788 -2174 0.000220017  
789 -2176 0.00016785  
790 -2178 0.000255717  
791 -2180 0.000290103  
792 -2182 0.000157789  
793 -2184 0.000325881  
794 -2186 0.000247926  
795 -2188 0.000261432  
796 -2190 0.000291347  
797 -2192 0.000280254  
798 -2194 0.000229609  
799 -2196 0.000271056  
800 -2198 0.000270504  
801 -2200 0.000244769  
802 -2202 0.000314874  
803 -2204 0.000229367  
804 -2206 0.00024547  
805 -2208 0.000334635  
806 -2210 0.000279933  
807 -2212 0.000306569  
808 -2214 0.000225706  
809 -2216 0.000278309  
810 -2218 0.000248559  
811 -2220 0.000348697  
812 -2222 0.000245079  
813 -2224 0.000279928  
814 -2226 0.000255734  
815 -2228 0.000240166  
816 -2230 0.000266871  
817 -2232 0.000303392  
818 -2234 0.000314343  
819 -2236 0.000334341  
820 -2238 0.000374558  
821 -2240 0.000341859  
822 -2242 0.000368978  
823 -2244 0.000431373  
824 -2246 0.000366414  
825 -2248 0.000483577  
826 -2250 0.00045685  
827 -2252 0.000405578  
828 -2254 0.000512095  
829 -2256 0.000481377  
830 -2258 0.000514157  
831 -2260 0.000530324  
832 -2262 0.000568964  
833 -2264 0.000509579  
834 -2266 0.000580748  
835 -2268 0.000682969  
836 -2270 0.000728429  
837 -2272 0.000734436  
838 -2274 0.000792405  
839 -2276 0.000821361  
840 -2278 0.000877556  
841 -2280 0.000862509  
842 -2282 0.000976614  
843 -2284 0.000949856  
844 -2286 0.001073058  
845 -2288 0.001016429  
846 -2290 0.001170663  
847 -2292 0.001220265  
848 -2294 0.001173101  
849 -2296 0.001152461  
850 -2298 0.001179885  
851 -2300 0.001206089  
852 -2302 0.001211066  
853 -2304 0.00121729  
854 -2306 0.001241695  
855 -2308 0.001235318  
856 -2310 0.001195495  
857 -2312 0.001301991  
858 -2314 0.001355443  
859 -2316 0.001254785  
860 -2318 0.001389052  
861 -2320 0.001444937  
862 -2322 0.001558414  
863 -2324 0.001760601  
864 -2326 0.001728333  
865 -2328 0.002103392  
866 -2330 0.002092697  
867 -2332 0.002022837  
868 -2334 0.001938495  
869 -2336 0.0020431  
870 -2338 0.001919468  
871 -2340 0.001964749  
872 -2342 0.002282832  
873 -2344 0.00218892  
874 -2346 0.001801857  
875 -2348 0.001061079  
876 -2350 0.001380168  
877 -2352 0.001870321  
878 -2354 0.002102202  
879 -2356 0.002848422  
880 -2358 0.003216502  
881 -2360 0.003213061  
882 -2362 0.003205797  
883 -2364 0.003022776  
884 -2366 0.002849123  
885 -2368 0.002401033  
886 -2370 0.001848448  
887 -2372 0.001970318  
888 -2374 0.001607119  
889 -2376 0.001408379  
890 -2378 0.001289805  
891 -2380 0.001123742  
892 -2382 0.000998744  
893 -2384 0.001002353  
894 -2386 0.001086115  
895 -2388 0.000939055  
896 -2390 0.000948007  
897 -2392 0.000892462  
898 -2394 0.000979962  
899 -2396 0.000928222  
900 -2398 0.000862539  
901 -2400 0.000864195  
902 -2402 0.000886066  
903 -2404 0.000871955  
904 -2406 0.000811919  
905 -2408 0.000766513  
906 -2410 0.000651421  
907 -2412 0.00073298  
908 -2414 0.000708139  
909 -2416 0.000667666  
910 -2418 0.000600986  
911 -2420 0.000610649  
912 -2422 0.000609326  
913 -2424 0.000516116  
914 -2426 0.000492454  
915 -2428 0.00053116  
916 -2430 0.000488114  
917 -2432 0.000460177  
918 -2434 0.000548829  
919 -2436 0.000464511  
920 -2438 0.000491215  
921 -2440 0.000416051  
922 -2442 0.000427695  
923 -2444 0.000395537  
924 -2446 0.000472624  
925 -2448 0.000432484  
926 -2450 0.00050012  
927 -2452 0.000445504  
928 -2454 0.00047767  
929 -2456 0.000445421  
930 -2458 0.000485085  
931 -2460 0.000498423  
932 -2462 0.000507363  
933 -2464 0.000520304  
934 -2466 0.000539524  
935 -2468 0.000608413  
936 -2470 0.000641548  
937 -2472 0.000638234  
938 -2474 0.00070156  
939 -2476 0.000583209  
940 -2478 0.000691745  
941 -2480 0.00069634  
942 -2482 0.000725514  
943 -2484 0.000664786  
944 -2486 0.000695592  
945 -2488 0.000664905  
946 -2490 0.000711927  
947 -2492 0.000729764  
948 -2494 0.000642008  
949 -2496 0.000666359  
950 -2498 0.000576481  
951 -2500 0.000582793  
952 -2502 0.00060028  
953 -2504 0.000485827  
954 -2506 0.00060824  
955 -2508 0.000551492  
956 -2510 0.000514196  
957 -2512 0.000506979  
958 -2514 0.000475469  
959 -2516 0.000432219  
960 -2518 0.000503847  
961 -2520 0.00046777  
962 -2522 0.000500639  
963 -2524 0.00049432  
964 -2526 0.000561426  
965 -2528 0.000522532  
966 -2530 0.000573555  
967 -2532 0.000597892  
968 -2534 0.000685061  
969 -2536 0.000686714  
970 -2538 0.000669184  
971 -2540 0.000688841  
972 -2542 0.000718256  
973 -2544 0.000663613  
974 -2546 0.000709431  
975 -2548 0.000608731  
976 -2550 0.000729101  
977 -2552 0.000729371  
978 -2554 0.000708222  
979 -2556 0.000702107  
980 -2558 0.000589917  
981 -2560 0.00054794  
982 -2562 0.000549422  
983 -2564 0.000571636  
984 -2566 0.000514345  
985 -2568 0.000549508  
986 -2570 0.000524453  
987 -2572 0.000519339  
988 -2574 0.000493066  
989 -2576 0.000434176  
990 -2578 0.000398249  
991 -2580 0.000438974  
992 -2582 0.000447631  
993 -2584 0.000447255  
994 -2586 0.000326312  
995 -2588 0.000408195  
996 -2590 0.000469383  
997 -2592 0.000485155  
998 -2594 0.000414225  
999 -2596 0.000405927  
1000 -2598 0.000367873  
1001 -2600 0.000355028  
1002 -2602 0.000408022  
1003 -2604 0.000409804  
1004 -2606 0.000337436  
1005 -2608 0.000348352  
1006 -2610 0.00035314  
1007 -2612 0.000285114  
1008 -2614 0.000328725  
1009 -2616 0.000270909  
1010 -2618 0.000295957  
1011 -2620 0.000316483  
1012 -2622 0.000322541  
1013 -2624 0.000283893  
1014 -2626 0.000314178  
1015 -2628 0.000268822  
1016 -2630 0.000266477  
1017 -2632 0.000268892  
1018 -2634 0.0002953  
1019 -2636 0.000292207  
1020 -2638 0.000215858  
1021 -2640 0.000294136  
1022 -2642 0.000272093  
1023 -2644 0.000275717  
1024 -2646 0.000346284  
1025 -2648 0.000283192  
1026 -2650 0.000339755  
1027 -2652 0.000255491  
1028 -2654 0.000208977  
1029 -2656 0.000272149  
1030 -2658 0.000282438  
1031 -2660 0.000158046  
1032 -2662 0.000224042  
1033 -2664 0.000228577  
1034 -2666 0.00017862  
1035 -2668 0.000245571  
1036 -2670 0.000196986  
1037 -2672 0.000252557  
1038 -2674 0.000234491  
1039 -2676 0.000203408  
1040 -2678 0.00017293  
1041 -2680 0.000159348  
1042 -2682 0.000234691  
1043 -2684 0.000214546  
1044 -2686 0.000196188  
1045 -2688 0.000157204  
1046 -2690 0.000208069  
1047 -2692 0.000169639  
1048 -2694 0.000218734  
1049 -2696 0.000218285  
1050 -2698 0.000204734  
1051 -2700 0.000201751  
1052 -2702 0.000264115  
1053 -2704 0.000234648  
1054 -2706 0.000212676  
1055 -2708 0.000270374  
1056 -2710 0.000290756  
1057 -2712 0.000240304  
1058 -2714 0.000316656  
1059 -2716 0.000291376  
1060 -2718 0.000294754  
1061 -2720 0.000351815  
1062 -2722 0.000272567  
1063 -2724 0.000249977  
1064 -2726 0.00035259  
1065 -2728 0.000384766  
1066 -2730 0.000393084  
1067 -2732 0.000410739  
1068 -2734 0.000433305  
1069 -2736 0.000404912  
1070 -2738 0.000420901  
1071 -2740 0.000492476  
1072 -2742 0.000399805  
1073 -2744 0.000456151  
1074 -2746 0.00044387  
1075 -2748 0.000409688  
1076 -2750 0.000418955  
1077 -2752 0.000424004  
1078 -2754 0.000451382  
1079 -2756 0.000482778  
1080 -2758 0.000547175  
1081 -2760 0.000552162  
1082 -2762 0.000570681  
1083 -2764 0.000622641  
1084 -2766 0.000691426  
1085 -2768 0.000597925  
1086 -2770 0.000652725  
1087 -2772 0.000584151  
1088 -2774 0.000624201  
1089 -2776 0.000699342  
1090 -2778 0.000638496  
1091 -2780 0.000707106  
1092 -2782 0.000646861  
1093 -2784 0.000709634  
1094 -2786 0.000679525  
1095 -2788 0.000632315  
1096 -2790 0.000696032  
1097 -2792 0.000664708  
1098 -2794 0.000621352  
1099 -2796 0.00073734  
1100 -2798 0.000724259  
1101 -2800 0.000739695  
1102 -2802 0.000776947  
1103 -2804 0.000896622  
1104 -2806 0.000903473  
1105 -2808 0.000879962  
1106 -2810 0.000961547  
1107 -2812 0.00109481  
1108 -2814 0.001158287  
1109 -2816 0.001209232  
1110 -2818 0.001357019  
1111 -2820 0.001408481  
1112 -2822 0.001613266  
1113 -2824 0.001685368  
1114 -2826 0.001927973  
1115 -2828 0.002122571  
1116 -2830 0.00244482  
1117 -2832 0.002763225  
1118 -2834 0.003192688  
1119 -2836 0.003562301  
1120 -2838 0.003995446  
1121 -2840 0.004252916  
1122 -2842 0.004459092  
1123 -2844 0.004622304  
1124 -2846 0.004644934  
1125 -2848 0.004645169  
1126 -2850 0.004785238  
1127 -2852 0.004798618  
1128 -2854 0.004792012  
1129 -2856 0.004820004  
1130 -2858 0.004727274  
1131 -2860 0.004620571  
1132 -2862 0.004699273  
1133 -2864 0.004703525  
1134 -2866 0.004822295  
1135 -2868 0.005009114  
1136 -2870 0.005093301  
1137 -2872 0.005139671  
1138 -2874 0.005266593  
1139 -2876 0.005667  
1140 -2878 0.005788315  
1141 -2880 0.006064578  
1142 -2882 0.006338457  
1143 -2884 0.006550395  
1144 -2886 0.006741246  
1145 -2888 0.006945089  
1146 -2890 0.007130231  
1147 -2892 0.007372441  
1148 -2894 0.007579747  
1149 -2896 0.007731345  
1150 -2898 0.00819576  
1151 -2900 0.008562466  
1152 -2902 0.00903157  
1153 -2904 0.00937914  
1154 -2906 0.009851342  
1155 -2908 0.010332156  
1156 -2910 0.010793932  
1157 -2912 0.011308225  
1158 -2914 0.011939272  
1159 -2916 0.012554826  
1160 -2918 0.01337334  
1161 -2920 0.014110037  
1162 -2922 0.014829331  
1163 -2924 0.01536142  
1164 -2926 0.015789718  
1165 -2928 0.016096233  
1166 -2930 0.016316084  
1167 -2932 0.016308141  
1168 -2934 0.016443279  
1169 -2936 0.016680791  
1170 -2938 0.017027608  
1171 -2940 0.017818197  
1172 -2942 0.019401865  
1173 -2944 0.021799227  
1174 -2946 0.024186537  
1175 -2948 0.025801865  
1176 -2950 0.02625  
1177 -2952 0.02550612  
1178 -2954 0.023583511  
1179 -2956 0.021342843  
1180 -2958 0.01914838  
1181 -2960 0.017090145  
1182 -2962 0.01539656  
1183 -2964 0.013855732  
1184 -2966 0.012593295  
1185 -2968 0.011483726  
1186 -2970 0.01054501  
1187 -2972 0.009914023  
1188 -2974 0.009757613  
1189 -2976 0.009809223  
1190 -2978 0.010218257  
1191 -2980 0.010809435  
1192 -2982 0.011797056  
1193 -2984 0.012770905  
1194 -2986 0.013636468  
1195 -2988 0.014480479  
1196 -2990 0.01515069  
1197 -2992 0.015619918  
1198 -2994 0.015682193  
1199 -2996 0.015754709  
1200 -2998 0.015366002  
1201 -3000 0.014715111  
1202 -3002 0.014003  
1203 -3004 0.013206518  
1204 -3006 0.012292597  
1205 -3008 0.011394086  
1206 -3010 0.010691684  
1207 -3012 0.009936019  
1208 -3014 0.009296964  
1209 -3016 0.008612659  
1210 -3018 0.007984566  
1211 -3020 0.007436537  
1212 -3022 0.006815112  
1213 -3024 0.006429191  
1214 -3026 0.005806243  
1215 -3028 0.005262323  
1216 -3030 0.004768602  
1217 -3032 0.004320524  
1218 -3034 0.003912193  
1219 -3036 0.003421985  
1220 -3038 0.003098582  
1221 -3040 0.002900269  
1222 -3042 0.002511091  
1223 -3044 0.002161083  
1224 -3046 0.002025539  
1225 -3048 0.001869605  
1226 -3050 0.001691835  
1227 -3052 0.001471398  
1228 -3054 0.001359149  
1229 -3056 0.00124824  
1230 -3058 0.001133357  
1231 -3060 0.001085935  
1232 -3062 0.001030814  
1233 -3064 0.00097166  
1234 -3066 0.001020728  
1235 -3068 0.000940853  
1236 -3070 0.000807141  
1237 -3072 0.000755513  
1238 -3074 0.000751446  
1239 -3076 0.000821568  
1240 -3078 0.000793843  
1241 -3080 0.000633856  
1242 -3082 0.000705054  
1243 -3084 0.000693464  
1244 -3086 0.000648687  
1245 -3088 0.00057882  
1246 -3090 0.000621521  
1247 -3092 0.000491364  
1248 -3094 0.000437328  
1249 -3096 0.000406632  
1250 -3098 0.000537293  
1251 -3100 0.000556879  
1252 -3102 0.000452115  
1253 -3104 0.000463953  
1254 -3106 0.00044965  
1255 -3108 0.000471158  
1256 -3110 0.000432904  
1257 -3112 0.00036216  
1258 -3114 0.000454401  
1259 -3116 0.000412792  
1260 -3118 0.000349278  
1261 -3120 0.000378075  
1262 -3122 0.000285745  
1263 -3124 0.000288687  
1264 -3126 0.000338756  
1265 -3128 0.000323915  
1266 -3130 0.000314324  
1267 -3132 0.000371908  
1268 -3134 0.00034566  
1269 -3136 0.000289967  
1270 -3138 0.000259827  
1271 -3140 0.000334098  
1272 -3142 0.000249786  
1273 -3144 0.000306433  
1274 -3146 0.000164054  
1275 -3148 0.000268845  
1276 -3150 0.000311615  
1277 -3152 0.000402332  
1278 -3154 0.000315994  
1279 -3156 0.000353941  
1280 -3158 0.000336543  
1281 -3160 0.000344823  
1282 -3162 0.000370153  
1283 -3164 0.000362917  
1284 -3166 0.000298576  
1285 -3168 0.000363507  
1286 -3170 0.000287784  
1287 -3172 0.000308446  
1288 -3174 0.000250863  
1289 -3176 0.000301188  
1290 -3178 0.00030549  
1291 -3180 0.000281667  
1292 -3182 0.00027927  
1293 -3184 0.00027765  
1294 -3186 0.000293586  
1295 -3188 0.000355302  
1296 -3190 0.000335228  
1297 -3192 0.000335549  
1298 -3194 0.000362798  
1299 -3196 0.000295649  
1300 -3198 0.000373852  
1301 -3200 0.000328326  
1302 -3202 0.000358333  
1303 -3204 0.00032544  
1304 -3206 0.000387597  
1305 -3208 0.000430661  
1306 -3210 0.000417581  
1307 -3212 0.000324994  
1308 -3214 0.000444512  
1309 -3216 0.000400082  
1310 -3218 0.000377286  
1311 -3220 0.000437329  
1312 -3222 0.000356377  
1313 -3224 0.000352642  
1314 -3226 0.000311089  
1315 -3228 0.000382579  
1316 -3230 0.000329813  
1317 -3232 0.000447714  
1318 -3234 0.000472512  
1319 -3236 0.000457032  
1320 -3238 0.000472607  
1321 -3240 0.000363677  
1322 -3242 0.000394328  
1323 -3244 0.000461889  
1324 -3246 0.000490442  
1325 -3248 0.000438482  
1326 -3250 0.000423751  
1327 -3252 0.000433888  
1328 -3254 0.000499297  
1329 -3256 0.000498987  
1330 -3258 0.000465415  
1331 -3260 0.000421804  
1332 -3262 0.000414397  
1333 -3264 0.000405735  
1334 -3266 0.000487632  
1335 -3268 0.000512952  
1336 -3270 0.000538537  
1337 -3272 0.000552512  
1338 -3274 0.000565302  
1339 -3276 0.00052271  
1340 -3278 0.000486071  
1341 -3280 0.000553016  
1342 -3282 0.000551074  
1343 -3284 0.000550423  
1344 -3286 0.000552049  
1345 -3288 0.000582685  
1346 -3290 0.000602594  
1347 -3292 0.00065031  
1348 -3294 0.000492417  
1349 -3296 0.000568134  
1350 -3298 0.000560644  
1351 -3300 0.000606052  
1352 -3302 0.000632562  
1353 -3304 0.000613536  
1354 -3306 0.000629737  
1355 -3308 0.000723508  
1356 -3310 0.000610128  
1357 -3312 0.000629599  
1358 -3314 0.00061646  
1359 -3316 0.000644116  
1360 -3318 0.000657711  
1361 -3320 0.000671348  
1362 -3322 0.000732666  
1363 -3324 0.000591952  
1364 -3326 0.000639223  
1365 -3328 0.000631524  
1366 -3330 0.000664578  
1367 -3332 0.000750598  
1368 -3334 0.000710665  
1369 -3336 0.000775822  
1370 -3338 0.000768051  
1371 -3340 0.000722316  
1372 -3342 0.000659833  
1373 -3344 0.000705481  
1374 -3346 0.000739379  
1375 -3348 0.000754306  
1376 -3350 0.000858934  
1377 -3352 0.000773878  
1378 -3354 0.000745424  
1379 -3356 0.000749742  
1380 -3358 0.00082974  
1381 -3360 0.000824431  
1382 -3362 0.000877307  
1383 -3364 0.000932521  
1384 -3366 0.00087025  
1385 -3368 0.000887279  
1386 -3370 0.000847555  
1387 -3372 0.000884819  
1388 -3374 0.00087596  
1389 -3376 0.000857088  
1390 -3378 0.00093776  
1391 -3380 0.001039654  
1392 -3382 0.001065518  
1393 -3384 0.00099205  
1394 -3386 0.00099477  
1395 -3388 0.000961683  
1396 -3390 0.001041186  
1397 -3392 0.001128488  
1398 -3394 0.001144315  
1399 -3396 0.001224228  
1400 -3398 0.001154251  
1401 -3400 0.001138032  
1402 -3402 0.001173604  
1403 -3404 0.001248265  
1404 -3406 0.001356015  
1405 -3408 0.001285042  
1406 -3410 0.001316454  
1407 -3412 0.001415994  
1408 -3414 0.001463886  
1409 -3416 0.001644794  
1410 -3418 0.001713653  
1411 -3420 0.001730308  
1412 -3422 0.001932657  
1413 -3424 0.001949152  
1414 -3426 0.002006968  
1415 -3428 0.0020619  
1416 -3430 0.002087098  
1417 -3432 0.002206993  
1418 -3434 0.001964774  
1419 -3436 0.002028821  
1420 -3438 0.002393625  
1421 -3440 0.002708104  
1422 -3442 0.002798177  
1423 -3444 0.002983385  
1424 -3446 0.00291298  
1425 -3448 0.002991802  
1426 -3450 0.003001868  
1427 -3452 0.003042922  
1428 -3454 0.002947307  
1429 -3456 0.003051547  
1430 -3458 0.00264556  
1431 -3460 0.002413914  
1432 -3462 0.002811906  
1433 -3464 0.002335021  
1434 -3466 0.001661673  
1435 -3468 0.001509012  
1436 -3470 0.002093659  
1437 -3472 0.002451124  
1438 -3474 0.002367439  
1439 -3476 0.002393187  
1440 -3478 0.001892594  
1441 -3480 0.002007355  
1442 -3482 0.002249049  
1443 -3484 0.002021025  
1444 -3486 0.001697064  
1445 -3488 0.001840785  
1446 -3490 0.001717791  
1447 -3492 0.001588541  
1448 -3494 0.001424759  
1449 -3496 0.001349834  
1450 -3498 0.001273596  
1451 -3500 0.001208783  
1452 -3502 0.001134414  
1453 -3504 0.001144532  
1454 -3506 0.001002239  
1455 -3508 0.001010699  
1456 -3510 0.001003586  
1457 -3512 0.000904709  
1458 -3514 0.000965619  
1459 -3516 0.000937276  
1460 -3518 0.00097229  
1461 -3520 0.000924807  
1462 -3522 0.00095119  
1463 -3524 0.000890108  
1464 -3526 0.000873585  
1465 -3528 0.000885436  
1466 -3530 0.000885047  
1467 -3532 0.000952793  
1468 -3534 0.001030164  
1469 -3536 0.000992343  
1470 -3538 0.000971817  
1471 -3540 0.000915465  
1472 -3542 0.000959877  
1473 -3544 0.001059664  
1474 -3546 0.001041402  
1475 -3548 0.00090259  
1476 -3550 0.000980567  
1477 -3552 0.000914447  
1478 -3554 0.00080593  
1479 -3556 0.000844328  
1480 -3558 0.000743256  
1481 -3560 0.000855686  
1482 -3562 0.000738947  
1483 -3564 0.000834279  
1484 -3566 0.001144887  
1485 -3568 0.000842023  
1486 -3570 0.00067585  
1487 -3572 0.000602224  
1488 -3574 0.000682329  
1489 -3576 0.000581809  
1490 -3578 0.000568449  
1491 -3580 0.000575447  
1492 -3582 0.000481773  
1493 -3584 0.000581484  
1494 -3586 0.00081874  
1495 -3588 0.000617644  
1496 -3590 0.000442477  
1497 -3592 0.000640158  
1498 -3594 0.000675461  
1499 -3596 0.00051728  
1500 -3598 0.000597346  
1501 -3600 0.000584266  
1502 -3602 0.0004527  
1503 -3604 0.000522512  
1504 -3606 0.000624314  
1505 -3608 0.000574119  
1506 -3610 0.000608948  
1507 -3612 0.0008001  
1508 -3614 0.000712729  
1509 -3616 0.000617938  
1510 -3618 0.000826828  
1511 -3620 0.000760759  
1512 -3622 0.000538546  
1513 -3624 0.000557439  
1514 -3626 0.0007446  
1515 -3628 0.00119225  
1516 -3630 0.000526519  
1517 -3632 0.000556606  
1518 -3634 0.000556875  
1519 -3636 0.000506369  
1520 -3638 0.000552368  
1521 -3640 0.000484705  
1522 -3642 0.000499876  
1523 -3644 0.000531957  
1524 -3646 0.001003344  
1525 -3648 0.000945893  
1526 -3650 0.000999296  
1527 -3652 0.000369562  
1528 -3654 0.000439893  
1529 -3656 0.000386363  
1530 -3658 0.000306059  
1531 -3660 0.000268561  
1532 -3662 0.000200995  
1533 -3664 0.000216152  
1534 -3666 0.00031073  
1535 -3668 0.000539568  
1536 -3670 0.000482811  
1537 -3672 0.000170902  
1538 -3674 0.001357086  
1539 -3676 0.00034876  
1540 -3678 0.000117241  
1541 -3680 0.000137332  
1542 -3682 0.000159181  
1543 -3684 0.000118508  
1544 -3686 0.000149121  
1545 -3688 0.000421635  
1546 -3690 0.000330956  
1547 -3692 -1.81766E-05  
1548 -3694 -2.72672E-05  
1549 -3696 -6.55202E-05  
1550 -3698 -8.60E-06  
1551 -3700 1.51871E-05  
1552 -3702 2.32458E-05  
1553 -3704 -0.000101734  
1554 -3706 -5.30903E-05  
1555 -3708 0.000113641  
1556 -3710 0.000309234  
1557 -3712 0.000106649  
1558 -3714 -3.12E-06  
1559 -3716 -5.76521E-05  
1560 -3718 0.000110276  
1561 -3720 9.06626E-05  
1562 -3722 9.32628E-05  
1563 -3724 -1.2309E-05  
1564 -3726 4.60304E-05  
1565 -3728 -8.27521E-05  
1566 -3730 0.000105094  
1567 -3732 0.000359337  
1568 -3734 0.000615865  
1569 -3736 0.000442528  
1570 -3738 3.18536E-05  
1571 -3740 3.5789E-05  
1572 -3742 0.000292863  
1573 -3744 0.000969885  
1574 -3746 0.000136573  
1575 -3748 0.000457883  
1576 -3750 0.00039287  
1577 -3752 0.000280102  
1578 -3754 8.33166E-05  
1579 -3756 0.000108764  
1580 -3758 0.00020727  
1581 -3760 7.00378E-05  
1582 -3762 -5.27051E-05  
1583 -3764 0.000139553  
1584 -3766 -1.72393E-05  
1585 -3768 7.03872E-05  
1586 -3770 -2.01502E-05  
1587 -3772 -0.000120557  
1588 -3774 -8.82563E-05  
1589 -3776 -2.43E-06  
1590 -3778 0.00019793  
1591 -3780 4.93405E-05  
1592 -3782 1.94903E-05  
1593 -3784 1.86442E-05  
1594 -3786 -0.000137666  
1595 -3788 -3.29324E-05  
1596 -3790 -9.87411E-05  
1597 -3792 -1.07826E-05  
1598 -3794 2.08248E-05  
1599 -3796 0.000114587  
1600 -3798 7.00175E-05  
1601 -3800 0.000491793  
1602 -3802 6.04807E-05  
1603 -3804 3.25705E-05  
1604 -3806 0.000310394  
1605 -3808 2.15496E-05  
1606 -3810 8.00694E-05  
1607 -3812 0.000109453  
1608 -3814 0.00030066  
1609 -3816 0.000393264  
1610 -3818 0.000178967  
1611 -3820 0.000808506  
1612 -3822 0.000105035  
1613 -3824 8.46296E-05  
1614 -3826 0.000121773  
1615 -3828 0.000135065  
1616 -3830 0.000274273  
1617 -3832 8.69895E-05  
1618 -3834 0.000222838  
1619 -3836 0.000601996  
1620 -3838 0.000338187  
1621 -3840 0.00024193  
1622 -3842 0.000133521  
1623 -3844 8.45357E-05  
1624 -3846 1.83423E-05  
1625 -3848 3.48799E-05  
1626 -3850 0.000272218  
1627 -3852 0.001030866  
1628 -3854 0.000469528  
1629 -3856 0.000142735  
1630 -3858 6.34538E-05  
1631 -3860 0.000145079  
1632 -3862 0.000227556  
1633 -3864 0.000296134  
1634 -3866 0.000137378  
1635 -3868 0.000451376  
1636 -3870 0.000226189  
1637 -3872 0.000119799  
1638 -3874 0.000122617  
1639 -3876 5.18662E-05  
1640 -3878 0.000219086  
1641 -3880 0.000268173  
1642 -3882 0.000210735  
1643 -3884 0.000346726  
1644 -3886 0.000183689  
1645 -3888 0.000124343  
1646 -3890 0.000288181  
1647 -3892 1.78834E-05  
1648 -3894 9.95453E-05  
1649 -3896 0.000185088  
1650 -3898 0.000404097  
1651 -3900 0.000218476  
1652 -3902 0.000267402  
1653 -3904 0.000295706  
1654 -3906 0.000103094  
1655 -3908 0.000101332  
1656 -3910 0.000105612  
1657 -3912 5.01633E-05  
1658 -3914 5.69529E-05  
1659 -3916 0.000170528  
1660 -3918 9.52556E-05  
1661 -3920 0.000168842  
1662 -3922 0.00010632  
1663 -3924 0.000344961  
1664 -3926 7.59984E-05  
1665 -3928 0.000221155  
1666 -3930 8.75421E-05  
1667 -3932 0.000298592  
1668 -3934 9.37313E-05  
1669 -3936 0.000114365  
1670 -3938 0.000223073  
1671 -3940 0.000267331  
1672 -3942 0.000273424  
1673 -3944 0.000143308  
1674 -3946 0.000155693  
1675 -3948 0.000195926  
1676 -3950 0.00020435  
1677 -3952 0.000132183  
1678 -3954 0.000197331  
1679 -3956 0.000248508  
1680 -3958 0.000140694  
1681 -3960 0.000166407  
1682 -3962 0.000118974  
1683 -3964 7.31663E-05  
1684 -3966 0.00011566  
1685 -3968 7.56379E-05  
1686 -3970 0.000137593  
1687 -3972 0.000116022  
1688 -3974 0.000186931  
1689 -3976 0.000201803  
1690 -3978 0.000150322  
1691 -3980 0.000141396  
1692 -3982 0.000187293  
1693 -3984 0.000263054  
1694 -3986 0.000212817  
1695 -3988 0.000210708  
1696 -3990 0.000217985  
1697 -3992 0.000192881  
1698 -3994 0.000182579  
1699 -3996 0.000164746  
1700 -3998 0.000200347  
1701 -4000 0.000253085  
1702 -4002 0.000171612  
1703 -4004 0.000149877  
1704 -4006 0.000208808  
1705 -4008 0.000140164  
1706 -4010 0.000188787  
1707 -4012 0.000168944  
1708 -4014 0.000177989  
1709 -4016 0.000163891  
1710 -4018 0.000158359  
1711 -4020 0.000136663  
1712 -4022 0.000216707  
1713 -4024 0.000191577  
1714 -4026 0.000150521  
1715 -4028 0.000122795  
1716 -4030 0.000181619  
1717 -4032 0.000211165  
1718 -4034 0.000247671  
1719 -4036 0.000213884  
1720 -4038 0.000193577  
1721 -4040 0.000142549  
1722 -4042 0.000158466  
1723 -4044 0.000246274  
1724 -4046 0.000177406  
1725 -4048 0.000166641  
1726 -4050 0.000176623  
1727 -4052 0.000228601  
1728 -4054 0.000144074  
1729 -4056 0.000218833  
1730 -4058 0.000200763  
1731 -4060 0.000151771  
1732 -4062 0.00015336  
1733 -4064 0.000139108  
1734 -4066 0.000169462  
1735 -4068 0.000123463  
1736 -4070 0.000202624  
1737 -4072 0.000208393  
1738 -4074 0.000167816  
1739 -4076 0.000174958  
1740 -4078 0.000210896  
1741 -4080 0.000207398  
1742 -4082 0.000127384  
1743 -4084 0.000173693  
1744 -4086 0.000200631  
1745 -4088 0.000269673  
1746 -4090 0.000223231  
1747 -4092 0.00029172  
1748 -4094 0.00031649  
1749 -4096 0.000285588  
1750 -4098 0.000251761  
1751 -4100 0.000339028  
1752 -4102 0.000298703  
1753 -4104 0.00024852  
1754 -4106 0.000209136  
1755 -4108 0.000246085  
1756 -4110 0.000282685  
1757 -4112 0.000191696  
1758 -4114 0.000254014  
1759 -4116 0.000228422  
1760 -4118 0.000306607  
1761 -4120 0.000229142  
1762 -4122 0.000348631  
1763 -4124 0.000287556  
1764 -4126 0.000264232  
1765 -4128 0.000209319  
1766 -4130 0.000242237  
1767 -4132 0.000281044  
1768 -4134 0.000321739  
1769 -4136 0.000294847  
1770 -4138 0.000347712  
1771 -4140 0.00036883  
1772 -4142 0.000328563  
1773 -4144 0.000261437  
1774 -4146 0.000334065  
1775 -4148 0.000325497  
1776 -4150 0.000275545  
1777 -4152 0.000358192  
1778 -4154 0.000286392  
1779 -4156 0.000456376  
1780 -4158 0.000388783  
1781 -4160 0.000360544  
1782 -4162 0.000365173  
1783 -4164 0.00028698  
1784 -4166 0.000371822  
1785 -4168 0.000364618  
1786 -4170 0.000288243  
1787 -4172 0.000307984  
1788 -4174 0.000332854  
1789 -4176 0.00032695  
1790 -4178 0.000388172  
1791 -4180 0.000348726  
1792 -4182 0.000368687  
1793 -4184 0.000341082  
1794 -4186 0.000304622  
1795 -4188 0.000287432  
1796 -4190 0.00031641  
1797 -4192 0.000327385  
1798 -4194 0.000313965  
1799 -4196 0.000378199  
1800 -4198 0.000292018  
1801 -4200 0.000371458  
1802 -4202 0.000405758  
1803 -4204 0.000408023  
1804 -4206 0.000371601  
1805 -4208 0.000316549  
1806 -4210 0.000408096  
1807 -4212 0.000363203  
1808 -4214 0.00032933  
1809 -4216 0.00043362  
1810 -4218 0.000370029  
1811 -4220 0.000360431  
1812 -4222 0.000390905  
1813 -4224 0.000308371  
1814 -4226 0.000243889  
1815 -4228 0.000400749  
1816 -4230 0.000232047  
1817 -4232 0.00038913  
1818 -4234 0.000202101  
1819 -4236 0.000313043  
1820 -4238 0.000234972  
1821 -4240 0.000299282  
1822 -4242 0.000291387  
1823 -4244 0.000257221  
1824 -4246 0.000254894  
1825 -4248 0.000313133  
1826 -4250 0.000272395  
1827 -4252 0.000329282  
1828 -4254 0.000211776  
1829 -4256 0.000161765  
1830 -4258 0.0002771  
1831 -4260 0.000244175  
1832 -4262 0.00024201  
1833 -4264 0.000174491  
1834 -4266 0.000304066  
1835 -4268 0.000350939  
1836 -4270 0.000355563  
1837 -4272 0.000271775  
1838 -4274 0.000291467  
1839 -4276 0.000230176  
1840 -4278 0.000394533  
1841 -4280 0.000249728  
1842 -4282 0.000215013  
1843 -4284 0.000246479  
1844 -4286 0.000326038  
1845 -4288 0.000189699  
1846 -4290 0.000268778  
1847 -4292 0.00013331  
1848 -4294 0.000323916  
1849 -4296 0.000216853  
1850 -4298 0.000291581  
1851 -4300 0.000314194  
1852 -4302 0.000279978  
1853 -4304 0.00021133  
1854 -4306 0.000270665  
1855 -4308 0.000204827  
1856 -4310 0.000296492  
1857 -4312 0.000272268  
1858 -4314 0.000237342  
1859 -4316 0.000281693  
1860 -4318 0.000289106  
1861 -4320 0.000303374  
1862 -4322 0.000325679  
1863 -4324 0.000239933  
1864 -4326 0.000314462  
1865 -4328 0.000253209  
1866 -4330 0.000241805  
1867 -4332 0.000351215  
1868 -4334 0.000286358  
1869 -4336 0.000330223  
1870 -4338 0.000369278  
1871 -4340 0.000329129  
1872 -4342 0.000275593  
1873 -4344 0.00029688  
1874 -4346 0.000346473  
1875 -4348 0.000352509  
1876 -4350 0.000355569  
1877 -4352 0.000461464  
1878 -4354 0.000250317  
1879 -4356 0.000427547  
1880 -4358 0.000434099  
1881 -4360 0.000343595  
1882 -4362 0.000350079  
1883 -4364 0.000408112  
1884 -4366 0.000350043  
1885 -4368 0.000411028  
1886 -4370 0.000434798  
1887 -4372 0.000409623  
1888 -4374 0.000423228  
1889 -4376 0.00037185  
1890 -4378 0.000433805  
1891 -4380 0.000454019  
1892 -4382 0.000443482  
1893 -4384 0.000545947  
1894 -4386 0.000429948  
1895 -4388 0.00038776  
1896 -4390 0.000416255  
1897 -4392 0.00040207  
1898 -4394 0.000397386  
1899 -4396 0.00040638  
1900 -4398 0.000369246  
1901 -4400 0.000460818  
1902 -4402 0.000381619  
1903 -4404 0.000382068  
1904 -4406 0.00032482  
1905 -4408 0.000457543  
1906 -4410 0.000455416  
1907 -4412 0.000487212  
1908 -4414 0.000417398  
1909 -4416 0.000382643  
1910 -4418 0.000403196  
1911 -4420 0.000493331  
1912 -4422 0.000341439  
1913 -4424 0.000513969  
1914 -4426 0.000587223  
1915 -4428 0.000580159  
1916 -4430 0.000557957  
1917 -4432 0.000556266  
1918 -4434 0.000517113  
1919 -4436 0.000660822  
1920 -4438 0.000569927  
1921 -4440 0.000582118  
1922 -4442 0.000542652  
1923 -4444 0.000591509  
1924 -4446 0.000512382  
1925 -4448 0.000560221  
1926 -4450 0.000487317  
1927 -4452 0.000482114  
1928 -4454 0.000461281  
1929 -4456 0.000393521  
1930 -4458 0.000388897  
1931 -4460 0.000397314  
1932 -4462 0.000315475  
1933 -4464 0.000310207  
1934 -4466 0.000266723  
1935 -4468 0.000339416  
1936 -4470 0.000292223  
1937 -4472 0.000281582  
1938 -4474 0.000329826  
1939 -4476 0.000289373  
1940 -4478 0.00021093  
1941 -4480 0.000174358  
1942 -4482 0.000341538  
1943 -4484 0.000247057  
1944 -4486 0.000273322  
1945 -4488 0.000234901  
1946 -4490 0.000203559  
1947 -4492 0.000129721  
1948 -4494 7.83785E-05  
1949 -4496 0.000190952  
1950 -4498 0.000131392  
1951 -4500 0.000193057  
1952 -4502 1.24492E-05  
1953 -4504 9.08797E-05  
1954 -4506 0.000144288  
1955 -4508 0.000127571  
1956 -4510 2.51343E-05  
1957 -4512 7.48194E-05  
1958 -4514 0.000103584  
1959 -4516 4.19407E-05  
1960 -4518 2.40009E-05  
1961 -4520 0.000102142  
1962 -4522 1.18914E-05  
1963 -4524 5.72128E-05  
1964 -4526 -8.73734E-05  
1965 -4528 -1.76682E-05  
1966 -4530 -4.90721E-05  
1967 -4532 -4.71309E-05  
1968 -4534 3.91112E-05  
1969 -4536 1.34E-06  
1970 -4538 9.62881E-05  
1971 -4540 3.37309E-05  
1972 -4542 -2.91281E-05  
1973 -4544 -3.2849E-05  
1974 -4546 -1.58304E-05  
1975 -4548 0.000110588  
1976 -4550 7.05284E-05  
1977 -4552 7.94542E-05  
1978 -4554 3.37392E-05  
1979 -4556 -9.20E-06  
1980 -4558 -2.21519E-05  
1981 -4560 3.46914E-05  
1982 -4562 5.61431E-05  
1983 -4564 8.01E-06  
1984 -4566 -0.000103626  
1985 -4568 3.34905E-05  
1986 -4570 -2.32184E-05  
1987 -4572 -1.08982E-05  
1988 -4574 4.1603E-05  
1989 -4576 -5.00568E-05  
1990 -4578 -6.83E-06  
1991 -4580 2.7055E-05  
1992 -4582 2.86344E-05  
1993 -4584 5.87E-06  
1994 -4586 -6.99461E-05  
1995 -4588 -8.39377E-05  
1996 -4590 3.60434E-05  
1997 -4592 7.96765E-05  
1998 -4594 -0.000177672  
1999 -4596 -3.17066E-05  
2000 -4598 3.72168E-05  
2001 -4600 -6.88E-06  
2002 -4602 -6.03735E-05  
2003 -4604 4.66722E-05  
2004 -4606 -3.54641E-05  
2005 -4608 -1.74806E-05  
2006 -4610 -1.28922E-05  
2007 -4612 7.60359E-05  
2008 -4614 8.66487E-05  
2009 -4616 9.21211E-05  
2010 -4618 -5.23373E-05  
2011 -4620 -5.48989E-05  
2012 -4622 -6.38442E-05  
2013 -4624 3.55E-07  
2014 -4626 5.57926E-05  
2015 -4628 -4.49083E-05  
2016 -4630 -2.67924E-05  
2017 -4632 -7.71728E-05  
2018 -4634 3.694E-05  
2019 -4636 0.00012611  
2020 -4638 -5.57319E-05  
2021 -4640 -4.87582E-05  
2022 -4642 9.33695E-05  
2023 -4644 0.000127693  
2024 -4646 -2.1893E-05  
2025 -4648 3.65E-06  
2026 -4650 -3.07E-06  
2027 -4652 -2.23231E-05  
2028 -4654 5.90752E-05  
2029 -4656 1.12225E-05  
2030 -4658 3.36415E-05  
2031 -4660 -9.07325E-05  
2032 -4662 -2.33188E-05  
2033 -4664 7.71021E-05  
2034 -4666 2.75205E-05  
2035 -4668 5.73118E-05  
2036 -4670 0.000100899  
2037 -4672 5.6625E-05  
2038 -4674 0.000142437  
2039 -4676 -2.07439E-05  
2040 -4678 -1.93856E-05  
2041 -4680 9.87695E-05  
2042 -4682 4.89309E-05  
2043 -4684 3.68502E-05  
2044 -4686 0.000153062  
2045 -4688 8.76468E-05  
2046 -4690 0.000112023  
2047 -4692 -9.49E-06  
2048 -4694 2.66218E-05  
2049 -4696 -5.76107E-05  
2050 -4698 -8.38058E-05  
2051 -4700 -2.9238E-05  
2052 -4702 -3.11E-06  
2053 -4704 8.99146E-05  
2054 -4706 1.31697E-05  
2055 -4708 -9.5303E-05  
2056 -4710 -2.87252E-05  
2057 -4712 3.52673E-05  
2058 -4714 0.000136868  
2059 -4716 7.36812E-05  
2060 -4718 4.36516E-05  
2061 -4720 -4.05162E-05  
2062 -4722 -2.18182E-05  
2063 -4724 1.13599E-05  
2064 -4726 -4.26783E-05  
2065 -4728 4.49779E-05  
2066 -4730 5.46657E-05  
2067 -4732 6.31277E-05  
2068 -4734 9.201E-05  
2069 -4736 -2.84995E-05  
2070 -4738 -1.96E-06  
2071 -4740 4.16116E-05  
2072 -4742 2.40E-06  
2073 -4744 0.000106433  
2074 -4746 7.86067E-05  
2075 -4748 -2.31924E-05  
2076 -4750 0.000110697  
2077 -4752 -0.000105205  
2078 -4754 -4.20045E-05  
2079 -4756 5.92E-06  
2080 -4758 -4.33579E-05  
2081 -4760 -0.00010886  
2082 -4762 -7.24948E-05  
2083 -4764 3.96924E-05  
2084 -4766 -0.000191847  
2085 -4768 -0.000117285  
2086 -4770 -6.34291E-05  
2087 -4772 2.12932E-05  
2088 -4774 -3.24E-06  
2089 -4776 1.09424E-05  
2090 -4778 -8.83467E-05  
2091 -4780 3.50E-06  
2092 -4782 -0.000107665  
2093 -4784 -4.71369E-05  
2094 -4786 -0.000105939  
2095 -4788 -1.78558E-05  
2096 -4790 -6.54974E-05  
2097 -4792 -6.69849E-05  
2098 -4794 -0.000104735  
2099 -4796 6.49E-06  
2100 -4798 -0.000146163  
2101 -4800 8.23E-06  
2102 -4802 -3.12394E-05  
2103 -4804 -0.000185322  
2104 -4806 -8.58323E-05  
2105 -4808 -0.000100005  
2106 -4810 -0.00011669  
2107 -4812 -0.000133039  
2108 -4814 -7.84302E-05  
2109 -4816 -9.72117E-05  
2110 -4818 -7.66769E-05  
2111 -4820 -9.0187E-05  
2112 -4822 -0.000155309  
2113 -4824 2.07393E-05  
2114 -4826 5.72E-06  
2115 -4828 -4.57609E-05  
2116 -4830 -0.000194768  
2117 -4832 -0.000133392  
2118 -4834 -0.000165423  
2119 -4836 -0.000152181  
2120 -4838 -0.00017315  
2121 -4840 -6.8367E-05  
2122 -4842 -0.000168049  
2123 -4844 -9.85448E-05  
2124 -4846 -1.83435E-05  
2125 -4848 -4.66214E-05  
2126 -4850 -6.72124E-05  
2127 -4852 -8.60337E-05  
2128 -4854 -0.000139507  
2129 -4856 -7.10E-06  
2130 -4858 -9.54554E-05  
2131 -4860 -7.87667E-05  
2132 -4862 -0.000169032  
2133 -4864 4.42985E-05  
2134 -4866 -5.87E-06  
2135 -4868 -5.49307E-05  
2136 -4870 -9.6575E-05  
2137 -4872 -0.000134905  
2138 -4874 -9.29933E-05  
2139 -4876 -8.09305E-05  
2140 -4878 -0.000291688  
2141 -4880 -9.6625E-05  
2142 -4882 -0.000130894  
2143 -4884 -0.000118673  
2144 -4886 -0.00013703  
2145 -4888 -0.000117201  
2146 -4890 -2.7273E-05  
2147 -4892 -0.000149352  
2148 -4894 -6.61949E-05  
2149 -4896 -0.000129105  
2150 -4898 -0.000158602  
2151 -4900 -8.34552E-05  
2152 -4902 -0.000109603  
2153 -4904 -0.00014692  
2154 -4906 -0.000183268  
2155 -4908 -9.97988E-05  
2156 -4910 -0.000229024  
2157 -4912 -1.11176E-05  
2158 -4914 -0.000155447  
2159 -4916 -8.83261E-05  
2160 -4918 -7.58636E-05  
2161 -4920 -0.000157625  
2162 -4922 -0.000196801  
2163 -4924 -8.35149E-05  
2164 -4926 -9.21691E-05  
2165 -4928 -3.23171E-05  
2166 -4930 -0.000193988  
2167 -4932 -9.61135E-05  
2168 -4934 -0.000101847  
2169 -4936 -6.05769E-05  
2170 -4938 -0.000123916  
2171 -4940 -0.000132141  
2172 -4942 -0.00013735  
2173 -4944 -0.000136462  
2174 -4946 -0.000101766  
2175 -4948 -0.000154092  
2176 -4950 -0.000214223  
2177 -4952 -0.000117774  
2178 -4954 -7.17024E-05  
2179 -4956 -0.000183699  
2180 -4958 -0.00017453  
2181 -4960 -0.000249751  
2182 -4962 -0.000132127  
2183 -4964 5.13399E-05  
2184 -4966 -4.20862E-05  
2185 -4968 -2.52E-06  
2186 -4970 -0.000180519  
2187 -4972 -9.29657E-05  
2188 -4974 -0.000190246  
2189 -4976 -0.000125231  
2190 -4978 3.1279E-05  
2191 -4980 -0.000248043  
2192 -4982 -0.000134352  
2193 -4984 -2.83712E-05  
2194 -4986 -0.000106364  
2195 -4988 -0.000176678  
2196 -4990 -4.92341E-05  
2197 -4992 -5.76105E-05  
2198 -4994 -0.000122315  
2199 -4996 -0.000196789  
2200 -4998 -5.34783E-05  
2201 -5000 -6.5335E-05  
2202 -5002 -0.000226349  
2203 -5004 -0.000101908  
2204 -5006 -6.35036E-05  
2205 -5008 -0.000183858  
2206 -5010 -1.66743E-05  
2207 -5012 -0.000130706  
2208 -5014 4.27E-06  
2209 -5016 -3.28712E-05  
2210 -5018 -0.000182452  
2211 -5020 -6.57517E-05  
2212 -5022 -6.14048E-05  
2213 -5024 -5.15595E-05  
2214 -5026 -5.28437E-05  
2215 -5028 -0.000128204  
2216 -5030 -8.17912E-05  
2217 -5032 -5.30334E-05  
2218 -5034 4.59457E-05  
2219 -5036 -5.073E-05  
2220 -5038 -1.4378E-05  
2221 -5040 -0.000191915  
2222 -5042 -7.42078E-05  
2223 -5044 -0.000115069  
2224 -5046 -0.000147359  
2225 -5048 -5.59493E-05  
2226 -5050 -0.000110795  
2227 -5052 2.13693E-05  
2228 -5054 -3.90667E-05  
2229 -5056 -4.18254E-05  
2230 -5058 -0.000221218  
2231 -5060 -0.000171646  
2232 -5062 -4.28584E-05  
2233 -5064 -0.000103295  
2234 -5066 6.28557E-05  
2235 -5068 -6.38849E-05  
2236 -5070 -7.2519E-05  
2237 -5072 -4.04725E-05  
2238 -5074 -0.000162146  
2239 -5076 -6.50715E-05  
2240 -5078 -4.47088E-05  
2241 -5080 -8.4281E-05  
2242 -5082 -8.43487E-05  
2243 -5084 -0.000186466  
2244 -5086 -0.000247114  
2245 -5088 -3.90E-07  
2246 -5090 -0.000131357  
2247 -5092 -0.000165973  
2248 -5094 3.69467E-05  
2249 -5096 -1.92271E-05  
2250 -5098 -3.22E-06  
2251 -5100 -2.12904E-05  
2252 -5102 -6.97464E-05  
2253 -5104 -0.000102491  
2254 -5106 -0.000121148  
2255 -5108 -3.97039E-05  
2256 -5110 -5.85939E-05  
2257 -5112 -0.000273178  
2258 -5114 -5.84787E-05  
2259 -5116 5.61396E-05  
2260 -5118 -5.16509E-05  
2261 -5120 -0.00018082  
2262 -5122 -5.49575E-05  
2263 -5124 -0.000178501  
2264 -5126 -0.000111293  
2265 -5128 -0.000142361  
2266 -5130 3.78E-06  
2267 -5132 -5.02351E-05  
2268 -5134 9.15343E-05  
2269 -5136 -4.70089E-05  
2270 -5138 -0.00010954  
2271 -5140 1.13571E-05  
2272 -5142 4.82898E-05  
2273 -5144 3.77874E-05  
2274 -5146 -5.93503E-05  
2275 -5148 -0.000164972  
2276 -5150 -8.57053E-05  
2277 -5152 -0.000197877  
2278 -5154 -1.85536E-05  
2279 -5156 -0.000278435  
2280 -5158 -5.9856E-05  
2281 -5160 -5.08827E-05  
2282 -5162 0.000122482  
2283 -5164 5.08896E-05  
2284 -5166 5.83805E-05  
2285 -5168 -0.00012685  
2286 -5170 0.000164092  
2287 -5172 -0.000114154  
2288 -5174 4.62051E-05  
2289 -5176 5.11492E-05  
2290 -5178 -4.62975E-05  
2291 -5180 0.000174738  
2292 -5182 -0.000105599  
2293 -5184 -2.24336E-05  
2294 -5186 6.56395E-05  
2295 -5188 -5.17781E-05  
2296 -5190 7.28549E-05  
2297 -5192 -6.157E-05  
2298 -5194 2.61121E-05  
2299 -5196 0.000121307  
2300 -5198 3.9461E-05  
2301 -5200 6.95204E-05  
2302 -5202 -0.000152101  
2303 -5204 -1.45664E-05  
2304 -5206 -2.81734E-05  
2305 -5208 3.3733E-05  
2306 -5210 -0.000191675  
2307 -5212 -0.000238876  
2308 -5214 5.27E-06  
2309 -5216 -5.55352E-05  
2310 -5218 -0.000242827  
2311 -5220 3.41334E-05  
2312 -5222 -0.000214394  
2313 -5224 1.97708E-05  
2314 -5226 8.8285E-05  
2315 -5228 0.000103699  
2316 -5230 -6.78999E-05  
2317 -5232 -6.29237E-05  
2318 -5234 5.72257E-05  
2319 -5236 -1.89721E-05  
2320 -5238 -0.000113873  
2321 -5240 -4.68908E-05  
2322 -5242 -3.77538E-05  
2323 -5244 0.000139638  
2324 -5246 -4.43735E-05  
2325 -5248 -0.000102626  
2326 -5250 -2.08864E-05  
2327 -5252 7.16191E-05  
2328 -5254 -0.000179139  
2329 -5256 -0.000204764  
2330 -5258 5.62019E-05  
2331 -5260 6.92956E-05  
2332 -5262 -0.00011329  
2333 -5264 -2.34642E-05  
2334 -5266 4.14054E-05  
2335 -5268 1.74697E-05  
2336 -5270 -0.000238236  
2337 -5272 -9.28767E-05  
2338 -5274 -7.16975E-05  
2339 -5276 -0.000127366  
2340 -5278 -0.000230925  
2341 -5280 -2.65856E-05  
2342 -5282 -6.2476E-05  
2343 -5284 -7.327E-05  
2344 -5286 1.91461E-05  
2345 -5288 -7.2295E-05  
2346 -5290 -0.000147312  
2347 -5292 -7.62531E-05  
2348 -5294 -0.000144729  
2349 -5296 -0.000126474  
2350 -5298 -2.27904E-05  
2351 -5300 -0.000112916  
2352 -5302 -8.64288E-05  
2353 -5304 5.86161E-05  
2354 -5306 -0.000139173  
2355 -5308 9.46683E-05  
2356 -5310 -0.000149661  
2357 -5312 -0.000271663  
2358 -5314 1.51686E-05  
2359 -5316 -5.13603E-05  
2360 -5318 4.16107E-05  
2361 -5320 -0.00018097  
2362 -5322 -0.000168231  
2363 -5324 -8.75568E-05  
2364 -5326 1.26443E-05  
2365 -5328 -2.70E-06  
2366 -5330 -0.000102704  
2367 -5332 -3.18529E-05  
2368 -5334 -0.000107168  
2369 -5336 -3.44404E-05  
2370 -5338 5.39579E-05  
2371 -5340 -9.77379E-05  
2372 -5342 0.000125462  
2373 -5344 4.98398E-05  
2374 -5346 -0.000146261  
2375 -5348 -0.000171159  
2376 -5350 -1.69326E-05  
2377 -5352 0.000177523  
2378 -5354 -7.21671E-05  
2379 -5356 -0.000260525  
2380 -5358 -0.000169717  
2381 -5360 -0.000120504  
2382 -5362 -0.000136292  
2383 -5364 -8.95291E-05  
2384 -5366 -0.000137501  
2385 -5368 2.8667E-05  
2386 -5370 -8.19487E-05  
2387 -5372 -0.000148664  
2388 -5374 -2.76867E-05  
2389 -5376 -7.21953E-05  
2390 -5378 -9.64493E-05  
2391 -5380 -0.000148179  
2392 -5382 -5.98436E-05  
2393 -5384 -0.000124761  
2394 -5386 -0.000202081  
2395 -5388 -0.000166304  
2396 -5390 -0.000210005  
2397 -5392 -0.00010521  
2398 -5394 -7.30E-07  
2399 -5396 0.000138772  
2400 -5398 -6.01E-06  
2401 -5400 -0.000188874  
2402 -5402 -5.08203E-05  
2403 -5404 -0.000270553  
2404 -5406 -0.000140069  
2405 -5408 -0.000148844  
2406 -5410 9.32963E-05  
2407 -5412 -0.000131394  
2408 -5414 -0.00011106  
2409 -5416 -9.04442E-05  
2410 -5418 -0.000154567  
2411 -5420 -8.9573E-05  
2412 -5422 -0.000150372  
2413 -5424 -5.82735E-05  
2414 -5426 -0.000166476  
2415 -5428 -1.28661E-05  
2416 -5430 6.85E-06  
2417 -5432 -7.06364E-05  
2418 -5434 -0.000111032  
2419 -5436 -0.000211053  
2420 -5438 -8.24E-06  
2421 -5440 -7.89619E-05  
2422 -5442 1.04035E-05  
2423 -5444 0.000147427  
2424 -5446 -9.76797E-05  
2425 -5448 -0.000136429  
2426 -5450 -0.000211055  
2427 -5452 -0.000161586  
2428 -5454 -5.84473E-05  
2429 -5456 -5.15973E-05  
2430 -5458 -2.10924E-05  
2431 -5460 4.70888E-05  
2432 -5462 -0.000356925  
2433 -5464 -0.000285499  
2434 -5466 -9.7915E-05  
2435 -5468 -7.49916E-05  
2436 -5470 -7.99851E-05  
2437 -5472 -0.000156726  
2438 -5474 7.08954E-05  
2439 -5476 -0.000235041  
2440 -5478 4.11383E-05  
2441 -5480 -8.73586E-05  
2442 -5482 -0.000263069  
2443 -5484 -0.000131456  
2444 -5486 -0.000217176  
2445 -5488 -0.000123259  
2446 -5490 -0.000162573  
2447 -5492 8.80588E-05  
2448 -5494 -5.13835E-05  
2449 -5496 -0.000177107  
2450 -5498 -1.08686E-05  
2451 -5500 -0.00013401  
2452 -5502 -2.17232E-05  
2453 -5504 -0.000204563  
2454 -5506 -0.000130573  
2455 -5508 -0.000138882  
2456 -5510 -4.71656E-05  
2457 -5512 -0.000226241  
2458 -5514 -0.000158162  
2459 -5516 -0.00016349  
2460 -5518 -0.00022113  
2461 -5520 -1.90E-06  
2462 -5522 -8.43313E-05  
2463 -5524 -0.000294269  
2464 -5526 -8.10355E-05  
2465 -5528 -0.0001755  
2466 -5530 -0.000149491  
2467 -5532 -0.000185625  
2468 -5534 -0.000181539  
2469 -5536 -0.000227489  
2470 -5538 -0.000142212  
2471 -5540 -6.22151E-05  
2472 -5542 -4.10673E-05  
2473 -5544 -0.000129738  
2474 -5546 -0.000165541  
2475 -5548 -0.000120703  
2476 -5550 -0.000250116  
2477 -5552 -0.000189888  
2478 -5554 -9.45214E-05  
2479 -5556 -0.000206709  
2480 -5558 -0.000114229  
2481 -5560 -2.74E-06  
2482 -5562 -0.000174771  
2483 -5564 -0.000215381  
2484 -5566 -0.000435337  
2485 -5568 -7.92925E-05  
2486 -5570 -0.000264598  
2487 -5572 -5.21323E-05  
2488 -5574 -0.000184079  
2489 -5576 -0.000195211  
2490 -5578 6.14E-06  
2491 -5580 -1.34219E-05  
2492 -5582 -0.000142205  
2493 -5584 -0.000201266  
2494 -5586 -0.000136273  
2495 -5588 -4.36936E-05  
2496 -5590 -0.000177113  
2497 -5592 -0.000192107  
2498 -5594 -0.000285436  
2499 -5596 -0.000206806  
2500 -5598 -0.000143489  
2501 -5600 -0.000197125  
2502 -5602 -0.000227679  
2503 -5604 -0.000228332  
2504 -5606 -6.73004E-05  
2505 -5608 -0.00010937  
2506 -5610 -0.000349687  
2507 -5612 -0.000177179  
2508 -5614 -0.00025193  
2509 -5616 -5.64675E-05  
2510 -5618 -0.000170188  
2511 -5620 -0.000230005  
2512 -5622 -0.00040001  
2513 -5624 -3.67655E-05  
2514 -5626 -7.16761E-05  
2515 -5628 -0.000397345  
2516 -5630 -4.36E-07  
2517 -5632 -4.1559E-05  
2518 -5634 -0.000190926  
2519 -5636 -0.000371965  
2520 -5638 -0.00024466  
2521 -5640 2.96284E-05  
2522 -5642 -3.24397E-05  
2523 -5644 -0.000369574  
2524 -5646 -9.12484E-05  
2525 -5648 -0.000200854  
2526 -5650 -0.0002112  
2527 -5652 -0.00010615  
2528 -5654 -0.0002109  
2529 -5656 -0.000131312  
2530 -5658 -7.34227E-05  
2531 -5660 -0.000125623  
2532 -5662 -0.000222683  
2533 -5664 -3.11127E-05  
2534 -5666 -0.000142646  
2535 -5668 -9.98779E-05  
2536 -5670 -2.86769E-05  
2537 -5672 -0.000218787  
2538 -5674 -7.01801E-05  
2539 -5676 -0.000370383  
2540 -5678 1.93936E-05  
2541 -5680 -0.000236552  
2542 -5682 -0.000114162  
2543 -5684 -1.40634E-05  
2544 -5686 -9.94189E-05  
2545 -5688 5.44862E-05  
2546 -5690 -9.22632E-05  
2547 -5692 -0.000235726  
2548 -5694 -0.000286721  
2549 -5696 -9.80563E-05  
2550 -5698 -0.000186885  
2551 -5700 -8.91076E-05  
2552 -5702 -0.000116416  
2553 -5704 -0.00014795  
2554 -5706 2.03924E-05  
2555 -5708 -9.58288E-05  
2556 -5710 -6.8708E-05  
2557 -5712 -0.000150654  
2558 -5714 -3.29562E-05  
2559 -5716 -0.000217313  
2560 -5718 1.36356E-05  
2561 -5720 -4.4006E-05  
2562 -5722 -0.000146933  
2563 -5724 -3.21571E-05  
2564 -5726 -0.000122156  
2565 -5728 -0.000269322  
2566 -5730 -0.000197751  
2567 -5732 -0.000130912  
2568 -5734 -0.000154111  
2569 -5736 -9.53856E-05  
2570 -5738 -0.000240261  
2571 -5740 -0.000161401  
2572 -5742 6.45E-06  
2573 -5744 -0.000184411  
2574 -5746 -0.000245277  
2575 -5748 -0.000212489  
2576 -5750 -4.43252E-05  
2577 -5752 -0.000107688  
2578 -5754 1.07502E-05  
2579 -5756 -0.000167197  
2580 -5758 -6.68704E-05  
2581 -5760 -4.80992E-05  
2582 -5762 -5.66434E-05  
2583 -5764 -0.000228705  
2584 -5766 -0.000265847  
2585 -5768 -9.75073E-05  
2586 -5770 -0.000122477  
2587 -5772 -0.00013384  
2588 -5774 -0.00030111  
2589 -5776 -6.26301E-05  
2590 -5778 3.12553E-05  
2591 -5780 -5.04101E-05  
2592 -5782 -0.000160911  
2593 -5784 -3.53197E-05  
2594 -5786 -0.000214252  
2595 -5788 2.99878E-05  
2596 -5790 -0.000147791  
2597 -5792 -4.13023E-05  
2598 -5794 -6.57403E-05  
2599 -5796 -0.000122902  
2600 -5798 2.21647E-05  
2601 -5800 -6.32159E-05  
2602 -5802 -6.96488E-05  
2603 -5804 -0.000176959  
2604 -5806 -0.000104603  
2605 -5808 -2.97849E-05  
2606 -5810 -2.13517E-05  
2607 -5812 -0.000310097  
2608 -5814 -0.000234544  
2609 -5816 -0.000306688  
2610 -5818 -0.000134224  
2611 -5820 -4.62987E-05  
2612 -5822 -8.32075E-05  
2613 -5824 -0.000124491  
2614 -5826 -0.000227533  
2615 -5828 7.63E-06  
2616 -5830 -0.000100538  
2617 -5832 -0.000209111  
2618 -5834 -6.65844E-05  
2619 -5836 -0.000147125  
2620 -5838 -0.000133334  
2621 -5840 -8.70E-06  
2622 -5842 -2.23727E-05  
2623 -5844 -0.000315383  
2624 -5846 -0.000185853  
2625 -5848 0.000154914  
2626 -5850 -0.000121906  
2627 -5852 -6.5162E-05  
2628 -5854 -0.000181952  
2629 -5856 -4.16013E-05  
2630 -5858 -3.0724E-05  
2631 -5860 3.03096E-05  
2632 -5862 6.01019E-05  
2633 -5864 -0.000205749  
2634 -5866 -7.91329E-05  
2635 -5868 -3.1756E-05  
2636 -5870 -0.000153925  
2637 -5872 -4.92637E-05  
2638 -5874 8.94E-06  
2639 -5876 0.000167884  
2640 -5878 2.81044E-05  
2641 -5880 -0.000172485  
2642 -5882 3.85173E-05  
2643 -5884 -0.000199897  
2644 -5886 5.97079E-05  
2645 -5888 1.12013E-05  
2646 -5890 -0.000182001  
2647 -5892 -0.000170865  
2648 -5894 2.87266E-05  
2649 -5896 0.000188198  
2650 -5898 0.000162068  
2651 -5900 6.77282E-05  
2652 -5902 -0.000100557  
2653 -5904 0.000172774  
2654 -5906 5.45068E-05  
2655 -5908 6.71451E-05  
2656 -5910 1.42267E-05  
2657 -5912 0.000159991  
2658 -5914 0.000176915  
2659 -5916 0.000201461  
2660 -5918 7.24557E-05  
2661 -5920 -0.000214255  
2662 -5922 0.000185476  
2663 -5924 5.55465E-05  
2664 -5926 5.85444E-05  
2665 -5928 2.38107E-05  
2666 -5930 0.000209259  
2667 -5932 2.68625E-05  
2668 -5934 6.93668E-05  
2669 -5936 -0.00010269  
2670 -5938 0.000204459  
2671 -5940 4.3037E-05  
2672 -5942 0.000134317  
2673 -5944 0.00011353  
2674 -5946 -1.1138E-05  
2675 -5948 -0.00021765  
2676 -5950 0.000113405  
2677 -5952 -6.84037E-05  
2678 -5954 -6.10258E-05  
2679 -5956 0.000128848  
2680 -5958 6.24606E-05  
2681 -5960 -1.7243E-05  
2682 -5962 -9.28901E-05  
2683 -5964 -0.000124651  
2684 -5966 -0.000180665  
2685 -5968 0.000142526  
2686 -5970 -0.000128998  
2687 -5972 0.000184577  
2688 -5974 -3.74491E-05  
2689 -5976 -0.00013039  
2690 -5978 2.31888E-05  
2691 -5980 0.000132512  
2692 -5982 -0.000132757  
2693 -5984 -0.000164463  
2694 -5986 8.58551E-05  
2695 -5988 -0.000140773  
2696 -5990 -4.35385E-05  
2697 -5992 7.0978E-05  
2698 -5994 -6.24E-06  
2699 -5996 0.000148403  
2700 -5998 0.000188021  
2701 -6000 2.66254E-05  
2702 -6002 8.84368E-05  
2703 -6004 3.65224E-05  
2704 -6006 5.78793E-05  
2705 -6008 3.50034E-05  
2706 -6010 5.62399E-05  
2707 -6012 -5.14362E-05  
2708 -6014 0.00034933  
2709 -6016 0.000168918  
2710 -6018 5.34508E-05  
2711 -6020 0.000122075  
2712 -6022 -4.05053E-05  
2713 -6024 8.9883E-05  
2714 -6026 0.000161734  
2715 -6028 -7.37436E-05  
2716 -6030 -4.95E-06  
2717 -6032 0.00022485  
2718 -6034 -0.000253566  
2719 -6036 0.000122794  
2720 -6038 -2.70286E-05  
2721 -6040 7.11802E-05  
2722 -6042 0.000129984  
2723 -6044 1.57E-06  
2724 -6046 -0.000117867  
2725 -6048 -2.15324E-05  
2726 -6050 -1.38764E-05  
2727 -6052 6.69437E-05  
2728 -6054 -0.000117569  
2729 -6056 1.94807E-05  
2730 -6058 -1.96687E-05  
2731 -6060 -0.000147066  
2732 -6062 5.52879E-05  
2733 -6064 -3.51488E-05  
2734 -6066 1.65759E-05  
2735 -6068 0.000194312  
2736 -6070 -9.75251E-05  
2737 -6072 -0.000286519  
2738 -6074 -0.000133893  
2739 -6076 -0.000144305  
2740 -6078 -0.000206774  
2741 -6080 9.70323E-05  
2742 -6082 0.000105616  
2743 -6084 7.76744E-05  
2744 -6086 -1.85213E-05  
2745 -6088 2.1601E-05  
2746 -6090 2.86444E-05  
2747 -6092 -7.78625E-05  
2748 -6094 -0.000103451  
2749 -6096 5.06513E-05  
2750 -6098 -0.000126614  
2751 -6100 -0.000291543  
2752 -6102 -3.20512E-05  
2753 -6104 -0.00034077  
2754 -6106 4.78E-06  
2755 -6108 -0.00021435  
2756 -6110 -3.06885E-05  
2757 -6112 -0.00013895  
2758 -6114 -6.48402E-05  
2759 -6116 -7.10551E-05  
2760 -6118 -0.000288181  
2761 -6120 -6.09779E-05  
2762 -6122 -0.000224615  
2763 -6124 -8.03908E-05  
2764 -6126 -7.04685E-05  
2765 -6128 7.00613E-05  
2766 -6130 -0.000187151  
2767 -6132 -0.00015411  
2768 -6134 -0.000142311  
2769 -6136 0.000311664  
2770 -6138 0.000185075  
2771 -6140 0.000302768  
2772 -6142 -0.000104647  
2773 -6144 0.000119734  
2774 -6146 -4.93308E-05  
2775 -6148 1.16225E-05  
2776 -6150 -0.000114402  
2777 -6152 -0.00021231  
2778 -6154 7.1843E-05  
2779 -6156 -5.21411E-05  
2780 -6158 -8.98771E-05  
2781 -6160 0.000148557  
2782 -6162 -5.44653E-05  
2783 -6164 -0.00012796  
2784 -6166 9.70156E-05  
2785 -6168 -0.000101064  
2786 -6170 -0.00013553  
2787 -6172 9.9476E-05  
2788 -6174 1.62078E-05  
2789 -6176 -4.40928E-05  
2790 -6178 0.000102579  
2791 -6180 1.77941E-05  
2792 -6182 -0.000149253  
2793 -6184 -8.96427E-05  
2794 -6186 -0.000108399  
2795 -6188 6.41861E-05  
2796 -6190 0.000121833  
2797 -6192 -2.42281E-05  
2798 -6194 -0.000112157  
2799 -6196 -2.51081E-05  
2800 -6198 -3.95046E-05  
2801 -6200 0.000178628  
2802 -6202 -0.000148793  
2803 -6204 -9.57E-06  
2804 -6206 -7.90421E-05  
2805 -6208 -8.07858E-05  
2806 -6210 -4.14175E-05  
2807 -6212 -7.21446E-05  
2808 -6214 0.000149076  
2809 -6216 3.91353E-05  
2810 -6218 -0.000114591  
2811 -6220 -9.9288E-05  
2812 -6222 -0.000113439  
2813 -6224 -2.5277E-05  
2814 -6226 -8.29E-07  
2815 -6228 8.26896E-05  
2816 -6230 -6.24E-06  
2817 -6232 0.000107177  
2818 -6234 -3.60E-06  
2819 -6236 0.000162593  
2820 -6238 -5.28839E-05  
2821 -6240 -0.000174024  
2822 -6242 -0.000101802  
2823 -6244 1.47698E-05  
2824 -6246 4.79099E-05  
2825 -6248 -8.95552E-05  
2826 -6250 0.000146406  
2827 -6252 0.000106973  
2828 -6254 7.08576E-05  
2829 -6256 -5.01693E-05  
2830 -6258 5.31355E-05  
2831 -6260 -0.000233967  
2832 -6262 4.08849E-05  
2833 -6264 -7.93998E-05  
2834 -6266 0.00014663  
2835 -6268 -4.49E-07  
2836 -6270 0.000121188  
2837 -6272 -4.01289E-05  
2838 -6274 9.46038E-05  
2839 -6276 4.40081E-05  
2840 -6278 8.76714E-05  
2841 -6280 -0.000191742  
2842 -6282 -0.000105518  
2843 -6284 -4.94007E-05  
2844 -6286 -4.65298E-05  
2845 -6288 1.22E-07  
2846 -6290 0.000159264  
2847 -6292 3.10034E-05  
2848 -6294 6.24514E-05  
2849 -6296 -2.04794E-05  
2850 -6298 -0.000228969  
2851 -6300 7.75386E-05  
2852 -6302 -8.37533E-05  
2853 -6304 -4.76962E-05  
2854 -6306 0.000134281  
2855 -6308 -9.41E-06  
2856 -6310 -0.000141126  
2857 -6312 -0.000133436  
2858 -6314 9.32692E-05  
2859 -6316 0.000130775  
2860 -6318 0.000198152  
2861 -6320 -5.79899E-05  
2862 -6322 -4.41423E-05  
2863 -6324 0.000143831  
2864 -6326 0.000107897  
2865 -6328 1.79488E-05  
2866 -6330 -0.000148111  
2867 -6332 0.000107348  
2868 -6334 -2.49393E-05  
2869 -6336 -0.000148447  
2870 -6338 0.000163246  
2871 -6340 2.64628E-05  
2872 -6342 6.50765E-05  
2873 -6344 -5.74688E-05  
2874 -6346 9.16788E-05  
2875 -6348 0.000115457  
2876 -6350 2.51624E-05  
2877 -6352 -6.82336E-05  
2878 -6354 0.000175589  
2879 -6356 -2.47157E-05  
2880 -6358 0.000300847  
2881 -6360 4.29191E-05  
2882 -6362 -0.000102159  
2883 -6364 -0.000150186  
2884 -6366 -0.000137124  
2885 -6368 -3.6448E-05  
2886 -6370 6.31217E-05  
2887 -6372 -2.17468E-05  
2888 -6374 0.00020514  
2889 -6376 -0.000288874  
2890 -6378 -0.000196896  
2891 -6380 5.33731E-05  
2892 -6382 -0.00018922  
2893 -6384 5.94367E-05  
2894 -6386 0.00018609  
2895 -6388 -0.000231268  
2896 -6390 0.000188414  
2897 -6392 8.58249E-05  
2898 -6394 0.000322554  
2899 -6396 -8.18526E-05  
2900 -6398 6.46391E-05  
2901 -6400 -3.654E-05  
2902 -6402 -5.43539E-05  
2903 -6404 0.00011808  
2904 -6406 -0.000111429  
2905 -6408 3.37446E-05  
2906 -6410 0.000103862  
2907 -6412 -2.73016E-05  
2908 -6414 0.000148599  
2909 -6416 -0.000175049  
2910 -6418 -7.87E-06  
2911 -6420 -1.44832E-05  
2912 -6422 -8.69714E-05  
2913 -6424 7.46194E-05  
2914 -6426 -8.40362E-05  
2915 -6428 0.000255133  
2916 -6430 -7.29877E-05  
2917 -6432 0.000251098  
2918 -6434 -6.47746E-05  
2919 -6436 -0.000116293  
2920 -6438 0.000176731  
2921 -6440 -8.31E-06  
2922 -6442 -0.000133431  
2923 -6444 -0.000148146  
2924 -6446 1.85739E-05  
2925 -6448 -7.49236E-05  
2926 -6450 7.86825E-05  
2927 -6452 0.000150351  
2928 -6454 8.30916E-05  
2929 -6456 -2.89466E-05  
2930 -6458 2.75E-07  
2931 -6460 -7.6078E-05  
2932 -6462 0.000127013  
2933 -6464 0.000125654  
2934 -6466 -9.06547E-05  
2935 -6468 -0.000245214  
2936 -6470 -9.9701E-05  
2937 -6472 -7.93695E-05  
2938 -6474 -0.000114213  
2939 -6476 0.000128301  
2940 -6478 -7.09795E-05  
2941 -6480 0.00014139  
2942 -6482 6.9353E-05  
2943 -6484 0.000113504  
2944 -6486 -0.000222003  
2945 -6488 0.00011384  
2946 -6490 5.82324E-05  
2947 -6492 -4.78533E-05  
2948 -6494 -0.000172427  
2949 -6496 3.94829E-05  
2950 -6498 -0.000207402  
2951 -6500 -0.000158524  
2952 -6502 7.13359E-05  
2953 -6504 -0.00015144  
2954 -6506 -0.000166462  
2955 -6508 -1.63887E-05  
2956 -6510 8.49982E-05  
2957 -6512 -0.000133497  
2958 -6514 -2.65249E-05  
2959 -6516 -0.000187609  
2960 -6518 -1.77176E-05  
2961 -6520 -0.000139934  
2962 -6522 1.97547E-05  
2963 -6524 -0.000213204  
2964 -6526 -2.25511E-05  
2965 -6528 -5.93047E-05  
2966 -6530 -0.000104047  
2967 -6532 -0.000306345  
2968 -6534 -3.98042E-05  
2969 -6536 -7.78457E-05  
2970 -6538 -7.13E-06  
2971 -6540 -0.000280079  
2972 -6542 0.000154768  
2973 -6544 9.83578E-05  
2974 -6546 0.000181306  
2975 -6548 -0.000133643  
2976 -6550 0.000105885  
2977 -6552 -0.000157576  
2978 -6554 -9.20987E-05  
2979 -6556 -5.51079E-05  
2980 -6558 -3.02747E-05  
2981 -6560 -7.17904E-05  
2982 -6562 -0.000280564  
2983 -6564 -6.67912E-05  
2984 -6566 0.000184375  
2985 -6568 -8.73372E-05  
2986 -6570 -0.000100174  
2987 -6572 -2.82062E-05  
2988 -6574 -8.84695E-05  
2989 -6576 0.000144169  
2990 -6578 -0.000240943  
2991 -6580 -0.000139581  
2992 -6582 0.000120571  
2993 -6584 0.000138317  
2994 -6586 -0.00022769  
2995 -6588 -0.000275816  
2996 -6590 0.00010466  
2997 -6592 7.78823E-05  
2998 -6594 -5.28282E-05  
2999 -6596 -2.40E-06  
3000 -6598 0.000117892  
3001 -6600 -4.19631E-05  
3002 -6602 -0.000315964  
3003 -6604 -0.000410462  
3004 -6606 -0.000120959  
3005 -6608 9.99E-06  
3006 -6610 4.37964E-05  
3007 -6612 -3.31902E-05  
3008 -6614 -8.51607E-05  
3009 -6616 -0.000154694  
3010 -6618 -9.29603E-05  
3011 -6620 5.289E-05  
3012 -6622 -0.000125816  
3013 -6624 -0.000314679  
3014 -6626 -0.00016154  
3015 -6628 -0.000141162  
3016 -6630 -0.000119437  
3017 -6632 -0.0001569  
3018 -6634 -0.000166503  
3019 -6636 0.000112686  
3020 -6638 1.99608E-05  
3021 -6640 4.35539E-05  
3022 -6642 -0.000166097  
3023 -6644 -4.87333E-05  
3024 -6646 -0.000336465  
3025 -6648 -0.00029665  
3026 -6650 -0.000145957  
3027 -6652 7.43624E-05  
3028 -6654 -0.000223543  
3029 -6656 0.000141507  
3030 -6658 0.000143548  
3031 -6660 -0.000207983  
3032 -6662 -3.80663E-05  
3033 -6664 -0.000115808  
3034 -6666 -0.000371392  
3035 -6668 -0.000146251  
3036 -6670 -0.000330336  
3037 -6672 -0.000268665  
3038 -6674 -8.44355E-05  
3039 -6676 -1.45736E-05  
3040 -6678 -0.000355467  
3041 -6680 -0.000112196  
3042 -6682 2.59378E-05  
3043 -6684 -5.07584E-05  
3044 -6686 -2.74706E-05  
3045 -6688 -0.000184275  
3046 -6690 -8.74E-06  
3047 -6692 -2.95378E-05  
3048 -6694 2.54E-06  
3049 -6696 -0.000101312  
3050 -6698 -0.000211174  
3051 -6700 -0.000164924  
3052 -6702 -0.000398584  
3053 -6704 -0.000146533  
3054 -6706 -0.000348778  
3055 -6708 -0.000143255  
3056 -6710 0.000147283  
3057 -6712 -9.8179E-05  
3058 -6714 9.34795E-05  
3059 -6716 -0.000150882  
3060 -6718 -0.000297166  
3061 -6720 1.32743E-05  
3062 -6722 -0.000120746  
3063 -6724 -8.11384E-05  
3064 -6726 -0.000325532  
3065 -6728 -0.000194586  
3066 -6730 -0.00012466  
3067 -6732 -4.78812E-05  
3068 -6734 -9.19999E-05  
3069 -6736 -0.000107843  
3070 -6738 -6.23358E-05  
3071 -6740 -0.000286347  
3072 -6742 -3.71682E-05  
3073 -6744 -4.80E-06  
3074 -6746 -0.000319234  
3075 -6748 -0.000279883  
3076 -6750 -0.000272827  
3077 -6752 -0.000101761  
3078 -6754 -0.000146361  
3079 -6756 -0.000266156  
3080 -6758 0.000102535  
3081 -6760 -0.000386606  
3082 -6762 -0.00018995  
3083 -6764 -0.000215715  
3084 -6766 -0.00023779  
3085 -6768 -0.000211241  
3086 -6770 -0.000283036  
3087 -6772 -0.000106436  
3088 -6774 -0.000187373  
3089 -6776 -0.000190231  
3090 -6778 -1.71093E-05  
3091 -6780 -0.000351549  
3092 -6782 -0.000167132  
3093 -6784 6.03858E-05  
3094 -6786 -0.000311376  
3095 -6788 -0.000142106  
3096 -6790 -1.62293E-05  
3097 -6792 -0.000231522  
3098 -6794 -8.28732E-05  
3099 -6796 -0.000337511  
3100 -6798 -0.000203157  
3101 -6800 -3.72712E-05  
3102 -6802 -0.000234517  
3103 -6804 -1.30E-06  
3104 -6806 -8.99819E-05  
3105 -6808 -3.03547E-05  
3106 -6810 -7.82862E-05  
3107 -6812 -0.000275055  
3108 -6814 8.78416E-05  
3109 -6816 -0.000124671  
3110 -6818 -0.000332395  
3111 -6820 -0.000120407  
3112 -6822 -0.000196254  
3113 -6824 -0.000143466  
3114 -6826 -0.00023199  
3115 -6828 -2.32556E-05  
3116 -6830 -0.000506958  
3117 -6832 1.30E-06  
3118 -6834 -0.000349053  
3119 -6836 -0.000105324  
3120 -6838 -0.000365336  
3121 -6840 -0.000376516  
3122 -6842 -0.000268123  
3123 -6844 -0.000216535  
3124 -6846 -0.000149111  
3125 -6848 -0.000224848  
3126 -6850 -0.000219525  
3127 -6852 3.8059E-05  
3128 -6854 -0.000306124  
3129 -6856 -0.000480935  
3130 -6858 -7.56657E-05  
3131 -6860 -0.000234094  
3132 -6862 -8.62146E-05  
3133 -6864 -4.34679E-05  
3134 -6866 -6.9076E-05  
3135 -6868 -0.000343807  
3136 -6870 -2.52463E-05  
3137 -6872 0.00013412  
3138 -6874 -0.000136273  
3139 -6876 -6.21612E-05  
3140 -6878 -0.000382671  
3141 -6880 -3.57982E-05  
3142 -6882 -0.000173088  
3143 -6884 9.16434E-05  
3144 -6886 -0.000290802  
3145 -6888 -0.00033873  
3146 -6890 -0.000100816  
3147 -6892 -0.000332355  
3148 -6894 -2.15443E-05  
3149 -6896 -0.000139886  
3150 -6898 -0.000147969  
3151 -6900 -0.000250801  
3152 -6902 -0.000287541  
3153 -6904 3.96189E-05  
3154 -6906 -0.00043964  
3155 -6908 -0.000144297  
3156 -6910 -0.000259311  
3157 -6912 -0.000307546  
3158 -6914 -0.000207326  
3159 -6916 -0.000311028  
3160 -6918 1.09E-06  
3161 -6920 -0.000316103  
3162 -6922 -0.000116125  
3163 -6924 -0.0004364  
3164 -6926 -0.00019726  
3165 -6928 2.21665E-05  
3166 -6930 -0.000196139  
3167 -6932 -0.000150559  
3168 -6934 -0.00021327  
3169 -6936 -0.000242659  
3170 -6938 -0.000324069  
3171 -6940 -0.000156015  
3172 -6942 -0.000114122  
3173 -6944 -0.000116531  
3174 -6946 -0.0002098  
3175 -6948 -0.000403686  
3176 -6950 -0.000428051  
3177 -6952 -0.000205227  
3178 -6954 -0.000263236  
3179 -6956 -7.86915E-05  
3180 -6958 -0.000295775  
3181 -6960 -0.000232486  
3182 -6962 -0.000143043  
3183 -6964 -0.000239739  
3184 -6966 -0.000219405  
3185 -6968 -0.000354447  
3186 -6970 9.11346E-05  
3187 -6972 -0.00030139  
3188 -6974 -0.00035907  
3189 -6976 -0.000467083  
3190 -6978 -2.82218E-05  
3191 -6980 -7.5117E-05  
3192 -6982 -0.000384305  
3193 -6984 -0.000260206  
3194 -6986 -0.000183068  
3195 -6988 -0.000267272  
3196 -6990 -0.000436363  
3197 -6992 0.000209017  
3198 -6994 0.000133107  
3199 -6996 -0.000135045  
3200 -6998 -0.00045575 1 +600 0.0241342
  2 +602 0.027446631
  3 +604 0.02823961
  4 +606 0.029234628
  5 +608 0.025898145
  6 +610 0.027709774
  7 +612 0.025719063
  8 +614 0.024429068
  9 +616 0.02854507
  10 +618 0.028690732
  11 +620 0.027360949
  12 +622 0.026091157
  13 +624 0.028641792
  14 +626 0.025692568
  15 +628 0.027570268
  16 +630 0.026608215
  17 +632 0.025158608
  18 +634 0.027824888
  19 +636 0.027869757
  20 +638 0.028231098
  21 +640 0.027216732
  22 +642 0.027256791
  23 +644 0.026774291
  24 +646 0.025499332
  25 +648 0.026889976
  26 +650 0.030071764
  27 +652 0.028157525
  28 +654 0.027086256
  29 +656 0.023530438
  30 +658 0.026059433
  31 +660 0.024346599
  32 +662 0.028048226
  33 +664 0.026330259
  34 +666 0.026601859
  35 +668 0.026131422
  36 +670 0.024728621
  37 +672 0.02338841
  38 +674 0.025137265
  39 +676 0.024573728
  40 +678 0.02555457
  41 +680 0.026601251
  42 +682 0.02396367
  43 +684 0.023990388
  44 +686 0.022609513
  45 +688 0.02293027
  46 +690 0.023659684
  47 +692 0.023029444
  48 +694 0.02354769
  49 +696 0.022885431
  50 +698 0.020916068
  51 +700 0.017366832
  52 +702 0.020254317
  53 +704 0.02021588
  54 +706 0.019612931
  55 +708 0.020605736
  56 +710 0.019409
  57 +712 0.020098812
  58 +714 0.017859943
  59 +716 0.017200361
  60 +718 0.017415851
  61 +720 0.016738256
  62 +722 0.017480257
  63 +724 0.016505558
  64 +726 0.017110302
  65 +728 0.017027064
  66 +730 0.016024705
  67 +732 0.017486817
  68 +734 0.01747258
  69 +736 0.018679356
  70 +738 0.0198481
  71 +740 0.021190117
  72 +742 0.023716217
  73 +744 0.03056829
  74 +746 0.038271622
  75 +748 0.04379452
  76 +750 0.044251529
  77 +752 0.0407681
  78 +754 0.034103515
  79 +756 0.029061414
  80 +758 0.02617678
  81 +760 0.022539928
  82 +762 0.021165925
  83 +764 0.019846463
  84 +766 0.018521271
  85 +768 0.018036484
  86 +770 0.017126223
  87 +772 0.016586444
  88 +774 0.016483205
  89 +776 0.01531947
  90 +778 0.014237011
  91 +780 0.013740482
  92 +782 0.012463683
  93 +784 0.012601353
  94 +786 0.012687382
  95 +788 0.011956341
  96 +790 0.012597304
  97 +792 0.01301531
  98 +794 0.013443559
  99 +796 0.014187849
  100 +798 0.014467894
  101 +800 0.015065439
  102 +802 0.014878516
  103 +804 0.015873769
  104 +806 0.016515435
  105 +808 0.016709374
  106 +810 0.017771403
  107 +812 0.016772822
  108 +814 0.015531226
  109 +816 0.014555445
  110 +818 0.013874898
  111 +820 0.015212008
  112 +822 0.016378744
  113 +824 0.017775592
  114 +826 0.01866164
  115 +828 0.018518393
  116 +830 0.016763911
  117 +832 0.015599009
  118 +834 0.017242919
  119 +836 0.020302394
  120 +838 0.023933252
  121 +840 0.026400268
  122 +842 0.02629389
  123 +844 0.024144284
  124 +846 0.022565086
  125 +848 0.020193958
  126 +850 0.018896857
  127 +852 0.01763933
  128 +854 0.016642232
  129 +856 0.015634651
  130 +858 0.014645714
  131 +860 0.014138096
  132 +862 0.014067378
  133 +864 0.013168089
  134 +866 0.012439437
  135 +868 0.011586666
  136 +870 0.011339401
  137 +872 0.010914962
  138 +874 0.011187976
  139 +876 0.01107262
  140 +878 0.010671149
  141 +880 0.010509334
  142 +882 0.010691428
  143 +884 0.010463665
  144 +886 0.010732772
  145 +888 0.01113261
  146 +890 0.011327793
  147 +892 0.011556208
  148 +894 0.011574848
  149 +896 0.012311955
  150 +898 0.012752431
  151 +900 0.013542695
  152 +902 0.014021246
  153 +904 0.01526174
  154 +906 0.016386114
  155 +908 0.017710929
  156 +910 0.01815038
  157 +912 0.018485943
  158 +914 0.017942962
  159 +916 0.017253983
  160 +918 0.01673434
  161 +920 0.01576578
  162 +922 0.014969642
  163 +924 0.014914081
  164 +926 0.014775756
  165 +928 0.01494549
  166 +930 0.015163243
  167 +932 0.015246393
  168 +934 0.01532558
  169 +936 0.015787325
  170 +938 0.016231344
  171 +940 0.016554737
  172 +942 0.017506803
  173 +944 0.018319774
  174 +946 0.019145212
  175 +948 0.02028672
  176 +950 0.021535268
  177 +952 0.02275816
  178 +954 0.024219016
  179 +956 0.025883888
  180 +958 0.028191904
  181 +960 0.02973823
  182 +962 0.032138566
  183 +964 0.034003184
  184 +966 0.03499998
  185 +968 0.034104727
  186 +970 0.032129204
  187 +972 0.029984542
  188 +974 0.028583373
  189 +976 0.029296818
  190 +978 0.030947438
  191 +980 0.033218509
  192 +982 0.035106761
  193 +984 0.037063027
  194 +986 0.037990186
  195 +988 0.03843855
  196 +990 0.038237958
  197 +992 0.037541096
  198 +994 0.035408946
  199 +996 0.032268154
  200 +998 0.027709144
  201 +1000 0.022616564
  202 +1002 0.017792654
  203 +1004 0.013769074
  204 +1006 0.010837077
  205 +1008 0.009454576
  206 +1010 0.008332445
  207 +1012 0.008116192
  208 +1014 0.007675599
  209 +1016 0.007566205
  210 +1018 0.007612047
  211 +1020 0.007823547
  212 +1022 0.007966098
  213 +1024 0.00809757
  214 +1026 0.008065411
  215 +1028 0.007845732
  216 +1030 0.008024275
  217 +1032 0.008148742
  218 +1034 0.00829201
  219 +1036 0.008417171
  220 +1038 0.008776959
  221 +1040 0.008930208
  222 +1042 0.009109161
  223 +1044 0.009556965
  224 +1046 0.010041021
  225 +1048 0.010441404
  226 +1050 0.011689312
  227 +1052 0.013463372
  228 +1054 0.016068878
  229 +1056 0.019131748
  230 +1058 0.022191274
  231 +1060 0.024570002
  232 +1062 0.025823144
  233 +1064 0.025672626
  234 +1066 0.024900161
  235 +1068 0.023916478
  236 +1070 0.022915273
  237 +1072 0.021869278
  238 +1074 0.021291225
  239 +1076 0.020732279
  240 +1078 0.020423981
  241 +1080 0.019941966
  242 +1082 0.019763979
  243 +1084 0.020171972
  244 +1086 0.020501795
  245 +1088 0.020890993
  246 +1090 0.020973014
  247 +1092 0.021622654
  248 +1094 0.021985718
  249 +1096 0.022794049
  250 +1098 0.023588335
  251 +1100 0.024728944
  252 +1102 0.025840943
  253 +1104 0.027215918
  254 +1106 0.028776335
  255 +1108 0.030474863
  256 +1110 0.032132728
  257 +1112 0.03432894
  258 +1114 0.03658024
  259 +1116 0.039269767
  260 +1118 0.042412102
  261 +1120 0.04564282
  262 +1122 0.048808874
  263 +1124 0.052149974
  264 +1126 0.056015747
  265 +1128 0.060459226
  266 +1130 0.066082016
  267 +1132 0.073004102
  268 +1134 0.082002822
  269 +1136 0.092694241
  270 +1138 0.105040768
  271 +1140 0.119005198
  272 +1142 0.134765364
  273 +1144 0.151290317
  274 +1146 0.166711247
  275 +1148 0.177289661
  276 +1150 0.177581202
  277 +1152 0.168819305
  278 +1154 0.153355038
  279 +1156 0.137689641
  280 +1158 0.124839415
  281 +1160 0.114845252
  282 +1162 0.107880108
  283 +1164 0.102774174
  284 +1166 0.099425166
  285 +1168 0.097407674
  286 +1170 0.09593259
  287 +1172 0.095228179
  288 +1174 0.094643601
  289 +1176 0.093962003
  290 +1178 0.092950837
  291 +1180 0.092259317
  292 +1182 0.092367257
  293 +1184 0.09505949
  294 +1186 0.10084115
  295 +1188 0.108423217
  296 +1190 0.11487388
  297 +1192 0.117710488
  298 +1194 0.115505139
  299 +1196 0.108980564
  300 +1198 0.099427356
  301 +1200 0.088724245
  302 +1202 0.077275287
  303 +1204 0.065974487
  304 +1206 0.055639191
  305 +1208 0.046756707
  306 +1210 0.040144578
  307 +1212 0.035787746
  308 +1214 0.033682891
  309 +1216 0.033223632
  310 +1218 0.034677454
  311 +1220 0.036745772
  312 +1222 0.038893257
  313 +1224 0.041363039
  314 +1226 0.044436197
  315 +1228 0.048838267
  316 +1230 0.054463569
  317 +1232 0.06102213
  318 +1234 0.068108657
  319 +1236 0.074819063
  320 +1238 0.080199202
  321 +1240 0.083557607
  322 +1242 0.084416767
  323 +1244 0.082399867
  324 +1246 0.078105449
  325 +1248 0.072146041
  326 +1250 0.065513193
  327 +1252 0.059389805
  328 +1254 0.054233076
  329 +1256 0.05069896
  330 +1258 0.048560539
  331 +1260 0.048145702
  332 +1262 0.049521078
  333 +1264 0.051961126
  334 +1266 0.055154907
  335 +1268 0.058810026
  336 +1270 0.062094907
  337 +1272 0.063453855
  338 +1274 0.061370974
  339 +1276 0.056096801
  340 +1278 0.048835689
  341 +1280 0.041617703
  342 +1282 0.035115884
  343 +1284 0.029979602
  344 +1286 0.02577722
  345 +1288 0.022496209
  346 +1290 0.020126584
  347 +1292 0.018027203
  348 +1294 0.016327132
  349 +1296 0.014932173
  350 +1298 0.013739422
  351 +1300 0.01257841
  352 +1302 0.011667794
  353 +1304 0.010851348
  354 +1306 0.010116636
  355 +1308 0.009717891
  356 +1310 0.009400051
  357 +1312 0.009109718
  358 +1314 0.00888188
  359 +1316 0.008728033
  360 +1318 0.008555248
  361 +1320 0.008339087
  362 +1322 0.008263885
  363 +1324 0.008135335
  364 +1326 0.008024262
  365 +1328 0.00807128
  366 +1330 0.008133836
  367 +1332 0.008127452
  368 +1334 0.008138716
  369 +1336 0.008226431
  370 +1338 0.008523101
  371 +1340 0.008850838
  372 +1342 0.008854893
  373 +1344 0.009270106
  374 +1346 0.009499399
  375 +1348 0.010017198
  376 +1350 0.01059085
  377 +1352 0.011038176
  378 +1354 0.011773896
  379 +1356 0.012769294
  380 +1358 0.013638295
  381 +1360 0.014465589
  382 +1362 0.01518012
  383 +1364 0.015838836
  384 +1366 0.015586918
  385 +1368 0.015225006
  386 +1370 0.014610879
  387 +1372 0.014078189
  388 +1374 0.013891646
  389 +1376 0.01474375
  390 +1378 0.016541246
  391 +1380 0.019262753
  392 +1382 0.02160541
  393 +1384 0.022915428
  394 +1386 0.023594535
  395 +1388 0.023160304
  396 +1390 0.021560851
  397 +1392 0.019284629
  398 +1394 0.017224111
  399 +1396 0.015715596
  400 +1398 0.01451186
  401 +1400 0.013747084
  402 +1402 0.012838691
  403 +1404 0.011692484
  404 +1406 0.010730102
  405 +1408 0.009879522
  406 +1410 0.009532642
  407 +1412 0.009405445
  408 +1414 0.009421966
  409 +1416 0.009767846
  410 +1418 0.010469222
  411 +1420 0.012306655
  412 +1422 0.014024908
  413 +1424 0.017706846
  414 +1426 0.022583787
  415 +1428 0.029021083
  416 +1430 0.037190928
  417 +1432 0.044809253
  418 +1434 0.049326808
  419 +1436 0.046321255
  420 +1438 0.046591991
  421 +1440 0.044754161
  422 +1442 0.045191988
  423 +1444 0.047429807
  424 +1446 0.05017989
  425 +1448 0.051372585
  426 +1450 0.051926052
  427 +1452 0.048877221
  428 +1454 0.045080598
  429 +1456 0.038315863
  430 +1458 0.036421716
  431 +1460 0.035921234
  432 +1462 0.033572486
  433 +1464 0.030617138
  434 +1466 0.029223629
  435 +1468 0.028215261
  436 +1470 0.027700175
  437 +1472 0.026917795
  438 +1474 0.029504607
  439 +1476 0.030149502
  440 +1478 0.032100457
  441 +1480 0.033473881
  442 +1482 0.035300299
  443 +1484 0.036565357
  444 +1486 0.036261041
  445 +1488 0.033080071
  446 +1490 0.027177502
  447 +1492 0.022131254
  448 +1494 0.01709778
  449 +1496 0.013099563
  450 +1498 0.010530086
  451 +1500 0.008297551
  452 +1502 0.006882263
  453 +1504 0.005898158
  454 +1506 0.007390398
  455 +1508 0.005394371
  456 +1510 0.00469017
  457 +1512 0.004858713
  458 +1514 0.004664992
  459 +1516 0.005005949
  460 +1518 0.004056874
  461 +1520 0.004193847
  462 +1522 0.003657278
  463 +1524 0.00283663
  464 +1526 0.002752255
  465 +1528 0.002349934
  466 +1530 0.002245644
  467 +1532 0.002485224
  468 +1534 0.002614123
  469 +1536 0.002208785
  470 +1538 0.003534115
  471 +1540 0.00409184
  472 +1542 0.003070369
  473 +1544 0.00262039
  474 +1546 0.002380277
  475 +1548 0.00226781
  476 +1550 0.002599999
  477 +1552 0.002356906
  478 +1554 0.003044914
  479 +1556 0.002653725
  480 +1558 0.006023148
  481 +1560 0.004062994
  482 +1562 0.002457177
  483 +1564 0.002618192
  484 +1566 0.002533502
  485 +1568 0.002721934
  486 +1570 0.002891702
  487 +1572 0.002507352
  488 +1574 0.002683978
  489 +1576 0.003586049
  490 +1578 0.002836659
  491 +1580 0.002886234
  492 +1582 0.002913471
  493 +1584 0.003031189
  494 +1586 0.003179643
  495 +1588 0.003307134
  496 +1590 0.003664506
  497 +1592 0.003805406
  498 +1594 0.004094776
  499 +1596 0.00401814
  500 +1598 0.00397432
  501 +1600 0.004099774
  502 +1602 0.00426046
  503 +1604 0.004405449
  504 +1606 0.004566685
  505 +1608 0.004628619
  506 +1610 0.004477913
  507 +1612 0.004433744
  508 +1614 0.004491011
  509 +1616 0.005192656
  510 +1618 0.004285009
  511 +1620 0.004036026
  512 +1622 0.004059854
  513 +1624 0.004105975
  514 +1626 0.003885176
  515 +1628 0.003981282
  516 +1630 0.003952543
  517 +1632 0.003835627
  518 +1634 0.004359047
  519 +1636 0.004402303
  520 +1638 0.004037436
  521 +1640 0.003885624
  522 +1642 0.004009201
  523 +1644 0.003952529
  524 +1646 0.004816486
  525 +1648 0.004304189
  526 +1650 0.003965589
  527 +1652 0.006019426
  528 +1654 0.004885376
  529 +1656 0.004123694
  530 +1658 0.004174164
  531 +1660 0.004235089
  532 +1662 0.004542281
  533 +1664 0.004486926
  534 +1666 0.004614867
  535 +1668 0.004894575
  536 +1670 0.005436912
  537 +1672 0.005431509
  538 +1674 0.005651576
  539 +1676 0.006442447
  540 +1678 0.006865513
  541 +1680 0.007569476
  542 +1682 0.008151428
  543 +1684 0.009926234
  544 +1686 0.010149147
  545 +1688 0.010811564
  546 +1690 0.011577639
  547 +1692 0.012317587
  548 +1694 0.013020018
  549 +1696 0.014610942
  550 +1698 0.015805372
  551 +1700 0.016720898
  552 +1702 0.02059107
  553 +1704 0.022843417
  554 +1706 0.026263481
  555 +1708 0.031574962
  556 +1710 0.03724565
  557 +1712 0.044695611
  558 +1714 0.051489334
  559 +1716 0.064252636
  560 +1718 0.079812715
  561 +1720 0.111108131
  562 +1722 0.134689923
  563 +1724 0.159768011
  564 +1726 0.178664944
  565 +1728 0.189550156
  566 +1730 0.187519211
  567 +1732 0.184568007
  568 +1734 0.148052948
  569 +1736 0.174327833
  570 +1738 0.157782681
  571 +1740 0.130983773
  572 +1742 0.111415729
  573 +1744 0.081721546
  574 +1746 0.057792152
  575 +1748 0.038151926
  576 +1750 0.026069798
  577 +1752 0.017267407
  578 +1754 0.012278154
  579 +1756 0.009329721
  580 +1758 0.007209351
  581 +1760 0.00592142
  582 +1762 0.005374228
  583 +1764 0.004826348
  584 +1766 0.004458699
  585 +1768 0.004270598
  586 +1770 0.003616544
  587 +1772 0.003541228
  588 +1774 0.002583577
  589 +1776 0.002217011
  590 +1778 0.001893818
  591 +1780 0.001935542
  592 +1782 0.001759374
  593 +1784 0.001804172
  594 +1786 0.001733619
  595 +1788 0.001749405
  596 +1790 0.001883088
  597 +1792 0.001990676
  598 +1794 0.00144261
  599 +1796 0.001341056
  600 +1798 0.001334477
  601 +1800 0.001226004
  602 +1802 0.001154986
  603 +1804 0.000870076
  604 +1806 0.000948184
  605 +1808 0.000819373
  606 +1810 0.000877109
  607 +1812 0.000856967
  608 +1814 0.000711407
  609 +1816 0.000664166
  610 +1818 0.000672376
  611 +1820 0.000554067
  612 +1822 0.000636656
  613 +1824 0.000592955
  614 +1826 0.000628019
  615 +1828 0.000694044
  616 +1830 0.000821293
  617 +1832 0.000514679
  618 +1834 0.000528808
  619 +1836 0.000521469
  620 +1838 0.000459258
  621 +1840 0.000346335
  622 +1842 0.000454894
  623 +1844 0.000686447
  624 +1846 0.000322626
  625 +1848 0.00024672
  626 +1850 0.00021652
  627 +1852 0.000228231
  628 +1854 0.000175338
  629 +1856 0.00010178
  630 +1858 4.80366E-05
  631 +1860 0.000163555
  632 +1862 0.000163557
  633 +1864 3.29655E-05
  634 +1866 0.000122024
  635 +1868 0.000276251
  636 +1870 0.000119215
  637 +1872 1.50667E-05
  638 +1874 -6.10E-07
  639 +1876 -6.29537E-05
  640 +1878 -3.01E-06
  641 +1880 -6.19819E-05
  642 +1882 -2.89042E-05
  643 +1884 -4.73032E-05
  644 +1886 2.07543E-05
  645 +1888 5.82048E-05
  646 +1890 9.61175E-05
  647 +1892 -2.35233E-05
  648 +1894 6.6847E-05
  649 +1896 0.000103985
  650 +1898 5.14422E-05
  651 +1900 9.67797E-05
  652 +1902 0.000135013
  653 +1904 0.000172139
  654 +1906 0.000245935
  655 +1908 0.000218667
  656 +1910 0.000249944
  657 +1912 0.000254151
  658 +1914 0.000274606
  659 +1916 0.000246846
  660 +1918 0.000361489
  661 +1920 0.000280901
  662 +1922 0.000476067
  663 +1924 0.00036462
  664 +1926 0.000395353
  665 +1928 0.000442112
  666 +1930 0.000468113
  667 +1932 0.000455817
  668 +1934 0.000471815
  669 +1936 0.000469251
  670 +1938 0.000476748
  671 +1940 0.00051635
  672 +1942 0.000755845
  673 +1944 0.000598315
  674 +1946 0.000708495
  675 +1948 0.000720105
  676 +1950 0.000663963
  677 +1952 0.000798318
  678 +1954 0.000793038
  679 +1956 0.000829472
  680 +1958 0.000848898
  681 +1960 0.000777441
  682 +1962 0.000809709
  683 +1964 0.000740382
  684 +1966 0.000844927
  685 +1968 0.000846562
  686 +1970 0.000842945
  687 +1972 0.000866656
  688 +1974 0.000750066
  689 +1976 0.000875148
  690 +1978 0.000812096
  691 +1980 0.000791832
  692 +1982 0.000795131
  693 +1984 0.000805046
  694 +1986 0.000780545
  695 +1988 0.000796985
  696 +1990 0.000649182
  697 +1992 0.000745563
  698 +1994 0.000695543
  699 +1996 0.00063712
  700 +1998 0.000601964
  701 +2000 0.000563163
  702 +2002 0.000453067
  703 +2004 0.00044115
  704 +2006 0.000470968
  705 +2008 0.000335742
  706 +2010 0.000382163
  707 +2012 0.000362654
  708 +2014 0.000330121
  709 +2016 0.000389084
  710 +2018 0.000292435
  711 +2020 0.000305525
  712 +2022 0.000329511
  713 +2024 0.00038482
  714 +2026 0.000336523
  715 +2028 0.000404901
  716 +2030 0.000380554
  717 +2032 0.000412551
  718 +2034 0.000374696
  719 +2036 0.000440636
  720 +2038 0.000381711
  721 +2040 0.000517346
  722 +2042 0.00051384
  723 +2044 0.000565282
  724 +2046 0.000565683
  725 +2048 0.000568611
  726 +2050 0.000481456
  727 +2052 0.000617706
  728 +2054 0.000528906
  729 +2056 0.00052708
  730 +2058 0.000555077
  731 +2060 0.00050699
  732 +2062 0.000525236
  733 +2064 0.000487272
  734 +2066 0.000539501
  735 +2068 0.000504029
  736 +2070 0.000447441
  737 +2072 0.000516835
  738 +2074 0.00047662
  739 +2076 0.000495004
  740 +2078 0.000456273
  741 +2080 0.000388805
  742 +2082 0.000385634
  743 +2084 0.000323494
  744 +2086 0.00038231
  745 +2088 0.000394126
  746 +2090 0.000383939
  747 +2092 0.000373967
  748 +2094 0.000377053
  749 +2096 0.00038487
  750 +2098 0.000382643
  751 +2100 0.000328327
  752 +2102 0.000300287
  753 +2104 0.000310617
  754 +2106 0.000316786
  755 +2108 0.000333295
  756 +2110 0.000370022
  757 +2112 0.000374474
  758 +2114 0.000401404
  759 +2116 0.000356568
  760 +2118 0.000405314
  761 +2120 0.000407752
  762 +2122 0.000390354
  763 +2124 0.000442652
  764 +2126 0.000408173
  765 +2128 0.000418827
  766 +2130 0.000441786
  767 +2132 0.000344844
  768 +2134 0.000381584
  769 +2136 0.000341404
  770 +2138 0.000395361
  771 +2140 0.000367725
  772 +2142 0.000336463
  773 +2144 0.000391147
  774 +2146 0.000325835
  775 +2148 0.000385238
  776 +2150 0.000365225
  777 +2152 0.000332808
  778 +2154 0.000289714
  779 +2156 0.000283791
  780 +2158 0.000238881
  781 +2160 0.000322866
  782 +2162 0.000286869
  783 +2164 0.000285061
  784 +2166 0.000257684
  785 +2168 0.000312025
  786 +2170 0.000207802
  787 +2172 0.000257015
  788 +2174 0.000220017
  789 +2176 0.00016785
  790 +2178 0.000255717
  791 +2180 0.000290103
  792 +2182 0.000157789
  793 +2184 0.000325881
  794 +2186 0.000247926
  795 +2188 0.000261432
  796 +2190 0.000291347
  797 +2192 0.000280254
  798 +2194 0.000229609
  799 +2196 0.000271056
  800 +2198 0.000270504
  801 +2200 0.000244769
  802 +2202 0.000314874
  803 +2204 0.000229367
  804 +2206 0.00024547
  805 +2208 0.000334635
  806 +2210 0.000279933
  807 +2212 0.000306569
  808 +2214 0.000225706
  809 +2216 0.000278309
  810 +2218 0.000248559
  811 +2220 0.000348697
  812 +2222 0.000245079
  813 +2224 0.000279928
  814 +2226 0.000255734
  815 +2228 0.000240166
  816 +2230 0.000266871
  817 +2232 0.000303392
  818 +2234 0.000314343
  819 +2236 0.000334341
  820 +2238 0.000374558
  821 +2240 0.000341859
  822 +2242 0.000368978
  823 +2244 0.000431373
  824 +2246 0.000366414
  825 +2248 0.000483577
  826 +2250 0.00045685
  827 +2252 0.000405578
  828 +2254 0.000512095
  829 +2256 0.000481377
  830 +2258 0.000514157
  831 +2260 0.000530324
  832 +2262 0.000568964
  833 +2264 0.000509579
  834 +2266 0.000580748
  835 +2268 0.000682969
  836 +2270 0.000728429
  837 +2272 0.000734436
  838 +2274 0.000792405
  839 +2276 0.000821361
  840 +2278 0.000877556
  841 +2280 0.000862509
  842 +2282 0.000976614
  843 +2284 0.000949856
  844 +2286 0.001073058
  845 +2288 0.001016429
  846 +2290 0.001170663
  847 +2292 0.001220265
  848 +2294 0.001173101
  849 +2296 0.001152461
  850 +2298 0.001179885
  851 +2300 0.001206089
  852 +2302 0.001211066
  853 +2304 0.00121729
  854 +2306 0.001241695
  855 +2308 0.001235318
  856 +2310 0.001195495
  857 +2312 0.001301991
  858 +2314 0.001355443
  859 +2316 0.001254785
  860 +2318 0.001389052
  861 +2320 0.001444937
  862 +2322 0.001558414
  863 +2324 0.001760601
  864 +2326 0.001728333
  865 +2328 0.002103392
  866 +2330 0.002092697
  867 +2332 0.002022837
  868 +2334 0.001938495
  869 +2336 0.0020431
  870 +2338 0.001919468
  871 +2340 0.001964749
  872 +2342 0.002282832
  873 +2344 0.00218892
  874 +2346 0.001801857
  875 +2348 0.001061079
  876 +2350 0.001380168
  877 +2352 0.001870321
  878 +2354 0.002102202
  879 +2356 0.002848422
  880 +2358 0.003216502
  881 +2360 0.003213061
  882 +2362 0.003205797
  883 +2364 0.003022776
  884 +2366 0.002849123
  885 +2368 0.002401033
  886 +2370 0.001848448
  887 +2372 0.001970318
  888 +2374 0.001607119
  889 +2376 0.001408379
  890 +2378 0.001289805
  891 +2380 0.001123742
  892 +2382 0.000998744
  893 +2384 0.001002353
  894 +2386 0.001086115
  895 +2388 0.000939055
  896 +2390 0.000948007
  897 +2392 0.000892462
  898 +2394 0.000979962
  899 +2396 0.000928222
  900 +2398 0.000862539
  901 +2400 0.000864195
  902 +2402 0.000886066
  903 +2404 0.000871955
  904 +2406 0.000811919
  905 +2408 0.000766513
  906 +2410 0.000651421
  907 +2412 0.00073298
  908 +2414 0.000708139
  909 +2416 0.000667666
  910 +2418 0.000600986
  911 +2420 0.000610649
  912 +2422 0.000609326
  913 +2424 0.000516116
  914 +2426 0.000492454
  915 +2428 0.00053116
  916 +2430 0.000488114
  917 +2432 0.000460177
  918 +2434 0.000548829
  919 +2436 0.000464511
  920 +2438 0.000491215
  921 +2440 0.000416051
  922 +2442 0.000427695
  923 +2444 0.000395537
  924 +2446 0.000472624
  925 +2448 0.000432484
  926 +2450 0.00050012
  927 +2452 0.000445504
  928 +2454 0.00047767
  929 +2456 0.000445421
  930 +2458 0.000485085
  931 +2460 0.000498423
  932 +2462 0.000507363
  933 +2464 0.000520304
  934 +2466 0.000539524
  935 +2468 0.000608413
  936 +2470 0.000641548
  937 +2472 0.000638234
  938 +2474 0.00070156
  939 +2476 0.000583209
  940 +2478 0.000691745
  941 +2480 0.00069634
  942 +2482 0.000725514
  943 +2484 0.000664786
  944 +2486 0.000695592
  945 +2488 0.000664905
  946 +2490 0.000711927
  947 +2492 0.000729764
  948 +2494 0.000642008
  949 +2496 0.000666359
  950 +2498 0.000576481
  951 +2500 0.000582793
  952 +2502 0.00060028
  953 +2504 0.000485827
  954 +2506 0.00060824
  955 +2508 0.000551492
  956 +2510 0.000514196
  957 +2512 0.000506979
  958 +2514 0.000475469
  959 +2516 0.000432219
  960 +2518 0.000503847
  961 +2520 0.00046777
  962 +2522 0.000500639
  963 +2524 0.00049432
  964 +2526 0.000561426
  965 +2528 0.000522532
  966 +2530 0.000573555
  967 +2532 0.000597892
  968 +2534 0.000685061
  969 +2536 0.000686714
  970 +2538 0.000669184
  971 +2540 0.000688841
  972 +2542 0.000718256
  973 +2544 0.000663613
  974 +2546 0.000709431
  975 +2548 0.000608731
  976 +2550 0.000729101
  977 +2552 0.000729371
  978 +2554 0.000708222
  979 +2556 0.000702107
  980 +2558 0.000589917
  981 +2560 0.00054794
  982 +2562 0.000549422
  983 +2564 0.000571636
  984 +2566 0.000514345
  985 +2568 0.000549508
  986 +2570 0.000524453
  987 +2572 0.000519339
  988 +2574 0.000493066
  989 +2576 0.000434176
  990 +2578 0.000398249
  991 +2580 0.000438974
  992 +2582 0.000447631
  993 +2584 0.000447255
  994 +2586 0.000326312
  995 +2588 0.000408195
  996 +2590 0.000469383
  997 +2592 0.000485155
  998 +2594 0.000414225
  999 +2596 0.000405927
  1000 +2598 0.000367873
  1001 +2600 0.000355028
  1002 +2602 0.000408022
  1003 +2604 0.000409804
  1004 +2606 0.000337436
  1005 +2608 0.000348352
  1006 +2610 0.00035314
  1007 +2612 0.000285114
  1008 +2614 0.000328725
  1009 +2616 0.000270909
  1010 +2618 0.000295957
  1011 +2620 0.000316483
  1012 +2622 0.000322541
  1013 +2624 0.000283893
  1014 +2626 0.000314178
  1015 +2628 0.000268822
  1016 +2630 0.000266477
  1017 +2632 0.000268892
  1018 +2634 0.0002953
  1019 +2636 0.000292207
  1020 +2638 0.000215858
  1021 +2640 0.000294136
  1022 +2642 0.000272093
  1023 +2644 0.000275717
  1024 +2646 0.000346284
  1025 +2648 0.000283192
  1026 +2650 0.000339755
  1027 +2652 0.000255491
  1028 +2654 0.000208977
  1029 +2656 0.000272149
  1030 +2658 0.000282438
  1031 +2660 0.000158046
  1032 +2662 0.000224042
  1033 +2664 0.000228577
  1034 +2666 0.00017862
  1035 +2668 0.000245571
  1036 +2670 0.000196986
  1037 +2672 0.000252557
  1038 +2674 0.000234491
  1039 +2676 0.000203408
  1040 +2678 0.00017293
  1041 +2680 0.000159348
  1042 +2682 0.000234691
  1043 +2684 0.000214546
  1044 +2686 0.000196188
  1045 +2688 0.000157204
  1046 +2690 0.000208069
  1047 +2692 0.000169639
  1048 +2694 0.000218734
  1049 +2696 0.000218285
  1050 +2698 0.000204734
  1051 +2700 0.000201751
  1052 +2702 0.000264115
  1053 +2704 0.000234648
  1054 +2706 0.000212676
  1055 +2708 0.000270374
  1056 +2710 0.000290756
  1057 +2712 0.000240304
  1058 +2714 0.000316656
  1059 +2716 0.000291376
  1060 +2718 0.000294754
  1061 +2720 0.000351815
  1062 +2722 0.000272567
  1063 +2724 0.000249977
  1064 +2726 0.00035259
  1065 +2728 0.000384766
  1066 +2730 0.000393084
  1067 +2732 0.000410739
  1068 +2734 0.000433305
  1069 +2736 0.000404912
  1070 +2738 0.000420901
  1071 +2740 0.000492476
  1072 +2742 0.000399805
  1073 +2744 0.000456151
  1074 +2746 0.00044387
  1075 +2748 0.000409688
  1076 +2750 0.000418955
  1077 +2752 0.000424004
  1078 +2754 0.000451382
  1079 +2756 0.000482778
  1080 +2758 0.000547175
  1081 +2760 0.000552162
  1082 +2762 0.000570681
  1083 +2764 0.000622641
  1084 +2766 0.000691426
  1085 +2768 0.000597925
  1086 +2770 0.000652725
  1087 +2772 0.000584151
  1088 +2774 0.000624201
  1089 +2776 0.000699342
  1090 +2778 0.000638496
  1091 +2780 0.000707106
  1092 +2782 0.000646861
  1093 +2784 0.000709634
  1094 +2786 0.000679525
  1095 +2788 0.000632315
  1096 +2790 0.000696032
  1097 +2792 0.000664708
  1098 +2794 0.000621352
  1099 +2796 0.00073734
  1100 +2798 0.000724259
  1101 +2800 0.000739695
  1102 +2802 0.000776947
  1103 +2804 0.000896622
  1104 +2806 0.000903473
  1105 +2808 0.000879962
  1106 +2810 0.000961547
  1107 +2812 0.00109481
  1108 +2814 0.001158287
  1109 +2816 0.001209232
  1110 +2818 0.001357019
  1111 +2820 0.001408481
  1112 +2822 0.001613266
  1113 +2824 0.001685368
  1114 +2826 0.001927973
  1115 +2828 0.002122571
  1116 +2830 0.00244482
  1117 +2832 0.002763225
  1118 +2834 0.003192688
  1119 +2836 0.003562301
  1120 +2838 0.003995446
  1121 +2840 0.004252916
  1122 +2842 0.004459092
  1123 +2844 0.004622304
  1124 +2846 0.004644934
  1125 +2848 0.004645169
  1126 +2850 0.004785238
  1127 +2852 0.004798618
  1128 +2854 0.004792012
  1129 +2856 0.004820004
  1130 +2858 0.004727274
  1131 +2860 0.004620571
  1132 +2862 0.004699273
  1133 +2864 0.004703525
  1134 +2866 0.004822295
  1135 +2868 0.005009114
  1136 +2870 0.005093301
  1137 +2872 0.005139671
  1138 +2874 0.005266593
  1139 +2876 0.005667
  1140 +2878 0.005788315
  1141 +2880 0.006064578
  1142 +2882 0.006338457
  1143 +2884 0.006550395
  1144 +2886 0.006741246
  1145 +2888 0.006945089
  1146 +2890 0.007130231
  1147 +2892 0.007372441
  1148 +2894 0.007579747
  1149 +2896 0.007731345
  1150 +2898 0.00819576
  1151 +2900 0.008562466
  1152 +2902 0.00903157
  1153 +2904 0.00937914
  1154 +2906 0.009851342
  1155 +2908 0.010332156
  1156 +2910 0.010793932
  1157 +2912 0.011308225
  1158 +2914 0.011939272
  1159 +2916 0.012554826
  1160 +2918 0.01337334
  1161 +2920 0.014110037
  1162 +2922 0.014829331
  1163 +2924 0.01536142
  1164 +2926 0.015789718
  1165 +2928 0.016096233
  1166 +2930 0.016316084
  1167 +2932 0.016308141
  1168 +2934 0.016443279
  1169 +2936 0.016680791
  1170 +2938 0.017027608
  1171 +2940 0.017818197
  1172 +2942 0.019401865
  1173 +2944 0.021799227
  1174 +2946 0.024186537
  1175 +2948 0.025801865
  1176 +2950 0.02625
  1177 +2952 0.02550612
  1178 +2954 0.023583511
  1179 +2956 0.021342843
  1180 +2958 0.01914838
  1181 +2960 0.017090145
  1182 +2962 0.01539656
  1183 +2964 0.013855732
  1184 +2966 0.012593295
  1185 +2968 0.011483726
  1186 +2970 0.01054501
  1187 +2972 0.009914023
  1188 +2974 0.009757613
  1189 +2976 0.009809223
  1190 +2978 0.010218257
  1191 +2980 0.010809435
  1192 +2982 0.011797056
  1193 +2984 0.012770905
  1194 +2986 0.013636468
  1195 +2988 0.014480479
  1196 +2990 0.01515069
  1197 +2992 0.015619918
  1198 +2994 0.015682193
  1199 +2996 0.015754709
  1200 +2998 0.015366002
  1201 +3000 0.014715111
  1202 +3002 0.014003
  1203 +3004 0.013206518
  1204 +3006 0.012292597
  1205 +3008 0.011394086
  1206 +3010 0.010691684
  1207 +3012 0.009936019
  1208 +3014 0.009296964
  1209 +3016 0.008612659
  1210 +3018 0.007984566
  1211 +3020 0.007436537
  1212 +3022 0.006815112
  1213 +3024 0.006429191
  1214 +3026 0.005806243
  1215 +3028 0.005262323
  1216 +3030 0.004768602
  1217 +3032 0.004320524
  1218 +3034 0.003912193
  1219 +3036 0.003421985
  1220 +3038 0.003098582
  1221 +3040 0.002900269
  1222 +3042 0.002511091
  1223 +3044 0.002161083
  1224 +3046 0.002025539
  1225 +3048 0.001869605
  1226 +3050 0.001691835
  1227 +3052 0.001471398
  1228 +3054 0.001359149
  1229 +3056 0.00124824
  1230 +3058 0.001133357
  1231 +3060 0.001085935
  1232 +3062 0.001030814
  1233 +3064 0.00097166
  1234 +3066 0.001020728
  1235 +3068 0.000940853
  1236 +3070 0.000807141
  1237 +3072 0.000755513
  1238 +3074 0.000751446
  1239 +3076 0.000821568
  1240 +3078 0.000793843
  1241 +3080 0.000633856
  1242 +3082 0.000705054
  1243 +3084 0.000693464
  1244 +3086 0.000648687
  1245 +3088 0.00057882
  1246 +3090 0.000621521
  1247 +3092 0.000491364
  1248 +3094 0.000437328
  1249 +3096 0.000406632
  1250 +3098 0.000537293
  1251 +3100 0.000556879
  1252 +3102 0.000452115
  1253 +3104 0.000463953
  1254 +3106 0.00044965
  1255 +3108 0.000471158
  1256 +3110 0.000432904
  1257 +3112 0.00036216
  1258 +3114 0.000454401
  1259 +3116 0.000412792
  1260 +3118 0.000349278
  1261 +3120 0.000378075
  1262 +3122 0.000285745
  1263 +3124 0.000288687
  1264 +3126 0.000338756
  1265 +3128 0.000323915
  1266 +3130 0.000314324
  1267 +3132 0.000371908
  1268 +3134 0.00034566
  1269 +3136 0.000289967
  1270 +3138 0.000259827
  1271 +3140 0.000334098
  1272 +3142 0.000249786
  1273 +3144 0.000306433
  1274 +3146 0.000164054
  1275 +3148 0.000268845
  1276 +3150 0.000311615
  1277 +3152 0.000402332
  1278 +3154 0.000315994
  1279 +3156 0.000353941
  1280 +3158 0.000336543
  1281 +3160 0.000344823
  1282 +3162 0.000370153
  1283 +3164 0.000362917
  1284 +3166 0.000298576
  1285 +3168 0.000363507
  1286 +3170 0.000287784
  1287 +3172 0.000308446
  1288 +3174 0.000250863
  1289 +3176 0.000301188
  1290 +3178 0.00030549
  1291 +3180 0.000281667
  1292 +3182 0.00027927
  1293 +3184 0.00027765
  1294 +3186 0.000293586
  1295 +3188 0.000355302
  1296 +3190 0.000335228
  1297 +3192 0.000335549
  1298 +3194 0.000362798
  1299 +3196 0.000295649
  1300 +3198 0.000373852
  1301 +3200 0.000328326
  1302 +3202 0.000358333
  1303 +3204 0.00032544
  1304 +3206 0.000387597
  1305 +3208 0.000430661
  1306 +3210 0.000417581
  1307 +3212 0.000324994
  1308 +3214 0.000444512
  1309 +3216 0.000400082
  1310 +3218 0.000377286
  1311 +3220 0.000437329
  1312 +3222 0.000356377
  1313 +3224 0.000352642
  1314 +3226 0.000311089
  1315 +3228 0.000382579
  1316 +3230 0.000329813
  1317 +3232 0.000447714
  1318 +3234 0.000472512
  1319 +3236 0.000457032
  1320 +3238 0.000472607
  1321 +3240 0.000363677
  1322 +3242 0.000394328
  1323 +3244 0.000461889
  1324 +3246 0.000490442
  1325 +3248 0.000438482
  1326 +3250 0.000423751
  1327 +3252 0.000433888
  1328 +3254 0.000499297
  1329 +3256 0.000498987
  1330 +3258 0.000465415
  1331 +3260 0.000421804
  1332 +3262 0.000414397
  1333 +3264 0.000405735
  1334 +3266 0.000487632
  1335 +3268 0.000512952
  1336 +3270 0.000538537
  1337 +3272 0.000552512
  1338 +3274 0.000565302
  1339 +3276 0.00052271
  1340 +3278 0.000486071
  1341 +3280 0.000553016
  1342 +3282 0.000551074
  1343 +3284 0.000550423
  1344 +3286 0.000552049
  1345 +3288 0.000582685
  1346 +3290 0.000602594
  1347 +3292 0.00065031
  1348 +3294 0.000492417
  1349 +3296 0.000568134
  1350 +3298 0.000560644
  1351 +3300 0.000606052
  1352 +3302 0.000632562
  1353 +3304 0.000613536
  1354 +3306 0.000629737
  1355 +3308 0.000723508
  1356 +3310 0.000610128
  1357 +3312 0.000629599
  1358 +3314 0.00061646
  1359 +3316 0.000644116
  1360 +3318 0.000657711
  1361 +3320 0.000671348
  1362 +3322 0.000732666
  1363 +3324 0.000591952
  1364 +3326 0.000639223
  1365 +3328 0.000631524
  1366 +3330 0.000664578
  1367 +3332 0.000750598
  1368 +3334 0.000710665
  1369 +3336 0.000775822
  1370 +3338 0.000768051
  1371 +3340 0.000722316
  1372 +3342 0.000659833
  1373 +3344 0.000705481
  1374 +3346 0.000739379
  1375 +3348 0.000754306
  1376 +3350 0.000858934
  1377 +3352 0.000773878
  1378 +3354 0.000745424
  1379 +3356 0.000749742
  1380 +3358 0.00082974
  1381 +3360 0.000824431
  1382 +3362 0.000877307
  1383 +3364 0.000932521
  1384 +3366 0.00087025
  1385 +3368 0.000887279
  1386 +3370 0.000847555
  1387 +3372 0.000884819
  1388 +3374 0.00087596
  1389 +3376 0.000857088
  1390 +3378 0.00093776
  1391 +3380 0.001039654
  1392 +3382 0.001065518
  1393 +3384 0.00099205
  1394 +3386 0.00099477
  1395 +3388 0.000961683
  1396 +3390 0.001041186
  1397 +3392 0.001128488
  1398 +3394 0.001144315
  1399 +3396 0.001224228
  1400 +3398 0.001154251
  1401 +3400 0.001138032
  1402 +3402 0.001173604
  1403 +3404 0.001248265
  1404 +3406 0.001356015
  1405 +3408 0.001285042
  1406 +3410 0.001316454
  1407 +3412 0.001415994
  1408 +3414 0.001463886
  1409 +3416 0.001644794
  1410 +3418 0.001713653
  1411 +3420 0.001730308
  1412 +3422 0.001932657
  1413 +3424 0.001949152
  1414 +3426 0.002006968
  1415 +3428 0.0020619
  1416 +3430 0.002087098
  1417 +3432 0.002206993
  1418 +3434 0.001964774
  1419 +3436 0.002028821
  1420 +3438 0.002393625
  1421 +3440 0.002708104
  1422 +3442 0.002798177
  1423 +3444 0.002983385
  1424 +3446 0.00291298
  1425 +3448 0.002991802
  1426 +3450 0.003001868
  1427 +3452 0.003042922
  1428 +3454 0.002947307
  1429 +3456 0.003051547
  1430 +3458 0.00264556
  1431 +3460 0.002413914
  1432 +3462 0.002811906
  1433 +3464 0.002335021
  1434 +3466 0.001661673
  1435 +3468 0.001509012
  1436 +3470 0.002093659
  1437 +3472 0.002451124
  1438 +3474 0.002367439
  1439 +3476 0.002393187
  1440 +3478 0.001892594
  1441 +3480 0.002007355
  1442 +3482 0.002249049
  1443 +3484 0.002021025
  1444 +3486 0.001697064
  1445 +3488 0.001840785
  1446 +3490 0.001717791
  1447 +3492 0.001588541
  1448 +3494 0.001424759
  1449 +3496 0.001349834
  1450 +3498 0.001273596
  1451 +3500 0.001208783
  1452 +3502 0.001134414
  1453 +3504 0.001144532
  1454 +3506 0.001002239
  1455 +3508 0.001010699
  1456 +3510 0.001003586
  1457 +3512 0.000904709
  1458 +3514 0.000965619
  1459 +3516 0.000937276
  1460 +3518 0.00097229
  1461 +3520 0.000924807
  1462 +3522 0.00095119
  1463 +3524 0.000890108
  1464 +3526 0.000873585
  1465 +3528 0.000885436
  1466 +3530 0.000885047
  1467 +3532 0.000952793
  1468 +3534 0.001030164
  1469 +3536 0.000992343
  1470 +3538 0.000971817
  1471 +3540 0.000915465
  1472 +3542 0.000959877
  1473 +3544 0.001059664
  1474 +3546 0.001041402
  1475 +3548 0.00090259
  1476 +3550 0.000980567
  1477 +3552 0.000914447
  1478 +3554 0.00080593
  1479 +3556 0.000844328
  1480 +3558 0.000743256
  1481 +3560 0.000855686
  1482 +3562 0.000738947
  1483 +3564 0.000834279
  1484 +3566 0.001144887
  1485 +3568 0.000842023
  1486 +3570 0.00067585
  1487 +3572 0.000602224
  1488 +3574 0.000682329
  1489 +3576 0.000581809
  1490 +3578 0.000568449
  1491 +3580 0.000575447
  1492 +3582 0.000481773
  1493 +3584 0.000581484
  1494 +3586 0.00081874
  1495 +3588 0.000617644
  1496 +3590 0.000442477
  1497 +3592 0.000640158
  1498 +3594 0.000675461
  1499 +3596 0.00051728
  1500 +3598 0.000597346
  1501 +3600 0.000584266
  1502 +3602 0.0004527
  1503 +3604 0.000522512
  1504 +3606 0.000624314
  1505 +3608 0.000574119
  1506 +3610 0.000608948
  1507 +3612 0.0008001
  1508 +3614 0.000712729
  1509 +3616 0.000617938
  1510 +3618 0.000826828
  1511 +3620 0.000760759
  1512 +3622 0.000538546
  1513 +3624 0.000557439
  1514 +3626 0.0007446
  1515 +3628 0.00119225
  1516 +3630 0.000526519
  1517 +3632 0.000556606
  1518 +3634 0.000556875
  1519 +3636 0.000506369
  1520 +3638 0.000552368
  1521 +3640 0.000484705
  1522 +3642 0.000499876
  1523 +3644 0.000531957
  1524 +3646 0.001003344
  1525 +3648 0.000945893
  1526 +3650 0.000999296
  1527 +3652 0.000369562
  1528 +3654 0.000439893
  1529 +3656 0.000386363
  1530 +3658 0.000306059
  1531 +3660 0.000268561
  1532 +3662 0.000200995
  1533 +3664 0.000216152
  1534 +3666 0.00031073
  1535 +3668 0.000539568
  1536 +3670 0.000482811
  1537 +3672 0.000170902
  1538 +3674 0.001357086
  1539 +3676 0.00034876
  1540 +3678 0.000117241
  1541 +3680 0.000137332
  1542 +3682 0.000159181
  1543 +3684 0.000118508
  1544 +3686 0.000149121
  1545 +3688 0.000421635
  1546 +3690 0.000330956
  1547 +3692 -1.81766E-05
  1548 +3694 -2.72672E-05
  1549 +3696 -6.55202E-05
  1550 +3698 -8.60E-06
  1551 +3700 1.51871E-05
  1552 +3702 2.32458E-05
  1553 +3704 -0.000101734
  1554 +3706 -5.30903E-05
  1555 +3708 0.000113641
  1556 +3710 0.000309234
  1557 +3712 0.000106649
  1558 +3714 -3.12E-06
  1559 +3716 -5.76521E-05
  1560 +3718 0.000110276
  1561 +3720 9.06626E-05
  1562 +3722 9.32628E-05
  1563 +3724 -1.2309E-05
  1564 +3726 4.60304E-05
  1565 +3728 -8.27521E-05
  1566 +3730 0.000105094
  1567 +3732 0.000359337
  1568 +3734 0.000615865
  1569 +3736 0.000442528
  1570 +3738 3.18536E-05
  1571 +3740 3.5789E-05
  1572 +3742 0.000292863
  1573 +3744 0.000969885
  1574 +3746 0.000136573
  1575 +3748 0.000457883
  1576 +3750 0.00039287
  1577 +3752 0.000280102
  1578 +3754 8.33166E-05
  1579 +3756 0.000108764
  1580 +3758 0.00020727
  1581 +3760 7.00378E-05
  1582 +3762 -5.27051E-05
  1583 +3764 0.000139553
  1584 +3766 -1.72393E-05
  1585 +3768 7.03872E-05
  1586 +3770 -2.01502E-05
  1587 +3772 -0.000120557
  1588 +3774 -8.82563E-05
  1589 +3776 -2.43E-06
  1590 +3778 0.00019793
  1591 +3780 4.93405E-05
  1592 +3782 1.94903E-05
  1593 +3784 1.86442E-05
  1594 +3786 -0.000137666
  1595 +3788 -3.29324E-05
  1596 +3790 -9.87411E-05
  1597 +3792 -1.07826E-05
  1598 +3794 2.08248E-05
  1599 +3796 0.000114587
  1600 +3798 7.00175E-05
  1601 +3800 0.000491793
  1602 +3802 6.04807E-05
  1603 +3804 3.25705E-05
  1604 +3806 0.000310394
  1605 +3808 2.15496E-05
  1606 +3810 8.00694E-05
  1607 +3812 0.000109453
  1608 +3814 0.00030066
  1609 +3816 0.000393264
  1610 +3818 0.000178967
  1611 +3820 0.000808506
  1612 +3822 0.000105035
  1613 +3824 8.46296E-05
  1614 +3826 0.000121773
  1615 +3828 0.000135065
  1616 +3830 0.000274273
  1617 +3832 8.69895E-05
  1618 +3834 0.000222838
  1619 +3836 0.000601996
  1620 +3838 0.000338187
  1621 +3840 0.00024193
  1622 +3842 0.000133521
  1623 +3844 8.45357E-05
  1624 +3846 1.83423E-05
  1625 +3848 3.48799E-05
  1626 +3850 0.000272218
  1627 +3852 0.001030866
  1628 +3854 0.000469528
  1629 +3856 0.000142735
  1630 +3858 6.34538E-05
  1631 +3860 0.000145079
  1632 +3862 0.000227556
  1633 +3864 0.000296134
  1634 +3866 0.000137378
  1635 +3868 0.000451376
  1636 +3870 0.000226189
  1637 +3872 0.000119799
  1638 +3874 0.000122617
  1639 +3876 5.18662E-05
  1640 +3878 0.000219086
  1641 +3880 0.000268173
  1642 +3882 0.000210735
  1643 +3884 0.000346726
  1644 +3886 0.000183689
  1645 +3888 0.000124343
  1646 +3890 0.000288181
  1647 +3892 1.78834E-05
  1648 +3894 9.95453E-05
  1649 +3896 0.000185088
  1650 +3898 0.000404097
  1651 +3900 0.000218476
  1652 +3902 0.000267402
  1653 +3904 0.000295706
  1654 +3906 0.000103094
  1655 +3908 0.000101332
  1656 +3910 0.000105612
  1657 +3912 5.01633E-05
  1658 +3914 5.69529E-05
  1659 +3916 0.000170528
  1660 +3918 9.52556E-05
  1661 +3920 0.000168842
  1662 +3922 0.00010632
  1663 +3924 0.000344961
  1664 +3926 7.59984E-05
  1665 +3928 0.000221155
  1666 +3930 8.75421E-05
  1667 +3932 0.000298592
  1668 +3934 9.37313E-05
  1669 +3936 0.000114365
  1670 +3938 0.000223073
  1671 +3940 0.000267331
  1672 +3942 0.000273424
  1673 +3944 0.000143308
  1674 +3946 0.000155693
  1675 +3948 0.000195926
  1676 +3950 0.00020435
  1677 +3952 0.000132183
  1678 +3954 0.000197331
  1679 +3956 0.000248508
  1680 +3958 0.000140694
  1681 +3960 0.000166407
  1682 +3962 0.000118974
  1683 +3964 7.31663E-05
  1684 +3966 0.00011566
  1685 +3968 7.56379E-05
  1686 +3970 0.000137593
  1687 +3972 0.000116022
  1688 +3974 0.000186931
  1689 +3976 0.000201803
  1690 +3978 0.000150322
  1691 +3980 0.000141396
  1692 +3982 0.000187293
  1693 +3984 0.000263054
  1694 +3986 0.000212817
  1695 +3988 0.000210708
  1696 +3990 0.000217985
  1697 +3992 0.000192881
  1698 +3994 0.000182579
  1699 +3996 0.000164746
  1700 +3998 0.000200347
  1701 +4000 0.000253085
  1702 +4002 0.000171612
  1703 +4004 0.000149877
  1704 +4006 0.000208808
  1705 +4008 0.000140164
  1706 +4010 0.000188787
  1707 +4012 0.000168944
  1708 +4014 0.000177989
  1709 +4016 0.000163891
  1710 +4018 0.000158359
  1711 +4020 0.000136663
  1712 +4022 0.000216707
  1713 +4024 0.000191577
  1714 +4026 0.000150521
  1715 +4028 0.000122795
  1716 +4030 0.000181619
  1717 +4032 0.000211165
  1718 +4034 0.000247671
  1719 +4036 0.000213884
  1720 +4038 0.000193577
  1721 +4040 0.000142549
  1722 +4042 0.000158466
  1723 +4044 0.000246274
  1724 +4046 0.000177406
  1725 +4048 0.000166641
  1726 +4050 0.000176623
  1727 +4052 0.000228601
  1728 +4054 0.000144074
  1729 +4056 0.000218833
  1730 +4058 0.000200763
  1731 +4060 0.000151771
  1732 +4062 0.00015336
  1733 +4064 0.000139108
  1734 +4066 0.000169462
  1735 +4068 0.000123463
  1736 +4070 0.000202624
  1737 +4072 0.000208393
  1738 +4074 0.000167816
  1739 +4076 0.000174958
  1740 +4078 0.000210896
  1741 +4080 0.000207398
  1742 +4082 0.000127384
  1743 +4084 0.000173693
  1744 +4086 0.000200631
  1745 +4088 0.000269673
  1746 +4090 0.000223231
  1747 +4092 0.00029172
  1748 +4094 0.00031649
  1749 +4096 0.000285588
  1750 +4098 0.000251761
  1751 +4100 0.000339028
  1752 +4102 0.000298703
  1753 +4104 0.00024852
  1754 +4106 0.000209136
  1755 +4108 0.000246085
  1756 +4110 0.000282685
  1757 +4112 0.000191696
  1758 +4114 0.000254014
  1759 +4116 0.000228422
  1760 +4118 0.000306607
  1761 +4120 0.000229142
  1762 +4122 0.000348631
  1763 +4124 0.000287556
  1764 +4126 0.000264232
  1765 +4128 0.000209319
  1766 +4130 0.000242237
  1767 +4132 0.000281044
  1768 +4134 0.000321739
  1769 +4136 0.000294847
  1770 +4138 0.000347712
  1771 +4140 0.00036883
  1772 +4142 0.000328563
  1773 +4144 0.000261437
  1774 +4146 0.000334065
  1775 +4148 0.000325497
  1776 +4150 0.000275545
  1777 +4152 0.000358192
  1778 +4154 0.000286392
  1779 +4156 0.000456376
  1780 +4158 0.000388783
  1781 +4160 0.000360544
  1782 +4162 0.000365173
  1783 +4164 0.00028698
  1784 +4166 0.000371822
  1785 +4168 0.000364618
  1786 +4170 0.000288243
  1787 +4172 0.000307984
  1788 +4174 0.000332854
  1789 +4176 0.00032695
  1790 +4178 0.000388172
  1791 +4180 0.000348726
  1792 +4182 0.000368687
  1793 +4184 0.000341082
  1794 +4186 0.000304622
  1795 +4188 0.000287432
  1796 +4190 0.00031641
  1797 +4192 0.000327385
  1798 +4194 0.000313965
  1799 +4196 0.000378199
  1800 +4198 0.000292018
  1801 +4200 0.000371458
  1802 +4202 0.000405758
  1803 +4204 0.000408023
  1804 +4206 0.000371601
  1805 +4208 0.000316549
  1806 +4210 0.000408096
  1807 +4212 0.000363203
  1808 +4214 0.00032933
  1809 +4216 0.00043362
  1810 +4218 0.000370029
  1811 +4220 0.000360431
  1812 +4222 0.000390905
  1813 +4224 0.000308371
  1814 +4226 0.000243889
  1815 +4228 0.000400749
  1816 +4230 0.000232047
  1817 +4232 0.00038913
  1818 +4234 0.000202101
  1819 +4236 0.000313043
  1820 +4238 0.000234972
  1821 +4240 0.000299282
  1822 +4242 0.000291387
  1823 +4244 0.000257221
  1824 +4246 0.000254894
  1825 +4248 0.000313133
  1826 +4250 0.000272395
  1827 +4252 0.000329282
  1828 +4254 0.000211776
  1829 +4256 0.000161765
  1830 +4258 0.0002771
  1831 +4260 0.000244175
  1832 +4262 0.00024201
  1833 +4264 0.000174491
  1834 +4266 0.000304066
  1835 +4268 0.000350939
  1836 +4270 0.000355563
  1837 +4272 0.000271775
  1838 +4274 0.000291467
  1839 +4276 0.000230176
  1840 +4278 0.000394533
  1841 +4280 0.000249728
  1842 +4282 0.000215013
  1843 +4284 0.000246479
  1844 +4286 0.000326038
  1845 +4288 0.000189699
  1846 +4290 0.000268778
  1847 +4292 0.00013331
  1848 +4294 0.000323916
  1849 +4296 0.000216853
  1850 +4298 0.000291581
  1851 +4300 0.000314194
  1852 +4302 0.000279978
  1853 +4304 0.00021133
  1854 +4306 0.000270665
  1855 +4308 0.000204827
  1856 +4310 0.000296492
  1857 +4312 0.000272268
  1858 +4314 0.000237342
  1859 +4316 0.000281693
  1860 +4318 0.000289106
  1861 +4320 0.000303374
  1862 +4322 0.000325679
  1863 +4324 0.000239933
  1864 +4326 0.000314462
  1865 +4328 0.000253209
  1866 +4330 0.000241805
  1867 +4332 0.000351215
  1868 +4334 0.000286358
  1869 +4336 0.000330223
  1870 +4338 0.000369278
  1871 +4340 0.000329129
  1872 +4342 0.000275593
  1873 +4344 0.00029688
  1874 +4346 0.000346473
  1875 +4348 0.000352509
  1876 +4350 0.000355569
  1877 +4352 0.000461464
  1878 +4354 0.000250317
  1879 +4356 0.000427547
  1880 +4358 0.000434099
  1881 +4360 0.000343595
  1882 +4362 0.000350079
  1883 +4364 0.000408112
  1884 +4366 0.000350043
  1885 +4368 0.000411028
  1886 +4370 0.000434798
  1887 +4372 0.000409623
  1888 +4374 0.000423228
  1889 +4376 0.00037185
  1890 +4378 0.000433805
  1891 +4380 0.000454019
  1892 +4382 0.000443482
  1893 +4384 0.000545947
  1894 +4386 0.000429948
  1895 +4388 0.00038776
  1896 +4390 0.000416255
  1897 +4392 0.00040207
  1898 +4394 0.000397386
  1899 +4396 0.00040638
  1900 +4398 0.000369246
  1901 +4400 0.000460818
  1902 +4402 0.000381619
  1903 +4404 0.000382068
  1904 +4406 0.00032482
  1905 +4408 0.000457543
  1906 +4410 0.000455416
  1907 +4412 0.000487212
  1908 +4414 0.000417398
  1909 +4416 0.000382643
  1910 +4418 0.000403196
  1911 +4420 0.000493331
  1912 +4422 0.000341439
  1913 +4424 0.000513969
  1914 +4426 0.000587223
  1915 +4428 0.000580159
  1916 +4430 0.000557957
  1917 +4432 0.000556266
  1918 +4434 0.000517113
  1919 +4436 0.000660822
  1920 +4438 0.000569927
  1921 +4440 0.000582118
  1922 +4442 0.000542652
  1923 +4444 0.000591509
  1924 +4446 0.000512382
  1925 +4448 0.000560221
  1926 +4450 0.000487317
  1927 +4452 0.000482114
  1928 +4454 0.000461281
  1929 +4456 0.000393521
  1930 +4458 0.000388897
  1931 +4460 0.000397314
  1932 +4462 0.000315475
  1933 +4464 0.000310207
  1934 +4466 0.000266723
  1935 +4468 0.000339416
  1936 +4470 0.000292223
  1937 +4472 0.000281582
  1938 +4474 0.000329826
  1939 +4476 0.000289373
  1940 +4478 0.00021093
  1941 +4480 0.000174358
  1942 +4482 0.000341538
  1943 +4484 0.000247057
  1944 +4486 0.000273322
  1945 +4488 0.000234901
  1946 +4490 0.000203559
  1947 +4492 0.000129721
  1948 +4494 7.83785E-05
  1949 +4496 0.000190952
  1950 +4498 0.000131392
  1951 +4500 0.000193057
  1952 +4502 1.24492E-05
  1953 +4504 9.08797E-05
  1954 +4506 0.000144288
  1955 +4508 0.000127571
  1956 +4510 2.51343E-05
  1957 +4512 7.48194E-05
  1958 +4514 0.000103584
  1959 +4516 4.19407E-05
  1960 +4518 2.40009E-05
  1961 +4520 0.000102142
  1962 +4522 1.18914E-05
  1963 +4524 5.72128E-05
  1964 +4526 -8.73734E-05
  1965 +4528 -1.76682E-05
  1966 +4530 -4.90721E-05
  1967 +4532 -4.71309E-05
  1968 +4534 3.91112E-05
  1969 +4536 1.34E-06
  1970 +4538 9.62881E-05
  1971 +4540 3.37309E-05
  1972 +4542 -2.91281E-05
  1973 +4544 -3.2849E-05
  1974 +4546 -1.58304E-05
  1975 +4548 0.000110588
  1976 +4550 7.05284E-05
  1977 +4552 7.94542E-05
  1978 +4554 3.37392E-05
  1979 +4556 -9.20E-06
  1980 +4558 -2.21519E-05
  1981 +4560 3.46914E-05
  1982 +4562 5.61431E-05
  1983 +4564 8.01E-06
  1984 +4566 -0.000103626
  1985 +4568 3.34905E-05
  1986 +4570 -2.32184E-05
  1987 +4572 -1.08982E-05
  1988 +4574 4.1603E-05
  1989 +4576 -5.00568E-05
  1990 +4578 -6.83E-06
  1991 +4580 2.7055E-05
  1992 +4582 2.86344E-05
  1993 +4584 5.87E-06
  1994 +4586 -6.99461E-05
  1995 +4588 -8.39377E-05
  1996 +4590 3.60434E-05
  1997 +4592 7.96765E-05
  1998 +4594 -0.000177672
  1999 +4596 -3.17066E-05
  2000 +4598 3.72168E-05
  2001 +4600 -6.88E-06
  2002 +4602 -6.03735E-05
  2003 +4604 4.66722E-05
  2004 +4606 -3.54641E-05
  2005 +4608 -1.74806E-05
  2006 +4610 -1.28922E-05
  2007 +4612 7.60359E-05
  2008 +4614 8.66487E-05
  2009 +4616 9.21211E-05
  2010 +4618 -5.23373E-05
  2011 +4620 -5.48989E-05
  2012 +4622 -6.38442E-05
  2013 +4624 3.55E-07
  2014 +4626 5.57926E-05
  2015 +4628 -4.49083E-05
  2016 +4630 -2.67924E-05
  2017 +4632 -7.71728E-05
  2018 +4634 3.694E-05
  2019 +4636 0.00012611
  2020 +4638 -5.57319E-05
  2021 +4640 -4.87582E-05
  2022 +4642 9.33695E-05
  2023 +4644 0.000127693
  2024 +4646 -2.1893E-05
  2025 +4648 3.65E-06
  2026 +4650 -3.07E-06
  2027 +4652 -2.23231E-05
  2028 +4654 5.90752E-05
  2029 +4656 1.12225E-05
  2030 +4658 3.36415E-05
  2031 +4660 -9.07325E-05
  2032 +4662 -2.33188E-05
  2033 +4664 7.71021E-05
  2034 +4666 2.75205E-05
  2035 +4668 5.73118E-05
  2036 +4670 0.000100899
  2037 +4672 5.6625E-05
  2038 +4674 0.000142437
  2039 +4676 -2.07439E-05
  2040 +4678 -1.93856E-05
  2041 +4680 9.87695E-05
  2042 +4682 4.89309E-05
  2043 +4684 3.68502E-05
  2044 +4686 0.000153062
  2045 +4688 8.76468E-05
  2046 +4690 0.000112023
  2047 +4692 -9.49E-06
  2048 +4694 2.66218E-05
  2049 +4696 -5.76107E-05
  2050 +4698 -8.38058E-05
  2051 +4700 -2.9238E-05
  2052 +4702 -3.11E-06
  2053 +4704 8.99146E-05
  2054 +4706 1.31697E-05
  2055 +4708 -9.5303E-05
  2056 +4710 -2.87252E-05
  2057 +4712 3.52673E-05
  2058 +4714 0.000136868
  2059 +4716 7.36812E-05
  2060 +4718 4.36516E-05
  2061 +4720 -4.05162E-05
  2062 +4722 -2.18182E-05
  2063 +4724 1.13599E-05
  2064 +4726 -4.26783E-05
  2065 +4728 4.49779E-05
  2066 +4730 5.46657E-05
  2067 +4732 6.31277E-05
  2068 +4734 9.201E-05
  2069 +4736 -2.84995E-05
  2070 +4738 -1.96E-06
  2071 +4740 4.16116E-05
  2072 +4742 2.40E-06
  2073 +4744 0.000106433
  2074 +4746 7.86067E-05
  2075 +4748 -2.31924E-05
  2076 +4750 0.000110697
  2077 +4752 -0.000105205
  2078 +4754 -4.20045E-05
  2079 +4756 5.92E-06
  2080 +4758 -4.33579E-05
  2081 +4760 -0.00010886
  2082 +4762 -7.24948E-05
  2083 +4764 3.96924E-05
  2084 +4766 -0.000191847
  2085 +4768 -0.000117285
  2086 +4770 -6.34291E-05
  2087 +4772 2.12932E-05
  2088 +4774 -3.24E-06
  2089 +4776 1.09424E-05
  2090 +4778 -8.83467E-05
  2091 +4780 3.50E-06
  2092 +4782 -0.000107665
  2093 +4784 -4.71369E-05
  2094 +4786 -0.000105939
  2095 +4788 -1.78558E-05
  2096 +4790 -6.54974E-05
  2097 +4792 -6.69849E-05
  2098 +4794 -0.000104735
  2099 +4796 6.49E-06
  2100 +4798 -0.000146163
  2101 +4800 8.23E-06
  2102 +4802 -3.12394E-05
  2103 +4804 -0.000185322
  2104 +4806 -8.58323E-05
  2105 +4808 -0.000100005
  2106 +4810 -0.00011669
  2107 +4812 -0.000133039
  2108 +4814 -7.84302E-05
  2109 +4816 -9.72117E-05
  2110 +4818 -7.66769E-05
  2111 +4820 -9.0187E-05
  2112 +4822 -0.000155309
  2113 +4824 2.07393E-05
  2114 +4826 5.72E-06
  2115 +4828 -4.57609E-05
  2116 +4830 -0.000194768
  2117 +4832 -0.000133392
  2118 +4834 -0.000165423
  2119 +4836 -0.000152181
  2120 +4838 -0.00017315
  2121 +4840 -6.8367E-05
  2122 +4842 -0.000168049
  2123 +4844 -9.85448E-05
  2124 +4846 -1.83435E-05
  2125 +4848 -4.66214E-05
  2126 +4850 -6.72124E-05
  2127 +4852 -8.60337E-05
  2128 +4854 -0.000139507
  2129 +4856 -7.10E-06
  2130 +4858 -9.54554E-05
  2131 +4860 -7.87667E-05
  2132 +4862 -0.000169032
  2133 +4864 4.42985E-05
  2134 +4866 -5.87E-06
  2135 +4868 -5.49307E-05
  2136 +4870 -9.6575E-05
  2137 +4872 -0.000134905
  2138 +4874 -9.29933E-05
  2139 +4876 -8.09305E-05
  2140 +4878 -0.000291688
  2141 +4880 -9.6625E-05
  2142 +4882 -0.000130894
  2143 +4884 -0.000118673
  2144 +4886 -0.00013703
  2145 +4888 -0.000117201
  2146 +4890 -2.7273E-05
  2147 +4892 -0.000149352
  2148 +4894 -6.61949E-05
  2149 +4896 -0.000129105
  2150 +4898 -0.000158602
  2151 +4900 -8.34552E-05
  2152 +4902 -0.000109603
  2153 +4904 -0.00014692
  2154 +4906 -0.000183268
  2155 +4908 -9.97988E-05
  2156 +4910 -0.000229024
  2157 +4912 -1.11176E-05
  2158 +4914 -0.000155447
  2159 +4916 -8.83261E-05
  2160 +4918 -7.58636E-05
  2161 +4920 -0.000157625
  2162 +4922 -0.000196801
  2163 +4924 -8.35149E-05
  2164 +4926 -9.21691E-05
  2165 +4928 -3.23171E-05
  2166 +4930 -0.000193988
  2167 +4932 -9.61135E-05
  2168 +4934 -0.000101847
  2169 +4936 -6.05769E-05
  2170 +4938 -0.000123916
  2171 +4940 -0.000132141
  2172 +4942 -0.00013735
  2173 +4944 -0.000136462
  2174 +4946 -0.000101766
  2175 +4948 -0.000154092
  2176 +4950 -0.000214223
  2177 +4952 -0.000117774
  2178 +4954 -7.17024E-05
  2179 +4956 -0.000183699
  2180 +4958 -0.00017453
  2181 +4960 -0.000249751
  2182 +4962 -0.000132127
  2183 +4964 5.13399E-05
  2184 +4966 -4.20862E-05
  2185 +4968 -2.52E-06
  2186 +4970 -0.000180519
  2187 +4972 -9.29657E-05
  2188 +4974 -0.000190246
  2189 +4976 -0.000125231
  2190 +4978 3.1279E-05
  2191 +4980 -0.000248043
  2192 +4982 -0.000134352
  2193 +4984 -2.83712E-05
  2194 +4986 -0.000106364
  2195 +4988 -0.000176678
  2196 +4990 -4.92341E-05
  2197 +4992 -5.76105E-05
  2198 +4994 -0.000122315
  2199 +4996 -0.000196789
  2200 +4998 -5.34783E-05
  2201 +5000 -6.5335E-05
  2202 +5002 -0.000226349
  2203 +5004 -0.000101908
  2204 +5006 -6.35036E-05
  2205 +5008 -0.000183858
  2206 +5010 -1.66743E-05
  2207 +5012 -0.000130706
  2208 +5014 4.27E-06
  2209 +5016 -3.28712E-05
  2210 +5018 -0.000182452
  2211 +5020 -6.57517E-05
  2212 +5022 -6.14048E-05
  2213 +5024 -5.15595E-05
  2214 +5026 -5.28437E-05
  2215 +5028 -0.000128204
  2216 +5030 -8.17912E-05
  2217 +5032 -5.30334E-05
  2218 +5034 4.59457E-05
  2219 +5036 -5.073E-05
  2220 +5038 -1.4378E-05
  2221 +5040 -0.000191915
  2222 +5042 -7.42078E-05
  2223 +5044 -0.000115069
  2224 +5046 -0.000147359
  2225 +5048 -5.59493E-05
  2226 +5050 -0.000110795
  2227 +5052 2.13693E-05
  2228 +5054 -3.90667E-05
  2229 +5056 -4.18254E-05
  2230 +5058 -0.000221218
  2231 +5060 -0.000171646
  2232 +5062 -4.28584E-05
  2233 +5064 -0.000103295
  2234 +5066 6.28557E-05
  2235 +5068 -6.38849E-05
  2236 +5070 -7.2519E-05
  2237 +5072 -4.04725E-05
  2238 +5074 -0.000162146
  2239 +5076 -6.50715E-05
  2240 +5078 -4.47088E-05
  2241 +5080 -8.4281E-05
  2242 +5082 -8.43487E-05
  2243 +5084 -0.000186466
  2244 +5086 -0.000247114
  2245 +5088 -3.90E-07
  2246 +5090 -0.000131357
  2247 +5092 -0.000165973
  2248 +5094 3.69467E-05
  2249 +5096 -1.92271E-05
  2250 +5098 -3.22E-06
  2251 +5100 -2.12904E-05
  2252 +5102 -6.97464E-05
  2253 +5104 -0.000102491
  2254 +5106 -0.000121148
  2255 +5108 -3.97039E-05
  2256 +5110 -5.85939E-05
  2257 +5112 -0.000273178
  2258 +5114 -5.84787E-05
  2259 +5116 5.61396E-05
  2260 +5118 -5.16509E-05
  2261 +5120 -0.00018082
  2262 +5122 -5.49575E-05
  2263 +5124 -0.000178501
  2264 +5126 -0.000111293
  2265 +5128 -0.000142361
  2266 +5130 3.78E-06
  2267 +5132 -5.02351E-05
  2268 +5134 9.15343E-05
  2269 +5136 -4.70089E-05
  2270 +5138 -0.00010954
  2271 +5140 1.13571E-05
  2272 +5142 4.82898E-05
  2273 +5144 3.77874E-05
  2274 +5146 -5.93503E-05
  2275 +5148 -0.000164972
  2276 +5150 -8.57053E-05
  2277 +5152 -0.000197877
  2278 +5154 -1.85536E-05
  2279 +5156 -0.000278435
  2280 +5158 -5.9856E-05
  2281 +5160 -5.08827E-05
  2282 +5162 0.000122482
  2283 +5164 5.08896E-05
  2284 +5166 5.83805E-05
  2285 +5168 -0.00012685
  2286 +5170 0.000164092
  2287 +5172 -0.000114154
  2288 +5174 4.62051E-05
  2289 +5176 5.11492E-05
  2290 +5178 -4.62975E-05
  2291 +5180 0.000174738
  2292 +5182 -0.000105599
  2293 +5184 -2.24336E-05
  2294 +5186 6.56395E-05
  2295 +5188 -5.17781E-05
  2296 +5190 7.28549E-05
  2297 +5192 -6.157E-05
  2298 +5194 2.61121E-05
  2299 +5196 0.000121307
  2300 +5198 3.9461E-05
  2301 +5200 6.95204E-05
  2302 +5202 -0.000152101
  2303 +5204 -1.45664E-05
  2304 +5206 -2.81734E-05
  2305 +5208 3.3733E-05
  2306 +5210 -0.000191675
  2307 +5212 -0.000238876
  2308 +5214 5.27E-06
  2309 +5216 -5.55352E-05
  2310 +5218 -0.000242827
  2311 +5220 3.41334E-05
  2312 +5222 -0.000214394
  2313 +5224 1.97708E-05
  2314 +5226 8.8285E-05
  2315 +5228 0.000103699
  2316 +5230 -6.78999E-05
  2317 +5232 -6.29237E-05
  2318 +5234 5.72257E-05
  2319 +5236 -1.89721E-05
  2320 +5238 -0.000113873
  2321 +5240 -4.68908E-05
  2322 +5242 -3.77538E-05
  2323 +5244 0.000139638
  2324 +5246 -4.43735E-05
  2325 +5248 -0.000102626
  2326 +5250 -2.08864E-05
  2327 +5252 7.16191E-05
  2328 +5254 -0.000179139
  2329 +5256 -0.000204764
  2330 +5258 5.62019E-05
  2331 +5260 6.92956E-05
  2332 +5262 -0.00011329
  2333 +5264 -2.34642E-05
  2334 +5266 4.14054E-05
  2335 +5268 1.74697E-05
  2336 +5270 -0.000238236
  2337 +5272 -9.28767E-05
  2338 +5274 -7.16975E-05
  2339 +5276 -0.000127366
  2340 +5278 -0.000230925
  2341 +5280 -2.65856E-05
  2342 +5282 -6.2476E-05
  2343 +5284 -7.327E-05
  2344 +5286 1.91461E-05
  2345 +5288 -7.2295E-05
  2346 +5290 -0.000147312
  2347 +5292 -7.62531E-05
  2348 +5294 -0.000144729
  2349 +5296 -0.000126474
  2350 +5298 -2.27904E-05
  2351 +5300 -0.000112916
  2352 +5302 -8.64288E-05
  2353 +5304 5.86161E-05
  2354 +5306 -0.000139173
  2355 +5308 9.46683E-05
  2356 +5310 -0.000149661
  2357 +5312 -0.000271663
  2358 +5314 1.51686E-05
  2359 +5316 -5.13603E-05
  2360 +5318 4.16107E-05
  2361 +5320 -0.00018097
  2362 +5322 -0.000168231
  2363 +5324 -8.75568E-05
  2364 +5326 1.26443E-05
  2365 +5328 -2.70E-06
  2366 +5330 -0.000102704
  2367 +5332 -3.18529E-05
  2368 +5334 -0.000107168
  2369 +5336 -3.44404E-05
  2370 +5338 5.39579E-05
  2371 +5340 -9.77379E-05
  2372 +5342 0.000125462
  2373 +5344 4.98398E-05
  2374 +5346 -0.000146261
  2375 +5348 -0.000171159
  2376 +5350 -1.69326E-05
  2377 +5352 0.000177523
  2378 +5354 -7.21671E-05
  2379 +5356 -0.000260525
  2380 +5358 -0.000169717
  2381 +5360 -0.000120504
  2382 +5362 -0.000136292
  2383 +5364 -8.95291E-05
  2384 +5366 -0.000137501
  2385 +5368 2.8667E-05
  2386 +5370 -8.19487E-05
  2387 +5372 -0.000148664
  2388 +5374 -2.76867E-05
  2389 +5376 -7.21953E-05
  2390 +5378 -9.64493E-05
  2391 +5380 -0.000148179
  2392 +5382 -5.98436E-05
  2393 +5384 -0.000124761
  2394 +5386 -0.000202081
  2395 +5388 -0.000166304
  2396 +5390 -0.000210005
  2397 +5392 -0.00010521
  2398 +5394 -7.30E-07
  2399 +5396 0.000138772
  2400 +5398 -6.01E-06
  2401 +5400 -0.000188874
  2402 +5402 -5.08203E-05
  2403 +5404 -0.000270553
  2404 +5406 -0.000140069
  2405 +5408 -0.000148844
  2406 +5410 9.32963E-05
  2407 +5412 -0.000131394
  2408 +5414 -0.00011106
  2409 +5416 -9.04442E-05
  2410 +5418 -0.000154567
  2411 +5420 -8.9573E-05
  2412 +5422 -0.000150372
  2413 +5424 -5.82735E-05
  2414 +5426 -0.000166476
  2415 +5428 -1.28661E-05
  2416 +5430 6.85E-06
  2417 +5432 -7.06364E-05
  2418 +5434 -0.000111032
  2419 +5436 -0.000211053
  2420 +5438 -8.24E-06
  2421 +5440 -7.89619E-05
  2422 +5442 1.04035E-05
  2423 +5444 0.000147427
  2424 +5446 -9.76797E-05
  2425 +5448 -0.000136429
  2426 +5450 -0.000211055
  2427 +5452 -0.000161586
  2428 +5454 -5.84473E-05
  2429 +5456 -5.15973E-05
  2430 +5458 -2.10924E-05
  2431 +5460 4.70888E-05
  2432 +5462 -0.000356925
  2433 +5464 -0.000285499
  2434 +5466 -9.7915E-05
  2435 +5468 -7.49916E-05
  2436 +5470 -7.99851E-05
  2437 +5472 -0.000156726
  2438 +5474 7.08954E-05
  2439 +5476 -0.000235041
  2440 +5478 4.11383E-05
  2441 +5480 -8.73586E-05
  2442 +5482 -0.000263069
  2443 +5484 -0.000131456
  2444 +5486 -0.000217176
  2445 +5488 -0.000123259
  2446 +5490 -0.000162573
  2447 +5492 8.80588E-05
  2448 +5494 -5.13835E-05
  2449 +5496 -0.000177107
  2450 +5498 -1.08686E-05
  2451 +5500 -0.00013401
  2452 +5502 -2.17232E-05
  2453 +5504 -0.000204563
  2454 +5506 -0.000130573
  2455 +5508 -0.000138882
  2456 +5510 -4.71656E-05
  2457 +5512 -0.000226241
  2458 +5514 -0.000158162
  2459 +5516 -0.00016349
  2460 +5518 -0.00022113
  2461 +5520 -1.90E-06
  2462 +5522 -8.43313E-05
  2463 +5524 -0.000294269
  2464 +5526 -8.10355E-05
  2465 +5528 -0.0001755
  2466 +5530 -0.000149491
  2467 +5532 -0.000185625
  2468 +5534 -0.000181539
  2469 +5536 -0.000227489
  2470 +5538 -0.000142212
  2471 +5540 -6.22151E-05
  2472 +5542 -4.10673E-05
  2473 +5544 -0.000129738
  2474 +5546 -0.000165541
  2475 +5548 -0.000120703
  2476 +5550 -0.000250116
  2477 +5552 -0.000189888
  2478 +5554 -9.45214E-05
  2479 +5556 -0.000206709
  2480 +5558 -0.000114229
  2481 +5560 -2.74E-06
  2482 +5562 -0.000174771
  2483 +5564 -0.000215381
  2484 +5566 -0.000435337
  2485 +5568 -7.92925E-05
  2486 +5570 -0.000264598
  2487 +5572 -5.21323E-05
  2488 +5574 -0.000184079
  2489 +5576 -0.000195211
  2490 +5578 6.14E-06
  2491 +5580 -1.34219E-05
  2492 +5582 -0.000142205
  2493 +5584 -0.000201266
  2494 +5586 -0.000136273
  2495 +5588 -4.36936E-05
  2496 +5590 -0.000177113
  2497 +5592 -0.000192107
  2498 +5594 -0.000285436
  2499 +5596 -0.000206806
  2500 +5598 -0.000143489
  2501 +5600 -0.000197125
  2502 +5602 -0.000227679
  2503 +5604 -0.000228332
  2504 +5606 -6.73004E-05
  2505 +5608 -0.00010937
  2506 +5610 -0.000349687
  2507 +5612 -0.000177179
  2508 +5614 -0.00025193
  2509 +5616 -5.64675E-05
  2510 +5618 -0.000170188
  2511 +5620 -0.000230005
  2512 +5622 -0.00040001
  2513 +5624 -3.67655E-05
  2514 +5626 -7.16761E-05
  2515 +5628 -0.000397345
  2516 +5630 -4.36E-07
  2517 +5632 -4.1559E-05
  2518 +5634 -0.000190926
  2519 +5636 -0.000371965
  2520 +5638 -0.00024466
  2521 +5640 2.96284E-05
  2522 +5642 -3.24397E-05
  2523 +5644 -0.000369574
  2524 +5646 -9.12484E-05
  2525 +5648 -0.000200854
  2526 +5650 -0.0002112
  2527 +5652 -0.00010615
  2528 +5654 -0.0002109
  2529 +5656 -0.000131312
  2530 +5658 -7.34227E-05
  2531 +5660 -0.000125623
  2532 +5662 -0.000222683
  2533 +5664 -3.11127E-05
  2534 +5666 -0.000142646
  2535 +5668 -9.98779E-05
  2536 +5670 -2.86769E-05
  2537 +5672 -0.000218787
  2538 +5674 -7.01801E-05
  2539 +5676 -0.000370383
  2540 +5678 1.93936E-05
  2541 +5680 -0.000236552
  2542 +5682 -0.000114162
  2543 +5684 -1.40634E-05
  2544 +5686 -9.94189E-05
  2545 +5688 5.44862E-05
  2546 +5690 -9.22632E-05
  2547 +5692 -0.000235726
  2548 +5694 -0.000286721
  2549 +5696 -9.80563E-05
  2550 +5698 -0.000186885
  2551 +5700 -8.91076E-05
  2552 +5702 -0.000116416
  2553 +5704 -0.00014795
  2554 +5706 2.03924E-05
  2555 +5708 -9.58288E-05
  2556 +5710 -6.8708E-05
  2557 +5712 -0.000150654
  2558 +5714 -3.29562E-05
  2559 +5716 -0.000217313
  2560 +5718 1.36356E-05
  2561 +5720 -4.4006E-05
  2562 +5722 -0.000146933
  2563 +5724 -3.21571E-05
  2564 +5726 -0.000122156
  2565 +5728 -0.000269322
  2566 +5730 -0.000197751
  2567 +5732 -0.000130912
  2568 +5734 -0.000154111
  2569 +5736 -9.53856E-05
  2570 +5738 -0.000240261
  2571 +5740 -0.000161401
  2572 +5742 6.45E-06
  2573 +5744 -0.000184411
  2574 +5746 -0.000245277
  2575 +5748 -0.000212489
  2576 +5750 -4.43252E-05
  2577 +5752 -0.000107688
  2578 +5754 1.07502E-05
  2579 +5756 -0.000167197
  2580 +5758 -6.68704E-05
  2581 +5760 -4.80992E-05
  2582 +5762 -5.66434E-05
  2583 +5764 -0.000228705
  2584 +5766 -0.000265847
  2585 +5768 -9.75073E-05
  2586 +5770 -0.000122477
  2587 +5772 -0.00013384
  2588 +5774 -0.00030111
  2589 +5776 -6.26301E-05
  2590 +5778 3.12553E-05
  2591 +5780 -5.04101E-05
  2592 +5782 -0.000160911
  2593 +5784 -3.53197E-05
  2594 +5786 -0.000214252
  2595 +5788 2.99878E-05
  2596 +5790 -0.000147791
  2597 +5792 -4.13023E-05
  2598 +5794 -6.57403E-05
  2599 +5796 -0.000122902
  2600 +5798 2.21647E-05
  2601 +5800 -6.32159E-05
  2602 +5802 -6.96488E-05
  2603 +5804 -0.000176959
  2604 +5806 -0.000104603
  2605 +5808 -2.97849E-05
  2606 +5810 -2.13517E-05
  2607 +5812 -0.000310097
  2608 +5814 -0.000234544
  2609 +5816 -0.000306688
  2610 +5818 -0.000134224
  2611 +5820 -4.62987E-05
  2612 +5822 -8.32075E-05
  2613 +5824 -0.000124491
  2614 +5826 -0.000227533
  2615 +5828 7.63E-06
  2616 +5830 -0.000100538
  2617 +5832 -0.000209111
  2618 +5834 -6.65844E-05
  2619 +5836 -0.000147125
  2620 +5838 -0.000133334
  2621 +5840 -8.70E-06
  2622 +5842 -2.23727E-05
  2623 +5844 -0.000315383
  2624 +5846 -0.000185853
  2625 +5848 0.000154914
  2626 +5850 -0.000121906
  2627 +5852 -6.5162E-05
  2628 +5854 -0.000181952
  2629 +5856 -4.16013E-05
  2630 +5858 -3.0724E-05
  2631 +5860 3.03096E-05
  2632 +5862 6.01019E-05
  2633 +5864 -0.000205749
  2634 +5866 -7.91329E-05
  2635 +5868 -3.1756E-05
  2636 +5870 -0.000153925
  2637 +5872 -4.92637E-05
  2638 +5874 8.94E-06
  2639 +5876 0.000167884
  2640 +5878 2.81044E-05
  2641 +5880 -0.000172485
  2642 +5882 3.85173E-05
  2643 +5884 -0.000199897
  2644 +5886 5.97079E-05
  2645 +5888 1.12013E-05
  2646 +5890 -0.000182001
  2647 +5892 -0.000170865
  2648 +5894 2.87266E-05
  2649 +5896 0.000188198
  2650 +5898 0.000162068
  2651 +5900 6.77282E-05
  2652 +5902 -0.000100557
  2653 +5904 0.000172774
  2654 +5906 5.45068E-05
  2655 +5908 6.71451E-05
  2656 +5910 1.42267E-05
  2657 +5912 0.000159991
  2658 +5914 0.000176915
  2659 +5916 0.000201461
  2660 +5918 7.24557E-05
  2661 +5920 -0.000214255
  2662 +5922 0.000185476
  2663 +5924 5.55465E-05
  2664 +5926 5.85444E-05
  2665 +5928 2.38107E-05
  2666 +5930 0.000209259
  2667 +5932 2.68625E-05
  2668 +5934 6.93668E-05
  2669 +5936 -0.00010269
  2670 +5938 0.000204459
  2671 +5940 4.3037E-05
  2672 +5942 0.000134317
  2673 +5944 0.00011353
  2674 +5946 -1.1138E-05
  2675 +5948 -0.00021765
  2676 +5950 0.000113405
  2677 +5952 -6.84037E-05
  2678 +5954 -6.10258E-05
  2679 +5956 0.000128848
  2680 +5958 6.24606E-05
  2681 +5960 -1.7243E-05
  2682 +5962 -9.28901E-05
  2683 +5964 -0.000124651
  2684 +5966 -0.000180665
  2685 +5968 0.000142526
  2686 +5970 -0.000128998
  2687 +5972 0.000184577
  2688 +5974 -3.74491E-05
  2689 +5976 -0.00013039
  2690 +5978 2.31888E-05
  2691 +5980 0.000132512
  2692 +5982 -0.000132757
  2693 +5984 -0.000164463
  2694 +5986 8.58551E-05
  2695 +5988 -0.000140773
  2696 +5990 -4.35385E-05
  2697 +5992 7.0978E-05
  2698 +5994 -6.24E-06
  2699 +5996 0.000148403
  2700 +5998 0.000188021
  2701 +6000 2.66254E-05
  2702 +6002 8.84368E-05
  2703 +6004 3.65224E-05
  2704 +6006 5.78793E-05
  2705 +6008 3.50034E-05
  2706 +6010 5.62399E-05
  2707 +6012 -5.14362E-05
  2708 +6014 0.00034933
  2709 +6016 0.000168918
  2710 +6018 5.34508E-05
  2711 +6020 0.000122075
  2712 +6022 -4.05053E-05
  2713 +6024 8.9883E-05
  2714 +6026 0.000161734
  2715 +6028 -7.37436E-05
  2716 +6030 -4.95E-06
  2717 +6032 0.00022485
  2718 +6034 -0.000253566
  2719 +6036 0.000122794
  2720 +6038 -2.70286E-05
  2721 +6040 7.11802E-05
  2722 +6042 0.000129984
  2723 +6044 1.57E-06
  2724 +6046 -0.000117867
  2725 +6048 -2.15324E-05
  2726 +6050 -1.38764E-05
  2727 +6052 6.69437E-05
  2728 +6054 -0.000117569
  2729 +6056 1.94807E-05
  2730 +6058 -1.96687E-05
  2731 +6060 -0.000147066
  2732 +6062 5.52879E-05
  2733 +6064 -3.51488E-05
  2734 +6066 1.65759E-05
  2735 +6068 0.000194312
  2736 +6070 -9.75251E-05
  2737 +6072 -0.000286519
  2738 +6074 -0.000133893
  2739 +6076 -0.000144305
  2740 +6078 -0.000206774
  2741 +6080 9.70323E-05
  2742 +6082 0.000105616
  2743 +6084 7.76744E-05
  2744 +6086 -1.85213E-05
  2745 +6088 2.1601E-05
  2746 +6090 2.86444E-05
  2747 +6092 -7.78625E-05
  2748 +6094 -0.000103451
  2749 +6096 5.06513E-05
  2750 +6098 -0.000126614
  2751 +6100 -0.000291543
  2752 +6102 -3.20512E-05
  2753 +6104 -0.00034077
  2754 +6106 4.78E-06
  2755 +6108 -0.00021435
  2756 +6110 -3.06885E-05
  2757 +6112 -0.00013895
  2758 +6114 -6.48402E-05
  2759 +6116 -7.10551E-05
  2760 +6118 -0.000288181
  2761 +6120 -6.09779E-05
  2762 +6122 -0.000224615
  2763 +6124 -8.03908E-05
  2764 +6126 -7.04685E-05
  2765 +6128 7.00613E-05
  2766 +6130 -0.000187151
  2767 +6132 -0.00015411
  2768 +6134 -0.000142311
  2769 +6136 0.000311664
  2770 +6138 0.000185075
  2771 +6140 0.000302768
  2772 +6142 -0.000104647
  2773 +6144 0.000119734
  2774 +6146 -4.93308E-05
  2775 +6148 1.16225E-05
  2776 +6150 -0.000114402
  2777 +6152 -0.00021231
  2778 +6154 7.1843E-05
  2779 +6156 -5.21411E-05
  2780 +6158 -8.98771E-05
  2781 +6160 0.000148557
  2782 +6162 -5.44653E-05
  2783 +6164 -0.00012796
  2784 +6166 9.70156E-05
  2785 +6168 -0.000101064
  2786 +6170 -0.00013553
  2787 +6172 9.9476E-05
  2788 +6174 1.62078E-05
  2789 +6176 -4.40928E-05
  2790 +6178 0.000102579
  2791 +6180 1.77941E-05
  2792 +6182 -0.000149253
  2793 +6184 -8.96427E-05
  2794 +6186 -0.000108399
  2795 +6188 6.41861E-05
  2796 +6190 0.000121833
  2797 +6192 -2.42281E-05
  2798 +6194 -0.000112157
  2799 +6196 -2.51081E-05
  2800 +6198 -3.95046E-05
  2801 +6200 0.000178628
  2802 +6202 -0.000148793
  2803 +6204 -9.57E-06
  2804 +6206 -7.90421E-05
  2805 +6208 -8.07858E-05
  2806 +6210 -4.14175E-05
  2807 +6212 -7.21446E-05
  2808 +6214 0.000149076
  2809 +6216 3.91353E-05
  2810 +6218 -0.000114591
  2811 +6220 -9.9288E-05
  2812 +6222 -0.000113439
  2813 +6224 -2.5277E-05
  2814 +6226 -8.29E-07
  2815 +6228 8.26896E-05
  2816 +6230 -6.24E-06
  2817 +6232 0.000107177
  2818 +6234 -3.60E-06
  2819 +6236 0.000162593
  2820 +6238 -5.28839E-05
  2821 +6240 -0.000174024
  2822 +6242 -0.000101802
  2823 +6244 1.47698E-05
  2824 +6246 4.79099E-05
  2825 +6248 -8.95552E-05
  2826 +6250 0.000146406
  2827 +6252 0.000106973
  2828 +6254 7.08576E-05
  2829 +6256 -5.01693E-05
  2830 +6258 5.31355E-05
  2831 +6260 -0.000233967
  2832 +6262 4.08849E-05
  2833 +6264 -7.93998E-05
  2834 +6266 0.00014663
  2835 +6268 -4.49E-07
  2836 +6270 0.000121188
  2837 +6272 -4.01289E-05
  2838 +6274 9.46038E-05
  2839 +6276 4.40081E-05
  2840 +6278 8.76714E-05
  2841 +6280 -0.000191742
  2842 +6282 -0.000105518
  2843 +6284 -4.94007E-05
  2844 +6286 -4.65298E-05
  2845 +6288 1.22E-07
  2846 +6290 0.000159264
  2847 +6292 3.10034E-05
  2848 +6294 6.24514E-05
  2849 +6296 -2.04794E-05
  2850 +6298 -0.000228969
  2851 +6300 7.75386E-05
  2852 +6302 -8.37533E-05
  2853 +6304 -4.76962E-05
  2854 +6306 0.000134281
  2855 +6308 -9.41E-06
  2856 +6310 -0.000141126
  2857 +6312 -0.000133436
  2858 +6314 9.32692E-05
  2859 +6316 0.000130775
  2860 +6318 0.000198152
  2861 +6320 -5.79899E-05
  2862 +6322 -4.41423E-05
  2863 +6324 0.000143831
  2864 +6326 0.000107897
  2865 +6328 1.79488E-05
  2866 +6330 -0.000148111
  2867 +6332 0.000107348
  2868 +6334 -2.49393E-05
  2869 +6336 -0.000148447
  2870 +6338 0.000163246
  2871 +6340 2.64628E-05
  2872 +6342 6.50765E-05
  2873 +6344 -5.74688E-05
  2874 +6346 9.16788E-05
  2875 +6348 0.000115457
  2876 +6350 2.51624E-05
  2877 +6352 -6.82336E-05
  2878 +6354 0.000175589
  2879 +6356 -2.47157E-05
  2880 +6358 0.000300847
  2881 +6360 4.29191E-05
  2882 +6362 -0.000102159
  2883 +6364 -0.000150186
  2884 +6366 -0.000137124
  2885 +6368 -3.6448E-05
  2886 +6370 6.31217E-05
  2887 +6372 -2.17468E-05
  2888 +6374 0.00020514
  2889 +6376 -0.000288874
  2890 +6378 -0.000196896
  2891 +6380 5.33731E-05
  2892 +6382 -0.00018922
  2893 +6384 5.94367E-05
  2894 +6386 0.00018609
  2895 +6388 -0.000231268
  2896 +6390 0.000188414
  2897 +6392 8.58249E-05
  2898 +6394 0.000322554
  2899 +6396 -8.18526E-05
  2900 +6398 6.46391E-05
  2901 +6400 -3.654E-05
  2902 +6402 -5.43539E-05
  2903 +6404 0.00011808
  2904 +6406 -0.000111429
  2905 +6408 3.37446E-05
  2906 +6410 0.000103862
  2907 +6412 -2.73016E-05
  2908 +6414 0.000148599
  2909 +6416 -0.000175049
  2910 +6418 -7.87E-06
  2911 +6420 -1.44832E-05
  2912 +6422 -8.69714E-05
  2913 +6424 7.46194E-05
  2914 +6426 -8.40362E-05
  2915 +6428 0.000255133
  2916 +6430 -7.29877E-05
  2917 +6432 0.000251098
  2918 +6434 -6.47746E-05
  2919 +6436 -0.000116293
  2920 +6438 0.000176731
  2921 +6440 -8.31E-06
  2922 +6442 -0.000133431
  2923 +6444 -0.000148146
  2924 +6446 1.85739E-05
  2925 +6448 -7.49236E-05
  2926 +6450 7.86825E-05
  2927 +6452 0.000150351
  2928 +6454 8.30916E-05
  2929 +6456 -2.89466E-05
  2930 +6458 2.75E-07
  2931 +6460 -7.6078E-05
  2932 +6462 0.000127013
  2933 +6464 0.000125654
  2934 +6466 -9.06547E-05
  2935 +6468 -0.000245214
  2936 +6470 -9.9701E-05
  2937 +6472 -7.93695E-05
  2938 +6474 -0.000114213
  2939 +6476 0.000128301
  2940 +6478 -7.09795E-05
  2941 +6480 0.00014139
  2942 +6482 6.9353E-05
  2943 +6484 0.000113504
  2944 +6486 -0.000222003
  2945 +6488 0.00011384
  2946 +6490 5.82324E-05
  2947 +6492 -4.78533E-05
  2948 +6494 -0.000172427
  2949 +6496 3.94829E-05
  2950 +6498 -0.000207402
  2951 +6500 -0.000158524
  2952 +6502 7.13359E-05
  2953 +6504 -0.00015144
  2954 +6506 -0.000166462
  2955 +6508 -1.63887E-05
  2956 +6510 8.49982E-05
  2957 +6512 -0.000133497
  2958 +6514 -2.65249E-05
  2959 +6516 -0.000187609
  2960 +6518 -1.77176E-05
  2961 +6520 -0.000139934
  2962 +6522 1.97547E-05
  2963 +6524 -0.000213204
  2964 +6526 -2.25511E-05
  2965 +6528 -5.93047E-05
  2966 +6530 -0.000104047
  2967 +6532 -0.000306345
  2968 +6534 -3.98042E-05
  2969 +6536 -7.78457E-05
  2970 +6538 -7.13E-06
  2971 +6540 -0.000280079
  2972 +6542 0.000154768
  2973 +6544 9.83578E-05
  2974 +6546 0.000181306
  2975 +6548 -0.000133643
  2976 +6550 0.000105885
  2977 +6552 -0.000157576
  2978 +6554 -9.20987E-05
  2979 +6556 -5.51079E-05
  2980 +6558 -3.02747E-05
  2981 +6560 -7.17904E-05
  2982 +6562 -0.000280564
  2983 +6564 -6.67912E-05
  2984 +6566 0.000184375
  2985 +6568 -8.73372E-05
  2986 +6570 -0.000100174
  2987 +6572 -2.82062E-05
  2988 +6574 -8.84695E-05
  2989 +6576 0.000144169
  2990 +6578 -0.000240943
  2991 +6580 -0.000139581
  2992 +6582 0.000120571
  2993 +6584 0.000138317
  2994 +6586 -0.00022769
  2995 +6588 -0.000275816
  2996 +6590 0.00010466
  2997 +6592 7.78823E-05
  2998 +6594 -5.28282E-05
  2999 +6596 -2.40E-06
  3000 +6598 0.000117892
  3001 +6600 -4.19631E-05
  3002 +6602 -0.000315964
  3003 +6604 -0.000410462
  3004 +6606 -0.000120959
  3005 +6608 9.99E-06
  3006 +6610 4.37964E-05
  3007 +6612 -3.31902E-05
  3008 +6614 -8.51607E-05
  3009 +6616 -0.000154694
  3010 +6618 -9.29603E-05
  3011 +6620 5.289E-05
  3012 +6622 -0.000125816
  3013 +6624 -0.000314679
  3014 +6626 -0.00016154
  3015 +6628 -0.000141162
  3016 +6630 -0.000119437
  3017 +6632 -0.0001569
  3018 +6634 -0.000166503
  3019 +6636 0.000112686
  3020 +6638 1.99608E-05
  3021 +6640 4.35539E-05
  3022 +6642 -0.000166097
  3023 +6644 -4.87333E-05
  3024 +6646 -0.000336465
  3025 +6648 -0.00029665
  3026 +6650 -0.000145957
  3027 +6652 7.43624E-05
  3028 +6654 -0.000223543
  3029 +6656 0.000141507
  3030 +6658 0.000143548
  3031 +6660 -0.000207983
  3032 +6662 -3.80663E-05
  3033 +6664 -0.000115808
  3034 +6666 -0.000371392
  3035 +6668 -0.000146251
  3036 +6670 -0.000330336
  3037 +6672 -0.000268665
  3038 +6674 -8.44355E-05
  3039 +6676 -1.45736E-05
  3040 +6678 -0.000355467
  3041 +6680 -0.000112196
  3042 +6682 2.59378E-05
  3043 +6684 -5.07584E-05
  3044 +6686 -2.74706E-05
  3045 +6688 -0.000184275
  3046 +6690 -8.74E-06
  3047 +6692 -2.95378E-05
  3048 +6694 2.54E-06
  3049 +6696 -0.000101312
  3050 +6698 -0.000211174
  3051 +6700 -0.000164924
  3052 +6702 -0.000398584
  3053 +6704 -0.000146533
  3054 +6706 -0.000348778
  3055 +6708 -0.000143255
  3056 +6710 0.000147283
  3057 +6712 -9.8179E-05
  3058 +6714 9.34795E-05
  3059 +6716 -0.000150882
  3060 +6718 -0.000297166
  3061 +6720 1.32743E-05
  3062 +6722 -0.000120746
  3063 +6724 -8.11384E-05
  3064 +6726 -0.000325532
  3065 +6728 -0.000194586
  3066 +6730 -0.00012466
  3067 +6732 -4.78812E-05
  3068 +6734 -9.19999E-05
  3069 +6736 -0.000107843
  3070 +6738 -6.23358E-05
  3071 +6740 -0.000286347
  3072 +6742 -3.71682E-05
  3073 +6744 -4.80E-06
  3074 +6746 -0.000319234
  3075 +6748 -0.000279883
  3076 +6750 -0.000272827
  3077 +6752 -0.000101761
  3078 +6754 -0.000146361
  3079 +6756 -0.000266156
  3080 +6758 0.000102535
  3081 +6760 -0.000386606
  3082 +6762 -0.00018995
  3083 +6764 -0.000215715
  3084 +6766 -0.00023779
  3085 +6768 -0.000211241
  3086 +6770 -0.000283036
  3087 +6772 -0.000106436
  3088 +6774 -0.000187373
  3089 +6776 -0.000190231
  3090 +6778 -1.71093E-05
  3091 +6780 -0.000351549
  3092 +6782 -0.000167132
  3093 +6784 6.03858E-05
  3094 +6786 -0.000311376
  3095 +6788 -0.000142106
  3096 +6790 -1.62293E-05
  3097 +6792 -0.000231522
  3098 +6794 -8.28732E-05
  3099 +6796 -0.000337511
  3100 +6798 -0.000203157
  3101 +6800 -3.72712E-05
  3102 +6802 -0.000234517
  3103 +6804 -1.30E-06
  3104 +6806 -8.99819E-05
  3105 +6808 -3.03547E-05
  3106 +6810 -7.82862E-05
  3107 +6812 -0.000275055
  3108 +6814 8.78416E-05
  3109 +6816 -0.000124671
  3110 +6818 -0.000332395
  3111 +6820 -0.000120407
  3112 +6822 -0.000196254
  3113 +6824 -0.000143466
  3114 +6826 -0.00023199
  3115 +6828 -2.32556E-05
  3116 +6830 -0.000506958
  3117 +6832 1.30E-06
  3118 +6834 -0.000349053
  3119 +6836 -0.000105324
  3120 +6838 -0.000365336
  3121 +6840 -0.000376516
  3122 +6842 -0.000268123
  3123 +6844 -0.000216535
  3124 +6846 -0.000149111
  3125 +6848 -0.000224848
  3126 +6850 -0.000219525
  3127 +6852 3.8059E-05
  3128 +6854 -0.000306124
  3129 +6856 -0.000480935
  3130 +6858 -7.56657E-05
  3131 +6860 -0.000234094
  3132 +6862 -8.62146E-05
  3133 +6864 -4.34679E-05
  3134 +6866 -6.9076E-05
  3135 +6868 -0.000343807
  3136 +6870 -2.52463E-05
  3137 +6872 0.00013412
  3138 +6874 -0.000136273
  3139 +6876 -6.21612E-05
  3140 +6878 -0.000382671
  3141 +6880 -3.57982E-05
  3142 +6882 -0.000173088
  3143 +6884 9.16434E-05
  3144 +6886 -0.000290802
  3145 +6888 -0.00033873
  3146 +6890 -0.000100816
  3147 +6892 -0.000332355
  3148 +6894 -2.15443E-05
  3149 +6896 -0.000139886
  3150 +6898 -0.000147969
  3151 +6900 -0.000250801
  3152 +6902 -0.000287541
  3153 +6904 3.96189E-05
  3154 +6906 -0.00043964
  3155 +6908 -0.000144297
  3156 +6910 -0.000259311
  3157 +6912 -0.000307546
  3158 +6914 -0.000207326
  3159 +6916 -0.000311028
  3160 +6918 1.09E-06
  3161 +6920 -0.000316103
  3162 +6922 -0.000116125
  3163 +6924 -0.0004364
  3164 +6926 -0.00019726
  3165 +6928 2.21665E-05
  3166 +6930 -0.000196139
  3167 +6932 -0.000150559
  3168 +6934 -0.00021327
  3169 +6936 -0.000242659
  3170 +6938 -0.000324069
  3171 +6940 -0.000156015
  3172 +6942 -0.000114122
  3173 +6944 -0.000116531
  3174 +6946 -0.0002098
  3175 +6948 -0.000403686
  3176 +6950 -0.000428051
  3177 +6952 -0.000205227
  3178 +6954 -0.000263236
  3179 +6956 -7.86915E-05
  3180 +6958 -0.000295775
  3181 +6960 -0.000232486
  3182 +6962 -0.000143043
  3183 +6964 -0.000239739
  3184 +6966 -0.000219405
  3185 +6968 -0.000354447
  3186 +6970 9.11346E-05
  3187 +6972 -0.00030139
  3188 +6974 -0.00035907
  3189 +6976 -0.000467083
  3190 +6978 -2.82218E-05
  3191 +6980 -7.5117E-05
  3192 +6982 -0.000384305
  3193 +6984 -0.000260206
  3194 +6986 -0.000183068
  3195 +6988 -0.000267272
  3196 +6990 -0.000436363
  3197 +6992 0.000209017
  3198 +6994 0.000133107
  3199 +6996 -0.000135045
  3200 +6998 -0.00045575
3201 7000 -5.24841E-05 3201 7000 -5.24841E-05
3202 \ No newline at end of file 3202 \ No newline at end of file
1 -#include <fstream>  
2 -using namespace std;  
3 -#include "interactivemie.h"  
4 -#include <QtGui/QApplication>  
5 -#include "qtSpectrumDisplay.h"  
6 -#include "globals.h"  
7 -#include "rtsGUIConsole.h"  
8 -#include "PerformanceData.h"  
9 -#include <complex>  
10 -//#include <direct.h>  
11 -  
12 -PerformanceData PD;  
13 -  
14 -qtSpectrumDisplay* gpSpectrumDisplay;  
15 -  
16 -vector<vector<SpecPair> > RefSpectrum;  
17 -vector<SpecPair> SimSpectrum;  
18 -vector<SpecPair> EtaK;  
19 -vector<SpecPair> EtaN;  
20 -int currentSpec = 0;  
21 -  
22 -double nuMin = 800;  
23 -double nuMax = 4000;  
24 -double dNu = 2;  
25 -  
26 -double aMin = 0;  
27 -double aMax = 1;  
28 -  
29 -double scaleI0 = 1.0;  
30 -double refSlope = 0.0;  
31 -  
32 -bool dispRefSpec = true;  
33 -bool dispSimSpec = true;  
34 -bool dispSimK = true;  
35 -bool dispMatK = true;  
36 -bool dispSimN = true;  
37 -bool dispMatN = true;  
38 -double dispScaleK = 1.0;  
39 -double dispScaleN = 1.0;  
40 -SpecType dispSimType = AbsorbanceSpecType;  
41 -bool dispNormalize = false;  
42 -double dispNormFactor = 1.0;  
43 -  
44 -  
45 -//material parameters  
46 -double radius = 4.0f;  
47 -double baseIR = 1.49f;  
48 -double cA = 1.0;  
49 -//vector<SpecPair> KMaterial;  
50 -//vector<SpecPair> NMaterial;  
51 -bool applyMaterial = true;  
52 -vector<Material> MaterialList;  
53 -int currentMaterial = 0;  
54 -  
55 -//optical parameters  
56 -double cNAi = 0.0;  
57 -double cNAo = 0.6;  
58 -double oNAi = 0.0;  
59 -double oNAo = 0.6;  
60 -OpticsType opticsMode = TransmissionOpticsType;  
61 -bool pointDetector = false;  
62 -int objectiveSamples = 200;  
63 -  
64 -//fitting parameters  
65 -double minMSE = 0.00001;  
66 -int maxFitIter = 20;  
67 -  
68 -void TempSimSpectrum()  
69 -{  
70 - SpecPair temp;  
71 - for(int i=800; i<4000; i++)  
72 - {  
73 - temp.nu = i;  
74 - temp.A = sin((double)i/200);  
75 - SimSpectrum.push_back(temp);  
76 - }  
77 -}  
78 -  
79 -void UpdateDisplay(){  
80 - gpSpectrumDisplay->updateGL();  
81 -}  
82 -  
83 -void LoadMaterial(string fileNameK, string fileNameN, string materialName)  
84 -{  
85 - Material newMaterial;  
86 - newMaterial.name = materialName;  
87 -  
88 - vector<SpecPair> KMaterial = LoadSpectrum(fileNameK.c_str());  
89 - vector<SpecPair> NMaterial = LoadSpectrum(fileNameN.c_str());  
90 -  
91 - //make sure that the sizes are the same  
92 - if(KMaterial.size() != NMaterial.size()){  
93 - cout<<"Error, material properties don't match."<<endl;  
94 - exit(1);  
95 - }  
96 -  
97 - complex<double> eta;  
98 - //int j;  
99 - for(unsigned int i=0; i<KMaterial.size(); i++){  
100 - newMaterial.nu.push_back(KMaterial[i].nu);  
101 - eta = complex<double>(NMaterial[i].A, KMaterial[i].A);  
102 - newMaterial.eta.push_back(eta);  
103 - }  
104 - MaterialList.push_back(newMaterial);  
105 -  
106 -}  
107 -  
108 -void LoadMaterial(string fileNameK, string materialName){  
109 -  
110 - //load the material absorbance  
111 - vector<SpecPair> KMaterial = LoadSpectrum(fileNameK.c_str());  
112 - vector<SpecPair> NMaterial;  
113 - //KMaterial = LoadSpectrum("eta_TolueneK.txt");  
114 -  
115 - //compute the real IR using Kramers Kronig  
116 - //copy the absorbance values into a linear array  
117 - double* k = (double*)malloc(sizeof(double) * KMaterial.size());  
118 - double* n = (double*)malloc(sizeof(double) * KMaterial.size());  
119 - for(unsigned int i=0; i<KMaterial.size(); i++)  
120 - k[i] = KMaterial[i].A;  
121 -  
122 - //use Kramers Kronig to determine the real part of the index of refraction  
123 - cudaKramersKronig(n, k, KMaterial.size(), KMaterial[0].nu, KMaterial.back().nu, baseIR);  
124 - SpecPair temp;  
125 - for(unsigned int i=0; i<KMaterial.size(); i++)  
126 - {  
127 - temp.nu = KMaterial[i].nu;  
128 - temp.A = n[i];  
129 - NMaterial.push_back(temp);  
130 - }  
131 -  
132 - //create the material  
133 - Material newMaterial;  
134 - newMaterial.name = materialName;  
135 - complex<double> eta;  
136 - for(unsigned int i=0; i<KMaterial.size(); i++){  
137 - newMaterial.nu.push_back(KMaterial[i].nu);  
138 - eta = complex<double>(NMaterial[i].A, KMaterial[i].A);  
139 - newMaterial.eta.push_back(eta);  
140 - }  
141 -  
142 - MaterialList.push_back(newMaterial);  
143 -}  
144 -  
145 -void FitDisplay(){  
146 - double minA = 99999.0;  
147 - double maxA = -99999.0;  
148 - double k, n;  
149 -  
150 - if(dispSimSpec)  
151 - for(unsigned int i=0; i<SimSpectrum.size(); i++)  
152 - {  
153 - if(SimSpectrum[i].A < minA)  
154 - minA = SimSpectrum[i].A;  
155 - if(SimSpectrum[i].A > maxA)  
156 - maxA = SimSpectrum[i].A;  
157 - }  
158 -  
159 - if(dispRefSpec && RefSpectrum.size() > 0)  
160 - for(unsigned int i=0; i<RefSpectrum[currentSpec].size(); i++)  
161 - {  
162 - if(RefSpectrum[currentSpec][i].A < minA)  
163 - minA = RefSpectrum[currentSpec][i].A;  
164 - if(RefSpectrum[currentSpec][i].A > maxA)  
165 - maxA = RefSpectrum[currentSpec][i].A;  
166 - }  
167 - if(dispMatK)  
168 - for(unsigned int i=0; i<EtaK.size(); i++)  
169 - {  
170 - k = MaterialList[currentMaterial].eta[i].imag() * dispScaleK;  
171 - if(k < minA)  
172 - minA = k;  
173 - if(k > maxA)  
174 - maxA = k;  
175 - }  
176 - if(dispSimK)  
177 - for(unsigned int i=0; i<EtaK.size(); i++)  
178 - {  
179 - k = EtaK[i].A * dispScaleK;  
180 - if(k < minA)  
181 - minA = k;  
182 - if(EtaK[i].A > maxA)  
183 - maxA = k;  
184 - }  
185 - if(dispMatN)  
186 - for(unsigned int i=0; i<EtaN.size(); i++)  
187 - {  
188 - n = (MaterialList[currentMaterial].eta[i].real() - baseIR) * dispScaleN;  
189 - if(n < minA)  
190 - minA = n;  
191 - if(n > maxA)  
192 - maxA = n;  
193 - }  
194 - if(dispSimN)  
195 - for(unsigned int i=0; i<EtaN.size(); i++)  
196 - {  
197 - n = (EtaN[i].A - baseIR) * dispScaleN;  
198 - if(n < minA)  
199 - minA = n;  
200 - if(n > maxA)  
201 - maxA = n;  
202 - }  
203 -  
204 - aMin = minA;  
205 - aMax = maxA;  
206 - UpdateDisplay();  
207 -}  
208 -  
209 -void ChangeAbsorbance(){  
210 -  
211 - //compute the real part of the index of refraction  
212 -  
213 - //copy the absorbance values into a linear array  
214 - int nSamples = MaterialList[currentMaterial].eta.size();  
215 - double startNu = MaterialList[currentMaterial].nu.front();  
216 - double endNu = MaterialList[currentMaterial].nu.back();  
217 - double* k = (double*)malloc(sizeof(double) * nSamples);  
218 - double* n = (double*)malloc(sizeof(double) * nSamples);  
219 - for(int i=0; i<nSamples; i++)  
220 - k[i] = MaterialList[currentMaterial].eta[i].imag() * cA;  
221 -  
222 - //NMaterial.clear();  
223 - EtaK.clear();  
224 - EtaN.clear();  
225 - //use Kramers Kronig to determine the real part of the index of refraction  
226 - cudaKramersKronig(n, k, nSamples, startNu, endNu, baseIR);  
227 -  
228 - //copy the real part of the index of refraction into the vector  
229 - SpecPair temp;  
230 -  
231 - //load the imaginary IR from the absorbance data  
232 - double nu;  
233 - for(int i=0; i<nSamples; i++){  
234 - nu = MaterialList[currentMaterial].nu[i];  
235 - if(nu >= nuMin && nu <= nuMax){  
236 - temp.nu = nu;  
237 - temp.A = k[i];  
238 - EtaK.push_back(temp);  
239 - //temp.A = NMaterial[i].A;  
240 - temp.A = n[i];  
241 - EtaN.push_back(temp);  
242 - }  
243 - }  
244 -  
245 - free(k);  
246 - free(n);  
247 -}  
248 -  
249 -void SetMaterial()  
250 -{  
251 - EtaK.clear();  
252 - EtaN.clear();  
253 -  
254 - int nSamples = MaterialList[currentMaterial].eta.size();  
255 - double nu;  
256 - SpecPair temp;  
257 -  
258 - //initialize the current nuMin and nuMax values  
259 - nuMin = MaterialList[currentMaterial].nu[0];  
260 - nuMax = nuMin;  
261 - for(int i=0; i<nSamples; i++){  
262 - nu = MaterialList[currentMaterial].nu[i];  
263 - //if(nu >= nuMin && nu <= nuMax){  
264 -  
265 - //update the min and max values for display  
266 - if(nu < nuMin) nuMin = nu;  
267 - if(nu > nuMax) nuMax = nu;  
268 -  
269 - temp.nu = nu;  
270 - temp.A = MaterialList[currentMaterial].eta[i].imag();  
271 - EtaK.push_back(temp);  
272 - temp.A = MaterialList[currentMaterial].eta[i].real();  
273 - EtaN.push_back(temp);  
274 - }  
275 - cA = 1.0;  
276 -  
277 -}  
278 -  
279 -  
280 -  
281 -int main(int argc, char *argv[])  
282 -{  
283 -  
284 -  
285 - //load the default project file (any previous optical settings)  
286 - LoadState();  
287 -  
288 - //load the default materials  
289 - LoadMaterial("eta_TolueneK.txt", "eta_TolueneN.txt", "Toluene");  
290 - LoadMaterial("kPMMA.txt", "PMMA");  
291 - //LoadMaterial("../../../../data/materials/rtsSU8_k.txt", "../../../../data/materials/rtsSU8_n.txt", "SU8");  
292 - SetMaterial();  
293 -  
294 - //compute the analytical solution for the Mie scattered spectrum  
295 - SimulateSpectrum();  
296 -  
297 - QApplication a(argc, argv);  
298 - InteractiveMie w;  
299 -  
300 -  
301 - w.show();  
302 -  
303 -  
304 - w.move(0, 0);  
305 - QRect frame = w.frameGeometry();  
306 - QRect inside = w.geometry();  
307 -  
308 - //activate a console for output  
309 - RedirectIOToConsole(0, frame.height(), frame.width());  
310 -  
311 - gpSpectrumDisplay = new qtSpectrumDisplay();  
312 - gpSpectrumDisplay->move(frame.width(), 0);  
313 - gpSpectrumDisplay->resize(2*inside.height(), inside.height());  
314 -  
315 - gpSpectrumDisplay->show();  
316 -  
317 - //refresh the UI  
318 - w.refreshUI();  
319 -  
320 - return a.exec();  
321 -} 1 +#include <fstream>
  2 +using namespace std;
  3 +#include "interactivemie.h"
  4 +#include <QtGui/QApplication>
  5 +#include "qtSpectrumDisplay.h"
  6 +#include "globals.h"
  7 +#include "rtsGUIConsole.h"
  8 +#include "PerformanceData.h"
  9 +#include <complex>
  10 +//#include <direct.h>
  11 +
  12 +PerformanceData PD;
  13 +
  14 +qtSpectrumDisplay* gpSpectrumDisplay;
  15 +
  16 +vector<vector<SpecPair> > RefSpectrum;
  17 +vector<SpecPair> SimSpectrum;
  18 +vector<SpecPair> EtaK;
  19 +vector<SpecPair> EtaN;
  20 +int currentSpec = 0;
  21 +
  22 +double nuMin = 800;
  23 +double nuMax = 4000;
  24 +double dNu = 2;
  25 +
  26 +double aMin = 0;
  27 +double aMax = 1;
  28 +
  29 +double scaleI0 = 1.0;
  30 +double refSlope = 0.0;
  31 +
  32 +bool dispRefSpec = true;
  33 +bool dispSimSpec = true;
  34 +bool dispSimK = true;
  35 +bool dispMatK = true;
  36 +bool dispSimN = true;
  37 +bool dispMatN = true;
  38 +double dispScaleK = 1.0;
  39 +double dispScaleN = 1.0;
  40 +SpecType dispSimType = AbsorbanceSpecType;
  41 +bool dispNormalize = false;
  42 +double dispNormFactor = 1.0;
  43 +
  44 +
  45 +//material parameters
  46 +double radius = 4.0f;
  47 +double baseIR = 1.49f;
  48 +double cA = 1.0;
  49 +//vector<SpecPair> KMaterial;
  50 +//vector<SpecPair> NMaterial;
  51 +bool applyMaterial = true;
  52 +vector<Material> MaterialList;
  53 +int currentMaterial = 0;
  54 +
  55 +//optical parameters
  56 +double cNAi = 0.0;
  57 +double cNAo = 0.6;
  58 +double oNAi = 0.0;
  59 +double oNAo = 0.6;
  60 +OpticsType opticsMode = TransmissionOpticsType;
  61 +bool pointDetector = false;
  62 +int objectiveSamples = 200;
  63 +
  64 +//fitting parameters
  65 +double minMSE = 0.00001;
  66 +int maxFitIter = 20;
  67 +
  68 +void TempSimSpectrum()
  69 +{
  70 + SpecPair temp;
  71 + for(int i=800; i<4000; i++)
  72 + {
  73 + temp.nu = i;
  74 + temp.A = sin((double)i/200);
  75 + SimSpectrum.push_back(temp);
  76 + }
  77 +}
  78 +
  79 +void UpdateDisplay(){
  80 + gpSpectrumDisplay->updateGL();
  81 +}
  82 +
  83 +void LoadMaterial(string fileNameK, string fileNameN, string materialName)
  84 +{
  85 + Material newMaterial;
  86 + newMaterial.name = materialName;
  87 +
  88 + vector<SpecPair> KMaterial = LoadSpectrum(fileNameK.c_str());
  89 + vector<SpecPair> NMaterial = LoadSpectrum(fileNameN.c_str());
  90 +
  91 + //make sure that the sizes are the same
  92 + if(KMaterial.size() != NMaterial.size()){
  93 + cout<<"Error, material properties don't match."<<endl;
  94 + exit(1);
  95 + }
  96 +
  97 + complex<double> eta;
  98 + //int j;
  99 + for(unsigned int i=0; i<KMaterial.size(); i++){
  100 + newMaterial.nu.push_back(KMaterial[i].nu);
  101 + eta = complex<double>(NMaterial[i].A, KMaterial[i].A);
  102 + newMaterial.eta.push_back(eta);
  103 + }
  104 + MaterialList.push_back(newMaterial);
  105 +
  106 +}
  107 +
  108 +void LoadMaterial(string fileNameK, string materialName){
  109 +
  110 + //load the material absorbance
  111 + vector<SpecPair> KMaterial = LoadSpectrum(fileNameK.c_str());
  112 + vector<SpecPair> NMaterial;
  113 + //KMaterial = LoadSpectrum("eta_TolueneK.txt");
  114 +
  115 + //compute the real IR using Kramers Kronig
  116 + //copy the absorbance values into a linear array
  117 + double* k = (double*)malloc(sizeof(double) * KMaterial.size());
  118 + double* n = (double*)malloc(sizeof(double) * KMaterial.size());
  119 + for(unsigned int i=0; i<KMaterial.size(); i++)
  120 + k[i] = KMaterial[i].A;
  121 +
  122 + //use Kramers Kronig to determine the real part of the index of refraction
  123 + cudaKramersKronig(n, k, KMaterial.size(), KMaterial[0].nu, KMaterial.back().nu, baseIR);
  124 + SpecPair temp;
  125 + for(unsigned int i=0; i<KMaterial.size(); i++)
  126 + {
  127 + temp.nu = KMaterial[i].nu;
  128 + temp.A = n[i];
  129 + NMaterial.push_back(temp);
  130 + }
  131 +
  132 + //create the material
  133 + Material newMaterial;
  134 + newMaterial.name = materialName;
  135 + complex<double> eta;
  136 + for(unsigned int i=0; i<KMaterial.size(); i++){
  137 + newMaterial.nu.push_back(KMaterial[i].nu);
  138 + eta = complex<double>(NMaterial[i].A, KMaterial[i].A);
  139 + newMaterial.eta.push_back(eta);
  140 + }
  141 +
  142 + MaterialList.push_back(newMaterial);
  143 +}
  144 +
  145 +void FitDisplay(){
  146 + double minA = 99999.0;
  147 + double maxA = -99999.0;
  148 + double k, n;
  149 +
  150 + if(dispSimSpec)
  151 + for(unsigned int i=0; i<SimSpectrum.size(); i++)
  152 + {
  153 + if(SimSpectrum[i].A < minA)
  154 + minA = SimSpectrum[i].A;
  155 + if(SimSpectrum[i].A > maxA)
  156 + maxA = SimSpectrum[i].A;
  157 + }
  158 +
  159 + if(dispRefSpec && RefSpectrum.size() > 0)
  160 + for(unsigned int i=0; i<RefSpectrum[currentSpec].size(); i++)
  161 + {
  162 + if(RefSpectrum[currentSpec][i].A < minA)
  163 + minA = RefSpectrum[currentSpec][i].A;
  164 + if(RefSpectrum[currentSpec][i].A > maxA)
  165 + maxA = RefSpectrum[currentSpec][i].A;
  166 + }
  167 + if(dispMatK)
  168 + for(unsigned int i=0; i<EtaK.size(); i++)
  169 + {
  170 + k = MaterialList[currentMaterial].eta[i].imag() * dispScaleK;
  171 + if(k < minA)
  172 + minA = k;
  173 + if(k > maxA)
  174 + maxA = k;
  175 + }
  176 + if(dispSimK)
  177 + for(unsigned int i=0; i<EtaK.size(); i++)
  178 + {
  179 + k = EtaK[i].A * dispScaleK;
  180 + if(k < minA)
  181 + minA = k;
  182 + if(EtaK[i].A > maxA)
  183 + maxA = k;
  184 + }
  185 + if(dispMatN)
  186 + for(unsigned int i=0; i<EtaN.size(); i++)
  187 + {
  188 + n = (MaterialList[currentMaterial].eta[i].real() - baseIR) * dispScaleN;
  189 + if(n < minA)
  190 + minA = n;
  191 + if(n > maxA)
  192 + maxA = n;
  193 + }
  194 + if(dispSimN)
  195 + for(unsigned int i=0; i<EtaN.size(); i++)
  196 + {
  197 + n = (EtaN[i].A - baseIR) * dispScaleN;
  198 + if(n < minA)
  199 + minA = n;
  200 + if(n > maxA)
  201 + maxA = n;
  202 + }
  203 +
  204 + aMin = minA;
  205 + aMax = maxA;
  206 + UpdateDisplay();
  207 +}
  208 +
  209 +void ChangeAbsorbance(){
  210 +
  211 + //compute the real part of the index of refraction
  212 +
  213 + //copy the absorbance values into a linear array
  214 + int nSamples = MaterialList[currentMaterial].eta.size();
  215 + double startNu = MaterialList[currentMaterial].nu.front();
  216 + double endNu = MaterialList[currentMaterial].nu.back();
  217 + double* k = (double*)malloc(sizeof(double) * nSamples);
  218 + double* n = (double*)malloc(sizeof(double) * nSamples);
  219 + for(int i=0; i<nSamples; i++)
  220 + k[i] = MaterialList[currentMaterial].eta[i].imag() * cA;
  221 +
  222 + //NMaterial.clear();
  223 + EtaK.clear();
  224 + EtaN.clear();
  225 + //use Kramers Kronig to determine the real part of the index of refraction
  226 + cudaKramersKronig(n, k, nSamples, startNu, endNu, baseIR);
  227 +
  228 + //copy the real part of the index of refraction into the vector
  229 + SpecPair temp;
  230 +
  231 + //load the imaginary IR from the absorbance data
  232 + double nu;
  233 + for(int i=0; i<nSamples; i++){
  234 + nu = MaterialList[currentMaterial].nu[i];
  235 + if(nu >= nuMin && nu <= nuMax){
  236 + temp.nu = nu;
  237 + temp.A = k[i];
  238 + EtaK.push_back(temp);
  239 + //temp.A = NMaterial[i].A;
  240 + temp.A = n[i];
  241 + EtaN.push_back(temp);
  242 + }
  243 + }
  244 +
  245 + free(k);
  246 + free(n);
  247 +}
  248 +
  249 +void SetMaterial()
  250 +{
  251 + EtaK.clear();
  252 + EtaN.clear();
  253 +
  254 + int nSamples = MaterialList[currentMaterial].eta.size();
  255 + double nu;
  256 + SpecPair temp;
  257 +
  258 + //initialize the current nuMin and nuMax values
  259 + nuMin = MaterialList[currentMaterial].nu[0];
  260 + nuMax = nuMin;
  261 + for(int i=0; i<nSamples; i++){
  262 + nu = MaterialList[currentMaterial].nu[i];
  263 + //if(nu >= nuMin && nu <= nuMax){
  264 +
  265 + //update the min and max values for display
  266 + if(nu < nuMin) nuMin = nu;
  267 + if(nu > nuMax) nuMax = nu;
  268 +
  269 + temp.nu = nu;
  270 + temp.A = MaterialList[currentMaterial].eta[i].imag();
  271 + EtaK.push_back(temp);
  272 + temp.A = MaterialList[currentMaterial].eta[i].real();
  273 + EtaN.push_back(temp);
  274 + }
  275 + cA = 1.0;
  276 +
  277 +}
  278 +
  279 +
  280 +
  281 +int main(int argc, char *argv[])
  282 +{
  283 +
  284 +
  285 + //load the default project file (any previous optical settings)
  286 + LoadState();
  287 +
  288 + //load the default materials
  289 + LoadMaterial("eta_TolueneK.txt", "eta_TolueneN.txt", "Toluene");
  290 + LoadMaterial("kPMMA.txt", "PMMA");
  291 + //LoadMaterial("../../../../data/materials/rtsSU8_k.txt", "../../../../data/materials/rtsSU8_n.txt", "SU8");
  292 + SetMaterial();
  293 +
  294 + //compute the analytical solution for the Mie scattered spectrum
  295 + SimulateSpectrum();
  296 +
  297 + QApplication a(argc, argv);
  298 + InteractiveMie w;
  299 +
  300 +
  301 + w.show();
  302 +
  303 +
  304 + w.move(0, 0);
  305 + QRect frame = w.frameGeometry();
  306 + QRect inside = w.geometry();
  307 +
  308 + //activate a console for output
  309 + RedirectIOToConsole(0, frame.height(), frame.width());
  310 +
  311 + gpSpectrumDisplay = new qtSpectrumDisplay();
  312 + gpSpectrumDisplay->move(frame.width(), 0);
  313 + gpSpectrumDisplay->resize(2*inside.height(), inside.height());
  314 +
  315 + gpSpectrumDisplay->show();
  316 +
  317 + //refresh the UI
  318 + w.refreshUI();
  319 +
  320 + return a.exec();
  321 +}
qtSpectrumDisplay.cpp
1 - #include <QtGui>  
2 - #include <QtOpenGL/QtOpenGL>  
3 -#include <GL/glu.h>  
4 -  
5 - #include <math.h>  
6 -  
7 - #include "qtSpectrumDisplay.h"  
8 -  
9 - qtSpectrumDisplay::qtSpectrumDisplay(QWidget *parent)  
10 - : QGLWidget(parent)  
11 - {  
12 - object = 0;  
13 - xRot = 0;  
14 - yRot = 0;  
15 - zRot = 0;  
16 -  
17 - qtGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0);  
18 - qtPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0);  
19 - }  
20 -  
21 - qtSpectrumDisplay::~qtSpectrumDisplay()  
22 - {  
23 - makeCurrent();  
24 - glDeleteLists(object, 1);  
25 - }  
26 -  
27 - QSize qtSpectrumDisplay::minimumSizeHint() const  
28 - {  
29 - return QSize(50, 50);  
30 - }  
31 -  
32 - QSize qtSpectrumDisplay::sizeHint() const  
33 - {  
34 - return QSize(400, 400);  
35 - }  
36 -  
37 - /*void qtSpectrumDisplay::setXRotation(int angle)  
38 - {  
39 - normalizeAngle(&angle);  
40 - if (angle != xRot) {  
41 - xRot = angle;  
42 - emit xRotationChanged(angle);  
43 - updateGL();  
44 - }  
45 - }  
46 -  
47 - void qtSpectrumDisplay::setYRotation(int angle)  
48 - {  
49 - normalizeAngle(&angle);  
50 - if (angle != yRot) {  
51 - yRot = angle;  
52 - emit yRotationChanged(angle);  
53 - updateGL();  
54 - }  
55 - }  
56 -  
57 - void qtSpectrumDisplay::setZRotation(int angle)  
58 - {  
59 - normalizeAngle(&angle);  
60 - if (angle != zRot) {  
61 - zRot = angle;  
62 - emit zRotationChanged(angle);  
63 - updateGL();  
64 - }  
65 - }*/  
66 -  
67 - void qtSpectrumDisplay::initializeGL()  
68 - {  
69 - qglClearColor(qtPurple.dark());  
70 - //object = makeObject();  
71 - glShadeModel(GL_FLAT);  
72 - glEnable(GL_DEPTH_TEST);  
73 - glEnable(GL_CULL_FACE);  
74 - }  
75 -  
76 - void qtSpectrumDisplay::printWavenumber(int xPos)  
77 - {  
78 - int viewParams[4];  
79 - glGetIntegerv(GL_VIEWPORT, viewParams);  
80 -  
81 - float a = (float)xPos/(float)viewParams[2];  
82 -  
83 - int wn = a * (nuMax - nuMin) + nuMin;  
84 - cout<<wn<<endl;  
85 -  
86 - }  
87 -  
88 - void qtSpectrumDisplay::paintGL()  
89 - {  
90 - glMatrixMode(GL_PROJECTION);  
91 - glLoadIdentity();  
92 - //glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0);  
93 - gluOrtho2D(nuMin, nuMax, aMin, aMax);  
94 - glMatrixMode(GL_MODELVIEW);  
95 -  
96 - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  
97 - glLoadIdentity();  
98 - /*glTranslated(0.0, 0.0, -10.0);  
99 - glRotated(xRot / 16.0, 1.0, 0.0, 0.0);  
100 - glRotated(yRot / 16.0, 0.0, 1.0, 0.0);  
101 - glRotated(zRot / 16.0, 0.0, 0.0, 1.0);*/  
102 - glLineWidth(2);  
103 - if(dispSimSpec)  
104 - {  
105 - glColor3f(1.0, 1.0, 1.0);  
106 - glBegin(GL_LINE_STRIP);  
107 - for(unsigned int i=0; i<SimSpectrum.size(); i++)  
108 - glVertex2f(SimSpectrum[i].nu, SimSpectrum[i].A);  
109 - glEnd();  
110 - }  
111 - if(dispRefSpec && RefSpectrum.size() > 0)  
112 - {  
113 - glColor3f(0.5, 0.5, 0.5);  
114 - glBegin(GL_LINE_STRIP);  
115 - float nu;  
116 - for(unsigned int i=0; i<RefSpectrum[currentSpec].size(); i++)  
117 - {  
118 - nu = RefSpectrum[currentSpec][i].nu;  
119 - glVertex2f(nu, RefSpectrum[currentSpec][i].A + nu * refSlope);  
120 - }  
121 - glEnd();  
122 - }  
123 -  
124 - int nSamples = MaterialList[currentMaterial].eta.size();  
125 - float nu;  
126 - //display absorbance  
127 - if(dispMatK)  
128 - {  
129 -  
130 - glColor3f(1.0, 0.0, 0.0);  
131 - glBegin(GL_LINE_STRIP);  
132 - for(int i=0; i<nSamples; i++){  
133 - nu = MaterialList[currentMaterial].nu[i];  
134 - glVertex2f(nu, MaterialList[currentMaterial].eta[i].imag() * dispScaleK);  
135 - }  
136 - glEnd();  
137 - }  
138 - if(dispSimK)  
139 - {  
140 - glColor3f(1.0, 1.0, 0.0);  
141 - glBegin(GL_LINE_STRIP);  
142 - for(unsigned int i=0; i<EtaK.size(); i++){  
143 - glVertex2f(EtaK[i].nu, EtaK[i].A * dispScaleK);  
144 - }  
145 - glEnd();  
146 - }  
147 -  
148 - //display refractive index (real)  
149 - if(dispMatN)  
150 - {  
151 - glColor3f(0.0, 1.0, 0.0);  
152 - glBegin(GL_LINE_STRIP);  
153 - for(int i=0; i<nSamples; i++){  
154 - nu = MaterialList[currentMaterial].nu[i];  
155 - glVertex2f(nu, (MaterialList[currentMaterial].eta[i].real() - baseIR) * dispScaleN);  
156 - }  
157 - glEnd();  
158 - }  
159 - if(dispSimN)  
160 - {  
161 - glColor3f(0.0, 1.0, 1.0);  
162 - glBegin(GL_LINE_STRIP);  
163 - for(unsigned int i=0; i<EtaN.size(); i++)  
164 - glVertex2f(EtaN[i].nu, (EtaN[i].A - baseIR) * dispScaleN);  
165 - glEnd();  
166 - }  
167 -  
168 -  
169 - glCallList(object);  
170 - }  
171 -  
172 - void qtSpectrumDisplay::resizeGL(int width, int height)  
173 - {  
174 - int side = qMin(width, height);  
175 - //glViewport((width - side) / 2, (height - side) / 2, side, side);  
176 - glViewport(0, 0, width, height);  
177 -  
178 - /*glMatrixMode(GL_PROJECTION);  
179 - glLoadIdentity();  
180 - //glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0);  
181 - gluOrtho2D(nuMin, nuMax, aMin, aMax);  
182 - glMatrixMode(GL_MODELVIEW);*/  
183 - }  
184 -  
185 - void qtSpectrumDisplay::mousePressEvent(QMouseEvent *event)  
186 - {  
187 - lastPos = event->pos();  
188 -  
189 - if(event->buttons() & Qt::LeftButton)  
190 - {  
191 - int wn = 0;  
192 - printWavenumber(event->x());  
193 - }  
194 - }  
195 -  
196 - void qtSpectrumDisplay::mouseMoveEvent(QMouseEvent *event)  
197 - {  
198 - int dx = event->x() - lastPos.x();  
199 - int dy = event->y() - lastPos.y();  
200 - /*  
201 - if (event->buttons() & Qt::LeftButton) {  
202 - setXRotation(xRot + 8 * dy);  
203 - setYRotation(yRot + 8 * dx);  
204 - } else if (event->buttons() & Qt::RightButton) {  
205 - setXRotation(xRot + 8 * dy);  
206 - setZRotation(zRot + 8 * dx);  
207 - }*/  
208 - lastPos = event->pos();  
209 - }  
210 -  
211 - /*GLuint qtSpectrumDisplay::makeObject()  
212 - {  
213 - GLuint list = glGenLists(1);  
214 - glNewList(list, GL_COMPILE);  
215 -  
216 - glBegin(GL_QUADS);  
217 -  
218 - GLdouble x1 = +0.06;  
219 - GLdouble y1 = -0.14;  
220 - GLdouble x2 = +0.14;  
221 - GLdouble y2 = -0.06;  
222 - GLdouble x3 = +0.08;  
223 - GLdouble y3 = +0.00;  
224 - GLdouble x4 = +0.30;  
225 - GLdouble y4 = +0.22;  
226 -  
227 - quad(x1, y1, x2, y2, y2, x2, y1, x1);  
228 - quad(x3, y3, x4, y4, y4, x4, y3, x3);  
229 -  
230 - extrude(x1, y1, x2, y2);  
231 - extrude(x2, y2, y2, x2);  
232 - extrude(y2, x2, y1, x1);  
233 - extrude(y1, x1, x1, y1);  
234 - extrude(x3, y3, x4, y4);  
235 - extrude(x4, y4, y4, x4);  
236 - extrude(y4, x4, y3, x3);  
237 -  
238 - const double Pi = 3.14159265358979323846;  
239 - const int NumSectors = 200;  
240 -  
241 - for (int i = 0; i < NumSectors; ++i) {  
242 - double angle1 = (i * 2 * Pi) / NumSectors;  
243 - GLdouble x5 = 0.30 * sin(angle1);  
244 - GLdouble y5 = 0.30 * cos(angle1);  
245 - GLdouble x6 = 0.20 * sin(angle1);  
246 - GLdouble y6 = 0.20 * cos(angle1);  
247 -  
248 - double angle2 = ((i + 1) * 2 * Pi) / NumSectors;  
249 - GLdouble x7 = 0.20 * sin(angle2);  
250 - GLdouble y7 = 0.20 * cos(angle2);  
251 - GLdouble x8 = 0.30 * sin(angle2);  
252 - GLdouble y8 = 0.30 * cos(angle2);  
253 -  
254 - quad(x5, y5, x6, y6, x7, y7, x8, y8);  
255 -  
256 - extrude(x6, y6, x7, y7);  
257 - extrude(x8, y8, x5, y5);  
258 - }  
259 -  
260 - glEnd();  
261 -  
262 - glEndList();  
263 - return list;  
264 - }*/  
265 -  
266 - void qtSpectrumDisplay::quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,  
267 - GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4)  
268 - {  
269 - qglColor(qtGreen);  
270 -  
271 - glVertex3d(x1, y1, -0.05);  
272 - glVertex3d(x2, y2, -0.05);  
273 - glVertex3d(x3, y3, -0.05);  
274 - glVertex3d(x4, y4, -0.05);  
275 -  
276 - glVertex3d(x4, y4, +0.05);  
277 - glVertex3d(x3, y3, +0.05);  
278 - glVertex3d(x2, y2, +0.05);  
279 - glVertex3d(x1, y1, +0.05);  
280 - }  
281 -  
282 - /*void qtSpectrumDisplay::extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)  
283 - {  
284 - qglColor(qtGreen.dark(250 + int(100 * x1)));  
285 -  
286 - glVertex3d(x1, y1, +0.05);  
287 - glVertex3d(x2, y2, +0.05);  
288 - glVertex3d(x2, y2, -0.05);  
289 - glVertex3d(x1, y1, -0.05);  
290 - }*/  
291 -  
292 - void qtSpectrumDisplay::normalizeAngle(int *angle)  
293 - {  
294 - while (*angle < 0)  
295 - *angle += 360 * 16;  
296 - while (*angle > 360 * 16)  
297 - *angle -= 360 * 16; 1 + #include <QtGui>
  2 + #include <QtOpenGL/QtOpenGL>
  3 +#include <GL/glu.h>
  4 +
  5 + #include <math.h>
  6 +
  7 + #include "qtSpectrumDisplay.h"
  8 +
  9 + qtSpectrumDisplay::qtSpectrumDisplay(QWidget *parent)
  10 + : QGLWidget(parent)
  11 + {
  12 + object = 0;
  13 + xRot = 0;
  14 + yRot = 0;
  15 + zRot = 0;
  16 +
  17 + qtGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0);
  18 + qtPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0);
  19 + }
  20 +
  21 + qtSpectrumDisplay::~qtSpectrumDisplay()
  22 + {
  23 + makeCurrent();
  24 + glDeleteLists(object, 1);
  25 + }
  26 +
  27 + QSize qtSpectrumDisplay::minimumSizeHint() const
  28 + {
  29 + return QSize(50, 50);
  30 + }
  31 +
  32 + QSize qtSpectrumDisplay::sizeHint() const
  33 + {
  34 + return QSize(400, 400);
  35 + }
  36 +
  37 + /*void qtSpectrumDisplay::setXRotation(int angle)
  38 + {
  39 + normalizeAngle(&angle);
  40 + if (angle != xRot) {
  41 + xRot = angle;
  42 + emit xRotationChanged(angle);
  43 + updateGL();
  44 + }
  45 + }
  46 +
  47 + void qtSpectrumDisplay::setYRotation(int angle)
  48 + {
  49 + normalizeAngle(&angle);
  50 + if (angle != yRot) {
  51 + yRot = angle;
  52 + emit yRotationChanged(angle);
  53 + updateGL();
  54 + }
  55 + }
  56 +
  57 + void qtSpectrumDisplay::setZRotation(int angle)
  58 + {
  59 + normalizeAngle(&angle);
  60 + if (angle != zRot) {
  61 + zRot = angle;
  62 + emit zRotationChanged(angle);
  63 + updateGL();
  64 + }
  65 + }*/
  66 +
  67 + void qtSpectrumDisplay::initializeGL()
  68 + {
  69 + qglClearColor(qtPurple.dark());
  70 + //object = makeObject();
  71 + glShadeModel(GL_FLAT);
  72 + glEnable(GL_DEPTH_TEST);
  73 + glEnable(GL_CULL_FACE);
  74 + }
  75 +
  76 + void qtSpectrumDisplay::printWavenumber(int xPos)
  77 + {
  78 + int viewParams[4];
  79 + glGetIntegerv(GL_VIEWPORT, viewParams);
  80 +
  81 + float a = (float)xPos/(float)viewParams[2];
  82 +
  83 + int wn = a * (nuMax - nuMin) + nuMin;
  84 + cout<<wn<<endl;
  85 +
  86 + }
  87 +
  88 + void qtSpectrumDisplay::paintGL()
  89 + {
  90 + glMatrixMode(GL_PROJECTION);
  91 + glLoadIdentity();
  92 + //glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0);
  93 + gluOrtho2D(nuMin, nuMax, aMin, aMax);
  94 + glMatrixMode(GL_MODELVIEW);
  95 +
  96 + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  97 + glLoadIdentity();
  98 + /*glTranslated(0.0, 0.0, -10.0);
  99 + glRotated(xRot / 16.0, 1.0, 0.0, 0.0);
  100 + glRotated(yRot / 16.0, 0.0, 1.0, 0.0);
  101 + glRotated(zRot / 16.0, 0.0, 0.0, 1.0);*/
  102 + glLineWidth(2);
  103 + if(dispSimSpec)
  104 + {
  105 + glColor3f(1.0, 1.0, 1.0);
  106 + glBegin(GL_LINE_STRIP);
  107 + for(unsigned int i=0; i<SimSpectrum.size(); i++)
  108 + glVertex2f(SimSpectrum[i].nu, SimSpectrum[i].A);
  109 + glEnd();
  110 + }
  111 + if(dispRefSpec && RefSpectrum.size() > 0)
  112 + {
  113 + glColor3f(0.5, 0.5, 0.5);
  114 + glBegin(GL_LINE_STRIP);
  115 + float nu;
  116 + for(unsigned int i=0; i<RefSpectrum[currentSpec].size(); i++)
  117 + {
  118 + nu = RefSpectrum[currentSpec][i].nu;
  119 + glVertex2f(nu, RefSpectrum[currentSpec][i].A + nu * refSlope);
  120 + }
  121 + glEnd();
  122 + }
  123 +
  124 + int nSamples = MaterialList[currentMaterial].eta.size();
  125 + float nu;
  126 + //display absorbance
  127 + if(dispMatK)
  128 + {
  129 +
  130 + glColor3f(1.0, 0.0, 0.0);
  131 + glBegin(GL_LINE_STRIP);
  132 + for(int i=0; i<nSamples; i++){
  133 + nu = MaterialList[currentMaterial].nu[i];
  134 + glVertex2f(nu, MaterialList[currentMaterial].eta[i].imag() * dispScaleK);
  135 + }
  136 + glEnd();
  137 + }
  138 + if(dispSimK)
  139 + {
  140 + glColor3f(1.0, 1.0, 0.0);
  141 + glBegin(GL_LINE_STRIP);
  142 + for(unsigned int i=0; i<EtaK.size(); i++){
  143 + glVertex2f(EtaK[i].nu, EtaK[i].A * dispScaleK);
  144 + }
  145 + glEnd();
  146 + }
  147 +
  148 + //display refractive index (real)
  149 + if(dispMatN)
  150 + {
  151 + glColor3f(0.0, 1.0, 0.0);
  152 + glBegin(GL_LINE_STRIP);
  153 + for(int i=0; i<nSamples; i++){
  154 + nu = MaterialList[currentMaterial].nu[i];
  155 + glVertex2f(nu, (MaterialList[currentMaterial].eta[i].real() - baseIR) * dispScaleN);
  156 + }
  157 + glEnd();
  158 + }
  159 + if(dispSimN)
  160 + {
  161 + glColor3f(0.0, 1.0, 1.0);
  162 + glBegin(GL_LINE_STRIP);
  163 + for(unsigned int i=0; i<EtaN.size(); i++)
  164 + glVertex2f(EtaN[i].nu, (EtaN[i].A - baseIR) * dispScaleN);
  165 + glEnd();
  166 + }
  167 +
  168 +
  169 + glCallList(object);
  170 + }
  171 +
  172 + void qtSpectrumDisplay::resizeGL(int width, int height)
  173 + {
  174 + int side = qMin(width, height);
  175 + //glViewport((width - side) / 2, (height - side) / 2, side, side);
  176 + glViewport(0, 0, width, height);
  177 +
  178 + /*glMatrixMode(GL_PROJECTION);
  179 + glLoadIdentity();
  180 + //glOrtho(-0.5, +0.5, +0.5, -0.5, 4.0, 15.0);
  181 + gluOrtho2D(nuMin, nuMax, aMin, aMax);
  182 + glMatrixMode(GL_MODELVIEW);*/
  183 + }
  184 +
  185 + void qtSpectrumDisplay::mousePressEvent(QMouseEvent *event)
  186 + {
  187 + lastPos = event->pos();
  188 +
  189 + if(event->buttons() & Qt::LeftButton)
  190 + {
  191 + int wn = 0;
  192 + printWavenumber(event->x());
  193 + }
  194 + }
  195 +
  196 + void qtSpectrumDisplay::mouseMoveEvent(QMouseEvent *event)
  197 + {
  198 + int dx = event->x() - lastPos.x();
  199 + int dy = event->y() - lastPos.y();
  200 + /*
  201 + if (event->buttons() & Qt::LeftButton) {
  202 + setXRotation(xRot + 8 * dy);
  203 + setYRotation(yRot + 8 * dx);
  204 + } else if (event->buttons() & Qt::RightButton) {
  205 + setXRotation(xRot + 8 * dy);
  206 + setZRotation(zRot + 8 * dx);
  207 + }*/
  208 + lastPos = event->pos();
  209 + }
  210 +
  211 + /*GLuint qtSpectrumDisplay::makeObject()
  212 + {
  213 + GLuint list = glGenLists(1);
  214 + glNewList(list, GL_COMPILE);
  215 +
  216 + glBegin(GL_QUADS);
  217 +
  218 + GLdouble x1 = +0.06;
  219 + GLdouble y1 = -0.14;
  220 + GLdouble x2 = +0.14;
  221 + GLdouble y2 = -0.06;
  222 + GLdouble x3 = +0.08;
  223 + GLdouble y3 = +0.00;
  224 + GLdouble x4 = +0.30;
  225 + GLdouble y4 = +0.22;
  226 +
  227 + quad(x1, y1, x2, y2, y2, x2, y1, x1);
  228 + quad(x3, y3, x4, y4, y4, x4, y3, x3);
  229 +
  230 + extrude(x1, y1, x2, y2);
  231 + extrude(x2, y2, y2, x2);
  232 + extrude(y2, x2, y1, x1);
  233 + extrude(y1, x1, x1, y1);
  234 + extrude(x3, y3, x4, y4);
  235 + extrude(x4, y4, y4, x4);
  236 + extrude(y4, x4, y3, x3);
  237 +
  238 + const double Pi = 3.14159265358979323846;
  239 + const int NumSectors = 200;
  240 +
  241 + for (int i = 0; i < NumSectors; ++i) {
  242 + double angle1 = (i * 2 * Pi) / NumSectors;
  243 + GLdouble x5 = 0.30 * sin(angle1);
  244 + GLdouble y5 = 0.30 * cos(angle1);
  245 + GLdouble x6 = 0.20 * sin(angle1);
  246 + GLdouble y6 = 0.20 * cos(angle1);
  247 +
  248 + double angle2 = ((i + 1) * 2 * Pi) / NumSectors;
  249 + GLdouble x7 = 0.20 * sin(angle2);
  250 + GLdouble y7 = 0.20 * cos(angle2);
  251 + GLdouble x8 = 0.30 * sin(angle2);
  252 + GLdouble y8 = 0.30 * cos(angle2);
  253 +
  254 + quad(x5, y5, x6, y6, x7, y7, x8, y8);
  255 +
  256 + extrude(x6, y6, x7, y7);
  257 + extrude(x8, y8, x5, y5);
  258 + }
  259 +
  260 + glEnd();
  261 +
  262 + glEndList();
  263 + return list;
  264 + }*/
  265 +
  266 + void qtSpectrumDisplay::quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,
  267 + GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4)
  268 + {
  269 + qglColor(qtGreen);
  270 +
  271 + glVertex3d(x1, y1, -0.05);
  272 + glVertex3d(x2, y2, -0.05);
  273 + glVertex3d(x3, y3, -0.05);
  274 + glVertex3d(x4, y4, -0.05);
  275 +
  276 + glVertex3d(x4, y4, +0.05);
  277 + glVertex3d(x3, y3, +0.05);
  278 + glVertex3d(x2, y2, +0.05);
  279 + glVertex3d(x1, y1, +0.05);
  280 + }
  281 +
  282 + /*void qtSpectrumDisplay::extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
  283 + {
  284 + qglColor(qtGreen.dark(250 + int(100 * x1)));
  285 +
  286 + glVertex3d(x1, y1, +0.05);
  287 + glVertex3d(x2, y2, +0.05);
  288 + glVertex3d(x2, y2, -0.05);
  289 + glVertex3d(x1, y1, -0.05);
  290 + }*/
  291 +
  292 + void qtSpectrumDisplay::normalizeAngle(int *angle)
  293 + {
  294 + while (*angle < 0)
  295 + *angle += 360 * 16;
  296 + while (*angle > 360 * 16)
  297 + *angle -= 360 * 16;
298 } 298 }
299 \ No newline at end of file 299 \ No newline at end of file
qtSpectrumDisplay.h
1 - #ifndef GLWIDGET_H  
2 - #define GLWIDGET_H  
3 -  
4 -#include <QtOpenGL/QGLWidget>  
5 -#include "globals.h"  
6 -  
7 - class qtSpectrumDisplay : public QGLWidget  
8 - {  
9 - Q_OBJECT  
10 -  
11 - public:  
12 - qtSpectrumDisplay(QWidget *parent = 0);  
13 - ~qtSpectrumDisplay();  
14 -  
15 - QSize minimumSizeHint() const;  
16 - QSize sizeHint() const;  
17 -  
18 - public slots:  
19 - /*void setXRotation(int angle);  
20 - void setYRotation(int angle);  
21 - void setZRotation(int angle);*/  
22 -  
23 - signals:  
24 - void xRotationChanged(int angle);  
25 - void yRotationChanged(int angle);  
26 - void zRotationChanged(int angle);  
27 -  
28 - protected:  
29 - void initializeGL();  
30 - void paintGL();  
31 - void resizeGL(int width, int height);  
32 - void mousePressEvent(QMouseEvent *event);  
33 - void mouseMoveEvent(QMouseEvent *event);  
34 -  
35 - private:  
36 - //GLuint makeObject();  
37 - void quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,  
38 - GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4);  
39 - //void extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);  
40 - void normalizeAngle(int *angle);  
41 - void printWavenumber(int wn);  
42 -  
43 - GLuint object;  
44 - int xRot;  
45 - int yRot;  
46 - int zRot;  
47 - QPoint lastPos;  
48 - QColor qtGreen;  
49 - QColor qtPurple;  
50 - };  
51 - 1 + #ifndef GLWIDGET_H
  2 + #define GLWIDGET_H
  3 +
  4 +#include <QtOpenGL/QGLWidget>
  5 +#include "globals.h"
  6 +
  7 + class qtSpectrumDisplay : public QGLWidget
  8 + {
  9 + Q_OBJECT
  10 +
  11 + public:
  12 + qtSpectrumDisplay(QWidget *parent = 0);
  13 + ~qtSpectrumDisplay();
  14 +
  15 + QSize minimumSizeHint() const;
  16 + QSize sizeHint() const;
  17 +
  18 + public slots:
  19 + /*void setXRotation(int angle);
  20 + void setYRotation(int angle);
  21 + void setZRotation(int angle);*/
  22 +
  23 + signals:
  24 + void xRotationChanged(int angle);
  25 + void yRotationChanged(int angle);
  26 + void zRotationChanged(int angle);
  27 +
  28 + protected:
  29 + void initializeGL();
  30 + void paintGL();
  31 + void resizeGL(int width, int height);
  32 + void mousePressEvent(QMouseEvent *event);
  33 + void mouseMoveEvent(QMouseEvent *event);
  34 +
  35 + private:
  36 + //GLuint makeObject();
  37 + void quad(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,
  38 + GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4);
  39 + //void extrude(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2);
  40 + void normalizeAngle(int *angle);
  41 + void printWavenumber(int wn);
  42 +
  43 + GLuint object;
  44 + int xRot;
  45 + int yRot;
  46 + int zRot;
  47 + QPoint lastPos;
  48 + QColor qtGreen;
  49 + QColor qtPurple;
  50 + };
  51 +
52 #endif 52 #endif
53 \ No newline at end of file 53 \ No newline at end of file
1 -#ifdef WIN32  
2 -#include <windows.h>  
3 -#include <stdio.h>  
4 -#include <fcntl.h>  
5 -#include <io.h>  
6 -#include <iostream>  
7 -#include <fstream>  
8 -  
9 -#ifndef _USE_OLD_IOSTREAMS  
10 -  
11 -using namespace std;  
12 -#endif  
13 -  
14 -// maximum mumber of lines the output console should have  
15 -  
16 -static const WORD MAX_CONSOLE_LINES = 500;  
17 -//#ifdef _DEBUG  
18 -  
19 -void RedirectIOToConsole(int Xpos, int Ypos, int Width, int Height)  
20 -{  
21 - int hConHandle;  
22 - long lStdHandle;  
23 - CONSOLE_SCREEN_BUFFER_INFO coninfo;  
24 - FILE *fp;  
25 - // allocate a console for this app  
26 - AllocConsole();  
27 - // set the screen buffer to be big enough to let us scroll text  
28 - GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);  
29 - coninfo.dwSize.Y = MAX_CONSOLE_LINES;  
30 - SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),  
31 - coninfo.dwSize);  
32 - // redirect unbuffered STDOUT to the console  
33 - lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);  
34 - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);  
35 - fp = _fdopen( hConHandle, "w" );  
36 - *stdout = *fp;  
37 - setvbuf( stdout, NULL, _IONBF, 0 );  
38 - // redirect unbuffered STDIN to the console  
39 - lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);  
40 - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);  
41 - fp = _fdopen( hConHandle, "r" );  
42 - *stdin = *fp;  
43 - setvbuf( stdin, NULL, _IONBF, 0 );  
44 -  
45 - // redirect unbuffered STDERR to the console  
46 - lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);  
47 - hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);  
48 - fp = _fdopen( hConHandle, "w" );  
49 - *stderr = *fp;  
50 - setvbuf( stderr, NULL, _IONBF, 0 );  
51 -  
52 - // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog  
53 - // point to console as well  
54 - ios::sync_with_stdio();  
55 - //position  
56 - MoveWindow(GetConsoleWindow(), Xpos, Ypos, Width, Height, true);  
57 -}  
58 -  
59 -#else  
60 -void RedirectIOToConsole(int Xpos, int Ypos, int Width, int Height)  
61 -{  
62 -}  
63 -#endif  
64 - 1 +#ifdef WIN32
  2 +#include <windows.h>
  3 +#include <stdio.h>
  4 +#include <fcntl.h>
  5 +#include <io.h>
  6 +#include <iostream>
  7 +#include <fstream>
  8 +
  9 +#ifndef _USE_OLD_IOSTREAMS
  10 +
  11 +using namespace std;
  12 +#endif
  13 +
  14 +// maximum mumber of lines the output console should have
  15 +
  16 +static const WORD MAX_CONSOLE_LINES = 500;
  17 +//#ifdef _DEBUG
  18 +
  19 +void RedirectIOToConsole(int Xpos, int Ypos, int Width, int Height)
  20 +{
  21 + int hConHandle;
  22 + long lStdHandle;
  23 + CONSOLE_SCREEN_BUFFER_INFO coninfo;
  24 + FILE *fp;
  25 + // allocate a console for this app
  26 + AllocConsole();
  27 + // set the screen buffer to be big enough to let us scroll text
  28 + GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
  29 + coninfo.dwSize.Y = MAX_CONSOLE_LINES;
  30 + SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE),
  31 + coninfo.dwSize);
  32 + // redirect unbuffered STDOUT to the console
  33 + lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
  34 + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
  35 + fp = _fdopen( hConHandle, "w" );
  36 + *stdout = *fp;
  37 + setvbuf( stdout, NULL, _IONBF, 0 );
  38 + // redirect unbuffered STDIN to the console
  39 + lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
  40 + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
  41 + fp = _fdopen( hConHandle, "r" );
  42 + *stdin = *fp;
  43 + setvbuf( stdin, NULL, _IONBF, 0 );
  44 +
  45 + // redirect unbuffered STDERR to the console
  46 + lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
  47 + hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
  48 + fp = _fdopen( hConHandle, "w" );
  49 + *stderr = *fp;
  50 + setvbuf( stderr, NULL, _IONBF, 0 );
  51 +
  52 + // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
  53 + // point to console as well
  54 + ios::sync_with_stdio();
  55 + //position
  56 + MoveWindow(GetConsoleWindow(), Xpos, Ypos, Width, Height, true);
  57 +}
  58 +
  59 +#else
  60 +void RedirectIOToConsole(int Xpos, int Ypos, int Width, int Height)
  61 +{
  62 +}
  63 +#endif
  64 +
65 //End of File 65 //End of File
66 \ No newline at end of file 66 \ No newline at end of file
1 -#ifndef __GUICON_H__  
2 -  
3 -#define __GUICON_H__  
4 -  
5 -//#ifdef _DEBUG  
6 -  
7 -void RedirectIOToConsole(int Xpos = 0, int Ypos = 0, int Width = 700, int Height = 400);  
8 -  
9 -//#endif  
10 -  
11 -#endif  
12 - 1 +#ifndef __GUICON_H__
  2 +
  3 +#define __GUICON_H__
  4 +
  5 +//#ifdef _DEBUG
  6 +
  7 +void RedirectIOToConsole(int Xpos = 0, int Ypos = 0, int Width = 700, int Height = 400);
  8 +
  9 +//#endif
  10 +
  11 +#endif
  12 +
13 /* End of File */ 13 /* End of File */
14 \ No newline at end of file 14 \ No newline at end of file