Changes in / [84db7a5:6824af5] in sasmodels
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
example/sesansfit.sh
- Property mode changed from 100644 to 100755
r5be92e8 r15bd6e7 8 8 set -x 9 9 10 python -m bumps.cli $*10 pythonw -m bumps.cli $* -
sasmodels/models/adsorbed_layer.py
r2f0c07d r54954e1 17 17 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} 18 18 19 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 par aticles, |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.19 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 particles, |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. 20 20 21 21 Note that all parameters except the |sigma| are correlated so fitting more than one of these parameters will generally fail. Also note that unlike other shape models, no volume normalization is applied to this model (the calculation is exact). … … 46 46 ["density_poly", "g/cm3", 0.7, [0.0, inf], "", "Polymer density"], 47 47 ["radius", "Ang", 500.0, [0.0, inf], "", "Particle radius"], 48 ["vol _frac", "None", 0.14, [0.0, inf], "", "Particle vol fraction"],48 ["volfraction", "None", 0.14, [0.0, inf], "", "Particle vol fraction"], 49 49 ["polymer_sld", "1/Ang^2", 1.5e-06, [-inf, inf], "", "Polymer SLD"], 50 50 ["solvent_sld", "1/Ang^2", 6.3e-06, [-inf, inf], "", "Solvent SLD"]] … … 52 52 # NB: Scale and Background are implicit parameters on every model 53 53 def Iq(q, second_moment, adsorbed_amount, density_poly, radius, 54 vol _frac, polymer_sld, solvent_sld):54 volfraction, polymer_sld, solvent_sld): 55 55 # pylint: disable = missing-docstring 56 56 deltarhosqrd = (polymer_sld - solvent_sld) * (polymer_sld - solvent_sld) 57 numerator = 6.0 * pi * vol _frac* (adsorbed_amount * adsorbed_amount)57 numerator = 6.0 * pi * volfraction * (adsorbed_amount * adsorbed_amount) 58 58 denominator = (q * q) * (density_poly * density_poly) * radius 59 59 eterm = exp(-1.0 * (q * q) * (second_moment * second_moment)) … … 73 73 density_poly = 0.7, 74 74 radius = 500.0, 75 vol _frac= 0.14,75 volfraction = 0.14, 76 76 polymer_sld = 1.5e-06, 77 77 solvent_sld = 6.3e-06, … … 84 84 density_poly = 'density_poly', 85 85 radius = 'radius_core', 86 vol _frac= 'volf_cores',86 volfraction = 'volf_cores', 87 87 polymer_sld = 'sld_poly', 88 88 solvent_sld = 'sld_solv', … … 91 91 tests = [ 92 92 [{'scale': 1.0, 'second_moment': 23.0, 'adsorbed_amount': 1.9, 93 'density_poly': 0.7, 'radius': 500.0, 'vol _frac': 0.14,93 'density_poly': 0.7, 'radius': 500.0, 'volfraction': 0.14, 94 94 'polymer_sld': 1.5e-06, 'solvent_sld': 6.3e-06, 'background': 0.0}, 95 95 [0.0106939, 0.469418], [73.741, 9.65391e-53]], -
sasmodels/models/hayter_msa.py
rd529d93 r54954e1 51 51 # dp[2] = volfraction(); 52 52 # dp[3] = temperature(); 53 # dp[4] = salt conc();53 # dp[4] = salt_concentration(); 54 54 # dp[5] = dielectconst(); 55 55 … … 76 76 ["volfraction", "None", 0.0192, [0, 0.74], "", "volume fraction of spheres"], 77 77 ["temperature", "K", 318.16, [0, inf], "", "temperature, in Kelvin, for Debye length calculation"], 78 ["salt conc", "M", 0.0, [-inf, inf], "", "conc of salt, moles/litre, 1:1 electolyte, for Debye length"],78 ["salt_concentration", "M", 0.0, [-inf, inf], "", "conc of salt, moles/litre, 1:1 electolyte, for Debye length"], 79 79 ["dielectconst", "None", 71.08, [-inf, inf], "", "dielectric constant (relative permittivity) of solvent, default water, for Debye length"] 80 80 ] … … 96 96 oldname = 'HayterMSAStructure' 97 97 #oldpars = dict(effect_radius="radius_effective",effect_radius_pd="radius_effective_pd",effect_radius_pd_n="radius_effective_pd_n") 98 oldpars = dict(radius_effective="effect_radius",radius_effective_pd="effect_radius_pd",radius_effective_pd_n="effect_radius_pd_n" )98 oldpars = dict(radius_effective="effect_radius",radius_effective_pd="effect_radius_pd",radius_effective_pd_n="effect_radius_pd_n",salt_concentration="saltconc") 99 99 #oldpars = dict( ) 100 100 # default parameter set, use compare.sh -midQ -linear 101 101 # note the calculation varies in different limiting cases so a wide range of 102 102 # parameters will be required for a thorough test! 103 # odd that the default st has salt conczero103 # odd that the default st has salt_concentration zero 104 104 demo = dict(radius_effective=20.75, 105 105 charge=19.0, 106 106 volfraction=0.0192, 107 107 temperature=318.16, 108 salt conc=0.05,108 salt_concentration=0.05, 109 109 dielectconst=71.08, 110 110 radius_effective_pd=0.1, … … 120 120 'volfraction': 0.0192, 121 121 'temperature': 298.0, 122 'salt conc': 0,122 'salt_concentration': 0, 123 123 'dielectconst': 78.0, 124 124 'radius_effective_pd': 0}, … … 130 130 'volfraction': 0.0192, 131 131 'temperature': 298.0, 132 'salt conc': 0.05,132 'salt_concentration': 0.05, 133 133 'dielectconst': 78.0, 134 134 'radius_effective_pd': 0.1, -
sasmodels/models/mono_gauss_coil.py
raa2edb2 r15bd6e7 14 14 15 15 *I(q)* = *scale* |cdot| *I* \ :sub:`0` |cdot| *P(q)* + *background* 16 16 17 17 where 18 18 … … 20 20 21 21 *P(q)* = 2 [exp(-Z) + Z - 1] / Z \ :sup:`2` 22 23 22 23 *Z* = (*q R* \ :sub:`g`)\ :sup:`2` 24 24 25 25 and 26 26 27 28 27 *V* = *M* / (*N*\ :sub:`A` |delta|) 28 29 29 Here, |phi|\ :sub:`poly` is the volume fraction of polymer, *V* is the volume of a polymer coil, *M* is the molecular weight of the polymer, *N*\ :sub:`A` is Avogadro's Number, |delta| is the bulk density of the polymer, |rho|\ :sub:`poly` is the sld of the polymer, |rho|\ :sub:`solv` is the sld of the solvent, and *R*\ :sub:`g` is the radius of gyration of the polymer coil. 30 30 … … 52 52 description = """ 53 53 Evaluates the scattering from 54 54 monodisperse polymer chains. 55 55 """ 56 56 category = "shape-independent" 57 57 58 58 # ["name", "units", default, [lower, upper], "type", "description"], 59 parameters = [["i_zero", "1/cm", 1.0, [-inf, inf], "", "Intensity at q=0"],60 ["radius_gyration", "Ang", 50.0, [0.0, inf], "", "Radius of gyration"]]59 parameters = [["i_zero", "1/cm", 70.0, [0.0, inf], "", "Intensity at q=0"], 60 ["radius_gyration", "Ang", 75.0, [0.0, inf], "", "Radius of gyration"]] 61 61 62 62 # NB: Scale and Background are implicit parameters on every model 63 63 def Iq(q, i_zero, radius_gyration): 64 64 # pylint: disable = missing-docstring 65 z = (q * radius_gyration) * * 266 if q == 0:67 inten = 1.065 z = (q * radius_gyration) * (q * radius_gyration) 66 if (q == 0).any(): 67 inten = i_zero 68 68 else: 69 69 inten = i_zero * 2.0 * (exp(-z) + z - 1.0 ) / (z * z) … … 77 77 78 78 demo = dict(scale = 1.0, 79 i_zero = 1.0,80 radius_gyration = 50.0,79 i_zero = 70.0, 80 radius_gyration = 75.0, 81 81 background = 0.0) 82 82 … … 87 87 88 88 tests = [ 89 [{'scale': 1.0, 'radius_gyration': 50.0, 'background': 0.0},90 [0.0106939, 0.469418], [ 0.911141, 0.00362394]],89 [{'scale': 70.0, 'radius_gyration': 75.0, 'background': 0.0}, 90 [0.0106939, 0.469418], [57.1241, 0.112859]], 91 91 ] -
sasmodels/models/poly_gauss_coil.py
raa2edb2 r15bd6e7 14 14 15 15 *I(q)* = *scale* |cdot| *I* \ :sub:`0` |cdot| *P(q)* + *background* 16 16 17 17 where 18 18 … … 20 20 21 21 *P(q)* = 2 [(1 + UZ)\ :sup:`-1/U` + Z - 1] / [(1 + U) Z\ :sup:`2`] 22 23 24 25 22 23 *Z* = [(*q R*\ :sub:`g`)\ :sup:`2`] / (1 + 2U) 24 25 *U* = (Mw / Mn) - 1 = (*polydispersity ratio*) - 1 26 26 27 27 and 28 28 29 30 29 *V* = *M* / (*N*\ :sub:`A` |delta|) 30 31 31 Here, |phi|\ :sub:`poly`, is the volume fraction of polymer, *V* is the volume of a polymer coil, *M* is the molecular weight of the polymer, *N*\ :sub:`A` is Avogadro's Number, |delta| is the bulk density of the polymer, |rho|\ :sub:`poly` is the sld of the polymer, |rho|\ :sub:`solv` is the sld of the solvent, and *R*\ :sub:`g` is the radius of gyration of the polymer coil. 32 32 … … 57 57 description = """ 58 58 Evaluates the scattering from 59 59 polydisperse polymer chains. 60 60 """ 61 61 category = "shape-independent" 62 62 63 63 # ["name", "units", default, [lower, upper], "type", "description"], 64 parameters = [["i_zero", "1/cm", 1.0, [-inf, inf], "", "Intensity at q=0"],65 ["radius_gyration", "Ang", 50.0, [0.0, inf], "", "Radius of gyration"],64 parameters = [["i_zero", "1/cm", 70.0, [0.0, inf], "", "Intensity at q=0"], 65 ["radius_gyration", "Ang", 75.0, [0.0, inf], "", "Radius of gyration"], 66 66 ["polydispersity", "None", 2.0, [1.0, inf], "", "Polymer Mw/Mn"]] 67 67 … … 69 69 def Iq(q, i_zero, radius_gyration, polydispersity): 70 70 # pylint: disable = missing-docstring 71 # need to trap the case of the polydispersity being 1 (ie, monodispersity) 71 72 u = polydispersity - 1.0 72 # TO DO 73 # should trap the case of polydispersity = 1 by switching to a taylor expansion 74 minusoneonu = -1.0 / u 75 z = (q * radius_gyration) ** 2 / (1.0 + 2.0 * u) 76 if q == 0: 77 inten = i_zero * 1.0 73 if polydispersity == 1: 74 minusoneonu = -1.0 / u 78 75 else: 79 inten = i_zero * 2.0 * (power((1.0 + u * z),minusoneonu) + z - 1.0 ) / ((1.0 + u) * (z * z)) 76 minusoneonu = -1.0 / u 77 z = ((q * radius_gyration) * (q * radius_gyration)) / (1.0 + 2.0 * u) 78 if (q == 0).any(): 79 inten = i_zero 80 else: 81 inten = i_zero * 2.0 * (power((1.0 + u * z),minusoneonu) + z - 1.0 ) / ((1.0 + u) * (z * z)) 80 82 return inten 81 #Iq.vectorized = True# Iq accepts an array of q values83 Iq.vectorized = True # Iq accepts an array of q values 82 84 83 85 def Iqxy(qx, qy, *args): … … 87 89 88 90 demo = dict(scale = 1.0, 89 i_zero = 1.0,90 radius_gyration = 50.0,91 i_zero = 70.0, 92 radius_gyration = 75.0, 91 93 polydispersity = 2.0, 92 94 background = 0.0) … … 99 101 100 102 tests = [ 101 [{'scale': 1.0, 'radius_gyration': 50.0, 'polydispersity': 2.0, 'background': 0.0},102 [0.0106939, 0.469418], [ 0.912993, 0.0054163]],103 [{'scale': 70.0, 'radius_gyration': 75.0, 'polydispersity': 2.0, 'background': 0.0}, 104 [0.0106939, 0.469418], [57.6405, 0.169016]], 103 105 ] -
sasmodels/models/stickyhardsphere.py
r0784c18 r54954e1 88 88 # [ "name", "units", default, [lower, upper], "type", 89 89 # "description" ], 90 [" effect_radius", "Ang", 50.0, [0, inf], "volume",90 ["radius_effective", "Ang", 50.0, [0, inf], "volume", 91 91 "effective radius of hard sphere"], 92 92 ["volfraction", "", 0.2, [0, 0.74], "", … … 113 113 eta = volfraction/onemineps/onemineps/onemineps; 114 114 115 sig = 2.0 * effect_radius;115 sig = 2.0 * radius_effective; 116 116 aa = sig/onemineps; 117 117 etam1 = 1.0 - eta; … … 179 179 180 180 oldname = 'StickyHSStructure' 181 oldpars = dict( )182 demo = dict( effect_radius=200, volfraction=0.2, perturb=0.05,183 stickiness=0.2, effect_radius_pd=0.1, effect_radius_pd_n=40)181 oldpars = dict(radius_effective="effect_radius",radius_effective_pd="effect_radius_pd",radius_effective_pd_n="effect_radius_pd_n") 182 demo = dict(radius_effective=200, volfraction=0.2, perturb=0.05, 183 stickiness=0.2, radius_effective_pd=0.1, radius_effective_pd_n=40) 184 184 # 185 185 tests = [ 186 [ {'scale': 1.0, 'background' : 0.0, ' effect_radius' : 50.0, 'perturb' : 0.05, 'stickiness' : 0.2, 'volfraction' : 0.1,187 ' effect_radius_pd' : 0}, [0.001, 0.003], [1.09718, 1.087830]]186 [ {'scale': 1.0, 'background' : 0.0, 'radius_effective' : 50.0, 'perturb' : 0.05, 'stickiness' : 0.2, 'volfraction' : 0.1, 187 'radius_effective_pd' : 0}, [0.001, 0.003], [1.09718, 1.087830]] 188 188 ] 189 189
Note: See TracChangeset
for help on using the changeset viewer.