source: sasmodels/sasmodels/models/fractal_core_shell.py @ 64eecf7

core_shell_microgelscostrafo411magnetic_modelticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 64eecf7 was 64eecf7, checked in by Paul Kienzle <pkienzle@…>, 7 years ago

Merge branch 'master' into ticket-510

  • Property mode set to 100644
File size: 5.9 KB
Line 
1r"""
2Definition
3----------
4Calculates the scattering from a fractal structure with a primary building
5block of core-shell spheres, as opposed to just homogeneous spheres in
6the fractal model. It is an extension of the well known Teixeira\ [#teixeira]_
7fractal model replacing the $P(q)$ of a solid sphere with that of a core-shell
8sphere. This model could find use for aggregates of coated particles, or
9aggregates of vesicles for example.
10
11.. math::
12
13    I(q) = P(q)S(q) + \text{background}
14
15Where $P(q)$ is the core-shell form factor and $S(q)$ is the
16Teixeira\ [#teixeira]_ fractal structure factor both of which are given again
17below:
18
19.. math::
20
21    P(q) &= \frac{\phi}{V_s}\left[3V_c(\rho_c-\rho_s)
22    \frac{\sin(qr_c)-qr_c\cos(qr_c)}{(qr_c)^3}+
23    3V_s(\rho_s-\rho_{solv})
24    \frac{\sin(qr_s)-qr_s\cos(qr_s)}{(qr_s)^3}\right]^2
25
26    S(q) &= 1 + \frac{D_f\ \Gamma\!(D_f-1)}{[1+1/(q\xi)^2]^{(D_f-1)/2}}
27    \frac{\sin[(D_f-1)\tan^{-1}(q\xi)]}{(qr_s)^{D_f}}
28
29where $\phi$ is the volume fraction of particles, $V_s$ is the volume of the
30whole particle, $V_c$ is the volume of the core, $\rho_c$, $\rho_s$, and
31$\rho_{solv}$ are the scattering length densities of the core, shell, and
32solvent respectively, $r_c$ and $r_s$ are the radius of the core and the radius
33of the whole particle respectively, $D_f$ is the fractal dimension, and $\xi$ the
34correlation length.
35
36Polydispersity of radius and thickness are also provided for.
37
38This model does not allow for anisotropy and thus the 2D scattering intensity
39is calculated in the same way as 1D, where the $q$ vector is defined as
40
41.. math::
42
43    q = \sqrt{q_x^2 + q_y^2}
44
45Our model is derived from the form factor calculations implemented in IGOR
46macros by the NIST Center for Neutron Research\ [#Kline]_
47
48References
49----------
50
51.. [#teixeira] J Teixeira, *J. Appl. Cryst.*, 21 (1988) 781-785
52.. [#Kline]  S R Kline, *J Appl. Cryst.*, 39 (2006) 895
53
54Authorship and Verification
55----------------------------
56
57* **Author:** NIST IGOR/DANSE **Date:** pre 2010
58* **Last Modified by:** Paul Butler and Paul Kienzle **on:** November 27, 2016
59* **Last Reviewed by:** Paul Butler and Paul Kienzle **on:** November 27, 2016
60
61"""
62
63from numpy import pi, inf
64
65name = "fractal_core_shell"
66title = "Scattering from a fractal structure formed from core shell spheres"
67description = """\
68    Model for fractal aggregates of core-shell primary particles. It is based on
69    the Teixeira model for the S(q) of a fractal * P(q) for a core-shell sphere
70
71    radius =  the radius of the core
72    thickness = thickness of the shell
73    thick_layer = thickness of a layer
74    sld_core = the SLD of the core
75    sld_shell = the SLD of the shell
76    sld_solvent = the SLD of the solvent
77    volfraction = volume fraction of core-shell particles
78    fractal_dim = fractal dimension
79    cor_length = correlation length of the fractal like aggretates
80    """
81category = "shape-independent"
82
83# pylint: disable=bad-whitespace, line-too-long
84#   ["name", "units", default, [lower, upper], "type","description"],
85parameters = [
86    ["radius",      "Ang",        60.0, [0.0, inf],  "volume", "Sphere core radius"],
87    ["thickness",   "Ang",        10.0, [0.0, inf],  "volume", "Sphere shell thickness"],
88    ["sld_core",    "1e-6/Ang^2", 1.0,  [-inf, inf], "sld",    "Sphere core scattering length density"],
89    ["sld_shell",   "1e-6/Ang^2", 2.0,  [-inf, inf], "sld",    "Sphere shell scattering length density"],
90    ["sld_solvent", "1e-6/Ang^2", 3.0,  [-inf, inf], "sld",    "Solvent scattering length density"],
91    ["volfraction", "",           1.0,  [0.0, inf],  "",       "Volume fraction of building block spheres"],
92    ["fractal_dim",    "",        2.0,  [0.0, 6.0],  "",       "Fractal dimension"],
93    ["cor_length",  "Ang",      100.0,  [0.0, inf],  "",       "Correlation length of fractal-like aggregates"],
94]
95# pylint: enable=bad-whitespace, line-too-long
96
97source = ["lib/sas_3j1x_x.c", "lib/sas_gamma.c", "lib/core_shell.c",
98          "lib/fractal_sq.c", "fractal_core_shell.c"]
99
100def random():
101    import numpy as np
102    outer_radius = 10**np.random.uniform(0.7, 4)
103    # Use a distribution with a preference for thin shell or thin core
104    # Avoid core,shell radii < 1
105    thickness = np.random.beta(0.5, 0.5)*(outer_radius-2) + 1
106    radius = outer_radius - thickness
107    cor_length = 10**np.random.uniform(0.7, 2)*outer_radius
108    volfraction = 10**np.random.uniform(-3, -1)
109    fractal_dim = 2*np.random.beta(3, 4) + 1
110    pars = dict(
111        #background=0, sld_block=1, sld_solvent=0,
112        volfraction=volfraction,
113        radius=radius,
114        cor_length=cor_length,
115        fractal_dim=fractal_dim,
116    )
117    return pars
118
119demo = dict(scale=0.05,
120            background=0,
121            radius=20,
122            thickness=5,
123            sld_core=3.5,
124            sld_shell=1.0,
125            sld_solvent=6.35,
126            volfraction=0.05,
127            fractal_dim=2.0,
128            cor_length=100.0)
129
130def ER(radius, thickness):
131    """
132        Equivalent radius
133        @param radius: core radius
134        @param thickness: shell thickness
135    """
136    return radius + thickness
137
138def VR(radius, thickness):
139    """
140        Volume ratio
141        @param radius: core radius
142        @param thickness: shell thickness
143    """
144    whole = 4.0/3.0 * pi * (radius + thickness)**3
145    core = 4.0/3.0 * pi * radius**3
146    return whole, whole-core
147
148tests = [[{'radius': 20.0, 'thickness': 10.0}, 'ER', 30.0],
149         [{'radius': 20.0, 'thickness': 10.0}, 'VR', 0.703703704]]
150
151#         # The SasView test result was 0.00169, with a background of 0.001
152#         # They are however wrong as we now know.  IGOR might be a more
153#         # appropriate source. Otherwise will just have to assume this is now
154#         # correct and self generate a correct answer for the future. Until we
155#         # figure it out leave the tests commented out
156#         [{'radius': 60.0,
157#           'thickness': 10.0,
158#           'sld_core': 1.0,
159#           'sld_shell': 2.0,
160#           'sld_solvent': 3.0,
161#           'background': 0.0
162#          }, 0.015211, 692.84]]
Note: See TracBrowser for help on using the repository browser.