source: sasmodels/sasmodels/models/triaxial_ellipsoid.py @ 3c56da87

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

lint cleanup

  • Property mode set to 100644
File size: 4.7 KB
RevLine 
[5d4777d]1# triaxial ellipsoid model
2# Note: model title and parameter table are inserted automatically
3r"""
4All three axes are of different lengths with $R_a \le R_b <= R_c$
5**Users should maintain this inequality for all calculations**.
6
7.. math::
8
[19dcb933]9    P(Q) = \text{scale} V \left< F^2(Q) \right> + \text{background}
[5d4777d]10
11where the volume $V = 4/3 \pi R_a R_b R_c$, and the averaging
12$\left< \cdots \right>$ is applied over all orientations for 1D.
13
[19dcb933]14.. figure:: img/triaxial_ellipsoid_geometry.jpg
[5d4777d]15
16    Ellipsoid schematic.
17
18The returned value is in units of |cm^-1|, on absolute scale.
19
20Definition
21----------
22
23The form factor calculated is
24
25.. math::
26
[19dcb933]27    P(Q) = \frac{\text{scale}}{V}\int_0^1\int_0^1
28        \Phi^2(QR_a^2\cos^2( \pi x/2) + QR_b^2\sin^2(\pi y/2)(1-y^2) + c^2y^2)
[5d4777d]29        dx dy
30
31where
32
33.. math::
34
35    \Phi(u) = 3 u^{-3} (\sin u - u \cos u)
36
37To provide easy access to the orientation of the triaxial ellipsoid,
38we define the axis of the cylinder using the angles $\theta$, $\phi$
39and $\psi$. These angles are defined on
[19dcb933]40:num:`figure #triaxial-ellipsoid-angles`.
[5d4777d]41The angle $\psi$ is the rotational angle around its own $c$ axis
[19dcb933]42against the $Q$ plane. For example, $\psi = 0$ when the
[5d4777d]43$a$ axis is parallel to the $x$ axis of the detector.
44
45.. _triaxial-ellipsoid-angles:
46
[19dcb933]47.. figure:: img/triaxial_ellipsoid_angles.jpg
[5d4777d]48
49    The angles for oriented ellipsoid.
50
[19dcb933]51The radius-of-gyration for this system is  $R_g^2 = (R_a R_b R_c)^2/5$.
[5d4777d]52
53The contrast is defined as SLD(ellipsoid) - SLD(solvent).  In the
54parameters, *a* is the minor equatorial radius, *b* is the major
55equatorial radius, and c is the polar radius of the ellipsoid.
56
57NB: The 2nd virial coefficient of the triaxial solid ellipsoid is
58calculated based on the polar radius $R_p = R_c$ and equatorial
59radius $R_e = \sqrt{R_a R_b}$, and used as the effective radius for
[19dcb933]60$S(Q)$ when $P(Q) \cdot S(Q)$ is applied.
[5d4777d]61
[19dcb933]62.. figure:: img/triaxial_ellipsoid_1d.jpg
[5d4777d]63
64    1D plot using the default values (w/1000 data point).
65
66Validation
67----------
68
69Validation of our code was done by comparing the output of the
701D calculation to the angular average of the output of 2D calculation
71over all possible angles.
[19dcb933]72:num:`Figure #triaxial-ellipsoid-comparison` shows the comparison where
[5d4777d]73the solid dot refers to averaged 2D while the line represents the
74result of 1D calculation (for 2D averaging, 76, 180, and 76 points
75are taken for the angles of $\theta$, $\phi$, and $\psi$ respectively).
76
[19dcb933]77.. _triaxial-ellipsoid-comparison:
[5d4777d]78
[19dcb933]79.. figure:: img/triaxial_ellipsoid_comparison.png
[5d4777d]80
81    Comparison between 1D and averaged 2D.
82
83Our model uses the form factor calculations implemented in a c-library provided by the NIST Center for Neutron Research
84(Kline, 2006)
85
86REFERENCE
87
88L A Feigin and D I Svergun, *Structure Analysis by Small-Angle X-Ray and Neutron Scattering*, Plenum,
89New York, 1987.
90"""
91
[3c56da87]92from numpy import inf
[5d4777d]93
94name = "triaxial_ellipsoid"
95title = "Ellipsoid of uniform scattering length density with three independent axes."
96
97description = """\
98Note: During fitting ensure that the inequality ra<rb<rc is not
99        violated. Otherwise the calculation will
100        not be correct.
101"""
[a5d0d00]102category = "shape:ellipsoid"
[5d4777d]103
104parameters = [
105#   [ "name", "units", default, [lower, upper], "type",
106#     "description" ],
107    [ "sld", "1e-6/Ang^2", 4, [-inf,inf], "",
108      "Ellipsoid scattering length density" ],
109    [ "solvent_sld", "1e-6/Ang^2", 1, [-inf,inf], "",
110      "Solvent scattering length density" ],
111    [ "req_minor", "Ang",  20, [0, inf], "volume",
112      "Minor equitorial radius" ],
113    [ "req_major", "Ang",  400, [0, inf], "volume",
114      "Major equatorial radius" ],
115    [ "rpolar", "Ang",  10, [0, inf], "volume",
116      "Polar radius" ],
117    [ "theta", "degrees", 60, [-inf, inf], "orientation",
118      "In plane angle" ],
119    [ "phi", "degrees", 60, [-inf, inf], "orientation",
120      "Out of plane angle" ],
121    [ "psi", "degrees", 60, [-inf, inf], "orientation",
122      "Out of plane angle" ],
123    ]
124
125source = [ "lib/J1.c", "lib/gauss76.c", "triaxial_ellipsoid.c"]
126
127def ER(req_minor, req_major, rpolar):
128    import numpy as np
129    from .ellipsoid import ER as ellipsoid_ER
130    return ellipsoid_ER(rpolar, np.sqrt(req_minor*req_major))
131
[d547f16]132demo = dict(
133        scale=1, background=0,
134        sld=6, solvent_sld=1,
135        theta=30, phi=15, psi=5,
136        req_minor=25, req_major=36, rpolar=50,
137        req_minor_pd=0, req_minor_pd_n=1,
138        req_major_pd=0, req_major_pd_n=1,
139        rpolar_pd=.2, rpolar_pd_n=30,
140        theta_pd=15, theta_pd_n=45,
141        phi_pd=15, phi_pd_n=1,
142        psi_pd=15, psi_pd_n=1,
143        )
[a503bfd]144oldname = 'TriaxialEllipsoidModel'
145oldpars = dict(theta='axis_theta', phi='axis_phi', psi='axis_psi',
146               sld='sldEll',  solvent_sld='sldSolv',
147               req_minor='semi_axisA', req_major='semi_axisB',
148               rpolar='semi_axisC')
Note: See TracBrowser for help on using the repository browser.