Changeset 0b499f0 in sasmodels


Ignore:
Timestamp:
Mar 20, 2016 6:44:00 AM (8 years ago)
Author:
awashington
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:
0495db8
Parents:
d554bd7 (diff), e796fcb (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' into sesans_units

Files:
11 edited
2 moved

Legend:

Unmodified
Added
Removed
  • doc/conf.py

    r9404dd3 r4a21670c  
    231231    with open('rst_prolog') as fid: 
    232232        rst_prolog = fid.read() 
     233 
     234numfig = True 
  • sasmodels/models/_bessel.py

    r275b98e5 r0f910a7  
    11r""" 
    2 For information about polarised and magnetic scattering, click here_. 
    3  
    4 .. _here: polar_mag_help.html 
     2This is a test function! 
    53 
    64Definition 
    75---------- 
    86 
    9 The 1D scattering intensity is calculated in the following way (Guinier, 1955) 
    10  
    11 .. math:: 
    12  
    13     I(q) = \frac{\text{scale}}{V} \cdot \left[ 
    14         3V(\Delta\rho) \cdot \frac{\sin(qr) - qr\cos(qr))}{(qr)^3} 
    15         \right]^2 + \text{background} 
    16  
    17 where *scale* is a volume fraction, $V$ is the volume of the scatterer, 
    18 $r$ is the radius of the sphere, *background* is the background level and 
    19 *sld* and *solvent_sld* are the scattering length densities (SLDs) of the 
    20 scatterer and the solvent respectively. 
    21  
    22 Note that if your data is in absolute scale, the *scale* should represent 
    23 the volume fraction (which is unitless) if you have a good fit. If not, 
    24 it should represent the volume fraction times a factor (by which your data 
    25 might need to be rescaled). 
    26  
    27 The 2D scattering intensity is the same as above, regardless of the 
    28 orientation of $\vec q$. 
    29  
    30 Validation 
    31 ---------- 
    32  
    33 Validation of our code was done by comparing the output of the 1D model 
    34 to the output of the software provided by the NIST (Kline, 2006). 
    35 Figure :numref:`figure #sphere-comparison` shows a comparison of the output 
    36 of our model and the output of the NIST software. 
    37  
    38 .. _sphere-comparison: 
    39  
    40 .. figure:: img/sphere_comparison.jpg 
    41  
    42     Comparison of the DANSE scattering intensity for a sphere with the 
    43     output of the NIST SANS analysis software. The parameters were set to: 
    44     *scale* = 1.0, *radius* = 60 |Ang|, *contrast* = 1e-6 |Ang^-2|, and 
    45     *background* = 0.01 |cm^-1|. 
    46  
     7Calculates a bessel function. Maybe... 
    478 
    489References 
    4910---------- 
    5011 
    51 A Guinier and G. Fournet, *Small-Angle Scattering of X-Rays*, 
    52 John Wiley and Sons, New York, (1955) 
    53  
    54 *2013/09/09 and 2014/01/06 - Description reviewed by S King and P Parker.* 
     12None 
    5513""" 
    5614 
     
    6018title = "Bessel function testing" 
    6119description = """\ 
    62 Levraging current infrastracture to test Bessel function performance on 
     20Leveraging current infrastructure to test Bessel function performance on 
    6321""" 
    64 category = "special_fucntions:bessel" 
     22category = "special_functions:bessel" 
    6523 
    6624#             ["name", "units", default, [lower, upper], "type","description"], 
  • sasmodels/models/core_shell_ellipsoid_xt.py

    r29172aa r3556ad7  
    8989parameters = [ 
    9090    ["equat_core",    "Ang",       20,   [0, inf],    "volume",      "Equatorial radius of core"], 
    91     ["x_core",        "None",       3,   [0, inf],    "volume",      "Polar radius of core"], 
    92     ["t_shell",       "Ang",       30,   [0, inf],    "volume",      "Equatorial radius of shell"], 
    93     ["x_polar_shell", "",           1,   [0, inf],    "volume",      "Polar radius of shell"], 
     91    ["x_core",        "None",       3,   [0, inf],    "volume",      "axial ratio of core, X = r_polar/r_equatorial"], 
     92    ["t_shell",       "Ang",       30,   [0, inf],    "volume",      "thickness of shell at equator"], 
     93    ["x_polar_shell", "",           1,   [0, inf],    "volume",      "ratio of thickness of shell at pole to that at equator"], 
    9494    ["sld_core",      "1e-6/Ang^2", 2,   [-inf, inf], "",            "Core scattering length density"], 
    9595    ["sld_shell",     "1e-6/Ang^2", 1,   [-inf, inf], "",            "Shell scattering length density"], 
  • sasmodels/models/core_shell_sphere.py

    raa2edb2 r3556ad7  
    1919    V_s(\rho_s-\rho_{solv})\frac{\sin(qr_s)-qr_s\cos(qr_s)}{(qr_s)^3}\right] 
    2020 
    21 where $V_s$ is the volume of the outer shell, $V_c$ is 
    22 the volume of the core, $r_s$ is the radius of the shell, $r_c$ is the radius of the 
     21where $V_s$ is the volume of the whole particle, $V_c$ is 
     22the volume of the core, $r_s$ = $radius$ + $thickness$ is the radius of the particle, $r_c$ is the radius of the 
    2323core, $\rho_c$ is the scattering length density of the core, $\rho_s$ is the scattering length 
    2424density of the shell, $\rho_{solv}$ is the scattering length density of the solvent. 
     
    3030effective radius for $S(Q)$ when $P(Q) \cdot S(Q)$ is applied. 
    3131 
    32 Reference 
    33 --------- 
     32References 
     33---------- 
    3434 
    3535A Guinier and G Fournet, *Small-Angle Scattering of X-Rays*, John Wiley and Sons, New York, (1955) 
     
    4949title = "Form factor for a monodisperse spherical particle with particle with a core-shell structure." 
    5050description = """ 
    51     F^2(q) = 3/V_s [V_c (core_sld-shell_sld) (sin(q*radius)-q*radius*cos(q*radius))/(q*radius)^3  
    52                    + V_s (shell_sld-solvent_sld) (sin(q*r_s)-q*r_s*cos(q*r_s))/(q*r_s)^3] 
     51    F^2(q) = 3/V_s [V_c (sld_core-sld_shell) (sin(q*radius)-q*radius*cos(q*radius))/(q*radius)^3  
     52                   + V_s (sld_shell-sld_solvent) (sin(q*r_s)-q*r_s*cos(q*r_s))/(q*r_s)^3] 
    5353 
    5454            V_s: Volume of the sphere shell 
     
    6262parameters = [["radius",      "Ang",        60.0, [0, inf],    "volume", "Sphere core radius"], 
    6363              ["thickness",   "Ang",        10.0, [0, inf],    "volume", "Sphere shell thickness"], 
    64               ["core_sld",    "1e-6/Ang^2", 1.0,  [-inf, inf], "",       "Sphere core scattering length density"], 
    65               ["shell_sld",   "1e-6/Ang^2", 2.0,  [-inf, inf], "",       "Sphere shell scattering length density"], 
    66               ["solvent_sld", "1e-6/Ang^2", 3.0,  [-inf, inf],  "",      "Solvent scattering length density"]] 
     64              ["sld_core",    "1e-6/Ang^2", 1.0,  [-inf, inf], "",       "core scattering length density"], 
     65              ["sld_shell",   "1e-6/Ang^2", 2.0,  [-inf, inf], "",       "shell scattering length density"], 
     66              ["sld_solvent", "1e-6/Ang^2", 3.0,  [-inf, inf],  "",      "Solvent scattering length density"]] 
    6767# pylint: enable=bad-whitespace, line-too-long 
    6868 
     
    7070 
    7171demo = dict(scale=1, background=0, radius=60, thickness=10, 
    72             core_sld=1.0, shell_sld=2.0, solvent_sld=0.0) 
     72            sld_core=1.0, sld_shell=2.0, sld_solvent=0.0) 
    7373 
    7474oldname = 'CoreShellModel' 
    75 oldpars = {} 
     75oldpars = dict( sld_core='core_sld', 
     76               sld_shell='shell_sld', 
     77               sld_solvent='solvent_sld') 
    7678 
    7779def ER(radius, thickness): 
     
    99101         [{'radius': 60.0, 
    100102           'thickness': 10.0, 
    101            'core_sld': 1.0, 
    102            'shell_sld':2.0, 
    103            'solvent_sld':3.0, 
     103           'sld_core': 1.0, 
     104           'sld_shell':2.0, 
     105           'sld_solvent':3.0, 
    104106           'background':0.0 
    105107          }, 0.4, 0.000698838]] 
  • sasmodels/models/cylinder.py

    r2f63032 r5933c7f  
    3131To provide easy access to the orientation of the cylinder, we define the 
    3232axis of the cylinder using two angles $\theta$ and $\phi$. Those angles 
    33 are defined in :numref:`figure #cylinder-angle-definition`. 
     33are defined in :numref:`figure #<cylinder-angle-definition>`. 
    3434 
    3535.. _cylinder-angle-definition: 
  • sasmodels/models/ellipsoid.py

    rcedad32 r3556ad7  
    22# Note: model title and parameter table are inserted automatically 
    33r""" 
    4 The form factor is normalized by the particle volume. 
     4The form factor is normalized by the particle volume  
    55 
    66Definition 
     
    3131 
    3232$\alpha$ is the angle between the axis of the ellipsoid and $\vec q$, 
    33 $V$ is the volume of the ellipsoid, $R_p$ is the polar radius along the 
     33$V = (4/3)\pi R_pR_e^2$ is the volume of the ellipsoid , $R_p$ is the polar radius along the 
    3434rotational axis of the ellipsoid, $R_e$ is the equatorial radius perpendicular 
    3535to the rotational axis of the ellipsoid and $\Delta \rho$ (contrast) is the 
     
    4141:ref:`cylinder orientation figure <cylinder-angle-definition>`. 
    4242For the ellipsoid, $\theta$ is the angle between the rotational axis 
    43 and the $z$-axis. 
     43and the $z$ -axis. 
    4444 
    4545NB: The 2nd virial coefficient of the solid ellipsoid is calculated based 
     
    5454.. figure:: img/ellipsoid_angle_projection.jpg 
    5555 
    56     The angles for oriented ellipsoid. 
     56    The angles for oriented ellipsoid, shown here as oblate, $a$ = $R_p$ and $b$ = $R_e$ 
    5757 
    5858Validation 
     
    7474    calculated from our 2D model and the intensity from the NIST SANS 
    7575    analysis software. The parameters used were: *scale* = 1.0, 
    76     *rpolar* = 20 |Ang|, *requatorial* = 400 |Ang|, 
     76    *r_polar* = 20 |Ang|, *r_equatorial* = 400 |Ang|, 
    7777    *contrast* = 3e-6 |Ang^-2|, and *background* = 0.0 |cm^-1|. 
    7878 
     
    102102description = """\ 
    103103P(q.alpha)= scale*f(q)^2 + background, where f(q)= 3*(sld 
    104         - solvent_sld)*V*[sin(q*r(Rp,Re,alpha)) 
     104        - sld_solvent)*V*[sin(q*r(Rp,Re,alpha)) 
    105105        -q*r*cos(qr(Rp,Re,alpha))] 
    106106        /[qr(Rp,Re,alpha)]^3" 
     
    110110 
    111111        sld: SLD of the ellipsoid 
    112         solvent_sld: SLD of the solvent 
     112        sld_solvent: SLD of the solvent 
    113113        V: volume of the ellipsoid 
    114114        Rp: polar radius of the ellipsoid 
     
    120120parameters = [["sld", "1e-6/Ang^2", 4, [-inf, inf], "", 
    121121               "Ellipsoid scattering length density"], 
    122               ["solvent_sld", "1e-6/Ang^2", 1, [-inf, inf], "", 
     122              ["sld_solvent", "1e-6/Ang^2", 1, [-inf, inf], "", 
    123123               "Solvent scattering length density"], 
    124               ["rpolar", "Ang", 20, [0, inf], "volume", 
     124              ["r_polar", "Ang", 20, [0, inf], "volume", 
    125125               "Polar radius"], 
    126               ["requatorial", "Ang", 400, [0, inf], "volume", 
     126              ["r_equatorial", "Ang", 400, [0, inf], "volume", 
    127127               "Equatorial radius"], 
    128128              ["theta", "degrees", 60, [-inf, inf], "orientation", 
     
    134134source = ["lib/sph_j1c.c", "lib/gauss76.c", "ellipsoid.c"] 
    135135 
    136 def ER(rpolar, requatorial): 
     136def ER(r_polar, r_equatorial): 
    137137    import numpy as np 
    138138 
    139     ee = np.empty_like(rpolar) 
    140     idx = rpolar > requatorial 
    141     ee[idx] = (rpolar[idx] ** 2 - requatorial[idx] ** 2) / rpolar[idx] ** 2 
    142     idx = rpolar < requatorial 
    143     ee[idx] = (requatorial[idx] ** 2 - rpolar[idx] ** 2) / requatorial[idx] ** 2 
    144     idx = rpolar == requatorial 
    145     ee[idx] = 2 * rpolar[idx] 
    146     valid = (rpolar * requatorial != 0) 
     139    ee = np.empty_like(r_polar) 
     140    idx = r_polar > r_equatorial 
     141    ee[idx] = (r_polar[idx] ** 2 - r_equatorial[idx] ** 2) / r_polar[idx] ** 2 
     142    idx = r_polar < r_equatorial 
     143    ee[idx] = (r_equatorial[idx] ** 2 - r_polar[idx] ** 2) / r_equatorial[idx] ** 2 
     144    idx = r_polar == r_equatorial 
     145    ee[idx] = 2 * r_polar[idx] 
     146    valid = (r_polar * r_equatorial != 0) 
    147147    bd = 1.0 - ee[valid] 
    148148    e1 = np.sqrt(ee[valid]) 
     
    152152    delta = 0.75 * b1 * b2 
    153153 
    154     ddd = np.zeros_like(rpolar) 
    155     ddd[valid] = 2.0 * (delta + 1.0) * rpolar * requatorial ** 2 
     154    ddd = np.zeros_like(r_polar) 
     155    ddd[valid] = 2.0 * (delta + 1.0) * r_polar * r_equatorial ** 2 
    156156    return 0.5 * ddd ** (1.0 / 3.0) 
    157157 
    158158 
    159159demo = dict(scale=1, background=0, 
    160             sld=6, solvent_sld=1, 
    161             rpolar=50, requatorial=30, 
     160            sld=6, sld_solvent=1, 
     161            r_polar=50, r_equatorial=30, 
    162162            theta=30, phi=15, 
    163             rpolar_pd=.2, rpolar_pd_n=15, 
    164             requatorial_pd=.2, requatorial_pd_n=15, 
     163            r_polar_pd=.2, r_polar_pd_n=15, 
     164            r_equatorial_pd=.2, r_equatorial_pd_n=15, 
    165165            theta_pd=15, theta_pd_n=45, 
    166166            phi_pd=15, phi_pd_n=1) 
    167167oldname = 'EllipsoidModel' 
    168168oldpars = dict(theta='axis_theta', phi='axis_phi', 
    169                sld='sldEll', solvent_sld='sldSolv', 
    170                rpolar='radius_a', requatorial='radius_b') 
     169               sld='sldEll', sld_solvent='sldSolv', 
     170               r_polar='radius_a', r_equatorial='radius_b') 
  • sasmodels/models/elliptical_cylinder.py

    raa24114 r74fd96f  
    1212.. figure:: img/elliptical_cylinder_geometry.png 
    1313 
    14    Elliptical cylinder geometry $a$ = $r_{minor}$ and \nu = $r_{ratio}$ = $r_{major} / r_{minor}$ 
     14   Elliptical cylinder geometry $a$ = $r_{minor}$ and \nu = $axis\_ratio$ = $r_{major} / r_{minor}$ 
    1515 
    1616The function calculated is 
     
    5757    Examples of the angles for oriented elliptical cylinders against the detector plane. 
    5858 
    59 NB: The 2nd virial coefficient of the cylinder is calculated based on the averaged radius (= sqrt(*r_minor*\ :sup:`2` \* *r_ratio*)) 
     59NB: The 2nd virial coefficient of the cylinder is calculated based on the averaged radius (= sqrt(*r_minor*\ :sup:`2` \* *axis_ratio*)) 
    6060and length values, and used as the effective radius for *S(Q)* when *P(Q)* \* *S(Q)* is applied. 
    6161 
     
    9595#             ["name", "units", default, [lower, upper], "type","description"], 
    9696parameters = [["r_minor",     "Ang",        20.0,  [0, inf],    "volume",      "Ellipse minor radius"], 
    97               ["r_ratio",     "",           1.5,   [1, inf],    "volume",      "Ratio of major radius over minor radius"], 
     97              ["axis_ratio",     "",           1.5,   [1, inf],    "volume",      "Ratio of major radius over minor radius"], 
    9898              ["length",      "Ang",        400.0, [1, inf],    "volume",      "Length of the cylinder"], 
    9999              ["sld",         "1e-6/Ang^2", 4.0,   [-inf, inf], "",            "Cylinder scattering length density"], 
     
    107107source = ["lib/polevl.c","lib/sas_J1.c", "lib/gauss76.c", "lib/gauss20.c", "elliptical_cylinder.c"] 
    108108 
    109 demo = dict(scale=1, background=0, r_minor=100, r_ratio=1.5, length=400.0, 
     109demo = dict(scale=1, background=0, r_minor=100, axis_ratio=1.5, length=400.0, 
    110110            sld=4.0, sld_solvent=1.0, theta=10.0, phi=20, psi=30, theta_pd=10, phi_pd=2, psi_pd=3) 
    111111 
    112112oldname = 'EllipticalCylinderModel' 
    113 oldpars = dict(theta='cyl_theta', phi='cyl_phi', psi='cyl_psi', sld='sldCyl', sld_solvent='sldSolv') 
     113oldpars = dict(axis_ratio="r_ratio",theta='cyl_theta', phi='cyl_phi', psi='cyl_psi', sld='sldCyl', sld_solvent='sldSolv') 
    114114 
    115 def ER(r_minor, r_ratio, length): 
     115def ER(r_minor, axis_ratio, length): 
    116116    """ 
    117117        Equivalent radius 
    118118        @param r_minor: Ellipse minor radius 
    119         @param r_ratio: Ratio of major radius over minor radius 
     119        @param axis_ratio: Ratio of major radius over minor radius 
    120120        @param length: Length of the cylinder 
    121121    """ 
    122     radius = math.sqrt(r_minor * r_minor * r_ratio) 
     122    radius = math.sqrt(r_minor * r_minor * axis_ratio) 
    123123    ddd = 0.75 * radius * (2 * radius * length + (length + radius) * (length + pi * radius)) 
    124124    return 0.5 * (ddd) ** (1. / 3.) 
    125125 
    126 tests = [[{'r_minor': 20.0, 'r_ratio': 1.5, 'length':400.0}, 'ER', 79.89245454155024], 
    127          [{'r_minor': 20.0, 'r_ratio': 1.2, 'length':300.0}, 'VR', 1], 
     126tests = [[{'r_minor': 20.0, 'axis_ratio': 1.5, 'length':400.0}, 'ER', 79.89245454155024], 
     127         [{'r_minor': 20.0, 'axis_ratio': 1.2, 'length':300.0}, 'VR', 1], 
    128128 
    129129         # The SasView test result was 0.00169, with a background of 0.001 
    130130         [{'r_minor': 20.0, 
    131            'r_ratio': 1.5, 
     131           'axis_ratio': 1.5, 
    132132           'sld': 4.0, 
    133133           'length':400.0, 
  • sasmodels/models/flexible_cylinder_elliptical.py

    rce8bed9 rb66d38e  
    102102    ["length",      "Ang",       1000.0, [0, inf],    "volume", "Length of the flexible cylinder"], 
    103103    ["kuhn_length", "Ang",        100.0, [0, inf],    "volume", "Kuhn length of the flexible cylinder"], 
    104     ["radius",      "Ang",         20.0, [0, inf],    "volume", "Radius of the flexible cylinder"], 
     104    ["radius",      "Ang",         20.0, [1, inf],    "volume", "Radius of the flexible cylinder"], 
    105105    ["axis_ratio",  "",             1.5, [0, inf],    "",       "Axis_ratio (major_radius/minor_radius"], 
    106106    ["sld",         "1e-6/Ang^2",   1.0, [-inf, inf], "",       "Cylinder scattering length density"], 
     
    109109# pylint: enable=bad-whitespace, line-too-long 
    110110 
    111 source = ["lib/polevl.c","lib/sas_J1.c", "lib/gauss76.c", "lib/wrc_cyl.c", "flexible_cylinder_ex.c"] 
     111source = ["lib/polevl.c","lib/sas_J1.c", "lib/gauss76.c", "lib/wrc_cyl.c", "flexible_cylinder_elliptical.c"] 
    112112 
    113113demo = dict(scale=1.0, background=0.0001, 
  • sasmodels/models/fractal.py

    r12dbc90 rdff1088  
    4848**Author:** N/A **on:** 
    4949 
    50 **Modified by:** Paul Butler **on:** March 18, 2016 
     50**Last Modified by:** Paul Butler **on:** March 20, 2016 
    5151 
    52 **Reviewed by:** Paul Butler **on:** March 18, 2016 
     52**Last Reviewed by:** Paul Butler **on:** March 20, 2016 
    5353 
    5454""" 
     
    9696source = ["lib/sph_j1c.c", "lib/sas_gamma.c", "fractal.c"] 
    9797 
    98 demo = dict(scale=1, background=0, 
    99             volfraction=0.05, 
     98demo = dict(volfraction=0.05, 
    10099            radius=5.0, 
    101100            fractal_dim=2.0, 
     
    115114# NOTE: test results taken from values returned by SasView 3.1.2 
    116115tests = [ 
    117     [{}, 0.234959183673, 0.0910228716283], 
    118     [{}, 0.5, 0.016235799134], 
     116    [{}, 0.0005, 40.4980069872], 
     117    [{}, 0.234734468938, 0.0947143166058], 
     118    [{}, 0.5, 0.0176878183458], 
    119119    ] 
  • sasmodels/models/parallelepiped.py

    r2f63032 r5933c7f  
    77---------- 
    88 
    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:`Figure #<parallelepiped-image>`). 
    1010| If you need to apply polydispersity, see also :ref:`rectangular-prism`. 
    1111 
  • sasmodels/models/triaxial_ellipsoid.py

    r2f63032 r5933c7f  
    3636we define the axis of the cylinder using the angles $\theta$, $\phi$ 
    3737and $\psi$. These angles are defined on 
    38 :numref:`figure #triaxial-ellipsoid-angles`. 
     38:numref:`figure #<triaxial-ellipsoid-angles>`. 
    3939The angle $\psi$ is the rotational angle around its own $c$ axis 
    4040against the $q$ plane. For example, $\psi = 0$ when the 
  • sasmodels/sesans.py

    rd459d4e rd554bd7  
    2727    """ 
    2828    q_min = dq = 0.1 * 2*pi / Rmax 
    29     return np.arange(q_min, q_max, dq) 
     29    return np.arange(q_min, q_max[0], dq) 
    3030     
    3131def make_all_q(data): 
Note: See TracChangeset for help on using the changeset viewer.