source: sasmodels/sasmodels/models/triaxial_ellipsoid.py @ d507c3a

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