Changeset 062db5a in sasmodels


Ignore:
Timestamp:
Mar 20, 2016 8:34:34 AM (9 years ago)
Author:
butler
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:
5e29b9d
Parents:
ce346b6
Message:

clean up of vesicle model

Location:
sasmodels
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/convert.py

    rbad8b12 r062db5a  
    154154        elif name == 'fractal': 
    155155            del oldpars['volfraction'] 
     156        elif name == 'vesicle': 
     157            del oldpars['volfraction'] 
    156158 
    157159    return oldpars 
     
    191193        elif name == 'fractal': 
    192194            pars['volfraction'] = 1 
     195        elif name == 'vesicle': 
     196            pars['volfraction'] = 1 
    193197             
  • sasmodels/models/vesicle.c

    r321736f r062db5a  
    22 
    33double Iq(double q,  
    4           double sld, double solvent_sld, 
     4          double sld, double sld_solvent, double volfraction, 
    55          double radius, double thickness); 
    66 
    77double Iqxy(double qx, double qy, 
    8           double sld, double solvent_sld, 
     8          double sld, double sld_solvent, double volfraction, 
    99          double radius, double thickness); 
    1010 
     
    2020double Iq(double q, 
    2121    double sld, 
    22     double solvent_sld, 
     22    double sld_solvent, 
     23    double volfraction, 
    2324    double radius, 
    2425    double thickness) 
     
    3031*/ 
    3132 
    32 /* 
    33    note that the sph_j1c we are using has been optimized for precision over 
    34    SasView's original implementation. HOWEVER at q==0 that implementation 
    35    set bes=1.0 rather than 0.0 (correct value) on the grounds I believe that  
    36    bes=0.00 causes Iq to have a divide by 0 error (mostly encountered when 
    37    doing a theory curve in 2D?  We should verify this and if necessary fix 
    38      -PDB Feb 7, 2016  
    39 */ 
    4033{ 
    41     double bes,vol,contrast,f,f2; 
     34    double vol,contrast,f,f2; 
    4235 
    4336    // core first, then add in shell 
    44     contrast = solvent_sld-sld; 
    45     bes = sph_j1c(q*radius); 
     37    contrast = sld_solvent-sld; 
    4638    vol = 4.0*M_PI/3.0*radius*radius*radius; 
    47     f = vol*bes*contrast; 
     39    f = vol*sph_j1c(q*radius)*contrast; 
    4840  
    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; 
    5243    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; 
    5445 
    55     //rescale to [cm-1]. No volume normalization as this is done by the caller 
    56     f2 = f*f*1.0e-4; 
     46    //rescale to [cm-1].  
     47    f2 = volfraction*f*f*1.0e-4; 
    5748     
    5849    return(f2); 
     
    6152 
    6253double Iqxy(double qx, double qy, 
    63           double sld, double solvent_sld, 
     54          double sld, double sld_solvent, double volfraction, 
    6455          double radius, double thickness) 
    6556           
     
    6758    double q = sqrt(qx*qx + qy*qy); 
    6859    return Iq(q, 
    69         sld, solvent_sld, 
     60        sld, sld_solvent, volfraction, 
    7061        radius,thickness); 
    7162 
  • sasmodels/models/vesicle.py

    raa2edb2 r062db5a  
    77.. math:: 
    88 
    9     P(q) = \frac{\text{scale}}{V_\text{shell}} \left[ 
     9    P(q) = \frac{\phi}{V_\text{shell}} \left[ 
    1010           \frac{3V_{\text{core}}({\rho_{\text{solvent}} 
    1111           - \rho_{\text{shell}})j_1(qR_{\text{core}})}}{qR_{\text{core}}} 
     
    1515 
    1616 
    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), 
     17where $\phi$ is the volume fraction of shell material, $V_{shell}$ is the volume 
     18of the shell, $V_{\text{cor}}$ is the volume of the core, $V_{\text{tot}}$ is 
     19the total volume, $R_{\text{core}}$ is the radius of the core, $R_{\text{tot}}$ 
     20is the outer radius of the shell, $\rho_{\text{solvent}}$ is the scattering 
     21length density of the solvent (which is the same as for the core in this case), 
    2322$\rho_{\text{scale}}$ is the scattering length density of the shell, background 
    2423is a flat background level (due for example to incoherent scattering in the 
     
    5655A Guinier and G. Fournet, *Small-Angle Scattering of X-Rays*, John Wiley and 
    5756Sons, 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 
    5863""" 
    5964 
     
    7075        thickness: the shell thickness 
    7176        sld: the shell SLD 
    72         solvent_sld: the solvent (and core) SLD 
     77        sld_slovent: the solvent (and core) SLD 
    7378        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""" 
    7581category = "shape:sphere" 
    7682 
     
    7884parameters = [["sld", "1e-6/Ang^2", 0.5, [-inf, inf], "", 
    7985               "vesicle shell scattering length density"], 
    80               ["solvent_sld", "1e-6/Ang^2", 6.36, [-inf, inf], "", 
     86              ["sld_solvent", "1e-6/Ang^2", 6.36, [-inf, inf], "", 
    8187               "solvent scattering length density"], 
     88              ["volfraction", "", 0.05, [0, 1.0], "", 
     89               "volume fraction of shell"], 
    8290              ["radius", "Ang", 100, [0, inf], "volume", 
    8391               "vesicle core radius"], 
     
    114122 
    115123# parameters for demo 
    116 demo = dict(scale=1, background=0, 
    117             sld=0.5, solvent_sld=6.36, 
     124demo = dict(sld=0.5, sld_solvent=6.36, 
     125            volfraction=0.05, 
    118126            radius=100, thickness=30, 
    119127            radius_pd=.2, radius_pd_n=10, 
     
    123131# names and the target sasview model name. 
    124132oldname = 'VesicleModel' 
    125 oldpars = dict(sld='shell_sld', solvent_sld='solv_sld') 
     133oldpars = dict(sld='shell_sld', sld_solvent='solv_sld') 
    126134 
    127135 
    128136# NOTE: test results taken from values returned by SasView 3.1.2, with 
    129137# 0.001 added for a non-zero default background. 
    130 tests = [[{}, 0.0010005303255, 17139.8278799], 
    131          [{}, 0.200027832249, 0.131387268704], 
     138tests = [[{}, 0.0005, 859.916526646], 
     139         [{}, 0.100600200401, 1.77063682331], 
     140         [{}, 0.5, 0.00355351388906], 
    132141         [{}, 'ER', 130.], 
    133142         [{}, 'VR', 0.54483386436], 
Note: See TracChangeset for help on using the changeset viewer.