Changes in / [d634601:0784c18] in sasmodels


Ignore:
Location:
sasmodels
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/convert.py

    r228cbd3 r310ddcb  
    129129            warnings.warn("parameter background not used in sasview %s"%name) 
    130130 
    131  
    132131    # If it is a product model P*S, then check the individual forms for special 
    133132    # cases.  Note: despite the structure factor alone not having scale or 
     
    147146            for p in "La", "Lb", "Lc", "Ld": 
    148147                if p in oldpars: oldpars[p] *= 1e-13 
    149         elif name == 'core_shell_parallelepiped': 
    150             _remove_pd(oldpars, 'rimA', name) 
    151         elif name in ['mono_gauss_coil','poly_gauss_coil']: 
    152             del oldpars['i_zero'] 
    153148 
    154149    return oldpars 
     
    182177        elif name == 'rpa': 
    183178            pars['case_num'] = int(pars['case_num']) 
    184         elif name == 'mono_gauss_coil': 
    185             pars['i_zero'] = 1 
    186         elif name == 'poly_gauss_coil': 
    187             pars['i_zero'] = 1 
    188              
  • sasmodels/models/mono_gauss_coil.py

    r246517d r6dd90c1  
    1414 
    1515     *I(q)* = *scale* |cdot| *I* \ :sub:`0` |cdot| *P(q)* + *background* 
    16  
     16          
    1717where 
    1818 
     
    2020 
    2121     *P(q)* = 2 [exp(-Z) + Z - 1] / Z \ :sup:`2` 
    22  
    23     *Z* = (*q R* \ :sub:`g`)\ :sup:`2` 
     22          
     23        *Z* = (*q R* \ :sub:`g`)\ :sup:`2` 
    2424 
    2525and 
    2626 
    27     *V* = *M* / (*N*\ :sub:`A` |delta|) 
    28  
     27        *V* = *M* / (*N*\ :sub:`A` |delta|) 
     28          
    2929Here, |phi|\ :sub:`poly` is the volume fraction of polymer, *V* is the volume of a polymer coil, *M* is the molecular weight of the polymer, *N*\ :sub:`A` is Avogadro's Number, |delta| is the bulk density of the polymer, |rho|\ :sub:`poly` is the sld of the polymer, |rho|\ :sub:`solv` is the sld of the solvent, and *R*\ :sub:`g` is the radius of gyration of the polymer coil. 
    3030 
     
    5252description =  """ 
    5353    Evaluates the scattering from  
    54     monodisperse polymer chains. 
     54        monodisperse polymer chains. 
    5555    """ 
    5656category =  "shape-independent" 
    5757 
    5858#             ["name", "units", default, [lower, upper], "type", "description"], 
    59 parameters =  [["i_zero", "1/cm", 70.0, [0.0, inf], "", "Intensity at q=0"], 
    60                ["radius_gyration", "Ang", 75.0, [0.0, inf], "", "Radius of gyration"]] 
     59parameters =  [["i_zero", "1/cm", 1.0, [-inf, inf], "", "Intensity at q=0"], 
     60               ["radius_gyration", "Ang", 50.0, [0.0, inf], "", "Radius of gyration"]] 
    6161 
    6262# NB: Scale and Background are implicit parameters on every model 
    6363def Iq(q, i_zero, radius_gyration): 
    6464    # pylint: disable = missing-docstring 
    65     z = (q * radius_gyration) * (q * radius_gyration) 
    66     if (q == 0).any(): 
    67        inten = i_zero 
     65    z = (q * radius_gyration) ** 2 
     66    if q == 0: 
     67       inten = 1.0 
    6868    else: 
    6969       inten = i_zero * 2.0 * (exp(-z) + z - 1.0 ) / (z * z) 
     
    7777 
    7878demo =  dict(scale = 1.0, 
    79             i_zero = 70.0, 
    80             radius_gyration = 75.0, 
     79            i_zero = 1.0, 
     80            radius_gyration = 50.0, 
    8181            background = 0.0) 
    8282 
     
    8787 
    8888tests =  [ 
    89     [{'scale': 70.0, 'radius_gyration': 75.0, 'background': 0.0}, 
    90      [0.0106939, 0.469418], [57.1241, 0.112859]], 
     89    [{'scale': 1.0, 'radius_gyration': 50.0, 'background': 0.0}, 
     90     [0.0106939, 0.469418], [0.911141, 0.00362394]], 
    9191    ] 
  • sasmodels/models/poly_gauss_coil.py

    r246517d r6dd90c1  
    1414 
    1515     *I(q)* = *scale* |cdot| *I* \ :sub:`0` |cdot| *P(q)* + *background* 
    16  
     16          
    1717where 
    1818 
     
    2020 
    2121     *P(q)* = 2 [(1 + UZ)\ :sup:`-1/U` + Z - 1] / [(1 + U) Z\ :sup:`2`] 
    22  
    23     *Z* = [(*q R*\ :sub:`g`)\ :sup:`2`] / (1 + 2U) 
    24  
    25     *U* = (Mw / Mn) - 1 = (*polydispersity ratio*) - 1 
     22          
     23        *Z* = [(*q R*\ :sub:`g`)\ :sup:`2`] / (1 + 2U) 
     24          
     25        *U* = (Mw / Mn) - 1 = (*polydispersity ratio*) - 1 
    2626 
    2727and 
    2828 
    29     *V* = *M* / (*N*\ :sub:`A` |delta|) 
    30  
     29        *V* = *M* / (*N*\ :sub:`A` |delta|) 
     30          
    3131Here, |phi|\ :sub:`poly`, is the volume fraction of polymer, *V* is the volume of a polymer coil, *M* is the molecular weight of the polymer, *N*\ :sub:`A` is Avogadro's Number, |delta| is the bulk density of the polymer, |rho|\ :sub:`poly` is the sld of the polymer, |rho|\ :sub:`solv` is the sld of the solvent, and *R*\ :sub:`g` is the radius of gyration of the polymer coil. 
    3232 
     
    5757description =  """ 
    5858    Evaluates the scattering from  
    59     polydisperse polymer chains. 
     59        polydisperse polymer chains. 
    6060    """ 
    6161category =  "shape-independent" 
    6262 
    6363#             ["name", "units", default, [lower, upper], "type", "description"], 
    64 parameters =  [["i_zero", "1/cm", 70.0, [0.0, inf], "", "Intensity at q=0"], 
    65                ["radius_gyration", "Ang", 75.0, [0.0, inf], "", "Radius of gyration"], 
     64parameters =  [["i_zero", "1/cm", 1.0, [-inf, inf], "", "Intensity at q=0"], 
     65               ["radius_gyration", "Ang", 50.0, [0.0, inf], "", "Radius of gyration"], 
    6666               ["polydispersity", "None", 2.0, [1.0, inf], "", "Polymer Mw/Mn"]] 
    6767 
     
    6969def Iq(q, i_zero, radius_gyration, polydispersity): 
    7070    # pylint: disable = missing-docstring 
    71     # need to trap the case of the polydispersity being 1 (ie, monodispersity) 
    7271    u = polydispersity - 1.0 
    73     if polydispersity == 1: 
    74        minusoneonu = -1.0 / u 
     72    # TO DO 
     73    # should trap the case of polydispersity = 1 by switching to a taylor expansion 
     74    minusoneonu = -1.0 / u 
     75    z = (q * radius_gyration) ** 2 / (1.0 + 2.0 * u) 
     76    if q == 0: 
     77        inten = i_zero * 1.0 
    7578    else: 
    76        minusoneonu = -1.0 / u 
    77     z = ((q * radius_gyration) * (q * radius_gyration)) / (1.0 + 2.0 * u) 
    78     if (q == 0).any(): 
    79        inten = i_zero 
    80     else: 
    81        inten = i_zero * 2.0 * (power((1.0 + u * z),minusoneonu) + z - 1.0 ) / ((1.0 + u) * (z * z)) 
     79        inten = i_zero * 2.0 * (power((1.0 + u * z),minusoneonu) + z - 1.0 ) / ((1.0 + u) * (z * z)) 
    8280    return inten 
    83 Iq.vectorized =  True # Iq accepts an array of q values 
     81#Iq.vectorized = True # Iq accepts an array of q values 
    8482 
    8583def Iqxy(qx, qy, *args): 
     
    8987 
    9088demo =  dict(scale = 1.0, 
    91             i_zero = 70.0, 
    92             radius_gyration = 75.0, 
     89            i_zero = 1.0, 
     90            radius_gyration = 50.0, 
    9391            polydispersity = 2.0, 
    9492            background = 0.0) 
     
    10199 
    102100tests =  [ 
    103     [{'scale': 70.0, 'radius_gyration': 75.0, 'polydispersity': 2.0, 'background': 0.0}, 
    104      [0.0106939, 0.469418], [57.6405, 0.169016]], 
     101    [{'scale': 1.0, 'radius_gyration': 50.0, 'polydispersity': 2.0, 'background': 0.0}, 
     102     [0.0106939, 0.469418], [0.912993, 0.0054163]], 
    105103    ] 
Note: See TracChangeset for help on using the changeset viewer.