1 | r""" |
---|
2 | Definition |
---|
3 | ---------- |
---|
4 | |
---|
5 | This model is a trivial extension of the CoreShell function to a larger number |
---|
6 | of shells. The scattering length density profile for the default sld values |
---|
7 | (w/ 4 shells). |
---|
8 | |
---|
9 | .. figure:: img/core_multi_shell_sld_default_profile.jpg |
---|
10 | |
---|
11 | SLD profile of the core_multi_shell object from the center of sphere out |
---|
12 | for the default SLDs.* |
---|
13 | |
---|
14 | The 2D scattering intensity is the same as $P(q)$ above, regardless of the |
---|
15 | orientation of the $q$ vector which is defined as |
---|
16 | |
---|
17 | .. math:: |
---|
18 | |
---|
19 | q = \sqrt{q_x^2 + q_y^2} |
---|
20 | |
---|
21 | .. note:: **Be careful!** The SLDs and scale can be highly correlated. Hold as |
---|
22 | many of these parameters fixed as possible. |
---|
23 | |
---|
24 | .. note:: The outer most radius (= *radius* + *thickness*) is used as the |
---|
25 | effective radius for $S(Q)$ when $P(Q)*S(Q)$ is applied. |
---|
26 | |
---|
27 | For information about polarised and magnetic scattering, see |
---|
28 | the :ref:`magnetism` documentation. |
---|
29 | |
---|
30 | Our model uses the form factor calculations implemented in a c-library provided |
---|
31 | by the NIST Center for Neutron Research (Kline, 2006). |
---|
32 | |
---|
33 | References |
---|
34 | ---------- |
---|
35 | See the :ref:`core-shell-sphere` model documentation. |
---|
36 | |
---|
37 | L A Feigin and D I Svergun, |
---|
38 | *Structure Analysis by Small-Angle X-Ray and Neutron Scattering*, |
---|
39 | Plenum Press, New York, 1987. |
---|
40 | |
---|
41 | **Author:** NIST IGOR/DANSE **on:** pre 2010 |
---|
42 | |
---|
43 | **Last Modified by:** in progress **on:** March 20, 2016 |
---|
44 | |
---|
45 | **Last Reviewed by:** in progress **on:** March 20, 2016 |
---|
46 | """ |
---|
47 | |
---|
48 | |
---|
49 | |
---|
50 | from __future__ import division |
---|
51 | |
---|
52 | import numpy as np |
---|
53 | from numpy import inf |
---|
54 | |
---|
55 | name = "core_multi_shell" |
---|
56 | title = "This model provides the scattering from a spherical core with 1 to 4 \ |
---|
57 | concentric shell structures. The SLDs of the core and each shell are \ |
---|
58 | individually specified." |
---|
59 | |
---|
60 | description = """\ |
---|
61 | Form factor for a core muti-shell (up to 4) sphere normalized by the volume. |
---|
62 | Each shell can have a unique thickness and sld. |
---|
63 | |
---|
64 | background:background, |
---|
65 | rad_core0: radius of sphere(core) |
---|
66 | thick_shell#:the thickness of the shell# |
---|
67 | sld_core0: the SLD of the sphere |
---|
68 | sld_solv: the SLD of the solvent |
---|
69 | sld_shell: the SLD of the shell# |
---|
70 | A_shell#: the coefficient in the exponential function |
---|
71 | |
---|
72 | |
---|
73 | scale: 1.0 if data is on absolute scale |
---|
74 | volfraction: volume fraction of spheres |
---|
75 | radius: the radius of the core |
---|
76 | sld: the SLD of the core |
---|
77 | thick_shelli: the thickness of the i'th shell from the core |
---|
78 | sld_shelli: the SLD of the i'th shell from the core |
---|
79 | sld_solvent: the SLD of the solvent |
---|
80 | background: incoherent background |
---|
81 | |
---|
82 | """ |
---|
83 | |
---|
84 | category = "shape:sphere" |
---|
85 | |
---|
86 | |
---|
87 | # ["name", "units", default, [lower, upper], "type","description"], |
---|
88 | parameters = [["sld_core", "1e-6/Ang^2", 1.0, [-inf, inf], "sld", |
---|
89 | "Core scattering length density"], |
---|
90 | ["radius", "Ang", 200., [0, inf], "volume", |
---|
91 | "Radius of the core"], |
---|
92 | ["sld_solvent", "1e-6/Ang^2", 6.4, [-inf, inf], "sld", |
---|
93 | "Solvent scattering length density"], |
---|
94 | ["n", "", 1, [0, 10], "volume", |
---|
95 | "number of shells"], |
---|
96 | ["sld[n]", "1e-6/Ang^2", 1.7, [-inf, inf], "sld", |
---|
97 | "scattering length density of shell k"], |
---|
98 | ["thickness[n]", "Ang", 40., [0, inf], "volume", |
---|
99 | "Thickness of shell k"], |
---|
100 | ] |
---|
101 | |
---|
102 | source = ["lib/sph_j1c.c", "core_multi_shell.c"] |
---|
103 | |
---|
104 | def profile(sld_core, radius, sld_solvent, n, sld, thickness): |
---|
105 | """ |
---|
106 | Returns the SLD profile *r* (Ang), and *rho* (1e-6/Ang^2). |
---|
107 | """ |
---|
108 | z = [] |
---|
109 | rho = [] |
---|
110 | |
---|
111 | # add in the core |
---|
112 | z.append(0) |
---|
113 | rho.append(sld_core) |
---|
114 | z.append(radius) |
---|
115 | rho.append(sld_core) |
---|
116 | |
---|
117 | # add in the shells |
---|
118 | for k in range(int(n)): |
---|
119 | # Left side of each shells |
---|
120 | z.append(z[-1]) |
---|
121 | rho.append(sld[k]) |
---|
122 | z.append(z[-1] + thickness[k]) |
---|
123 | rho.append(sld[k]) |
---|
124 | # add in the solvent |
---|
125 | z.append(z[-1]) |
---|
126 | rho.append(sld_solvent) |
---|
127 | z.append(z[-1]*1.25) |
---|
128 | rho.append(sld_solvent) |
---|
129 | |
---|
130 | return np.asarray(z), np.asarray(rho) |
---|
131 | |
---|
132 | def ER(radius, n, thickness): |
---|
133 | """Effective radius""" |
---|
134 | n = n[0] # n cannot be polydisperse |
---|
135 | return np.sum(thickness[:n], axis=0) + radius |
---|
136 | |
---|
137 | demo = dict(sld_core=6.4, |
---|
138 | radius=60, |
---|
139 | sld_solvent=6.4, |
---|
140 | n=2, |
---|
141 | sld=[2.0, 3.0], |
---|
142 | thickness=20, |
---|
143 | thickness1_pd=0.3, |
---|
144 | thickness2_pd=0.3, |
---|
145 | thickness1_pd_n=10, |
---|
146 | thickness2_pd_n=10, |
---|
147 | ) |
---|