core_shell_microgelscostrafo411magnetic_modelticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change
on this file since 6d96b66 was
6d96b66,
checked in by Paul Kienzle <pkienzle@…>, 8 years ago
|
fractal models: handle limits of q=0 and dim=1
|
-
Property mode set to
100644
|
File size:
1.4 KB
|
Line | |
---|
1 | #define INVALID(p) (p.fractal_dim <= 0.0) |
---|
2 | |
---|
3 | static double |
---|
4 | Iq(double q, |
---|
5 | double volfraction, |
---|
6 | double radius, |
---|
7 | double fractal_dim, |
---|
8 | double cor_length, |
---|
9 | double sld_block, |
---|
10 | double sld_solvent) |
---|
11 | { |
---|
12 | //calculate P(q) for the spherical subunits |
---|
13 | const double pq = M_4PI_3*cube(radius) * square((sld_block-sld_solvent)*sph_j1c(q*radius)); |
---|
14 | |
---|
15 | //calculate S(q), using Teixeira, Eq(15) |
---|
16 | double sq; |
---|
17 | if (q > 0. && fractal_dim > 1.) { |
---|
18 | // q>0, D>0 |
---|
19 | const double D = fractal_dim; |
---|
20 | const double Dm1 = fractal_dim - 1.0; |
---|
21 | // Note: for large Dm1, sin(Dm1*atan(q*cor_length) can go negative |
---|
22 | const double t1 = D*sas_gamma(Dm1)*sin(Dm1*atan(q*cor_length)); |
---|
23 | const double t2 = pow(q*radius, -D); |
---|
24 | const double t3 = pow(1.0 + 1.0/square(q*cor_length), -0.5*Dm1); |
---|
25 | sq = 1.0 + t1 * t2 * t3; |
---|
26 | } else if (q > 0.) { |
---|
27 | // q>0, D=1 |
---|
28 | sq = 1.0 + atan(q*cor_length) / (q*radius); |
---|
29 | } else if (fractal_dim > 1.) { |
---|
30 | // q=0, D>1 |
---|
31 | const double D = fractal_dim; |
---|
32 | sq = 1.0 + pow(cor_length/radius, D)*sas_gamma(D+1.0); |
---|
33 | } else { |
---|
34 | // q=0, D=1 |
---|
35 | sq = 1.0 + cor_length/radius; |
---|
36 | } |
---|
37 | |
---|
38 | // scale to units cm-1 sr-1 (assuming data on absolute scale) |
---|
39 | // convert I(1/A) to (1/cm) => 1e8 * I(q) |
---|
40 | // convert rho^2 in 10^-6 1/A to 1/A => 1e-12 * I(q) |
---|
41 | // combined: 1e-4 * I(q) |
---|
42 | |
---|
43 | return 1.e-4 * volfraction * pq * sq; |
---|
44 | } |
---|
45 | |
---|
Note: See
TracBrowser
for help on using the repository browser.