- Categories
- Cylinder
- Pringle
- pringle.py
Pringle - pringle.py
r"""
Definition
----------
The form factor for this bent disc is essentially that of a hyperbolic
paraboloid and calculated as
.. math::
P(q) = (Delta
ho )^2 V int^{pi/2}_0 dpsi sin{psi} sinc^2
left( frac{qdcos{psi}}{2}
ight)
left[ left( S^2_0+C^2_0
ight) + 2sum_{n=1}^{infty}
left( S^2_n+C^2_n
ight)
ight]
where
.. math::
C_n = frac{1}{r^2}int^{R}_{0} r drcos(qr^2alpha cos{psi})
J_nleft( qr^2eta cos{psi}
ight)
J_{2n}left( qr sin{psi}
ight)
.. math::
S_n = frac{1}{r^2}int^{R}_{0} r drsin(qr^2alpha cos{psi})
J_nleft( qr^2eta cos{psi}
ight)
J_{2n}left( qr sin{psi}
ight)
and $Delta
ho ext{ is }
ho_{pringle}-
ho_{solvent}$, $V$ is the volume of
the disc, $psi$ is the angle between the normal to the disc and the q vector,
$d$ and $R$ are the "pringle" thickness and radius respectively, $alpha$ and
$eta$ are the two curvature parameters, and $J_n$ is the n :sup:`th` order
Bessel function of the first kind.
.. figure:: img/pringles_fig1.png
Schematic of model shape (Graphic from Matt Henderson, matt@matthen.com)
Reference
---------
.. [#] Karen Edler, Universtiy of Bath, Private Communication. 2012. Derivation by Stefan Alexandru Rautu.
.. [#] L. Onsager, *Ann. New York Acad. Sci.*, 51 (1949) 627-659
Authorship and Verification
----------------------------
* **Author:** Andrew Jackson **Date:** 2008
* **Last Modified by:** Wojciech Wpotrzebowski **Date:** March 20, 2016
* **Last Reviewed by:** Andrew Jackson **Date:** September 26, 2016
"""
import numpy as np
from numpy import inf
name = "pringle"
title = "The Pringle model provides the form factor, $P(q)$, for a 'pringle'
or 'saddle-shaped' disc that is bent in two directions."
description = """
"""
category = "shape:cylinder"
# pylint: disable=bad-whitespace, line-too-long
# ["name", "units", default, [lower, upper], "type","description"],
parameters = [
["radius", "Ang", 60.0, [0, inf], "volume", "Pringle radius"],
["thickness", "Ang", 10.0, [0, inf], "volume", "Thickness of pringle"],
["alpha", "", 0.001, [-inf, inf], "volume", "Curvature parameter alpha"],
["beta", "", 0.02, [-inf, inf], "volume", "Curvature paramter beta"],
["sld", "1e-6/Ang^2", 1.0, [-inf, inf], "sld", "Pringle sld"],
["sld_solvent", "1e-6/Ang^2", 6.3, [-inf, inf], "sld", "Solvent sld"]
]
# pylint: enable=bad-whitespace, line-too-long
source = ["lib/polevl.c", "lib/sas_J0.c", "lib/sas_J1.c",
"lib/sas_JN.c", "lib/gauss76.c", "pringle.c"]
radius_effective_modes = [
"equivalent cylinder excluded volume",
"equivalent volume sphere",
"radius"]
def random():
"""Return a random parameter set for the model."""
alpha, beta = 10**np.random.uniform(-1, 1, size=2)
radius = 10**np.random.uniform(1, 3)
thickness = 10**np.random.uniform(0.7, 2)
pars = dict(
radius=radius,
thickness=thickness,
alpha=alpha,
beta=beta,
)
return pars
tests = [
[{'scale' : 1.0,
'radius': 60.0,
'thickness': 10.0,
'alpha': 0.001,
'beta': 0.02,
'sld': 1.0,
'sld_solvent': 6.3,
'background': 0.001,
}, 0.1, 9.87676],
[{'scale' : 1.0,
'radius': 60.0,
'thickness': 10.0,
'alpha': 0.001,
'beta': 0.02,
'sld': 1.0,
'sld_solvent': 6.3,
'background': 0.001,
}, 0.01, 290.56723],
[{'scale' : 1.0,
'radius': 60.0,
'thickness': 10.0,
'alpha': 0.001,
'beta': 0.02,
'sld': 1.0,
'sld_solvent': 6.3,
'background': 0.001,
}, 0.001, 317.40847],
]
Back to Model
Download