source: sasmodels/sasmodels/models/bcc.py @ 9aac25d

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 9aac25d was 9aac25d, checked in by piotr, 8 years ago

Converted SCCrystalModel

  • Property mode set to 100644
File size: 5.4 KB
Line 
1#bcc paracrystal model
2#note model title and parameter table are automatically inserted
3#note - calculation requires double precision
4r"""
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.
9
10Definition
11----------
12
13The scattering intensity $I(q)$ is calculated as
14
15.. math::
16
17    I(q) = \frac{\text{scale}}{V_p} V_\text{lattice} P(q) Z(q)
18
19
20where *scale* is the volume fraction of spheres, $V_p$ is the volume of the
21primary particle, $V_\text{lattice}$ is a volume correction for the crystal
22structure, $P(q)$ is the form factor of the sphere (normalized), and $Z(q)$
23is the paracrystalline structure factor for a body-centered cubic structure.
24
25Equation (1) of the 1990 reference is used to calculate $Z(q)$, using
26equations (29)-(31) from the 1987 paper for $Z1$, $Z2$, and $Z3$.
27
28The lattice correction (the occupied volume of the lattice) for a
29body-centered cubic structure of particles of radius $R$ and nearest neighbor
30separation $D$ is
31
32.. math::
33
34    V_\text{lattice} = \frac{16\pi}{3} \frac{R^3}{\left(D\sqrt{2}\right)^3}
35
36
37The distortion factor (one standard deviation) of the paracrystal is included
38in the calculation of $Z(q)$
39
40.. math::
41
42    \Delta a = g D
43
44where $g$ is a fractional distortion based on the nearest neighbor distance.
45
46
47.. figure:: img/bcc_lattice.jpg
48
49    Body-centered cubic lattice.
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 body-centered cubic lattice, only reflections where
58$(h + k + l) = \text{even}$ are allowed and reflections where
59$(h + k + l) = \text{odd}$ are forbidden. Thus the peak positions
60correspond to (just the first 5)
61
62.. math::
63
64    \begin{array}{lccccc}
65    q/q_o          &   1   & \sqrt{2} & \sqrt{3} & \sqrt{4} & \sqrt{5} \\
66    \text{Indices} & (110) &    (200) & (211)    & (220)    & (310)    \\
67    \end{array}
68
69**NB**: The calculation of $Z(q)$ is a double numerical integral that must
70be carried out with a high density of points to properly capture the sharp
71peaks of the paracrystalline scattering. So be warned that the calculation
72is SLOW. Go get some coffee. Fitting of any experimental data must be
73resolution smeared for any meaningful fit. This makes a triple integral.
74Very, very slow. Go get lunch!
75
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.
78
79.. figure:: img/bcc_1d.jpg
80
81    1D plot in the linear scale using the default values (w/200 data point).
82
83The 2D (Anisotropic model) is based on the reference below where $I(q)$ is
84approximated for 1d scattering. Thus the scattering pattern for 2D may not
85be accurate. Note that we are not responsible for any incorrectness of the 2D
86model computation.
87
88.. figure:: img/crystal_orientation.png
89
90    Orientation of the crystal with respect to the scattering plane.
91
92.. figure:: img/bcc_2d.jpg
93
94    2D plot using the default values (w/200X200 pixels).*
95
96References
97----------
98
99Hideki Matsuoka et. al. *Physical Review B*, 36 (1987) 1754-1765
100(Original Paper)
101
102Hideki Matsuoka et. al. *Physical Review B*, 41 (1990) 3854 -3856
103(Corrections to FCC and BCC lattice structure calculation)
104"""
105
106from numpy import inf
107
108name = "bcc_paracrystal"
109title = "Body-centred cubic lattic with paracrystalline distortion"
110description = """
111    Calculates the scattering from a **body-centered cubic lattice** with
112    paracrystalline distortion. Thermal vibrations are considered to be
113    negligible, and the size of the paracrystal is infinitely large.
114    Paracrystalline distortion is assumed to be isotropic and characterized
115    by a Gaussian distribution.
116    """
117category = "shape:paracrystal"
118
119single = False
120
121# pylint: disable=bad-whitespace, line-too-long
122#             ["name", "units", default, [lower, upper], "type","description" ],
123parameters = [["dnn",         "Ang",       220,    [-inf, inf], "",            "Nearest neighbour distance"],
124              ["d_factor",    "",            0.06, [-inf, inf], "",            "Paracrystal distortion factor"],
125              ["radius",      "Ang",        40,    [0, inf],    "volume",      "Particle radius"],
126              ["sld",         "1e-6/Ang^2",  4,    [-inf, inf], "",            "Particle scattering length density"],
127              ["solvent_sld", "1e-6/Ang^2",  1,    [-inf, inf], "",            "Solvent scattering length density"],
128              ["theta",       "degrees",    60,    [-inf, inf], "orientation", "In plane angle"],
129              ["phi",         "degrees",    60,    [-inf, inf], "orientation", "Out of plane angle"],
130              ["psi",         "degrees",    60,    [-inf, inf], "orientation", "Out of plane angle"]
131             ]
132# pylint: enable=bad-whitespace, line-too-long
133
134source = ["lib/J1.c", "lib/gauss150.c", "lib/sphere_form.c", "bcc.c"]
135
136# parameters for demo
137demo = dict(
138    scale=1, background=0,
139    dnn=220, d_factor=0.06, sld=4, solvent_sld=1,
140    radius=40,
141    theta=60, phi=60, psi=60,
142    radius_pd=.2, radius_pd_n=2,
143    theta_pd=15, theta_pd_n=0,
144    phi_pd=15, phi_pd_n=0,
145    psi_pd=15, psi_pd_n=0,
146    )
147
148# For testing against the old sasview models, include the converted parameter
149# names and the target sasview model name.
150oldname = 'BCCrystalModel'
151oldpars = dict(sld='sldSph', solvent_sld='sldSolv')
Note: See TracBrowser for help on using the repository browser.