Changeset ec1d4bc in sasmodels


Ignore:
Timestamp:
Feb 1, 2017 5:52:41 PM (7 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, core_shell_microgels, costrafo411, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
d3e3f756
Parents:
66ca2a6
Message:

fix multilayer vesicle polydispersity, docs and parameter names

Location:
sasmodels/models
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/models/multilayer_vesicle.c

    r925ad6e rec1d4bc  
    1 static 
    2 double multilayer_vesicle_kernel(double q, 
     1static double 
     2form_volume(double radius, 
     3          double thick_shell, 
     4          double thick_solvent, 
     5          double fp_n_shells) 
     6{ 
     7    int n_shells = (int)(fp_n_shells + 0.5); 
     8    double R_N = radius + n_shells*(thick_shell+thick_solvent) - thick_solvent; 
     9    return M_4PI_3*cube(R_N); 
     10} 
     11 
     12static double 
     13multilayer_vesicle_kernel(double q, 
    314          double volfraction, 
    415          double radius, 
     
    718          double sld_solvent, 
    819          double sld, 
    9           double n_pairs) 
     20          int n_shells) 
    1021{ 
    1122    //calculate with a loop, two shells at a time 
     
    2940 
    3041        //do 2 layers at a time 
    31         ii += 1; 
     42        ii++; 
    3243 
    33     } while(ii <= n_pairs-1);  //change to make 0 < n_pairs < 2 correspond to 
     44    } while(ii <= n_shells-1);  //change to make 0 < n_shells < 2 correspond to 
    3445                               //unilamellar vesicles (C. Glinka, 11/24/03) 
    3546 
    36     fval *= volfraction*1.0e-4*fval/voli; 
    37  
    38     return(fval); 
     47    return 1.0e-4*volfraction*fval*fval;  // Volume normalization happens in caller 
    3948} 
    4049 
    41 static 
    42 double Iq(double q, 
     50static double 
     51Iq(double q, 
    4352          double volfraction, 
    4453          double radius, 
     
    4756          double sld_solvent, 
    4857          double sld, 
    49           double n_pairs) 
     58          double fp_n_shells) 
    5059{ 
     60    int n_shells = (int)(fp_n_shells + 0.5); 
    5161    return multilayer_vesicle_kernel(q, 
    5262           volfraction, 
     
    5666           sld_solvent, 
    5767           sld, 
    58            n_pairs); 
     68           n_shells); 
    5969} 
    6070 
  • sasmodels/models/multilayer_vesicle.py

    r925ad6e rec1d4bc  
    2020.. math:: 
    2121 
    22     P(q) = \frac{\text{scale.volfraction}}{V_t} F^2(q) + \text{background} 
     22    P(q) = \text{scale}\frac{\phi}{V(R_N)} F^2(q) + \text{background} 
    2323 
    2424where 
     
    2626.. math:: 
    2727 
    28      F(q) = (\rho_{shell}-\rho_{solv}) \sum_{i=1}^{n\_pairs} \left[ 
    29      3V(R_i)\frac{\sin(qR_i)-qR_i\cos(qR_i)}{(qR_i)^3} \\ 
    30       - 3V(R_i+t_s)\frac{\sin(q(R_i+t_s))-q(R_i+t_s)\cos(q(R_i+t_s))}{(q(R_i+t_s))^3} 
     28     F(q) = (\rho_\text{shell}-\rho_\text{solv}) \sum_{i=1}^{N} \left[ 
     29     3V(r_i)\frac{\sin(qr_i) - qr_i\cos(qr_i)}{(qr_i)^3} 
     30     - 3V(R_i)\frac{\sin(qR_i) - qR_i\cos(qR_i)}{(qR_i)^3} 
    3131     \right] 
    3232 
     33for 
    3334 
    34 where $R_i = r_c + (i-1)(t_s + t_w)$ 
    35     
    36 where $V_t$ is the volume of the whole particle, $V(R)$ is the volume of a sphere 
    37 of radius $R$, $r_c$ is the radius of the core, $\rho_{shell}$ is the scattering length  
    38 density of a shell, $\rho_{solv}$ is the scattering length density of the solvent. 
     35.. math:: 
    3936 
     37     r_i &= r_c + (i-1)(t_s + t_w) && \text{ solvent radius before shell } i \\ 
     38     R_i &= r_i + t_s && \text{ shell radius for shell } i 
     39 
     40$\phi$ is the volume fraction of particles, $V(r)$ is the volume of a sphere 
     41of radius $r$, $r_c$ is the radius of the core, $t_s$ is the thickness of 
     42the shell, $t_w$ is the thickness of the solvent layer between the shells, 
     43$\rho_\text{shell}$ is the scattering length density of a shell, and 
     44$\rho_\text{solv}$ is the scattering length density of the solvent. 
    4045 
    4146The 2D scattering intensity is the same as 1D, regardless of the orientation 
     
    4651    q = \sqrt{q_x^2 + q_y^2} 
    4752 
    48  
    49 The outer most radius 
    50  
    51 $radius + n\_pairs * thick\_shell + (n\_pairs- 1) * thick\_solvent$ 
    52  
    53 is used for both the volume fraction normalization and for the  
    54 effective radius for *S(Q)* when $P(Q) * S(Q)$ is applied. 
     53The outer-most shell radius $R_N$ is used as the effective radius 
     54for $P(Q)$ when $P(Q) * S(Q)$ is applied. 
    5555 
    5656For information about polarised and magnetic scattering, see 
     
    8989    sld_solvent: solvent scattering length density 
    9090    sld: shell scattering length density 
    91     n_pairs:number of "shell plus solvent" layer pairs 
     91    n_shells:number of "shell plus solvent" layer pairs 
    9292    background: incoherent background 
    9393        """ 
     
    9898parameters = [ 
    9999    ["volfraction", "",  0.05, [0.0, 1],  "", "volume fraction of vesicles"], 
    100     ["radius", "Ang", 60.0, [0.0, inf],  "", "radius of solvent filled core"], 
    101     ["thick_shell", "Ang",        10.0, [0.0, inf],  "", "thickness of one shell"], 
    102     ["thick_solvent", "Ang",        10.0, [0.0, inf],  "", "solvent thickness between shells"], 
     100    ["radius", "Ang", 60.0, [0.0, inf],  "volume", "radius of solvent filled core"], 
     101    ["thick_shell", "Ang",        10.0, [0.0, inf],  "volume", "thickness of one shell"], 
     102    ["thick_solvent", "Ang",        10.0, [0.0, inf],  "volume", "solvent thickness between shells"], 
    103103    ["sld_solvent",    "1e-6/Ang^2",  6.4, [-inf, inf], "sld", "solvent scattering length density"], 
    104104    ["sld",   "1e-6/Ang^2",  0.4, [-inf, inf], "sld", "Shell scattering length density"], 
    105     ["n_pairs",     "",            2.0, [1.0, inf],  "", "Number of shell plus solvent layer pairs"], 
     105    ["n_shells",     "",            2.0, [1.0, inf],  "volume", "Number of shell plus solvent layer pairs"], 
    106106    ] 
    107107# pylint: enable=bad-whitespace, line-too-long 
     
    109109source = ["lib/sas_3j1x_x.c", "multilayer_vesicle.c"] 
    110110 
    111 polydispersity = ["radius", "n_pairs"] 
     111def ER(radius, thick_shell, thick_solvent, n_shells): 
     112    n_shells = int(n_shells+0.5) 
     113    return radius + n_shells * (thick_shell + thick_solvent) - thick_solvent 
    112114 
    113115demo = dict(scale=1, background=0, 
     
    118120            sld_solvent=6.4, 
    119121            sld=0.4, 
    120             n_pairs=2.0) 
     122            n_shells=2.0) 
    121123 
    122124tests = [ 
     
    127129      'sld_solvent': 6.4, 
    128130      'sld': 0.4, 
    129       'n_pairs': 2.0, 
     131      'n_shells': 2.0, 
    130132      'scale': 1.0, 
    131133      'background': 0.001, 
     
    138140      'sld_solvent': 6.4, 
    139141      'sld': 0.4, 
    140       'n_pairs': 2.0, 
     142      'n_shells': 2.0, 
    141143      'scale': 1.0, 
    142144      'background': 0.001, 
Note: See TracChangeset for help on using the changeset viewer.