source: sasmodels/sasmodels/models/fuzzy_sphere.py @ 40a87fa

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 40a87fa was 40a87fa, checked in by Paul Kienzle <pkienzle@…>, 8 years ago

lint and latex cleanup

  • Property mode set to 100644
File size: 4.0 KB
Line 
1r"""
2For information about polarised and magnetic scattering, see
3the :doc:`magnetic help <../sasgui/perspectives/fitting/mag_help>`
4documentation.
5
6Definition
7----------
8
9The scattering intensity $I(q)$ is calculated as:
10
11.. math::
12
13    I(q) = \frac{\text{scale}}{V}(\Delta \rho)^2 A^2(q) S(q)
14           + \text{background}
15
16
17where the amplitude $A(q)$ is given as the typical sphere scattering convoluted
18with a Gaussian to get a gradual drop-off in the scattering length density:
19
20.. math::
21
22    A(q) = \frac{3\left[\sin(qR) - qR \cos(qR)\right]}{(qR)^3}
23           \exp\left(\frac{-(\sigma_\text{fuzzy}q)^2}{2}\right)
24
25Here $A(q)^2$ is the form factor, $P(q)$. The scale is equivalent to the
26volume fraction of spheres, each of volume, $V$. Contrast $(\Delta \rho)$
27is the difference of scattering length densities of the sphere and the
28surrounding solvent.
29
30Poly-dispersion in radius and in fuzziness is provided for, though the
31fuzziness must be kept much smaller than the sphere radius for meaningful
32results.
33
34From the reference:
35
36  The "fuzziness" of the interface is defined by the parameter
37  $\sigma_\text{fuzzy}$. The particle radius $R$ represents the radius of the
38  particle where the scattering length density profile decreased to 1/2 of the
39  core density. $\sigma_\text{fuzzy}$ is the width of the smeared particle
40  surface; i.e., the standard deviation from the average height of the fuzzy
41  interface. The inner regions of the microgel that display a higher density
42  are described by the radial box profile extending to a radius of
43  approximately $R_\text{box} \sim R - 2 \sigma$. The profile approaches
44  zero as $R_\text{sans} \sim R + 2\sigma$.
45
46For 2D data: The 2D scattering intensity is calculated in the same way as 1D,
47where the $q$ vector is defined as
48
49.. math:: q = \sqrt{{q_x}^2 + {q_y}^2}
50
51References
52----------
53
54M Stieger, J. S Pedersen, P Lindner, W Richtering, *Langmuir*,
5520 (2004) 7283-7292
56"""
57
58from numpy import inf
59
60name = "fuzzy_sphere"
61title = "Scattering from spherical particles with a fuzzy surface."
62description = """\
63scale: scale factor times volume fraction,
64or just volume fraction for absolute scale data
65radius: radius of the solid sphere
66fuzziness = the standard deviation of the fuzzy interfacial
67thickness (ie., so-called interfacial roughness)
68sld: the SLD of the sphere
69solvend_sld: the SLD of the solvent
70background: incoherent background
71Note: By definition, this function works only when fuzziness << radius.
72"""
73category = "shape:sphere"
74
75# pylint: disable=bad-whitespace,line-too-long
76# ["name", "units", default, [lower, upper], "type","description"],
77parameters = [["sld",         "1e-6/Ang^2",  1, [-inf, inf], "sld",    "Particle scattering length density"],
78              ["sld_solvent", "1e-6/Ang^2",  3, [-inf, inf], "sld",    "Solvent scattering length density"],
79              ["radius",      "Ang",        60, [0, inf],    "volume", "Sphere radius"],
80              ["fuzziness",   "Ang",        10, [0, inf],    "",       "std deviation of Gaussian convolution for interface (must be << radius)"],
81             ]
82# pylint: enable=bad-whitespace,line-too-long
83
84source = ["lib/sph_j1c.c"]
85
86# No volume normalization despite having a volume parameter
87# This should perhaps be volume normalized?
88form_volume = """
89    return 1.333333333333333*M_PI*radius*radius*radius;
90    """
91
92Iq = """
93    const double qr = q*radius;
94    const double bes = sph_j1c(qr);
95    const double qf = q*fuzziness;
96    const double fq = bes * (sld - sld_solvent) * form_volume(radius) * exp(-0.5*qf*qf);
97    return 1.0e-4*fq*fq;
98    """
99
100def ER(radius):
101    """
102    Return radius
103    """
104    return radius
105
106# VR defaults to 1.0
107
108demo = dict(scale=1, background=0.001,
109            sld=1, sld_solvent=3,
110            radius=60,
111            fuzziness=10,
112            radius_pd=.2, radius_pd_n=45,
113            fuzziness_pd=.2, fuzziness_pd_n=0)
114
115tests = [
116    # Accuracy tests based on content in test/utest_models_new1_3.py
117    #[{'background': 0.001}, 1.0, 0.001],
118
119    [{}, 0.00301005, 359.2315],
120
121    ]
Note: See TracBrowser for help on using the repository browser.