Commit da3d4e0e3dfabd920e06f7e3efc307a3d4b9059c
0 parents
Initial commit.
Showing
29 changed files
with
12860 additions
and
0 deletions
Show diff stats
1 | +++ a/BESSEL.h | |
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 | ... | ... |
1 | +++ a/BESSIK.CPP | |
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,f0,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 | +} | ... | ... |
1 | +++ a/BESSJY.CPP | |
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 = 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 = 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,f0,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,bjy0,bjy1,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 | + | ... | ... |
1 | +++ a/CBESSIK.CPP | |
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 | +} | ... | ... |
1 | +++ a/CBESSJY.CPP | |
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,kz,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 | +++ a/CMakeLists.txt | |
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_LIBRARIES} ${GLEW_LIBRARY}) | |
74 | + | |
75 | + | |
76 | + | ... | ... |
1 | +++ a/EstimateMaterial.cpp | |
1 | +#include "globals.h" | |
2 | +#define PI 3.14159 | |
3 | + | |
4 | +float CalculateError(float* E) | |
5 | +{ | |
6 | + //Calculate the error between the Reference Spectrum and the Simulated Spectrum | |
7 | + float sumE = 0.0; | |
8 | + int nVals = RefSpectrum[currentSpec].size(); | |
9 | + float nu; | |
10 | + for(int i=0; i<nVals; i++) | |
11 | + { | |
12 | + nu = RefSpectrum[currentSpec][i].nu; | |
13 | + E[i] = RefSpectrum[currentSpec][i].A + nu * refSlope - SimSpectrum[i].A; | |
14 | + sumE += E[i]*E[i]; | |
15 | + } | |
16 | + | |
17 | + return sumE/nVals; | |
18 | +} | |
19 | + | |
20 | +void EstimateK(float* E) | |
21 | +{ | |
22 | + int nVals = RefSpectrum[currentSpec].size(); | |
23 | + float nuStart = RefSpectrum[currentSpec].front().nu; | |
24 | + float nuEnd = RefSpectrum[currentSpec].back().nu; | |
25 | + | |
26 | + float r = radius/10000.0; | |
27 | + float nu; | |
28 | + float dNu = (nuEnd - nuStart)/(nVals-1); | |
29 | + float eScale; | |
30 | + for(int i=0; i<nVals; i++) | |
31 | + { | |
32 | + nu = nuStart + i*2; | |
33 | + | |
34 | + eScale = 1/(8*PI*r*nu); | |
35 | + EtaK[i].A = EtaK[i].A + eScale * E[i]; | |
36 | + if(EtaK[i].A < 0.0) EtaK[i].A = 0.0; | |
37 | + } | |
38 | +} | |
39 | + | |
40 | +void EstimateMaterial() | |
41 | +{ | |
42 | + /*This function estimates the material properties of a sphere based on the | |
43 | + input spectrum RefSpectrum and the optical properties of the system. | |
44 | + 1) The material properties are stored in EtaK and EtaN | |
45 | + 2) The best fit is stored in SimSpectrum*/ | |
46 | + | |
47 | + //initialize the material index of refraction | |
48 | + EtaN.clear(); | |
49 | + EtaK.clear(); | |
50 | + | |
51 | + //insert the default material properties | |
52 | + SpecPair temp; | |
53 | + for(int s=0; s<RefSpectrum[currentSpec].size(); s++) | |
54 | + { | |
55 | + //the real part of the IR is the user-specified baseline IR | |
56 | + temp.nu = RefSpectrum[currentSpec][s].nu; | |
57 | + temp.A = baseIR; | |
58 | + EtaN.push_back(temp); | |
59 | + //the imaginary part of the IR is zero absorbance | |
60 | + temp.A = 0.0f; | |
61 | + EtaK.push_back(temp); | |
62 | + } | |
63 | + | |
64 | + | |
65 | + //allocate space to store the list of error values | |
66 | + float* E = (float*)malloc(sizeof(float) * RefSpectrum[currentSpec].size()); | |
67 | + //copy the absorbance values into a linear array | |
68 | + float* k = (float*)malloc(sizeof(float) * EtaK.size()); | |
69 | + float* n = (float*)malloc(sizeof(float) * EtaN.size()); | |
70 | + | |
71 | + //iterate to solve for both n and k | |
72 | + float sumE = 99999.9; | |
73 | + int i=0; | |
74 | + //clear the console | |
75 | + system("cls"); | |
76 | + while(sumE > minMSE && i < maxFitIter) | |
77 | + { | |
78 | + //simulate a spectrum based on the current IR | |
79 | + SimulateSpectrum(); | |
80 | + | |
81 | + //calculate the error term | |
82 | + sumE = CalculateError(E); | |
83 | + | |
84 | + //estimate the new absorbance | |
85 | + EstimateK(E); | |
86 | + | |
87 | + //use Kramers-Kronig to compute n | |
88 | + | |
89 | + for(int i=0; i<EtaK.size(); i++) | |
90 | + k[i] = EtaK[i].A; | |
91 | + cudaKramersKronig(n, k, EtaK.size(), EtaK.front().nu, EtaK.back().nu, baseIR); | |
92 | + | |
93 | + //copy the real part of the index of refraction into the vector | |
94 | + EtaN.clear(); | |
95 | + for(int i=0; i<EtaK.size(); i++) | |
96 | + { | |
97 | + temp.nu = EtaK[i].nu; | |
98 | + temp.A = n[i]; | |
99 | + EtaN.push_back(temp); | |
100 | + } | |
101 | + | |
102 | + cout<<" E = "<<sumE<<endl; | |
103 | + i++; | |
104 | + //SaveSpectrum(n, nVals, "simNj.txt"); | |
105 | + //SaveSpectrum(k, nVals, "simKj.txt"); | |
106 | + //SaveSpectrum(simSpec, nVals, "simSpec.txt"); | |
107 | + //exit(1); | |
108 | + | |
109 | + } | |
110 | + | |
111 | + free(E); | |
112 | + free(k); | |
113 | + free(n); | |
114 | + | |
115 | + | |
116 | + | |
117 | + | |
118 | +} | |
0 | 119 | \ No newline at end of file | ... | ... |
1 | +++ a/FileIO.cpp | |
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 | + float inMin = S.front().nu; | |
27 | + float inMax = S.back().nu; | |
28 | + | |
29 | + int nuMin = ceil(inMin); | |
30 | + int nuMax = 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 | + float 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 < 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(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(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 | + for(int i=0; i<SimSpectrum.size(); i++) | |
114 | + { | |
115 | + outFile<<SimSpectrum[i].nu<<" "; | |
116 | + outFile<<SimSpectrum[i].A<<endl; | |
117 | + } | |
118 | + outFile.close(); | |
119 | +} | |
120 | + | |
121 | +void SaveState() | |
122 | +{ | |
123 | + ofstream outFile("main.prj"); | |
124 | + //Window Parameters | |
125 | + outFile<<nuMin<<endl; | |
126 | + outFile<<nuMax<<endl; | |
127 | + outFile<<aMin<<endl; | |
128 | + outFile<<aMax<<endl; | |
129 | + outFile<<dNu<<endl; | |
130 | + | |
131 | + //material parameters | |
132 | + outFile<<radius<<endl; | |
133 | + outFile<<baseIR<<endl; | |
134 | + outFile<<cA<<endl; | |
135 | + | |
136 | + //optical parameters | |
137 | + outFile<<cNAi<<endl; | |
138 | + outFile<<cNAo<<endl; | |
139 | + outFile<<oNAi<<endl; | |
140 | + outFile<<oNAo<<endl; | |
141 | + | |
142 | + outFile.close(); | |
143 | + | |
144 | +} | |
145 | + | |
146 | +void LoadState() | |
147 | +{ | |
148 | + ifstream inFile("main.prj"); | |
149 | + //Window Parameters | |
150 | + inFile>>nuMin; | |
151 | + inFile>>nuMax; | |
152 | + inFile>>aMin; | |
153 | + inFile>>aMax; | |
154 | + inFile>>dNu; | |
155 | + | |
156 | + //material parameters | |
157 | + inFile>>radius; | |
158 | + inFile>>baseIR; | |
159 | + inFile>>cA; | |
160 | + | |
161 | + //optical parameters | |
162 | + inFile>>cNAi; | |
163 | + inFile>>cNAo; | |
164 | + inFile>>oNAi; | |
165 | + inFile>>oNAo; | |
166 | + | |
167 | + inFile.close(); | |
168 | + | |
169 | +} | |
170 | + | |
171 | +void SetDefaults() | |
172 | +{ | |
173 | + | |
174 | + nuMin = 800; | |
175 | + nuMax = 4000; | |
176 | + dNu = 2; | |
177 | + | |
178 | + aMin = 0; | |
179 | + aMax = 1; | |
180 | + | |
181 | + | |
182 | + //material parameters | |
183 | + radius = 4.0f; | |
184 | + baseIR = 1.49f; | |
185 | + cA = 1.0; | |
186 | + vector<SpecPair> KMaterial; | |
187 | + vector<SpecPair> NMaterial; | |
188 | + | |
189 | + //optical parameters | |
190 | + cNAi = 0.0; | |
191 | + cNAo = 0.6; | |
192 | + oNAi = 0.0; | |
193 | + oNAo = 0.6; | |
194 | +} | |
0 | 195 | \ No newline at end of file | ... | ... |
1 | +++ a/FindCUDASDK.cmake | |
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 | +++ a/FindGLEW.cmake | |
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 | +) | |
0 | 52 | \ No newline at end of file | ... | ... |
1 | +++ a/FindRTS.cmake | |
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 | +++ a/GAMMA.cpp | |
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 | +++ a/PerformanceData.h | |
1 | +// add the following to a cpp file: | |
2 | +// PerformanceData PD; | |
3 | + | |
4 | +#pragma once | |
5 | +#include <ostream> | |
6 | +using namespace std; | |
7 | + | |
8 | +enum PerformanceDataType | |
9 | +{ | |
10 | + PD_DISPLAY=0, | |
11 | + PD_SPS, | |
12 | + PD_UNUSED0, | |
13 | + | |
14 | + //my stuff | |
15 | + SIMULATE_SPECTRUM, | |
16 | + SIMULATE_GPU, | |
17 | + KRAMERS_KRONIG, | |
18 | + | |
19 | + | |
20 | + | |
21 | + //end my stuff | |
22 | + PERFORMANCE_DATA_TYPE_COUNT | |
23 | +}; | |
24 | + | |
25 | +static char PDTypeNames[][255] = { | |
26 | + "Display ", | |
27 | + "Simulation Total ", | |
28 | + " ----------------- ", | |
29 | + //my stuff | |
30 | + "Simulate Spectrum ", | |
31 | + " GPU Portion ", | |
32 | + "Kramers-Kronig ", | |
33 | + | |
34 | + //end my stuff | |
35 | + | |
36 | +}; | |
37 | + | |
38 | +//------------------------------------------------------------------------------- | |
39 | + | |
40 | +//#ifdef DISPLAY | |
41 | +// #define PERFORMANCE_DATA_MEASUE_ENABLE | |
42 | +//#endif | |
43 | + | |
44 | +//#ifdef PERFORMANCE_DATA_MEASUE_ENABLE | |
45 | + | |
46 | +//------------------------------------------------------------------------------- | |
47 | + | |
48 | +#include <stdio.h> | |
49 | +#include <windows.h> | |
50 | +#include <float.h> | |
51 | + | |
52 | +#include <iostream> | |
53 | +#include <iomanip> | |
54 | + | |
55 | +//------------------------------------------------------------------------------- | |
56 | + | |
57 | +class PerformanceData | |
58 | +{ | |
59 | +public: | |
60 | + PerformanceData() { ClearAll(); QueryPerformanceFrequency(&cps); } | |
61 | + ~PerformanceData(){} | |
62 | + | |
63 | + void ClearAll() | |
64 | + { | |
65 | + for ( int i=0; i<PERFORMANCE_DATA_TYPE_COUNT; i++ ) { | |
66 | + for ( int j=0; j<256; j++ ) times[i][j] = 0; | |
67 | + pos[i] = 0; | |
68 | + minTime[i] = 0xFFFFFFFF; | |
69 | + maxTime[i] = 0; | |
70 | + totalTime[i] = 0; | |
71 | + dataReady[i] = false; | |
72 | + } | |
73 | + } | |
74 | + | |
75 | + void StartTimer( int type ) { QueryPerformanceCounter( &startTime[type] ); /*startTime[type] = GetTickCount();*/ } | |
76 | + void EndTimer( int type ) { | |
77 | + LARGE_INTEGER endTime; | |
78 | + QueryPerformanceCounter( &endTime ); | |
79 | + double t = endTime.QuadPart - startTime[type].QuadPart; | |
80 | + //unsigned int t = GetTickCount() - startTime[type]; | |
81 | + if ( t < minTime[type] ) minTime[type] = t; | |
82 | + if ( t > maxTime[type] ) maxTime[type] = t; | |
83 | + totalTime[type] -= times[type][ pos[type] ]; | |
84 | + times[type][ pos[type] ] = t; | |
85 | + totalTime[type] += t; | |
86 | + pos[type]++; | |
87 | + if ( pos[type] == 0 ) dataReady[type] = true; | |
88 | + } | |
89 | + | |
90 | + void PrintResult( ostream &os,int i=PERFORMANCE_DATA_TYPE_COUNT) | |
91 | + { | |
92 | + os.setf(ios::fixed); | |
93 | + if ((i<PERFORMANCE_DATA_TYPE_COUNT)&&(i>=0)){ | |
94 | + double a = GetAvrgTime(i); | |
95 | + if ( a ) | |
96 | + os<< PDTypeNames[i]<<" : avrg="<<setw(8)<<setprecision(3)<<a<<"\tmin="<<setw(8)<<setprecision(3)<< GetMinTime(i) <<"\tmax="<<setw(8)<<setprecision(3)<< GetMaxTime(i) <<endl ; | |
97 | + else | |
98 | + os<< PDTypeNames[i]<<" : avrg= -----\tmin= -----\tmax= -----"<<endl; | |
99 | + } | |
100 | + } | |
101 | + | |
102 | + void PrintResults( ostream &os) | |
103 | + { | |
104 | + for ( int i=0; i<PERFORMANCE_DATA_TYPE_COUNT; i++ ) | |
105 | + PrintResult(os,i); | |
106 | + } | |
107 | + | |
108 | + double GetLastTime( int type ) { return times[type][pos[type]]; } | |
109 | + 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; } | |
110 | + double GetMinTime( int type ) { return 1000.0 * minTime[type] / (float)cps.LowPart; } | |
111 | + double GetMaxTime( int type ) { return 1000.0 * maxTime[type] / (float)cps.LowPart; } | |
112 | + | |
113 | +private: | |
114 | + double times[PERFORMANCE_DATA_TYPE_COUNT][256]; | |
115 | + unsigned char pos[PERFORMANCE_DATA_TYPE_COUNT]; | |
116 | + LARGE_INTEGER startTime[PERFORMANCE_DATA_TYPE_COUNT]; | |
117 | + double minTime[ PERFORMANCE_DATA_TYPE_COUNT ]; | |
118 | + double maxTime[ PERFORMANCE_DATA_TYPE_COUNT ]; | |
119 | + double totalTime[ PERFORMANCE_DATA_TYPE_COUNT ]; | |
120 | + bool dataReady[ PERFORMANCE_DATA_TYPE_COUNT ]; | |
121 | + LARGE_INTEGER cps; | |
122 | +}; | |
123 | + | |
124 | +//------------------------------------------------------------------------------- | |
125 | +/*#else | |
126 | + | |
127 | +class PerformanceData{ | |
128 | +public: | |
129 | + PerformanceData() {;}; | |
130 | + ~PerformanceData(){;}; | |
131 | + void ClearAll(){;}; | |
132 | + void StartTimer( int type ) {;}; | |
133 | + void EndTimer( int type ) {;}; | |
134 | + void PrintResults( ostream &os){;}; | |
135 | + void PrintResult( ostream &os, int i=PERFORMANCE_DATA_TYPE_COUNT){;}; | |
136 | + double GetLastTime( int type ) { return 0.0; }; | |
137 | + double GetAvrgTime( int type ) { return 0.0; }; | |
138 | + double GetMinTime( int type ) { return 0.0; }; | |
139 | + double GetMaxTime( int type ) { return 0.0; }; | |
140 | +}; | |
141 | + | |
142 | +#endif | |
143 | +//------------------------------------------------------------------------------- | |
144 | +*/ | |
145 | +extern PerformanceData PD; | |
146 | + | |
147 | +//------------------------------------------------------------------------------- | ... | ... |
1 | +++ a/SimulateSpectrum.cpp | |
1 | +#include <math.h> | |
2 | +#include <complex> | |
3 | +#include <iostream> | |
4 | +#include <fstream> | |
5 | +#include "globals.h" | |
6 | +//#include "cufft.h" | |
7 | +using namespace std; | |
8 | + | |
9 | +#define pi 3.14159 | |
10 | + | |
11 | +typedef complex<float> scComplex; | |
12 | + | |
13 | +int cbessjyva(double v,complex<double> z,double &vm,complex<double>*cjv, | |
14 | + complex<double>*cyv,complex<double>*cjvp,complex<double>*cyvp); | |
15 | +int bessjyv(double v,double x,double &vm,double *jv,double *yv, | |
16 | + double *djv,double *dyv); | |
17 | + | |
18 | +complex<double> Jl_neg(complex<double> x) | |
19 | +{ | |
20 | + //this function computes the bessel function of the first kind Jl(x) for l = -0.5 | |
21 | + return ( sqrt(2.0/pi) * cos(x) )/sqrt(x); | |
22 | +} | |
23 | + | |
24 | +double Jl_neg(double x) | |
25 | +{ | |
26 | + //this function computes the bessel function of the first kind Jl(x) for l = -0.5 | |
27 | + return ( sqrt(2.0/pi) * cos(x) )/sqrt(x); | |
28 | +} | |
29 | + | |
30 | +double Yl_neg(double x) | |
31 | +{ | |
32 | + //this function computes the bessel function of the second kind Yl(x) for l = -0.5; | |
33 | + return ( sqrt(2.0/pi) * sin(x) )/sqrt(x); | |
34 | +} | |
35 | + | |
36 | +void computeB(complex<float>* B, float radius, complex<double> refIndex, float lambda, int Nl) | |
37 | +{ | |
38 | + double k = (2*pi)/lambda; | |
39 | + int b = 2; | |
40 | + | |
41 | + //allocate space for the real bessel functions | |
42 | + double* jv = (double*)malloc(sizeof(double)*(Nl+b)); | |
43 | + double* yv = (double*)malloc(sizeof(double)*(Nl+b)); | |
44 | + double* jvp = (double*)malloc(sizeof(double)*(Nl+b)); | |
45 | + double* yvp = (double*)malloc(sizeof(double)*(Nl+b)); | |
46 | + | |
47 | + //allocate space for the complex bessel functions | |
48 | + complex<double>* cjv = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b)); | |
49 | + complex<double>* cyv = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b)); | |
50 | + complex<double>* cjvp = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b)); | |
51 | + complex<double>* cyvp = (complex<double>*)malloc(sizeof(complex<double>)*(Nl+b)); | |
52 | + | |
53 | + double kr = k*radius; | |
54 | + complex<double> knr = k*refIndex*(double)radius; | |
55 | + complex<double> n = refIndex; | |
56 | + | |
57 | + //compute the bessel functions for k*r | |
58 | + double vm;// = Nl - 1; | |
59 | + bessjyv((Nl)+0.5, kr, vm, jv, yv, jvp, yvp); | |
60 | + //cout<<"Nl: "<<Nl<<" vm: "<<vm<<endl; | |
61 | + //printf("Nl: %f, vm: %f\n", (float)Nl, (float)vm); | |
62 | + | |
63 | + //compute the bessel functions for k*n*r | |
64 | + cbessjyva((Nl)+0.5, knr, vm, cjv, cyv, cjvp, cyvp); | |
65 | + | |
66 | + //scale factor for spherical bessel functions | |
67 | + double scale_kr = sqrt(pi/(2.0*kr)); | |
68 | + complex<double> scale_knr = sqrt(pi/(2.0*knr)); | |
69 | + | |
70 | + complex<double> numer, denom; | |
71 | + double j_kr; | |
72 | + double y_kr; | |
73 | + complex<double> j_knr; | |
74 | + complex<double> j_d_knr; | |
75 | + double j_d_kr; | |
76 | + complex<double> h_kr; | |
77 | + complex<double> h_d_kr; | |
78 | + complex<double> h_neg; | |
79 | + complex<double> h_pos; | |
80 | + | |
81 | + //cout<<"B coefficients:"<<endl; | |
82 | + for(int l=0; l<Nl; l++) | |
83 | + { | |
84 | + //compute the spherical bessel functions | |
85 | + j_kr = jv[l] * scale_kr; | |
86 | + y_kr = yv[l] * scale_kr; | |
87 | + j_knr = cjv[l] * scale_knr; | |
88 | + | |
89 | + //compute the Hankel function | |
90 | + h_kr = complex<double>(j_kr, y_kr); | |
91 | + | |
92 | + //compute the derivatives | |
93 | + if(l == 0) | |
94 | + { | |
95 | + //spherical bessel functions for l=0 | |
96 | + j_d_kr = scale_kr * (Jl_neg(kr) - (jv[l] + kr*jv[l+1])/kr )/2.0; | |
97 | + j_d_knr = scale_knr * ( Jl_neg(knr) - (cjv[l] + knr*cjv[l+1])/knr )/2.0; | |
98 | + h_neg = complex<double>(scale_kr*Jl_neg(kr), scale_kr*Yl_neg(kr)); | |
99 | + h_pos = complex<double>(scale_kr*jv[l+1], scale_kr*yv[l+1]); | |
100 | + h_d_kr = (h_neg - (h_kr + kr*h_pos)/kr)/2.0; | |
101 | + } | |
102 | + else | |
103 | + { | |
104 | + //spherical bessel functions | |
105 | + j_d_kr = scale_kr * (jv[l-1] - (jv[l] + kr*jv[l+1])/kr )/2.0; | |
106 | + j_d_knr = scale_knr * ( cjv[l-1] - (cjv[l] + knr*cjv[l+1])/knr )/2.0; | |
107 | + h_neg = complex<double>(scale_kr*jv[l-1], scale_kr*yv[l-1]); | |
108 | + h_pos = complex<double>(scale_kr*jv[l+1], scale_kr*yv[l+1]); | |
109 | + h_d_kr = (h_neg - (h_kr + kr*h_pos)/kr)/2.0; | |
110 | + } | |
111 | + | |
112 | + numer = j_kr*j_d_knr*n - j_knr*j_d_kr; | |
113 | + denom = j_knr*h_d_kr - h_kr*j_d_knr*n; | |
114 | + complex<double> temp = numer/denom; | |
115 | + | |
116 | + B[l] = scComplex(temp.real(), temp.imag()); | |
117 | + //cout<<B[l]<<endl; | |
118 | + } | |
119 | + | |
120 | + free(jv); | |
121 | + free(yv); | |
122 | + free(jvp); | |
123 | + free(yvp); | |
124 | + free(cjv); | |
125 | + free(cyv); | |
126 | + free(cjvp); | |
127 | + free(cyvp); | |
128 | +} | |
129 | + | |
130 | +void Legendre(float* P, float x, int Nl) | |
131 | +{ | |
132 | + //computes the legendre polynomials from orders 0 to Nl-1 | |
133 | + P[0] = 1; | |
134 | + if(Nl == 1) return; | |
135 | + P[1] = x; | |
136 | + for(int l = 2; l < Nl; l++) | |
137 | + { | |
138 | + P[l] = ((2*l - 1)*x*P[l-1] - (l - 1)*P[l-2])/l; | |
139 | + } | |
140 | + | |
141 | +} | |
142 | + | |
143 | +complex<float> integrateUi(float cAngleI, float cAngleO, float oAngleI, float oAngleO, float M = 2*pi) | |
144 | +{ | |
145 | + /*This function integrates the incident field of magnitude M in the far zone | |
146 | + in order to evaluate the field at the central pixel of a detector. | |
147 | + cNAi = condenser inner angle | |
148 | + cNAo = condenser outer angle | |
149 | + oNAi = objective inner angle | |
150 | + oNAo = objective outer angle | |
151 | + M = field magnitude*/ | |
152 | + | |
153 | + float alphaIn = max(cAngleI, oAngleI); | |
154 | + float alphaOut = min(cAngleO,oAngleO); | |
155 | + | |
156 | + complex<float> Ui; | |
157 | + if(alphaIn > alphaOut) | |
158 | + Ui = complex<float>(0.0, 0.0); | |
159 | + else | |
160 | + Ui = complex<float>(M * 2 * pi * (cos(alphaIn) - cos(alphaOut)), 0.0f); | |
161 | + | |
162 | + return Ui; | |
163 | + | |
164 | +} | |
165 | + | |
166 | +void computeCondenserAlpha(float* alpha, int Nl, float cAngleI, float cAngleO) | |
167 | +{ | |
168 | + /*This function computes the condenser integral in order to build the field of incident light | |
169 | + alpha = list of Nl floating point values representing the condenser alpha as a function of l | |
170 | + Nl = number of orders in the incident field | |
171 | + cAngleI, cAngleO = inner and outer condenser angles (inner and outer NA)*/ | |
172 | + | |
173 | + //compute the Legendre polynomials for the condenser aperature | |
174 | + float* PcNAo = (float*)malloc(sizeof(float)*(Nl+1)); | |
175 | + Legendre(PcNAo, cos(cAngleO), Nl+1); | |
176 | + float* PcNAi = (float*)malloc(sizeof(float)*(Nl+1)); | |
177 | + Legendre(PcNAi, cos(cAngleI), Nl+1); | |
178 | + | |
179 | + for(int l=0; l<Nl; l++) | |
180 | + { | |
181 | + //integration term | |
182 | + if(l == 0) | |
183 | + alpha[l] = -PcNAo[l+1] + PcNAo[0] + PcNAi[l+1] - PcNAi[0]; | |
184 | + else | |
185 | + alpha[l] = -PcNAo[l+1] + PcNAo[l-1] + PcNAi[l+1] - PcNAi[l-1]; | |
186 | + | |
187 | + alpha[l] *= 2 * pi; | |
188 | + } | |
189 | + | |
190 | +} | |
191 | + | |
192 | +complex<float> integrateUs(float r, float lambda, complex<float> eta, | |
193 | + float cAngleI, float cAngleO, float oAngleI, float oAngleO, float M = 2*pi) | |
194 | +{ | |
195 | + /*This function integrates the incident field of magnitude M in the far zone | |
196 | + in order to evaluate the field at the central pixel of a detector. | |
197 | + r = sphere radius | |
198 | + lambda = wavelength | |
199 | + eta = index of refraction | |
200 | + cNAi = condenser inner NA | |
201 | + cNAo = condenser outer NA | |
202 | + oNAi = objective inner NA | |
203 | + oNAo = objective outer NA | |
204 | + M = field magnitude*/ | |
205 | + | |
206 | + //compute the required number of orders | |
207 | + float k = 2*pi/lambda; | |
208 | + int Nl = ceil( k + 4 * exp(log(k*r)/3) + 3 ); | |
209 | + | |
210 | + //compute the material coefficients B | |
211 | + complex<float>* B = (complex<float>*)malloc(sizeof(complex<float>)*Nl); | |
212 | + //compute the Legendre polynomials for the condenser and objective aperatures | |
213 | + float* PcNAo = (float*)malloc(sizeof(float)*(Nl+1)); | |
214 | + Legendre(PcNAo, cos(cAngleO), Nl+1); | |
215 | + float* PcNAi = (float*)malloc(sizeof(float)*(Nl+1)); | |
216 | + Legendre(PcNAi, cos(cAngleI), Nl+1); | |
217 | + | |
218 | + float* PoNAo = (float*)malloc(sizeof(float)*(Nl+1)); | |
219 | + Legendre(PoNAo, cos(oAngleO), Nl+1); | |
220 | + float* PoNAi = (float*)malloc(sizeof(float)*(Nl+1)); | |
221 | + Legendre(PoNAi, cos(oAngleI), Nl+1); | |
222 | + | |
223 | + //store the index of refraction; | |
224 | + complex<double> IR(eta.real(), eta.imag()); | |
225 | + | |
226 | + //compute the scattering coefficients | |
227 | + computeB(B, r, IR, lambda, Nl); | |
228 | + | |
229 | + //aperature terms for the condenser (alpha) and objective (beta) | |
230 | + float alpha; | |
231 | + float beta; | |
232 | + float c; | |
233 | + complex<float> Us(0.0, 0.0); | |
234 | + | |
235 | + for(int l=0; l<Nl; l++) | |
236 | + { | |
237 | + //integration term | |
238 | + if(l == 0) | |
239 | + { | |
240 | + alpha = -PcNAo[l+1] + PcNAo[0] + PcNAi[l+1] - PcNAi[0]; | |
241 | + beta = -PoNAo[l+1] + PoNAo[0] + PoNAi[l+1] - PoNAi[0]; | |
242 | + } | |
243 | + else | |
244 | + { | |
245 | + alpha = -PcNAo[l+1] + PcNAo[l-1] + PcNAi[l+1] - PcNAi[l-1]; | |
246 | + beta = -PoNAo[l+1] + PoNAo[l-1] + PoNAi[l+1] - PoNAi[l-1]; | |
247 | + } | |
248 | + c = (2*pi)/(2.0 * l + 1.0); | |
249 | + Us += c * alpha * beta * B[l] * M; | |
250 | + | |
251 | + | |
252 | + } | |
253 | + free(PcNAo); | |
254 | + free(PcNAi); | |
255 | + free(PoNAo); | |
256 | + free(PoNAi); | |
257 | + free(B); | |
258 | + | |
259 | + return Us; | |
260 | + | |
261 | +} | |
262 | + | |
263 | +void pointSpectrum() | |
264 | +{ | |
265 | + PD.StartTimer(SIMULATE_SPECTRUM); | |
266 | + //clear the previous spectrum | |
267 | + SimSpectrum.clear(); | |
268 | + | |
269 | + float dNu = 2.0f; | |
270 | + float lambda; | |
271 | + | |
272 | + //compute the angles based on NA | |
273 | + float cAngleI = asin(cNAi); | |
274 | + float cAngleO = asin(cNAo); | |
275 | + float oAngleI = asin(oNAi); | |
276 | + float oAngleO = asin(oNAo); | |
277 | + | |
278 | + //implement a reflection-mode system if necessary | |
279 | + if(opticsMode == ReflectionOpticsType){ | |
280 | + | |
281 | + //set the condenser to match the objective | |
282 | + cAngleI = oAngleI; | |
283 | + cAngleO = oAngleO; | |
284 | + | |
285 | + //invert the objective | |
286 | + oAngleO = pi - cAngleI; | |
287 | + oAngleI = pi - cAngleO; | |
288 | + } | |
289 | + | |
290 | + //integrate the incident field at the detector position | |
291 | + complex<float> Ui = integrateUi(cAngleI, cAngleO, oAngleI, oAngleO, 2*pi); | |
292 | + float I0 = Ui.real() * Ui.real() + Ui.imag() * Ui.imag(); | |
293 | + I0 *= scaleI0; | |
294 | + | |
295 | + | |
296 | + | |
297 | + float I; | |
298 | + SpecPair temp; | |
299 | + float nu; | |
300 | + complex<float> eta; | |
301 | + complex<float> Us, U; | |
302 | + | |
303 | + float vecLen = 0.0; | |
304 | + for(int i=0; i<EtaK.size(); i++) | |
305 | + { | |
306 | + nu = EtaK[i].nu; | |
307 | + lambda = 10000.0f/nu; | |
308 | + if(applyMaterial) | |
309 | + eta = complex<float>(EtaN[i].A, EtaK[i].A); | |
310 | + else | |
311 | + eta = complex<float>(baseIR, 0.0); | |
312 | + | |
313 | + | |
314 | + //integrate the scattered field at the detector position | |
315 | + Us = integrateUs(radius, lambda, eta, cAngleI, cAngleO, oAngleI, oAngleO, 2*pi); | |
316 | + U = Us + Ui; | |
317 | + float I = U.real() * U.real() + U.imag() * U.imag(); | |
318 | + | |
319 | + temp.nu = nu; | |
320 | + | |
321 | + //set the spectrum value based on the current display type | |
322 | + if(dispSimType == AbsorbanceSpecType) | |
323 | + temp.A = -log10(I/I0); | |
324 | + else | |
325 | + temp.A = I; | |
326 | + | |
327 | + if(dispNormalize) | |
328 | + vecLen += temp.A * temp.A; | |
329 | + | |
330 | + SimSpectrum.push_back(temp); | |
331 | + } | |
332 | + vecLen = sqrt(vecLen); | |
333 | + | |
334 | + if(dispNormalize) | |
335 | + for(int i=0; i<SimSpectrum.size(); i++) | |
336 | + SimSpectrum[i].A = (SimSpectrum[i].A / vecLen) * dispNormFactor; | |
337 | + | |
338 | + PD.EndTimer(SIMULATE_SPECTRUM); | |
339 | +} | |
340 | + | |
341 | +/* | |
342 | +complex<float> sampleUs(complex<float>* B, float* Alpha, int Nl, float r, | |
343 | + float cAngleI, float cAngleO, float theta, float M = 2*pi) | |
344 | +{ | |
345 | + /*This function takes a point sample of the scattered field in the far zone | |
346 | + in order to evaluate the field at the central pixel of a detector. | |
347 | + r = sphere radius | |
348 | + lambda = wavelength | |
349 | + eta = index of refraction | |
350 | + cNAi = condenser inner NA | |
351 | + cNAo = condenser outer NA | |
352 | + theta = angle of the sample | |
353 | + M = field magnitude*/ | |
354 | + | |
355 | +/* | |
356 | + //compute the material coefficients B | |
357 | + //complex<float>* B = (complex<float>*)malloc(sizeof(complex<float>)*Nl); | |
358 | + | |
359 | + //compute the Legendre polynomials for theta (at the objective) | |
360 | + float* Ptheta = (float*)malloc(sizeof(float)*(Nl+1)); | |
361 | + Legendre(Ptheta, cos(theta), Nl+1); | |
362 | + | |
363 | + //complex<double> IR(eta.real(), eta.imag()); | |
364 | + | |
365 | + //aperature terms for the condenser (alpha) and objective (beta) | |
366 | + float beta; | |
367 | + float c; | |
368 | + complex<float> Us(0.0, 0.0); | |
369 | + | |
370 | + for(int l=0; l<Nl; l++) | |
371 | + { | |
372 | + | |
373 | + complex<float> numer(0.0, -(l*pi)/2.0); | |
374 | + Us += B[l] * exp(numer) * Ptheta[l] * Alpha[l] * pow(complex<float>(0.0, 1.0), l); | |
375 | + | |
376 | + | |
377 | + } | |
378 | + //printf("Ptheta: %f\n", Ptheta[Nl-1]); | |
379 | + | |
380 | + return Us; | |
381 | + | |
382 | +}*/ | |
383 | + | |
384 | + | |
385 | +/* | |
386 | +void detectorSpectrum(int numSamples) | |
387 | +{ | |
388 | + //integrate across the objective aperature and calculate the resulting intensity on a detector | |
389 | + PD.StartTimer(SIMULATE_SPECTRUM); | |
390 | + //clear the previous spectrum | |
391 | + SimSpectrum.clear(); | |
392 | + | |
393 | + float dNu = 2.0f; | |
394 | + float lambda; | |
395 | + | |
396 | + //compute the angles based on NA | |
397 | + float cAngleI = asin(cNAi); | |
398 | + float cAngleO = asin(cNAo); | |
399 | + float oAngleI = asin(oNAi); | |
400 | + float oAngleO = asin(oNAo); | |
401 | + | |
402 | + //implement a reflection-mode system if necessary | |
403 | + if(opticsMode == ReflectionOpticsType){ | |
404 | + | |
405 | + //set the condenser to match the objective | |
406 | + cAngleI = oAngleI; | |
407 | + cAngleO = oAngleO; | |
408 | + | |
409 | + //invert the objective | |
410 | + oAngleO = pi - cAngleI; | |
411 | + oAngleI = pi - cAngleO; | |
412 | + } | |
413 | + | |
414 | + //compute Nl (maximum order of the spectrum) | |
415 | + //**************************************************************************** | |
416 | + float maxNu = EtaK.back().nu; | |
417 | + float maxLambda = 10000.0f/maxNu; | |
418 | + float k = 2*pi/maxLambda; | |
419 | + int Nl = ceil( k + 4 * exp(log(k*radius)/3) + 3 ); | |
420 | + int nLambda = EtaK.size(); | |
421 | + | |
422 | + //compute alpha (condenser integral) | |
423 | + //**************************************************************************** | |
424 | + //compute the Legendre polynomials for the condenser aperature | |
425 | + float* PcNAo = (float*)malloc(sizeof(float)*(Nl+1)); | |
426 | + Legendre(PcNAo, cos(cAngleO), Nl+1); | |
427 | + float* PcNAi = (float*)malloc(sizeof(float)*(Nl+1)); | |
428 | + Legendre(PcNAi, cos(cAngleI), Nl+1); | |
429 | + | |
430 | + //allocate space for the alpha array | |
431 | + float* alpha = (float*)malloc(sizeof(float)*(Nl + 1)); | |
432 | + computeCondenserAlpha(alpha, Nl, cAngleI, cAngleO); | |
433 | + | |
434 | + for(int l=0; l<Nl; l++) | |
435 | + { | |
436 | + //integration term | |
437 | + if(l == 0) | |
438 | + alpha[l] = -PcNAo[l+1] + PcNAo[0] + PcNAi[l+1] - PcNAi[0]; | |
439 | + else | |
440 | + alpha[l] = -PcNAo[l+1] + PcNAo[l-1] + PcNAi[l+1] - PcNAi[l-1]; | |
441 | + | |
442 | + alpha[l] *= 2 * pi; | |
443 | + } | |
444 | + | |
445 | + //compute the information based on wavelength and sphere | |
446 | + | |
447 | + //evaluate the incident field intensity | |
448 | + float I0 = 0.0; | |
449 | + float theta; | |
450 | + float dTheta = (oAngleO - oAngleI)/numSamples; | |
451 | + complex<float> Ui; | |
452 | + | |
453 | + Ui = integrateUi(cAngleI, cAngleO, oAngleI, oAngleO, 2*pi); | |
454 | + I0 = Ui.real()*2*pi; | |
455 | + | |
456 | + float I; | |
457 | + SpecPair temp; | |
458 | + float nu; | |
459 | + complex<float> eta; | |
460 | + complex<float> Us, U; | |
461 | + | |
462 | + | |
463 | + | |
464 | + float vecLen = 0.0; | |
465 | + for(int i=0; i<EtaK.size(); i++) | |
466 | + { | |
467 | + //compute information based on wavelength and material | |
468 | + nu = EtaK[i].nu; | |
469 | + lambda = 10000.0f/nu; | |
470 | + if(applyMaterial) | |
471 | + eta = complex<float>(EtaN[i].A, EtaK[i].A); | |
472 | + else | |
473 | + eta = complex<float>(baseIR, 0.0); | |
474 | + | |
475 | + //allocate memory for the scattering coefficients | |
476 | + complex<float>* B = (complex<float>*)malloc(sizeof(complex<float>)*Nl); | |
477 | + | |
478 | + complex<double> IR(eta.real(), eta.imag()); | |
479 | + computeB(B, radius, IR, lambda, Nl); | |
480 | + | |
481 | + | |
482 | + //integrate the scattered field at the detector position | |
483 | + I = 0.0; | |
484 | + | |
485 | + for(int iTheta = 0; iTheta < numSamples; iTheta++) | |
486 | + { | |
487 | + theta = oAngleI + iTheta * dTheta; | |
488 | + Us = sampleUs(B, alpha, Nl, radius, cAngleI, cAngleO, theta, 2*pi); | |
489 | + | |
490 | + | |
491 | + //calculate the intensity and add | |
492 | + if(theta >= cAngleI && theta <= cAngleO) | |
493 | + U = Us + 2*(float)pi; | |
494 | + else | |
495 | + U = Us; | |
496 | + | |
497 | + I += (U.real() * U.real() + U.imag() * U.imag()) * sin(theta) * 2 * pi * dTheta; | |
498 | + | |
499 | + } | |
500 | + | |
501 | + temp.nu = nu; | |
502 | + | |
503 | + if(i == 0) | |
504 | + printf("I: %f I0: %f\n", I, I0); | |
505 | + | |
506 | + //set the spectrum value based on the current display type | |
507 | + if(dispSimType == AbsorbanceSpecType) | |
508 | + temp.A = -log10(I/I0); | |
509 | + else | |
510 | + temp.A = I; | |
511 | + | |
512 | + if(dispNormalize) | |
513 | + vecLen += temp.A * temp.A; | |
514 | + //temp.A = Us.real(); | |
515 | + SimSpectrum.push_back(temp); | |
516 | + | |
517 | + free(B); | |
518 | + } | |
519 | + vecLen = sqrt(vecLen); | |
520 | + | |
521 | + if(dispNormalize) | |
522 | + for(int i=0; i<SimSpectrum.size(); i++) | |
523 | + SimSpectrum[i].A = (SimSpectrum[i].A / vecLen) * dispNormFactor; | |
524 | + | |
525 | + free(alpha); | |
526 | + | |
527 | + PD.EndTimer(SIMULATE_SPECTRUM); | |
528 | +}*/ | |
529 | + | |
530 | +void updateSpectrum(float* I, float I0, int n) | |
531 | +{ | |
532 | + SimSpectrum.clear(); | |
533 | + SpecPair temp; | |
534 | + | |
535 | + //update the displayed spectrum based on the computed intensity I | |
536 | + for(int i=0; i<n; i++) | |
537 | + { | |
538 | + temp.nu = EtaK[i].nu; | |
539 | + | |
540 | + //set the spectrum value based on the current display type | |
541 | + if(dispSimType == AbsorbanceSpecType) | |
542 | + temp.A = -log10(I[i]/I0); | |
543 | + else | |
544 | + temp.A = I[i]; | |
545 | + | |
546 | + SimSpectrum.push_back(temp); | |
547 | + } | |
548 | +} | |
549 | + | |
550 | +void computeCassegrainAngles(float& cAngleI, float& cAngleO, float& oAngleI, float& oAngleO) | |
551 | +{ | |
552 | + //compute the angles based on NA | |
553 | + cAngleI = asin(cNAi); | |
554 | + cAngleO = asin(cNAo); | |
555 | + oAngleI = asin(oNAi); | |
556 | + oAngleO = asin(oNAo); | |
557 | + | |
558 | + //implement a reflection-mode system if necessary | |
559 | + if(opticsMode == ReflectionOpticsType){ | |
560 | + | |
561 | + //set the condenser to match the objective | |
562 | + cAngleI = oAngleI; | |
563 | + cAngleO = oAngleO; | |
564 | + | |
565 | + //invert the objective | |
566 | + oAngleO = pi - cAngleI; | |
567 | + oAngleI = pi - cAngleO; | |
568 | + } | |
569 | + | |
570 | + | |
571 | +} | |
572 | + | |
573 | +int computeNl() | |
574 | +{ | |
575 | + float maxNu = EtaK.back().nu; | |
576 | + float maxLambda = 10000.0f/maxNu; | |
577 | + float k = 2*pi/maxLambda; | |
578 | + int Nl = ceil( k + 4 * exp(log(k*radius)/3) + 3 ); | |
579 | + | |
580 | + return Nl; | |
581 | +} | |
582 | + | |
583 | +void computeBArray(complex<float>* B, int Nl, int nLambda) | |
584 | +{ | |
585 | + float nu; | |
586 | + complex<float> eta; | |
587 | + float* Lambda = (float*)malloc(sizeof(float) * nLambda); | |
588 | + | |
589 | + //for each wavenumber nu | |
590 | + for(int i=0; i<EtaK.size(); i++) | |
591 | + { | |
592 | + //compute information based on wavelength and material | |
593 | + nu = EtaK[i].nu; | |
594 | + Lambda[i] = 10000.0f/nu; | |
595 | + if(applyMaterial) | |
596 | + eta = complex<float>(EtaN[i].A, EtaK[i].A); | |
597 | + else | |
598 | + eta = complex<float>(baseIR, 0.0); | |
599 | + | |
600 | + //allocate memory for the scattering coefficients | |
601 | + //complex<float>* B = (complex<float>*)malloc(sizeof(complex<float>)*Nl); | |
602 | + | |
603 | + complex<double> IR(eta.real(), eta.imag()); | |
604 | + computeB(&B[i * Nl], radius, IR, Lambda[i], Nl); | |
605 | + } | |
606 | +} | |
607 | + | |
608 | +void computeOpticalParameters(float& cAngleI, float& cAngleO, float& oAngleI, float& oAngleO, float& I0, float* alpha, int Nl) | |
609 | +{ | |
610 | + computeCassegrainAngles(cAngleI, cAngleO, oAngleI, oAngleO); | |
611 | + | |
612 | + //evaluate the incident field intensity | |
613 | + I0 = 0.0; | |
614 | + float theta; | |
615 | + complex<float> Ui; | |
616 | + | |
617 | + Ui = integrateUi(cAngleI, cAngleO, oAngleI, oAngleO, 2*pi); | |
618 | + I0 = Ui.real()*2*pi; | |
619 | + | |
620 | + //compute alpha (condenser integral) | |
621 | + computeCondenserAlpha(alpha, Nl, cAngleI, cAngleO); | |
622 | +} | |
623 | + | |
624 | +void gpuDetectorSpectrum(int numSamples) | |
625 | +{ | |
626 | + //integrate across the objective aperature and calculate the resulting intensity on a detector | |
627 | + PD.StartTimer(SIMULATE_SPECTRUM); | |
628 | + //clear the previous spectrum | |
629 | + SimSpectrum.clear(); | |
630 | + | |
631 | + //compute Nl (maximum order of the spectrum) | |
632 | + int Nl = computeNl(); | |
633 | + | |
634 | + float* alpha = (float*)malloc(sizeof(float)*(Nl + 1)); | |
635 | + float cAngleI, cAngleO, oAngleI, oAngleO, I0; | |
636 | + computeOpticalParameters(cAngleI, cAngleO, oAngleI, oAngleO, I0, alpha, Nl); | |
637 | + | |
638 | + //allocate space for a list of wavelengths | |
639 | + int nLambda = EtaK.size(); | |
640 | + | |
641 | + //allocate space for the 2D array (Nl x nu) of scattering coefficients | |
642 | + complex<float>* B = (complex<float>*)malloc(sizeof(complex<float>) * Nl * nLambda); | |
643 | + computeBArray(B, Nl, nLambda); | |
644 | + | |
645 | + | |
646 | + //allocate temporary space for the spectrum | |
647 | + float* I = (float*)malloc(sizeof(float) * EtaK.size()); | |
648 | + | |
649 | + //compute the spectrum on the GPU | |
650 | + PD.StartTimer(SIMULATE_GPU); | |
651 | + cudaComputeSpectrum(I, (float*)B, alpha, Nl, nLambda, oAngleI, oAngleO, cAngleI, cAngleO, numSamples); | |
652 | + PD.EndTimer(SIMULATE_GPU); | |
653 | + | |
654 | + updateSpectrum(I, I0, nLambda); | |
655 | + | |
656 | + PD.EndTimer(SIMULATE_SPECTRUM); | |
657 | + | |
658 | +} | |
659 | + | |
660 | +void SimulateSpectrum() | |
661 | +{ | |
662 | + if(pointDetector) | |
663 | + pointSpectrum(); | |
664 | + else | |
665 | + gpuDetectorSpectrum(objectiveSamples); | |
666 | + //detectorSpectrum(objectiveSamples); | |
667 | +} | |
668 | + | |
669 | +float absorbanceDistortion(){ | |
670 | + | |
671 | + //compute the mean of the spectrum | |
672 | + float sumSim = 0.0; | |
673 | + for(int i=0; i<SimSpectrum.size(); i++) | |
674 | + { | |
675 | + sumSim += SimSpectrum[i].A; | |
676 | + } | |
677 | + float meanSim = sumSim/SimSpectrum.size(); | |
678 | + | |
679 | + //compute the distortion (MSE from the mean) | |
680 | + float sumSE = 0.0; | |
681 | + for(int i=0; i<SimSpectrum.size(); i++) | |
682 | + { | |
683 | + sumSE += pow(SimSpectrum[i].A - meanSim, 2); | |
684 | + } | |
685 | + float MSE = sumSE / SimSpectrum.size(); | |
686 | + | |
687 | + return MSE; | |
688 | +} | |
689 | + | |
690 | +float intensityDistortion(){ | |
691 | + | |
692 | + //compute the magnitude of the spectrum | |
693 | + float sumSim = 0.0; | |
694 | + for(int i=0; i<SimSpectrum.size(); i++) | |
695 | + { | |
696 | + sumSim += SimSpectrum[i].A * SimSpectrum[i].A; | |
697 | + } | |
698 | + float magSim = sqrt(sumSim); | |
699 | + | |
700 | + //compute the distortion (MSE from the mean) | |
701 | + float sumSE = 0.0; | |
702 | + for(int i=0; i<SimSpectrum.size(); i++) | |
703 | + { | |
704 | + sumSE += (SimSpectrum[i].A/magSim) * (1.0/SimSpectrum.size()); | |
705 | + } | |
706 | + float MSE = sumSE; | |
707 | + | |
708 | + return MSE; | |
709 | +} | |
710 | + | |
711 | +void MinimizeDistortion(){ | |
712 | + ofstream outFile("distortion.txt"); | |
713 | + | |
714 | + //set the parameters for the distortion simulation | |
715 | + float step = 0.001; | |
716 | + | |
717 | + oNAi = 0.2; | |
718 | + oNAo = 0.5; | |
719 | + | |
720 | + //compute the optical parameters | |
721 | + //compute Nl (maximum order of the spectrum) | |
722 | + int Nl = computeNl(); | |
723 | + | |
724 | + float* alpha = (float*)malloc(sizeof(float)*(Nl + 1)); | |
725 | + float cAngleI, cAngleO, oAngleI, oAngleO, I0; | |
726 | + | |
727 | + //allocate space for a list of wavelengths | |
728 | + int nLambda = EtaK.size(); | |
729 | + | |
730 | + //allocate temporary space for the spectrum | |
731 | + float* I = (float*)malloc(sizeof(float) * EtaK.size()); | |
732 | + | |
733 | + //calculate the material parameters | |
734 | + //allocate space for the 2D array (Nl x nu) of scattering coefficients | |
735 | + complex<float>* B = (complex<float>*)malloc(sizeof(complex<float>) * Nl * nLambda); | |
736 | + computeBArray(B, Nl, nLambda); | |
737 | + | |
738 | + | |
739 | + | |
740 | + float D; | |
741 | + float e = 0.001; | |
742 | + for(float i=0.0; i<=oNAo-step; i+=step) | |
743 | + { | |
744 | + | |
745 | + for(float o=oNAi+step; o<=1.0; o+=step) | |
746 | + { | |
747 | + | |
748 | + | |
749 | + //set the current optical parameters | |
750 | + cNAi = i; | |
751 | + cNAo = o; | |
752 | + | |
753 | + //compute the optical parameters | |
754 | + computeOpticalParameters(cAngleI, cAngleO, oAngleI, oAngleO, I0, alpha, Nl); | |
755 | + | |
756 | + //simulate the spectrum | |
757 | + cudaComputeSpectrum(I, (float*)B, alpha, Nl, nLambda, oAngleI, oAngleO, cAngleI, cAngleO, objectiveSamples); | |
758 | + updateSpectrum(I, I0, nLambda); | |
759 | + | |
760 | + if(dispSimType == AbsorbanceSpecType) | |
761 | + { | |
762 | + if(i + e >= o || i + e >= oNAo || oNAi + e >= o || oNAi + e >= oNAo) | |
763 | + D = 0.0; | |
764 | + else | |
765 | + D = absorbanceDistortion(); | |
766 | + } | |
767 | + else | |
768 | + { | |
769 | + if(i >= o || oNAi >= oNAo) | |
770 | + D=0; | |
771 | + else | |
772 | + D = intensityDistortion(); | |
773 | + } | |
774 | + outFile<<D<<" "; | |
775 | + } | |
776 | + outFile<<endl; | |
777 | + cout<<i<<endl; | |
778 | + } | |
779 | + outFile.close(); | |
780 | +} | |
0 | 781 | \ No newline at end of file | ... | ... |
1 | +++ a/cudaKK.h | |
1 | +__device__ float g(float v0, float v1) | |
2 | +{ | |
3 | + return (v0 + v1)*log(abs(v0+v1)) + (v0-v1)*log(abs(v0-v1)); | |
4 | +} | |
5 | + | |
6 | +__device__ float hfin(float v0, float v1, float dv) | |
7 | +{ | |
8 | + float e = 0.001; | |
9 | + float t0 = g(v0+e, v1-dv)/dv; | |
10 | + float t1 = 2*g(v0+e, v1)/dv; | |
11 | + float t2 = g(v0+e, v1+dv)/dv; | |
12 | + | |
13 | + return -1.0/PI * (t0 - t1 + t2); | |
14 | +} | |
15 | + | |
16 | +__global__ void devKramersKronig(float* gpuN, float* gpuK, int numVals, float nuStart, float nuEnd, float nOffset) | |
17 | +{ | |
18 | + int i = blockIdx.x * blockDim.x + threadIdx.x; | |
19 | + | |
20 | + if(i >= numVals) return; | |
21 | + float nuDelta = (nuEnd - nuStart)/(numVals - 1); | |
22 | + | |
23 | + float nu = nuStart + i*nuDelta; | |
24 | + float n = 0.0; | |
25 | + float jNu; | |
26 | + float 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(float* cpuN, float* cpuK, int nVals, float nuStart, float nuEnd, float nOffset) | |
39 | +{ | |
40 | + float* gpuK; | |
41 | + HANDLE_ERROR(cudaMalloc(&gpuK, sizeof(float)*nVals)); | |
42 | + HANDLE_ERROR(cudaMemcpy(gpuK, cpuK, sizeof(float)*nVals, cudaMemcpyHostToDevice)); | |
43 | + float* gpuN; | |
44 | + HANDLE_ERROR(cudaMalloc(&gpuN, sizeof(float)*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(float)*nVals, cudaMemcpyDeviceToHost)); | |
51 | + | |
52 | + //free resources | |
53 | + HANDLE_ERROR(cudaFree(gpuK)); | |
54 | + HANDLE_ERROR(cudaFree(gpuN)); | |
55 | +} | |
56 | + | |
57 | +__global__ void devComputeSpectrum(float* I, float2* B, float* alpha, int Nl, | |
58 | + int nSamples, float oThetaI, float oThetaO, float cThetaI, float cThetaO) | |
59 | +{ | |
60 | + int i = blockIdx.x * blockDim.x + threadIdx.x; | |
61 | + | |
62 | + //compute the delta-theta value | |
63 | + float dTheta = (oThetaO - oThetaI)/nSamples; | |
64 | + | |
65 | + //allocate space for the Legendre polynomials | |
66 | + float Ptheta[2]; | |
67 | + | |
68 | + float cosTheta, theta; | |
69 | + cuComplex Us; | |
70 | + cuComplex UsSample; | |
71 | + cuComplex U; | |
72 | + cuComplex Ui; | |
73 | + Ui.x = 2*PI; | |
74 | + Ui.y = 0.0; | |
75 | + cuComplex numer; | |
76 | + numer.x = 0.0; | |
77 | + cuComplex exp_numer; | |
78 | + cuComplex iL; | |
79 | + cuComplex imag; | |
80 | + imag.x = 0.0; imag.y = 1.0; | |
81 | + float realFac; | |
82 | + cuComplex complexFac; | |
83 | + float PlTheta; | |
84 | + float 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 | + //val = cMag(Us); | |
135 | + //if(val > maxVal) | |
136 | + // maxVal = val; | |
137 | + | |
138 | + //Us += B[l] * exp(numer) * Ptheta[l] * alpha * M * pow(complex<float>(0.0, 1.0), l); | |
139 | + | |
140 | + } | |
141 | + | |
142 | + //sum the scattered and incident fields | |
143 | + if(theta >= cThetaI && theta <= cThetaO) | |
144 | + U = cAdd(Us, 2*PI); | |
145 | + else | |
146 | + U = Us; | |
147 | + Isum += (U.x*U.x + U.y*U.y) * sin(theta) * 2 * PI * dTheta; | |
148 | + } | |
149 | + | |
150 | + I[i] = Isum; | |
151 | +} | |
152 | + | |
153 | +void cudaComputeSpectrum(float* cpuI, float* cpuB, float* cpuAlpha, | |
154 | + int Nl, int nLambda, float oThetaI, float oThetaO, float cThetaI, float cThetaO, int nSamples) | |
155 | +{ | |
156 | + //copy everything to the GPU | |
157 | + float2* gpuB; | |
158 | + HANDLE_ERROR(cudaMalloc(&gpuB, sizeof(float2) * nLambda * Nl)); | |
159 | + HANDLE_ERROR(cudaMemcpy(gpuB, cpuB, sizeof(float2) * nLambda * Nl, cudaMemcpyHostToDevice)); | |
160 | + | |
161 | + float* gpuAlpha; | |
162 | + HANDLE_ERROR(cudaMalloc(&gpuAlpha, sizeof(float) * Nl)); | |
163 | + HANDLE_ERROR(cudaMemcpy(gpuAlpha, cpuAlpha, sizeof(float) * Nl, cudaMemcpyHostToDevice)); | |
164 | + | |
165 | + float* gpuI; | |
166 | + HANDLE_ERROR(cudaMalloc(&gpuI, sizeof(float) * nLambda)); | |
167 | + | |
168 | + | |
169 | + //call the kernel to compute the spectrum | |
170 | + dim3 block(BLOCK_SIZE*BLOCK_SIZE); | |
171 | + dim3 grid(nLambda/block.x + 1); | |
172 | + | |
173 | + //devComputeSpectrum | |
174 | + devComputeSpectrum<<<grid, block>>>(gpuI, (float2*)gpuB, gpuAlpha, Nl, | |
175 | + nSamples, oThetaI, oThetaO, cThetaI, cThetaO); | |
176 | + | |
177 | + HANDLE_ERROR(cudaMemcpy(cpuI, gpuI, sizeof(float) * nLambda, cudaMemcpyDeviceToHost)); | |
178 | + | |
179 | + HANDLE_ERROR(cudaFree(gpuB)); | |
180 | + HANDLE_ERROR(cudaFree(gpuAlpha)); | |
181 | + HANDLE_ERROR(cudaFree(gpuI)); | |
182 | + | |
183 | + | |
184 | + | |
185 | + | |
186 | +} | |
0 | 187 | \ No newline at end of file | ... | ... |
1 | +++ a/cudaMain.cu | |
1 | +#include "cuComplex.h" | |
2 | +#include "cudaHandleError.h" | |
3 | + | |
4 | + | |
5 | +#define PI 3.14159 | |
6 | +#define BLOCK_SIZE 16 | |
7 | + | |
8 | +__device__ cuComplex cMult(cuComplex a, cuComplex b) | |
9 | +{ | |
10 | + cuComplex 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__ cuComplex cMult(cuComplex a, float b) | |
18 | +{ | |
19 | + cuComplex result; | |
20 | + result.x = a.x * b; | |
21 | + result.y = a.y * b; | |
22 | + | |
23 | + return result; | |
24 | +} | |
25 | + | |
26 | +__device__ cuComplex cAdd(cuComplex a, cuComplex b) | |
27 | +{ | |
28 | + cuComplex r; | |
29 | + r.x = a.x + b.x; | |
30 | + r.y = a.y + b.y; | |
31 | + | |
32 | + return r; | |
33 | +} | |
34 | + | |
35 | +__device__ cuComplex cAdd(cuComplex a, float b) | |
36 | +{ | |
37 | + cuComplex r; | |
38 | + r.x = a.x + b; | |
39 | + r.y = a.y; | |
40 | + | |
41 | + return r; | |
42 | +} | |
43 | + | |
44 | +__device__ cuComplex cExp(cuComplex a) | |
45 | +{ | |
46 | + cuComplex 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__ float cMag(cuComplex a) | |
55 | +{ | |
56 | + float r = sqrt(a.x * a.x + a.y * a.y); | |
57 | + return r; | |
58 | +} | |
59 | + | |
60 | +#include "cudaKK.h" | |
61 | + | ... | ... |
1 | +++ a/eta_TolueneK.txt | |
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 | |
0 | 1602 | \ No newline at end of file | ... | ... |
1 | +++ a/eta_TolueneN.txt | |
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 | |
0 | 1602 | \ No newline at end of file | ... | ... |
1 | +++ a/globals.h | |
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 | +struct SpecPair{ | |
12 | + float nu; | |
13 | + float A; | |
14 | +}; | |
15 | + | |
16 | +struct Material{ | |
17 | + vector<float> nu; | |
18 | + vector<complex<float>> eta; | |
19 | + string name; | |
20 | +}; | |
21 | + | |
22 | +enum SpecType {AbsorbanceSpecType, IntensitySpecType}; | |
23 | +enum OpticsType {TransmissionOpticsType, ReflectionOpticsType}; | |
24 | + | |
25 | +extern PerformanceData PD; | |
26 | + | |
27 | + | |
28 | +extern vector<vector<SpecPair>> RefSpectrum; | |
29 | +extern int currentSpec; | |
30 | +extern vector<SpecPair> SimSpectrum; | |
31 | + | |
32 | +//IO Functions | |
33 | +vector<SpecPair> LoadSpectrum(string filename); | |
34 | +vector<SpecPair> SetReferenceSpectrum(char* text); | |
35 | +void SaveState(); | |
36 | +void LoadState(); | |
37 | +void SetDefaults(); | |
38 | +void SaveSimulation(string fileName); | |
39 | +void SaveK(string fileName); | |
40 | +void SaveN(string fileName); | |
41 | +void LoadMaterial(string fileNameK, string fileNameN, string materialName); | |
42 | +void LoadMaterial(string fileNameK, string materialName); | |
43 | + | |
44 | +//Display Functions | |
45 | +void FitDisplay(); | |
46 | + | |
47 | +//Update Functions | |
48 | +void UpdateDisplay(); | |
49 | +void SimulateSpectrum(); | |
50 | +void cudaKramersKronig(float* cpuN, float* cpuK, int nVals, float nuStart, float nuEnd, float nOffset); | |
51 | +void cudaComputeSpectrum(float* cpuI, float* cpuB, float* alpha, | |
52 | + int Nl, int nLambda, float oThetaI, float oThetaO, float cThetaI, float cThetaO, int nSamples); | |
53 | + | |
54 | +//Window Parameters | |
55 | +extern float nuMin; | |
56 | +extern float nuMax; | |
57 | +extern float aMin; | |
58 | +extern float aMax; | |
59 | +extern float dNu; | |
60 | +extern bool dispRefSpec; | |
61 | +extern bool dispSimSpec; | |
62 | +extern bool dispSimK; | |
63 | +extern bool dispMatK; | |
64 | +extern bool dispSimN; | |
65 | +extern bool dispMatN; | |
66 | +extern SpecType dispSimType; | |
67 | +extern bool dispNormalize; | |
68 | +extern float dispNormFactor; | |
69 | + | |
70 | + | |
71 | +extern float dispScaleK; | |
72 | +extern float dispScaleN; | |
73 | + | |
74 | +//material parameters | |
75 | +extern float radius; | |
76 | +extern float baseIR; | |
77 | +extern float cA; | |
78 | +extern vector<SpecPair> EtaK; | |
79 | +extern vector<SpecPair> EtaN; | |
80 | +extern bool applyMaterial; | |
81 | +//extern vector<SpecPair> KMaterial; | |
82 | +//extern vector<SpecPair> NMaterial; | |
83 | +extern vector<Material> MaterialList; | |
84 | +extern int currentMaterial; | |
85 | +void ChangeAbsorbance(); | |
86 | +void SetMaterial(); | |
87 | + | |
88 | +//optical parameters | |
89 | +extern float cNAi; | |
90 | +extern float cNAo; | |
91 | +extern float oNAi; | |
92 | +extern float oNAo; | |
93 | +extern OpticsType opticsMode; | |
94 | +extern bool pointDetector; | |
95 | +extern int objectiveSamples; | |
96 | + | |
97 | +//fitting parameters | |
98 | +extern float minMSE; | |
99 | +extern int maxFitIter; | |
100 | +void EstimateMaterial(); | |
101 | +extern float scaleI0; | |
102 | +extern float refSlope; | |
103 | + | |
104 | +float ComputeDistortion(); | |
105 | +void MinimizeDistortion(); | |
106 | + | |
107 | + | |
108 | +#endif | |
0 | 109 | \ No newline at end of file | ... | ... |
1 | +++ a/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(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_clicked(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 | + opticsMode = ReflectionOpticsType; | |
218 | + SimulateSpectrum(); | |
219 | + UpdateDisplay(); | |
220 | + } | |
221 | + void on_chkPointDetector_clicked(bool b){ | |
222 | + if(b) | |
223 | + { | |
224 | + pointDetector = true; | |
225 | + ui.spinObjectiveSamples->setEnabled(false); | |
226 | + } | |
227 | + else | |
228 | + { | |
229 | + pointDetector = false; | |
230 | + ui.spinObjectiveSamples->setEnabled(true); | |
231 | + } | |
232 | + | |
233 | + SimulateSpectrum(); | |
234 | + UpdateDisplay(); | |
235 | + } | |
236 | + | |
237 | + void on_spinObjectiveSamples_valueChanged(int i){ | |
238 | + objectiveSamples = i; | |
239 | + SimulateSpectrum(); | |
240 | + UpdateDisplay(); | |
241 | + } | |
242 | + | |
243 | + //Fitting | |
244 | + void on_spinMaxIter_valueChanged(int i){ | |
245 | + maxFitIter = i; | |
246 | + } | |
247 | + void on_spinError_valueChanged(double d){ | |
248 | + minMSE = d; | |
249 | + } | |
250 | + void on_spinI0Scale_valueChanged(double d){ | |
251 | + scaleI0 = d; | |
252 | + SimulateSpectrum(); | |
253 | + UpdateDisplay(); | |
254 | + } | |
255 | + void on_spinRefSlope_valueChanged(double d){ | |
256 | + refSlope = d; | |
257 | + UpdateDisplay(); | |
258 | + } | |
259 | + | |
260 | + //display settings | |
261 | + | |
262 | + //Buttons | |
263 | + void on_btnFit_clicked(){ | |
264 | + FitDisplay(); | |
265 | + refreshUI(); | |
266 | + } | |
267 | + void on_btnSave_clicked(){ | |
268 | + SaveState(); | |
269 | + } | |
270 | + void on_btnReset_clicked(){ | |
271 | + SetDefaults(); | |
272 | + SimulateSpectrum(); | |
273 | + UpdateDisplay(); | |
274 | + refreshUI(); | |
275 | + } | |
276 | + void on_btnResetK_clicked(){ | |
277 | + ChangeAbsorbance(); | |
278 | + SimulateSpectrum(); | |
279 | + UpdateDisplay(); | |
280 | + } | |
281 | + void on_btnEstimateK_clicked(){ | |
282 | + EstimateMaterial(); | |
283 | + SimulateSpectrum(); | |
284 | + UpdateDisplay(); | |
285 | + } | |
286 | + void on_btnDistortion_clicked(){ | |
287 | + //ComputeDistortion(); | |
288 | + MinimizeDistortion(); | |
289 | + } | |
290 | + void on_btnTimings_clicked(){ | |
291 | + PD.PrintResults(cout); | |
292 | + } | |
293 | + | |
294 | + //menu items | |
295 | + void on_mnuLoadReference_triggered(){ | |
296 | + QString fileName = QFileDialog::getOpenFileName(this, tr("Open Reference Spectrum")); | |
297 | + | |
298 | + if(fileName != QString::null){ | |
299 | + RefSpectrum.clear(); | |
300 | + RefSpectrum.push_back(LoadSpectrum(fileName.toAscii().data())); | |
301 | + } | |
302 | + UpdateDisplay(); | |
303 | + } | |
304 | + | |
305 | + void on_mnuLoadMaterial_triggered(){ | |
306 | + | |
307 | + //first load the imaginary part | |
308 | + QString kFileName = QFileDialog::getOpenFileName(this, tr("Open Imaginary (k) Spectrum")); | |
309 | + | |
310 | + //exit if no file was selected | |
311 | + if(kFileName == QString::null) | |
312 | + return; | |
313 | + | |
314 | + QString nFileName = QFileDialog::getOpenFileName(this, tr("Open Imaginary (n) Spectrum")); | |
315 | + | |
316 | + //request the material name | |
317 | + QString matName = QInputDialog::getText(this, tr("Material Name"), tr("Enter material name:")); | |
318 | + | |
319 | + //if a real part was given, load both | |
320 | + if(nFileName != QString::null) | |
321 | + LoadMaterial(kFileName.toAscii().data(), nFileName.toAscii().data(), matName.toAscii().data()); | |
322 | + else | |
323 | + LoadMaterial(kFileName.toAscii().data(), matName.toAscii().data()); | |
324 | + | |
325 | + //add the new material to the combo box | |
326 | + refreshUI(); | |
327 | + } | |
328 | + | |
329 | + void on_mnuSaveSim_triggered(){ | |
330 | + //first load the imaginary part | |
331 | + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Simulated Spectrum")); | |
332 | + SaveSimulation(fileName.toAscii().data()); | |
333 | + } | |
334 | + | |
335 | + void on_mnuSaveK_triggered(){ | |
336 | + //first load the imaginary part | |
337 | + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Imaginary Index of Refraction (k)")); | |
338 | + SaveK(fileName.toAscii().data()); | |
339 | + } | |
340 | + | |
341 | + void on_mnuSaveN_triggered(){ | |
342 | + //first load the imaginary part | |
343 | + QString fileName = QFileDialog::getSaveFileName(this, tr("Save Real Index of Refraction (n)")); | |
344 | + SaveN(fileName.toAscii().data()); | |
345 | + } | |
346 | + | |
347 | + | |
348 | + | |
349 | +}; | |
350 | + | |
351 | +#endif // INTERACTIVEMIE_H | ... | ... |
1 | +++ a/interactivemie.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="minimum"> | |
354 | + <double>-9999.000000000000000</double> | |
355 | + </property> | |
356 | + <property name="maximum"> | |
357 | + <double>3.000000000000000</double> | |
358 | + </property> | |
359 | + <property name="singleStep"> | |
360 | + <double>0.100000000000000</double> | |
361 | + </property> | |
362 | + </widget> | |
363 | + <widget class="QSpinBox" name="spinNuMin"> | |
364 | + <property name="enabled"> | |
365 | + <bool>false</bool> | |
366 | + </property> | |
367 | + <property name="geometry"> | |
368 | + <rect> | |
369 | + <x>10</x> | |
370 | + <y>70</y> | |
371 | + <width>61</width> | |
372 | + <height>22</height> | |
373 | + </rect> | |
374 | + </property> | |
375 | + <property name="maximum"> | |
376 | + <number>4000</number> | |
377 | + </property> | |
378 | + <property name="singleStep"> | |
379 | + <number>10</number> | |
380 | + </property> | |
381 | + <property name="value"> | |
382 | + <number>800</number> | |
383 | + </property> | |
384 | + </widget> | |
385 | + <widget class="QLabel" name="label_2"> | |
386 | + <property name="geometry"> | |
387 | + <rect> | |
388 | + <x>110</x> | |
389 | + <y>20</y> | |
390 | + <width>16</width> | |
391 | + <height>16</height> | |
392 | + </rect> | |
393 | + </property> | |
394 | + <property name="text"> | |
395 | + <string>A</string> | |
396 | + </property> | |
397 | + </widget> | |
398 | + <widget class="QDoubleSpinBox" name="spinAMax"> | |
399 | + <property name="geometry"> | |
400 | + <rect> | |
401 | + <x>80</x> | |
402 | + <y>40</y> | |
403 | + <width>71</width> | |
404 | + <height>22</height> | |
405 | + </rect> | |
406 | + </property> | |
407 | + <property name="minimum"> | |
408 | + <double>-9999.000000000000000</double> | |
409 | + </property> | |
410 | + <property name="maximum"> | |
411 | + <double>9999.000000000000000</double> | |
412 | + </property> | |
413 | + <property name="singleStep"> | |
414 | + <double>0.100000000000000</double> | |
415 | + </property> | |
416 | + <property name="value"> | |
417 | + <double>1.000000000000000</double> | |
418 | + </property> | |
419 | + </widget> | |
420 | + <widget class="QSpinBox" name="spinNuMax"> | |
421 | + <property name="enabled"> | |
422 | + <bool>false</bool> | |
423 | + </property> | |
424 | + <property name="geometry"> | |
425 | + <rect> | |
426 | + <x>10</x> | |
427 | + <y>40</y> | |
428 | + <width>61</width> | |
429 | + <height>22</height> | |
430 | + </rect> | |
431 | + </property> | |
432 | + <property name="maximum"> | |
433 | + <number>4000</number> | |
434 | + </property> | |
435 | + <property name="singleStep"> | |
436 | + <number>10</number> | |
437 | + </property> | |
438 | + <property name="value"> | |
439 | + <number>4000</number> | |
440 | + </property> | |
441 | + </widget> | |
442 | + <widget class="QLabel" name="label"> | |
443 | + <property name="geometry"> | |
444 | + <rect> | |
445 | + <x>20</x> | |
446 | + <y>20</y> | |
447 | + <width>61</width> | |
448 | + <height>16</height> | |
449 | + </rect> | |
450 | + </property> | |
451 | + <property name="text"> | |
452 | + <string>nu (cm^-1)</string> | |
453 | + </property> | |
454 | + </widget> | |
455 | + <widget class="QCheckBox" name="chkDisplayRefSpec"> | |
456 | + <property name="geometry"> | |
457 | + <rect> | |
458 | + <x>10</x> | |
459 | + <y>230</y> | |
460 | + <width>131</width> | |
461 | + <height>17</height> | |
462 | + </rect> | |
463 | + </property> | |
464 | + <property name="text"> | |
465 | + <string>Reference Spectrum</string> | |
466 | + </property> | |
467 | + <property name="checked"> | |
468 | + <bool>true</bool> | |
469 | + </property> | |
470 | + </widget> | |
471 | + <widget class="QCheckBox" name="chkDisplaySimSpec"> | |
472 | + <property name="geometry"> | |
473 | + <rect> | |
474 | + <x>10</x> | |
475 | + <y>170</y> | |
476 | + <width>131</width> | |
477 | + <height>17</height> | |
478 | + </rect> | |
479 | + </property> | |
480 | + <property name="text"> | |
481 | + <string>Simulated Spectrum</string> | |
482 | + </property> | |
483 | + <property name="checked"> | |
484 | + <bool>true</bool> | |
485 | + </property> | |
486 | + </widget> | |
487 | + <widget class="QCheckBox" name="chkDisplaySimK"> | |
488 | + <property name="geometry"> | |
489 | + <rect> | |
490 | + <x>10</x> | |
491 | + <y>280</y> | |
492 | + <width>131</width> | |
493 | + <height>17</height> | |
494 | + </rect> | |
495 | + </property> | |
496 | + <property name="text"> | |
497 | + <string>Simulated K</string> | |
498 | + </property> | |
499 | + <property name="checked"> | |
500 | + <bool>false</bool> | |
501 | + </property> | |
502 | + </widget> | |
503 | + <widget class="QDoubleSpinBox" name="spinI0Scale"> | |
504 | + <property name="geometry"> | |
505 | + <rect> | |
506 | + <x>80</x> | |
507 | + <y>100</y> | |
508 | + <width>71</width> | |
509 | + <height>22</height> | |
510 | + </rect> | |
511 | + </property> | |
512 | + <property name="minimum"> | |
513 | + <double>-99.989999999999995</double> | |
514 | + </property> | |
515 | + <property name="singleStep"> | |
516 | + <double>0.010000000000000</double> | |
517 | + </property> | |
518 | + </widget> | |
519 | + <widget class="QLabel" name="label_10"> | |
520 | + <property name="geometry"> | |
521 | + <rect> | |
522 | + <x>10</x> | |
523 | + <y>100</y> | |
524 | + <width>71</width> | |
525 | + <height>16</height> | |
526 | + </rect> | |
527 | + </property> | |
528 | + <property name="text"> | |
529 | + <string>I0 Scale</string> | |
530 | + </property> | |
531 | + </widget> | |
532 | + <widget class="QDoubleSpinBox" name="spinRefSlope"> | |
533 | + <property name="enabled"> | |
534 | + <bool>false</bool> | |
535 | + </property> | |
536 | + <property name="geometry"> | |
537 | + <rect> | |
538 | + <x>80</x> | |
539 | + <y>130</y> | |
540 | + <width>71</width> | |
541 | + <height>22</height> | |
542 | + </rect> | |
543 | + </property> | |
544 | + <property name="decimals"> | |
545 | + <number>6</number> | |
546 | + </property> | |
547 | + <property name="minimum"> | |
548 | + <double>-99.989999999999995</double> | |
549 | + </property> | |
550 | + <property name="singleStep"> | |
551 | + <double>0.000010000000000</double> | |
552 | + </property> | |
553 | + </widget> | |
554 | + <widget class="QLabel" name="label_11"> | |
555 | + <property name="geometry"> | |
556 | + <rect> | |
557 | + <x>10</x> | |
558 | + <y>130</y> | |
559 | + <width>71</width> | |
560 | + <height>16</height> | |
561 | + </rect> | |
562 | + </property> | |
563 | + <property name="text"> | |
564 | + <string>Ref Slope</string> | |
565 | + </property> | |
566 | + </widget> | |
567 | + <widget class="QCheckBox" name="chkDisplayMatK"> | |
568 | + <property name="geometry"> | |
569 | + <rect> | |
570 | + <x>10</x> | |
571 | + <y>300</y> | |
572 | + <width>91</width> | |
573 | + <height>17</height> | |
574 | + </rect> | |
575 | + </property> | |
576 | + <property name="text"> | |
577 | + <string>Material K</string> | |
578 | + </property> | |
579 | + </widget> | |
580 | + <widget class="QCheckBox" name="chkDisplaySimN"> | |
581 | + <property name="geometry"> | |
582 | + <rect> | |
583 | + <x>10</x> | |
584 | + <y>330</y> | |
585 | + <width>131</width> | |
586 | + <height>17</height> | |
587 | + </rect> | |
588 | + </property> | |
589 | + <property name="text"> | |
590 | + <string>Simulated N</string> | |
591 | + </property> | |
592 | + <property name="checked"> | |
593 | + <bool>false</bool> | |
594 | + </property> | |
595 | + </widget> | |
596 | + <widget class="QCheckBox" name="chkDisplayMatN"> | |
597 | + <property name="geometry"> | |
598 | + <rect> | |
599 | + <x>10</x> | |
600 | + <y>350</y> | |
601 | + <width>91</width> | |
602 | + <height>17</height> | |
603 | + </rect> | |
604 | + </property> | |
605 | + <property name="text"> | |
606 | + <string>Material N</string> | |
607 | + </property> | |
608 | + </widget> | |
609 | + <widget class="QDoubleSpinBox" name="spinDispScaleK"> | |
610 | + <property name="geometry"> | |
611 | + <rect> | |
612 | + <x>90</x> | |
613 | + <y>290</y> | |
614 | + <width>51</width> | |
615 | + <height>22</height> | |
616 | + </rect> | |
617 | + </property> | |
618 | + <property name="singleStep"> | |
619 | + <double>0.100000000000000</double> | |
620 | + </property> | |
621 | + </widget> | |
622 | + <widget class="QDoubleSpinBox" name="spinDispScaleN"> | |
623 | + <property name="geometry"> | |
624 | + <rect> | |
625 | + <x>90</x> | |
626 | + <y>340</y> | |
627 | + <width>51</width> | |
628 | + <height>22</height> | |
629 | + </rect> | |
630 | + </property> | |
631 | + <property name="singleStep"> | |
632 | + <double>0.100000000000000</double> | |
633 | + </property> | |
634 | + </widget> | |
635 | + <widget class="QCheckBox" name="chkNormalize"> | |
636 | + <property name="geometry"> | |
637 | + <rect> | |
638 | + <x>10</x> | |
639 | + <y>380</y> | |
640 | + <width>70</width> | |
641 | + <height>17</height> | |
642 | + </rect> | |
643 | + </property> | |
644 | + <property name="text"> | |
645 | + <string>Normalize</string> | |
646 | + </property> | |
647 | + </widget> | |
648 | + <widget class="QRadioButton" name="radDisplayAbsorbance"> | |
649 | + <property name="geometry"> | |
650 | + <rect> | |
651 | + <x>50</x> | |
652 | + <y>190</y> | |
653 | + <width>82</width> | |
654 | + <height>17</height> | |
655 | + </rect> | |
656 | + </property> | |
657 | + <property name="text"> | |
658 | + <string>Absorbance</string> | |
659 | + </property> | |
660 | + <property name="checked"> | |
661 | + <bool>true</bool> | |
662 | + </property> | |
663 | + </widget> | |
664 | + <widget class="QRadioButton" name="radDisplayIntensity"> | |
665 | + <property name="geometry"> | |
666 | + <rect> | |
667 | + <x>50</x> | |
668 | + <y>210</y> | |
669 | + <width>82</width> | |
670 | + <height>17</height> | |
671 | + </rect> | |
672 | + </property> | |
673 | + <property name="text"> | |
674 | + <string>Intensity</string> | |
675 | + </property> | |
676 | + </widget> | |
677 | + <widget class="QDoubleSpinBox" name="spinNormFactor"> | |
678 | + <property name="geometry"> | |
679 | + <rect> | |
680 | + <x>90</x> | |
681 | + <y>380</y> | |
682 | + <width>62</width> | |
683 | + <height>22</height> | |
684 | + </rect> | |
685 | + </property> | |
686 | + <property name="singleStep"> | |
687 | + <double>1.000000000000000</double> | |
688 | + </property> | |
689 | + <property name="value"> | |
690 | + <double>1.000000000000000</double> | |
691 | + </property> | |
692 | + </widget> | |
693 | + </widget> | |
694 | + <widget class="QPushButton" name="btnFit"> | |
695 | + <property name="geometry"> | |
696 | + <rect> | |
697 | + <x>180</x> | |
698 | + <y>150</y> | |
699 | + <width>75</width> | |
700 | + <height>23</height> | |
701 | + </rect> | |
702 | + </property> | |
703 | + <property name="text"> | |
704 | + <string>Fit</string> | |
705 | + </property> | |
706 | + </widget> | |
707 | + <widget class="QPushButton" name="btnSave"> | |
708 | + <property name="geometry"> | |
709 | + <rect> | |
710 | + <x>180</x> | |
711 | + <y>180</y> | |
712 | + <width>75</width> | |
713 | + <height>23</height> | |
714 | + </rect> | |
715 | + </property> | |
716 | + <property name="text"> | |
717 | + <string>Save</string> | |
718 | + </property> | |
719 | + </widget> | |
720 | + <widget class="QPushButton" name="btnReset"> | |
721 | + <property name="geometry"> | |
722 | + <rect> | |
723 | + <x>180</x> | |
724 | + <y>210</y> | |
725 | + <width>75</width> | |
726 | + <height>23</height> | |
727 | + </rect> | |
728 | + </property> | |
729 | + <property name="text"> | |
730 | + <string>Reset</string> | |
731 | + </property> | |
732 | + </widget> | |
733 | + <widget class="QPushButton" name="btnDistortion"> | |
734 | + <property name="enabled"> | |
735 | + <bool>true</bool> | |
736 | + </property> | |
737 | + <property name="geometry"> | |
738 | + <rect> | |
739 | + <x>180</x> | |
740 | + <y>240</y> | |
741 | + <width>75</width> | |
742 | + <height>23</height> | |
743 | + </rect> | |
744 | + </property> | |
745 | + <property name="text"> | |
746 | + <string>Distortion</string> | |
747 | + </property> | |
748 | + </widget> | |
749 | + <widget class="QPushButton" name="btnTimings"> | |
750 | + <property name="geometry"> | |
751 | + <rect> | |
752 | + <x>180</x> | |
753 | + <y>270</y> | |
754 | + <width>75</width> | |
755 | + <height>23</height> | |
756 | + </rect> | |
757 | + </property> | |
758 | + <property name="text"> | |
759 | + <string>Timings</string> | |
760 | + </property> | |
761 | + </widget> | |
762 | + <widget class="QGroupBox" name="groupBox_4"> | |
763 | + <property name="geometry"> | |
764 | + <rect> | |
765 | + <x>20</x> | |
766 | + <y>320</y> | |
767 | + <width>201</width> | |
768 | + <height>111</height> | |
769 | + </rect> | |
770 | + </property> | |
771 | + <property name="title"> | |
772 | + <string>Fit Material</string> | |
773 | + </property> | |
774 | + <widget class="QSpinBox" name="spinMaxIter"> | |
775 | + <property name="geometry"> | |
776 | + <rect> | |
777 | + <x>110</x> | |
778 | + <y>70</y> | |
779 | + <width>61</width> | |
780 | + <height>22</height> | |
781 | + </rect> | |
782 | + </property> | |
783 | + <property name="maximum"> | |
784 | + <number>9999</number> | |
785 | + </property> | |
786 | + <property name="value"> | |
787 | + <number>20</number> | |
788 | + </property> | |
789 | + </widget> | |
790 | + <widget class="QLabel" name="label_3"> | |
791 | + <property name="geometry"> | |
792 | + <rect> | |
793 | + <x>40</x> | |
794 | + <y>50</y> | |
795 | + <width>46</width> | |
796 | + <height>13</height> | |
797 | + </rect> | |
798 | + </property> | |
799 | + <property name="text"> | |
800 | + <string>Error</string> | |
801 | + </property> | |
802 | + </widget> | |
803 | + <widget class="QDoubleSpinBox" name="spinError"> | |
804 | + <property name="geometry"> | |
805 | + <rect> | |
806 | + <x>20</x> | |
807 | + <y>70</y> | |
808 | + <width>71</width> | |
809 | + <height>22</height> | |
810 | + </rect> | |
811 | + </property> | |
812 | + <property name="decimals"> | |
813 | + <number>7</number> | |
814 | + </property> | |
815 | + <property name="maximum"> | |
816 | + <double>0.100000000000000</double> | |
817 | + </property> | |
818 | + <property name="singleStep"> | |
819 | + <double>0.000100000000000</double> | |
820 | + </property> | |
821 | + <property name="value"> | |
822 | + <double>0.000100000000000</double> | |
823 | + </property> | |
824 | + </widget> | |
825 | + <widget class="QPushButton" name="btnEstimateK"> | |
826 | + <property name="geometry"> | |
827 | + <rect> | |
828 | + <x>20</x> | |
829 | + <y>20</y> | |
830 | + <width>75</width> | |
831 | + <height>23</height> | |
832 | + </rect> | |
833 | + </property> | |
834 | + <property name="text"> | |
835 | + <string>Estimate K</string> | |
836 | + </property> | |
837 | + </widget> | |
838 | + <widget class="QPushButton" name="btnResetK"> | |
839 | + <property name="geometry"> | |
840 | + <rect> | |
841 | + <x>100</x> | |
842 | + <y>20</y> | |
843 | + <width>75</width> | |
844 | + <height>23</height> | |
845 | + </rect> | |
846 | + </property> | |
847 | + <property name="text"> | |
848 | + <string>Reset K</string> | |
849 | + </property> | |
850 | + </widget> | |
851 | + <widget class="QLabel" name="label_5"> | |
852 | + <property name="geometry"> | |
853 | + <rect> | |
854 | + <x>120</x> | |
855 | + <y>50</y> | |
856 | + <width>46</width> | |
857 | + <height>13</height> | |
858 | + </rect> | |
859 | + </property> | |
860 | + <property name="text"> | |
861 | + <string>Max Iter</string> | |
862 | + </property> | |
863 | + </widget> | |
864 | + </widget> | |
865 | + </widget> | |
866 | + <widget class="QMenuBar" name="menuBar"> | |
867 | + <property name="geometry"> | |
868 | + <rect> | |
869 | + <x>0</x> | |
870 | + <y>0</y> | |
871 | + <width>464</width> | |
872 | + <height>21</height> | |
873 | + </rect> | |
874 | + </property> | |
875 | + <widget class="QMenu" name="menuFile"> | |
876 | + <property name="title"> | |
877 | + <string>Load</string> | |
878 | + </property> | |
879 | + <addaction name="mnuLoadReference"/> | |
880 | + <addaction name="mnuLoadMaterial"/> | |
881 | + </widget> | |
882 | + <widget class="QMenu" name="menuSave"> | |
883 | + <property name="title"> | |
884 | + <string>Save</string> | |
885 | + </property> | |
886 | + <addaction name="mnuSaveSim"/> | |
887 | + <addaction name="mnuSaveK"/> | |
888 | + <addaction name="mnuSaveN"/> | |
889 | + </widget> | |
890 | + <widget class="QMenu" name="menuVersion_0_6"> | |
891 | + <property name="title"> | |
892 | + <string>Version 0.6</string> | |
893 | + </property> | |
894 | + </widget> | |
895 | + <addaction name="menuFile"/> | |
896 | + <addaction name="menuSave"/> | |
897 | + <addaction name="menuVersion_0_6"/> | |
898 | + </widget> | |
899 | + <widget class="QToolBar" name="mainToolBar"> | |
900 | + <attribute name="toolBarArea"> | |
901 | + <enum>TopToolBarArea</enum> | |
902 | + </attribute> | |
903 | + <attribute name="toolBarBreak"> | |
904 | + <bool>false</bool> | |
905 | + </attribute> | |
906 | + </widget> | |
907 | + <widget class="QStatusBar" name="statusBar"/> | |
908 | + <action name="mnuLoadReference"> | |
909 | + <property name="text"> | |
910 | + <string>Load Reference</string> | |
911 | + </property> | |
912 | + </action> | |
913 | + <action name="mnuLoadMaterial"> | |
914 | + <property name="text"> | |
915 | + <string>Load Material</string> | |
916 | + </property> | |
917 | + </action> | |
918 | + <action name="mnuSaveSim"> | |
919 | + <property name="text"> | |
920 | + <string>Simulation</string> | |
921 | + </property> | |
922 | + </action> | |
923 | + <action name="mnuSaveK"> | |
924 | + <property name="text"> | |
925 | + <string>k</string> | |
926 | + </property> | |
927 | + </action> | |
928 | + <action name="mnuSaveN"> | |
929 | + <property name="text"> | |
930 | + <string>n</string> | |
931 | + </property> | |
932 | + </action> | |
933 | + </widget> | |
934 | + <layoutdefault spacing="6" margin="11"/> | |
935 | + <resources> | |
936 | + <include location="interactivemie.qrc"/> | |
937 | + </resources> | |
938 | + <connections/> | |
939 | +</ui> | ... | ... |
1 | +++ a/kPMMA.txt | |
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 | |
0 | 3202 | \ No newline at end of file | ... | ... |
1 | +++ a/main.cpp | |
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 | +float nuMin = 800; | |
23 | +float nuMax = 4000; | |
24 | +float dNu = 2; | |
25 | + | |
26 | +float aMin = 0; | |
27 | +float aMax = 1; | |
28 | + | |
29 | +float scaleI0 = 1.0; | |
30 | +float 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 | +float dispScaleK = 1.0; | |
39 | +float dispScaleN = 1.0; | |
40 | +SpecType dispSimType = AbsorbanceSpecType; | |
41 | +bool dispNormalize = false; | |
42 | +float dispNormFactor = 1.0; | |
43 | + | |
44 | + | |
45 | +//material parameters | |
46 | +float radius = 4.0f; | |
47 | +float baseIR = 1.49f; | |
48 | +float 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 | +float cNAi = 0.0; | |
57 | +float cNAo = 0.6; | |
58 | +float oNAi = 0.0; | |
59 | +float oNAo = 0.6; | |
60 | +OpticsType opticsMode = TransmissionOpticsType; | |
61 | +bool pointDetector = false; | |
62 | +int objectiveSamples = 200; | |
63 | + | |
64 | +//fitting parameters | |
65 | +float 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((float)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<float> eta; | |
98 | + int j; | |
99 | + for(int i=0; i<KMaterial.size(); i++){ | |
100 | + newMaterial.nu.push_back(KMaterial[i].nu); | |
101 | + eta = complex<float>(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 | + float* k = (float*)malloc(sizeof(float) * KMaterial.size()); | |
118 | + float* n = (float*)malloc(sizeof(float) * KMaterial.size()); | |
119 | + for(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(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<float> eta; | |
136 | + int j; | |
137 | + for(int i=0; i<KMaterial.size(); i++){ | |
138 | + newMaterial.nu.push_back(KMaterial[i].nu); | |
139 | + eta = complex<float>(NMaterial[i].A, KMaterial[i].A); | |
140 | + newMaterial.eta.push_back(eta); | |
141 | + } | |
142 | + | |
143 | + MaterialList.push_back(newMaterial); | |
144 | +} | |
145 | + | |
146 | +void FitDisplay(){ | |
147 | + float minA = 99999.0; | |
148 | + float maxA = -99999.0; | |
149 | + float k, n; | |
150 | + | |
151 | + if(dispSimSpec) | |
152 | + for(int i=0; i<SimSpectrum.size(); i++) | |
153 | + { | |
154 | + if(SimSpectrum[i].A < minA) | |
155 | + minA = SimSpectrum[i].A; | |
156 | + if(SimSpectrum[i].A > maxA) | |
157 | + maxA = SimSpectrum[i].A; | |
158 | + } | |
159 | + | |
160 | + if(dispRefSpec && RefSpectrum.size() > 0) | |
161 | + for(int i=0; i<RefSpectrum[currentSpec].size(); i++) | |
162 | + { | |
163 | + if(RefSpectrum[currentSpec][i].A < minA) | |
164 | + minA = RefSpectrum[currentSpec][i].A; | |
165 | + if(RefSpectrum[currentSpec][i].A > maxA) | |
166 | + maxA = RefSpectrum[currentSpec][i].A; | |
167 | + } | |
168 | + if(dispMatK) | |
169 | + for(int i=0; i<EtaK.size(); i++) | |
170 | + { | |
171 | + k = MaterialList[currentMaterial].eta[i].imag() * dispScaleK; | |
172 | + if(k < minA) | |
173 | + minA = k; | |
174 | + if(k > maxA) | |
175 | + maxA = k; | |
176 | + } | |
177 | + if(dispSimK) | |
178 | + for(int i=0; i<EtaK.size(); i++) | |
179 | + { | |
180 | + k = EtaK[i].A * dispScaleK; | |
181 | + if(k < minA) | |
182 | + minA = k; | |
183 | + if(EtaK[i].A > maxA) | |
184 | + maxA = k; | |
185 | + } | |
186 | + if(dispMatN) | |
187 | + for(int i=0; i<EtaN.size(); i++) | |
188 | + { | |
189 | + n = (MaterialList[currentMaterial].eta[i].real() - baseIR) * dispScaleN; | |
190 | + if(n < minA) | |
191 | + minA = n; | |
192 | + if(n > maxA) | |
193 | + maxA = n; | |
194 | + } | |
195 | + if(dispSimN) | |
196 | + for(int i=0; i<EtaN.size(); i++) | |
197 | + { | |
198 | + n = (EtaN[i].A - baseIR) * dispScaleN; | |
199 | + if(n < minA) | |
200 | + minA = n; | |
201 | + if(n > maxA) | |
202 | + maxA = n; | |
203 | + } | |
204 | + | |
205 | + aMin = minA; | |
206 | + aMax = maxA; | |
207 | + UpdateDisplay(); | |
208 | +} | |
209 | + | |
210 | +void ChangeAbsorbance(){ | |
211 | + | |
212 | + //compute the real part of the index of refraction | |
213 | + | |
214 | + //copy the absorbance values into a linear array | |
215 | + int nSamples = MaterialList[currentMaterial].eta.size(); | |
216 | + float startNu = MaterialList[currentMaterial].nu.front(); | |
217 | + float endNu = MaterialList[currentMaterial].nu.back(); | |
218 | + float* k = (float*)malloc(sizeof(float) * nSamples); | |
219 | + float* n = (float*)malloc(sizeof(float) * nSamples); | |
220 | + for(int i=0; i<nSamples; i++) | |
221 | + k[i] = MaterialList[currentMaterial].eta[i].imag() * cA; | |
222 | + | |
223 | + //NMaterial.clear(); | |
224 | + EtaK.clear(); | |
225 | + EtaN.clear(); | |
226 | + //use Kramers Kronig to determine the real part of the index of refraction | |
227 | + cudaKramersKronig(n, k, nSamples, startNu, endNu, baseIR); | |
228 | + | |
229 | + //copy the real part of the index of refraction into the vector | |
230 | + SpecPair temp; | |
231 | + | |
232 | + //load the imaginary IR from the absorbance data | |
233 | + float nu; | |
234 | + for(int i=0; i<nSamples; i++){ | |
235 | + nu = MaterialList[currentMaterial].nu[i]; | |
236 | + if(nu >= nuMin && nu <= nuMax){ | |
237 | + temp.nu = nu; | |
238 | + temp.A = k[i]; | |
239 | + EtaK.push_back(temp); | |
240 | + //temp.A = NMaterial[i].A; | |
241 | + temp.A = n[i]; | |
242 | + EtaN.push_back(temp); | |
243 | + } | |
244 | + } | |
245 | + | |
246 | + free(k); | |
247 | + free(n); | |
248 | +} | |
249 | + | |
250 | +void SetMaterial() | |
251 | +{ | |
252 | + EtaK.clear(); | |
253 | + EtaN.clear(); | |
254 | + | |
255 | + int nSamples = MaterialList[currentMaterial].eta.size(); | |
256 | + float nu; | |
257 | + SpecPair temp; | |
258 | + for(int i=0; i<nSamples; i++){ | |
259 | + nu = MaterialList[currentMaterial].nu[i]; | |
260 | + if(nu >= nuMin && nu <= nuMax){ | |
261 | + temp.nu = nu; | |
262 | + temp.A = MaterialList[currentMaterial].eta[i].imag(); | |
263 | + EtaK.push_back(temp); | |
264 | + temp.A = MaterialList[currentMaterial].eta[i].real(); | |
265 | + EtaN.push_back(temp); | |
266 | + } | |
267 | + } | |
268 | + cA = 1.0; | |
269 | + | |
270 | +} | |
271 | + | |
272 | + | |
273 | + | |
274 | +int main(int argc, char *argv[]) | |
275 | +{ | |
276 | + | |
277 | + | |
278 | + //load the default project file (any previous optical settings) | |
279 | + LoadState(); | |
280 | + | |
281 | + //load the default materials | |
282 | + LoadMaterial("eta_TolueneK.txt", "eta_TolueneN.txt", "Toluene"); | |
283 | + LoadMaterial("kPMMA.txt", "PMMA"); | |
284 | + //LoadMaterial("../../../../data/materials/rtsSU8_k.txt", "../../../../data/materials/rtsSU8_n.txt", "SU8"); | |
285 | + SetMaterial(); | |
286 | + | |
287 | + //compute the analytical solution for the Mie scattered spectrum | |
288 | + SimulateSpectrum(); | |
289 | + | |
290 | + QApplication a(argc, argv); | |
291 | + InteractiveMie w; | |
292 | + | |
293 | + | |
294 | + w.show(); | |
295 | + | |
296 | + | |
297 | + w.move(0, 0); | |
298 | + QRect frame = w.frameGeometry(); | |
299 | + QRect inside = w.geometry(); | |
300 | + | |
301 | + //activate a console for output | |
302 | + RedirectIOToConsole(0, frame.height(), frame.width()); | |
303 | + | |
304 | + gpSpectrumDisplay = new qtSpectrumDisplay(); | |
305 | + gpSpectrumDisplay->move(frame.width(), 0); | |
306 | + gpSpectrumDisplay->resize(2*inside.height(), inside.height()); | |
307 | + | |
308 | + gpSpectrumDisplay->show(); | |
309 | + | |
310 | + //refresh the UI | |
311 | + w.refreshUI(); | |
312 | + | |
313 | + return a.exec(); | |
314 | +} | ... | ... |
1 | +++ a/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(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(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(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(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 | + } | |
0 | 299 | \ No newline at end of file | ... | ... |
1 | +++ a/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 | + | |
52 | + #endif | |
0 | 53 | \ No newline at end of file | ... | ... |
1 | +++ a/rtsGUIConsole.cpp | |
1 | +#include <windows.h> | |
2 | + | |
3 | +#include <stdio.h> | |
4 | + | |
5 | +#include <fcntl.h> | |
6 | + | |
7 | +#include <io.h> | |
8 | + | |
9 | +#include <iostream> | |
10 | + | |
11 | +#include <fstream> | |
12 | + | |
13 | +#ifndef _USE_OLD_IOSTREAMS | |
14 | + | |
15 | +using namespace std; | |
16 | + | |
17 | +#endif | |
18 | + | |
19 | +// maximum mumber of lines the output console should have | |
20 | + | |
21 | +static const WORD MAX_CONSOLE_LINES = 500; | |
22 | + | |
23 | +//#ifdef _DEBUG | |
24 | + | |
25 | +void RedirectIOToConsole(int Xpos, int Ypos, int Width, int Height) | |
26 | + | |
27 | +{ | |
28 | + | |
29 | +int hConHandle; | |
30 | + | |
31 | +long lStdHandle; | |
32 | + | |
33 | +CONSOLE_SCREEN_BUFFER_INFO coninfo; | |
34 | + | |
35 | +FILE *fp; | |
36 | + | |
37 | +// allocate a console for this app | |
38 | + | |
39 | +AllocConsole(); | |
40 | + | |
41 | +// set the screen buffer to be big enough to let us scroll text | |
42 | + | |
43 | +GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo); | |
44 | + | |
45 | +coninfo.dwSize.Y = MAX_CONSOLE_LINES; | |
46 | + | |
47 | +SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), | |
48 | + | |
49 | +coninfo.dwSize); | |
50 | + | |
51 | +// redirect unbuffered STDOUT to the console | |
52 | + | |
53 | +lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE); | |
54 | + | |
55 | +hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); | |
56 | + | |
57 | +fp = _fdopen( hConHandle, "w" ); | |
58 | + | |
59 | +*stdout = *fp; | |
60 | + | |
61 | +setvbuf( stdout, NULL, _IONBF, 0 ); | |
62 | + | |
63 | +// redirect unbuffered STDIN to the console | |
64 | + | |
65 | +lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE); | |
66 | + | |
67 | +hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); | |
68 | + | |
69 | +fp = _fdopen( hConHandle, "r" ); | |
70 | + | |
71 | +*stdin = *fp; | |
72 | + | |
73 | +setvbuf( stdin, NULL, _IONBF, 0 ); | |
74 | + | |
75 | +// redirect unbuffered STDERR to the console | |
76 | + | |
77 | +lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE); | |
78 | + | |
79 | +hConHandle = _open_osfhandle(lStdHandle, _O_TEXT); | |
80 | + | |
81 | +fp = _fdopen( hConHandle, "w" ); | |
82 | + | |
83 | +*stderr = *fp; | |
84 | + | |
85 | +setvbuf( stderr, NULL, _IONBF, 0 ); | |
86 | + | |
87 | +// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog | |
88 | + | |
89 | +// point to console as well | |
90 | + | |
91 | +ios::sync_with_stdio(); | |
92 | + | |
93 | +//position | |
94 | + | |
95 | +MoveWindow(GetConsoleWindow(), Xpos, Ypos, Width, Height, true); | |
96 | + | |
97 | +} | |
98 | + | |
99 | +//#endif | |
100 | + | |
101 | +//End of File | |
0 | 102 | \ No newline at end of file | ... | ... |