source: sasmodels/sasmodels/models/hollow_rectangular_prism_infinitely_thin_walls.py @ deb7ee0

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since deb7ee0 was deb7ee0, checked in by gonzalezm, 8 years ago

Added four parallelepiped-like models

  • Property mode set to 100644
File size: 5.0 KB
Line 
1# rectangular_prism model
2# Note: model title and parameter table are inserted automatically
3r"""
4
5This model provides the form factor, *P(q)*, for a hollow rectangular
6prism with infinitely thin walls. It computes only the 1D scattering, not the 2D.
7
8
9Definition
10----------
11
12The 1D scattering intensity for this model is calculated according to the
13equations given by Nayuk and Huber (Nayuk, 2012).
14
15Assuming a hollow parallelepiped with infinitely thin walls, edge lengths
16:math:`A \le B \le C` and presenting an orientation with respect to the
17scattering vector given by |theta| and |phi|, where |theta| is the angle
18between the *z* axis and the longest axis of the parallelepiped *C*, and
19|phi| is the angle between the scattering vector (lying in the *xy* plane)
20and the *y* axis, the form factor is given by
21
22.. math::
23  P(q) =  \frac{1}{V^2} \frac{2}{\pi} \int_0^{\frac{\pi}{2}}
24  \int_0^{\frac{\pi}{2}} [A_L(q)+A_T(q)]^2 \sin\theta d\theta d\phi
25
26where
27
28.. math::
29  V = 2AB + 2AC + 2BC
30
31.. math::
32  A_L(q) =  8 \times \frac{ \sin \bigl( q \frac{A}{2} \sin\phi \sin\theta \bigr)
33                              \sin \bigl( q \frac{B}{2} \cos\phi \sin\theta \bigr)
34                              \cos \bigl( q \frac{C}{2} \cos\theta \bigr) }
35                            {q^2 \, \sin^2\theta \, \sin\phi \cos\phi}
36
37.. math::
38  A_T(q) =  A_F(q) \times \frac{2 \, \sin \bigl( q \frac{C}{2} \cos\theta \bigr)}{q \, \cos\theta}
39
40and
41
42.. math::
43  A_F(q) =  4 \frac{ \cos \bigl( q \frac{A}{2} \sin\phi \sin\theta \bigr)
44                       \sin \bigl( q \frac{B}{2} \cos\phi \sin\theta \bigr) }
45                     {q \, \cos\phi \, \sin\theta} +
46              4 \frac{ \sin \bigl( q \frac{A}{2} \sin\phi \sin\theta \bigr)
47                       \cos \bigl( q \frac{B}{2} \cos\phi \sin\theta \bigr) }
48                     {q \, \sin\phi \, \sin\theta}
49
50The 1D scattering intensity is then calculated as
51
52.. math::
53  I(q) = \mbox{scale} \times V \times (\rho_{\mbox{p}} - \rho_{\mbox{solvent}})^2 \times P(q)
54
55where *V* is the volume of the rectangular prism, :math:`\rho_{\mbox{p}}`
56is the scattering length of the parallelepiped, :math:`\rho_{\mbox{solvent}}`
57is the scattering length of the solvent, and (if the data are in absolute
58units) *scale* represents the volume fraction (which is unitless).
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).
68
69REFERENCES
70
71R Nayuk and K Huber, *Z. Phys. Chem.*, 226 (2012) 837-854
72
73"""
74
75from numpy import pi, inf, sqrt
76
77name = "hollow_rectangular_prism_infinitely_thin_walls"
78title = "Hollow rectangular parallelepiped with infinitely thin walls."
79description = """
80    I(q)= scale*V*(sld - solvent_sld)^2*P(q)+background
81        with P(q) being the form factor corresponding to a hollow rectangular
82        parallelepiped with infinitely thin walls.
83"""
84category = "shape:parallelepiped"
85
86#             ["name", "units", default, [lower, upper], "type","description"],
87parameters = [["sld", "1e-6/Ang^2", 6.3, [-inf, inf], "",
88               "Parallelepiped scattering length density"],
89              ["solvent_sld", "1e-6/Ang^2", 1, [-inf, inf], "",
90               "Solvent scattering length density"],
91              ["a_side", "Ang", 35, [0, inf], "volume",
92               "Shorter side of the parallelepiped"],
93              ["b2a_ratio", "Ang", 1, [0, inf], "volume",
94               "Ratio sides b/a"],
95              ["c2a_ratio", "Ang", 1, [0, inf], "volume",
96               "Ratio sides c/a"],
97             ]
98
99source = ["lib/J1.c", "lib/gauss76.c", "hollow_rectangular_prism_infinitely_thin_walls.c"]
100
101def ER(a_side, b2a_ratio, c2a_ratio):
102    """
103        Return equivalent radius (ER)
104    """
105    b_side = a_side * b2a_ratio
106    c_side = a_side * c2a_ratio
107
108    # surface average radius (rough approximation)
109    surf_rad = sqrt(a_side * b_side / pi)
110
111    ddd = 0.75 * surf_rad * (2 * surf_rad * c_side + (c_side + surf_rad) * (c_side + pi * surf_rad))
112    return 0.5 * (ddd) ** (1. / 3.)
113
114def VR(a_side, b2a_ratio, c2a_ratio):
115    """
116        Return shell volume and total volume
117    """
118    b_side = a_side * b2a_ratio
119    c_side = a_side * c2a_ratio
120    vol_total = a_side * b_side * c_side
121    vol_shell = 2.0 * (a_side*b_side + a_side*c_side + b_side*c_side)
122    return vol_shell, vol_total
123
124
125# parameters for demo
126demo = dict(scale=1, background=0,
127            sld=6.3e-6, solvent_sld=1.0e-6,
128            a_side=35, b2a_ratio=1, c2a_ratio=1,
129            a_side_pd=0.1, a_side_pd_n=10,
130            b2a_ratio_pd=0.1, b2a_ratio_pd_n=1,
131            c2a_ratio_pd=0.1, c2a_ratio_pd_n=1)
132
133# For testing against the old sasview models, include the converted parameter
134# names and the target sasview model name.
135oldname = 'RectangularHollowPrismInfThinWallsModel'
136oldpars = dict(a_side='short_side', b2a_ratio='b2a_ratio', c_side='c2a_ratio',
137               sld='sldPipe', solvent_sld='sldSolv')
138
139tests = [[{}, 0.2, 0.836719188592],
140         [{}, [0.2], [0.836719188592]],
141        ]
142
143
Note: See TracBrowser for help on using the repository browser.