source: sasmodels/sasmodels/models/core_multi_shell.py @ d86f0fc

core_shell_microgelsmagnetic_modelticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since d86f0fc was 2d81cfe, checked in by Paul Kienzle <pkienzle@…>, 6 years ago

lint

  • Property mode set to 100644
File size: 4.9 KB
RevLine 
[f7930be]1r"""
2Definition
3----------
4
5This model is a trivial extension of the CoreShell function to a larger number
[40a87fa]6of shells. The scattering length density profile for the default sld values
[f7930be]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
[263daec]14The 2D scattering intensity is the same as $P(q)$ above, regardless of the
[2d73a53]15orientation of the $\vec q$ vector which is defined as
[f7930be]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
[263daec]25          effective radius for $S(Q)$ when $P(Q)*S(Q)$ is applied.
[f7930be]26
[40a87fa]27For information about polarised and magnetic scattering, see
[9a4811a]28the :ref:`magnetism` documentation.
[f7930be]29
30Our model uses the form factor calculations implemented in a c-library provided
[2d73a53]31by the NIST Center for Neutron Research (Kline, 2006) [#kline]_.
[f7930be]32
33References
34----------
35
[b0c4271]36.. [#] See the :ref:`core-shell-sphere` model documentation.
[2d73a53]37.. [#kline] S R Kline, *J Appl. Cryst.*, 39 (2006) 895
38.. [#] L A Feigin and D I Svergun, *Structure Analysis by Small-Angle X-Ray and
39   Neutron Scattering*, Plenum Press, New York, 1987.
[f7930be]40
[b0c4271]41Authorship and Verification
42----------------------------
[f7930be]43
[b0c4271]44* **Author:** NIST IGOR/DANSE **Date:** pre 2010
45* **Last Modified by:** Paul Kienzle **Date:** September 12, 2016
[2d73a53]46* **Last Reviewed by:** Paul Kienzle **Date:** September 12, 2016
[f7930be]47"""
48from __future__ import division
49
50import numpy as np
[40a87fa]51from numpy import inf
[f7930be]52
53name = "core_multi_shell"
54title = "This model provides the scattering from a spherical core with 1 to 4 \
55 concentric shell structures. The SLDs of the core and each shell are \
56 individually specified."
57
58description = """\
59Form factor for a core muti-shell (up to 4) sphere normalized by the volume.
60Each shell can have a unique thickness and sld.
61
62        background:background,
63        rad_core0: radius of sphere(core)
64        thick_shell#:the thickness of the shell#
65        sld_core0: the SLD of the sphere
66        sld_solv: the SLD of the solvent
67        sld_shell: the SLD of the shell#
68        A_shell#: the coefficient in the exponential function
[a151caa]69
70
[f7930be]71    scale: 1.0 if data is on absolute scale
72    volfraction: volume fraction of spheres
73    radius: the radius of the core
74    sld: the SLD of the core
75    thick_shelli: the thickness of the i'th shell from the core
76    sld_shelli: the SLD of the i'th shell from the core
77    sld_solvent: the SLD of the solvent
78    background: incoherent background
79
80"""
81
82category = "shape:sphere"
83
84
85#             ["name", "units", default, [lower, upper], "type","description"],
[42356c8]86parameters = [["sld_core", "1e-6/Ang^2", 1.0, [-inf, inf], "sld",
[f7930be]87               "Core scattering length density"],
[6f0e04f]88              ["radius", "Ang", 200., [0, inf], "volume",
[f7930be]89               "Radius of the core"],
[42356c8]90              ["sld_solvent", "1e-6/Ang^2", 6.4, [-inf, inf], "sld",
[f7930be]91               "Solvent scattering length density"],
[c5ac2b2]92              ["n", "", 1, [0, 10], "volume",
[f7930be]93               "number of shells"],
[42356c8]94              ["sld[n]", "1e-6/Ang^2", 1.7, [-inf, inf], "sld",
[f7930be]95               "scattering length density of shell k"],
[6f0e04f]96              ["thickness[n]", "Ang", 40., [0, inf], "volume",
[f7930be]97               "Thickness of shell k"],
[40a87fa]98             ]
[f7930be]99
[925ad6e]100source = ["lib/sas_3j1x_x.c", "core_multi_shell.c"]
[f7930be]101
[a151caa]102def random():
103    num_shells = np.minimum(np.random.poisson(3)+1, 10)
104    total_radius = 10**np.random.uniform(1.7, 4)
105    thickness = np.random.exponential(size=num_shells+1)
106    thickness *= total_radius/np.sum(thickness)
107    pars = dict(
108        #background=0,
109        n=num_shells,
110        radius=thickness[0],
111    )
112    for k, v in enumerate(thickness[1:]):
113        pars['thickness%d'%(k+1)] = v
114    return pars
115
[c5ac2b2]116def profile(sld_core, radius, sld_solvent, n, sld, thickness):
[f7930be]117    """
[e187b25]118    Returns the SLD profile *r* (Ang), and *rho* (1e-6/Ang^2).
[f7930be]119    """
[21fbab1]120    n = int(n+0.5)
[40a87fa]121    z = []
[e187b25]122    rho = []
[f7930be]123
124    # add in the core
[40a87fa]125    z.append(0)
[e187b25]126    rho.append(sld_core)
[40a87fa]127    z.append(radius)
[e187b25]128    rho.append(sld_core)
[f7930be]129
130    # add in the shells
[8c6fbbc]131    for k in range(int(n)):
[f7930be]132        # Left side of each shells
[40a87fa]133        z.append(z[-1])
[e187b25]134        rho.append(sld[k])
[40a87fa]135        z.append(z[-1] + thickness[k])
[e187b25]136        rho.append(sld[k])
[c5ac2b2]137    # add in the solvent
[40a87fa]138    z.append(z[-1])
[e187b25]139    rho.append(sld_solvent)
[40a87fa]140    z.append(z[-1]*1.25)
[e187b25]141    rho.append(sld_solvent)
[f7930be]142
[40a87fa]143    return np.asarray(z), np.asarray(rho)
[f7930be]144
[6f0e04f]145def ER(radius, n, thickness):
[40a87fa]146    """Effective radius"""
[5a0b3d7]147    n = int(n[0]+0.5)  # n is a control parameter and is not polydisperse
[6f0e04f]148    return np.sum(thickness[:n], axis=0) + radius
[f7930be]149
[40a87fa]150demo = dict(sld_core=6.4,
151            radius=60,
152            sld_solvent=6.4,
153            n=2,
154            sld=[2.0, 3.0],
155            thickness=20,
156            thickness1_pd=0.3,
157            thickness2_pd=0.3,
158            thickness1_pd_n=10,
159            thickness2_pd_n=10,
[2d81cfe]160           )
Note: See TracBrowser for help on using the repository browser.