source: sasmodels/sasmodels/models/sc_paracrystal.py @ 830cf6b

ticket-1257-vesicle-productticket_1156ticket_822_more_unit_tests
Last change on this file since 830cf6b was 0507e09, checked in by smk78, 5 years ago

Added link to source code to each model. Closes #883

  • Property mode set to 100644
File size: 6.9 KB
Line 
1r"""
2.. warning:: This model and this model description are under review following
3             concerns raised by SasView users. If you need to use this model,
4             please email help@sasview.org for the latest situation. *The
5             SasView Developers. September 2018.*
6
7Definition
8----------
9
10Calculates the scattering from a **simple cubic lattice** with
11paracrystalline distortion. Thermal vibrations are considered to be
12negligible, and the size of the paracrystal is infinitely large.
13Paracrystalline distortion is assumed to be isotropic and characterized
14by a Gaussian distribution.
15
16The scattering intensity $I(q)$ is calculated as
17
18.. math::
19
20    I(q) = \text{scale}\frac{V_\text{lattice}P(q)Z(q)}{V_p} + \text{background}
21
22where scale is the volume fraction of spheres, $V_p$ is the volume of
23the primary particle, $V_\text{lattice}$ is a volume correction for the crystal
24structure, $P(q)$ is the form factor of the sphere (normalized), and
25$Z(q)$ is the paracrystalline structure factor for a simple cubic structure.
26
27Equation (16) of the 1987 reference\ [#CIT1987]_ is used to calculate $Z(q)$,
28using equations (13)-(15) from the 1987 paper\ [#CIT1990]_ for $Z1$, $Z2$, and
29$Z3$.
30
31The lattice correction (the occupied volume of the lattice) for a simple cubic
32structure of particles of radius *R* and nearest neighbor separation *D* is
33
34.. math::
35
36    V_\text{lattice}=\frac{4\pi}{3}\frac{R^3}{D^3}
37
38The distortion factor (one standard deviation) of the paracrystal is included
39in the calculation of $Z(q)$
40
41.. math::
42
43    \Delta a = gD
44
45where *g* is a fractional distortion based on the nearest neighbor distance.
46
47The simple cubic lattice is
48
49.. figure:: img/sc_crystal_geometry.jpg
50
51For a crystal, diffraction peaks appear at reduced q-values given by
52
53.. math::
54
55    \frac{qD}{2\pi} = \sqrt{h^2+k^2+l^2}
56
57where for a simple cubic lattice any h, k, l are allowed and none are
58forbidden. Thus the peak positions correspond to (just the first 5)
59
60.. math::
61    :nowrap:
62
63    \begin{align*}
64    q/q_0 \quad & \quad 1
65                & \sqrt{2} \quad
66                & \quad  \sqrt{3} \quad
67                & \sqrt{4} \quad
68                & \quad \sqrt{5}\quad \\
69    Indices \quad & (100)
70                  & \quad (110) \quad
71                  & \quad (111)
72                  & (200) \quad
73                  & \quad (210)
74    \end{align*}
75
76.. note::
77
78    The calculation of *Z(q)* is a double numerical integral that must be
79    carried out with a high density of points to properly capture the sharp
80    peaks of the paracrystalline scattering.
81    So be warned that the calculation is slow. Fitting of any experimental data
82    must be resolution smeared for any meaningful fit. This makes a triple
83    integral which may be very slow.
84
85The 2D (Anisotropic model) is based on the reference below where *I(q)* is
86approximated for 1d scattering. Thus the scattering pattern for 2D may not
87be accurate particularly at low $q$. For general details of the calculation
88and angular dispersions for oriented particles see :ref:`orientation` .
89Note that we are not responsible for any incorrectness of the
902D model computation.
91
92.. figure:: img/parallelepiped_angle_definition.png
93
94    Orientation of the crystal with respect to the scattering plane, when
95    $\theta = \phi = 0$ the $c$ axis is along the beam direction (the $z$ axis).
96
97Reference
98---------
99
100.. [#CIT1987] Hideki Matsuoka et. al. *Physical Review B*, 36 (1987) 1754-1765 (Original Paper)
101.. [#CIT1990] Hideki Matsuoka et. al. *Physical Review B*, 41 (1990) 3854 -3856 (Corrections to FCC and BCC lattice structure calculation)
102
103Source
104------
105
106`sc_paracrystal.py <https://github.com/SasView/sasmodels/blob/master/sasmodels/models/sc_paracrystal.py>`_
107
108`sc_paracrystal.c <https://github.com/SasView/sasmodels/blob/master/sasmodels/models/sc_paracrystal.c>`_
109
110Authorship and Verification
111---------------------------
112
113* **Author:** NIST IGOR/DANSE **Date:** pre 2010
114* **Last Modified by:** Steve King **Date:** March 25, 2019
115* **Last Reviewed by:** Richard Heenan **Date:** March 21, 2016
116* **Source added by :** Steve King **Date:** March 25, 2019
117"""
118
119import numpy as np
120from numpy import inf
121
122name = "sc_paracrystal"
123title = "Simple cubic lattice with paracrystalline distortion"
124description = """
125        P(q)=(scale/Vp)*V_lattice*P(q)*Z(q)+bkg where scale is the volume
126        fraction of sphere,
127        Vp = volume of the primary particle,
128        V_lattice = volume correction for
129        for the crystal structure,
130        P(q)= form factor of the sphere (normalized),
131        Z(q)= paracrystalline structure factor
132        for a simple cubic structure.
133        [Simple Cubic ParaCrystal Model]
134        Parameters;
135        scale: volume fraction of spheres
136        bkg:background, R: radius of sphere
137        dnn: Nearest neighbor distance
138        d_factor: Paracrystal distortion factor
139        radius: radius of the spheres
140        sldSph: SLD of the sphere
141        sldSolv: SLD of the solvent
142        """
143category = "shape:paracrystal"
144single = False
145# pylint: disable=bad-whitespace, line-too-long
146#             ["name", "units", default, [lower, upper], "type","description"],
147parameters = [["dnn",         "Ang",       220.0, [0.0, inf],  "",            "Nearest neighbor distance"],
148              ["d_factor",    "",           0.06, [-inf, inf], "",            "Paracrystal distortion factor"],
149              ["radius",      "Ang",        40.0, [0.0, inf],  "volume",      "Radius of sphere"],
150              ["sld",  "1e-6/Ang^2",         3.0, [0.0, inf],  "sld",         "Sphere scattering length density"],
151              ["sld_solvent", "1e-6/Ang^2",  6.3, [0.0, inf],  "sld",         "Solvent scattering length density"],
152              ["theta",       "degrees",    0,    [-360, 360], "orientation", "c axis to beam angle"],
153              ["phi",         "degrees",    0,    [-360, 360], "orientation", "rotation about beam"],
154              ["psi",         "degrees",    0,    [-360, 360], "orientation", "rotation about c axis"]
155             ]
156# pylint: enable=bad-whitespace, line-too-long
157
158source = ["lib/sas_3j1x_x.c", "lib/sphere_form.c", "lib/gauss150.c", "sc_paracrystal.c"]
159
160def random():
161    """Return a random parameter set for the model."""
162    # copied from bcc_paracrystal
163    radius = 10**np.random.uniform(1.3, 4)
164    d_factor = 10**np.random.uniform(-2, -0.7)  # sigma_d in 0.01-0.7
165    dnn_fraction = np.random.beta(a=10, b=1)
166    dnn = radius*4/np.sqrt(4)/dnn_fraction
167    pars = dict(
168        #sld=1, sld_solvent=0, scale=1, background=1e-32,
169        dnn=dnn,
170        d_factor=d_factor,
171        radius=radius,
172    )
173    return pars
174
175tests = [
176    # Accuracy tests based on content in test/utest_extra_models.py, 2d tests added April 10, 2017
177    [{}, 0.001, 10.3048],
178    [{}, 0.215268, 0.00814889],
179    [{}, 0.414467, 0.001313289],
180    [{'theta': 10.0, 'phi': 20, 'psi': 30.0}, (0.045, -0.035), 18.0397138402],
181    [{'theta': 10.0, 'phi': 20, 'psi': 30.0}, (0.023, 0.045), 0.0177333171285],
182    ]
Note: See TracBrowser for help on using the repository browser.