source: sasmodels/sasmodels/models/hollow_rectangular_prism_thin_walls.py @ a34b811

ticket-1257-vesicle-productticket_1156ticket_822_more_unit_tests
Last change on this file since a34b811 was a34b811, checked in by Paul Kienzle <pkienzle@…>, 6 months ago

use radius_effective/radius_effective_mode/radius_effective_modes consistently throughout the code

  • Property mode set to 100644
File size: 5.2 KB
Line 
1# rectangular_prism model
2# Note: model title and parameter table are inserted automatically
3r"""
4Definition
5----------
6
7
8This model provides the form factor, $P(q)$, for a hollow rectangular
9prism with infinitely thin walls. It computes only the 1D scattering, not the 2D.
10The 1D scattering intensity for this model is calculated according to the
11equations given by Nayuk and Huber\ [#Nayuk2012]_.
12
13Assuming a hollow parallelepiped with infinitely thin walls, edge lengths
14$A \le B \le C$ and presenting an orientation with respect to the
15scattering vector given by $\theta$ and $\phi$, where $\theta$ is the angle
16between the $z$ axis and the longest axis of the parallelepiped $C$, and
17$\phi$ is the angle between the scattering vector (lying in the $xy$ plane)
18and the $y$ axis, the form factor is given by
19
20.. math::
21
22    P(q) = \frac{1}{V^2} \frac{2}{\pi} \int_0^{\frac{\pi}{2}}
23           \int_0^{\frac{\pi}{2}} [A_L(q)+A_T(q)]^2 \sin\theta\,d\theta\,d\phi
24
25where
26
27.. math::
28
29    V &= 2AB + 2AC + 2BC \\
30    A_L(q) &=  8 \times \frac{
31            \sin \left( \tfrac{1}{2} q A \sin\phi \sin\theta \right)
32            \sin \left( \tfrac{1}{2} q B \cos\phi \sin\theta \right)
33            \cos \left( \tfrac{1}{2} q C \cos\theta \right)
34        }{q^2 \, \sin^2\theta \, \sin\phi \cos\phi} \\
35    A_T(q) &=  A_F(q) \times
36      \frac{2\,\sin \left( \tfrac{1}{2} q C \cos\theta \right)}{q\,\cos\theta}
37
38and
39
40.. math::
41
42  A_F(q) =  4 \frac{ \cos \left( \tfrac{1}{2} q A \sin\phi \sin\theta \right)
43                       \sin \left( \tfrac{1}{2} q B \cos\phi \sin\theta \right) }
44                     {q \, \cos\phi \, \sin\theta} +
45              4 \frac{ \sin \left( \tfrac{1}{2} q A \sin\phi \sin\theta \right)
46                       \cos \left( \tfrac{1}{2} q B \cos\phi \sin\theta \right) }
47                     {q \, \sin\phi \, \sin\theta}
48
49The 1D scattering intensity is then calculated as
50
51.. math::
52
53  I(q) = \text{scale} \times V \times (\rho_\text{p} - \rho_\text{solvent})^2 \times P(q)
54
55where $V$ is the surface area of the rectangular prism, $\rho_\text{p}$
56is the scattering length density of the parallelepiped, $\rho_\text{solvent}$
57is the scattering length density of the solvent, and (if the data are in
58absolute units) *scale* is related to the total surface area.
59
60**The 2D scattering intensity is not computed by this model.**
61
62
63Validation
64----------
65
66Validation of the code was conducted  by qualitatively comparing the output
67of the 1D model to the curves shown in (Nayuk, 2012\ [#Nayuk2012]_).
68
69
70References
71----------
72
73.. [#Nayuk2012] R Nayuk and K Huber, *Z. Phys. Chem.*, 226 (2012) 837-854
74.. [#] L. Onsager, *Ann. New York Acad. Sci.*, 51 (1949) 627-659
75
76Source
77------
78
79`hollow_rectangular_prism_thin_walls.py <https://github.com/SasView/sasmodels/blob/master/sasmodels/models/hollow_rectangular_prism_thin_walls.py>`_
80
81`hollow_rectangular_prism_thin_walls.c <https://github.com/SasView/sasmodels/blob/master/sasmodels/models/hollow_rectangular_prism_thin_walls.c>`_
82
83Authorship and Verification
84----------------------------
85
86* **Author:** Miguel Gonzales **Date:** February 26, 2016
87* **Last Modified by:** Paul Kienzle **Date:** October 15, 2016
88* **Last Reviewed by:** Paul Butler **Date:** September 07, 2018
89* **Source added by :** Steve King **Date:** March 25, 2019
90"""
91
92import numpy as np
93from numpy import inf
94
95name = "hollow_rectangular_prism_thin_walls"
96title = "Hollow rectangular parallelepiped with thin walls."
97description = """
98    I(q)= scale*V*(sld - sld_solvent)^2*P(q)+background
99        with P(q) being the form factor corresponding to a hollow rectangular
100        parallelepiped with infinitely thin walls.
101"""
102category = "shape:parallelepiped"
103
104#             ["name", "units", default, [lower, upper], "type","description"],
105parameters = [["sld", "1e-6/Ang^2", 6.3, [-inf, inf], "sld",
106               "Parallelepiped scattering length density"],
107              ["sld_solvent", "1e-6/Ang^2", 1, [-inf, inf], "sld",
108               "Solvent scattering length density"],
109              ["length_a", "Ang", 35, [0, inf], "volume",
110               "Shorter side of the parallelepiped"],
111              ["b2a_ratio", "Ang", 1, [0, inf], "volume",
112               "Ratio sides b/a"],
113              ["c2a_ratio", "Ang", 1, [0, inf], "volume",
114               "Ratio sides c/a"],
115             ]
116
117source = ["lib/gauss76.c", "hollow_rectangular_prism_thin_walls.c"]
118have_Fq = True
119radius_effective_modes = [
120    "equivalent cylinder excluded volume", "equivalent outer volume sphere",
121    "half length_a", "half length_b", "half length_c",
122    "equivalent outer circular cross-section",
123    "half ab diagonal", "half diagonal",
124    ]
125
126
127def random():
128    """Return a random parameter set for the model."""
129    a, b, c = 10**np.random.uniform(1, 4.7, size=3)
130    pars = dict(
131        length_a=a,
132        b2a_ratio=b/a,
133        c2a_ratio=c/a,
134    )
135    return pars
136
137
138# parameters for demo
139demo = dict(scale=1, background=0,
140            sld=6.3, sld_solvent=1.0,
141            length_a=35, b2a_ratio=1, c2a_ratio=1,
142            length_a_pd=0.1, length_a_pd_n=10,
143            b2a_ratio_pd=0.1, b2a_ratio_pd_n=1,
144            c2a_ratio_pd=0.1, c2a_ratio_pd_n=1)
145
146tests = [[{}, 0.2, 0.837719188592],
147         [{}, [0.2], [0.837719188592]],
148        ]
Note: See TracBrowser for help on using the repository browser.