source: sasmodels/sasmodels/models/gel_fit.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: 3.9 KB
Line 
1r"""
2*This model was implemented by an interested user!*
3
4Unlike a concentrated polymer solution, the fine-scale polymer distribution
5in a gel involves at least two characteristic length scales,
6a shorter correlation length ( $a1$ ) to describe the rapid fluctuations
7in the position of the polymer chains that ensure thermodynamic equilibrium,
8and a longer distance (denoted here as $a2$ ) needed to account for the static
9accumulations of polymer pinned down by junction points or clusters of such
10points. The latter is derived from a simple Guinier function. Compare also the
11gauss_lorentz_gel model.
12
13
14Definition
15----------
16
17The scattered intensity $I(q)$ is calculated as
18
19.. math::
20
21    I(Q) = I(0)_L \frac{1}{\left( 1+\left[ ((D+1/3)Q^2a_{1}^2
22    \right]\right)^{D/2}} + I(0)_G exp\left( -Q^2a_{2}^2\right) + B
23
24where
25
26.. math::
27
28    a_{2}^2 \approx \frac{R_{g}^2}{3}
29
30Note that the first term reduces to the Ornstein-Zernicke equation
31when $D = 2$; ie, when the Flory exponent is 0.5 (theta conditions).
32In gels with significant hydrogen bonding $D$ has been reported to be
33~2.6 to 2.8.
34
35
36References
37----------
38
39.. [#] Mitsuhiro Shibayama, Toyoichi Tanaka, Charles C Han, *J. Chem. Phys.* 1992, 97 (9), 6829-6841
40
41.. [#] Simon Mallam, Ferenc Horkay, Anne-Marie Hecht, Adrian R Rennie, Erik Geissler, *Macromolecules* 1991, 24, 543-548
42
43Source
44------
45
46`gel_fit.py <https://github.com/SasView/sasmodels/blob/master/sasmodels/models/gel_fit.py>`_
47
48`gel_fit.c <https://github.com/SasView/sasmodels/blob/master/sasmodels/models/gel_fit.c>`_
49
50Authorship and Verification
51----------------------------
52
53* **Author:**
54* **Last Modified by:**
55* **Last Reviewed by:**
56* **Source added by :** Steve King **Date:** March 25, 2019
57"""
58
59import numpy as np
60from numpy import inf
61
62name = "gel_fit"
63title = "Fitting using fine-scale polymer distribution in a gel."
64description = """\
65    Structure factor for interacting particles:
66
67    Shibayama-Geissler Two-Length Scale Fit for Gels (GelFit)
68
69    Shibayama; Tanaka; Han J Chem Phys (1992), 97(9), 6829-6841
70    Mallam; Horkay; Hecht; Rennie; Geissler, Macromol (1991), 24, 543
71"""
72category = "shape-independent"
73
74# pylint: disable=bad-whitespace, line-too-long
75#             ["name", "units", default, [lower, upper], "type","description"],
76parameters = [["guinier_scale",    "cm^-1",   1.7, [-inf, inf], "", "Guinier length scale"],
77              ["lorentz_scale", "cm^-1",   3.5, [-inf, inf], "", "Lorentzian length scale"],
78              ["rg",  "Ang",     104.0, [2, inf],    "", "Radius of gyration"],
79              ["fractal_dim",      "",          2.0, [0, inf],    "", "Fractal exponent"],
80              ["cor_length",       "Ang",      16.0, [0, inf],    "", "Correlation length"]
81             ]
82# pylint: enable=bad-whitespace, line-too-long
83
84source = ["gel_fit.c"]
85
86def random():
87    """Return a random parameter set for the model."""
88    guinier_scale = 10**np.random.uniform(1, 3)
89    lorentz_scale = 10**np.random.uniform(1, 3)
90    rg = 10**np.random.uniform(1, 5)
91    fractal_dim = np.random.uniform(0, 6)
92    cor_length = 10**np.random.uniform(0, 3)
93    pars = dict(
94        #background=0,
95        scale=1,
96        guinier_scale=guinier_scale,
97        lorentz_scale=lorentz_scale,
98        rg=rg,
99        fractal_dim=fractal_dim,
100        cor_length=cor_length
101    )
102    return pars
103
104demo = dict(background=0.01,
105            guinier_scale=1.7,
106            lorentz_scale=3.5,
107            rg=104,
108            fractal_dim=2.0,
109            cor_length=16.0)
110
111tests = [[{'guinier_scale': 1.0,
112           'lorentz_scale': 1.0,
113           'rg': 10.0,
114           'fractal_dim': 10.0,
115           'cor_length': 20.0,
116           'background': 0.0,
117          }, 0.1, 0.716532],
118
119         [{'guinier_scale': 4.0,
120           'lorentz_scale': 10.0,
121           'rg': 500.0,
122           'fractal_dim': 1.0,
123           'cor_length': 20.0,
124           'background': 20.0,
125          }, 5.0, 20.1224653026],
126        ]
Note: See TracBrowser for help on using the repository browser.