1 | real form_volume(real rpolar, real requatorial); |
---|
2 | real Iq(real q, real sld, real solvent_sld, real rpolar, real requatorial); |
---|
3 | real Iqxy(real qx, real qy, real sld, real solvent_sld, |
---|
4 | real rpolar, real requatorial, real theta, real phi); |
---|
5 | |
---|
6 | real _ellipsoid_kernel(real q, real rpolar, real requatorial, real cos_alpha); |
---|
7 | real _ellipsoid_kernel(real q, real rpolar, real requatorial, real cos_alpha) |
---|
8 | { |
---|
9 | real sn, cn; |
---|
10 | real ratio = rpolar/requatorial; |
---|
11 | const real u = q*requatorial*sqrt(REAL(1.0) |
---|
12 | + cos_alpha*cos_alpha*(ratio*ratio - REAL(1.0))); |
---|
13 | SINCOS(u, sn, cn); |
---|
14 | const real f = ( u==REAL(0.0) ? REAL(1.0) : REAL(3.0)*(sn-u*cn)/(u*u*u) ); |
---|
15 | return f*f; |
---|
16 | } |
---|
17 | |
---|
18 | real form_volume(real rpolar, real requatorial) |
---|
19 | { |
---|
20 | return REAL(1.333333333333333)*M_PI*rpolar*requatorial*requatorial; |
---|
21 | } |
---|
22 | |
---|
23 | real Iq(real q, |
---|
24 | real sld, |
---|
25 | real solvent_sld, |
---|
26 | real rpolar, |
---|
27 | real requatorial) |
---|
28 | { |
---|
29 | //const real lower = REAL(0.0); |
---|
30 | //const real upper = REAL(1.0); |
---|
31 | real total = REAL(0.0); |
---|
32 | for (int i=0;i<76;i++) { |
---|
33 | //const real cos_alpha = (Gauss76Z[i]*(upper-lower) + upper + lower)/2; |
---|
34 | const real cos_alpha = REAL(0.5)*(Gauss76Z[i] + REAL(1.0)); |
---|
35 | total += Gauss76Wt[i] * _ellipsoid_kernel(q, rpolar, requatorial, cos_alpha); |
---|
36 | } |
---|
37 | //const real form = (upper-lower)/2*total; |
---|
38 | const real form = REAL(0.5)*total; |
---|
39 | const real s = (sld - solvent_sld) * form_volume(rpolar, requatorial); |
---|
40 | return REAL(1.0e-4) * form * s * s; |
---|
41 | } |
---|
42 | |
---|
43 | real Iqxy(real qx, real qy, |
---|
44 | real sld, |
---|
45 | real solvent_sld, |
---|
46 | real rpolar, |
---|
47 | real requatorial, |
---|
48 | real theta, |
---|
49 | real phi) |
---|
50 | { |
---|
51 | real sn, cn; |
---|
52 | |
---|
53 | const real q = sqrt(qx*qx + qy*qy); |
---|
54 | SINCOS(theta*M_PI_180, sn, cn); |
---|
55 | const real cos_alpha = cn*cos(phi*M_PI_180)*(qx/q) + sn*(qy/q); |
---|
56 | const real form = _ellipsoid_kernel(q, rpolar, requatorial, cos_alpha); |
---|
57 | const real s = (sld - solvent_sld) * form_volume(rpolar, requatorial); |
---|
58 | |
---|
59 | return REAL(1.0e-4) * form * s * s; |
---|
60 | } |
---|
61 | |
---|