source: sasmodels/sasmodels/models/ellipsoid.py @ 43dc17e

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 43dc17e was 2f0c07d, checked in by Paul Kienzle <pkienzle@…>, 8 years ago

make figure names regular (geometry, angle_definition, angle_projection)

  • Property mode set to 100644
File size: 6.4 KB
RevLine 
[5d4777d]1# ellipsoid model
2# Note: model title and parameter table are inserted automatically
3r"""
4The form factor is normalized by the particle volume.
5
6Definition
7----------
8
9The output of the 2D scattering intensity function for oriented ellipsoids
10is given by (Feigin, 1987)
11
12.. math::
13
[cade620]14    P(q,\alpha) = \frac{\text{scale}}{V} F^2(q,\alpha) + \text{background}
[5d4777d]15
16where
17
18.. math::
19
[cade620]20    F(q,\alpha) = \frac{3 \Delta \rho V (\sin[qr(R_p,R_e,\alpha)]
[eb69cce]21                - \cos[qr(R_p,R_e,\alpha)])}
22                {[qr(R_p,R_e,\alpha)]^3}
[5d4777d]23
24and
25
26.. math::
27
[19dcb933]28    r(R_p,R_e,\alpha) = \left[ R_e^2 \sin^2 \alpha
29        + R_p^2 \cos^2 \alpha \right]^{1/2}
[5d4777d]30
31
32$\alpha$ is the angle between the axis of the ellipsoid and $\vec q$,
33$V$ is the volume of the ellipsoid, $R_p$ is the polar radius along the
34rotational axis of the ellipsoid, $R_e$ is the equatorial radius perpendicular
35to the rotational axis of the ellipsoid and $\Delta \rho$ (contrast) is the
36scattering length density difference between the scatterer and the solvent.
37
38To provide easy access to the orientation of the ellipsoid, we define
39the rotation axis of the ellipsoid using two angles $\theta$ and $\phi$.
[19dcb933]40These angles are defined in the
41:ref:`cylinder orientation figure <cylinder-orientation>`.
[5d4777d]42For the ellipsoid, $\theta$ is the angle between the rotational axis
43and the $z$-axis.
44
45NB: The 2nd virial coefficient of the solid ellipsoid is calculated based
46on the $R_p$ and $R_e$ values, and used as the effective radius for
[eb69cce]47$S(q)$ when $P(q) \cdot S(q)$ is applied.
[5d4777d]48
49
[eb69cce]50The $\theta$ and $\phi$ parameters are not used for the 1D output.
[5d4777d]51
[19dcb933]52.. _ellipsoid-geometry:
53
[2f0c07d]54.. figure:: img/ellipsoid_angle_projection.jpg
[5d4777d]55
56    The angles for oriented ellipsoid.
57
58Validation
59----------
60
61Validation of our code was done by comparing the output of the 1D model
62to the output of the software provided by the NIST (Kline, 2006).
[19dcb933]63:num:`Figure ellipsoid-comparison-1d` below shows a comparison of
[5d4777d]64the 1D output of our model and the output of the NIST software.
65
66.. _ellipsoid-comparison-1d:
67
[19dcb933]68.. figure:: img/ellipsoid_comparison_1d.jpg
[5d4777d]69
70    Comparison of the SasView scattering intensity for an ellipsoid
71    with the output of the NIST SANS analysis software.  The parameters
[19dcb933]72    were set to: *scale* = 1.0, *rpolar* = 20 |Ang|,
73    *requatorial* =400 |Ang|, *contrast* = 3e-6 |Ang^-2|,
74    and *background* = 0.01 |cm^-1|.
[5d4777d]75
76Averaging over a distribution of orientation is done by evaluating the
77equation above. Since we have no other software to compare the
78implementation of the intensity for fully oriented ellipsoids, we can
79compare the result of averaging our 2D output using a uniform distribution
[19dcb933]80$p(\theta,\phi) = 1.0$.  :num:`Figure #ellipsoid-comparison-2d`
[5d4777d]81shows the result of such a cross-check.
82
83.. _ellipsoid-comparison-2d:
84
[19dcb933]85.. figure:: img/ellipsoid_comparison_2d.jpg
[5d4777d]86
87    Comparison of the intensity for uniformly distributed ellipsoids
88    calculated from our 2D model and the intensity from the NIST SANS
[19dcb933]89    analysis software. The parameters used were: *scale* = 1.0,
90    *rpolar* = 20 |Ang|, *requatorial* = 400 |Ang|,
91    *contrast* = 3e-6 |Ang^-2|, and *background* = 0.0 |cm^-1|.
[5d4777d]92
[eb69cce]93The discrepancy above $q$ = 0.3 |cm^-1| is due to the way the form factors
[5d4777d]94are calculated in the c-library provided by NIST. A numerical integration
[eb69cce]95has to be performed to obtain $P(q)$ for randomly oriented particles.
[5d4777d]96The NIST software performs that integration with a 76-point Gaussian
[eb69cce]97quadrature rule, which will become imprecise at high $q$ where the amplitude
98varies quickly as a function of $q$. The SasView result shown has been
[5d4777d]99obtained by summing over 501 equidistant points. Our result was found
[eb69cce]100to be stable over the range of $q$ shown for a number of points higher
[5d4777d]101than 500.
102
[eb69cce]103References
104----------
[5d4777d]105
[431caae]106L A Feigin and D I Svergun.
107*Structure Analysis by Small-Angle X-Ray and Neutron Scattering*,
108Plenum Press, New York, 1987.
[5d4777d]109"""
110
[3c56da87]111from numpy import inf
[5d4777d]112
113name = "ellipsoid"
114title = "Ellipsoid of revolution with uniform scattering length density."
115
116description = """\
117P(q.alpha)= scale*f(q)^2 + background, where f(q)= 3*(sld
[3e428ec]118        - solvent_sld)*V*[sin(q*r(Rp,Re,alpha))
119        -q*r*cos(qr(Rp,Re,alpha))]
120        /[qr(Rp,Re,alpha)]^3"
[5d4777d]121
122     r(Rp,Re,alpha)= [Re^(2)*(sin(alpha))^2
[3e428ec]123        + Rp^(2)*(cos(alpha))^2]^(1/2)
[5d4777d]124
[3e428ec]125        sld: SLD of the ellipsoid
126        solvent_sld: SLD of the solvent
127        V: volume of the ellipsoid
128        Rp: polar radius of the ellipsoid
129        Re: equatorial radius of the ellipsoid
[5d4777d]130"""
[a5d0d00]131category = "shape:ellipsoid"
[5d4777d]132
[3e428ec]133#             ["name", "units", default, [lower, upper], "type","description"],
134parameters = [["sld", "1e-6/Ang^2", 4, [-inf, inf], "",
135               "Ellipsoid scattering length density"],
136              ["solvent_sld", "1e-6/Ang^2", 1, [-inf, inf], "",
137               "Solvent scattering length density"],
138              ["rpolar", "Ang", 20, [0, inf], "volume",
139               "Polar radius"],
140              ["requatorial", "Ang", 400, [0, inf], "volume",
141               "Equatorial radius"],
142              ["theta", "degrees", 60, [-inf, inf], "orientation",
143               "In plane angle"],
144              ["phi", "degrees", 60, [-inf, inf], "orientation",
145               "Out of plane angle"],
146             ]
147
[9c461c7]148source = ["lib/J1.c", "lib/sph_j1c.c", "lib/gauss76.c", "ellipsoid.c"]
[5d4777d]149
150def ER(rpolar, requatorial):
151    import numpy as np
152
153    ee = np.empty_like(rpolar)
154    idx = rpolar > requatorial
[3e428ec]155    ee[idx] = (rpolar[idx] ** 2 - requatorial[idx] ** 2) / rpolar[idx] ** 2
[5d4777d]156    idx = rpolar < requatorial
[3e428ec]157    ee[idx] = (requatorial[idx] ** 2 - rpolar[idx] ** 2) / requatorial[idx] ** 2
[5d4777d]158    idx = rpolar == requatorial
[3e428ec]159    ee[idx] = 2 * rpolar[idx]
160    valid = (rpolar * requatorial != 0)
161    bd = 1.0 - ee[valid]
[5d4777d]162    e1 = np.sqrt(ee[valid])
[3e428ec]163    b1 = 1.0 + np.arcsin(e1) / (e1 * np.sqrt(bd))
164    bL = (1.0 + e1) / (1.0 - e1)
165    b2 = 1.0 + bd / 2 / e1 * np.log(bL)
166    delta = 0.75 * b1 * b2
[5d4777d]167
168    ddd = np.zeros_like(rpolar)
[3e428ec]169    ddd[valid] = 2.0 * (delta + 1.0) * rpolar * requatorial ** 2
170    return 0.5 * ddd ** (1.0 / 3.0)
171
172
173demo = dict(scale=1, background=0,
174            sld=6, solvent_sld=1,
175            rpolar=50, requatorial=30,
176            theta=30, phi=15,
177            rpolar_pd=.2, rpolar_pd_n=15,
178            requatorial_pd=.2, requatorial_pd_n=15,
179            theta_pd=15, theta_pd_n=45,
180            phi_pd=15, phi_pd_n=1)
[a503bfd]181oldname = 'EllipsoidModel'
182oldpars = dict(theta='axis_theta', phi='axis_phi',
183               sld='sldEll', solvent_sld='sldSolv',
184               rpolar='radius_a', requatorial='radius_b')
Note: See TracBrowser for help on using the repository browser.