Changes in / [0b499f0:0495db8] in sasmodels
- Files:
-
- 1 deleted
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/conf.py
r4a21670c r22975f0 233 233 234 234 numfig = True 235 #numfig_format = {"figure": "Fig. %s", "table": "Table %s", "code-block": "Program %s"} -
example/sesans_parameters_css-hs.py
r84db7a5 r3415f4f 22 22 # Initial parameter values (if other than defaults) 23 23 initial_vals = { 24 " core_sld" : 1.0592,25 "s olvent_sld" : 2.88,24 "sld_core" : 1.0592, 25 "sld_solvent" : 2.88, 26 26 "radius" : 890, 27 27 "thickness" : 130 -
sasmodels/compare.py
r72a081d r98d6cfc 69 69 -accuracy=Low accuracy of the resolution calculation Low, Mid, High, Xhigh 70 70 -edit starts the parameter explorer 71 -default/-demo* use demo vs default parameters 71 72 72 73 Any two calculation engines can be selected for comparison: … … 631 632 'hist', 'nohist', 632 633 'edit', 634 'demo', 'default', 633 635 ]) 634 636 VALUE_OPTIONS = [ … … 654 656 655 657 656 def get_ demo_pars(model_info):658 def get_pars(model_info, use_demo=False): 657 659 """ 658 660 Extract demo parameters from the model definition. … … 670 672 671 673 # Plug in values given in demo 672 pars.update(model_info['demo']) 674 if use_demo: 675 pars.update(model_info['demo']) 673 676 return pars 674 677 … … 727 730 'rel_err' : True, 728 731 'explore' : False, 732 'use_demo' : True, 729 733 } 730 734 engines = [] … … 765 769 elif arg == '-sasview': engines.append(arg[1:]) 766 770 elif arg == '-edit': opts['explore'] = True 771 elif arg == '-demo': opts['use_demo'] = True 772 elif arg == '-default': opts['use_demo'] = False 767 773 # pylint: enable=bad-whitespace 768 774 … … 782 788 # Get demo parameters from model definition, or use default parameters 783 789 # if model does not define demo parameters 784 pars = get_demo_pars(model_info) 790 pars = get_pars(model_info, opts['use_demo']) 791 785 792 786 793 # Fill in parameters given on the command line -
sasmodels/compare_many.py
red048b2 rce346b6 22 22 from . import generate 23 23 from .compare import (MODELS, randomize_pars, suppress_pd, make_data, 24 make_engine, get_ demo_pars, columnize,24 make_engine, get_pars, columnize, 25 25 constrain_pars, constrain_new_to_old) 26 26 … … 102 102 is_2d = hasattr(data, 'qx_data') 103 103 model_info = core.load_model_info(name) 104 pars = get_ demo_pars(model_info)104 pars = get_pars(model_info, use_demo=True) 105 105 header = ('\n"Model","%s","Count","%d","Dimension","%s"' 106 106 % (name, N, "2D" if is_2d else "1D")) -
sasmodels/convert.py
rbad8b12 r062db5a 154 154 elif name == 'fractal': 155 155 del oldpars['volfraction'] 156 elif name == 'vesicle': 157 del oldpars['volfraction'] 156 158 157 159 return oldpars … … 191 193 elif name == 'fractal': 192 194 pars['volfraction'] = 1 195 elif name == 'vesicle': 196 pars['volfraction'] = 1 193 197 -
sasmodels/models/binary_hard_sphere.c
r115d0f0 re481a39 13 13 ); 14 14 15 intcalculate_psfs(double qval,15 void calculate_psfs(double qval, 16 16 double r2, double nf2, 17 17 double aa, double phi, … … 34 34 double phi1,phi2,phr,a3; 35 35 double v1,v2,n1,n2,qr1,qr2,b1,b2,sc1,sc2; 36 int err;37 36 38 37 r2 = lg_radius; … … 52 51 nf2 = phr*a3/(1.0-phr+phr*a3); 53 52 // calculate the PSF's here 54 err =calculate_psfs(q,r2,nf2,aa,phi,&psf11,&psf22,&psf12);53 calculate_psfs(q,r2,nf2,aa,phi,&psf11,&psf22,&psf12); 55 54 56 55 // /* do form factor calculations */ … … 103 102 } 104 103 105 intcalculate_psfs(double qval,104 void calculate_psfs(double qval, 106 105 double r2, double nf2, 107 106 double aa, double phi, … … 112 111 113 112 // calculate constant terms 114 double s 1,s2,v,a3,v1,v2,g11,g12,g22,wmv,wmv3,wmv4;113 double s2,v,a3,v1,v2,g11,g12,g22,wmv,wmv3,wmv4; 115 114 double a1,a2i,a2,b1,b2,b12,gm1,gm12; 116 double err=0.0,yy,ay,ay2,ay3,t1,t2,t3,f11,y2,y3,tt1,tt2,tt3;115 double yy,ay,ay2,ay3,t1,t2,t3,f11,y2,y3,tt1,tt2,tt3; 117 116 double c11,c22,c12,f12,f22,ttt1,ttt2,ttt3,ttt4,yl,y13; 118 117 double t21,t22,t23,t31,t32,t33,t41,t42,yl3,wma3,y1; 119 118 120 119 s2 = 2.0*r2; 121 s1 = aa*s2; 120 // s1 = aa*s2; why is this never used? check original paper? 122 121 v = phi; 123 122 a3 = aa*aa*aa; … … 189 188 *s12=-c12/((1.+c11)*(1.+c22)-(c12)*(c12)); 190 189 191 return (err);190 return; 192 191 } 193 192 -
sasmodels/models/binary_hard_sphere.py
r115d0f0 rd189429 1 1 r""" 2 2 3 Definition 4 ---------- 3 5 The binary hard sphere model provides the scattering intensity, for binary 4 6 mixture of hard spheres including hard sphere interaction between those 5 7 particles, using rhw Percus-Yevick closure. The calculation is an exact 6 8 multi-component solution that properly accounts for the 3 partial structure 7 factors. 8 9 Definition 10 ---------- 9 factors as follows: 11 10 12 11 .. math:: 13 12 14 13 \begin{eqnarray} 15 I(q) = (1-x)f_1^2(q) S_{11}(q) + 2[x(1-x)]^{1/2} f_1(q)f_2(q)S_{12}(q) + \\16 x\,f_2^2(q)S_{22}(q) \\14 I(q) = (1-x)f_1^2(q) S_{11}(q) + 2[x(1-x)]^{1/2} f_1(q)f_2(q)S_{12}(q) + 15 x\,f_2^2(q)S_{22}(q) 17 16 \end{eqnarray} 18 17 … … 26 25 27 26 \begin{eqnarray} 28 x &=& \frac{(\phi_2 / \phi)\alpha^3}{(1-(\phi_2/\phi) + (\phi_2/\phi) \\ 29 \alpha^3)} \phi &=& \phi_1 + \phi_2 = \text{total volume fraction} \\ 27 x &=& \frac{(\phi_2 / \phi)\alpha^3}{(1-(\phi_2/\phi) + (\phi_2/\phi) 28 \alpha^3)} \\ 29 \phi &=& \phi_1 + \phi_2 = \text{total volume fraction} \\ 30 30 \alpha &=& R_1/R_2 = \text{size ratio} 31 31 \end{eqnarray} … … 67 67 S R Kline, *J Appl. Cryst.*, 39 (2006) 895 68 68 69 **Author:** N /A **on:**69 **Author:** NIST IGOR/DANSE **on:** pre 2010 70 70 71 ** Modified by:** Paul Butler **on:** March 18, 201671 **Last Modified by:** Paul Butler **on:** March 20, 2016 72 72 73 ** Reviewed by:** Paul Butler **on:** March 18, 201673 **Last Reviewed by:** Paul Butler **on:** March 20, 2016 74 74 """ 75 75 76 import numpy as np 77 from numpy import pi, inf 76 from numpy import inf 77 78 category = "shape:sphere" 79 single = False # double precision only! 78 80 79 81 name = "binary_hard_sphere" … … 90 92 sld_solvent: solvent scattering length density. 91 93 """ 92 category = "shape:sphere"93 94 94 # ["name", "units", default, [lower, upper], "type", "description"], 95 95 parameters = [["radius_lg", "Ang", 100, [0, inf], "", … … 112 112 113 113 # parameters for demo and documentation 114 demo = dict(scale=1, background=0, 115 sld_lg=3.5, sld_sm=0.5, sld_solvent=6.36, 114 demo = dict(sld_lg=3.5, sld_sm=0.5, sld_solvent=6.36, 116 115 radius_lg=100, radius_sm=20, 117 116 volfraction_lg=0.1, volfraction_sm=0.2) … … 125 124 126 125 # NOTE: test results taken from values returned by SasView 3.1.2 127 tests = [[{ 'scale':1.0}, 0.001, 25.8927262013]]126 tests = [[{}, 0.001, 25.8927262013]] 128 127 -
sasmodels/models/correlation_length.py
raa2edb2 r0cc31e1 15 15 and therefore the thermodynamics. The two multiplicative factors A and C, the 16 16 incoherent background B and the two exponents n and m are used as fitting 17 parameters. The final parameter ξ is a correlation length for the polymer 18 chains. Note that when m=2 this functional form becomes the familiar Lorentzian 19 function. 17 parameters. (Respectively $porod\_scale$, $lorentz\_scale$, $background$, $exponent\_p$ and 18 $exponent\_l$ in the parameter list.) The remaining parameter \ |xi|\ is a correlation 19 length for the polymer chains. Note that when m=2 this functional form becomes the 20 familiar Lorentzian function. Some interpretation of the values of A and C may be 21 possible depending on the values of m and n. 20 22 21 23 For 2D data: The 2D scattering intensity is calculated in the same way as 1D, … … 45 47 ["lorentz_scale", "", 10.0, [0, inf], "", "Lorentzian Scaling Factor"], 46 48 ["porod_scale", "", 1e-06, [0, inf], "", "Porod Scaling Factor"], 47 ["cor_length", "Ang", 50.0, [0, inf], "", "Correlation length "],48 ["exponent_p", "", 3.0, [0, inf], "", "Porod Exponent "],49 ["exponent_l", "1/Ang^2", 2.0, [0, inf], "", "Lorentzian Exponent "],49 ["cor_length", "Ang", 50.0, [0, inf], "", "Correlation length, xi, in Lorentzian"], 50 ["exponent_p", "", 3.0, [0, inf], "", "Porod Exponent, n, in q^-n"], 51 ["exponent_l", "1/Ang^2", 2.0, [0, inf], "", "Lorentzian Exponent, m, in 1/( 1 + (q.xi)^m)"], 50 52 ] 51 53 # pylint: enable=bad-continuation, line-too-long -
sasmodels/models/cylinder.py
r5933c7f r6ef4293 31 31 To provide easy access to the orientation of the cylinder, we define the 32 32 axis of the cylinder using two angles $\theta$ and $\phi$. Those angles 33 are defined in :numref:` figure #<cylinder-angle-definition>`.33 are defined in :numref:`cylinder-angle-definition`. 34 34 35 35 .. _cylinder-angle-definition: -
sasmodels/models/elliptical_cylinder.py
r74fd96f r0cc31e1 12 12 .. figure:: img/elliptical_cylinder_geometry.png 13 13 14 Elliptical cylinder geometry $a$ = $r_{minor}$ and \ nu= $axis\_ratio$ = $r_{major} / r_{minor}$14 Elliptical cylinder geometry $a$ = $r_{minor}$ and \ |nu|\ = $axis\_ratio$ = $r_{major} / r_{minor}$ 15 15 16 16 The function calculated is -
sasmodels/models/fractal.py
rdff1088 r5e29b9d 46 46 J Teixeira, *J. Appl. Cryst.*, 21 (1988) 781-785 47 47 48 **Author:** N /A **on:**48 **Author:** NIST IGOR/DANSE **on:** pre 2010 49 49 50 50 **Last Modified by:** Paul Butler **on:** March 20, 2016 -
sasmodels/models/fractal_core_shell.c
r7d4b2ae r6794301 47 47 double qr = q*radius; 48 48 49 double t1 = frac_dim* exp(lanczos_gamma(frac_1))*sin(frac_1*atan(q*cor_length));49 double t1 = frac_dim*sas_gamma(frac_1)*sin(frac_1*atan(q*cor_length)); 50 50 double t2 = (1.0 + 1.0/(q*cor_length)/(q*cor_length)); 51 51 double t3 = pow(qr, frac_dim) * pow(t2, (frac_1/2.0)); -
sasmodels/models/fractal_core_shell.py
raa2edb2 r6794301 73 73 # pylint: enable=bad-whitespace, line-too-long 74 74 75 source = ["lib/sph_j1c.c", "lib/ lanczos_gamma.c", "lib/core_shell.c", "fractal_core_shell.c"]75 source = ["lib/sph_j1c.c", "lib/sas_gamma.c", "lib/core_shell.c", "fractal_core_shell.c"] 76 76 77 77 demo = dict(scale=0.05, -
sasmodels/models/fuzzy_sphere.py
raa2edb2 r0cc31e1 19 19 20 20 A(q) = \frac{3\left[\sin(qR) - qR \cos(qR)\right]}{(qR)^3} 21 \exp\left(\frac{-( o_{fuzzy}q)^2}{2}\right)21 \exp\left(\frac{-(\sigma_{fuzzy}q)^2}{2}\right) 22 22 23 23 Here *|A(q)|*:sup:`2`\ is the form factor, *P(q)*. The scale is equivalent to the … … 26 26 solvent. 27 27 28 Poly-dispersion in radius and in fuzziness is provided for. 28 Poly-dispersion in radius and in fuzziness is provided for, though the fuzziness 29 must be kept much smaller than the sphere radius for meaningful results. 29 30 30 31 … … 65 66 or just volume fraction for absolute scale data 66 67 radius: radius of the solid sphere 67 fuzziness = the STD of the height offuzzy interfacial68 fuzziness = the standard deviation of the fuzzy interfacial 68 69 thickness (ie., so-called interfacial roughness) 69 70 sld: the SLD of the sphere … … 76 77 # pylint: disable=bad-whitespace,line-too-long 77 78 # ["name", "units", default, [lower, upper], "type","description"], 78 parameters = [["sld", "1e-6/Ang^2", 1, [-inf, inf], "", " Layerscattering length density"],79 ["s olvent_sld", "1e-6/Ang^2", 3, [-inf, inf], "", "Solvent scattering length density"],79 parameters = [["sld", "1e-6/Ang^2", 1, [-inf, inf], "", "Particle scattering length density"], 80 ["sld_solvent", "1e-6/Ang^2", 3, [-inf, inf], "", "Solvent scattering length density"], 80 81 ["radius", "Ang", 60, [0, inf], "volume", "Sphere radius"], 81 ["fuzziness", "Ang", 10, [0, inf], "", " The STD of the height of fuzzy interfacial"],82 ["fuzziness", "Ang", 10, [0, inf], "", "std deviation of Gaussian convolution for interface (must be << radius)"], 82 83 ] 83 84 # pylint: enable=bad-whitespace,line-too-long … … 95 96 const double bes = sph_j1c(qr); 96 97 const double qf = q*fuzziness; 97 const double fq = bes * (sld - s olvent_sld) * form_volume(radius) * exp(-0.5*qf*qf);98 const double fq = bes * (sld - sld_solvent) * form_volume(radius) * exp(-0.5*qf*qf); 98 99 return 1.0e-4*fq*fq; 99 100 """ … … 102 103 // never called since no orientation or magnetic parameters. 103 104 //return -1.0; 104 return Iq(sqrt(qx*qx + qy*qy), sld, s olvent_sld, radius, fuzziness);105 return Iq(sqrt(qx*qx + qy*qy), sld, sld_solvent, radius, fuzziness); 105 106 """ 106 107 … … 114 115 115 116 demo = dict(scale=1, background=0.001, 116 sld=1, s olvent_sld=3,117 sld=1, sld_solvent=3, 117 118 radius=60, 118 119 fuzziness=10, … … 121 122 122 123 oldname = "FuzzySphereModel" 123 oldpars = dict(sld='sldSph', s olvent_sld='sldSolv', radius='radius', fuzziness='fuzziness')124 oldpars = dict(sld='sldSph', sld_solvent='sldSolv', radius='radius', fuzziness='fuzziness') 124 125 125 126 -
sasmodels/models/mass_fractal.c
r61fd21d r6794301 28 28 //calculate S(q) 29 29 double mmo = mass_dim-1.0; 30 double sq = exp(lanczos_gamma(mmo))*sin((mmo)*atan(q*cutoff_length));30 double sq = sas_gamma(mmo)*sin((mmo)*atan(q*cutoff_length)); 31 31 sq *= pow(cutoff_length, mmo); 32 32 sq /= pow((1.0 + (q*cutoff_length)*(q*cutoff_length)),(mmo/2.0)); -
sasmodels/models/mass_fractal.py
r684eff9 r6794301 85 85 # pylint: enable=bad-whitespace, line-too-long 86 86 87 source = ["lib/sph_j1c.c", "lib/ lanczos_gamma.c", "mass_fractal.c"]87 source = ["lib/sph_j1c.c", "lib/sas_gamma.c", "mass_fractal.c"] 88 88 89 89 demo = dict(scale=1, background=0, -
sasmodels/models/parallelepiped.py
r5933c7f r6ef4293 7 7 ---------- 8 8 9 | This model calculates the scattering from a rectangular parallelepiped (:numref:` Figure #<parallelepiped-image>`).9 | This model calculates the scattering from a rectangular parallelepiped (:numref:`parallelepiped-image`). 10 10 | If you need to apply polydispersity, see also :ref:`rectangular-prism`. 11 11 -
sasmodels/models/raspberry.c
rbad8b12 ra2d8a67 21 21 double Iq(double q, 22 22 double sld_lg, double sld_sm, double sld_solvent, 23 double volfraction_lg, double volfraction_sm, double surf _fraction,23 double volfraction_lg, double volfraction_sm, double surface_fraction, 24 24 double radius_lg, double radius_sm, double penetration) 25 25 { … … 37 37 sldL = sld_lg; 38 38 vfS = volfraction_sm; 39 fSs = surface_fraction; 39 40 rS = radius_sm; 40 aSs = surf_fraction;41 41 sldS = sld_sm; 42 42 deltaS = penetration; … … 48 48 VL = M_4PI_3*rL*rL*rL; 49 49 VS = M_4PI_3*rS*rS*rS; 50 Np = aSs*4.0*pow(((rL+deltaS)/rS), 2.0); 51 fSs = Np*vfL*VS/vfS/VL;52 53 Np2 = aSs*4.0*(rS/(rL+deltaS))*VL/VS; 54 fSs2 = Np2*vfL*VS/vfS/VL;50 51 //Number of small particles per large particle 52 Np = vfS*fSs*VL/vfL/VS; 53 54 //Total scattering length difference 55 55 slT = delrhoL*VL + Np*delrhoS*VS; 56 56 57 sfLS = sph_j1c(q*rL)*sph_j1c(q*rS)*sinc(q*(rL+deltaS*rS)); 58 sfSS = sph_j1c(q*rS)*sph_j1c(q*rS)*sinc(q*(rL+deltaS*rS))*sinc(q*(rL+deltaS*rS)); 59 60 f2 = delrhoL*delrhoL*VL*VL*sph_j1c(q*rL)*sph_j1c(q*rL); 61 f2 += Np2*delrhoS*delrhoS*VS*VS*sph_j1c(q*rS)*sph_j1c(q*rS); 62 f2 += Np2*(Np2-1)*delrhoS*delrhoS*VS*VS*sfSS; 63 f2 += 2*Np2*delrhoL*delrhoS*VL*VS*sfLS; 57 //Form factors for each particle 58 psiL = sph_j1c(q*rL); 59 psiS = sph_j1c(q*rS); 60 61 //Cross term between large and small particles 62 sfLS = psiL*psiS*sinc(q*(rL+deltaS*rS)); 63 //Cross term between small particles at the surface 64 sfSS = psiS*psiS*sinc(q*(rL+deltaS*rS))*sinc(q*(rL+deltaS*rS)); 65 66 //Large sphere form factor term 67 f2 = delrhoL*delrhoL*VL*VL*psiL*psiL; 68 //Small sphere form factor term 69 f2 += Np*delrhoS*delrhoS*VS*VS*psiS*psiS; 70 //Small particle - small particle cross term 71 f2 += Np*(Np-1)*delrhoS*delrhoS*VS*VS*sfSS; 72 //Large-small particle cross term 73 f2 += 2*Np*delrhoL*delrhoS*VL*VS*sfLS; 74 //Normalise by total scattering length difference 64 75 if (f2 != 0.0){ 65 76 f2 = f2/slT/slT; 66 77 } 67 78 68 f2 = f2*(vfL*delrhoL*delrhoL*VL + vfS*fSs2*Np2*delrhoS*delrhoS*VS); 69 70 f2+= vfS*(1.0-fSs)*pow(delrhoS, 2)*VS*sph_j1c(q*rS)*sph_j1c(q*rS); 79 //I(q) for large-small composite particles 80 f2 = f2*(vfL*delrhoL*delrhoL*VL + vfS*fSs*Np*delrhoS*delrhoS*VS); 81 //I(q) for free small particles 82 f2+= vfS*(1.0-fSs)*delrhoS*delrhoS*VS*psiS*psiS; 71 83 72 84 // normalize to single particle volume and convert to 1/cm -
sasmodels/models/raspberry.py
rbad8b12 r5745f0b 3 3 ---------- 4 4 5 The large and small spheres have their own SLD, as well as the solvent. The 6 surface coverage term is a fractional coverage (maximum of approximately 0.9 7 for hexagonally-packed spheres on a surface). Since not all of the small 8 spheres are necessarily attached to the surface, the excess free (small) 9 spheres scattering is also included in the calculation. The function calculate 10 follows equations (8)-(12) of the reference below, and the equations are not 11 reproduced here. 12 13 No inter-particle scattering is included in this model. 14 5 The figure below shows a schematic of a large droplet surrounded by several smaller particles 6 forming a structure similar to that of Pickering emulsions. 15 7 16 8 .. figure:: img/raspberry_geometry.jpg 17 9 18 10 Schematic of the raspberry model 19 20 where *Ro* is the radius of the large sphere, *Rp* the radius of the smaller21 spheres on the surface and |delta| = the fractional penetration depth.22 11 23 For 2D data: The 2D scattering intensity is calculated in the same way as 1D, 24 where the *q* vector is defined as 12 In order to calculate the form factor of the entire complex, the self-correlation of the large droplet, 13 the self-correlation of the particles, the correlation terms between different particles 14 and the cross terms between large droplet and small particles all need to be calculated. 15 16 Consider two infinitely thin shells of radii R2 and R2 separated by distance r. The general 17 structure of the equation is then the form factor of the two shells multiplied by the phase 18 factor that accounts for the separation of their centers. 25 19 26 20 .. math:: 27 21 28 q = \sqrt{q_x^2 + q_y^2} 22 S(q) = \frac{sin(qR_1)}{qR_1}\frac{sin(qR_2)}{qR_2}\frac{sin(qr)}{qr} 23 24 In this case, the large droplet and small particles are solid spheres rather than thin shells. Thus 25 the two terms must be integrated over $R_L$ and $R_S$ respectively using the weighting function of 26 a sphere. We then obtain the functions for the form of the two spheres: 27 28 .. math:: 29 30 \Psi_L = \int_0^{R_L}(4\pi R^2_L)\frac{sin(qR_L)}{qR_L}dR_L = \frac{3[sin(qR_L)-qR_Lcos(qR_L)]}{(qR_L)^2} 31 32 .. math:: 33 34 \Psi_S = \int_0^{R_S}(4\pi R^2_S)\frac{sin(qR_S)}{qR_S}dR_S = \frac{3[sin(qR_S)-qR_Lcos(qR_S)]}{(qR_S)^2} 35 36 The cross term between the large droplet and small particles is given by: 37 38 .. math:: 39 S_{LS} = \Psi_L\Psi_S\frac{sin(q(R_L+\delta R_S))}{q(R_L+\delta\ R_S)} 40 41 and the self term between small particles is given by: 42 43 .. math:: 44 S_{SS} = \Psi_S^2\bigl[\frac{sin(q(R_L+\delta R_S))}{q(R_L+\delta\ R_S)}\bigr]^2 45 46 The number of small particles per large droplet, $N_p$, is given by: 47 48 .. math:: 49 50 N_p = \frac{\phi_S\phi_{surface}V_L}{\phi_L V_S} 51 52 where $\phi_S$ is the volume fraction of small particles in the sample, $\phi_{surface}$ is the 53 fraction of the small particles that are adsorbed to the large droplets, $\phi_L$ is the volume fraction 54 of large droplets in the sample, and $V_S$ and $V_L$ are the volumes of individual small particles and 55 large droplets respectively. 56 57 The form factor of the entire complex can now be calculated including the excess scattering length 58 densities of the components $\Delta\rho_L$ and $\Delta\rho_S$, where $\Delta\rho_x = |\rho_x-\rho_{solvent}|$ : 59 60 .. math:: 61 62 P_{LS} = \frac{1}{M^2}\bigl[(\Delta\rho_L)^2V_L^2\Psi_L^2+N_p(\Delta\rho_S)^2V_S^2\Psi_S^2 63 + N_p(1-N_p)(\Delta\rho_S)^2V_S^2S_{SS} + 2N_p\Delta\rho_L\Delta\rho_SV_LV_SS_{LS} 64 65 where M is the total scattering length of the whole complex : 66 67 .. math:: 68 M = \Delta\rho_LV_L + N_p\Delta\rho_SV_S 69 70 In a real system, there will ususally be an excess of small particles such that some fraction remain unbound. 71 Therefore the overall scattering intensity is given by: 72 73 .. math:: 74 I(Q) = I_{LS}(Q) + I_S(Q) = (\phi_L(\Delta\rho_L)^2V_L + \phi_S\phi_{surface}N_p(\Delta\rho_S)^2V_S)P_{LS} 75 + \phi_S(1-\phi_{surface})(\Delta\rho_S)^2V_S\Psi_S^2 76 77 A useful parameter to extract is the fraction of the surface area of the large droplets that is covered by small 78 particles. This can be calculated from the model parameters as: 79 80 .. math:: 81 \chi = \frac{4\phi_L\phi_{surface}(R_L+\delta R_S)}{\phi_LR_S} 29 82 30 83 … … 35 88 *particles*, *Journal of Colloid and Interface Science*, 343(1) (2010) 36-41 36 89 37 **Author:** Andrew jackson **on:** 200890 **Author:** Andrew Jackson **on:** 2008 38 91 39 **Modified by:** Paul Butler **on:** March 18, 201692 **Modified by:** Andrew Jackson **on:** March 20, 2016 40 93 41 **Reviewed by:** Paul Butler **on:** March 18, 201694 **Reviewed by:** Andrew Jackson **on:** March 20, 2016 42 95 """ 43 96 … … 50 103 description = """ 51 104 RaspBerryModel: 52 volf _Lsph= volume fraction large spheres53 radius_ Lsph= radius large sphere (A)54 sld_ Lsph= sld large sphere (A-2)55 volf _Ssph= volume fraction small spheres56 radius_ Ssph= radius small sphere (A)57 surf rac_Ssph= fraction of small spheres at surface58 sld_ Ssph= sld small sphere59 delta_Ssph = small sphere penetration (A)60 sld_solv = sld solvent105 volfraction_lg = volume fraction large spheres 106 radius_lg = radius large sphere (A) 107 sld_lg = sld large sphere (A-2) 108 volfraction_sm = volume fraction small spheres 109 radius_sm = radius small sphere (A) 110 surface_fraction = fraction of small spheres at surface 111 sld_sm = sld small sphere 112 penetration = small sphere penetration (A) 113 sld_solvent = sld solvent 61 114 background = background (cm-1) 62 115 Ref: J. coll. inter. sci. (2010) vol. 343 (1) pp. 36-41.""" … … 74 127 ["volfraction_sm", "", 0.005, [-inf, inf], "", 75 128 "volume fraction of small spheres"], 76 ["surf _fraction", "", 0.4, [-inf, inf], "",129 ["surface_fraction", "", 0.4, [-inf, inf], "", 77 130 "fraction of small spheres at surface"], 78 131 ["radius_lg", "Ang", 5000, [0, inf], "volume", … … 80 133 ["radius_sm", "Ang", 100, [0, inf], "", 81 134 "radius of small spheres"], 82 ["penetration", "Ang", 0 .0, [0, inf], "",83 " penetration depth of small spheres into large sphere"],135 ["penetration", "Ang", 0, [-1, 1], "", 136 "fractional penetration depth of small spheres into large sphere"], 84 137 ] 85 138 … … 89 142 demo = dict(scale=1, background=0.001, 90 143 sld_lg=-0.4, sld_sm=3.5, sld_solvent=6.36, 91 volfraction_lg=0.05, volfraction_sm=0.005, surf _fraction=0.4,144 volfraction_lg=0.05, volfraction_sm=0.005, surface_fraction=0.4, 92 145 radius_lg=5000, radius_sm=100, penetration=0.0, 93 146 radius_lg_pd=.2, radius_lg_pd_n=10) … … 95 148 # For testing against the old sasview models, include the converted parameter 96 149 # names and the target sasview model name. 97 oldname = 'RaspBerryModel'98 oldpars = dict(sld_lg='sld_Lsph', sld_sm='sld_Ssph', sld_solvent='sld_solv',99 volfraction_lg='volf_Lsph', volfraction_sm='volf_Ssph',100 surf_fraction='surfrac_Ssph',101 radius_lg='radius_Lsph', radius_sm='radius_Ssph',102 penetration='delta_Ssph')103 104 150 105 151 # NOTE: test results taken from values returned by SasView 3.1.2, with -
sasmodels/models/surface_fractal.c
r9c461c7 r6794301 26 26 //calculate S(q) 27 27 mmo = 5.0 - surface_dim; 28 sq = exp(lanczos_gamma(mmo))*sin(-(mmo)*atan(q*cutoff_length));28 sq = sas_gamma(mmo)*sin(-(mmo)*atan(q*cutoff_length)); 29 29 sq *= pow(cutoff_length, mmo); 30 30 sq /= pow((1.0 + (q*cutoff_length)*(q*cutoff_length)),(mmo/2.0)); -
sasmodels/models/surface_fractal.py
raa2edb2 r6794301 87 87 # pylint: enable=bad-whitespace, line-too-long 88 88 89 source = ["lib/sph_j1c.c", "lib/ lanczos_gamma.c", "surface_fractal.c"]89 source = ["lib/sph_j1c.c", "lib/sas_gamma.c", "surface_fractal.c"] 90 90 91 91 demo = dict(scale=1, background=0, -
sasmodels/models/triaxial_ellipsoid.py
r5933c7f r6ef4293 36 36 we define the axis of the cylinder using the angles $\theta$, $\phi$ 37 37 and $\psi$. These angles are defined on 38 :numref:` figure #<triaxial-ellipsoid-angles>`.38 :numref:`triaxial-ellipsoid-angles`. 39 39 The angle $\psi$ is the rotational angle around its own $c$ axis 40 40 against the $q$ plane. For example, $\psi = 0$ when the -
sasmodels/models/vesicle.c
r321736f r062db5a 2 2 3 3 double Iq(double q, 4 double sld, double s olvent_sld,4 double sld, double sld_solvent, double volfraction, 5 5 double radius, double thickness); 6 6 7 7 double Iqxy(double qx, double qy, 8 double sld, double s olvent_sld,8 double sld, double sld_solvent, double volfraction, 9 9 double radius, double thickness); 10 10 … … 20 20 double Iq(double q, 21 21 double sld, 22 double solvent_sld, 22 double sld_solvent, 23 double volfraction, 23 24 double radius, 24 25 double thickness) … … 30 31 */ 31 32 32 /*33 note that the sph_j1c we are using has been optimized for precision over34 SasView's original implementation. HOWEVER at q==0 that implementation35 set bes=1.0 rather than 0.0 (correct value) on the grounds I believe that36 bes=0.00 causes Iq to have a divide by 0 error (mostly encountered when37 doing a theory curve in 2D? We should verify this and if necessary fix38 -PDB Feb 7, 201639 */40 33 { 41 double bes,vol,contrast,f,f2;34 double vol,contrast,f,f2; 42 35 43 36 // core first, then add in shell 44 contrast = solvent_sld-sld; 45 bes = sph_j1c(q*radius); 37 contrast = sld_solvent-sld; 46 38 vol = 4.0*M_PI/3.0*radius*radius*radius; 47 f = vol* bes*contrast;39 f = vol*sph_j1c(q*radius)*contrast; 48 40 49 //now the shell 50 contrast = sld-solvent_sld; 51 bes = sph_j1c(q*(radius+thickness)); 41 //now the shell. No volume normalization as this is done by the caller 42 contrast = sld-sld_solvent; 52 43 vol = 4.0*M_PI/3.0*(radius+thickness)*(radius+thickness)*(radius+thickness); 53 f += vol* bes*contrast;44 f += vol*sph_j1c(q*(radius+thickness))*contrast; 54 45 55 //rescale to [cm-1]. No volume normalization as this is done by the caller56 f2 = f*f*1.0e-4;46 //rescale to [cm-1]. 47 f2 = volfraction*f*f*1.0e-4; 57 48 58 49 return(f2); … … 61 52 62 53 double Iqxy(double qx, double qy, 63 double sld, double s olvent_sld,54 double sld, double sld_solvent, double volfraction, 64 55 double radius, double thickness) 65 56 … … 67 58 double q = sqrt(qx*qx + qy*qy); 68 59 return Iq(q, 69 sld, s olvent_sld,60 sld, sld_solvent, volfraction, 70 61 radius,thickness); 71 62 -
sasmodels/models/vesicle.py
raa2edb2 r062db5a 7 7 .. math:: 8 8 9 P(q) = \frac{\ text{scale}}{V_\text{shell}} \left[9 P(q) = \frac{\phi}{V_\text{shell}} \left[ 10 10 \frac{3V_{\text{core}}({\rho_{\text{solvent}} 11 11 - \rho_{\text{shell}})j_1(qR_{\text{core}})}}{qR_{\text{core}}} … … 15 15 16 16 17 where scale is a scale factor equivalent to the volume fraction of shell 18 material if the data is on an absolute scale, $V_{shell}$ is the volume of the 19 shell, $V_{\text{cor}}$ is the volume of the core, $V_{\text{tot}}$ is the 20 total volume, $R_{\text{core}}$ is the radius of the core, $R_{\text{tot}}$ is 21 the outer radius of the shell, $\rho_{\text{solvent}}$ is the scattering length 22 density of the solvent (which is the same as for the core in this case), 17 where $\phi$ is the volume fraction of shell material, $V_{shell}$ is the volume 18 of the shell, $V_{\text{cor}}$ is the volume of the core, $V_{\text{tot}}$ is 19 the total volume, $R_{\text{core}}$ is the radius of the core, $R_{\text{tot}}$ 20 is the outer radius of the shell, $\rho_{\text{solvent}}$ is the scattering 21 length density of the solvent (which is the same as for the core in this case), 23 22 $\rho_{\text{scale}}$ is the scattering length density of the shell, background 24 23 is a flat background level (due for example to incoherent scattering in the … … 56 55 A Guinier and G. Fournet, *Small-Angle Scattering of X-Rays*, John Wiley and 57 56 Sons, New York, (1955) 57 58 **Author:** NIST IGOR/DANSE **on:** pre 2010 59 60 **Last Modified by:** Paul Butler **on:** March 20, 2016 61 62 **Last Reviewed by:** Paul Butler **on:** March 20, 2016 58 63 """ 59 64 … … 70 75 thickness: the shell thickness 71 76 sld: the shell SLD 72 s olvent_sld: the solvent (and core) SLD77 sld_slovent: the solvent (and core) SLD 73 78 background: incoherent background 74 scale : scale factor = shell volume fraction if on absolute scale""" 79 volfraction: shell volume fraction 80 scale : scale factor = 1 if on absolute scale""" 75 81 category = "shape:sphere" 76 82 … … 78 84 parameters = [["sld", "1e-6/Ang^2", 0.5, [-inf, inf], "", 79 85 "vesicle shell scattering length density"], 80 ["s olvent_sld", "1e-6/Ang^2", 6.36, [-inf, inf], "",86 ["sld_solvent", "1e-6/Ang^2", 6.36, [-inf, inf], "", 81 87 "solvent scattering length density"], 88 ["volfraction", "", 0.05, [0, 1.0], "", 89 "volume fraction of shell"], 82 90 ["radius", "Ang", 100, [0, inf], "volume", 83 91 "vesicle core radius"], … … 114 122 115 123 # parameters for demo 116 demo = dict(s cale=1, background=0,117 sld=0.5, solvent_sld=6.36,124 demo = dict(sld=0.5, sld_solvent=6.36, 125 volfraction=0.05, 118 126 radius=100, thickness=30, 119 127 radius_pd=.2, radius_pd_n=10, … … 123 131 # names and the target sasview model name. 124 132 oldname = 'VesicleModel' 125 oldpars = dict(sld='shell_sld', s olvent_sld='solv_sld')133 oldpars = dict(sld='shell_sld', sld_solvent='solv_sld') 126 134 127 135 128 136 # NOTE: test results taken from values returned by SasView 3.1.2, with 129 137 # 0.001 added for a non-zero default background. 130 tests = [[{}, 0.0010005303255, 17139.8278799], 131 [{}, 0.200027832249, 0.131387268704], 138 tests = [[{}, 0.0005, 859.916526646], 139 [{}, 0.100600200401, 1.77063682331], 140 [{}, 0.5, 0.00355351388906], 132 141 [{}, 'ER', 130.], 133 142 [{}, 'VR', 0.54483386436], -
sasmodels/resolution.py
r2f63032 r8b935d1 689 689 self.pars = TEST_PARS_PINHOLE_SPHERE 690 690 from sasmodels import core 691 from sasmodels.models import sphere 692 self.model = core.load_model(sphere, dtype='double') 691 self.model = core.load_model("sphere", dtype='double') 693 692 694 693 def _eval_sphere(self, pars, resolution): -
sasmodels/sesans.py
rd554bd7 ra154ad16 26 26 q_max is determined by the acceptance angle of the SESANS instrument. 27 27 """ 28 from sas.sascalc.data_util.nxsunit import Converter 29 28 30 q_min = dq = 0.1 * 2*pi / Rmax 29 return np.arange(q_min, q_max[0], dq)31 return np.arange(q_min, Converter("1/A")(q_max[0], units=q_max[1]), dq) 30 32 31 33 def make_all_q(data):
Note: See TracChangeset
for help on using the changeset viewer.