source: sasmodels/sasmodels/models/ @ 2d81cfe

Last change on this file since 2d81cfe was 2d81cfe, checked in by Paul Kienzle <pkienzle@…>, 3 years ago


  • Property mode set to 100644
File size: 6.5 KB
[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.
[a5d0d00]10The scattering intensity $I(q)$ is calculated as
[eb69cce]12.. math::
[eb69cce]14    I(q) = \frac{\text{scale}}{V_p} V_\text{lattice} P(q) Z(q)
[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.
[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
[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
[eb69cce]30.. math::
[a5d0d00]32    V_\text{lattice} = \frac{16\pi}{3} \frac{R^3}{\left(D\sqrt{2}\right)^3}
35The distortion factor (one standard deviation) of the paracrystal is included
36in the calculation of $Z(q)$
[eb69cce]38.. math::
40    \Delta a = g D
42where $g$ is a fractional distortion based on the nearest neighbor distance.
[2f0c07d]45.. figure:: img/bcc_geometry.jpg
47    Body-centered cubic lattice.
49For a crystal, diffraction peaks appear at reduced q-values given by
[eb69cce]51.. math::
53    \frac{qD}{2\pi} = \sqrt{h^2 + k^2 + l^2}
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)
[eb69cce]60.. math::
[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}
[eda8b30]67.. note::
69  The calculation of $Z(q)$ is a double numerical integral that
70  must be carried out with a high density of points to properly capture
[1f159bd]71  the sharp peaks of the paracrystalline scattering.
72  So be warned that the calculation is slow. Fitting of any experimental data
[eda8b30]73  must be resolution smeared for any meaningful fit. This makes a triple integral
74  which may be very slow.
[a5d0d00]76This example dataset is produced using 200 data points,
77*qmin* = 0.001 |Ang^-1|, *qmax* = 0.1 |Ang^-1| and the above default values.
[a5d0d00]79The 2D (Anisotropic model) is based on the reference below where $I(q)$ is
80approximated for 1d scattering. Thus the scattering pattern for 2D may not
[1f159bd]81be accurate, particularly at low $q$. For general details of the calculation and angular
[eda8b30]82dispersions for oriented particles see :ref:`orientation` .
83Note that we are not responsible for any incorrectness of the 2D model computation.
[1f65db5]85.. figure:: img/parallelepiped_angle_definition.png
[0bdddc2]87    Orientation of the crystal with respect to the scattering plane, when
[1f65db5]88    $\theta = \phi = 0$ the $c$ axis is along the beam direction (the $z$ axis).
[b0c4271]93.. [#CIT1987] Hideki Matsuoka et. al. *Physical Review B*, 36 (1987) 1754-1765
94   (Original Paper)
95.. [#CIT1990] Hideki Matsuoka et. al. *Physical Review B*, 41 (1990) 3854 -3856
96   (Corrections to FCC and BCC lattice structure calculation)
[b0c4271]98Authorship and Verification
101* **Author:** NIST IGOR/DANSE **Date:** pre 2010
102* **Last Modified by:** Paul Butler **Date:** September 29, 2016
103* **Last Reviewed by:** Richard Heenan **Date:** March 21, 2016
[2d81cfe]106import numpy as np
[0b56f38]107from numpy import inf, pi
[e166cb9]109name = "bcc_paracrystal"
[754c454]110title = "Body-centred cubic lattic with paracrystalline distortion"
111description = """
[dcdf29d]112    Calculates the scattering from a **body-centered cubic lattice** with
113    paracrystalline distortion. Thermal vibrations are considered to be
114    negligible, and the size of the paracrystal is infinitely large.
115    Paracrystalline distortion is assumed to be isotropic and characterized
116    by a Gaussian distribution.
[754c454]117    """
[485aee2]118category = "shape:paracrystal"
[b0c4271]120#note - calculation requires double precision
[13ed84c]121single = False
[dcdf29d]123# pylint: disable=bad-whitespace, line-too-long
[485aee2]124#             ["name", "units", default, [lower, upper], "type","description" ],
[dcdf29d]125parameters = [["dnn",         "Ang",       220,    [-inf, inf], "",            "Nearest neighbour distance"],
126              ["d_factor",    "",            0.06, [-inf, inf], "",            "Paracrystal distortion factor"],
127              ["radius",      "Ang",        40,    [0, inf],    "volume",      "Particle radius"],
[42356c8]128              ["sld",         "1e-6/Ang^2",  4,    [-inf, inf], "sld",         "Particle scattering length density"],
129              ["sld_solvent", "1e-6/Ang^2",  1,    [-inf, inf], "sld",         "Solvent scattering length density"],
[9b79f29]130              ["theta",       "degrees",    60,    [-360, 360], "orientation", "c axis to beam angle"],
131              ["phi",         "degrees",    60,    [-360, 360], "orientation", "rotation about beam"],
132              ["psi",         "degrees",    60,    [-360, 360], "orientation", "rotation about c axis"]
[485aee2]133             ]
[dcdf29d]134# pylint: enable=bad-whitespace, line-too-long
[925ad6e]136source = ["lib/sas_3j1x_x.c", "lib/gauss150.c", "lib/sphere_form.c", "bcc_paracrystal.c"]
[0bdddc2]138def random():
139    # Define lattice spacing as a multiple of the particle radius
140    # using the formulat a = 4 r/sqrt(3).  Systems which are ordered
141    # are probably mostly filled, so use a distribution which goes from
142    # zero to one, but leaving 90% of them within 80% of the
143    # maximum bcc packing.  Lattice distortion values are empirically
144    # useful between 0.01 and 0.7.  Use an exponential distribution
145    # in this range 'cuz its easy.
[1511c37c]146    radius = 10**np.random.uniform(1.3, 4)
147    d_factor = 10**np.random.uniform(-2, -0.7)  # sigma_d in 0.01-0.7
[0bdddc2]148    dnn_fraction = np.random.beta(a=10, b=1)
[1511c37c]149    dnn = radius*4/np.sqrt(3)/dnn_fraction
[0bdddc2]150    pars = dict(
151        #sld=1, sld_solvent=0, scale=1, background=1e-32,
[1511c37c]152        dnn=dnn,
153        d_factor=d_factor,
154        radius=radius,
[0bdddc2]155    )
156    return pars
[0b56f38]158# april 6 2017, rkh add unit tests, NOT compared with any other calc method, assume correct!
[e2d6e3b]159# add 2d test later
[1f159bd]160# TODO: fix the 2d tests
[8f04da4]161q = 4.*pi/220.
[0b56f38]162tests = [
[8f04da4]163    [{}, [0.001, q, 0.215268], [1.46601394721, 2.85851284174, 0.00866710287078]],
[1f159bd]164    #[{'theta': 20.0, 'phi': 30, 'psi': 40.0}, (-0.017, 0.035), 2082.20264399],
165    #[{'theta': 20.0, 'phi': 30, 'psi': 40.0}, (-0.081, 0.011), 0.436323144781],
[69e1afc]166    ]
Note: See TracBrowser for help on using the repository browser.