- Categories
- Sphere
- Fuzzy Sphere
- fuzzy_sphere.py
Fuzzy Sphere - fuzzy_sphere.py
r"""
For information about polarised and magnetic scattering, see
the :ref:`magnetism` documentation.
Definition
----------
The scattering intensity $I(q)$ is calculated as:
.. math::
I(q) = frac{ ext{scale}}{V}(Delta
ho)^2 A^2(q) S(q)
+ ext{background}
where the amplitude $A(q)$ is given as the typical sphere scattering convoluted
with a Gaussian to get a gradual drop-off in the scattering length density:
.. math::
A(q) = frac{3left[sin(qR) - qR cos(qR)
ight]}{(qR)^3}
expleft(frac{-(sigma_ ext{fuzzy}q)^2}{2}
ight)
Here $A(q)^2$ is the form factor, $P(q)$. The scale is equivalent to the
volume fraction of spheres, each of volume, $V$. Contrast $(Delta
ho)$
is the difference of scattering length densities of the sphere and the
surrounding solvent.
Poly-dispersion in radius and in fuzziness is provided for, though the
fuzziness must be kept much smaller than the sphere radius for meaningful
results.
From the reference:
The "fuzziness" of the interface is defined by the parameter
$sigma_ ext{fuzzy}$. The particle radius $R$ represents the radius of the
particle where the scattering length density profile decreased to 1/2 of the
core density. $sigma_ ext{fuzzy}$ is the width of the smeared particle
surface; i.e., the standard deviation from the average height of the fuzzy
interface. The inner regions of the microgel that display a higher density
are described by the radial box profile extending to a radius of
approximately $R_ ext{box} sim R - 2 sigma$. The profile approaches
zero as $R_ ext{sans} sim R + 2sigma$.
For 2D data: The 2D scattering intensity is calculated in the same way as 1D,
where the $q$ vector is defined as
.. math:: q = sqrt{{q_x}^2 + {q_y}^2}
References
----------
.. [#] M Stieger, J. S Pedersen, P Lindner, W Richtering, *Langmuir*, 20 (2004) 7283-7292
Authorship and Verification
----------------------------
* **Author:**
* **Last Modified by:**
* **Last Reviewed by:**
"""
import numpy as np
from numpy import inf
name = "fuzzy_sphere"
title = "Scattering from spherical particles with a fuzzy surface."
description = """
scale: scale factor times volume fraction,
or just volume fraction for absolute scale data
radius: radius of the solid sphere
fuzziness = the standard deviation of the fuzzy interfacial
thickness (ie., so-called interfacial roughness)
sld: the SLD of the sphere
solvend_sld: the SLD of the solvent
background: incoherent background
Note: By definition, this function works only when fuzziness << radius.
"""
category = "shape:sphere"
# pylint: disable=bad-whitespace,line-too-long
# ["name", "units", default, [lower, upper], "type","description"],
parameters = [["sld", "1e-6/Ang^2", 1, [-inf, inf], "sld", "Particle scattering length density"],
["sld_solvent", "1e-6/Ang^2", 3, [-inf, inf], "sld", "Solvent scattering length density"],
["radius", "Ang", 60, [0, inf], "volume", "Sphere radius"],
["fuzziness", "Ang", 10, [0, inf], "volume", "std deviation of Gaussian convolution for interface (must be << radius)"],
]
# pylint: enable=bad-whitespace,line-too-long
source = ["lib/sas_3j1x_x.c", "fuzzy_sphere.c"]
have_Fq = True
radius_effective_modes = ["radius", "radius + fuzziness"]
def random():
"""Return a random parameter set for the model."""
radius = 10**np.random.uniform(1, 4.7)
fuzziness = 10**np.random.uniform(-2, -0.5)*radius # 1% to 31% fuzziness
pars = dict(
radius=radius,
fuzziness=fuzziness,
)
return pars
demo = dict(scale=1, background=0.001,
sld=1, sld_solvent=3,
radius=60,
fuzziness=10,
radius_pd=.2, radius_pd_n=45,
fuzziness_pd=.2, fuzziness_pd_n=0)
tests = [
# Accuracy tests based on content in test/utest_models_new1_3.py
#[{'background': 0.001}, 1.0, 0.001],
[{}, 0.00301005, 359.2315],
]
Back to Model
Download