1 | r""" |
---|
2 | Definition |
---|
3 | ---------- |
---|
4 | |
---|
5 | The figure below shows a schematic of a large droplet surrounded by several |
---|
6 | smaller particles forming a structure similar to that of Pickering emulsions. |
---|
7 | |
---|
8 | .. figure:: img/raspberry_geometry.jpg |
---|
9 | |
---|
10 | Schematic of the raspberry model |
---|
11 | |
---|
12 | In order to calculate the form factor of the entire complex, the |
---|
13 | self-correlation of the large droplet, the self-correlation of the particles, |
---|
14 | the correlation terms between different particles and the cross terms between |
---|
15 | large droplet and small particles all need to be calculated. |
---|
16 | |
---|
17 | Consider two infinitely thin shells of radii $R_1$ and $R_2$ separated by |
---|
18 | distance $r$. The general structure of the equation is then the form factor |
---|
19 | of the two shells multiplied by the phase factor that accounts for the |
---|
20 | separation of their centers. |
---|
21 | |
---|
22 | .. math:: |
---|
23 | |
---|
24 | S(q) = \frac{\sin(qR_1)}{qR_1}\frac{\sin(qR_2)}{qR_2}\frac{\sin(qr)}{qr} |
---|
25 | |
---|
26 | In this case, the large droplet and small particles are solid spheres rather |
---|
27 | than thin shells. Thus the two terms must be integrated over $R_L$ and $R_S$ |
---|
28 | respectively using the weighting function of a sphere. We then obtain the |
---|
29 | functions for the form of the two spheres: |
---|
30 | |
---|
31 | .. math:: |
---|
32 | |
---|
33 | \Psi_L = \int_0^{R_L}(4\pi R^2_L)\frac{\sin(qR_L)}{qR_L}dR_L = |
---|
34 | \frac{3[\sin(qR_L)-qR_L\cos(qR_L)]}{(qR_L)^2} |
---|
35 | |
---|
36 | .. math:: |
---|
37 | |
---|
38 | \Psi_S = \int_0^{R_S}(4\pi R^2_S)\frac{\sin(qR_S)}{qR_S}dR_S = |
---|
39 | \frac{3[\sin(qR_S)-qR_L\cos(qR_S)]}{(qR_S)^2} |
---|
40 | |
---|
41 | The cross term between the large droplet and small particles is given by: |
---|
42 | |
---|
43 | .. math:: |
---|
44 | S_{LS} = \Psi_L\Psi_S\frac{\sin(q(R_L+\delta R_S))}{q(R_L+\delta\ R_S)} |
---|
45 | |
---|
46 | and the self term between small particles is given by: |
---|
47 | |
---|
48 | .. math:: |
---|
49 | S_{SS} = \Psi_S^2\biggl[\frac{\sin(q(R_L+\delta R_S))}{q(R_L+\delta\ R_S)} |
---|
50 | \biggr]^2 |
---|
51 | |
---|
52 | The number of small particles per large droplet, $N_p$, is given by: |
---|
53 | |
---|
54 | .. math:: |
---|
55 | |
---|
56 | N_p = \frac{\phi_S\phi_\text{surface}V_L}{\phi_L V_S} |
---|
57 | |
---|
58 | where $\phi_S$ is the volume fraction of small particles in the sample, |
---|
59 | $\phi_\text{surface}$ is the fraction of the small particles that are adsorbed |
---|
60 | to the large droplets, $\phi_L$ is the volume fraction of large droplets in the |
---|
61 | sample, and $V_S$ and $V_L$ are the volumes of individual small particles and |
---|
62 | large droplets respectively. |
---|
63 | |
---|
64 | The form factor of the entire complex can now be calculated including the excess |
---|
65 | scattering length densities of the components $\Delta\rho_L$ and $\Delta\rho_S$, |
---|
66 | where $\Delta\rho_x = \left|\rho_x-\rho_\text{solvent}\right|$ : |
---|
67 | |
---|
68 | .. math:: |
---|
69 | |
---|
70 | P_{LS} = \frac{1}{M^2}\bigl[(\Delta\rho_L)^2V_L^2\Psi_L^2 |
---|
71 | +N_p(\Delta\rho_S)^2V_S^2\Psi_S^2 |
---|
72 | + N_p(1-N_p)(\Delta\rho_S)^2V_S^2S_{SS} |
---|
73 | + 2N_p\Delta\rho_L\Delta\rho_SV_LV_SS_{LS}\bigr] |
---|
74 | |
---|
75 | where M is the total scattering length of the whole complex : |
---|
76 | |
---|
77 | .. math:: |
---|
78 | M = \Delta\rho_LV_L + N_p\Delta\rho_SV_S |
---|
79 | |
---|
80 | In a real system, there will ususally be an excess of small particles such that |
---|
81 | some fraction remain unbound. Therefore the overall scattering intensity is |
---|
82 | given by: |
---|
83 | |
---|
84 | .. math:: |
---|
85 | I(Q) = I_{LS}(Q) + I_S(Q) = (\phi_L(\Delta\rho_L)^2V_L + |
---|
86 | \phi_S\phi_\text{surface}N_p(\Delta\rho_S)^2V_S)P_{LS} |
---|
87 | + \phi_S(1-\phi_\text{surface})(\Delta\rho_S)^2V_S\Psi_S^2 |
---|
88 | |
---|
89 | A useful parameter to extract is the fraction of the surface area of the large |
---|
90 | droplets that is covered by small particles. This can be calculated from the |
---|
91 | model parameters as: |
---|
92 | |
---|
93 | .. math:: |
---|
94 | \chi = \frac{4\phi_L\phi_\text{surface}(R_L+\delta R_S)}{\phi_LR_S} |
---|
95 | |
---|
96 | |
---|
97 | References |
---|
98 | ---------- |
---|
99 | |
---|
100 | .. [#] K Larson-Smith, A Jackson, and D C Pozzo, *Small angle scattering model for Pickering emulsions and raspberry particles*, *Journal of Colloid and Interface Science*, 343(1) (2010) 36-41 |
---|
101 | |
---|
102 | Source |
---|
103 | ------ |
---|
104 | |
---|
105 | `raspberry.py <https://github.com/SasView/sasmodels/blob/master/sasmodels/models/raspberry.py>`_ |
---|
106 | |
---|
107 | `raspberry.c <https://github.com/SasView/sasmodels/blob/master/sasmodels/models/raspberry.c>`_ |
---|
108 | |
---|
109 | Authorship and Verification |
---|
110 | ---------------------------- |
---|
111 | |
---|
112 | * **Author:** Andrew Jackson **Date:** 2008 |
---|
113 | * **Last Modified by:** Andrew Jackson **Date:** March 20, 2016 |
---|
114 | * **Last Reviewed by:** Andrew Jackson **Date:** March 20, 2016 |
---|
115 | * **Source added by :** Steve King **Date:** March 25, 2019 |
---|
116 | """ |
---|
117 | |
---|
118 | import numpy as np |
---|
119 | from numpy import inf |
---|
120 | |
---|
121 | name = "raspberry" |
---|
122 | title = "Calculates the form factor, *P(q)*, for a 'Raspberry-like' structure \ |
---|
123 | where there are smaller spheres at the surface of a larger sphere, such as the \ |
---|
124 | structure of a Pickering emulsion." |
---|
125 | description = """ |
---|
126 | RaspBerryModel: |
---|
127 | volfraction_lg = volume fraction large spheres |
---|
128 | radius_lg = radius large sphere (A) |
---|
129 | sld_lg = sld large sphere (A-2) |
---|
130 | volfraction_sm = volume fraction small spheres |
---|
131 | radius_sm = radius small sphere (A) |
---|
132 | surface_fraction = fraction of small spheres at surface |
---|
133 | sld_sm = sld small sphere |
---|
134 | penetration = small sphere penetration (A) |
---|
135 | sld_solvent = sld solvent |
---|
136 | background = background (cm-1) |
---|
137 | Ref: J. coll. inter. sci. (2010) vol. 343 (1) pp. 36-41.""" |
---|
138 | category = "shape:sphere" |
---|
139 | |
---|
140 | |
---|
141 | # [ "name", "units", default, [lower, upper], "type", "description"], |
---|
142 | parameters = [["sld_lg", "1e-6/Ang^2", -0.4, [-inf, inf], "sld", |
---|
143 | "large particle scattering length density"], |
---|
144 | ["sld_sm", "1e-6/Ang^2", 3.5, [-inf, inf], "sld", |
---|
145 | "small particle scattering length density"], |
---|
146 | ["sld_solvent", "1e-6/Ang^2", 6.36, [-inf, inf], "sld", |
---|
147 | "solvent scattering length density"], |
---|
148 | ["volfraction_lg", "", 0.05, [-inf, inf], "", |
---|
149 | "volume fraction of large spheres"], |
---|
150 | ["volfraction_sm", "", 0.005, [-inf, inf], "", |
---|
151 | "volume fraction of small spheres"], |
---|
152 | ["surface_fraction", "", 0.4, [-inf, inf], "", |
---|
153 | "fraction of small spheres at surface"], |
---|
154 | ["radius_lg", "Ang", 5000, [0, inf], "volume", |
---|
155 | "radius of large spheres"], |
---|
156 | ["radius_sm", "Ang", 100, [0, inf], "volume", |
---|
157 | "radius of small spheres"], |
---|
158 | ["penetration", "Ang", 0, [-1, 1], "volume", |
---|
159 | "fractional penetration depth of small spheres into large sphere"], |
---|
160 | ] |
---|
161 | |
---|
162 | source = ["lib/sas_3j1x_x.c", "raspberry.c"] |
---|
163 | effective_radius_type = ["radius_large", "radius_outer"] |
---|
164 | |
---|
165 | def random(): |
---|
166 | """Return a random parameter set for the model.""" |
---|
167 | # Limit volume fraction to 20% each |
---|
168 | volfraction_lg = 10**np.random.uniform(-3, -0.3) |
---|
169 | volfraction_sm = 10**np.random.uniform(-3, -0.3) |
---|
170 | # Prefer most particles attached (peak near 60%), but not all or none |
---|
171 | surface_fraction = np.random.beta(6, 4) |
---|
172 | radius_lg = 10**np.random.uniform(1.7, 4.7) # 500 - 50000 A |
---|
173 | radius_sm = 10**np.random.uniform(-3, -0.3)*radius_lg # 0.1% - 20% |
---|
174 | penetration = np.random.beta(1, 10) # up to 20% pen. for 90% of examples |
---|
175 | pars = dict( |
---|
176 | volfraction_lg=volfraction_lg, |
---|
177 | volfraction_sm=volfraction_sm, |
---|
178 | surface_fraction=surface_fraction, |
---|
179 | radius_lg=radius_lg, |
---|
180 | radius_sm=radius_sm, |
---|
181 | penetration=penetration, |
---|
182 | ) |
---|
183 | return pars |
---|
184 | |
---|
185 | # parameters for demo |
---|
186 | demo = dict(scale=1, background=0.001, |
---|
187 | sld_lg=-0.4, sld_sm=3.5, sld_solvent=6.36, |
---|
188 | volfraction_lg=0.05, volfraction_sm=0.005, surface_fraction=0.4, |
---|
189 | radius_lg=5000, radius_sm=100, penetration=0.0, |
---|
190 | radius_lg_pd=.2, radius_lg_pd_n=10) |
---|
191 | |
---|
192 | # TODO: update tests so the parameters correspond to SasView parameters |
---|
193 | # The model was re-parameterized so the results have changed. |
---|
194 | # NOTE: test results taken from values returned by SasView 3.1.2, with |
---|
195 | # 0.001 added for a non-zero default background. |
---|
196 | #tests = [[{}, 0.0412755102041, 0.286669115234], |
---|
197 | # [{}, 0.5, 0.00103818393658], |
---|
198 | # ] |
---|