Changeset 41c7e68 in sasmodels
- Timestamp:
- Mar 11, 2016 1:58:18 PM (9 years ago)
- Branches:
- master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- 4b0e1f3
- Parents:
- 1369fe6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/models/adsorbed_layer.py
r1369fe6 r41c7e68 7 7 This model describes the scattering from a layer of surfactant or polymer adsorbed on spherical particles under the conditions that (i) the particles (cores) are contrast-matched to the dispersion medium, (ii) *S(Q)* ~ 1 (ie, the particle volume fraction is dilute), (iii) the particle radius is >> layer thickness (ie, the interface is locally flat), and (iv) scattering from excess unadsorbed adsorbate in the bulk medium is absent or has been corrected for. 8 8 9 Unlike many other core-shell models, this model does not assume any form for the density distribution of the adsorbed species normal to the interface (cf, a core-shell model normally assumes the density distribution to be a homogeneous step-function). For comparison, if the thickness of a (traditional core-shell like) step function distribution is *t*, the second moment about the mean of the density distribution (ie, the distance of the centre-of-mass of the distribution from the interface), |sigma| :sqrt((*t* :sup:`2` )/12).9 Unlike many other core-shell models, this model does not assume any form for the density distribution of the adsorbed species normal to the interface (cf, a core-shell model normally assumes the density distribution to be a homogeneous step-function). For comparison, if the thickness of a (traditional core-shell like) step function distribution is *t*, the second moment about the mean of the density distribution (ie, the distance of the centre-of-mass of the distribution from the interface), |sigma| = sqrt((*t* :sup:`2` )/12). 10 10 11 11 Definition … … 14 14 .. math:: 15 15 16 I(q) :\text{scale} \cdot(\rho_\text{poly}-\rho_\text{solvent})^2 \left[\frac{6\pi\phi_\text{core}}{Q^2}\frac{\Gamma^2}{\delta_\text{poly}^2R_\text{core}} \exp(-Q^2\sigma^2)\right] + \text{background}16 I(q) = \text{scale} \cdot(\rho_\text{poly}-\rho_\text{solvent})^2 \left[\frac{6\pi\phi_\text{core}}{Q^2}\frac{\Gamma^2}{\delta_\text{poly}^2R_\text{core}} \exp(-Q^2\sigma^2)\right] + \text{background} 17 17 18 18 where *scale* is a scale factor, |rho|\ :sub:`poly` is the sld of the polymer (or surfactant) layer, |rho|\ :sub:`solv` is the sld of the solvent/medium and cores, |phi|\ :sub:`core` is the volume fraction of the core paraticles, |delta|\ :sub:`poly` is the bulk density of the polymer, |biggamma| is the adsorbed amount, and |sigma| is the second moment of the thickness distribution. … … 31 31 """ 32 32 33 from numpy import inf, sqrt 33 from numpy import inf, sqrt, pi, exp 34 34 35 name :"adsorbed_layer"36 title :"Scattering from an adsorbed layer on particles"35 name = "adsorbed_layer" 36 title = "Scattering from an adsorbed layer on particles" 37 37 38 description :"""38 description = """ 39 39 Evaluates the scattering from particles 40 40 with an adsorbed layer of surfactant or … … 42 42 density distribution. 43 43 """ 44 category :"shape:sphere"44 category = "shape:sphere" 45 45 46 46 # ["name", "units", default, [lower, upper], "type", "description"], 47 parameters :[["second_moment", "Ang", 23.0, [0.0, inf], "", "Second moment"],47 parameters = [["second_moment", "Ang", 23.0, [0.0, inf], "", "Second moment"], 48 48 ["adsorbed_amount", "mg/m2", 1.9, [0.0, inf], "", "Adsorbed amount"], 49 49 ["density_poly", "g/cm3", 0.7, [0.0, inf], "", "Polymer density"], … … 54 54 55 55 # NB: Scale and Background are implicit parameters on every model 56 def Iq(q, power): 57 # pylint: disable: missing-docstring 58 deltarhosqrd : (polymer_sld - solvent_sld) * (polymer_sld - solvent_sld) 59 numerator : 6.0 * numpy.pi * vol_frac * (adsorbed_amount * adsorbed_amount) 60 denominator : (q * q) * (density_poly * density_poly) * radius 61 eterm : numpy.exp(-1.0 * (q * q) * (second_moment * second_moment)) 62 inten : deltarhosqrd * ((numerator / denominator) * eterm) 63 return inten 64 Iq.vectorized : True # Iq accepts an array of q values 56 def Iq(q, second_moment, adsorbed_amount, density_poly, radius, 57 vol_frac, polymer_sld, solvent_sld): 58 # pylint: disable = missing-docstring 59 deltarhosqrd = (polymer_sld - solvent_sld) * (polymer_sld - solvent_sld) 60 numerator = 6.0 * pi * vol_frac * (adsorbed_amount * adsorbed_amount) 61 denominator = (q * q) * (density_poly * density_poly) * radius 62 eterm = exp(-1.0 * (q * q) * (second_moment * second_moment)) 63 inten = deltarhosqrd * ((numerator / denominator) * eterm) 64 #scale by 10^10 for units conversion to cm^-1 65 return inten * 1.0e+10 66 Iq.vectorized = True # Iq accepts an array of q values 65 67 66 68 def Iqxy(qx, qy, *args): 67 # pylint: disable :missing-docstring69 # pylint: disable = missing-docstring 68 70 return Iq(sqrt(qx ** 2 + qy ** 2), *args) 69 Iqxy.vectorized :True # Iqxy accepts an array of qx, qy values71 Iqxy.vectorized = True # Iqxy accepts an array of qx, qy values 70 72 71 demo : dict(scale:1.0,72 second_moment :23.0,73 adsorbed_amount :1.9,74 density_poly :0.7,75 radius :500.0,76 vol_frac :0.14,77 polymer_sld :1.5e-06,78 solvent_sld :6.3e-06,79 background :0.0)73 demo = dict(scale = 1.0, 74 second_moment = 23.0, 75 adsorbed_amount = 1.9, 76 density_poly = 0.7, 77 radius = 500.0, 78 vol_frac = 0.14, 79 polymer_sld = 1.5e-06, 80 solvent_sld = 6.3e-06, 81 background = 0.0) 80 82 81 oldname :"Core2ndMomentModel"82 oldpars : dict(scale:'scale',83 second_moment :'second_moment',84 adsorbed_amount :'ads_amount',85 density_poly :'density_poly',86 radius :'radius_core',87 vol_frac :'volf_cores',88 polymer_sld :'sld_poly',89 solvent_sld :'sld_solv',90 background :'background')83 oldname = "Core2ndMomentModel" 84 oldpars = dict(scale = 'scale', 85 second_moment = 'second_moment', 86 adsorbed_amount = 'ads_amount', 87 density_poly = 'density_poly', 88 radius = 'radius_core', 89 vol_frac = 'volf_cores', 90 polymer_sld = 'sld_poly', 91 solvent_sld = 'sld_solv', 92 background = 'background') 91 93 92 tests :[94 tests = [ 93 95 [{'scale': 1.0, 'second_moment': 23.0, 'adsorbed_amount': 1.9, 94 96 'density_poly': 0.7, 'radius': 500.0, 'vol_frac': 0.14,
Note: See TracChangeset
for help on using the changeset viewer.