Changes in / [c6084f1:ce1eed5] in sasmodels


Ignore:
Files:
1 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • doc/guide/magnetism/magnetism.rst

    rdf87acf rbefe905  
    8989 
    9090===========   ================================================================ 
    91  sld_M0       $D_M M_0$ 
    92  sld_mtheta   $\theta_M$ 
    93  sld_mphi     $\phi_M$ 
    94  up_frac_i    $u_i$ = (spin up)/(spin up + spin down) *before* the sample 
    95  up_frac_f    $u_f$ = (spin up)/(spin up + spin down) *after* the sample 
    96  up_angle     $\theta_\mathrm{up}$ 
     91 M0:sld       $D_M M_0$ 
     92 mtheta:sld   $\theta_M$ 
     93 mphi:sld     $\phi_M$ 
     94 up:angle     $\theta_\mathrm{up}$ 
     95 up:frac_i    $u_i$ = (spin up)/(spin up + spin down) *before* the sample 
     96 up:frac_f    $u_f$ = (spin up)/(spin up + spin down) *after* the sample 
    9797===========   ================================================================ 
    9898 
    9999.. note:: 
    100     The values of the 'up_frac_i' and 'up_frac_f' must be in the range 0 to 1. 
     100    The values of the 'up:frac_i' and 'up:frac_f' must be in the range 0 to 1. 
    101101 
    102102*Document History* 
  • doc/guide/plugin.rst

    r57c609b r2015f02  
    428428        def random(): 
    429429        ... 
    430  
    431 This function provides a model-specific random parameter set which shows model 
    432 features in the USANS to SANS range.  For example, core-shell sphere sets the 
    433 outer radius of the sphere logarithmically in `[20, 20,000]`, which sets the Q 
    434 value for the transition from flat to falling.  It then uses a beta distribution 
    435 to set the percentage of the shape which is shell, giving a preference for very 
    436 thin or very thick shells (but never 0% or 100%).  Using `-sets=10` in sascomp 
    437 should show a reasonable variety of curves over the default sascomp q range. 
    438 The parameter set is returned as a dictionary of `{parameter: value, ...}`. 
    439 Any model parameters not included in the dictionary will default according to 
     430         
     431This function provides a model-specific random parameter set which shows model  
     432features in the USANS to SANS range.  For example, core-shell sphere sets the  
     433outer radius of the sphere logarithmically in `[20, 20,000]`, which sets the Q  
     434value for the transition from flat to falling.  It then uses a beta distribution  
     435to set the percentage of the shape which is shell, giving a preference for very  
     436thin or very thick shells (but never 0% or 100%).  Using `-sets=10` in sascomp  
     437should show a reasonable variety of curves over the default sascomp q range.   
     438The parameter set is returned as a dictionary of `{parameter: value, ...}`.   
     439Any model parameters not included in the dictionary will default according to  
    440440the code in the `_randomize_one()` function from sasmodels/compare.py. 
    441441 
     
    701701    erf, erfc, tgamma, lgamma:  **do not use** 
    702702        Special functions that should be part of the standard, but are missing 
    703         or inaccurate on some platforms. Use sas_erf, sas_erfc, sas_gamma 
    704         and sas_lgamma instead (see below). 
     703        or inaccurate on some platforms. Use sas_erf, sas_erfc and sas_gamma 
     704        instead (see below). Note: lgamma(x) has not yet been tested. 
    705705 
    706706Some non-standard constants and functions are also provided: 
     
    769769        Gamma function sas_gamma\ $(x) = \Gamma(x)$. 
    770770 
    771         The standard math function, tgamma(x), is unstable for $x < 1$ 
     771        The standard math function, tgamma(x) is unstable for $x < 1$ 
    772772        on some platforms. 
    773773 
    774774        :code:`source = ["lib/sas_gamma.c", ...]` 
    775775        (`sas_gamma.c <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/sas_gamma.c>`_) 
    776  
    777     sas_gammaln(x): 
    778         log gamma function sas_gammaln\ $(x) = \log \Gamma(|x|)$. 
    779  
    780         The standard math function, lgamma(x), is incorrect for single 
    781         precision on some platforms. 
    782  
    783         :code:`source = ["lib/sas_gammainc.c", ...]` 
    784         (`sas_gammainc.c <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/sas_gammainc.c>`_) 
    785  
    786     sas_gammainc(a, x), sas_gammaincc(a, x): 
    787         Incomplete gamma function 
    788         sas_gammainc\ $(a, x) = \int_0^x t^{a-1}e^{-t}\,dt / \Gamma(a)$ 
    789         and complementary incomplete gamma function 
    790         sas_gammaincc\ $(a, x) = \int_x^\infty t^{a-1}e^{-t}\,dt / \Gamma(a)$ 
    791  
    792         :code:`source = ["lib/sas_gammainc.c", ...]` 
    793         (`sas_gammainc.c <https://github.com/SasView/sasmodels/tree/master/sasmodels/models/lib/sas_gammainc.c>`_) 
    794776 
    795777    sas_erf(x), sas_erfc(x): 
     
    829811        If $n$ = 0 or 1, it uses sas_J0($x$) or sas_J1($x$), respectively. 
    830812 
    831         Warning: JN(n,x) can be very inaccurate (0.1%) for x not in [0.1, 100]. 
    832  
    833813        The standard math function jn(n, x) is not available on all platforms. 
    834814 
     
    839819        Sine integral Si\ $(x) = \int_0^x \tfrac{\sin t}{t}\,dt$. 
    840820 
    841         Warning: Si(x) can be very inaccurate (0.1%) for x in [0.1, 100]. 
    842  
    843821        This function uses Taylor series for small and large arguments: 
    844822 
    845         For large arguments use the following Taylor series, 
     823        For large arguments, 
    846824 
    847825        .. math:: 
     
    851829             - \frac{\sin(x)}{x}\left(\frac{1}{x} - \frac{3!}{x^3} + \frac{5!}{x^5} - \frac{7!}{x^7}\right) 
    852830 
    853         For small arguments , 
     831        For small arguments, 
    854832 
    855833        .. math:: 
  • explore/precision.py

    rfba9ca0 r2a7e20e  
    9595            neg:    [-100,100] 
    9696 
    97         For arbitrary range use "start:stop:steps:scale" where scale is 
    98         one of log, lin, or linear. 
    99  
    10097        *diff* is "relative", "absolute" or "none" 
    10198 
     
    105102        linear = not xrange.startswith("log") 
    106103        if xrange == "zoom": 
    107             start, stop, steps = 1000, 1010, 2000 
     104            lin_min, lin_max, lin_steps = 1000, 1010, 2000 
    108105        elif xrange == "neg": 
    109             start, stop, steps = -100.1, 100.1, 2000 
     106            lin_min, lin_max, lin_steps = -100.1, 100.1, 2000 
    110107        elif xrange == "linear": 
    111             start, stop, steps = 1, 1000, 2000 
    112             start, stop, steps = 0.001, 2, 2000 
     108            lin_min, lin_max, lin_steps = 1, 1000, 2000 
     109            lin_min, lin_max, lin_steps = 0.001, 2, 2000 
    113110        elif xrange == "log": 
    114             start, stop, steps = -3, 5, 400 
     111            log_min, log_max, log_steps = -3, 5, 400 
    115112        elif xrange == "logq": 
    116             start, stop, steps = -4, 1, 400 
    117         elif ':' in xrange: 
    118             parts = xrange.split(':') 
    119             linear = parts[3] != "log" if len(parts) == 4 else True 
    120             steps = int(parts[2]) if len(parts) > 2 else 400 
    121             start = float(parts[0]) 
    122             stop = float(parts[1]) 
    123  
     113            log_min, log_max, log_steps = -4, 1, 400 
    124114        else: 
    125115            raise ValueError("unknown range "+xrange) 
     
    131121            # value to x in the given precision. 
    132122            if linear: 
    133                 start = max(start, self.limits[0]) 
    134                 stop = min(stop, self.limits[1]) 
    135                 qrf = np.linspace(start, stop, steps, dtype='single') 
    136                 #qrf = np.linspace(start, stop, steps, dtype='double') 
     123                lin_min = max(lin_min, self.limits[0]) 
     124                lin_max = min(lin_max, self.limits[1]) 
     125                qrf = np.linspace(lin_min, lin_max, lin_steps, dtype='single') 
     126                #qrf = np.linspace(lin_min, lin_max, lin_steps, dtype='double') 
    137127                qr = [mp.mpf(float(v)) for v in qrf] 
    138                 #qr = mp.linspace(start, stop, steps) 
     128                #qr = mp.linspace(lin_min, lin_max, lin_steps) 
    139129            else: 
    140                 start = np.log10(max(10**start, self.limits[0])) 
    141                 stop = np.log10(min(10**stop, self.limits[1])) 
    142                 qrf = np.logspace(start, stop, steps, dtype='single') 
    143                 #qrf = np.logspace(start, stop, steps, dtype='double') 
     130                log_min = np.log10(max(10**log_min, self.limits[0])) 
     131                log_max = np.log10(min(10**log_max, self.limits[1])) 
     132                qrf = np.logspace(log_min, log_max, log_steps, dtype='single') 
     133                #qrf = np.logspace(log_min, log_max, log_steps, dtype='double') 
    144134                qr = [mp.mpf(float(v)) for v in qrf] 
    145                 #qr = [10**v for v in mp.linspace(start, stop, steps)] 
     135                #qr = [10**v for v in mp.linspace(log_min, log_max, log_steps)] 
    146136 
    147137        target = self.call_mpmath(qr, bits=500) 
     
    186176    """ 
    187177    if diff == "relative": 
    188         err = np.array([(abs((t-a)/t) if t != 0 else a) for t, a in zip(target, actual)], 'd') 
     178        err = np.array([abs((t-a)/t) for t, a in zip(target, actual)], 'd') 
    189179        #err = np.clip(err, 0, 1) 
    190180        pylab.loglog(x, err, '-', label=label) 
     
    207197    return model_info 
    208198 
    209 # Hack to allow second parameter A in two parameter functions 
    210 A = 1 
    211 def parse_extra_pars(): 
    212     global A 
    213  
    214     A_str = str(A) 
    215     pop = [] 
    216     for k, v in enumerate(sys.argv[1:]): 
    217         if v.startswith("A="): 
    218             A_str = v[2:] 
    219             pop.append(k+1) 
    220     if pop: 
    221         sys.argv = [v for k, v in enumerate(sys.argv) if k not in pop] 
    222         A = float(A_str) 
    223  
    224 parse_extra_pars() 
    225  
    226199 
    227200# =============== FUNCTION DEFINITIONS ================ 
     
    324297    ocl_function=make_ocl("return sas_gamma(q);", "sas_gamma", ["lib/sas_gamma.c"]), 
    325298    limits=(-3.1, 10), 
    326 ) 
    327 add_function( 
    328     name="gammaln(x)", 
    329     mp_function=mp.loggamma, 
    330     np_function=scipy.special.gammaln, 
    331     ocl_function=make_ocl("return sas_gammaln(q);", "sas_gammaln", ["lib/sas_gammainc.c"]), 
    332     #ocl_function=make_ocl("return lgamma(q);", "sas_gammaln"), 
    333 ) 
    334 add_function( 
    335     name="gammainc(x)", 
    336     mp_function=lambda x, a=A: mp.gammainc(a, a=0, b=x)/mp.gamma(a), 
    337     np_function=lambda x, a=A: scipy.special.gammainc(a, x), 
    338     ocl_function=make_ocl("return sas_gammainc(%.15g,q);"%A, "sas_gammainc", ["lib/sas_gammainc.c"]), 
    339 ) 
    340 add_function( 
    341     name="gammaincc(x)", 
    342     mp_function=lambda x, a=A: mp.gammainc(a, a=x, b=mp.inf)/mp.gamma(a), 
    343     np_function=lambda x, a=A: scipy.special.gammaincc(a, x), 
    344     ocl_function=make_ocl("return sas_gammaincc(%.15g,q);"%A, "sas_gammaincc", ["lib/sas_gammainc.c"]), 
    345299) 
    346300add_function( 
     
    509463lanczos_gamma = """\ 
    510464    const double coeff[] = { 
    511             76.18009172947146, -86.50532032941677, 
    512             24.01409824083091, -1.231739572450155, 
     465            76.18009172947146,     -86.50532032941677, 
     466            24.01409824083091,     -1.231739572450155, 
    513467            0.1208650973866179e-2,-0.5395239384953e-5 
    514468            }; 
     
    521475""" 
    522476add_function( 
    523     name="loggamma(x)", 
     477    name="log gamma(x)", 
    524478    mp_function=mp.loggamma, 
    525479    np_function=scipy.special.gammaln, 
     
    645599 
    646600ALL_FUNCTIONS = set(FUNCTIONS.keys()) 
    647 ALL_FUNCTIONS.discard("loggamma")  # use cephes-based gammaln instead 
     601ALL_FUNCTIONS.discard("loggamma")  # OCL version not ready yet 
    648602ALL_FUNCTIONS.discard("3j1/x:taylor") 
    649603ALL_FUNCTIONS.discard("3j1/x:trig") 
     
    661615    -r indicates that the relative error should be plotted (default), 
    662616    -x<range> indicates the steps in x, where <range> is one of the following 
    663         log indicates log stepping in [10^-3, 10^5] (default) 
    664         logq indicates log stepping in [10^-4, 10^1] 
    665         linear indicates linear stepping in [1, 1000] 
    666         zoom indicates linear stepping in [1000, 1010] 
    667         neg indicates linear stepping in [-100.1, 100.1] 
    668         start:stop:n[:stepping] indicates an n-step plot in [start, stop] 
    669             or [10^start, 10^stop] if stepping is "log" (default n=400) 
    670 Some functions (notably gammainc/gammaincc) have an additional parameter A 
    671 which can be set from the command line as A=value.  Default is A=1. 
    672  
    673 Name is one of: 
     617      log indicates log stepping in [10^-3, 10^5] (default) 
     618      logq indicates log stepping in [10^-4, 10^1] 
     619      linear indicates linear stepping in [1, 1000] 
     620      zoom indicates linear stepping in [1000, 1010] 
     621      neg indicates linear stepping in [-100.1, 100.1] 
     622and name is "all" or one of: 
    674623    """+names) 
    675624    sys.exit(1) 
  • sasmodels/models/spinodal.py

    r93fe8a1 r475ff58  
    1212where $x=q/q_0$, $q_0$ is the peak position, $I_{max}$ is the intensity  
    1313at $q_0$ (parameterised as the $scale$ parameter), and $B$ is a flat  
    14 background. The spinodal wavelength, $\Lambda$, is given by $2\pi/q_0$.  
    15  
    16 The definition of $I_{max}$ in the literature varies. Hashimoto *et al* (1991)  
    17 define it as  
    18  
    19 .. math:: 
    20     I_{max} = \Lambda^3\Delta\rho^2 
    21      
    22 whereas Meier & Strobl (1987) give  
    23  
    24 .. math:: 
    25     I_{max} = V_z\Delta\rho^2 
    26      
    27 where $V_z$ is the volume per monomer unit. 
     14background. The spinodal wavelength is given by $2\pi/q_0$.  
    2815 
    2916The exponent $\gamma$ is equal to $d+1$ for off-critical concentration  
     
    4128 
    4229H. Furukawa. Dynamics-scaling theory for phase-separating unmixing mixtures: 
    43 Growth rates of droplets and scaling properties of autocorrelation functions.  
    44 Physica A 123, 497 (1984). 
    45  
    46 H. Meier & G. Strobl. Small-Angle X-ray Scattering Study of Spinodal  
    47 Decomposition in Polystyrene/Poly(styrene-co-bromostyrene) Blends.  
    48 Macromolecules 20, 649-654 (1987). 
    49  
    50 T. Hashimoto, M. Takenaka & H. Jinnai. Scattering Studies of Self-Assembling  
    51 Processes of Polymer Blends in Spinodal Decomposition.  
    52 J. Appl. Cryst. 24, 457-466 (1991). 
     30Growth rates of droplets and scaling properties of autocorrelation functions. 
     31Physica A 123,497 (1984). 
    5332 
    5433Revision History 
     
    5635 
    5736* **Author:**  Dirk Honecker **Date:** Oct 7, 2016 
    58 * **Revised:** Steve King    **Date:** Oct 25, 2018 
     37* **Revised:** Steve King    **Date:** Sep 7, 2018 
    5938""" 
    6039 
  • sasmodels/special.py

    rfba9ca0 rdf69efa  
    113113        The standard math function, tgamma(x) is unstable for $x < 1$ 
    114114        on some platforms. 
    115  
    116     sas_gammaln(x): 
    117         log gamma function sas_gammaln\ $(x) = \log \Gamma(|x|)$. 
    118  
    119         The standard math function, lgamma(x), is incorrect for single 
    120         precision on some platforms. 
    121  
    122     sas_gammainc(a, x), sas_gammaincc(a, x): 
    123         Incomplete gamma function 
    124         sas_gammainc\ $(a, x) = \int_0^x t^{a-1}e^{-t}\,dt / \Gamma(a)$ 
    125         and complementary incomplete gamma function 
    126         sas_gammaincc\ $(a, x) = \int_x^\infty t^{a-1}e^{-t}\,dt / \Gamma(a)$ 
    127115 
    128116    sas_erf(x), sas_erfc(x): 
     
    219207from numpy import pi, nan, inf 
    220208from scipy.special import gamma as sas_gamma 
    221 from scipy.special import gammaln as sas_gammaln 
    222 from scipy.special import gammainc as sas_gammainc 
    223 from scipy.special import gammaincc as sas_gammaincc 
    224209from scipy.special import erf as sas_erf 
    225210from scipy.special import erfc as sas_erfc 
  • setup.py

    r783e76f r1f991d6  
    2929                return version[1:-1] 
    3030    raise RuntimeError("Could not read version from %s/__init__.py"%package) 
    31  
    32 install_requires = ['numpy', 'scipy'] 
    33  
    34 if sys.platform=='win32' or sys.platform=='cygwin': 
    35     install_requires.append('tinycc') 
    3631 
    3732setup( 
     
    6661        'sasmodels': ['*.c', '*.cl'], 
    6762    }, 
    68     install_requires=install_requires, 
     63    install_requires=[ 
     64    ], 
    6965    extras_require={ 
    70         'full': ['docutils', 'bumps', 'matplotlib'], 
    71         'server': ['bumps'], 
    7266        'OpenCL': ["pyopencl"], 
     67        'Bumps': ["bumps"], 
     68        'TinyCC': ["tinycc"], 
    7369    }, 
    7470    build_requires=['setuptools'], 
Note: See TracChangeset for help on using the changeset viewer.