source: sasmodels/sasmodels/models/lamellar_hg_stack_caille.py @ a34b811

ticket-1257-vesicle-productticket_1156ticket_822_more_unit_tests
Last change on this file since a34b811 was 0507e09, checked in by smk78, 5 years ago

Added link to source code to each model. Closes #883

  • Property mode set to 100644
File size: 5.6 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
71.. [#] F Nallet, R Laversanne, and D Roux, *J. Phys. II France*, 3, (1993) 487-502
72.. [#] J Berghausen, J Zipfel, P Lindner, W Richtering, *J. Phys. Chem. B*, 105, (2001) 11081-11088
73
74Source
75------
76
77`lamellar_hg_stack_caille.py <https://github.com/SasView/sasmodels/blob/master/sasmodels/models/lamellar_hg_stack_caille.py>`_
78
79`lamellar_hg_stack_caille.c <https://github.com/SasView/sasmodels/blob/master/sasmodels/models/lamellar_hg_stack_caille.c>`_
80
81Authorship and Verification
82----------------------------
83
84* **Author:**
85* **Last Modified by:**
86* **Last Reviewed by:**
87* **Source added by :** Steve King **Date:** March 25, 2019
88"""
89
90import numpy as np
91from numpy import inf
92
93name = "lamellar_hg_stack_caille"
94title = "Random lamellar head/tail/tail/head sheet with Caille structure factor"
95description = """\
96    [Random lamellar phase with Caille  structure factor]
97        randomly oriented stacks of infinite sheets
98        with Caille S(Q), having polydisperse spacing.
99        layer thickness =(H+T+T+H) = 2(Head+Tail)
100        sld = Tail scattering length density
101        sld_head = Head scattering length density
102        sld_solvent = solvent scattering length density
103        background = incoherent background
104        scale = scale factor
105"""
106category = "shape:lamellae"
107
108single = False  # TODO: check
109parameters = [
110    #   [ "name", "units", default, [lower, upper], "type",
111    #     "description" ],
112    ["length_tail", "Ang", 10, [0, inf], "volume",
113     "Tail thickness"],
114    ["length_head", "Ang", 2, [0, inf], "volume",
115     "head thickness"],
116    ["Nlayers", "", 30, [1, inf], "",
117     "Number of layers"],
118    ["d_spacing", "Ang", 40., [0.0, inf], "volume",
119     "lamellar d-spacing of Caille S(Q)"],
120    ["Caille_parameter", "", 0.001, [0.0, 0.8], "",
121     "Caille parameter"],
122    ["sld", "1e-6/Ang^2", 0.4, [-inf, inf], "sld",
123     "Tail scattering length density"],
124    ["sld_head", "1e-6/Ang^2", 2.0, [-inf, inf], "sld",
125     "Head scattering length density"],
126    ["sld_solvent", "1e-6/Ang^2", 6, [-inf, inf], "sld",
127     "Solvent scattering length density"],
128    ]
129
130source = ["lamellar_hg_stack_caille.c"]
131
132# No volume normalization despite having a volume parameter
133# This should perhaps be volume normalized?
134form_volume = """
135    return 1.0;
136    """
137
138def random():
139    """Return a random parameter set for the model."""
140    total_thickness = 10**np.random.uniform(2, 4.7)
141    Nlayers = np.random.randint(2, 200)
142    d_spacing = total_thickness / Nlayers
143    thickness = d_spacing * np.random.uniform(0, 1)
144    length_head = thickness * np.random.uniform(0, 1)
145    length_tail = thickness - length_head
146    Caille_parameter = np.random.uniform(0, 0.8)
147    pars = dict(
148        length_head=length_head,
149        length_tail=length_tail,
150        Nlayers=Nlayers,
151        d_spacing=d_spacing,
152        Caille_parameter=Caille_parameter,
153    )
154    return pars
155
156demo = dict(
157    scale=1, background=0,
158    Nlayers=20, d_spacing=200., Caille_parameter=0.05,
159    length_tail=15, length_head=10,
160    #sld=-1, sld_head=4.0, sld_solvent=6.0,
161    sld=-1, sld_head=4.1, sld_solvent=6.0,
162    length_tail_pd=0.1, length_tail_pd_n=20,
163    length_head_pd=0.05, length_head_pd_n=30,
164    d_spacing_pd=0.2, d_spacing_pd_n=40,
165    )
166
167#
168tests = [[{'scale': 1.0, 'background': 0.0, 'length_tail': 10.0, 'length_head': 2.0,
169           'Nlayers': 30.0, 'd_spacing': 40., 'Caille_parameter': 0.001, 'sld': 0.4,
170           'sld_head': 2.0, 'sld_solvent': 6.0, 'length_tail_pd': 0.0,
171           'length_head_pd': 0.0, 'd_spacing_pd': 0.0}, [0.001], [6838238.571488]]]
172# 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.