Changes in / [1dd2854:91d7ec4] in sasmodels


Ignore:
Location:
sasmodels/models
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/models/raspberry.c

    rbad8b12 ra2d8a67  
    2121double Iq(double q, 
    2222          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, 
    2424          double radius_lg, double radius_sm, double penetration) 
    2525{ 
     
    3737    sldL = sld_lg; 
    3838    vfS = volfraction_sm; 
     39    fSs = surface_fraction; 
    3940    rS = radius_sm; 
    40     aSs = surf_fraction; 
    4141    sldS = sld_sm; 
    4242    deltaS = penetration; 
     
    4848    VL = M_4PI_3*rL*rL*rL; 
    4949    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 
    5555    slT = delrhoL*VL + Np*delrhoS*VS; 
    5656 
    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 
    6475    if (f2 != 0.0){ 
    6576        f2 = f2/slT/slT; 
    6677        } 
    6778 
    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; 
    7183     
    7284    // normalize to single particle volume and convert to 1/cm 
  • sasmodels/models/raspberry.py

    rbad8b12 ra2d8a67  
    33---------- 
    44 
    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  
     5The figure below shows a schematic of a large droplet surrounded by several smaller particles 
     6forming a structure similar to that of Pickering emulsions. 
    157 
    168.. figure:: img/raspberry_geometry.jpg 
    179 
    1810    Schematic of the raspberry model 
    19      
    20 where *Ro* is the radius of the large sphere, *Rp* the radius of the smaller  
    21 spheres on the surface and |delta| = the fractional penetration depth. 
    2211 
    23 For 2D data: The 2D scattering intensity is calculated in the same way as 1D, 
    24 where the *q* vector is defined as 
     12In order to calculate the form factor of the entire complex, the self-correlation of the large droplet, 
     13the self-correlation of the particles, the correlation terms between different particles 
     14and the cross terms between large droplet and small particles all need to be calculated. 
     15 
     16Consider two infinitely thin shells of radii R2 and R2 separated by distance r. The general 
     17structure of the equation is then the form factor of the two shells multiplied by the phase 
     18factor that accounts for the separation of their centers. 
    2519 
    2620.. math:: 
    2721 
    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 
     24In this case, the large droplet and small particles are solid spheres rather than thin shells. Thus 
     25the two terms must be integrated over $R_L$ and $R_S$ respectively using the weighting function of 
     26a 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\piR^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\piR^2_S)\frac{sin(qR_S)}{qR_S}dR_S = \frac{3[sin(qR_S)-qR_Lcos(qR_S)]}{(qR_S)^2} 
     35 
     36The 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+\deltaR_S))}{q(R_L+\deltaR_S)} 
     40 
     41and the self term between small particles is given by: 
     42 
     43.. math:: 
     44    S_{SS} = \Psi_S^2\bigl[\frac{sin(q(R_L+\deltaR_S))}{q(R_L+\deltaR_S)}\bigr]^2 
     45 
     46The 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 
     52where $\phi_S$ is the volume fraction of small particles in the sample, $\phi_{surface}$ is the 
     53fraction of the small particles that are adsorbed to the large droplets, $\phi_L$ is the volume fraction 
     54of large droplets in the sample, and $V_S$ and $V_L$ are the volumes of individual small particles and 
     55large droplets respectively. 
     56 
     57The form factor of the entire complex can now be calculated including the excess scattering length 
     58densities 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 
     65where 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 
     70In a real system, there will ususally be an excess of small particles such that some fraction remain unbound. 
     71Therefore 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 
     77A useful parameter to extract is the fraction of the surface area of the large droplets that is covered by small 
     78particles. 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} 
    2982 
    3083 
     
    3588*particles*, *Journal of Colloid and Interface Science*, 343(1) (2010) 36-41 
    3689 
    37 **Author:** Andrew jackson **on:** 2008 
     90**Author:** Andrew Jackson **on:** 2008 
    3891 
    39 **Modified by:** Paul Butler **on:** March 18, 2016 
     92**Modified by:** Andrew Jackson **on:** March 20, 2016 
    4093 
    41 **Reviewed by:** Paul Butler **on:** March 18, 2016 
     94**Reviewed by:** Andrew Jackson **on:** March 20, 2016 
    4295""" 
    4396 
    4497from numpy import pi, inf 
    4598 
    46 name = "raspberry" 
     99name = "raspberry_surface_fraction" 
    47100title = "Calculates the form factor, *P(q)*, for a 'Raspberry-like' structure \ 
    48101where there are smaller spheres at the surface of a larger sphere, such as the \ 
     
    50103description = """ 
    51104                RaspBerryModel: 
    52                 volf_Lsph = volume fraction large spheres 
    53                 radius_Lsph = radius large sphere (A) 
    54                 sld_Lsph = sld large sphere (A-2) 
    55                 volf_Ssph = volume fraction small spheres 
    56                 radius_Ssph = radius small sphere (A) 
    57                 surfrac_Ssph = fraction of small spheres at surface 
    58                 sld_Ssph = sld small sphere 
    59                 delta_Ssph = small sphere penetration (A)  
    60                 sld_solv   = sld solvent 
     105                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 
    61114                background = background (cm-1) 
    62115            Ref: J. coll. inter. sci. (2010) vol. 343 (1) pp. 36-41.""" 
     
    74127              ["volfraction_sm", "", 0.005, [-inf, inf], "", 
    75128               "volume fraction of small spheres"], 
    76               ["surf_fraction", "", 0.4, [-inf, inf], "", 
     129              ["surface_fraction", "", 0.4, [-inf, inf], "", 
    77130               "fraction of small spheres at surface"], 
    78131              ["radius_lg", "Ang", 5000, [0, inf], "volume", 
     
    80133              ["radius_sm", "Ang", 100, [0, inf], "", 
    81134               "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"], 
    84137             ] 
    85138 
     
    89142demo = dict(scale=1, background=0.001, 
    90143            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, 
    92145            radius_lg=5000, radius_sm=100, penetration=0.0, 
    93146            radius_lg_pd=.2, radius_lg_pd_n=10) 
     
    95148# For testing against the old sasview models, include the converted parameter 
    96149# 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  
    104150 
    105151# NOTE: test results taken from values returned by SasView 3.1.2, with 
Note: See TracChangeset for help on using the changeset viewer.