source: sasmodels/sasmodels/models/bcc_paracrystal.py @ 69e1afc

core_shell_microgelscostrafo411magnetic_modelticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 69e1afc was 69e1afc, checked in by richardh, 7 years ago

2d units tests for threee paracrystal models, will need opencl test

  • Property mode set to 100644
File size: 5.7 KB
RevLine 
[6272968]1r"""
[b0c4271]2Definition
3----------
4
[a5d0d00]5Calculates the scattering from a **body-centered cubic lattice** with
6paracrystalline distortion. Thermal vibrations are considered to be negligible,
7and the size of the paracrystal is infinitely large. Paracrystalline distortion
8is assumed to be isotropic and characterized by a Gaussian distribution.
[754c454]9
[a5d0d00]10The scattering intensity $I(q)$ is calculated as
[754c454]11
[eb69cce]12.. math::
[754c454]13
[eb69cce]14    I(q) = \frac{\text{scale}}{V_p} V_\text{lattice} P(q) Z(q)
[754c454]15
16
[eb69cce]17where *scale* is the volume fraction of spheres, $V_p$ is the volume of the
18primary particle, $V_\text{lattice}$ is a volume correction for the crystal
[a5d0d00]19structure, $P(q)$ is the form factor of the sphere (normalized), and $Z(q)$
20is the paracrystalline structure factor for a body-centered cubic structure.
[754c454]21
[b0c4271]22Equation (1) of the 1990 reference\ [#CIT1990]_ is used to calculate $Z(q)$,
23using equations (29)-(31) from the 1987 paper\ [#CIT1987]_ for $Z1$, $Z2$, and
24$Z3$.
[754c454]25
[a5d0d00]26The lattice correction (the occupied volume of the lattice) for a
27body-centered cubic structure of particles of radius $R$ and nearest neighbor
28separation $D$ is
[754c454]29
[eb69cce]30.. math::
[754c454]31
[a5d0d00]32    V_\text{lattice} = \frac{16\pi}{3} \frac{R^3}{\left(D\sqrt{2}\right)^3}
33
34
35The distortion factor (one standard deviation) of the paracrystal is included
36in the calculation of $Z(q)$
37
[eb69cce]38.. math::
[a5d0d00]39
40    \Delta a = g D
41
42where $g$ is a fractional distortion based on the nearest neighbor distance.
[754c454]43
44
[2f0c07d]45.. figure:: img/bcc_geometry.jpg
[d138d43]46
47    Body-centered cubic lattice.
[754c454]48
49For a crystal, diffraction peaks appear at reduced q-values given by
50
[eb69cce]51.. math::
[a5d0d00]52
53    \frac{qD}{2\pi} = \sqrt{h^2 + k^2 + l^2}
54
55where for a body-centered cubic lattice, only reflections where
56$(h + k + l) = \text{even}$ are allowed and reflections where
57$(h + k + l) = \text{odd}$ are forbidden. Thus the peak positions
58correspond to (just the first 5)
[754c454]59
[eb69cce]60.. math::
[754c454]61
[eb69cce]62    \begin{array}{lccccc}
63    q/q_o          &   1   & \sqrt{2} & \sqrt{3} & \sqrt{4} & \sqrt{5} \\
64    \text{Indices} & (110) &    (200) & (211)    & (220)    & (310)    \\
65    \end{array}
[754c454]66
[d138d43]67**NB**: The calculation of $Z(q)$ is a double numerical integral that must
[a5d0d00]68be carried out with a high density of points to properly capture the sharp
[d138d43]69peaks of the paracrystalline scattering. So be warned that the calculation
[a5d0d00]70is SLOW. Go get some coffee. Fitting of any experimental data must be
71resolution smeared for any meaningful fit. This makes a triple integral.
72Very, very slow. Go get lunch!
[754c454]73
[a5d0d00]74This example dataset is produced using 200 data points,
75*qmin* = 0.001 |Ang^-1|, *qmax* = 0.1 |Ang^-1| and the above default values.
[754c454]76
[a5d0d00]77The 2D (Anisotropic model) is based on the reference below where $I(q)$ is
78approximated for 1d scattering. Thus the scattering pattern for 2D may not
[b0c4271]79be accurate.
[754c454]80
[1f65db5]81.. figure:: img/parallelepiped_angle_definition.png
[d138d43]82
[1f65db5]83    Orientation of the crystal with respect to the scattering plane, when
84    $\theta = \phi = 0$ the $c$ axis is along the beam direction (the $z$ axis).
[754c454]85
[eb69cce]86References
87----------
[754c454]88
[b0c4271]89.. [#CIT1987] Hideki Matsuoka et. al. *Physical Review B*, 36 (1987) 1754-1765
90   (Original Paper)
91.. [#CIT1990] Hideki Matsuoka et. al. *Physical Review B*, 41 (1990) 3854 -3856
92   (Corrections to FCC and BCC lattice structure calculation)
[754c454]93
[b0c4271]94Authorship and Verification
95----------------------------
96
97* **Author:** NIST IGOR/DANSE **Date:** pre 2010
98* **Last Modified by:** Paul Butler **Date:** September 29, 2016
99* **Last Reviewed by:** Richard Heenan **Date:** March 21, 2016
[754c454]100"""
101
[0b56f38]102from numpy import inf, pi
[754c454]103
[e166cb9]104name = "bcc_paracrystal"
[754c454]105title = "Body-centred cubic lattic with paracrystalline distortion"
106description = """
[dcdf29d]107    Calculates the scattering from a **body-centered cubic lattice** with
108    paracrystalline distortion. Thermal vibrations are considered to be
109    negligible, and the size of the paracrystal is infinitely large.
110    Paracrystalline distortion is assumed to be isotropic and characterized
111    by a Gaussian distribution.
[754c454]112    """
[485aee2]113category = "shape:paracrystal"
[13ed84c]114
[b0c4271]115#note - calculation requires double precision
[13ed84c]116single = False
117
[dcdf29d]118# pylint: disable=bad-whitespace, line-too-long
[485aee2]119#             ["name", "units", default, [lower, upper], "type","description" ],
[dcdf29d]120parameters = [["dnn",         "Ang",       220,    [-inf, inf], "",            "Nearest neighbour distance"],
121              ["d_factor",    "",            0.06, [-inf, inf], "",            "Paracrystal distortion factor"],
122              ["radius",      "Ang",        40,    [0, inf],    "volume",      "Particle radius"],
[42356c8]123              ["sld",         "1e-6/Ang^2",  4,    [-inf, inf], "sld",         "Particle scattering length density"],
124              ["sld_solvent", "1e-6/Ang^2",  1,    [-inf, inf], "sld",         "Solvent scattering length density"],
[9b79f29]125              ["theta",       "degrees",    60,    [-360, 360], "orientation", "c axis to beam angle"],
126              ["phi",         "degrees",    60,    [-360, 360], "orientation", "rotation about beam"],
127              ["psi",         "degrees",    60,    [-360, 360], "orientation", "rotation about c axis"]
[485aee2]128             ]
[dcdf29d]129# pylint: enable=bad-whitespace, line-too-long
[485aee2]130
[925ad6e]131source = ["lib/sas_3j1x_x.c", "lib/gauss150.c", "lib/sphere_form.c", "bcc_paracrystal.c"]
[754c454]132
133# parameters for demo
134demo = dict(
135    scale=1, background=0,
[02a0920]136    dnn=220, d_factor=0.06, sld=4, sld_solvent=1,
[c95dc908]137    radius=40,
[754c454]138    theta=60, phi=60, psi=60,
[cd3dba0]139    radius_pd=.2, radius_pd_n=2,
[754c454]140    theta_pd=15, theta_pd_n=0,
141    phi_pd=15, phi_pd_n=0,
142    psi_pd=15, psi_pd_n=0,
143    )
[0b56f38]144# april 6 2017, rkh add unit tests, NOT compared with any other calc method, assume correct!
[e2d6e3b]145# add 2d test later
[0b56f38]146q =4.*pi/220.
147tests = [
148    [{ },
149     [0.001, q, 0.215268], [1.46601394721, 2.85851284174, 0.00866710287078]],
[69e1afc]150    [{'theta':20.0,'phi':30,'psi':40.0},(-0.017,0.035),2082.20264399 ],
151    [{'theta':20.0,'phi':30,'psi':40.0},(-0.081,0.011),0.436323144781 ]
152    ]
Note: See TracBrowser for help on using the repository browser.