source: sasmodels/sasmodels/models/lamellar_hg_stack_caille.py @ 3a1fc7d

core_shell_microgelsmagnetic_modelticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 3a1fc7d was 1511c37c, checked in by Paul Kienzle <pkienzle@…>, 7 years ago

tuned random model generation for more models

  • Property mode set to 100644
File size: 5.1 KB
Line 
1# Note: model title and parameter table are inserted automatically
2r"""
3This model provides the scattering intensity, $I(q) = P(q)S(q)$, for a lamellar
4phase where a random distribution in solution are assumed. Here a Caille $S(q)$
5is used for the lamellar stacks.
6
7The scattering intensity $I(q)$ is
8
9.. math::
10
11    I(q) = 2 \pi \frac{P(q)S(q)}{q^2\delta }
12
13
14The form factor $P(q)$ is
15
16.. math::
17
18        P(q) = \frac{4}{q^2}\big\{
19        \Delta\rho_H \left[\sin[q(\delta_H + \delta_T)] - \sin(q\delta_T)\right]
20            + \Delta\rho_T\sin(q\delta_T)\big\}^2
21
22and the structure factor $S(q)$ is
23
24.. math::
25
26    S(q) = 1 + 2 \sum_1^{N-1}\left(1-\frac{n}{N}\right)
27        \cos(qdn)\exp\left(-\frac{2q^2d^2\alpha(n)}{2}\right)
28
29where
30
31.. math::
32    :nowrap:
33
34    \begin{align*}
35    \alpha(n) &= \frac{\eta_{cp}}{4\pi^2} \left(\ln(\pi n)+\gamma_E\right)
36              &&  \\
37    \gamma_E  &= 0.5772156649
38              && \text{Euler's constant} \\
39    \eta_{cp} &= \frac{q_o^2k_B T}{8\pi\sqrt{K\overline{B}}}
40              && \text{Caille constant}
41    \end{align*}
42
43
44$\delta_T$ is the tail length (or *length_tail*), $\delta_H$ is the head
45thickness (or *length_head*), $\Delta\rho_H$ is SLD(headgroup) - SLD(solvent),
46and $\Delta\rho_T$ is SLD(tail) - SLD(headgroup). Here $d$ is (repeat) spacing,
47$K$ is smectic bending elasticity, $B$ is compression modulus, and $N$ is the
48number of lamellar plates (*Nlayers*).
49
50NB: **When the Caille parameter is greater than approximately 0.8 to 1.0, the
51assumptions of the model are incorrect.**  And due to a complication of the
52model function, users are responsible for making sure that all the assumptions
53are handled accurately (see the original reference below for more details).
54
55Non-integer numbers of stacks are calculated as a linear combination of
56results for the next lower and higher values.
57
58Be aware that the computations may be very slow.
59
60The 2D scattering intensity is calculated in the same way as 1D, where
61the $q$ vector is defined as
62
63.. math::
64
65    q = \sqrt{q_x^2 + q_y^2}
66
67
68References
69----------
70
71F Nallet, R Laversanne, and D Roux, J. Phys. II France, 3, (1993) 487-502
72
73also in J. Phys. Chem. B, 105, (2001) 11081-11088
74"""
75from numpy import inf
76
77name = "lamellar_hg_stack_caille"
78title = "Random lamellar head/tail/tail/head sheet with Caille structure factor"
79description = """\
80    [Random lamellar phase with Caille  structure factor]
81        randomly oriented stacks of infinite sheets
82        with Caille S(Q), having polydisperse spacing.
83        layer thickness =(H+T+T+H) = 2(Head+Tail)
84        sld = Tail scattering length density
85        sld_head = Head scattering length density
86        sld_solvent = solvent scattering length density
87        background = incoherent background
88        scale = scale factor
89"""
90category = "shape:lamellae"
91
92single = False  # TODO: check
93parameters = [
94    #   [ "name", "units", default, [lower, upper], "type",
95    #     "description" ],
96    ["length_tail", "Ang", 10, [0, inf], "volume",
97     "Tail thickness"],
98    ["length_head", "Ang", 2, [0, inf], "volume",
99     "head thickness"],
100    ["Nlayers", "", 30, [1, inf], "",
101     "Number of layers"],
102    ["d_spacing", "Ang", 40., [0.0, inf], "volume",
103     "lamellar d-spacing of Caille S(Q)"],
104    ["Caille_parameter", "", 0.001, [0.0, 0.8], "",
105     "Caille parameter"],
106    ["sld", "1e-6/Ang^2", 0.4, [-inf, inf], "sld",
107     "Tail scattering length density"],
108    ["sld_head", "1e-6/Ang^2", 2.0, [-inf, inf], "sld",
109     "Head scattering length density"],
110    ["sld_solvent", "1e-6/Ang^2", 6, [-inf, inf], "sld",
111     "Solvent scattering length density"],
112    ]
113
114source = ["lamellar_hg_stack_caille.c"]
115
116# No volume normalization despite having a volume parameter
117# This should perhaps be volume normalized?
118form_volume = """
119    return 1.0;
120    """
121
122# ER defaults to 0.0
123# VR defaults to 1.0
124
125def random():
126    import numpy as np
127    total_thickness = 10**np.random.uniform(2, 4.7)
128    Nlayers = np.random.randint(2, 200)
129    d_spacing = total_thickness / Nlayers
130    thickness = d_spacing * np.random.uniform(0, 1)
131    length_head = thickness * np.random.uniform(0, 1)
132    length_tail = thickness - length_head
133    Caille_parameter = np.random.uniform(0, 0.8)
134    pars = dict(
135        length_head=length_head,
136        length_tail=length_tail,
137        Nlayers=Nlayers,
138        d_spacing=d_spacing,
139        Caille_parameter=Caille_parameter,
140    )
141    return pars
142
143demo = dict(
144    scale=1, background=0,
145    Nlayers=20, d_spacing=200., Caille_parameter=0.05,
146    length_tail=15, length_head=10,
147    #sld=-1, sld_head=4.0, sld_solvent=6.0,
148    sld=-1, sld_head=4.1, sld_solvent=6.0,
149    length_tail_pd=0.1, length_tail_pd_n=20,
150    length_head_pd=0.05, length_head_pd_n=30,
151    d_spacing_pd=0.2, d_spacing_pd_n=40,
152    )
153
154#
155tests = [[{'scale': 1.0, 'background': 0.0, 'length_tail': 10.0, 'length_head': 2.0,
156           'Nlayers': 30.0, 'd_spacing': 40., 'Caille_parameter': 0.001, 'sld': 0.4,
157           'sld_head': 2.0, 'sld_solvent': 6.0, 'length_tail_pd': 0.0,
158           'length_head_pd': 0.0, 'd_spacing_pd': 0.0}, [0.001], [6838238.571488]]]
159# ADDED by: RKH  ON: 18Mar2016  converted from sasview previously, now renaming everything & sorting the docs
Note: See TracBrowser for help on using the repository browser.