source: sasmodels/sasmodels/models/mass_surface_fractal.py @ d507c3a

core_shell_microgelscostrafo411magnetic_modelrelease_v0.94release_v0.95ticket-1257-vesicle-productticket_1156ticket_1265_superballticket_822_more_unit_tests
Last change on this file since d507c3a was 168052c, checked in by piotr, 8 years ago

pylint prettification

  • Property mode set to 100644
File size: 4.5 KB
Line 
1r"""
2
3A number of natural and commercial processes form high-surface area materials
4as a result of the vapour-phase aggregation of primary particles.
5Examples of such materials include soots, aerosols, and fume or pyrogenic
6silicas. These are all characterised by cluster mass distributions (sometimes
7also cluster size distributions) and internal surfaces that are fractal in
8nature. The scattering from such materials displays two distinct breaks in
9log-log representation, corresponding to the radius-of-gyration of the primary
10particles, $rg$, and the radius-of-gyration of the clusters (aggregates),
11$Rg$. Between these boundaries the scattering follows a power law related to
12the mass fractal dimension, $Dm$, whilst above the high-Q boundary the
13scattering follows a power law related to the surface fractal dimension of
14the primary particles, $Ds$.
15
16Definition
17----------
18
19The scattered intensity I(q) is calculated using a modified
20Ornstein-Zernicke equation
21
22.. math::
23
24    I(q) = scale \times P(q) + background
25
26    P(q) = \left\{ \left[ 1+(q^2a)\right]^{D_m/2} \times
27                   \left[ 1+(q^2b)\right]^{(6-D_s-D_m)/2}
28           \right\}^{-1}
29
30    a = R_{g}^2/(3D_m/2)
31
32    b = r_{g}^2/[-3(D_s+D_m-6)/2]
33
34    scale = scale\_factor \times NV^2 (\rho_{particle} - \rho_{solvent})^2
35
36where $R_g$ is the size of the cluster, $r_g$ is the size of the primary
37particle, $D_s$ is the surface fractal dimension, $D_m$ is the mass fractal
38dimension, $\rho_{solvent}$ is the scattering length density of the solvent,
39and $\rho_{particle}$ is the scattering length density of particles.
40
41.. note::
42
43    The surface ( $D_s$ ) and mass ( $D_m$ ) fractal dimensions are only
44    valid if $0 < surface_dim < 6$ , $0 < mass_dim < 6$ , and
45    $(surface_dim + mass_dim ) < 6$ .
46
47.. figure:: img/mass_surface_fractal_1d.jpg
48
49    1D plot using the default values.
50
51Reference
52---------
53
54P Schmidt, *J Appl. Cryst.*, 24 (1991) 414-435 Equation(19)
55
56A J Hurd, D W Schaefer, J E Martin, *Phys. Rev. A*,
5735 (1987) 2361-2364 Equation(2)
58
59"""
60
61from numpy import inf
62
63name = "mass_surface_fractal"
64title = "Mass Surface Fractal model"
65description = """
66        The scattering intensity  I(x) = scale*P(x)*S(x) + background, where
67        p(x)= {[1+(x^2*a)]^(Dm/2) * [1+(x^2*b)]^(6-Ds-Dm)/2}^(-1)
68        a = Rg^2/(3*Dm/2)
69        b = rg^2/(3*(6-Ds-Dm)/2)
70        scale        =  scale factor * N*Volume^2*contrast^2
71        mass_dim       =  Dm (mass fractal dimension)
72        surface_dim  =  Ds
73        cluster_rg  =  Rg
74        primary_rg    =  rg
75        background   =  background
76        Ref: Schmidt, J Appl Cryst, eq(19), (1991), 24, 414-435
77        Hurd, Schaefer, Martin, Phys Rev A, eq(2),(1987),35, 2361-2364
78        Note that 0 < Ds< 6 and 0 < Dm < 6.
79        """
80category = "shape-independent"
81
82# pylint: disable=bad-whitespace, line-too-long
83#             ["name", "units", default, [lower, upper], "type","description"],
84parameters = [["mass_dim",      "",    1.8, [1e-16, 6.0], "",
85               "Mass fractal dimension"],
86              ["surface_dim",   "",    2.3, [1e-16, 6.0], "",
87               "Surface fractal dimension"],
88              ["cluster_rg", "Ang",   86.7, [0.0, inf], "",
89               "Cluster radius of gyration"],
90              ["primary_rg", "Ang", 4000.,  [0.0, inf], "",
91               "Primary particle radius of gyration"],
92             ]
93# pylint: enable=bad-whitespace, line-too-long
94
95source = ["mass_surface_fractal.c"]
96
97demo = dict(scale=1, background=0,
98            mass_dim=1.8,
99            surface_dim=2.3,
100            cluster_rg=86.7,
101            primary_rg=4000.0)
102
103oldname = 'MassSurfaceFractal'
104oldpars = dict(radius='radius',
105               mass_dim='mass_dim',
106               surface_dim='surface_dim',
107               cluster_rg='cluster_rg',
108               primary_rg='primary_rg')
109
110tests = [
111
112    # Accuracy tests based on content in test/utest_other_models.py
113    [{'mass_dim':      1.8,
114      'surface_dim':   2.3,
115      'cluster_rg':   86.7,
116      'primary_rg': 4000.0,
117     }, 0.05, 1.77537e-05],
118
119    # Additional tests with larger range of parameters
120    [{'mass_dim':      3.3,
121      'surface_dim':   1.0,
122      'cluster_rg':   90.0,
123      'primary_rg': 4000.0,
124     }, 0.001, 0.18462699016],
125
126    [{'mass_dim':      1.3,
127      'surface_dim':   1.0,
128      'cluster_rg':   90.0,
129      'primary_rg': 2000.0,
130      'background':    0.8,
131     }, 0.001, 1.16539753641],
132
133    [{'mass_dim':      2.3,
134      'surface_dim':   1.0,
135      'cluster_rg':   90.0,
136      'primary_rg': 1000.0,
137      'scale':        10.0,
138     }, 0.051, 0.000169548800377],
139    ]
Note: See TracBrowser for help on using the repository browser.