source: sasmodels/sasmodels/models/polymer_micelle.py @ 1e7b0db0

core_shell_microgelscostrafo411magnetic_modelticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since 1e7b0db0 was bba9361, checked in by richardh, 7 years ago

expanded docu in polymer_micelle, docu bugs in spinodal fixed

  • Property mode set to 100644
File size: 4.7 KB
Line 
1r"""
2
3This model provides the form factor, $P(q)$, for a micelle with a spherical
4core and Gaussian polymer chains attached to the surface, thus may be applied
5to block copolymer micelles. To work well the Gaussian chains must be much
6smaller than the core, which is often not the case.  Please study the
7reference carefully.
8
9Definition
10----------
11
12The 1D scattering intensity for this model is calculated according to
13the equations given by Pedersen (Pedersen, 2000), summarised briefly here.
14
15The micelle core is imagined as $N\_aggreg$ polymer heads, each of volume $v\_core$,
16which then defines a micelle core of $radius\_core$, which is a separate parameter
17even though it could be directly determined.
18The Gaussian random coil tails, of gyration radius $rg$, are imagined uniformly
19distributed around the spherical core, centred at a distance $radius\_core + d\_penetration.rg$
20from the micelle centre, where $d\_penetration$ is of order unity.
21A volume $v\_corona$ is defined for each coil.
22The model in detail seems to separately parametrise the terms for the shape of I(Q) and the
23relative intensity of each term, so use with caution and check parameters for consistency.
24The spherical core is monodisperse, so it's intensity and the cross terms may have sharp
25oscillations (use q resolution smearing if needs be to help remove them).
26
27.. math::
28    P(q) = N^2\beta^2_s\Phi(qR)^2+N\beta^2_cP_c(q)+2N^2\beta_s\beta_cS_{sc}s_c(q)+N(N-1)\beta_c^2S_{cc}(q)
29   
30    \beta_s = v\_core(sld\_core - sld\_solvent)
31   
32    \beta_c = v\_corona(sld\_corona - sld\_solvent)
33
34where $N = n\_aggreg$, and for the spherical core of radius $R$
35
36.. math::   
37   \Phi(qR)= \frac{\sin(qr) - qr\cos(qr)}{(qr)^3}
38
39whilst for the Gaussian coils
40
41.. math::
42
43   P_c(q) &= 2 [\exp(-Z) + Z - 1] / Z^2
44
45   Z &= (q R_g)^2
46
47The sphere to coil ( core to corona) and coil to coil (corona to corona) cross terms are
48approximated by:
49
50.. math::
51   
52   S_{sc}(q)=\Phi(qR)\psi(Z)\frac{sin(q(R+d.R_g))}{q(R+d.R_g)}
53   
54   S_{cc}(q)=\psi(Z)^2\left[\frac{sin(q(R+d.R_g))}{q(R+d.R_g)} \right ]^2
55   
56   \psi(Z)=\frac{[1-exp^{-Z}]}{Z}
57
58Validation
59----------
60
61$P(q)$ above is multiplied by $ndensity$, and a units conversion of 10^{-13}, so $scale$
62is likely 1.0 if the scattering data is in absolute units. This model has not yet been
63independently validated.
64
65
66References
67----------
68
69J Pedersen, *J. Appl. Cryst.*, 33 (2000) 637-640
70
71"""
72
73from numpy import inf
74
75name = "polymer_micelle"
76title = "Polymer micelle model"
77description = """
78This model provides the form factor, $P(q)$, for a micelle with a spherical
79core and Gaussian polymer chains attached to the surface, thus may be applied
80to block copolymer micelles. To work well the Gaussian chains must be much
81smaller than the core, which is often not the case.  Please study the
82reference to Pedersen and full documentation carefully.
83    """
84
85
86category = "shape:sphere"
87
88# pylint: disable=bad-whitespace, line-too-long
89#   ["name", "units", default, [lower, upper], "type","description"],
90parameters = [
91    ["ndensity",      "1e15/cm^3",  8.94, [0.0, inf], "", "Number density of micelles"],
92    ["v_core",        "Ang^3",  62624.0,  [0.0, inf], "", "Core volume "],
93    ["v_corona",      "Ang^3",  61940.0,  [0.0, inf], "", "Corona volume"],
94    ["sld_solvent",   "1e-6/Ang^2", 6.4,  [0.0, inf], "sld", "Solvent scattering length density"],
95    ["sld_core",      "1e-6/Ang^2", 0.34, [0.0, inf], "sld", "Core scattering length density"],
96    ["sld_corona",    "1e-6/Ang^2", 0.8,  [0.0, inf], "sld", "Corona scattering length density"],
97    ["radius_core",   "Ang",       45.0,  [0.0, inf], "", "Radius of core ( must be >> rg )"],
98    ["rg",    "Ang",       20.0,  [0.0, inf], "", "Radius of gyration of chains in corona"],
99    ["d_penetration", "",           1.0,  [-inf, inf], "", "Factor to mimic non-penetration of Gaussian chains"],
100    ["n_aggreg",      "",           6.0,  [-inf, inf], "", "Aggregation number of the micelle"],
101    ]
102# pylint: enable=bad-whitespace, line-too-long
103
104single = False
105
106source = ["lib/sph_j1c.c", "polymer_micelle.c"]
107
108demo = dict(scale=1, background=0,
109            ndensity=8.94,
110            v_core=62624.0,
111            v_corona=61940.0,
112            sld_solvent=6.4,
113            sld_core=0.34,
114            sld_corona=0.8,
115            radius_core=45.0,
116            rg=20.0,
117            d_penetration=1.0,
118            n_aggreg=6.0)
119
120
121tests = [
122    [{}, 0.01, 15.3532],
123    ]
124# RKH 20Mar2016 - need to check whether the core & corona volumes are per
125#                 monomer ??? and how aggregation number works!
126# renamed from micelle_spherical_core to polymer_micelle,
127# moved from shape-independent to spheres section.
128# Ought to be able to add polydisp to core? And add ability to x by S(Q) ?
Note: See TracBrowser for help on using the repository browser.