source: sasmodels/sasmodels/models/bcc.py @ cd3dba0

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

improve compare.py so that parameters can be constrained to valid values

  • Property mode set to 100644
File size: 5.1 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
10The returned value is scaled to units of |cm^-1|\ |sr^-1|, absolute scale.
11
12Definition
13----------
14
15The scattering intensity $I(q)$ is calculated as
16
17.. math:
18
19    I(q) = \frac{\text{scale}}{V_P} V_\text{lattice} P(q) Z(q)
20
21
22where *scale* is the volume fraction of spheres, *Vp* is the volume of the
23primary particle, *V(lattice)* is a volume correction for the crystal
24structure, $P(q)$ is the form factor of the sphere (normalized), and $Z(q)$
25is the paracrystalline structure factor for a body-centered cubic structure.
26
27Equation (1) of the 1990 reference is used to calculate $Z(q)$, using
28equations (29)-(31) from the 1987 paper for *Z1*\ , *Z2*\ , and *Z3*\ .
29
30The lattice correction (the occupied volume of the lattice) for a
31body-centered cubic structure of particles of radius $R$ and nearest neighbor
32separation $D$ is
33
34.. math:
35
36    V_\text{lattice} = \frac{16\pi}{3} \frac{R^3}{\left(D\sqrt{2}\right)^3}
37
38
39The distortion factor (one standard deviation) of the paracrystal is included
40in the calculation of $Z(q)$
41
42.. math:
43
44    \Delta a = g D
45
46where $g$ is a fractional distortion based on the nearest neighbor distance.
47
48The body-centered cubic lattice is
49
50.. image:: img/bcc_lattice.jpg
51
52For a crystal, diffraction peaks appear at reduced q-values given by
53
54.. math:
55
56    \frac{qD}{2\pi} = \sqrt{h^2 + k^2 + l^2}
57
58where for a body-centered cubic lattice, only reflections where
59$(h + k + l) = \text{even}$ are allowed and reflections where
60$(h + k + l) = \text{odd}$ are forbidden. Thus the peak positions
61correspond to (just the first 5)
62
63.. math:
64
65    \begin{eqnarray}
66    &q/q_o&&\quad 1&& \ \sqrt{2} && \ \sqrt{3} && \ \sqrt{4} && \ \sqrt{5} \\
67    &\text{Indices}&& (110) && (200) && (211) && (220) && (310)
68    \end{eqnarray}
69
70**NB: The calculation of $Z(q)$ is a double numerical integral that must
71be carried out with a high density of points to properly capture the sharp
72peaks of the paracrystalline scattering.** So be warned that the calculation
73is SLOW. Go get some coffee. Fitting of any experimental data must be
74resolution smeared for any meaningful fit. This makes a triple integral.
75Very, very slow. Go get lunch!
76
77This example dataset is produced using 200 data points,
78*qmin* = 0.001 |Ang^-1|, *qmax* = 0.1 |Ang^-1| and the above default values.
79
80.. image:: img/bcc_1d.jpg
81
82*Figure. 1D plot in the linear scale using the default values
83(w/200 data point).*
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. Note that we are not responsible for any incorrectness of the 2D
88model computation.
89
90.. image:: img/bcc_orientation.gif
91
92.. image:: img/bcc_2d.jpg
93
94*Figure. 2D plot using the default values (w/200X200 pixels).*
95
96REFERENCE
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 paracrystalline distortion. Thermal vibrations
112    are considered to be negligible, and the size of the paracrystal is infinitely large. Paracrystalline distortion is
113    assumed to be isotropic and characterized by a Gaussian distribution.
114    """
115category = "shape:paracrystal"
116
117#             ["name", "units", default, [lower, upper], "type","description" ],
118parameters = [["dnn", "Ang", 220, [-inf, inf], "", "Nearest neighbour distance"],
119              ["d_factor", "", 0.06, [-inf, inf], "", "Paracrystal distortion factor"],
120              ["radius", "Ang", 40, [0, inf], "volume", "Particle radius"],
121              ["sld", "1e-6/Ang^2", 4, [-inf, inf], "", "Particle scattering length density"],
122              ["solvent_sld", "1e-6/Ang^2", 1, [-inf, inf], "", "Solvent scattering length density"],
123              ["theta", "degrees", 60, [-inf, inf], "orientation", "In plane angle"],
124              ["phi", "degrees", 60, [-inf, inf], "orientation", "Out of plane angle"],
125              ["psi", "degrees", 60, [-inf, inf], "orientation", "Out of plane angle"]
126             ]
127
128source = ["lib/J1.c", "lib/gauss150.c", "bcc.c"]
129
130# parameters for demo
131demo = dict(
132    scale=1, background=0,
133    dnn=220, d_factor=0.06, sld=4, solvent_sld=1,
134    radius=40,
135    theta=60, phi=60, psi=60,
136    radius_pd=.2, radius_pd_n=2,
137    theta_pd=15, theta_pd_n=0,
138    phi_pd=15, phi_pd_n=0,
139    psi_pd=15, psi_pd_n=0,
140    )
141
142# For testing against the old sasview models, include the converted parameter
143# names and the target sasview model name.
144oldname = 'BCCrystalModel'
145oldpars = dict(sld='sldSph', solvent_sld='sldSolv')
Note: See TracBrowser for help on using the repository browser.