Changeset 0e55afe in sasmodels


Ignore:
Timestamp:
Nov 29, 2017 8:55:21 PM (5 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, core_shell_microgels, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
4493288
Parents:
688d315 (diff), b669b49 (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 ticket-786

Files:
1 added
113 edited

Legend:

Unmodified
Added
Removed
  • example/sesans_parameters_sphere.py

    r9217ef8 rfa79f5c  
    4646# DO NOT MODIFY THIS LINE 
    4747problem = sesansfit.sesans_fit(sesans_file, model, initial_vals, custom_params, param_range) 
    48  
  • example/sesans_sphere_2micron.py

    r3330bb4 rfa79f5c  
    11""" 
    2 This is a data file  used to load in sesans data and fit it using the bumps engine 
     2This is a data file used to load in sesans data and fit it using the bumps engine 
    33""" 
    44from bumps.names import * 
     
    3838# Constraints 
    3939# model.param_name = f(other params) 
    40 # EXAMPLE: model.scale = model.radius*model.radius*(1 - phi) - where radius and scale are model functions and phi is 
    41 # a custom parameter 
     40# EXAMPLE: model.scale = model.radius*model.radius*(1 - phi) - where radius 
     41# and scale are model functions and phi is a custom parameter 
    4242model.scale = phi*(1-phi) 
    4343 
     
    4545# DO NOT MODIFY THIS LINE 
    4646problem = sesansfit.sesans_fit(sesans_file, model, initial_vals, custom_params, param_range) 
    47  
  • example/sesansfit.py

    r9217ef8 rfa79f5c  
     1import logging 
     2 
    13from bumps.names import * 
    24from sasmodels import core, bumps_model, sesans 
     
    810    return model 
    911 
    10 def sesans_fit(file, model, initial_vals={}, custom_params={}, param_range=[], acceptance_angle=None): 
     12def sesans_fit(file, model, initial_vals={}, custom_params={}, param_range=[], 
     13               acceptance_angle=None): 
    1114    """ 
    1215 
     
    1922    @return: FitProblem for Bumps usage 
    2023    """ 
     24    logging.basicConfig() 
     25 
    2126    initial_vals['background'] = 0.0 
    2227    try: 
    2328        loader = Loader() 
    24         data = loader.load(file) 
    25         if data is None: raise IOError("Could not load file %r"%(file)) 
     29        data = loader.load(file)[0] 
     30        if data is None: 
     31            raise IOError("Could not load file %r"%(file)) 
    2632 
    27     except: 
     33    except Exception: 
     34        raise 
    2835        # If no loadable data file, generate random data 
    2936        SElength = np.linspace(0, 2400, 61) # [A] 
     
    5057    data.Rmax = 30*radius # [A] 
    5158 
    52     if isinstance(model, basestring): 
     59    if isinstance(model, str): 
    5360        model = get_bumps_model(model) 
    5461 
  • example/spheres2micron.ses

    r6abf703 rfa79f5c  
    1 DataFileTitle   Polystyrene of Markus Strobl,  Full Sine, ++ only  
    2 Sample  Polystyrene 2 um in 53% H2O, 47% D2O  
    3 Settings        D1=D2=20x8 mm,Ds = 16x10 mm (WxH), GF1 =scanning, GF2 = 2.5 A. 2 um polystyrene in 53% H2O, 47% D2O; 8.55% contrast  
    4 Operator        CPD  
    5 Date    ma 7 jul 2014 18:54:43  
    6 ScanType        sine one element scan  
    7 Thickness [mm]  2  
    8 Q_zmax [\AA^-1]         0.05  
    9 Q_ymax [\AA^-1]         0.05  
    10    
    11 spin echo length [nm]    error SEL       wavelength [nm]         error wavelength        polarisation    error pol  
    12 49.778  2.4889  0.211   0.01055 0.99782 0.0044367 
    13 63.041  3.152   0.211   0.01055 1.0026  0.0047862 
    14 76.487  3.8244  0.211   0.01055 0.99601 0.0060598 
    15 89.847  4.4924  0.211   0.01055 0.99175 0.0058257 
    16 103.41  5.1705  0.211   0.01055 0.99543 0.0060966 
    17 116.95  5.8475  0.211   0.01055 0.99512 0.0048106 
    18 130.61  6.5303  0.211   0.01055 0.9975  0.0062594 
    19 144.37  7.2184  0.211   0.01055 0.99473 0.005293 
    20 158.2   7.9102  0.211   0.01055 0.9927  0.0053389 
    21 172.12  8.6062  0.211   0.01055 0.99453 0.0064548 
    22 186.17  9.3087  0.211   0.01055 0.98641 0.0073259 
    23 200.28  10.014  0.211   0.01055 0.98879 0.0078682 
    24 214.46  10.723  0.211   0.01055 0.9895  0.0068058 
    25 228.73  11.436  0.211   0.01055 0.99204 0.0082509 
    26 243.12  12.156  0.211   0.01055 0.99406 0.0051381 
    27 257.55  12.878  0.211   0.01055 0.97965 0.0055447 
    28 272.22  13.611  0.211   0.01055 0.97982 0.0065843 
    29 286.9   14.345  0.211   0.01055 0.97793 0.0071814 
    30 301.73  15.087  0.211   0.01055 0.97835 0.0066197 
    31 316.75  15.838  0.211   0.01055 0.98125 0.0069484 
    32 331.82  16.591  0.211   0.01055 0.97828 0.0068737 
    33 347.16  17.358  0.211   0.01055 0.97682 0.006744 
    34 362.45  18.122  0.211   0.01055 0.98155 0.0059865 
    35 378.09  18.904  0.211   0.01055 0.96446 0.0066788 
    36 393.74  19.687  0.211   0.01055 0.97276 0.0073781 
    37 409.61  20.481  0.211   0.01055 0.97101 0.0071053 
    38 425.55  21.278  0.211   0.01055 0.97501 0.0068244 
    39 441.91  22.096  0.211   0.01055 0.96958 0.0072272 
    40 458.12  22.906  0.211   0.01055 0.95991 0.0064035 
    41 474.77  23.739  0.211   0.01055 0.96219 0.0059227 
    42 491.52  24.576  0.211   0.01055 0.96016 0.0058606 
    43 508.51  25.426  0.211   0.01055 0.9509  0.0049836 
    44 525.68  26.284  0.211   0.01055 0.95558 0.0055218 
    45 543.08  27.154  0.211   0.01055 0.95079 0.0058258 
    46 560.74  28.037  0.211   0.01055 0.9514  0.0043921 
    47 578.69  28.935  0.211   0.01055 0.94562 0.0046962 
    48 596.75  29.838  0.211   0.01055 0.94588 0.0047341 
    49 615.17  30.758  0.211   0.01055 0.93958 0.0045821 
    50 633.77  31.688  0.211   0.01055 0.93731 0.0043108 
    51 652.82  32.641  0.211   0.01055 0.93664 0.0052044 
    52 672.04  33.602  0.211   0.01055 0.93209 0.0035563 
    53 691.57  34.578  0.211   0.01055 0.93385 0.0046002 
    54 711.48  35.574  0.211   0.01055 0.93028 0.0051136 
    55 731.67  36.583  0.211   0.01055 0.93012 0.0035279 
    56 752.17  37.608  0.211   0.01055 0.92594 0.0039458 
    57 773.1   38.655  0.211   0.01055 0.92352 0.0027613 
    58 794.42  39.721  0.211   0.01055 0.91823 0.0034587 
    59 816.14  40.807  0.211   0.01055 0.90862 0.0034262 
    60 838.19  41.91   0.211   0.01055 0.91909 0.003498 
    61 860.69  43.034  0.211   0.01055 0.91013 0.0030537 
    62 883.74  44.187  0.211   0.01055 0.90449 0.0035391 
    63 907.04  45.352  0.211   0.01055 0.90057 0.0029672 
    64 930.95  46.547  0.211   0.01055 0.90316 0.0031245 
    65 955.38  47.769  0.211   0.01055 0.89492 0.0030981 
    66 980.25  49.013  0.211   0.01055 0.89636 0.0036625 
    67 1005.7  50.284  0.211   0.01055 0.88808 0.0022652 
    68 1031.7  51.586  0.211   0.01055 0.88665 0.0044622 
    69 1058.3  52.914  0.211   0.01055 0.88205 0.0030275 
    70 1085.5  54.276  0.211   0.01055 0.88257 0.0028637 
    71 1113.4  55.669  0.211   0.01055 0.87629 0.0030312 
    72 1141.9  57.093  0.211   0.01055 0.87732 0.0026539 
    73 1171    58.55   0.211   0.01055 0.87361 0.0034591 
    74 1201    60.052  0.211   0.01055 0.86595 0.0028129 
    75 1231.6  61.582  0.211   0.01055 0.86804 0.0043311 
    76 1263    63.151  0.211   0.01055 0.86676 0.0028806 
    77 1295.2  64.762  0.211   0.01055 0.85655 0.0028657 
    78 1328.4  66.419  0.211   0.01055 0.85794 0.0034773 
    79 1362.3  68.113  0.211   0.01055 0.85521 0.0032798 
    80 1397.1  69.854  0.211   0.01055 0.84974 0.0044537 
    81 1432.9  71.644  0.211   0.01055 0.84149 0.0032738 
    82 1469.7  73.487  0.211   0.01055 0.84801 0.0037874 
    83 1507.5  75.376  0.211   0.01055 0.84334 0.003206 
    84 1546.4  77.318  0.211   0.01055 0.83749 0.0040707 
    85 1586.4  79.322  0.211   0.01055 0.83921 0.0049938 
    86 1627.6  81.381  0.211   0.01055 0.83434 0.0057337 
    87 1669.9  83.497  0.211   0.01055 0.82878 0.0062417 
    88 1713.6  85.678  0.211   0.01055 0.82309 0.0080179 
    89 1758.5  87.927  0.211   0.01055 0.82433 0.0074191 
    90 1804.8  90.239  0.211   0.01055 0.82023 0.0076431 
    91 1852.5  92.627  0.211   0.01055 0.82756 0.0063064 
    92 1901.7  95.087  0.211   0.01055 0.82584 0.0052944 
    93 1952.4  97.622  0.211   0.01055 0.82799 0.0050662 
    94 2004.8  100.24  0.211   0.01055 0.82345 0.0043127 
    95 2058.8  102.94  0.211   0.01055 0.82296 0.0038 
    96 2114.5  105.72  0.211   0.01055 0.81987 0.0034072 
    97 2172    108.6   0.211   0.01055 0.82021 0.0036752 
    98 2231.4  111.57  0.211   0.01055 0.82765 0.0028851 
    99 2292.8  114.64  0.211   0.01055 0.82664 0.0038942 
    100 2356.2  117.81  0.211   0.01055 0.82702 0.0047371 
    101 2421.8  121.09  0.211   0.01055 0.81593 0.0043772 
    102 2489.6  124.48  0.211   0.01055 0.8251  0.0028026 
    103 2559.5  127.98  0.211   0.01055 0.8292  0.0024574 
    104 2631.9  131.59  0.211   0.01055 0.82626 0.0036198 
    105 2706.8  135.34  0.211   0.01055 0.8208  0.0032314 
    106 2784.3  139.22  0.211   0.01055 0.81959 0.0042731 
    107 2864.5  143.23  0.211   0.01055 0.82653 0.002699 
    108 2947.5  147.38  0.211   0.01055 0.82401 0.0036726 
    109 3033.5  151.67  0.211   0.01055 0.82361 0.0048224 
    110 3122.4  156.12  0.211   0.01055 0.82358 0.0041221 
    111 3214.5  160.73  0.211   0.01055 0.82187 0.0028807 
    112 3310.1  165.5   0.211   0.01055 0.82644 0.003516 
    113 3409    170.45  0.211   0.01055 0.82355 0.0021166 
    114 3511.4  175.57  0.211   0.01055 0.82513 0.0033911 
    115 3617.6  180.88  0.211   0.01055 0.82802 0.0015342 
    116 3727.6  186.38  0.211   0.01055 0.82663 0.0029222 
    117 3841.7  192.08  0.211   0.01055 0.82026 0.0020755 
    118 3960    198     0.211   0.01055 0.83079 0.0026394 
    119 4082.7  204.13  0.211   0.01055 0.82665 0.0027466 
    120 4209.9  210.5   0.211   0.01055 0.82774 0.0025199 
    121 4341.9  217.09  0.211   0.01055 0.83489 0.0030619 
    122 4478.7  223.94  0.211   0.01055 0.81987 0.0020988 
    123 4620.8  231.04  0.211   0.01055 0.8253  0.0023899 
    124 4768.2  238.41  0.211   0.01055 0.82653 0.0022851 
    125 4921.1  246.06  0.211   0.01055 0.82442 0.003383 
    126 5079.8  253.99  0.211   0.01055 0.82827 0.0015979 
    127 5244.7  262.23  0.211   0.01055 0.82494 0.0031129 
    128 5415.7  270.79  0.211   0.01055 0.82183 0.0030149 
    129 5593.3  279.67  0.211   0.01055 0.83217 0.0046976 
    130 5777.8  288.89  0.211   0.01055 0.82227 0.005574 
    131 5969.3  298.46  0.211   0.01055 0.82338 0.0025569 
     1FileFormatVersion       1.0 
     2DataFileTitle           Polystyrene of Markus Strobl,  Full Sine, ++ only 
     3Sample                  Polystyrene 2 um in 53% H2O, 47% D2O 
     4Settings                D1=D2=20x8 mm,Ds = 16x10 mm (WxH), GF1 =scanning, GF2 = 2.5 A. 2 um polystyrene in 53% H2O, 47% D2O; 8.55% contrast 
     5Operator                CPD 
     6Date                    do 10 jul 2014 16:37:30 
     7ScanType                sine one element scan 
     8Thickness               2.00E-01 
     9Thickness_unit          cm 
     10Theta_zmax              0.0168 
     11Theta_zmax_unit         radians 
     12Theta_ymax              0.0168 
     13Theta_ymax_unit         radians 
     14Orientation             Z 
     15SpinEchoLength_unit     A 
     16Depolarisation_unit     A-2 cm-1 
     17Wavelength_unit         A 
     18 
     19BEGIN_DATA 
     20SpinEchoLength Depolarisation Depolarisation_error SpinEchoLength_error Wavelength Wavelength_error Polarisation  Polarisation_error 
     21391.56 0.0041929 0.0036894 19.578 2.11 0.1055 1.0037 0.0032974 
     221564 -0.0046571 0.0038185 78.2 2.11 0.1055 0.99586 0.003386 
     232735.6 -0.017007 0.0038132 136.78 2.11 0.1055 0.98497 0.0033444 
     243907.9 -0.033462 0.0035068 195.39 2.11 0.1055 0.97064 0.0030309 
     255080.2 -0.047483 0.0038208 254.01 2.11 0.1055 0.9586 0.0032613 
     266251.8 -0.070375 0.00376 312.59 2.11 0.1055 0.93926 0.0031446 
     277423.2 -0.092217 0.0037927 371.16 2.11 0.1055 0.92117 0.0031108 
     288595.5 -0.10238 0.004006 429.77 2.11 0.1055 0.91287 0.0032562 
     299767.7 -0.12672 0.0038534 488.39 2.11 0.1055 0.8933 0.0030651 
     3010940 -0.1374 0.004243 546.98 2.11 0.1055 0.88484 0.003343 
     3112112 -0.16072 0.0045837 605.58 2.11 0.1055 0.86666 0.0035372 
     3213284 -0.16623 0.0045613 664.2 2.11 0.1055 0.86242 0.0035027 
     3314456 -0.18468 0.0044918 722.79 2.11 0.1055 0.84837 0.0033931 
     3415628 -0.19143 0.0048967 781.38 2.11 0.1055 0.84328 0.0036768 
     3516800 -0.20029 0.0045421 840.02 2.11 0.1055 0.83666 0.0033837 
     3617971 -0.19798 0.0046642 898.56 2.11 0.1055 0.83838 0.0034819 
     3719143 -0.21442 0.0047052 957.17 2.11 0.1055 0.82619 0.0034614 
     3820316 -0.20885 0.0044931 1015.8 2.11 0.1055 0.8303 0.0033218 
     3921488 -0.21393 0.0049186 1074.4 2.11 0.1055 0.82655 0.00362 
     4022660 -0.20685 0.004423 1133 2.11 0.1055 0.83179 0.0032758 
     4123832 -0.20802 0.0046979 1191.6 2.11 0.1055 0.83092 0.0034758 
     4225003 -0.19848 0.0045953 1250.2 2.11 0.1055 0.838 0.0034289 
     4326175 -0.21117 0.0044567 1308.8 2.11 0.1055 0.82859 0.0032881 
     4427347 -0.21283 0.004137 1367.4 2.11 0.1055 0.82736 0.0030477 
     4528520 -0.2042 0.0044587 1426 2.11 0.1055 0.83375 0.0033101 
     4629692 -0.2112 0.0042852 1484.6 2.11 0.1055 0.82857 0.0031615 
     4730864 -0.20319 0.0043483 1543.2 2.11 0.1055 0.8345 0.003231 
     4832036 -0.20752 0.0044297 1601.8 2.11 0.1055 0.83129 0.0032788 
     4933207 -0.20654 0.0043188 1660.4 2.11 0.1055 0.83201 0.0031995 
     5034380 -0.20126 0.0046375 1719 2.11 0.1055 0.83593 0.0034518 
     5135551 -0.20924 0.0042871 1777.6 2.11 0.1055 0.83001 0.0031684 
     5236724 -0.21323 0.0045471 1836.2 2.11 0.1055 0.82707 0.0033487 
     5337895 -0.21324 0.0045354 1894.7 2.11 0.1055 0.82706 0.00334 
     5439067 -0.19905 0.0044141 1953.4 2.11 0.1055 0.83758 0.003292 
     5540239 -0.1991 0.0047441 2012 2.11 0.1055 0.83754 0.003538 
     5641411 -0.20359 0.0050136 2070.5 2.11 0.1055 0.8342 0.003724 
     5742583 -0.21032 0.0049474 2129.1 2.11 0.1055 0.82922 0.0036529 
     5843755 -0.20689 0.0048203 2187.8 2.11 0.1055 0.83176 0.00357 
     5944927 -0.21075 0.0052337 2246.4 2.11 0.1055 0.8289 0.0038628 
     6046099 -0.19956 0.0047827 2304.9 2.11 0.1055 0.8372 0.0035653 
  • extra/pylint.rc

    r823e620 rb669b49  
    2121# List of plugins (as comma separated values of python modules names) to load, 
    2222# usually to register additional checkers. 
    23 load-plugins=pylint_numpy,pylint_pyopencl 
     23load-plugins=pylint_numpy,pylint_pyopencl,pylint_sas 
    2424 
    2525# Use multiple processes to speed up Pylint. 
  • sasmodels/__init__.py

    r997c9ca re65c3ba  
    4747        ] 
    4848    return return_list 
    49  
    50  
  • sasmodels/bumps_model.py

    r74b0495 r2d81cfe  
    2020from .direct_model import DataMixin 
    2121 
     22# pylint: disable=unused-import 
    2223try: 
    2324    from typing import Dict, Union, Tuple, Any 
     
    2829except ImportError: 
    2930    pass 
     31# pylint: enable=unused-import 
    3032 
    3133try: 
     
    3739 
    3840 
    39 def create_parameters(model_info, **kwargs): 
    40     # type: (ModelInfo, **Union[float, str, Parameter]) -> Tuple[Dict[str, Parameter], Dict[str, str]] 
     41def create_parameters(model_info,  # type: ModelInfo 
     42                      **kwargs     # type: Union[float, str, Parameter] 
     43                     ): 
     44    # type: (...) -> Tuple[Dict[str, Parameter], Dict[str, str]] 
    4145    """ 
    4246    Generate Bumps parameters from the model info. 
     
    238242        # pylint: disable=attribute-defined-outside-init 
    239243        self.__dict__ = state 
    240  
  • sasmodels/compare.py

    r376b0ee r0e55afe  
    4040from . import core 
    4141from . import kerneldll 
    42 from . import exception 
    4342from .data import plot_theory, empty_data1D, empty_data2D, load_data 
    4443from .direct_model import DirectModel, get_mesh 
    45 from .convert import revert_name, revert_pars, constrain_new_to_old 
    4644from .generate import FLOAT_RE 
    4745from .weights import plot_weights 
    4846 
     47# pylint: disable=unused-import 
    4948try: 
    5049    from typing import Optional, Dict, Any, Callable, Tuple 
    51 except Exception: 
     50except ImportError: 
    5251    pass 
    5352else: 
     
    5554    from .data import Data 
    5655    Calculator = Callable[[float], np.ndarray] 
     56# pylint: enable=unused-import 
    5757 
    5858USAGE = """ 
     
    9797    -single/-double/-half/-fast sets an OpenCL calculation engine 
    9898    -single!/-double!/-quad! sets an OpenMP calculation engine 
    99     -sasview sets the sasview calculation engine 
    10099 
    101100    === plotting === 
     
    150149kerneldll.ALLOW_SINGLE_PRECISION_DLLS = True 
    151150 
    152 # list of math functions for use in evaluating parameters 
    153 MATH = dict((k,getattr(math, k)) for k in dir(math) if not k.startswith('_')) 
     151def build_math_context(): 
     152    # type: () -> Dict[str, Callable] 
     153    """build dictionary of functions from math module""" 
     154    return dict((k, getattr(math, k)) 
     155                for k in dir(math) if not k.startswith('_')) 
     156 
     157#: list of math functions for use in evaluating parameters 
     158MATH = build_math_context() 
    154159 
    155160# CRUFT python 2.6 
     
    231236        pass 
    232237 
    233     def __exit__(self, exc_type, exc_value, traceback): 
     238    def __exit__(self, exc_type, exc_value, trace): 
    234239        # type: (Any, BaseException, Any) -> None 
    235         # TODO: better typing for __exit__ method 
    236240        np.random.set_state(self._state) 
    237241 
     
    252256    """ 
    253257    Add a beam stop of the given *radius*.  If *outer*, make an annulus. 
    254  
    255     Note: this function does not require sasview 
    256258    """ 
    257259    if hasattr(data, 'qx_data'): 
     
    374376 
    375377def _random_pd(model_info, pars): 
     378    # type: (ModelInfo, Dict[str, float]) -> None 
     379    """ 
     380    Generate a random dispersity distribution for the model. 
     381 
     382    1% no shape dispersity 
     383    85% single shape parameter 
     384    13% two shape parameters 
     385    1% three shape parameters 
     386 
     387    If oriented, then put dispersity in theta, add phi and psi dispersity 
     388    with 10% probability for each. 
     389    """ 
    376390    pd = [p for p in model_info.parameters.kernel_parameters if p.polydisperse] 
    377391    pd_volume = [] 
     
    444458        value = pars[p.name] 
    445459        if p.units == 'Ang' and value > maxdim: 
    446             pars[p.name] = maxdim*10**np.random.uniform(-3,0) 
     460            pars[p.name] = maxdim*10**np.random.uniform(-3, 0) 
    447461 
    448462def constrain_pars(model_info, pars): 
     
    490504        if pars['radius'] < pars['thick_string']: 
    491505            pars['radius'], pars['thick_string'] = pars['thick_string'], pars['radius'] 
    492         pass 
    493506 
    494507    elif name == 'rpa': 
     
    608621    return pars 
    609622 
    610 def eval_sasview(model_info, data): 
    611     # type: (Modelinfo, Data) -> Calculator 
    612     """ 
    613     Return a model calculator using the pre-4.0 SasView models. 
    614     """ 
    615     # importing sas here so that the error message will be that sas failed to 
    616     # import rather than the more obscure smear_selection not imported error 
    617     import sas 
    618     import sas.models 
    619     from sas.models.qsmearing import smear_selection 
    620     from sas.models.MultiplicationModel import MultiplicationModel 
    621     from sas.models.dispersion_models import models as dispersers 
    622  
    623     def get_model_class(name): 
    624         # type: (str) -> "sas.models.BaseComponent" 
    625         #print("new",sorted(_pars.items())) 
    626         __import__('sas.models.' + name) 
    627         ModelClass = getattr(getattr(sas.models, name, None), name, None) 
    628         if ModelClass is None: 
    629             raise ValueError("could not find model %r in sas.models"%name) 
    630         return ModelClass 
    631  
    632     # WARNING: ugly hack when handling model! 
    633     # Sasview models with multiplicity need to be created with the target 
    634     # multiplicity, so we cannot create the target model ahead of time for 
    635     # for multiplicity models.  Instead we store the model in a list and 
    636     # update the first element of that list with the new multiplicity model 
    637     # every time we evaluate. 
    638  
    639     # grab the sasview model, or create it if it is a product model 
    640     if model_info.composition: 
    641         composition_type, parts = model_info.composition 
    642         if composition_type == 'product': 
    643             P, S = [get_model_class(revert_name(p))() for p in parts] 
    644             model = [MultiplicationModel(P, S)] 
    645         else: 
    646             raise ValueError("sasview mixture models not supported by compare") 
    647     else: 
    648         old_name = revert_name(model_info) 
    649         if old_name is None: 
    650             raise ValueError("model %r does not exist in old sasview" 
    651                             % model_info.id) 
    652         ModelClass = get_model_class(old_name) 
    653         model = [ModelClass()] 
    654     model[0].disperser_handles = {} 
    655  
    656     # build a smearer with which to call the model, if necessary 
    657     smearer = smear_selection(data, model=model) 
    658     if hasattr(data, 'qx_data'): 
    659         q = np.sqrt(data.qx_data**2 + data.qy_data**2) 
    660         index = ((~data.mask) & (~np.isnan(data.data)) 
    661                  & (q >= data.qmin) & (q <= data.qmax)) 
    662         if smearer is not None: 
    663             smearer.model = model  # because smear_selection has a bug 
    664             smearer.accuracy = data.accuracy 
    665             smearer.set_index(index) 
    666             def _call_smearer(): 
    667                 smearer.model = model[0] 
    668                 return smearer.get_value() 
    669             theory = _call_smearer 
    670         else: 
    671             theory = lambda: model[0].evalDistribution([data.qx_data[index], 
    672                                                         data.qy_data[index]]) 
    673     elif smearer is not None: 
    674         theory = lambda: smearer(model[0].evalDistribution(data.x)) 
    675     else: 
    676         theory = lambda: model[0].evalDistribution(data.x) 
    677  
    678     def calculator(**pars): 
    679         # type: (float, ...) -> np.ndarray 
    680         """ 
    681         Sasview calculator for model. 
    682         """ 
    683         oldpars = revert_pars(model_info, pars) 
    684         # For multiplicity models, create a model with the correct multiplicity 
    685         control = oldpars.pop("CONTROL", None) 
    686         if control is not None: 
    687             # sphericalSLD has one fewer multiplicity.  This update should 
    688             # happen in revert_pars, but it hasn't been called yet. 
    689             model[0] = ModelClass(control) 
    690         # paying for parameter conversion each time to keep life simple, if not fast 
    691         for k, v in oldpars.items(): 
    692             if k.endswith('.type'): 
    693                 par = k[:-5] 
    694                 if v == 'gaussian': continue 
    695                 cls = dispersers[v if v != 'rectangle' else 'rectangula'] 
    696                 handle = cls() 
    697                 model[0].disperser_handles[par] = handle 
    698                 try: 
    699                     model[0].set_dispersion(par, handle) 
    700                 except Exception: 
    701                     exception.annotate_exception("while setting %s to %r" 
    702                                                  %(par, v)) 
    703                     raise 
    704  
    705  
    706         #print("sasview pars",oldpars) 
    707         for k, v in oldpars.items(): 
    708             name_attr = k.split('.')  # polydispersity components 
    709             if len(name_attr) == 2: 
    710                 par, disp_par = name_attr 
    711                 model[0].dispersion[par][disp_par] = v 
    712             else: 
    713                 model[0].setParam(k, v) 
    714         return theory() 
    715  
    716     calculator.engine = "sasview" 
    717     return calculator 
    718623 
    719624DTYPE_MAP = { 
     
    809714    than OpenCL. 
    810715    """ 
    811     if dtype == 'sasview': 
    812         return eval_sasview(model_info, data) 
    813     elif dtype is None or not dtype.endswith('!'): 
     716    if dtype is None or not dtype.endswith('!'): 
    814717        return eval_opencl(model_info, data, dtype=dtype, cutoff=cutoff) 
    815718    else: 
     
    847750            # print a separate seed for each dataset for better reproducibility 
    848751            new_seed = np.random.randint(1000000) 
    849             print("Set %d uses -random=%i"%(k+1,new_seed)) 
     752            print("Set %d uses -random=%i"%(k+1, new_seed)) 
    850753            np.random.seed(new_seed) 
    851754        opts['pars'] = parse_pars(opts, maxdim=maxdim) 
     
    868771def run_models(opts, verbose=False): 
    869772    # type: (Dict[str, Any]) -> Dict[str, Any] 
     773    """ 
     774    Process a parameter set, return calculation results and times. 
     775    """ 
    870776 
    871777    base, comp = opts['engines'] 
     
    923829    # work with trimmed data, not the full set 
    924830    sorted_err = np.sort(abs(err.compressed())) 
    925     if len(sorted_err) == 0.: 
     831    if len(sorted_err) == 0: 
    926832        print(label + "  no valid values") 
    927833        return 
     
    941847def plot_models(opts, result, limits=None, setnum=0): 
    942848    # type: (Dict[str, Any], Dict[str, Any], Optional[Tuple[float, float]]) -> Tuple[float, float] 
     849    """ 
     850    Plot the results from :func:`run_model`. 
     851    """ 
    943852    import matplotlib.pyplot as plt 
    944853 
     
    987896                errview = 'linear' 
    988897        if 0:  # 95% cutoff 
    989             sorted = np.sort(err.flatten()) 
    990             cutoff = sorted[int(sorted.size*0.95)] 
     898            sorted_err = np.sort(err.flatten()) 
     899            cutoff = sorted_err[int(sorted_err.size*0.95)] 
    991900            err[err > cutoff] = cutoff 
    992901        #err,errstr = base/comp,"ratio" 
     
    1051960    'engine=', 
    1052961    'half', 'fast', 'single', 'double', 'single!', 'double!', 'quad!', 
    1053     'sasview',  # TODO: remove sasview 3.x support 
    1054962 
    1055963    # Output options 
     
    1057965    ] 
    1058966 
    1059 NAME_OPTIONS = set(k for k in OPTIONS if not k.endswith('=')) 
    1060 VALUE_OPTIONS = [k[:-1] for k in OPTIONS if k.endswith('=')] 
     967NAME_OPTIONS = (lambda: set(k for k in OPTIONS if not k.endswith('=')))() 
     968VALUE_OPTIONS = (lambda: [k[:-1] for k in OPTIONS if k.endswith('=')])() 
    1061969 
    1062970 
     
    11061014 
    11071015INTEGER_RE = re.compile("^[+-]?[1-9][0-9]*$") 
    1108 def isnumber(str): 
    1109     match = FLOAT_RE.match(str) 
    1110     isfloat = (match and not str[match.end():]) 
    1111     return isfloat or INTEGER_RE.match(str) 
     1016def isnumber(s): 
     1017    # type: (str) -> bool 
     1018    """Return True if string contains an int or float""" 
     1019    match = FLOAT_RE.match(s) 
     1020    isfloat = (match and not s[match.end():]) 
     1021    return isfloat or INTEGER_RE.match(s) 
    11121022 
    11131023# For distinguishing pairs of models for comparison 
     
    11481058    name = positional_args[-1] 
    11491059 
    1150     # pylint: disable=bad-whitespace 
     1060    # pylint: disable=bad-whitespace,C0321 
    11511061    # Interpret the flags 
    11521062    opts = { 
     
    12321142        elif arg == '-double!': opts['engine'] = 'double!' 
    12331143        elif arg == '-quad!':   opts['engine'] = 'quad!' 
    1234         elif arg == '-sasview': opts['engine'] = 'sasview' 
    12351144        elif arg == '-edit':    opts['explore'] = True 
    12361145        elif arg == '-demo':    opts['use_demo'] = True 
     
    12391148        elif arg == '-html':    opts['html'] = True 
    12401149        elif arg == '-help':    opts['html'] = True 
    1241     # pylint: enable=bad-whitespace 
     1150    # pylint: enable=bad-whitespace,C0321 
    12421151 
    12431152    # Magnetism forces 2D for now 
     
    13141223 
    13151224def set_spherical_integration_parameters(opts, steps): 
     1225    # type: (Dict[str, Any], int) -> None 
    13161226    """ 
    13171227    Set integration parameters for spherical integration over the entire 
     
    13371247            'psi_pd_type=rectangle', 
    13381248        ]) 
    1339         pass 
    13401249 
    13411250def parse_pars(opts, maxdim=np.inf): 
     1251    # type: (Dict[str, Any], float) -> Tuple[Dict[str, float], Dict[str, float]] 
     1252    """ 
     1253    Generate a parameter set. 
     1254 
     1255    The default values come from the model, or a randomized model if a seed 
     1256    value is given.  Next, evaluate any parameter expressions, constraining 
     1257    the value of the parameter within and between models.  If *maxdim* is 
     1258    given, limit parameters with units of Angstrom to this value. 
     1259 
     1260    Returns a pair of parameter dictionaries for base and comparison models. 
     1261    """ 
    13421262    model_info, model_info2 = opts['info'] 
    13431263 
     
    13781298            print("%r invalid; parameters are: %s"%(k, ", ".join(sorted(s)))) 
    13791299            return None 
    1380         v1, v2 = v.split(PAR_SPLIT, 2) if PAR_SPLIT in v else (v,v) 
     1300        v1, v2 = v.split(PAR_SPLIT, 2) if PAR_SPLIT in v else (v, v) 
    13811301        if v1 and k in pars: 
    13821302            presets[k] = float(v1) if isnumber(v1) else v1 
     
    14271347    show html docs for the model 
    14281348    """ 
    1429     import os 
    14301349    from .generate import make_html 
    14311350    from . import rst2html 
     
    14341353    html = make_html(info) 
    14351354    path = os.path.dirname(info.filename) 
    1436     url = "file://"+path.replace("\\","/")[2:]+"/" 
     1355    url = "file://" + path.replace("\\", "/")[2:] + "/" 
    14371356    rst2html.view_html_qtapp(html, url) 
    14381357 
     
    14581377    frame.panel.Layout() 
    14591378    frame.panel.aui.Split(0, wx.TOP) 
    1460     def reset_parameters(event): 
     1379    def _reset_parameters(event): 
    14611380        model.revert_values() 
    14621381        signal.update_parameters(problem) 
    1463     frame.Bind(wx.EVT_TOOL, reset_parameters, frame.ToolBar.GetToolByPos(1)) 
    1464     if is_mac: frame.Show() 
     1382    frame.Bind(wx.EVT_TOOL, _reset_parameters, frame.ToolBar.GetToolByPos(1)) 
     1383    if is_mac: 
     1384        frame.Show() 
    14651385    # If running withing an app, start the main loop 
    14661386    if app: 
     
    15041424 
    15051425    def revert_values(self): 
     1426        # type: () -> None 
     1427        """ 
     1428        Restore starting values of the parameters. 
     1429        """ 
    15061430        for k, v in self.starting_values.items(): 
    15071431            self.pars[k].value = v 
    15081432 
    15091433    def model_update(self): 
     1434        # type: () -> None 
     1435        """ 
     1436        Respond to signal that model parameters have been changed. 
     1437        """ 
    15101438        pass 
    15111439 
  • sasmodels/compare_many.py

    rf72d70a r2d81cfe  
    2222from .compare import (randomize_pars, suppress_pd, make_data, 
    2323                      make_engine, get_pars, columnize, 
    24                       constrain_pars, constrain_new_to_old) 
     24                      constrain_pars) 
    2525 
    2626MODELS = core.list_models() 
     
    8080    'double!': 5e-14, 
    8181    'quad!': 5e-18, 
    82     'sasview': 5e-14, 
    8382} 
    8483def compare_instance(name, data, index, N=1, mono=True, cutoff=1e-5, 
    85                      base='sasview', comp='double'): 
     84                     base='single', comp='double'): 
    8685    r""" 
    8786    Compare the model under different calculation engines. 
     
    164163        print("Model %s %d"%(name, k+1), file=sys.stderr) 
    165164        seed = np.random.randint(1e6) 
    166         pars_i = randomize_pars(model_info, pars, seed) 
     165        np.random.seed(seed) 
     166        pars_i = randomize_pars(model_info, pars) 
    167167        constrain_pars(model_info, pars_i) 
    168         if 'sasview' in (base, comp): 
    169             constrain_new_to_old(model_info, pars_i) 
    170168        if mono: 
    171169            pars_i = suppress_pd(pars_i) 
     
    266264        return 
    267265 
    268     data, index = make_data({'qmax':1.0, 'is2d':is2D, 'nq':Nq, 'res':0., 
    269                              'accuracy': 'Low', 'view':'log', 'zero': False}) 
     266    data, index = make_data({ 
     267        'qmin': 0.001, 'qmax': 1.0, 'is2d': is2D, 'nq': Nq, 'res': 0., 
     268        'accuracy': 'Low', 'view':'log', 'zero': False 
     269        }) 
    270270    for model in model_list: 
    271271        compare_instance(model, data, index, N=count, mono=mono, 
  • sasmodels/conversion_table.py

    r505d0ad re65c3ba  
    2929 
    3030CONVERSION_TABLE = { 
    31     (3,1,2) : { 
    32     "adsorbed_layer": [ 
    33         "Core2ndMomentModel", 
    34         { 
    35             "scale": "scale", 
    36             "second_moment": "second_moment", 
    37             "density_shell": "density_poly", 
    38             "sld_solvent": "sld_solv", 
    39             "radius": "radius_core", 
    40             "volfraction": "volf_cores", 
    41             "background": "background", 
    42             "adsorbed_amount": "ads_amount", 
    43             "sld_shell": "sld_poly" 
    44         } 
    45     ], 
    46     "barbell": [ 
    47         "BarBellModel", 
    48         { 
    49             "sld": "sld_barbell", 
    50             "length": "len_bar", 
    51             "radius_bell": "rad_bell", 
    52             "radius": "rad_bar", 
    53             "sld_solvent": "sld_solv" 
    54         } 
    55     ], 
    56     "bcc_paracrystal": [ 
    57         "BCCrystalModel", 
    58         { 
    59             "sld": "sldSph", 
    60             "sld_solvent": "sldSolv" 
    61         } 
    62     ], 
    63     "be_polyelectrolyte": [ 
    64         "BEPolyelectrolyte", 
    65         { 
    66             "ionization_degree": "alpha", 
    67             "polymer_concentration": "c", 
    68             "salt_concentration": "cs", 
    69             "virial_param": "h", 
    70             "background": "background", 
    71             "contrast_factor": "k", 
    72             "bjerrum_length": "lb", 
    73             "monomer_length": "b" 
    74         } 
    75     ], 
    76     "binary_hard_sphere": [ 
    77         "BinaryHSModel", 
    78         { 
    79             "sld_sm": "ss_sld", 
    80             "sld_lg": "ls_sld", 
    81             "volfraction_sm": "vol_frac_ss", 
    82             "radius_lg": "l_radius", 
    83             "radius_sm": "s_radius", 
    84             "volfraction_lg": "vol_frac_ls", 
    85             "sld_solvent": "solvent_sld" 
    86         } 
    87     ], 
    88     "broad_peak": [ 
    89         "BroadPeakModel", 
    90         { 
    91             "peak_pos": "q_peak", 
    92             "scale": None, 
    93             "lorentz_length": "length_l", 
    94             "porod_scale": "scale_p", 
    95             "lorentz_exp": "exponent_l", 
    96             "lorentz_scale": "scale_l", 
    97             "porod_exp": "exponent_p" 
    98         } 
    99     ], 
    100     "capped_cylinder": [ 
    101         "CappedCylinderModel", 
    102         { 
    103             "sld": "sld_capcyl", 
    104             "length": "len_cyl", 
    105             "radius_cap": "rad_cap", 
    106             "radius": "rad_cyl", 
    107             "sld_solvent": "sld_solv" 
    108         } 
    109     ], 
    110     "core_multi_shell": [ 
    111         "CoreMultiShellModel", 
    112         { 
    113             "thickness": "thick_shell", 
    114             "sld": "sld_shell", 
    115             "radius": "rad_core0", 
    116             "sld_core": "sld_core0", 
    117             "sld_solvent": "sld_solv", 
    118             "n": "n_shells", 
    119             "M0:sld_core": "M0_sld_core0", 
    120             "mtheta:sld_core": "M_theta_core0", 
    121             "mphi:sld_core": "M_phi_core0", 
    122             "M0:sld1": "M0_sld_shell1", 
    123             "mtheta:sld1": "M_theta_shell1", 
    124             "mphi:sld1": "M_phi_shell1", 
    125             "M0:sld2": "M0_sld_shell2", 
    126             "mtheta:sld2": "M_theta_shell2", 
    127             "mphi:sld2": "M_phi_shell2", 
    128             "M0:sld3": "M0_sld_shell3", 
    129             "mtheta:sld3": "M_theta_shell3", 
    130             "mphi:sld3": "M_phi_shell3", 
    131             "M0:sld4": "M0_sld_shell4", 
    132             "mtheta:sld4": "M_theta_shell4", 
    133             "mphi:sld4": "M_phi_shell4", 
    134             "M0:sld_solvent": "M0_sld_solv", 
    135             "mtheta:sld_solvent": "M_theta_solv", 
    136             "mphi:sld_solvent": "M_phi_solv", 
    137             "up:frac_i": "Up_frac_i", 
    138             "up:frac_f": "Up_frac_f", 
    139             "up:angle": "Up_theta", 
    140         } 
    141     ], 
    142     "core_shell_bicelle": [ 
    143         "CoreShellBicelleModel", 
    144         { 
    145             "phi": "axis_phi", 
    146             "sld_core": "core_sld", 
    147             "sld_rim": "rim_sld", 
    148             "thick_face": "face_thick", 
    149             "sld_solvent": "solvent_sld", 
    150             "thick_rim": "rim_thick", 
    151             "sld_face": "face_sld", 
    152             "theta": "axis_theta" 
    153         } 
    154     ], 
    155     "core_shell_cylinder": [ 
    156         "CoreShellCylinderModel", 
    157         { 
    158             "theta": "axis_theta", 
    159             "phi": "axis_phi", 
    160             "sld_shell": "shell_sld", 
    161             "sld_solvent": "solvent_sld", 
    162             "sld_core": "core_sld" 
    163         } 
    164     ], 
    165     "core_shell_ellipsoid:1": [ 
    166         "CoreShellEllipsoidModel", 
    167         { 
    168             "sld_core": "sld_core", 
    169             "sld_shell": "sld_shell", 
    170             "sld_solvent": "sld_solvent", 
    171             "radius_equat_core": "equat_core", 
    172             "x_core": "polar_core", 
    173             "thick_shell": "equat_shell", 
    174             "x_polar_shell": "polar_shell", 
    175             "theta": "axis_theta", 
    176             "phi": "axis_phi", 
    177         } 
    178     ], 
    179     "core_shell_ellipsoid": [ 
    180         "CoreShellEllipsoidXTModel", 
    181         { 
    182             "sld_core": "sld_core", 
    183             "sld_shell": "sld_shell", 
    184             "sld_solvent": "sld_solvent", 
    185             "radius_equat_core": "equat_core", 
    186             "thick_shell": "T_shell", 
    187             "x_core": "X_core", 
    188             "x_polar_shell": "XpolarShell", 
    189             "theta": "axis_theta", 
    190             "phi": "axis_phi", 
    191         } 
    192     ], 
    193     "core_shell_parallelepiped": [ 
    194         "CSParallelepipedModel", 
    195         { 
    196             "sld_core": "sld_pcore", 
    197             "sld_a": "sld_rimA", 
    198             "sld_b": "sld_rimB", 
    199             "sld_c": "sld_rimC", 
    200             "sld_solvent": "sld_solv", 
    201             "length_a": "shortA", 
    202             "length_b": "midB", 
    203             "length_c": "longC", 
    204             "thick_rim_a": "rimA", 
    205             "thick_rim_c": "rimC", 
    206             "thick_rim_b": "rimB", 
    207             "theta": "parallel_theta", 
    208             "phi": "parallel_phi", 
    209             "psi": "parallel_psi", 
    210         } 
    211     ], 
    212     "core_shell_sphere": [ 
    213         "CoreShellModel", 
    214         { 
    215             "sld_core": "core_sld", 
    216             "sld_shell": "shell_sld", 
    217             "sld_solvent": "solvent_sld", 
    218             "M0:sld_core": "M0_sld_core", 
    219             "mtheta:sld_core": "M_theta_core", 
    220             "mphi:sld_core": "M_phi_core", 
    221             "M0:sld_shell": "M0_sld_shell", 
    222             "mtheta:sld_shell": "M_theta_shell", 
    223             "mphi:sld_shell": "M_phi_shell", 
    224             "M0:sld_solvent": "M0_sld_solv", 
    225             "mtheta:sld_solvent": "M_theta_solv", 
    226             "mphi:sld_solvent": "M_phi_solv", 
    227             "up:frac_i": "Up_frac_i", 
    228             "up:frac_f": "Up_frac_f", 
    229             "up:angle": "Up_theta" 
    230         } 
    231     ], 
    232     "correlation_length": [ 
    233         "CorrLength", 
    234         { 
    235             "porod_scale": "scale_p", 
    236             "lorentz_scale": "scale_l", 
    237             "porod_exp": "exponent_p", 
    238             "lorentz_exp": "exponent_l", 
    239             "cor_length": "length_l" 
    240         }, 
    241         "CorrLengthModel" 
    242     ], 
    243     "cylinder": [ 
    244         "CylinderModel", 
    245         { 
    246             "sld": "sldCyl", 
    247             "theta": "cyl_theta", 
    248             "phi": "cyl_phi", 
    249             "sld_solvent": "sldSolv", 
    250             "M0:sld": "M0_sld_cyl", 
    251             "mtheta:sld": "M_theta_cyl", 
    252             "mphi:sld": "M_phi_cyl", 
    253             "M0:sld_solvent": "M0_sld_solv", 
    254             "mtheta:sld_solvent": "M_theta_solv", 
    255             "mphi:sld_solvent": "M_phi_solv", 
    256             "up:frac_i": "Up_frac_i", 
    257             "up:frac_f": "Up_frac_f", 
    258             "up:angle": "Up_theta" 
    259         } 
    260     ], 
    261     "dab": [ 
    262         "DABModel", 
    263         { 
    264             "cor_length": "length" 
    265         } 
    266     ], 
    267     "ellipsoid": [ 
    268         "EllipsoidModel", 
    269         { 
    270             "phi": "axis_phi", 
    271             "radius_equatorial": "radius_b", 
    272             "sld": "sldEll", 
    273             "theta": "axis_theta", 
    274             "radius_polar": "radius_a", 
    275             "sld_solvent": "sldSolv" 
    276         } 
    277     ], 
    278     "elliptical_cylinder": [ 
    279         "EllipticalCylinderModel", 
    280         { 
    281             "axis_ratio": "r_ratio", 
    282             "radius_minor": "r_minor", 
    283             "sld": "sldCyl", 
    284             "sld_solvent": "sldSolv", 
    285             "theta": "cyl_theta", 
    286             "phi": "cyl_phi", 
    287             "psi": "cyl_psi", 
    288         } 
    289     ], 
    290     "fcc_paracrystal": [ 
    291         "FCCrystalModel", 
    292         { 
    293             "sld": "sldSph", 
    294             "sld_solvent": "sldSolv" 
    295         } 
    296     ], 
    297     "flexible_cylinder": [ 
    298         "FlexibleCylinderModel", 
    299         { 
    300             "sld": "sldCyl", 
    301             "sld_solvent": "sldSolv" 
    302         } 
    303     ], 
    304     "flexible_cylinder_elliptical": [ 
    305         "FlexCylEllipXModel", 
    306         { 
    307             "sld": "sldCyl", 
    308             "sld_solvent": "sldSolv" 
    309         } 
    310     ], 
    311     "fractal": [ 
    312         "FractalModel", 
    313         { 
    314             "sld_block": "sldBlock", 
    315             "radius": "radius", 
    316             "cor_length": "cor_length", 
    317             "sld_solvent": "sldSolv", 
    318             "fractal_dim": "fractal_dim" 
    319         } 
    320     ], 
    321     "fractal_core_shell": [ 
    322         "FractalCoreShell", 
    323         { 
    324             "sld_core": "core_sld", 
    325             "sld_shell": "shell_sld", 
    326             "sld_solvent": "solvent_sld", 
    327             "radius": "radius", 
    328             "thickness": "thickness", 
    329             "fractal_dim": "frac_dim", 
    330             "cor_length": "cor_length", 
    331             "volfraction": "volfraction", 
    332         }, 
    333         "FractalCoreShellModel" 
    334     ], 
    335     "fuzzy_sphere": [ 
    336         "FuzzySphereModel", 
    337         { 
    338             "sld": "sldSph", 
    339             "fuzziness": "fuzziness", 
    340             "radius": "radius", 
    341             "sld_solvent": "sldSolv" 
    342         } 
    343     ], 
    344     "gauss_lorentz_gel": [ 
    345         "GaussLorentzGel", 
    346         { 
    347             "gauss_scale": "scale_g", 
    348             "cor_length_dynamic": "dyn_colength", 
    349             "cor_length_static": "stat_colength", 
    350             "background": "background", 
    351             "lorentz_scale": "scale_l" 
    352         }, 
    353         "GaussLorentzGelModel" 
    354     ], 
    355     "gaussian_peak": [ 
    356         "Peak Gauss Model", 
    357         { 
    358             "peak_pos": "q0", 
    359             "sigma": "B", 
    360         }, 
    361         "PeakGaussModel", 
    362     ], 
    363     "gel_fit": [ 
    364         "GelFitModel", 
    365         { 
    366             "rg": "radius", 
    367             "lorentz_scale": "lScale", 
    368             "guinier_scale": "gScale", 
    369             "fractal_dim": "FractalExp", 
    370             "cor_length": "zeta", 
    371         } 
    372     ], 
    373     "guinier": [ 
    374         "Guinier", 
    375         { 
    376             "rg": "rg" 
    377         }, 
    378         "GuinierModel", 
    379     ], 
    380     "guinier_porod": [ 
    381         "GuinierPorod", 
    382         { 
    383             "s": "dim", 
    384             "rg": "rg", 
    385             "porod_exp": "m", 
    386             "scale": "scale", 
    387             "background": "background" 
    388         }, 
    389         "GuinierPorodModel", 
    390     ], 
    391     "hardsphere": [ 
    392         "HardsphereStructure", 
    393         { 
    394             "scale": "scale_factor", 
    395             "radius_effective": "effect_radius", 
    396         } 
    397     ], 
    398     "hayter_msa": [ 
    399         "HayterMSAStructure", 
    400         { 
    401             "scale": "scale_factor", 
    402             "radius_effective": "effect_radius", 
    403             "volfraction": "volfraction", 
    404             "charge": "charge", 
    405             "temperature": "temperature", 
    406             "concentration_salt": "saltconc", 
    407             "dielectconst": "dielectconst", 
    408         } 
    409     ], 
    410     "hollow_cylinder": [ 
    411         "HollowCylinderModel", 
    412         { 
    413             "sld": "sldCyl", 
    414             "sld_solvent": "sldSolv", 
    415             "radius": "core_radius", 
    416             "thickness": "radius", 
    417             "length": "length", 
    418             "theta": "axis_theta", 
    419             "phi": "axis_phi", 
    420         } 
    421     ], 
    422     "hollow_rectangular_prism": [ 
    423         "RectangularHollowPrismModel", 
    424         { 
    425             "sld": "sldPipe", 
    426             "sld_solvent": "sldSolv", 
    427             "length_a": "short_side", 
    428             "b2a_ratio": "b2a_ratio", 
    429             "c2a_ratio": "c2a_ratio", 
    430             "thickness": "thickness", 
    431         } 
    432     ], 
    433     "hollow_rectangular_prism_thin_walls": [ 
    434         "RectangularHollowPrismInfThinWallsModel", 
    435         { 
    436             "sld": "sldPipe", 
    437             "sld_solvent": "sldSolv", 
    438             "length_a": "short_side", 
    439             "b2a_ratio": "b2a_ratio", 
    440             "c2a_ratio": "c2a_ratio", 
    441         } 
    442     ], 
    443     "lamellar": [ 
    444         "LamellarModel", 
    445         { 
    446             "sld": "sld_bi", 
    447             "sld_solvent": "sld_sol", 
    448             "thickness": "bi_thick" 
    449         } 
    450     ], 
    451     "lamellar_hg": [ 
    452         "LamellarFFHGModel", 
    453         { 
    454             "sld": "sld_tail", 
    455             "sld_solvent": "sld_solvent", 
    456             "sld_head": "sld_head", 
    457             "length_tail": "t_length", 
    458             "length_head": "h_thickness" 
    459         } 
    460     ], 
    461     "lamellar_hg_stack_caille": [ 
    462         "LamellarPSHGModel", 
    463         { 
    464             "sld": "sld_tail", 
    465             "sld_head": "sld_head", 
    466             "sld_solvent": "sld_solvent", 
    467             "length_tail": "deltaT", 
    468             "length_head": "deltaH", 
    469             "d_spacing": "spacing", 
    470             "Caille_parameter": "caille", 
    471             "Nlayers": "n_plates", 
    472         } 
    473     ], 
    474     "lamellar_stack_caille": [ 
    475         "LamellarPSModel", 
    476         { 
    477             "sld": "sld_bi", 
    478             "sld_solvent": "sld_sol", 
    479             "thickness": "delta", 
    480             "d_spacing": "spacing", 
    481             "Caille_parameter": "caille", 
    482             "Nlayers": "n_plates", 
    483         } 
    484     ], 
    485     "lamellar_stack_paracrystal": [ 
    486         "LamellarPCrystalModel", 
    487         { 
    488             "sld": "sld_layer", 
    489             "sld_solvent": "sld_solvent", 
    490             "thickness": "thickness", 
    491             "d_spacing": "spacing", 
    492             "sigma_d": "pd_spacing", 
    493             "Nlayers": "Nlayers", 
    494         } 
    495     ], 
    496     "line": [ 
    497         "LineModel", 
    498         { 
    499             "slope": "B", 
    500             "scale": None, 
    501             "background": None, 
    502             "intercept": "A" 
    503         } 
    504     ], 
    505     "linear_pearls": [ 
    506         "LinearPearlsModel", 
    507         { 
    508             "sld": "sld_pearl", 
    509             "sld_solvent": "sld_solv", 
    510             "edge_sep": "edge_separation" 
    511         } 
    512     ], 
    513     "lorentz": [ 
    514         "Lorentz", 
    515         { 
    516             "cor_length": "length" 
    517         }, 
    518         "LorentzModel", 
    519     ], 
    520     "mass_fractal": [ 
    521         "MassFractalModel", 
    522         { 
    523             "cutoff_length": "co_length", 
    524             "radius": "radius", 
    525             "fractal_dim_mass": "mass_dim" 
    526         } 
    527     ], 
    528     "mass_surface_fractal": [ 
    529         "MassSurfaceFractal", 
    530         { 
    531             "rg_cluster": "cluster_rg", 
    532             "fractal_dim_mass": "mass_dim", 
    533             "radius": "radius", 
    534             "fractal_dim_surf": "surface_dim", 
    535             "rg_primary": "primary_rg" 
    536         } 
    537     ], 
    538     "mono_gauss_coil": [ 
    539         "Debye", 
    540         { 
    541             "rg": "rg", 
    542             "i_zero": "scale", 
    543             "background": "background", 
    544         }, 
    545         "DebyeModel", 
    546     ], 
    547     "multilayer_vesicle": [ 
    548         "MultiShellModel", 
    549         { 
    550             "radius": "core_radius", 
    551             "sld_solvent": "core_sld", 
    552             "n_shells": "n_pairs", 
    553             "thick_shell": "s_thickness", 
    554             "sld": "shell_sld", 
    555             "thick_solvent": "w_thickness", 
    556         } 
    557     ], 
    558     "onion": [ 
    559         "OnionExpShellModel", 
    560         { 
    561             "n_shells": "n_shells", 
    562             "A": "A_shell", 
    563             "sld_core": "sld_core0", 
    564             "radius_core": "rad_core0", 
    565             "sld_solvent": "sld_solv", 
    566             "thickness": "thick_shell", 
    567             "sld_in": "sld_in_shell", 
    568             "sld_out": "sld_out_shell" 
    569         } 
    570     ], 
    571     "parallelepiped": [ 
    572         "ParallelepipedModel", 
    573         { 
    574             "phi": "parallel_phi", 
    575             "psi": "parallel_psi", 
    576             "sld_solvent": "sldSolv", 
    577             "length_a": "short_a", 
    578             "length_b": "short_b", 
    579             "sld": "sldPipe", 
    580             "theta": "parallel_theta", 
    581             "length_c": "long_c", 
    582             "M0:sld": "M0_sld_pipe", 
    583             "mtheta:sld": "M_theta_pipe", 
    584             "mphi:sld": "M_phi_pipe", 
    585             "M0:sld_solvent": "M0_sld_solv", 
    586             "mtheta:sld_solvent": "M_theta_solv", 
    587             "mphi:sld_solvent": "M_phi_solv", 
    588             "up:frac_i": "Up_frac_i", 
    589             "up:frac_f": "Up_frac_f", 
    590             "up:angle": "Up_theta", 
    591         } 
    592     ], 
    593     "peak_lorentz": [ 
    594         "Peak Lorentz Model", 
    595         { 
    596             "peak_pos": "q0", 
    597             "peak_hwhm": "B" 
    598         }, 
    599         "PeakLorentzModel", 
    600     ], 
    601     "pearl_necklace": [ 
    602         "PearlNecklaceModel", 
    603         { 
    604             "scale": "scale", 
    605             "thick_string": "thick_string", 
    606             "sld_string": "sld_string", 
    607             "sld_solvent": "sld_solv", 
    608             "edge_sep": "edge_separation", 
    609             "num_pearls": "num_pearls", 
    610             "radius": "radius", 
    611             "background": "background", 
    612             "sld": "sld_pearl" 
    613         } 
    614     ], 
    615     "poly_gauss_coil": [ 
    616         "Poly_GaussCoil", 
    617         { 
    618             "rg": "rg", 
    619             "polydispersity": "poly_m", 
    620             "i_zero": "scale", 
    621             "background": "background", 
    622         } 
    623     ], 
    624     "polymer_excl_volume": [ 
    625         "PolymerExclVolume", 
    626         { 
    627             "rg": "rg", 
    628             "scale": "scale", 
    629             "background": "background", 
    630             "porod_exp": "m" 
    631         } 
    632     ], 
    633     "polymer_micelle": [ 
    634         "MicelleSphCoreModel", 
    635         { 
    636             "sld_corona": "rho_corona", 
    637             "sld_solvent": "rho_solv", 
    638             "sld_core": "rho_core", 
    639             "ndensity": "ndensity", 
    640             "v_core": "v_core", 
    641             "v_corona": "v_corona", 
    642             "radius_core": "radius_core", 
    643             "rg": "radius_gyr", 
    644             "d_penetration": "d_penetration", 
    645             "n_aggreg": "n_aggreg", 
    646         } 
    647     ], 
    648     "porod": [ 
    649         "PorodModel", 
    650         { 
    651             "scale": "scale", 
    652             "background": "background" 
    653         } 
    654     ], 
    655     "power_law": [ 
    656         "PowerLawAbsModel", 
    657         { 
    658             "scale": "scale", 
    659             "background": "background", 
    660             "power": "m" 
    661         } 
    662     ], 
    663     "pringle": [ 
    664         "PringlesModel", 
    665         { 
    666             "scale": "scale", 
    667             "sld_solvent": "sld_solvent", 
    668             "thickness": "thickness", 
    669             "beta": "beta", 
    670             "radius": "radius", 
    671             "background": "background", 
    672             "alpha": "alpha", 
    673             "sld": "sld_pringle" 
    674         } 
    675     ], 
    676     "raspberry": [ 
    677         "RaspBerryModel", 
    678         { 
    679             "volfraction_lg": "volf_Lsph", 
    680             "volfraction_sm": "volf_Ssph", 
    681             "radius_sm": "radius_Ssph", 
    682             "radius_lg": "radius_Lsph", 
    683             "sld_lg": "sld_Lsph", 
    684             "sld_sm": "sld_Ssph", 
    685             "sld_solvent": "sld_solv", 
    686             "surface_fraction": "surfrac_Ssph", 
    687             "penetration": "delta_Ssph" 
    688         } 
    689     ], 
    690     "rectangular_prism": [ 
    691         "RectangularPrismModel", 
    692         { 
    693             "sld": "sldPipe", 
    694             "length_a": "short_side", 
    695             "b2a_ratio": "b2a_ratio", 
    696             "c2a_ratio": "c2a_ratio", 
    697             "sld_solvent": "sldSolv" 
    698         } 
    699     ], 
    700     "rpa": [ 
    701         "RPA10Model", 
    702         { 
    703             "K12": "Kab", "K13": "Kac", "K14": "Kad", 
    704             "K23": "Kbc", "K24": "Kbd", "K34": "Kcd", 
    705             "N1": "Na", "N2": "Nb", "N3": "Nc", "N4": "Nd", 
    706             "L1": "La", "L2": "Lb", "L3": "Lc", "L4": "Ld", 
    707             "v1": "va", "v2": "vb", "v3": "vc", "v4": "vd", 
    708             "b1": "ba", "b2": "bb", "b3": "bc", "b4": "bd", 
    709             "Phi1": "Phia", "Phi2": "Phib", "Phi3": "Phic", "Phi4": "Phid", 
    710             "case_num": "lcase_n" 
    711         } 
    712     ], 
    713     "sc_paracrystal": [ 
    714         "SCCrystalModel", 
    715         { 
    716             "sld": "sldSph", 
    717             "sld_solvent": "sldSolv" 
    718         } 
    719     ], 
    720     "sphere": [ 
    721         "SphereModel", 
    722         { 
    723             "sld": "sldSph", 
    724             "radius": "radius", 
    725             "sld_solvent": "sldSolv", 
    726             "M0:sld": "M0_sld_sph", 
    727             "mtheta:sld": "M_theta_sph", 
    728             "mphi:sld": "M_phi_sph", 
    729             "M0:sld_solvent": "M0_sld_solv", 
    730             "mtheta:sld_solvent": "M_theta_solv", 
    731             "mphi:sld_solvent": "M_phi_solv", 
    732             "up:frac_i": "Up_frac_i", 
    733             "up:frac_f": "Up_frac_f", 
    734             "up:angle": "Up_theta" 
    735         } 
    736     ], 
    737     "spherical_sld": [ 
    738         "SphericalSLDModel", 
    739         # Be lazy and use a generator expression to define 
    740         #    sld1: sld_flat0, ... 
    741         #    thickness1: thick_flat0, ... 
    742         #    interface1: thick_inter0, ... 
    743         #    shape1: func_inter0, ... 
    744         #    nu1: nu_inter0, ... 
    745         # but override thickness1 => rad_cor0 and sld1 => sld_core0. 
    746         # Note: explicit key,value pairs given by **{...} override the 
    747         # keys from the gnerator expression ((k,v) for k,v in seq) when 
    748         # used as dict((generator), **{...}) 
    749         dict(((field_new+str(index+1), field_old+str(index)) 
    750               for field_new, field_old in [("sld", "sld_flat"), 
    751                                            ("thickness", "thick_flat"), 
    752                                            ("interface", "thick_inter"), 
    753                                            ("shape", "func_inter"), 
    754                                            ("nu", "nu_inter"),] 
    755               for index in range(11)), 
    756              **{ 
    757                    "n_shells": "n_shells", 
    758                    "n_steps": "npts_inter", 
    759                    "sld_solvent": "sld_solv", 
    760                    "thickness1": "rad_core0", 
    761                    "sld1": "sld_core0", 
    762                }) 
    763     ], 
    764     "squarewell": [ 
    765         "SquareWellStructure", 
    766         { 
    767             "scale": "scale_factor", 
    768             "radius_effective": "effect_radius", 
    769             "wellwidth": "wellwidth", 
    770             "welldepth": "welldepth", 
    771         } 
    772     ], 
    773     "stacked_disks": [ 
    774         "StackedDisksModel", 
    775         { 
    776             "phi": "axis_phi", 
    777             "sld_layer": "layer_sld", 
    778             "sld_core": "core_sld", 
    779             "theta": "axis_theta", 
    780             "sld_solvent": "solvent_sld", 
    781             "n_stacking": "n_stacking", 
    782             "thick_layer": "layer_thick", 
    783             "thick_core": "core_thick", 
    784         } 
    785     ], 
    786     "star_polymer": [ 
    787         "StarPolymer", 
    788         { 
    789             "arms": "arms", 
    790             "rg_squared": "R2" 
    791         } 
    792     ], 
    793     "stickyhardsphere": [ 
    794         "StickyHSStructure", 
    795         { 
    796             "scale": "scale_factor", 
    797             "radius_effective": "effect_radius", 
    798         } 
    799     ], 
    800     "surface_fractal": [ 
    801         "SurfaceFractalModel", 
    802         { 
    803             "cutoff_length": "co_length", 
    804             "radius": "radius", 
    805             "fractal_dim_surf": "surface_dim" 
    806         } 
    807     ], 
    808     "teubner_strey": [ 
    809         "TeubnerStreyModel", 
    810         { 
    811             # Note: parameters are completely rewritten in convert.py 
    812             "volfraction_a": "volfraction_a", 
    813             "sld_a": "sld_a", 
    814             "sld_b": "sld_b", 
    815             "d": "d", 
    816             "xi": "xi", 
    817         } 
    818     ], 
    819     "triaxial_ellipsoid": [ 
    820         "TriaxialEllipsoidModel", 
    821         { 
    822             "phi": "axis_phi", 
    823             "radius_equat_minor": "semi_axisA", 
    824             "radius_polar": "semi_axisC", 
    825             "radius_equat_major": "semi_axisB", 
    826             "sld_solvent": "sldSolv", 
    827             "psi": "axis_psi", 
    828             "sld": "sldEll", 
    829             "theta": "axis_theta" 
    830         } 
    831     ], 
    832     "two_lorentzian": [ 
    833         "TwoLorentzian", 
    834         { 
    835             "lorentz_scale_1": "scale_1", 
    836             "lorentz_scale_2": "scale_2", 
    837             "lorentz_exp_1": "exponent_1", 
    838             "lorentz_exp_2": "exponent_2", 
    839             "lorentz_length_2": "length_2", 
    840             "lorentz_length_1": "length_1", 
    841             "background": "background" 
    842         }, 
    843         "TwoLorentzianModel", 
    844     ], 
    845     "two_power_law": [ 
    846         "TwoPowerLaw", 
    847         { 
    848             "coefficent_1": "coef_A", 
    849             "power_2": "power2", 
    850             "power_1": "power1", 
    851             "background": "background", 
    852             "crossover": "qc" 
    853         }, 
    854         "TwoPowerLawModel", 
    855     ], 
    856     "unified_power_Rg": [ 
    857         "UnifiedPowerRg", 
    858         dict(((field_new+str(index), field_old+str(index)) 
    859               for field_new, field_old in [("rg", "Rg"), 
    860                                            ("power", "power"), 
    861                                            ("G", "G"), 
    862                                            ("B", "B"),] 
    863               for index in range(11)), 
    864              **{ 
    865                    "background": "background", 
    866                    "scale": "scale", 
    867                }), 
    868         "UnifiedPowerRgModel", 
    869     ], 
    870     "vesicle": [ 
    871         "VesicleModel", 
    872         { 
    873             "sld": "shell_sld", 
    874             "sld_solvent": "solv_sld" 
    875         } 
    876     ] 
     31    (3, 1, 2) : { 
     32        "adsorbed_layer": [ 
     33            "Core2ndMomentModel", 
     34            { 
     35                "scale": "scale", 
     36                "second_moment": "second_moment", 
     37                "density_shell": "density_poly", 
     38                "sld_solvent": "sld_solv", 
     39                "radius": "radius_core", 
     40                "volfraction": "volf_cores", 
     41                "background": "background", 
     42                "adsorbed_amount": "ads_amount", 
     43                "sld_shell": "sld_poly" 
     44            } 
     45        ], 
     46        "barbell": [ 
     47            "BarBellModel", 
     48            { 
     49                "sld": "sld_barbell", 
     50                "length": "len_bar", 
     51                "radius_bell": "rad_bell", 
     52                "radius": "rad_bar", 
     53                "sld_solvent": "sld_solv" 
     54            } 
     55        ], 
     56        "bcc_paracrystal": [ 
     57            "BCCrystalModel", 
     58            { 
     59                "sld": "sldSph", 
     60                "sld_solvent": "sldSolv" 
     61            } 
     62        ], 
     63        "be_polyelectrolyte": [ 
     64            "BEPolyelectrolyte", 
     65            { 
     66                "ionization_degree": "alpha", 
     67                "polymer_concentration": "c", 
     68                "salt_concentration": "cs", 
     69                "virial_param": "h", 
     70                "background": "background", 
     71                "contrast_factor": "k", 
     72                "bjerrum_length": "lb", 
     73                "monomer_length": "b" 
     74            } 
     75        ], 
     76        "binary_hard_sphere": [ 
     77            "BinaryHSModel", 
     78            { 
     79                "sld_sm": "ss_sld", 
     80                "sld_lg": "ls_sld", 
     81                "volfraction_sm": "vol_frac_ss", 
     82                "radius_lg": "l_radius", 
     83                "radius_sm": "s_radius", 
     84                "volfraction_lg": "vol_frac_ls", 
     85                "sld_solvent": "solvent_sld" 
     86            } 
     87        ], 
     88        "broad_peak": [ 
     89            "BroadPeakModel", 
     90            { 
     91                "peak_pos": "q_peak", 
     92                "scale": None, 
     93                "lorentz_length": "length_l", 
     94                "porod_scale": "scale_p", 
     95                "lorentz_exp": "exponent_l", 
     96                "lorentz_scale": "scale_l", 
     97                "porod_exp": "exponent_p" 
     98            } 
     99        ], 
     100        "capped_cylinder": [ 
     101            "CappedCylinderModel", 
     102            { 
     103                "sld": "sld_capcyl", 
     104                "length": "len_cyl", 
     105                "radius_cap": "rad_cap", 
     106                "radius": "rad_cyl", 
     107                "sld_solvent": "sld_solv" 
     108            } 
     109        ], 
     110        "core_multi_shell": [ 
     111            "CoreMultiShellModel", 
     112            { 
     113                "thickness": "thick_shell", 
     114                "sld": "sld_shell", 
     115                "radius": "rad_core0", 
     116                "sld_core": "sld_core0", 
     117                "sld_solvent": "sld_solv", 
     118                "n": "n_shells", 
     119                "M0:sld_core": "M0_sld_core0", 
     120                "mtheta:sld_core": "M_theta_core0", 
     121                "mphi:sld_core": "M_phi_core0", 
     122                "M0:sld1": "M0_sld_shell1", 
     123                "mtheta:sld1": "M_theta_shell1", 
     124                "mphi:sld1": "M_phi_shell1", 
     125                "M0:sld2": "M0_sld_shell2", 
     126                "mtheta:sld2": "M_theta_shell2", 
     127                "mphi:sld2": "M_phi_shell2", 
     128                "M0:sld3": "M0_sld_shell3", 
     129                "mtheta:sld3": "M_theta_shell3", 
     130                "mphi:sld3": "M_phi_shell3", 
     131                "M0:sld4": "M0_sld_shell4", 
     132                "mtheta:sld4": "M_theta_shell4", 
     133                "mphi:sld4": "M_phi_shell4", 
     134                "M0:sld_solvent": "M0_sld_solv", 
     135                "mtheta:sld_solvent": "M_theta_solv", 
     136                "mphi:sld_solvent": "M_phi_solv", 
     137                "up:frac_i": "Up_frac_i", 
     138                "up:frac_f": "Up_frac_f", 
     139                "up:angle": "Up_theta", 
     140            } 
     141        ], 
     142        "core_shell_bicelle": [ 
     143            "CoreShellBicelleModel", 
     144            { 
     145                "phi": "axis_phi", 
     146                "sld_core": "core_sld", 
     147                "sld_rim": "rim_sld", 
     148                "thick_face": "face_thick", 
     149                "sld_solvent": "solvent_sld", 
     150                "thick_rim": "rim_thick", 
     151                "sld_face": "face_sld", 
     152                "theta": "axis_theta" 
     153            } 
     154        ], 
     155        "core_shell_cylinder": [ 
     156            "CoreShellCylinderModel", 
     157            { 
     158                "theta": "axis_theta", 
     159                "phi": "axis_phi", 
     160                "sld_shell": "shell_sld", 
     161                "sld_solvent": "solvent_sld", 
     162                "sld_core": "core_sld" 
     163            } 
     164        ], 
     165        "core_shell_ellipsoid:1": [ 
     166            "CoreShellEllipsoidModel", 
     167            { 
     168                "sld_core": "sld_core", 
     169                "sld_shell": "sld_shell", 
     170                "sld_solvent": "sld_solvent", 
     171                "radius_equat_core": "equat_core", 
     172                "x_core": "polar_core", 
     173                "thick_shell": "equat_shell", 
     174                "x_polar_shell": "polar_shell", 
     175                "theta": "axis_theta", 
     176                "phi": "axis_phi", 
     177            } 
     178        ], 
     179        "core_shell_ellipsoid": [ 
     180            "CoreShellEllipsoidXTModel", 
     181            { 
     182                "sld_core": "sld_core", 
     183                "sld_shell": "sld_shell", 
     184                "sld_solvent": "sld_solvent", 
     185                "radius_equat_core": "equat_core", 
     186                "thick_shell": "T_shell", 
     187                "x_core": "X_core", 
     188                "x_polar_shell": "XpolarShell", 
     189                "theta": "axis_theta", 
     190                "phi": "axis_phi", 
     191            } 
     192        ], 
     193        "core_shell_parallelepiped": [ 
     194            "CSParallelepipedModel", 
     195            { 
     196                "sld_core": "sld_pcore", 
     197                "sld_a": "sld_rimA", 
     198                "sld_b": "sld_rimB", 
     199                "sld_c": "sld_rimC", 
     200                "sld_solvent": "sld_solv", 
     201                "length_a": "shortA", 
     202                "length_b": "midB", 
     203                "length_c": "longC", 
     204                "thick_rim_a": "rimA", 
     205                "thick_rim_c": "rimC", 
     206                "thick_rim_b": "rimB", 
     207                "theta": "parallel_theta", 
     208                "phi": "parallel_phi", 
     209                "psi": "parallel_psi", 
     210            } 
     211        ], 
     212        "core_shell_sphere": [ 
     213            "CoreShellModel", 
     214            { 
     215                "sld_core": "core_sld", 
     216                "sld_shell": "shell_sld", 
     217                "sld_solvent": "solvent_sld", 
     218                "M0:sld_core": "M0_sld_core", 
     219                "mtheta:sld_core": "M_theta_core", 
     220                "mphi:sld_core": "M_phi_core", 
     221                "M0:sld_shell": "M0_sld_shell", 
     222                "mtheta:sld_shell": "M_theta_shell", 
     223                "mphi:sld_shell": "M_phi_shell", 
     224                "M0:sld_solvent": "M0_sld_solv", 
     225                "mtheta:sld_solvent": "M_theta_solv", 
     226                "mphi:sld_solvent": "M_phi_solv", 
     227                "up:frac_i": "Up_frac_i", 
     228                "up:frac_f": "Up_frac_f", 
     229                "up:angle": "Up_theta" 
     230            } 
     231        ], 
     232        "correlation_length": [ 
     233            "CorrLength", 
     234            { 
     235                "porod_scale": "scale_p", 
     236                "lorentz_scale": "scale_l", 
     237                "porod_exp": "exponent_p", 
     238                "lorentz_exp": "exponent_l", 
     239                "cor_length": "length_l" 
     240            }, 
     241            "CorrLengthModel" 
     242        ], 
     243        "cylinder": [ 
     244            "CylinderModel", 
     245            { 
     246                "sld": "sldCyl", 
     247                "theta": "cyl_theta", 
     248                "phi": "cyl_phi", 
     249                "sld_solvent": "sldSolv", 
     250                "M0:sld": "M0_sld_cyl", 
     251                "mtheta:sld": "M_theta_cyl", 
     252                "mphi:sld": "M_phi_cyl", 
     253                "M0:sld_solvent": "M0_sld_solv", 
     254                "mtheta:sld_solvent": "M_theta_solv", 
     255                "mphi:sld_solvent": "M_phi_solv", 
     256                "up:frac_i": "Up_frac_i", 
     257                "up:frac_f": "Up_frac_f", 
     258                "up:angle": "Up_theta" 
     259            } 
     260        ], 
     261        "dab": [ 
     262            "DABModel", 
     263            { 
     264                "cor_length": "length" 
     265            } 
     266        ], 
     267        "ellipsoid": [ 
     268            "EllipsoidModel", 
     269            { 
     270                "phi": "axis_phi", 
     271                "radius_equatorial": "radius_b", 
     272                "sld": "sldEll", 
     273                "theta": "axis_theta", 
     274                "radius_polar": "radius_a", 
     275                "sld_solvent": "sldSolv" 
     276            } 
     277        ], 
     278        "elliptical_cylinder": [ 
     279            "EllipticalCylinderModel", 
     280            { 
     281                "axis_ratio": "r_ratio", 
     282                "radius_minor": "r_minor", 
     283                "sld": "sldCyl", 
     284                "sld_solvent": "sldSolv", 
     285                "theta": "cyl_theta", 
     286                "phi": "cyl_phi", 
     287                "psi": "cyl_psi", 
     288            } 
     289        ], 
     290        "fcc_paracrystal": [ 
     291            "FCCrystalModel", 
     292            { 
     293                "sld": "sldSph", 
     294                "sld_solvent": "sldSolv" 
     295            } 
     296        ], 
     297        "flexible_cylinder": [ 
     298            "FlexibleCylinderModel", 
     299            { 
     300                "sld": "sldCyl", 
     301                "sld_solvent": "sldSolv" 
     302            } 
     303        ], 
     304        "flexible_cylinder_elliptical": [ 
     305            "FlexCylEllipXModel", 
     306            { 
     307                "sld": "sldCyl", 
     308                "sld_solvent": "sldSolv" 
     309            } 
     310        ], 
     311        "fractal": [ 
     312            "FractalModel", 
     313            { 
     314                "sld_block": "sldBlock", 
     315                "radius": "radius", 
     316                "cor_length": "cor_length", 
     317                "sld_solvent": "sldSolv", 
     318                "fractal_dim": "fractal_dim" 
     319            } 
     320        ], 
     321        "fractal_core_shell": [ 
     322            "FractalCoreShell", 
     323            { 
     324                "sld_core": "core_sld", 
     325                "sld_shell": "shell_sld", 
     326                "sld_solvent": "solvent_sld", 
     327                "radius": "radius", 
     328                "thickness": "thickness", 
     329                "fractal_dim": "frac_dim", 
     330                "cor_length": "cor_length", 
     331                "volfraction": "volfraction", 
     332            }, 
     333            "FractalCoreShellModel" 
     334        ], 
     335        "fuzzy_sphere": [ 
     336            "FuzzySphereModel", 
     337            { 
     338                "sld": "sldSph", 
     339                "fuzziness": "fuzziness", 
     340                "radius": "radius", 
     341                "sld_solvent": "sldSolv" 
     342            } 
     343        ], 
     344        "gauss_lorentz_gel": [ 
     345            "GaussLorentzGel", 
     346            { 
     347                "gauss_scale": "scale_g", 
     348                "cor_length_dynamic": "dyn_colength", 
     349                "cor_length_static": "stat_colength", 
     350                "background": "background", 
     351                "lorentz_scale": "scale_l" 
     352            }, 
     353            "GaussLorentzGelModel" 
     354        ], 
     355        "gaussian_peak": [ 
     356            "Peak Gauss Model", 
     357            { 
     358                "peak_pos": "q0", 
     359                "sigma": "B", 
     360            }, 
     361            "PeakGaussModel", 
     362        ], 
     363        "gel_fit": [ 
     364            "GelFitModel", 
     365            { 
     366                "rg": "radius", 
     367                "lorentz_scale": "lScale", 
     368                "guinier_scale": "gScale", 
     369                "fractal_dim": "FractalExp", 
     370                "cor_length": "zeta", 
     371            } 
     372        ], 
     373        "guinier": [ 
     374            "Guinier", 
     375            { 
     376                "rg": "rg" 
     377            }, 
     378            "GuinierModel", 
     379        ], 
     380        "guinier_porod": [ 
     381            "GuinierPorod", 
     382            { 
     383                "s": "dim", 
     384                "rg": "rg", 
     385                "porod_exp": "m", 
     386                "scale": "scale", 
     387                "background": "background" 
     388            }, 
     389            "GuinierPorodModel", 
     390        ], 
     391        "hardsphere": [ 
     392            "HardsphereStructure", 
     393            { 
     394                "scale": "scale_factor", 
     395                "radius_effective": "effect_radius", 
     396            } 
     397        ], 
     398        "hayter_msa": [ 
     399            "HayterMSAStructure", 
     400            { 
     401                "scale": "scale_factor", 
     402                "radius_effective": "effect_radius", 
     403                "volfraction": "volfraction", 
     404                "charge": "charge", 
     405                "temperature": "temperature", 
     406                "concentration_salt": "saltconc", 
     407                "dielectconst": "dielectconst", 
     408            } 
     409        ], 
     410        "hollow_cylinder": [ 
     411            "HollowCylinderModel", 
     412            { 
     413                "sld": "sldCyl", 
     414                "sld_solvent": "sldSolv", 
     415                "radius": "core_radius", 
     416                "thickness": "radius", 
     417                "length": "length", 
     418                "theta": "axis_theta", 
     419                "phi": "axis_phi", 
     420            } 
     421        ], 
     422        "hollow_rectangular_prism": [ 
     423            "RectangularHollowPrismModel", 
     424            { 
     425                "sld": "sldPipe", 
     426                "sld_solvent": "sldSolv", 
     427                "length_a": "short_side", 
     428                "b2a_ratio": "b2a_ratio", 
     429                "c2a_ratio": "c2a_ratio", 
     430                "thickness": "thickness", 
     431            } 
     432        ], 
     433        "hollow_rectangular_prism_thin_walls": [ 
     434            "RectangularHollowPrismInfThinWallsModel", 
     435            { 
     436                "sld": "sldPipe", 
     437                "sld_solvent": "sldSolv", 
     438                "length_a": "short_side", 
     439                "b2a_ratio": "b2a_ratio", 
     440                "c2a_ratio": "c2a_ratio", 
     441            } 
     442        ], 
     443        "lamellar": [ 
     444            "LamellarModel", 
     445            { 
     446                "sld": "sld_bi", 
     447                "sld_solvent": "sld_sol", 
     448                "thickness": "bi_thick" 
     449            } 
     450        ], 
     451        "lamellar_hg": [ 
     452            "LamellarFFHGModel", 
     453            { 
     454                "sld": "sld_tail", 
     455                "sld_solvent": "sld_solvent", 
     456                "sld_head": "sld_head", 
     457                "length_tail": "t_length", 
     458                "length_head": "h_thickness" 
     459            } 
     460        ], 
     461        "lamellar_hg_stack_caille": [ 
     462            "LamellarPSHGModel", 
     463            { 
     464                "sld": "sld_tail", 
     465                "sld_head": "sld_head", 
     466                "sld_solvent": "sld_solvent", 
     467                "length_tail": "deltaT", 
     468                "length_head": "deltaH", 
     469                "d_spacing": "spacing", 
     470                "Caille_parameter": "caille", 
     471                "Nlayers": "n_plates", 
     472            } 
     473        ], 
     474        "lamellar_stack_caille": [ 
     475            "LamellarPSModel", 
     476            { 
     477                "sld": "sld_bi", 
     478                "sld_solvent": "sld_sol", 
     479                "thickness": "delta", 
     480                "d_spacing": "spacing", 
     481                "Caille_parameter": "caille", 
     482                "Nlayers": "n_plates", 
     483            } 
     484        ], 
     485        "lamellar_stack_paracrystal": [ 
     486            "LamellarPCrystalModel", 
     487            { 
     488                "sld": "sld_layer", 
     489                "sld_solvent": "sld_solvent", 
     490                "thickness": "thickness", 
     491                "d_spacing": "spacing", 
     492                "sigma_d": "pd_spacing", 
     493                "Nlayers": "Nlayers", 
     494            } 
     495        ], 
     496        "line": [ 
     497            "LineModel", 
     498            { 
     499                "slope": "B", 
     500                "scale": None, 
     501                "background": None, 
     502                "intercept": "A" 
     503            } 
     504        ], 
     505        "linear_pearls": [ 
     506            "LinearPearlsModel", 
     507            { 
     508                "sld": "sld_pearl", 
     509                "sld_solvent": "sld_solv", 
     510                "edge_sep": "edge_separation" 
     511            } 
     512        ], 
     513        "lorentz": [ 
     514            "Lorentz", 
     515            { 
     516                "cor_length": "length" 
     517            }, 
     518            "LorentzModel", 
     519        ], 
     520        "mass_fractal": [ 
     521            "MassFractalModel", 
     522            { 
     523                "cutoff_length": "co_length", 
     524                "radius": "radius", 
     525                "fractal_dim_mass": "mass_dim" 
     526            } 
     527        ], 
     528        "mass_surface_fractal": [ 
     529            "MassSurfaceFractal", 
     530            { 
     531                "rg_cluster": "cluster_rg", 
     532                "fractal_dim_mass": "mass_dim", 
     533                "radius": "radius", 
     534                "fractal_dim_surf": "surface_dim", 
     535                "rg_primary": "primary_rg" 
     536            } 
     537        ], 
     538        "mono_gauss_coil": [ 
     539            "Debye", 
     540            { 
     541                "rg": "rg", 
     542                "i_zero": "scale", 
     543                "background": "background", 
     544            }, 
     545            "DebyeModel", 
     546        ], 
     547        "multilayer_vesicle": [ 
     548            "MultiShellModel", 
     549            { 
     550                "radius": "core_radius", 
     551                "sld_solvent": "core_sld", 
     552                "n_shells": "n_pairs", 
     553                "thick_shell": "s_thickness", 
     554                "sld": "shell_sld", 
     555                "thick_solvent": "w_thickness", 
     556            } 
     557        ], 
     558        "onion": [ 
     559            "OnionExpShellModel", 
     560            { 
     561                "n_shells": "n_shells", 
     562                "A": "A_shell", 
     563                "sld_core": "sld_core0", 
     564                "radius_core": "rad_core0", 
     565                "sld_solvent": "sld_solv", 
     566                "thickness": "thick_shell", 
     567                "sld_in": "sld_in_shell", 
     568                "sld_out": "sld_out_shell" 
     569            } 
     570        ], 
     571        "parallelepiped": [ 
     572            "ParallelepipedModel", 
     573            { 
     574                "phi": "parallel_phi", 
     575                "psi": "parallel_psi", 
     576                "sld_solvent": "sldSolv", 
     577                "length_a": "short_a", 
     578                "length_b": "short_b", 
     579                "sld": "sldPipe", 
     580                "theta": "parallel_theta", 
     581                "length_c": "long_c", 
     582                "M0:sld": "M0_sld_pipe", 
     583                "mtheta:sld": "M_theta_pipe", 
     584                "mphi:sld": "M_phi_pipe", 
     585                "M0:sld_solvent": "M0_sld_solv", 
     586                "mtheta:sld_solvent": "M_theta_solv", 
     587                "mphi:sld_solvent": "M_phi_solv", 
     588                "up:frac_i": "Up_frac_i", 
     589                "up:frac_f": "Up_frac_f", 
     590                "up:angle": "Up_theta", 
     591            } 
     592        ], 
     593        "peak_lorentz": [ 
     594            "Peak Lorentz Model", 
     595            { 
     596                "peak_pos": "q0", 
     597                "peak_hwhm": "B" 
     598            }, 
     599            "PeakLorentzModel", 
     600        ], 
     601        "pearl_necklace": [ 
     602            "PearlNecklaceModel", 
     603            { 
     604                "scale": "scale", 
     605                "thick_string": "thick_string", 
     606                "sld_string": "sld_string", 
     607                "sld_solvent": "sld_solv", 
     608                "edge_sep": "edge_separation", 
     609                "num_pearls": "num_pearls", 
     610                "radius": "radius", 
     611                "background": "background", 
     612                "sld": "sld_pearl" 
     613            } 
     614        ], 
     615        "poly_gauss_coil": [ 
     616            "Poly_GaussCoil", 
     617            { 
     618                "rg": "rg", 
     619                "polydispersity": "poly_m", 
     620                "i_zero": "scale", 
     621                "background": "background", 
     622            } 
     623        ], 
     624        "polymer_excl_volume": [ 
     625            "PolymerExclVolume", 
     626            { 
     627                "rg": "rg", 
     628                "scale": "scale", 
     629                "background": "background", 
     630                "porod_exp": "m" 
     631            } 
     632        ], 
     633        "polymer_micelle": [ 
     634            "MicelleSphCoreModel", 
     635            { 
     636                "sld_corona": "rho_corona", 
     637                "sld_solvent": "rho_solv", 
     638                "sld_core": "rho_core", 
     639                "ndensity": "ndensity", 
     640                "v_core": "v_core", 
     641                "v_corona": "v_corona", 
     642                "radius_core": "radius_core", 
     643                "rg": "radius_gyr", 
     644                "d_penetration": "d_penetration", 
     645                "n_aggreg": "n_aggreg", 
     646            } 
     647        ], 
     648        "porod": [ 
     649            "PorodModel", 
     650            { 
     651                "scale": "scale", 
     652                "background": "background" 
     653            } 
     654        ], 
     655        "power_law": [ 
     656            "PowerLawAbsModel", 
     657            { 
     658                "scale": "scale", 
     659                "background": "background", 
     660                "power": "m" 
     661            } 
     662        ], 
     663        "pringle": [ 
     664            "PringlesModel", 
     665            { 
     666                "scale": "scale", 
     667                "sld_solvent": "sld_solvent", 
     668                "thickness": "thickness", 
     669                "beta": "beta", 
     670                "radius": "radius", 
     671                "background": "background", 
     672                "alpha": "alpha", 
     673                "sld": "sld_pringle" 
     674            } 
     675        ], 
     676        "raspberry": [ 
     677            "RaspBerryModel", 
     678            { 
     679                "volfraction_lg": "volf_Lsph", 
     680                "volfraction_sm": "volf_Ssph", 
     681                "radius_sm": "radius_Ssph", 
     682                "radius_lg": "radius_Lsph", 
     683                "sld_lg": "sld_Lsph", 
     684                "sld_sm": "sld_Ssph", 
     685                "sld_solvent": "sld_solv", 
     686                "surface_fraction": "surfrac_Ssph", 
     687                "penetration": "delta_Ssph" 
     688            } 
     689        ], 
     690        "rectangular_prism": [ 
     691            "RectangularPrismModel", 
     692            { 
     693                "sld": "sldPipe", 
     694                "length_a": "short_side", 
     695                "b2a_ratio": "b2a_ratio", 
     696                "c2a_ratio": "c2a_ratio", 
     697                "sld_solvent": "sldSolv" 
     698            } 
     699        ], 
     700        "rpa": [ 
     701            "RPA10Model", 
     702            { 
     703                "K12": "Kab", "K13": "Kac", "K14": "Kad", 
     704                "K23": "Kbc", "K24": "Kbd", "K34": "Kcd", 
     705                "N1": "Na", "N2": "Nb", "N3": "Nc", "N4": "Nd", 
     706                "L1": "La", "L2": "Lb", "L3": "Lc", "L4": "Ld", 
     707                "v1": "va", "v2": "vb", "v3": "vc", "v4": "vd", 
     708                "b1": "ba", "b2": "bb", "b3": "bc", "b4": "bd", 
     709                "Phi1": "Phia", "Phi2": "Phib", "Phi3": "Phic", "Phi4": "Phid", 
     710                "case_num": "lcase_n" 
     711            } 
     712        ], 
     713        "sc_paracrystal": [ 
     714            "SCCrystalModel", 
     715            { 
     716                "sld": "sldSph", 
     717                "sld_solvent": "sldSolv" 
     718            } 
     719        ], 
     720        "sphere": [ 
     721            "SphereModel", 
     722            { 
     723                "sld": "sldSph", 
     724                "radius": "radius", 
     725                "sld_solvent": "sldSolv", 
     726                "M0:sld": "M0_sld_sph", 
     727                "mtheta:sld": "M_theta_sph", 
     728                "mphi:sld": "M_phi_sph", 
     729                "M0:sld_solvent": "M0_sld_solv", 
     730                "mtheta:sld_solvent": "M_theta_solv", 
     731                "mphi:sld_solvent": "M_phi_solv", 
     732                "up:frac_i": "Up_frac_i", 
     733                "up:frac_f": "Up_frac_f", 
     734                "up:angle": "Up_theta" 
     735            } 
     736        ], 
     737        "spherical_sld": [ 
     738            "SphericalSLDModel", 
     739            # Be lazy and use a generator expression to define 
     740            #    sld1: sld_flat0, ... 
     741            #    thickness1: thick_flat0, ... 
     742            #    interface1: thick_inter0, ... 
     743            #    shape1: func_inter0, ... 
     744            #    nu1: nu_inter0, ... 
     745            # but override thickness1 => rad_cor0 and sld1 => sld_core0. 
     746            # Note: explicit key,value pairs given by **{...} override the 
     747            # keys from the gnerator expression ((k,v) for k,v in seq) when 
     748            # used as dict((generator), **{...}) 
     749            dict(((field_new+str(index+1), field_old+str(index)) 
     750                  for field_new, field_old in [("sld", "sld_flat"), 
     751                                               ("thickness", "thick_flat"), 
     752                                               ("interface", "thick_inter"), 
     753                                               ("shape", "func_inter"), 
     754                                               ("nu", "nu_inter"),] 
     755                  for index in range(11)), 
     756                 **{ 
     757                     "n_shells": "n_shells", 
     758                     "n_steps": "npts_inter", 
     759                     "sld_solvent": "sld_solv", 
     760                     "thickness1": "rad_core0", 
     761                     "sld1": "sld_core0", 
     762                 }) 
     763        ], 
     764        "squarewell": [ 
     765            "SquareWellStructure", 
     766            { 
     767                "scale": "scale_factor", 
     768                "radius_effective": "effect_radius", 
     769                "wellwidth": "wellwidth", 
     770                "welldepth": "welldepth", 
     771            } 
     772        ], 
     773        "stacked_disks": [ 
     774            "StackedDisksModel", 
     775            { 
     776                "phi": "axis_phi", 
     777                "sld_layer": "layer_sld", 
     778                "sld_core": "core_sld", 
     779                "theta": "axis_theta", 
     780                "sld_solvent": "solvent_sld", 
     781                "n_stacking": "n_stacking", 
     782                "thick_layer": "layer_thick", 
     783                "thick_core": "core_thick", 
     784            } 
     785        ], 
     786        "star_polymer": [ 
     787            "StarPolymer", 
     788            { 
     789                "arms": "arms", 
     790                "rg_squared": "R2" 
     791            } 
     792        ], 
     793        "stickyhardsphere": [ 
     794            "StickyHSStructure", 
     795            { 
     796                "scale": "scale_factor", 
     797                "radius_effective": "effect_radius", 
     798            } 
     799        ], 
     800        "surface_fractal": [ 
     801            "SurfaceFractalModel", 
     802            { 
     803                "cutoff_length": "co_length", 
     804                "radius": "radius", 
     805                "fractal_dim_surf": "surface_dim" 
     806            } 
     807        ], 
     808        "teubner_strey": [ 
     809            "TeubnerStreyModel", 
     810            { 
     811                # Note: parameters are completely rewritten in convert.py 
     812                "volfraction_a": "volfraction_a", 
     813                "sld_a": "sld_a", 
     814                "sld_b": "sld_b", 
     815                "d": "d", 
     816                "xi": "xi", 
     817            } 
     818        ], 
     819        "triaxial_ellipsoid": [ 
     820            "TriaxialEllipsoidModel", 
     821            { 
     822                "phi": "axis_phi", 
     823                "radius_equat_minor": "semi_axisA", 
     824                "radius_polar": "semi_axisC", 
     825                "radius_equat_major": "semi_axisB", 
     826                "sld_solvent": "sldSolv", 
     827                "psi": "axis_psi", 
     828                "sld": "sldEll", 
     829                "theta": "axis_theta" 
     830            } 
     831        ], 
     832        "two_lorentzian": [ 
     833            "TwoLorentzian", 
     834            { 
     835                "lorentz_scale_1": "scale_1", 
     836                "lorentz_scale_2": "scale_2", 
     837                "lorentz_exp_1": "exponent_1", 
     838                "lorentz_exp_2": "exponent_2", 
     839                "lorentz_length_2": "length_2", 
     840                "lorentz_length_1": "length_1", 
     841                "background": "background" 
     842            }, 
     843            "TwoLorentzianModel", 
     844        ], 
     845        "two_power_law": [ 
     846            "TwoPowerLaw", 
     847            { 
     848                "coefficent_1": "coef_A", 
     849                "power_2": "power2", 
     850                "power_1": "power1", 
     851                "background": "background", 
     852                "crossover": "qc" 
     853            }, 
     854            "TwoPowerLawModel", 
     855        ], 
     856        "unified_power_Rg": [ 
     857            "UnifiedPowerRg", 
     858            dict(((field_new+str(index), field_old+str(index)) 
     859                  for field_new, field_old in [("rg", "Rg"), 
     860                                               ("power", "power"), 
     861                                               ("G", "G"), 
     862                                               ("B", "B"),] 
     863                  for index in range(11)), 
     864                 **{ 
     865                     "background": "background", 
     866                     "scale": "scale", 
     867                 }), 
     868            "UnifiedPowerRgModel", 
     869        ], 
     870        "vesicle": [ 
     871            "VesicleModel", 
     872            { 
     873                "sld": "shell_sld", 
     874                "sld_solvent": "solv_sld" 
     875            } 
     876        ] 
    877877    } 
    878878} 
  • sasmodels/convert.py

    r07c8d46 r2d81cfe  
    44from __future__ import print_function, division 
    55 
    6 import re 
    76import math 
    87import warnings 
     8 
     9import numpy as np 
    910 
    1011from .conversion_table import CONVERSION_TABLE 
     
    6465    return [pk*scale for pk in par] if isinstance(par, list) else par*scale 
    6566 
    66 def _is_sld(model_info, id): 
     67def _is_sld(model_info, par): 
    6768    """ 
    6869    Return True if parameter is a magnetic magnitude or SLD parameter. 
    6970    """ 
    70     if id.startswith('M0:'): 
     71    if par.startswith('M0:'): 
    7172        return True 
    72     if '_pd' in id or '.' in id: 
     73    if '_pd' in par or '.' in par: 
    7374        return False 
    7475    for p in model_info.parameters.call_parameters: 
    75         if p.id == id: 
     76        if p.id == par: 
    7677            return p.type == 'sld' 
    7778    # check through kernel parameters in case it is a named as a vector 
    7879    for p in model_info.parameters.kernel_parameters: 
    79         if p.id == id: 
     80        if p.id == par: 
    8081            return p.type == 'sld' 
    8182    return False 
     
    8889    *scale=1e-6*.  For forward conversion use *scale=1e6*. 
    8990    """ 
    90     return dict((id, (_rescale(v, scale) if _is_sld(model_info, id) else v)) 
    91                 for id, v in pars.items()) 
    92  
    93  
    94 def _get_translation_table(model_info, version=(3,1,2)): 
     91    return dict((par, (_rescale(v, scale) if _is_sld(model_info, par) else v)) 
     92                for par, v in pars.items()) 
     93 
     94 
     95def _get_translation_table(model_info, version=(3, 1, 2)): 
    9596    conv_param = CONVERSION_TABLE.get(version, {}).get(model_info.id, [None, {}]) 
    9697    translation = conv_param[1].copy() 
     
    130131    newpars = pars.copy() 
    131132    for new, old in mapping.items(): 
    132         if old == new: continue 
    133         if old is None: continue 
    134         for underscore, dot in PD_DOT: 
     133        if old == new: 
     134            continue 
     135        if old is None: 
     136            continue 
     137        for _, dot in PD_DOT: 
    135138            source = old+dot 
    136139            if source in newpars: 
     
    145148    return newpars 
    146149 
    147 def _conversion_target(model_name, version=(3,1,2)): 
     150def _conversion_target(model_name, version=(3, 1, 2)): 
    148151    """ 
    149152    Find the sasmodel name which translates into the sasview name. 
     
    159162    return None 
    160163 
    161 def _hand_convert(name, oldpars, version=(3,1,2)): 
    162     if version == (3,1,2): 
     164def _hand_convert(name, oldpars, version=(3, 1, 2)): 
     165    if version == (3, 1, 2): 
    163166        oldpars = _hand_convert_3_1_2_to_4_1(name, oldpars) 
    164167    return oldpars 
     
    272275        p_scale = oldpars['scale'] 
    273276        p_c1 = oldpars['c1'] 
    274         p_c2= oldpars['c2'] 
     277        p_c2 = oldpars['c2'] 
    275278        i_1 = 0.5*p_c1/p_c2 
    276279        i_2 = math.sqrt(math.fabs(p_scale/p_c2)) 
     
    295298    return oldpars 
    296299 
    297 def convert_model(name, pars, use_underscore=False, model_version=(3,1,2)): 
     300def convert_model(name, pars, use_underscore=False, model_version=(3, 1, 2)): 
    298301    """ 
    299302    Convert model from old style parameter names to new style. 
     
    327330        newpars = _convert_pars(newpars, translation) 
    328331        # TODO: Still not convinced this is the best check 
    329         if not model_info.structure_factor and version == (3,1,2): 
     332        if not model_info.structure_factor and version == (3, 1, 2): 
    330333            newpars = _rescale_sld(model_info, newpars, 1e6) 
    331334        newpars.setdefault('scale', 1.0) 
     
    599602 
    600603    pars = compare.get_pars(model_info, use_demo=False) 
    601     pars = compare.randomize_pars(model_info, pars, seed=seed) 
     604    if seed is not None: 
     605        np.random.seed(seed) 
     606    pars = compare.randomize_pars(model_info, pars) 
    602607    if name == "teubner_strey": 
    603608        # T-S model is underconstrained, so fix the assumptions. 
     
    615620        print("==== %s out ====="%new_name) 
    616621        print(str(compare.parlist(model_info, new_pars, True))) 
    617     assert name==new_name, "%r != %r"%(name, new_name) 
     622    assert name == new_name, "%r != %r"%(name, new_name) 
    618623    for k, v in new_pars.items(): 
    619624        assert k in pars, "%s: %r appeared from conversion"%(name, k) 
    620625        if isinstance(v, float): 
    621             assert abs(v-pars[k])<=abs(1e-12*v), "%s: %r  %s != %s"%(name, k, v, pars[k]) 
     626            assert abs(v-pars[k]) <= abs(1e-12*v), \ 
     627                "%s: %r  %s != %s"%(name, k, v, pars[k]) 
    622628        else: 
    623629            assert v == pars[k], "%s: %r  %s != %s"%(name, k, v, pars[k]) 
  • sasmodels/core.py

    r9e771a3 r2d81cfe  
    1010 
    1111import os 
     12from os.path import basename, join as joinpath 
     13from glob import glob 
    1214import re 
    13 from os.path import basename, dirname, join as joinpath 
    14 from glob import glob 
    1515 
    1616import numpy as np # type: ignore 
     
    3535CUSTOM_MODEL_PATH = os.environ.get('SAS_MODELPATH', "") 
    3636if CUSTOM_MODEL_PATH == "": 
    37     path = joinpath(os.path.expanduser("~"), ".sasmodels", "custom_models") 
    38     if not os.path.isdir(path): 
    39         os.makedirs(path) 
    40     CUSTOM_MODEL_PATH = path 
    41  
     37    CUSTOM_MODEL_PATH = joinpath(os.path.expanduser("~"), ".sasmodels", "custom_models") 
     38    if not os.path.isdir(CUSTOM_MODEL_PATH): 
     39        os.makedirs(CUSTOM_MODEL_PATH) 
     40 
     41# pylint: disable=unused-import 
    4242try: 
    4343    from typing import List, Union, Optional, Any 
     
    4646except ImportError: 
    4747    pass 
     48# pylint: enable=unused-import 
    4849 
    4950# TODO: refactor composite model support 
  • sasmodels/data.py

    ra1c5758 r2d81cfe  
    3737import numpy as np  # type: ignore 
    3838 
     39# pylint: disable=unused-import 
    3940try: 
    4041    from typing import Union, Dict, List, Optional 
     
    4344else: 
    4445    Data = Union["Data1D", "Data2D", "SesansData"] 
     46# pylint: enable=unused-import 
    4547 
    4648def load_data(filename, index=0): 
     
    6466            data.qmin, data.qmax = data.x.min(), data.x.max() 
    6567            data.mask = (np.isnan(data.y) if data.y is not None 
    66                         else np.zeros_like(data.x, dtype='bool')) 
     68                         else np.zeros_like(data.x, dtype='bool')) 
    6769        elif hasattr(data, 'qx_data'): 
    6870            data.mask = ~data.mask 
     
    137139    *_yaxis*, *_yunit*: label and units for the *y* axis 
    138140    """ 
    139     def __init__(self, x=None, y=None, dx=None, dy=None): 
    140         # type: (Optional[np.ndarray], Optional[np.ndarray], Optional[np.ndarray], Optional[np.ndarray]) -> None 
     141    def __init__(self, 
     142                 x=None,  # type: Optional[np.ndarray] 
     143                 y=None,  # type: Optional[np.ndarray] 
     144                 dx=None, # type: Optional[np.ndarray] 
     145                 dy=None  # type: Optional[np.ndarray] 
     146                ): 
     147        # type: (...) -> None 
    141148        self.x, self.y, self.dx, self.dy = x, y, dx, dy 
    142149        self.dxl = None 
     
    211218    *x_bins*, *y_bins*: grid steps in *x* and *y* directions 
    212219    """ 
    213     def __init__(self, x=None, y=None, z=None, dx=None, dy=None, dz=None): 
    214         # type: (Optional[np.ndarray], Optional[np.ndarray], Optional[np.ndarray], Optional[np.ndarray], Optional[np.ndarray], Optional[np.ndarray]) -> None 
     220    def __init__(self, 
     221                 x=None,   # type: Optional[np.ndarray] 
     222                 y=None,   # type: Optional[np.ndarray] 
     223                 z=None,   # type: Optional[np.ndarray] 
     224                 dx=None,  # type: Optional[np.ndarray] 
     225                 dy=None,  # type: Optional[np.ndarray] 
     226                 dz=None   # type: Optional[np.ndarray] 
     227                ): 
     228        # type: (...) -> None 
    215229        self.qx_data, self.dqx_data = x, dx 
    216230        self.qy_data, self.dqy_data = y, dy 
     
    369383 
    370384 
    371 def plot_theory(data, theory, resid=None, view='log', 
    372                 use_data=True, limits=None, Iq_calc=None): 
    373     # type: (Data, Optional[np.ndarray], Optional[np.ndarray], str, bool, Optional[Tuple[float,float]], Optional[np.ndarray]) -> None 
     385def plot_theory(data,          # type: Data 
     386                theory,        # type: Optional[np.ndarray] 
     387                resid=None,    # type: Optional[np.ndarray] 
     388                view='log',    # type: str 
     389                use_data=True, # type: bool 
     390                limits=None,   # type: Optional[np.ndarray] 
     391                Iq_calc=None   # type: Optional[np.ndarray] 
     392               ): 
     393    # type: (...) -> None 
    374394    """ 
    375395    Plot theory calculation. 
     
    417437 
    418438@protect 
    419 def _plot_result1D(data, theory, resid, view, use_data, 
    420                    limits=None, Iq_calc=None): 
    421     # type: (Data1D, Optional[np.ndarray], Optional[np.ndarray], str, bool, Optional[Tuple[float, float]], Optional[np.ndarray]) -> None 
     439def _plot_result1D(data,         # type: Data1D 
     440                   theory,       # type: Optional[np.ndarray] 
     441                   resid,        # type: Optional[np.ndarray] 
     442                   view,         # type: str 
     443                   use_data,     # type: bool 
     444                   limits=None,  # type: Optional[Tuple[float, float]] 
     445                   Iq_calc=None  # type: Optional[np.ndarray] 
     446                  ): 
     447    # type: (...) -> None 
    422448    """ 
    423449    Plot the data and residuals for 1D data. 
     
    427453 
    428454    if getattr(data, 'radial', False): 
    429         radial_data.x = radial_data.q_data 
    430         radial_data.y = radial_data.data 
     455        data.x = data.q_data 
     456        data.y = data.data 
    431457 
    432458    use_data = use_data and data.y is not None 
     
    515541 
    516542@protect 
    517 def _plot_result_sesans(data, theory, resid, use_data, limits=None): 
    518     # type: (SesansData, Optional[np.ndarray], Optional[np.ndarray], bool, Optional[Tuple[float, float]]) -> None 
     543def _plot_result_sesans(data,        # type: SesansData 
     544                        theory,      # type: Optional[np.ndarray] 
     545                        resid,       # type: Optional[np.ndarray] 
     546                        use_data,    # type: bool 
     547                        limits=None  # type: Optional[Tuple[float, float]] 
     548                       ): 
     549    # type: (...) -> None 
    519550    """ 
    520551    Plot SESANS results. 
     
    527558 
    528559    if use_data or use_theory: 
    529         is_tof = (data.lam != data.lam[0]).any() 
     560        is_tof = data.lam is not None and (data.lam != data.lam[0]).any() 
    530561        if num_plots > 1: 
    531562            plt.subplot(1, num_plots, 1) 
     
    560591 
    561592@protect 
    562 def _plot_result2D(data, theory, resid, view, use_data, limits=None): 
    563     # type: (Data2D, Optional[np.ndarray], Optional[np.ndarray], str, bool, Optional[Tuple[float,float]]) -> None 
     593def _plot_result2D(data,         # type: Data2D 
     594                   theory,       # type: Optional[np.ndarray] 
     595                   resid,        # type: Optional[np.ndarray] 
     596                   view,         # type: str 
     597                   use_data,     # type: bool 
     598                   limits=None   # type: Optional[Tuple[float, float]] 
     599                  ): 
     600    # type: (...) -> None 
    564601    """ 
    565602    Plot the data and residuals for 2D data. 
     
    621658 
    622659@protect 
    623 def _plot_2d_signal(data, signal, vmin=None, vmax=None, view='log'): 
    624     # type: (Data2D, np.ndarray, Optional[float], Optional[float], str) -> Tuple[float, float] 
     660def _plot_2d_signal(data,       # type: Data2D 
     661                    signal,     # type: np.ndarray 
     662                    vmin=None,  # type: Optional[float] 
     663                    vmax=None,  # type: Optional[float] 
     664                    view='log'  # type: str 
     665                   ): 
     666    # type: (...) -> Tuple[float, float] 
    625667    """ 
    626668    Plot the target value for the data.  This could be the data itself, 
     
    637679    if view == 'log': 
    638680        valid[valid] = (image[valid] > 0) 
    639         if vmin is None: vmin = image[valid & ~data.mask].min() 
    640         if vmax is None: vmax = image[valid & ~data.mask].max() 
     681        if vmin is None: 
     682            vmin = image[valid & ~data.mask].min() 
     683        if vmax is None: 
     684            vmax = image[valid & ~data.mask].max() 
    641685        image[valid] = np.log10(image[valid]) 
    642686    elif view == 'q4': 
    643687        image[valid] *= (data.qx_data[valid]**2+data.qy_data[valid]**2)**2 
    644         if vmin is None: vmin = image[valid & ~data.mask].min() 
    645         if vmax is None: vmax = image[valid & ~data.mask].max() 
     688        if vmin is None: 
     689            vmin = image[valid & ~data.mask].min() 
     690        if vmax is None: 
     691            vmax = image[valid & ~data.mask].max() 
    646692    else: 
    647         if vmin is None: vmin = image[valid & ~data.mask].min() 
    648         if vmax is None: vmax = image[valid & ~data.mask].max() 
     693        if vmin is None: 
     694            vmin = image[valid & ~data.mask].min() 
     695        if vmax is None: 
     696            vmax = image[valid & ~data.mask].max() 
    649697 
    650698    image[~valid | data.mask] = 0 
     
    655703    ymin, ymax = min(data.qy_data), max(data.qy_data) 
    656704    if view == 'log': 
    657         vmin_scaled, vmax_scaled= np.log10(vmin), np.log10(vmax) 
     705        vmin_scaled, vmax_scaled = np.log10(vmin), np.log10(vmax) 
    658706    else: 
    659707        vmin_scaled, vmax_scaled = vmin, vmax 
  • sasmodels/details.py

    rce99754 r2d81cfe  
    1515 
    1616import numpy as np  # type: ignore 
    17 from numpy import pi, cos, sin, radians 
     17from numpy import cos, sin, radians 
    1818 
    1919try: 
     
    2323    # CRUFT: np.meshgrid requires multiple vectors 
    2424    def meshgrid(*args): 
     25        """See docs from a recent version of numpy""" 
    2526        if len(args) > 1: 
    2627            return np.meshgrid(*args) 
     
    2829            return [np.asarray(v) for v in args] 
    2930 
     31# pylint: disable=unused-import 
    3032try: 
    3133    from typing import List, Tuple, Sequence 
     
    3537    from .modelinfo import ModelInfo 
    3638    from .modelinfo import ParameterTable 
     39# pylint: enable=unused-import 
    3740 
    3841 
     
    219222 
    220223ZEROS = tuple([0.]*31) 
    221 def make_kernel_args(kernel, mesh): 
    222     # type: (Kernel, Tuple[List[np.ndarray], List[np.ndarray]]) -> Tuple[CallDetails, np.ndarray, bool] 
     224def make_kernel_args(kernel, # type: Kernel 
     225                     mesh    # type: Tuple[List[np.ndarray], List[np.ndarray]] 
     226                    ): 
     227    # type: (...) -> Tuple[CallDetails, np.ndarray, bool] 
    223228    """ 
    224229    Converts (value, dispersity, weight) for each parameter into kernel pars. 
     
    231236    npars = kernel.info.parameters.npars 
    232237    nvalues = kernel.info.parameters.nvalues 
    233     scalars = [value for value, dispersity, weight in mesh] 
     238    scalars = [value for value, _dispersity, _weight in mesh] 
    234239    # skipping scale and background when building values and weights 
    235     values, dispersity, weights = zip(*mesh[2:npars+2]) if npars else ((), (), ()) 
     240    _values, dispersity, weights = zip(*mesh[2:npars+2]) if npars else ((), (), ()) 
    236241    #weights = correct_theta_weights(kernel.info.parameters, dispersity, weights) 
    237242    length = np.array([len(w) for w in weights]) 
     
    247252    return call_details, data, is_magnetic 
    248253 
    249 def correct_theta_weights(parameters, dispersity, weights): 
    250     # type: (ParameterTable, Sequence[np.ndarray], Sequence[np.ndarray]) -> Sequence[np.ndarray] 
     254def correct_theta_weights(parameters, # type: ParameterTable 
     255                          dispersity, # type: Sequence[np.ndarray] 
     256                          weights     # type: Sequence[np.ndarray] 
     257                         ): 
     258    # type: (...) -> Sequence[np.ndarray] 
    251259    """ 
    252260    If there is a theta parameter, update the weights of that parameter so that 
     
    287295    mag = values[parameters.nvalues-3*parameters.nmagnetic:parameters.nvalues] 
    288296    mag = mag.reshape(-1, 3) 
    289     scale = mag[:,0] 
     297    scale = mag[:, 0] 
    290298    if np.any(scale): 
    291299        theta, phi = radians(mag[:, 1]), radians(mag[:, 2]) 
  • sasmodels/direct_model.py

    r9e771a3 r2d81cfe  
    3232from .details import make_kernel_args, dispersion_mesh 
    3333 
     34# pylint: disable=unused-import 
    3435try: 
    3536    from typing import Optional, Dict, Tuple 
     
    4041    from .kernel import Kernel, KernelModel 
    4142    from .modelinfo import Parameter, ParameterSet 
     43# pylint: enable=unused-import 
    4244 
    4345def call_kernel(calculator, pars, cutoff=0., mono=False): 
     
    163165        nsigma = values.get(parameter.name+'_pd_nsigma', 3.0) 
    164166        pd = weights.get_weights(disperser, npts, width, nsigma, 
    165                                 value, limits, relative) 
     167                                 value, limits, relative) 
    166168    return value, pd[0], pd[1] 
    167169 
     
    175177    dispersity, weight = dispersion_mesh(model_info, vol_pars) 
    176178    return dispersity, weight 
     179 
     180 
     181def _make_sesans_transform(data): 
     182    from sas.sascalc.data_util.nxsunit import Converter 
     183 
     184    # Pre-compute the Hankel matrix (H) 
     185    SElength = Converter(data._xunit)(data.x, "A") 
     186 
     187    theta_max = Converter("radians")(data.sample.zacceptance)[0] 
     188    q_max = 2 * np.pi / np.max(data.source.wavelength) * np.sin(theta_max) 
     189    zaccept = Converter("1/A")(q_max, "1/" + data.source.wavelength_unit), 
     190 
     191    Rmax = 10000000 
     192    hankel = sesans.SesansTransform(data.x, SElength, 
     193                                    data.source.wavelength, 
     194                                    zaccept, Rmax) 
     195    return hankel 
    177196 
    178197 
     
    216235 
    217236        if self.data_type == 'sesans': 
    218             q = sesans.make_q(data.sample.zacceptance, data.Rmax) 
     237            res = _make_sesans_transform(data) 
    219238            index = slice(None, None) 
    220             res = None 
    221239            if data.y is not None: 
    222240                Iq, dIq = data.y, data.dy 
     
    224242                Iq, dIq = None, None 
    225243            #self._theory = np.zeros_like(q) 
    226             q_vectors = [q] 
    227             q_mono = sesans.make_all_q(data) 
     244            q_vectors = [res.q_calc] 
    228245        elif self.data_type == 'Iqxy': 
    229246            #if not model.info.parameters.has_2d: 
     
    244261            #self._theory = np.zeros_like(self.Iq) 
    245262            q_vectors = res.q_calc 
    246             q_mono = [] 
    247263        elif self.data_type == 'Iq': 
    248264            index = (data.x >= data.qmin) & (data.x <= data.qmax) 
     
    269285            #self._theory = np.zeros_like(self.Iq) 
    270286            q_vectors = [res.q_calc] 
    271             q_mono = [] 
    272287        elif self.data_type == 'Iq-oriented': 
    273288            index = (data.x >= data.qmin) & (data.x <= data.qmax) 
     
    286301                                      qy_width=data.dxl[index]) 
    287302            q_vectors = res.q_calc 
    288             q_mono = [] 
    289303        else: 
    290304            raise ValueError("Unknown data type") # never gets here 
     
    293307        # so we can save/restore state 
    294308        self._kernel_inputs = q_vectors 
    295         self._kernel_mono_inputs = q_mono 
    296309        self._kernel = None 
    297310        self.Iq, self.dIq, self.index = Iq, dIq, index 
     
    331344        if self._kernel is None: 
    332345            self._kernel = self._model.make_kernel(self._kernel_inputs) 
    333             self._kernel_mono = ( 
    334                 self._model.make_kernel(self._kernel_mono_inputs) 
    335                 if self._kernel_mono_inputs else None) 
    336346 
    337347        Iq_calc = call_kernel(self._kernel, pars, cutoff=cutoff) 
     
    341351        # TODO: refactor so we don't store the result in the model 
    342352        self.Iq_calc = Iq_calc 
    343         if self.data_type == 'sesans': 
    344             Iq_mono = (call_kernel(self._kernel_mono, pars, mono=True) 
    345                        if self._kernel_mono_inputs else None) 
    346             result = sesans.transform(self._data, 
    347                                       self._kernel_inputs[0], Iq_calc, 
    348                                       self._kernel_mono_inputs, Iq_mono) 
    349         else: 
    350             result = self.resolution.apply(Iq_calc) 
    351             if hasattr(self.resolution, 'nx'): 
    352                 self.Iq_calc = ( 
    353                     self.resolution.qx_calc, self.resolution.qy_calc, 
    354                     np.reshape(Iq_calc, (self.resolution.ny, self.resolution.nx)) 
    355                 ) 
     353        result = self.resolution.apply(Iq_calc) 
     354        if hasattr(self.resolution, 'nx'): 
     355            self.Iq_calc = ( 
     356                self.resolution.qx_calc, self.resolution.qy_calc, 
     357                np.reshape(Iq_calc, (self.resolution.ny, self.resolution.nx)) 
     358            ) 
    356359        return result 
    357360 
     
    410413        try: 
    411414            values = [float(v) for v in call.split(',')] 
    412         except Exception: 
     415        except ValueError: 
    413416            values = [] 
    414417        if len(values) == 1: 
  • sasmodels/generate.py

    r4991048 r2d81cfe  
    163163 
    164164import sys 
    165 from os.path import abspath, dirname, join as joinpath, exists, isdir, getmtime 
     165from os.path import abspath, dirname, join as joinpath, exists, getmtime 
    166166import re 
    167167import string 
     
    174174from .custom import load_custom_kernel_module 
    175175 
     176# pylint: disable=unused-import 
    176177try: 
    177178    from typing import Tuple, Sequence, Iterator, Dict 
     
    179180except ImportError: 
    180181    pass 
     182# pylint: enable=unused-import 
    181183 
    182184# jitter projection to use in the kernel code.  See explore/jitter.py 
     
    654656    line instead. 
    655657    """ 
    656     for path, code in sources: 
     658    for _path, code in sources: 
    657659        if _IQXY_PATTERN.search(code): 
    658660            return True 
    659     else: 
    660         return False 
     661    return False 
    661662 
    662663 
     
    772773    # TODO: allow mixed python/opencl kernels? 
    773774 
    774     ocl = kernels(kernel_code, call_iq, call_iqxy, clear_iqxy, model_info.name) 
    775     dll = kernels(kernel_code, call_iq, call_iqxy, clear_iqxy, model_info.name) 
     775    ocl = _kernels(kernel_code, call_iq, call_iqxy, clear_iqxy, model_info.name) 
     776    dll = _kernels(kernel_code, call_iq, call_iqxy, clear_iqxy, model_info.name) 
    776777    result = { 
    777778        'dll': '\n'.join(source+dll[0]+dll[1]+dll[2]), 
     
    782783 
    783784 
    784 def kernels(kernel, call_iq, call_iqxy, clear_iqxy, name): 
     785def _kernels(kernel, call_iq, call_iqxy, clear_iqxy, name): 
    785786    # type: ([str,str], str, str, str) -> List[str] 
    786787    code = kernel[0] 
     
    931932 
    932933def make_html(model_info): 
     934    # type: (ModelInfo) -> str 
    933935    """ 
    934936    Convert model docs directly to html. 
     
    940942 
    941943def view_html(model_name): 
     944    # type: (str) -> None 
     945    """ 
     946    Load the model definition and view its help. 
     947    """ 
    942948    from . import modelinfo 
    943949    kernel_module = load_kernel_module(model_name) 
     
    946952 
    947953def view_html_from_info(info): 
     954    # type: (ModelInfo) -> None 
     955    """ 
     956    View the help for a loaded model definition. 
     957    """ 
    948958    from . import rst2html 
    949959    url = "file://"+dirname(info.filename)+"/" 
     
    970980    Program which prints the source produced by the model. 
    971981    """ 
    972     import sys 
    973982    from .modelinfo import make_model_info 
    974983 
  • sasmodels/kernel.py

    rbde38b5 r2d81cfe  
    1212from __future__ import division, print_function 
    1313 
    14 import numpy as np 
    15  
     14# pylint: disable=unused-import 
    1615try: 
    1716    from typing import List 
     
    1918    pass 
    2019else: 
     20    import numpy as np 
    2121    from .details import CallDetails 
    2222    from .modelinfo import ModelInfo 
    23     import numpy as np  # type: ignore 
     23# pylint: enable=unused-import 
    2424 
    2525class KernelModel(object): 
  • sasmodels/kernelcl.py

    rc1114bf r2d81cfe  
    7474from .kernel import KernelModel, Kernel 
    7575 
     76# pylint: disable=unused-import 
    7677try: 
    7778    from typing import Tuple, Callable, Any 
     
    8081except ImportError: 
    8182    pass 
     83# pylint: enable=unused-import 
    8284 
    8385# CRUFT: pyopencl < 2017.1  (as of June 2016 needs quotes around include path) 
  • sasmodels/kerneldll.py

    rb2f1d2f r2d81cfe  
    3939Install locations are system dependent, such as: 
    4040 
    41     C:\Program Files (x86)\Common Files\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat 
     41    C:\Program Files (x86)\Common Files\Microsoft\Visual 
     42    C++ for Python\9.0\vcvarsall.bat 
    4243 
    4344or maybe 
    4445 
    45     C:\Users\yourname\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat 
     46    C:\Users\yourname\AppData\Local\Programs\Common\Microsoft\Visual 
     47    C++ for Python\9.0\vcvarsall.bat 
    4648 
    4749OpenMP for *msvc* requires the Microsoft vcomp90.dll library, which doesn't 
     
    8991from .generate import F16, F32, F64 
    9092 
     93# pylint: disable=unused-import 
    9194try: 
    9295    from typing import Tuple, Callable, Any 
     
    9598except ImportError: 
    9699    pass 
     100# pylint: enable=unused-import 
    97101 
    98102if "SAS_COMPILER" in os.environ: 
  • sasmodels/kernelpy.py

    r8698a0d r2d81cfe  
    1212 
    1313import numpy as np  # type: ignore 
    14 from numpy import pi, sin, cos  #type: ignore 
    15  
    16 from . import details 
     14 
    1715from .generate import F64 
    1816from .kernel import KernelModel, Kernel 
    1917 
     18# pylint: disable=unused-import 
    2019try: 
    2120    from typing import Union, Callable 
     
    2322    pass 
    2423else: 
     24    from . import details 
    2525    DType = Union[None, str, np.dtype] 
     26# pylint: enable=unused-import 
    2627 
    2728class PyModel(KernelModel): 
     
    179180        self.q_input = None 
    180181 
    181 def _loops(parameters, form, form_volume, nq, call_details, values, cutoff): 
    182     # type: (np.ndarray, Callable[[], np.ndarray], Callable[[], float], int, details.CallDetails, np.ndarray, np.ndarray, float) -> None 
     182def _loops(parameters,    # type: np.ndarray 
     183           form,          # type: Callable[[], np.ndarray] 
     184           form_volume,   # type: Callable[[], float] 
     185           nq,            # type: int 
     186           call_details,  # type: details.CallDetails 
     187           values,        # type: np.ndarray 
     188           cutoff         # type: float 
     189          ): 
     190    # type: (...) -> None 
    183191    ################################################################ 
    184192    #                                                              # 
  • sasmodels/list_pars.py

    r72be531 r2d81cfe  
    1111from __future__ import print_function 
    1212 
    13 import sys 
    1413import argparse 
    1514 
  • sasmodels/mixture.py

    r0edb6c1 r2d81cfe  
    2020from .details import make_details 
    2121 
     22# pylint: disable=unused-import 
    2223try: 
    2324    from typing import List 
    2425except ImportError: 
    2526    pass 
     27# pylint: enable=unused-import 
    2628 
    2729def make_mixture_info(parts, operation='+'): 
     
    3335    combined_pars = [] 
    3436 
    35     model_num = 0 
    3637    all_parts = copy(parts) 
    3738    is_flat = False 
     
    8990            used_prefixes.append(prefix) 
    9091            prefix += '_' 
    91              
     92 
    9293        if operation == '+': 
    9394            # If model is a sum model, each constituent model gets its own scale parameter 
     
    105106                # Concatenate sub_prefixes to form prefix for the scale 
    106107                scale_prefix = ''.join(sub_prefixes) + '_' 
    107             scale =  Parameter(scale_prefix + 'scale', default=1.0, 
    108                             description="model intensity for " + part.name) 
     108            scale = Parameter(scale_prefix + 'scale', default=1.0, 
     109                              description="model intensity for " + part.name) 
    109110            combined_pars.append(scale) 
    110111        for p in part.parameters.kernel_parameters: 
     
    179180        # type: (ModelInfo, List[Kernel]) -> None 
    180181        self.dim = kernels[0].dim 
    181         self.info =  model_info 
     182        self.info = model_info 
    182183        self.kernels = kernels 
    183184        self.dtype = self.kernels[0].dtype 
  • sasmodels/model_test.py

    r20fe0cd r2d81cfe  
    6363from .modelinfo import expand_pars 
    6464 
     65# pylint: disable=unused-import 
    6566try: 
    6667    from typing import List, Iterator, Callable 
     
    7071    from .modelinfo import ParameterTable, ParameterSet, TestCondition, ModelInfo 
    7172    from .kernel import KernelModel 
     73# pylint: enable=unused-import 
    7274 
    7375 
     
    211213                if self.stash: 
    212214                    for test, target, actual in zip(tests, self.stash[0], results): 
    213                         assert np.all(abs(target-actual) < 5e-5*abs(actual)),\ 
    214                             "GPU/CPU comparison expected %s but got %s for %s"%(target, actual, test[0]) 
     215                        assert np.all(abs(target-actual) < 5e-5*abs(actual)), \ 
     216                            ("GPU/CPU comparison expected %s but got %s for %s" 
     217                             % (target, actual, test[0])) 
    215218                else: 
    216219                    self.stash.append(results) 
  • sasmodels/modelinfo.py

    r6aee3ab r2d81cfe  
    1616 
    1717# Optional typing 
     18# pylint: disable=unused-import 
    1819try: 
    1920    from typing import Tuple, List, Union, Dict, Optional, Any, Callable, Sequence, Set 
     21    from types import ModuleType 
    2022except ImportError: 
    2123    pass 
     
    2931    TestValue = Union[float, List[float]] 
    3032    TestCondition = Tuple[ParameterSetUser, TestInput, TestValue] 
     33# pylint: enable=unused-import 
    3134 
    3235# If MAX_PD changes, need to change the loop macros in kernel_iq.c 
     
    499502        for par in self.call_parameters: 
    500503            if par.name == key: 
    501                 break 
    502         else: 
    503             raise KeyError("unknown parameter %r"%key) 
    504         return par 
     504                return par 
     505        raise KeyError("unknown parameter %r"%key) 
    505506 
    506507    def __contains__(self, key): 
     
    508509            if par.name == key: 
    509510                return True 
    510         else: 
    511             return False 
     511        return False 
    512512 
    513513    def _set_vector_lengths(self): 
     
    526526        """ 
    527527        # Sort out the length of the vector parameters such as thickness[n] 
    528  
    529528        for p in self.kernel_parameters: 
    530529            if p.length_control: 
    531                 for ref in self.kernel_parameters: 
    532                     if ref.id == p.length_control: 
    533                         break 
    534                 else: 
    535                     raise ValueError("no reference variable %r for %s" 
    536                                      % (p.length_control, p.name)) 
     530                ref = self._get_ref(p) 
    537531                ref.is_control = True 
    538532                ref.polydisperse = False 
     
    542536                                     % ref.name) 
    543537                p.length = int(high) 
     538 
     539    def _get_ref(self, p): 
     540        # type: (Parameter) -> Parameter 
     541        for ref in self.kernel_parameters: 
     542            if ref.id == p.length_control: 
     543                return ref 
     544        raise ValueError("no reference variable %r for %s" 
     545                         % (p.length_control, p.name)) 
    544546 
    545547    def _get_defaults(self): 
     
    714716 
    715717def _find_source_lines(model_info, kernel_module): 
     718    # type: (ModelInfo, ModuleType) -> None 
    716719    """ 
    717720    Identify the location of the C source inside the model definition file. 
     
    967970    #: the SESANS correlation function.  Note: not currently implemented. 
    968971    sesans = None           # type: Optional[Callable[[np.ndarray], np.ndarray]] 
     972    #: Returns a random parameter set for the model 
     973    random = None           # type: Optional[Callable[[], Dict[str, float]]] 
    969974 
    970975    # line numbers within the python file for bits of C source, if defined 
  • sasmodels/models/__init__.py

    r306e354 r2d81cfe  
    221D Modeling for SAS 
    33""" 
    4  
  • sasmodels/models/_spherepy.py

    rec45c4f r2d81cfe  
    11r""" 
    2 For information about polarised and magnetic scattering, see  
     2For information about polarised and magnetic scattering, see 
    33the :doc:`magnetic help <../sasgui/perspectives/fitting/mag_help>` documentation. 
    44 
     
    104104    dlow = d[low] 
    105105    dlow2 = dlow ** 2 
    106     g[low] = sqrt(1 - dlow2 / 4.) * (1 + dlow2 / 8.) + dlow2 / 2.*(1 - dlow2 / 16.) * log(dlow / (2. + sqrt(4. - dlow2))) 
     106    g[low] = (sqrt(1 - dlow2/4.) * (1 + dlow2/8.) 
     107              + dlow2/2.*(1 - dlow2/16.) * log(dlow / (2. + sqrt(4. - dlow2)))) 
    107108    return g 
    108109sesans.vectorized = True  # sesans accepts an array of z values 
  • sasmodels/models/adsorbed_layer.py

    r8f04da4 r2d81cfe  
    5757""" 
    5858 
     59import numpy as np 
    5960from numpy import inf, pi, exp, errstate 
    6061 
     
    100101    # the remaining parameters can be randomly generated from zero to 
    101102    # twice the default value as done by default in compare.py 
    102     import numpy as np 
    103103    pars = dict( 
    104104        scale=1, 
  • sasmodels/models/barbell.py

    r31df0c9 r2d81cfe  
    8787* **Last Reviewed by:** Richard Heenan **Date:** January 4, 2017 
    8888""" 
     89 
     90import numpy as np 
    8991from numpy import inf, sin, cos, pi 
    9092 
     
    116118 
    117119def random(): 
    118     import numpy as np 
    119120    # TODO: increase volume range once problem with bell radius is fixed 
    120121    # The issue is that bell radii of more than about 200 fail at high q 
    121     V = 10**np.random.uniform(7, 9) 
    122     bar_volume = 10**np.random.uniform(-4, -1)*V 
    123     bell_volume = V - bar_volume 
     122    volume = 10**np.random.uniform(7, 9) 
     123    bar_volume = 10**np.random.uniform(-4, -1)*volume 
     124    bell_volume = volume - bar_volume 
    124125    bell_radius = (bell_volume/6)**0.3333  # approximate 
    125126    min_bar = bar_volume/np.pi/bell_radius**2 
     
    150151qx = q*cos(pi/6.0) 
    151152qy = q*sin(pi/6.0) 
    152 tests = [[{}, 0.075, 25.5691260532], 
    153         [{'theta':80., 'phi':10.}, (qx, qy), 3.04233067789], 
    154         ] 
     153tests = [ 
     154    [{}, 0.075, 25.5691260532], 
     155    [{'theta':80., 'phi':10.}, (qx, qy), 3.04233067789], 
     156] 
    155157del qx, qy  # not necessary to delete, but cleaner 
  • sasmodels/models/bcc_paracrystal.py

    r1f159bd r2d81cfe  
    104104""" 
    105105 
     106import numpy as np 
    106107from numpy import inf, pi 
    107108 
     
    136137 
    137138def random(): 
    138     import numpy as np 
    139139    # Define lattice spacing as a multiple of the particle radius 
    140140    # using the formulat a = 4 r/sqrt(3).  Systems which are ordered 
  • sasmodels/models/be_polyelectrolyte.py

    r8f04da4 r2d81cfe  
    7171""" 
    7272 
     73import numpy as np 
    7374from numpy import inf, pi, sqrt 
    7475 
     
    140141 
    141142def random(): 
    142     import numpy as np 
    143143    # TODO: review random be_polyelectrolyte model generation 
    144144    pars = dict( 
  • sasmodels/models/binary_hard_sphere.py

    r30b60d2 r2d81cfe  
    7373""" 
    7474 
     75import numpy as np 
    7576from numpy import inf 
    7677 
     
    111112 
    112113def random(): 
    113     import numpy as np 
    114114    # TODO: binary_hard_sphere fails at low qr 
    115115    radius_lg = 10**np.random.uniform(2, 4.7) 
     
    137137# NOTE: test results taken from values returned by SasView 3.1.2 
    138138tests = [[{}, 0.001, 25.8927262013]] 
    139  
  • sasmodels/models/broad_peak.py

    r0bdddc2 r2d81cfe  
    4141""" 
    4242 
     43import numpy as np 
    4344from numpy import inf, errstate 
    4445 
     
    9596 
    9697def random(): 
    97     import numpy as np 
    9898    pars = dict( 
    9999        scale=1, 
  • sasmodels/models/capped_cylinder.py

    r31df0c9 r2d81cfe  
    8989* **Last Modified by:** Paul Butler **Date:** September 30, 2016 
    9090* **Last Reviewed by:** Richard Heenan **Date:** January 4, 2017 
     91""" 
    9192 
    92 """ 
     93import numpy as np 
    9394from numpy import inf, sin, cos, pi 
    9495 
     
    137138 
    138139def random(): 
    139     import numpy as np 
    140140    # TODO: increase volume range once problem with bell radius is fixed 
    141141    # The issue is that bell radii of more than about 200 fail at high q 
    142     V = 10**np.random.uniform(7, 9) 
    143     bar_volume = 10**np.random.uniform(-4, -1)*V 
    144     bell_volume = V - bar_volume 
     142    volume = 10**np.random.uniform(7, 9) 
     143    bar_volume = 10**np.random.uniform(-4, -1)*volume 
     144    bell_volume = volume - bar_volume 
    145145    bell_radius = (bell_volume/6)**0.3333  # approximate 
    146146    min_bar = bar_volume/np.pi/bell_radius**2 
     
    171171qx = q*cos(pi/6.0) 
    172172qy = q*sin(pi/6.0) 
    173 tests = [[{}, 0.075, 26.0698570695], 
    174         [{'theta':80., 'phi':10.}, (qx, qy), 0.561811990502], 
    175         ] 
     173tests = [ 
     174    [{}, 0.075, 26.0698570695], 
     175    [{'theta':80., 'phi':10.}, (qx, qy), 0.561811990502], 
     176] 
    176177del qx, qy  # not necessary to delete, but cleaner 
  • sasmodels/models/core_multi_shell.py

    r1511c37c r2d81cfe  
    4646* **Last Reviewed by:** Paul Kienzle **Date:** September 12, 2016 
    4747""" 
    48  
    49  
    50  
    5148from __future__ import division 
    5249 
     
    104101 
    105102def random(): 
    106     import numpy as np 
    107103    num_shells = np.minimum(np.random.poisson(3)+1, 10) 
    108104    total_radius = 10**np.random.uniform(1.7, 4) 
     
    162158            thickness1_pd_n=10, 
    163159            thickness2_pd_n=10, 
    164             ) 
     160           ) 
  • sasmodels/models/core_shell_bicelle.py

    r30b60d2 r2d81cfe  
    5050    \begin{align*} 
    5151    F(Q,\alpha) = &\bigg[ 
    52     (\rho_c - \rho_f) V_c \frac{2J_1(QRsin \alpha)}{QRsin\alpha}\frac{sin(QLcos\alpha/2)}{Q(L/2)cos\alpha} \\ 
    53     &+(\rho_f - \rho_r) V_{c+f} \frac{2J_1(QRsin\alpha)}{QRsin\alpha}\frac{sin(Q(L/2+t_f)cos\alpha)}{Q(L/2+t_f)cos\alpha} \\ 
    54     &+(\rho_r - \rho_s) V_t \frac{2J_1(Q(R+t_r)sin\alpha)}{Q(R+t_r)sin\alpha}\frac{sin(Q(L/2+t_f)cos\alpha)}{Q(L/2+t_f)cos\alpha} 
     52    (\rho_c - \rho_f) V_c 
     53     \frac{2J_1(QRsin \alpha)}{QRsin\alpha} 
     54     \frac{sin(QLcos\alpha/2)}{Q(L/2)cos\alpha} \\ 
     55    &+(\rho_f - \rho_r) V_{c+f} 
     56     \frac{2J_1(QRsin\alpha)}{QRsin\alpha} 
     57     \frac{sin(Q(L/2+t_f)cos\alpha)}{Q(L/2+t_f)cos\alpha} \\ 
     58    &+(\rho_r - \rho_s) V_t 
     59     \frac{2J_1(Q(R+t_r)sin\alpha)}{Q(R+t_r)sin\alpha} 
     60     \frac{sin(Q(L/2+t_f)cos\alpha)}{Q(L/2+t_f)cos\alpha} 
    5561    \bigg] 
    5662    \end{align*} 
     
    6470cylinders is then given by integrating over all possible $\theta$ and $\phi$. 
    6571 
    66 For oriented bicelles the *theta*, and *phi* orientation parameters will appear when fitting 2D data, 
    67 see the :ref:`cylinder` model for further information. 
     72For oriented bicelles the *theta*, and *phi* orientation parameters will appear 
     73when fitting 2D data, see the :ref:`cylinder` model for further information. 
    6874Our implementation of the scattering kernel and the 1D scattering intensity 
    6975use the c-library from NIST. 
     
    9298""" 
    9399 
     100import numpy as np 
    94101from numpy import inf, sin, cos, pi 
    95102 
     
    149156 
    150157def random(): 
    151     import numpy as np 
    152158    pars = dict( 
    153159        radius=10**np.random.uniform(1.3, 3), 
     
    173179qx = q*cos(pi/6.0) 
    174180qy = q*sin(pi/6.0) 
    175 tests = [[{}, 0.05, 7.4883545957], 
    176         [{'theta':80., 'phi':10.}, (qx, qy), 2.81048892474 ] 
    177         ] 
     181tests = [ 
     182    [{}, 0.05, 7.4883545957], 
     183    [{'theta':80., 'phi':10.}, (qx, qy), 2.81048892474] 
     184] 
    178185del qx, qy  # not necessary to delete, but cleaner 
    179  
  • sasmodels/models/core_shell_bicelle_elliptical.py

    r30b60d2 r2d81cfe  
    77of the core-shell bicelle model, but with an elliptical cylinder for the core. 
    88Outer shells on the rims and flat ends may be of different thicknesses and 
    9 scattering length densities. The form factor is normalized by the total particle volume. 
     9scattering length densities. The form factor is normalized by the total 
     10particle volume. 
    1011 
    1112 
     
    3637 
    3738The form factor for the bicelle is calculated in cylindrical coordinates, where 
    38 $\alpha$ is the angle between the $Q$ vector and the cylinder axis, and $\psi$ is the angle 
    39 for the ellipsoidal cross section core, to give: 
     39$\alpha$ is the angle between the $Q$ vector and the cylinder axis, and $\psi$ 
     40is the angle for the ellipsoidal cross section core, to give: 
    4041 
    4142.. math:: 
     
    4445        F(Q,\alpha, \psi)^2 \cdot sin(\alpha) + \text{background} 
    4546 
    46 where a numerical integration of $F(Q,\alpha, \psi)^2 \cdot sin(\alpha)$ is carried out over \alpha and \psi for: 
     47where a numerical integration of $F(Q,\alpha, \psi)^2 \cdot sin(\alpha)$ 
     48is carried out over \alpha and \psi for: 
    4749 
    4850.. math:: 
     
    5153    \begin{align*} 
    5254    F(Q,\alpha,\psi) = &\bigg[ 
    53     (\rho_c - \rho_f) V_c \frac{2J_1(QR'sin \alpha)}{QR'sin\alpha}\frac{sin(QLcos\alpha/2)}{Q(L/2)cos\alpha} \\ 
    54     &+(\rho_f - \rho_r) V_{c+f} \frac{2J_1(QR'sin\alpha)}{QR'sin\alpha}\frac{sin(Q(L/2+t_f)cos\alpha)}{Q(L/2+t_f)cos\alpha} \\ 
    55     &+(\rho_r - \rho_s) V_t \frac{2J_1(Q(R'+t_r)sin\alpha)}{Q(R'+t_r)sin\alpha}\frac{sin(Q(L/2+t_f)cos\alpha)}{Q(L/2+t_f)cos\alpha} 
     55    (\rho_c - \rho_f) V_c 
     56     \frac{2J_1(QR'sin \alpha)}{QR'sin\alpha} 
     57     \frac{sin(QLcos\alpha/2)}{Q(L/2)cos\alpha} \\ 
     58    &+(\rho_f - \rho_r) V_{c+f} 
     59     \frac{2J_1(QR'sin\alpha)}{QR'sin\alpha} 
     60     \frac{sin(Q(L/2+t_f)cos\alpha)}{Q(L/2+t_f)cos\alpha} \\ 
     61    &+(\rho_r - \rho_s) V_t 
     62     \frac{2J_1(Q(R'+t_r)sin\alpha)}{Q(R'+t_r)sin\alpha} 
     63     \frac{sin(Q(L/2+t_f)cos\alpha)}{Q(L/2+t_f)cos\alpha} 
    5664    \bigg] 
    5765    \end{align*} 
     
    6472 
    6573 
    66 and $V_t = \pi.(R+t_r)(Xcore.R+t_r)^2.(L+2.t_f)$ is the total volume of the bicelle, 
    67 $V_c = \pi.Xcore.R^2.L$ the volume of the core, $V_{c+f} = \pi.Xcore.R^2.(L+2.t_f)$ 
    68 the volume of the core plus the volume of the faces, $R$ is the radius 
    69 of the core, $Xcore$ is the axial ratio of the core, $L$ the length of the core, 
    70 $t_f$ the thickness of the face, $t_r$ the thickness of the rim and $J_1$ the usual 
    71 first order bessel function. The core has radii $R$ and $Xcore.R$ so is circular, 
    72 as for the core_shell_bicelle model, for $Xcore$ =1. Note that you may need to 
    73 limit the range of $Xcore$, especially if using the Monte-Carlo algorithm, as 
    74 setting radius to $R/Xcore$ and axial ratio to $1/Xcore$ gives an equivalent solution! 
     74and $V_t = \pi.(R+t_r)(Xcore.R+t_r)^2.(L+2.t_f)$ is the total volume of 
     75the bicelle, $V_c = \pi.Xcore.R^2.L$ the volume of the core, 
     76$V_{c+f} = \pi.Xcore.R^2.(L+2.t_f)$ the volume of the core plus the volume 
     77of the faces, $R$ is the radius of the core, $Xcore$ is the axial ratio of 
     78the core, $L$ the length of the core, $t_f$ the thickness of the face, $t_r$ 
     79the thickness of the rim and $J_1$ the usual first order bessel function. 
     80The core has radii $R$ and $Xcore.R$ so is circular, as for the 
     81core_shell_bicelle model, for $Xcore$ =1. Note that you may need to 
     82limit the range of $Xcore$, especially if using the Monte-Carlo algorithm, 
     83as setting radius to $R/Xcore$ and axial ratio to $1/Xcore$ gives an 
     84equivalent solution! 
    7585 
    7686The output of the 1D scattering intensity function for randomly oriented 
    7787bicelles is then given by integrating over all possible $\alpha$ and $\psi$. 
    7888 
    79 For oriented bicelles the *theta*, *phi* and *psi* orientation parameters will appear when fitting 2D data, 
    80 see the :ref:`elliptical-cylinder` model for further information. 
     89For oriented bicelles the *theta*, *phi* and *psi* orientation parameters will 
     90appear when fitting 2D data, see the :ref:`elliptical-cylinder` model 
     91for further information. 
    8192 
    8293 
     
    100111""" 
    101112 
     113import numpy as np 
    102114from numpy import inf, sin, cos, pi 
    103115 
     
    138150 
    139151def random(): 
    140     import numpy as np 
    141152    outer_major = 10**np.random.uniform(1, 4.7) 
    142153    outer_minor = 10**np.random.uniform(1, 4.7) 
     
    170181 
    171182tests = [ 
    172     [{'radius': 30.0, 'x_core': 3.0, 'thick_rim':8.0, 'thick_face':14.0, 'length':50.0}, 'ER', 1], 
    173     [{'radius': 30.0, 'x_core': 3.0, 'thick_rim':8.0, 'thick_face':14.0, 'length':50.0}, 'VR', 1], 
     183    [{'radius': 30.0, 'x_core': 3.0, 
     184      'thick_rim': 8.0, 'thick_face': 14.0, 'length': 50.0}, 'ER', 1], 
     185    [{'radius': 30.0, 'x_core': 3.0, 
     186      'thick_rim': 8.0, 'thick_face': 14.0, 'length': 50.0}, 'VR', 1], 
    174187 
    175     [{'radius': 30.0, 'x_core': 3.0, 'thick_rim':8.0, 'thick_face':14.0, 'length':50.0, 
    176     'sld_core':4.0, 'sld_face':7.0, 'sld_rim':1.0, 'sld_solvent':6.0, 'background':0.0}, 
    177     0.015, 286.540286], 
    178 #    [{'theta':80., 'phi':10.}, (qx, qy), 7.88866563001 ], 
    179         ] 
     188    [{'radius': 30.0, 'x_core': 3.0, 
     189      'thick_rim': 8.0, 'thick_face': 14.0, 'length': 50.0, 
     190      'sld_core': 4.0, 'sld_face': 7.0, 'sld_rim': 1.0, 
     191      'sld_solvent': 6.0, 'background': 0.0}, 
     192     0.015, 286.540286], 
     193    #[{'theta':80., 'phi':10.}, (qx, qy), 7.88866563001], 
     194] 
    180195 
    181196del qx, qy  # not necessary to delete, but cleaner 
  • sasmodels/models/core_shell_bicelle_elliptical_belt_rough.py

    r129bdc4 r110f69c  
    66core-shell scattering length density profile. Thus this is a variation 
    77of the core-shell bicelle model, but with an elliptical cylinder for the core. 
    8 In this version the "rim" or "belt" does NOT extend the full length of the particle, 
    9 but has the same length as the core. 
    10 Outer shells on the rims and flat ends may be of different thicknesses and  
    11 scattering length densities. The form factor is normalized by the total particle volume. 
     8In this version the "rim" or "belt" does NOT extend the full length of 
     9the particle, but has the same length as the core. Outer shells on the 
     10rims and flat ends may be of different thicknesses and scattering length 
     11densities. The form factor is normalized by the total particle volume. 
    1212This version includes an approximate "interfacial roughness". 
    1313 
     
    1515.. figure:: img/core_shell_bicelle_belt_geometry.png 
    1616 
    17     Schematic cross-section of bicelle with belt. Note however that the model here 
    18     calculates for rectangular, not curved, rims as shown below. 
     17    Schematic cross-section of bicelle with belt. Note however that the model 
     18    here calculates for rectangular, not curved, rims as shown below. 
    1919 
    2020.. figure:: img/core_shell_bicelle_belt_parameters.png 
    2121 
    22    Cross section of model used here. Users will have  
    23    to decide how to distribute "heads" and "tails" between the rim, face  
     22   Cross section of model used here. Users will have 
     23   to decide how to distribute "heads" and "tails" between the rim, face 
    2424   and core regions in order to estimate appropriate starting parameters. 
    2525 
     
    3030.. math:: 
    3131 
    32     \rho(r) =  
    33       \begin{cases}  
     32    \rho(r) = 
     33      \begin{cases} 
    3434      &\rho_c \text{ for } 0 \lt r \lt R;   -L/2 \lt z\lt L/2 \\[1.5ex] 
    35       &\rho_f \text{ for } 0 \lt r \lt R;   -(L/2 +t_{face}) \lt z\lt -L/2;   
    36       L/2 \lt z\lt (L/2+t_{face}) \\[1.5ex] 
    37       &\rho_r\text{ for } R \lt r \lt R+t_{rim}; -L/2 \lt z\lt L/2 
     35      &\rho_f \text{ for } 0 \lt r \lt R;   -(L/2 +t_\text{face}) \lt z\lt -L/2; 
     36      L/2 \lt z\lt (L/2+t_\text{face}) \\[1.5ex] 
     37      &\rho_r\text{ for } R \lt r \lt R+t_\text{rim}; -L/2 \lt z\lt L/2 
    3838      \end{cases} 
    3939 
    4040The form factor for the bicelle is calculated in cylindrical coordinates, where 
    41 $\alpha$ is the angle between the $Q$ vector and the cylinder axis, and $\psi$ is the angle 
    42 for the ellipsoidal cross section core, to give: 
     41$\alpha$ is the angle between the $Q$ vector and the cylinder axis, and $\psi$ 
     42is the angle for the ellipsoidal cross section core, to give: 
    4343 
    4444.. math:: 
    4545 
    46     I(Q,\alpha,\psi) = \frac{\text{scale}}{V_t} \cdot 
    47         F(Q,\alpha, \psi)^2.sin(\alpha).exp\left \{ -\frac{1}{2}Q^2\sigma^2 \right \} + \text{background} 
     46    I(Q,\alpha,\psi) = \frac{\text{scale}}{V_t} 
     47        \cdot F(Q,\alpha, \psi)^2 \cdot \sin(\alpha) 
     48        \cdot\exp\left\{ -\frac{1}{2}Q^2\sigma^2 \right\} + \text{background} 
    4849 
    49 where a numerical integration of $F(Q,\alpha, \psi)^2.sin(\alpha)$ is carried out over \alpha and \psi for: 
     50where a numerical integration of $F(Q,\alpha, \psi)^2\sin(\alpha)$ is 
     51carried out over $\alpha$ and $\psi$ for: 
    5052 
    5153.. math:: 
    5254 
    53         \begin{align}     
    54     F(Q,\alpha,\psi) = &\bigg[  
    55     (\rho_c -\rho_r - \rho_f + \rho_s) V_c \frac{2J_1(QR'sin \alpha)}{QR'sin\alpha}\frac{sin(QLcos\alpha/2)}{Q(L/2)cos\alpha} \\ 
    56     &+(\rho_f - \rho_s) V_{c+f} \frac{2J_1(QR'sin\alpha)}{QR'sin\alpha}\frac{sin(Q(L/2+t_f)cos\alpha)}{Q(L/2+t_f)cos\alpha} \\ 
    57     &+(\rho_r - \rho_s) V_{c+r} \frac{2J_1(Q(R'+t_r)sin\alpha)}{Q(R'+t_r)sin\alpha}\frac{sin(Q(L/2)cos\alpha)}{Q(L/2)cos\alpha} 
     55    F(Q,\alpha,\psi) = &\bigg[ 
     56      (\rho_c -\rho_r - \rho_f + \rho_s) V_c 
     57      \frac{2J_1(QR'\sin \alpha)}{QR'\sin\alpha} 
     58      \frac{\sin(QL\cos\alpha/2)}{Q(L/2)\cos\alpha} \\ 
     59    &+(\rho_f - \rho_s) V_{c+f} 
     60      \frac{2J_1(QR'\sin\alpha)}{QR'\sin\alpha} 
     61      \frac{\sin(Q(L/2+t_f)\cos\alpha)}{Q(L/2+t_f)\cos\alpha} \\ 
     62    &+(\rho_r - \rho_s) V_{c+r} 
     63      \frac{2J_1(Q(R'+t_r)\sin\alpha)}{Q(R'+t_r)\sin\alpha} 
     64      \frac{\sin(Q(L/2)\cos\alpha)}{Q(L/2)\cos\alpha} 
    5865    \bigg] 
    59     \end{align}  
    6066 
    6167where 
     
    6369.. math:: 
    6470 
    65     R'=\frac{R}{\sqrt{2}}\sqrt{(1+X_{core}^{2}) + (1-X_{core}^{2})cos(\psi)} 
    66      
    67      
    68 and $V_t = \pi.(R+t_r)(Xcore.R+t_r).L + 2.\pi.Xcore.R^2.t_f$ is the total volume of the bicelle,  
    69 $V_c = \pi.Xcore.R^2.L$ the volume of the core, $V_{c+f} = \pi.Xcore.R^2.(L+2.t_f)$  
    70 the volume of the core plus the volume of the faces, $V_{c+r} = \pi.(R+t_r)(Xcore.R+t_r),.L$  
    71 the volume of the core plus the rim, $R$ is the radius 
    72 of the core, $Xcore$ is the axial ratio of the core, $L$ the length of the core,  
    73 $t_f$ the thickness of the face, $t_r$ the thickness of the rim and $J_1$ the usual  
    74 first order bessel function. The core has radii $R$ and $Xcore.R$ so is circular,  
    75 as for the core_shell_bicelle model, for $Xcore$ =1. Note that you may need to  
    76 limit the range of $Xcore$, especially if using the Monte-Carlo algorithm, as  
    77 setting radius to $R/Xcore$ and axial ratio to $1/Xcore$ gives an equivalent solution! 
     71    R' = \frac{R}{\sqrt{2}} 
     72        \sqrt{(1+X_\text{core}^{2}) + (1-X_\text{core}^{2})\cos(\psi)} 
    7873 
    79 An approximation for the effects of "Gaussian interfacial roughness" $\sigma$ is included,  
    80 by multiplying $I(Q)$ by $exp\left \{ -\frac{1}{2}Q^2\sigma^2 \right \}$ . This  
    81 applies, in some way, to all interfaces in the model not just the external ones. 
    82 (Note that for a one dimensional system convolution of the scattering length density profile 
    83 with a Gaussian of standard deviation $\sigma$ does exactly this multiplication.) Leave  
    84 $\sigma$ set to zero for the usual sharp interfaces. 
     74 
     75and $V_t = \pi (R+t_r)(X_\text{core} R+t_r) L + 2 \pi X_\text{core} R^2 t_f$ is 
     76the total volume of the bicelle, $V_c = \pi X_\text{core} R^2 L$ the volume of 
     77the core, $V_{c+f} = \pi X_\text{core} R^2 (L+2 t_f)$ the volume of the core 
     78plus the volume of the faces, $V_{c+r} = \pi (R+t_r)(X_\text{core} R+t_r) L$ 
     79the volume of the core plus the rim, $R$ is the radius of the core, 
     80$X_\text{core}$ is the axial ratio of the core, $L$ the length of the core, 
     81$t_f$ the thickness of the face, $t_r$ the thickness of the rim and $J_1$ the 
     82usual first order bessel function. The core has radii $R$ and $X_\text{core} R$ 
     83so is circular, as for the core_shell_bicelle model, for $X_\text{core}=1$. 
     84Note that you may need to limit the range of $X_\text{core}$, especially if 
     85using the Monte-Carlo algorithm, as setting radius to $R/X_\text{core}$ and 
     86axial ratio to $1/X_\text{core}$ gives an equivalent solution! 
     87 
     88An approximation for the effects of "Gaussian interfacial roughness" $\sigma$ 
     89is included, by multiplying $I(Q)$ by 
     90$\exp\left \{ -\frac{1}{2}Q^2\sigma^2 \right \}$. This applies, in some way, to 
     91all interfaces in the model not just the external ones. (Note that for a one 
     92dimensional system convolution of the scattering length density profile with 
     93a Gaussian of standard deviation $\sigma$ does exactly this multiplication.) 
     94Leave $\sigma$ set to zero for the usual sharp interfaces. 
    8595 
    8696The output of the 1D scattering intensity function for randomly oriented 
    8797bicelles is then given by integrating over all possible $\alpha$ and $\psi$. 
    8898 
    89 For oriented bicelles the *theta*, *phi* and *psi* orientation parameters will appear when fitting 2D data,  
    90 for further details of the calculation and angular dispersions  see :ref:`orientation` . 
     99For oriented bicelles the *theta*, *phi* and *psi* orientation parameters 
     100will appear when fitting 2D data, for further details of the calculation 
     101and angular dispersions  see :ref:`orientation` . 
    91102 
    92103.. figure:: img/elliptical_cylinder_angle_definition.png 
    93104 
    94     Definition of the angles for the oriented core_shell_bicelle_elliptical particles.    
     105    Definition of the angles for the oriented core_shell_bicelle_elliptical 
     106    particles. 
    95107 
    96108 
     
    115127description = """ 
    116128    core_shell_bicelle_elliptical_belt_rough 
    117     Elliptical cylinder core, optional shell on the two flat faces, and "belt" shell of  
     129    Elliptical cylinder core, optional shell on the two flat faces, and "belt" shell of 
    118130    uniform thickness on its rim (in this case NOT extending around the end faces). 
    119131    with approximate interfacial roughness. 
     
    173185 
    174186    [{'radius': 30.0, 'x_core': 3.0, 'thick_rim':8.0, 'thick_face':14.0, 'length':50.0, 
    175     'sld_core':4.0, 'sld_face':7.0, 'sld_rim':1.0, 'sld_solvent':6.0, 'background':0.0}, 
    176     0.015, 189.328], 
    177 #    [{'theta':80., 'phi':10.}, (qx, qy), 7.88866563001 ], 
    178         ] 
     187      'sld_core':4.0, 'sld_face':7.0, 'sld_rim':1.0, 'sld_solvent':6.0, 'background':0.0}, 
     188     0.015, 189.328], 
     189    #[{'theta':80., 'phi':10.}, (qx, qy), 7.88866563001 ], 
     190] 
    179191 
    180192del qx, qy  # not necessary to delete, but cleaner 
  • sasmodels/models/core_shell_cylinder.py

    r9f6823b r2d81cfe  
    7373""" 
    7474 
     75import numpy as np 
    7576from numpy import pi, inf, sin, cos 
    7677 
     
    119120              ["theta", "degrees", 60, [-360, 360], "orientation", 
    120121               "cylinder axis to beam angle"], 
    121               ["phi", "degrees",   60, [-360, 360], "orientation", 
     122              ["phi", "degrees", 60, [-360, 360], "orientation", 
    122123               "rotation about beam"], 
    123124             ] 
     
    143144 
    144145def random(): 
    145     import numpy as np 
    146146    outer_radius = 10**np.random.uniform(1, 4.7) 
    147147    # Use a distribution with a preference for thin shell or thin core 
     
    170170qx = q*cos(pi/6.0) 
    171171qy = q*sin(pi/6.0) 
    172 tests = [[{}, 0.075, 10.8552692237], 
    173         [{}, (qx, qy), 0.444618752741 ], 
    174         ] 
     172tests = [ 
     173    [{}, 0.075, 10.8552692237], 
     174    [{}, (qx, qy), 0.444618752741], 
     175] 
    175176del qx, qy  # not necessary to delete, but cleaner 
  • sasmodels/models/core_shell_ellipsoid.py

    r8db25bf r2d81cfe  
    2626ellipsoid is large (ie, if $X << 1$ or $X >> 1$ ), when the $S(q)$ 
    2727- which assumes spheres - will not in any case be valid.  Generating a 
    28 custom product model will enable separate effective volume fraction and effective 
    29 radius in the $S(q)$. 
     28custom product model will enable separate effective volume fraction and 
     29effective radius in the $S(q)$. 
    3030 
    3131If SAS data are in absolute units, and the SLDs are correct, then scale should 
    3232be the total volume fraction of the "outer particle". When $S(q)$ is introduced 
    33 this moves to the $S(q)$ volume fraction, and scale should then be 1.0, 
    34 or contain some other units conversion factor (for example, if you have SAXS data). 
    35  
    36 The calculation of intensity follows that for the solid ellipsoid, but with separate 
    37 terms for the core-shell and shell-solvent boundaries. 
     33this moves to the $S(q)$ volume fraction, and scale should then be 1.0, or 
     34contain some other units conversion factor (for example, if you have SAXS data). 
     35 
     36The calculation of intensity follows that for the solid ellipsoid, but 
     37with separate terms for the core-shell and shell-solvent boundaries. 
    3838 
    3939.. math:: 
     
    4848    \begin{align*} 
    4949    F(q,\alpha) = &f(q,radius\_equat\_core,radius\_equat\_core.x\_core,\alpha) \\ 
    50     &+ f(q,radius\_equat\_core + thick\_shell,radius\_equat\_core.x\_core + thick\_shell.x\_polar\_shell,\alpha) 
     50    &+ f(q,radius\_equat\_core + thick\_shell, 
     51         radius\_equat\_core.x\_core + thick\_shell.x\_polar\_shell,\alpha) 
    5152    \end{align*} 
    5253 
     
    6869 
    6970$\alpha$ is the angle between the axis of the ellipsoid and $\vec q$, 
    70 $V = (4/3)\pi R_pR_e^2$ is the volume of the ellipsoid , $R_p$ is the polar radius along the 
    71 rotational axis of the ellipsoid, $R_e$ is the equatorial radius perpendicular 
    72 to the rotational axis of the ellipsoid and $\Delta \rho$ (contrast) is the 
    73 scattering length density difference, either $(sld\_core - sld\_shell)$ or $(sld\_shell - sld\_solvent)$. 
     71$V = (4/3)\pi R_pR_e^2$ is the volume of the ellipsoid , $R_p$ is the 
     72polar radius along the rotational axis of the ellipsoid, $R_e$ is the 
     73equatorial radius perpendicular to the rotational axis of the ellipsoid 
     74and $\Delta \rho$ (contrast) is the scattering length density difference, 
     75either $(sld\_core - sld\_shell)$ or $(sld\_shell - sld\_solvent)$. 
    7476 
    7577For randomly oriented particles: 
     
    7981   F^2(q)=\int_{0}^{\pi/2}{F^2(q,\alpha)\sin(\alpha)d\alpha} 
    8082 
    81 For oriented ellipsoids the *theta*, *phi* and *psi* orientation parameters will appear when fitting 2D data, 
    82 see the :ref:`elliptical-cylinder` model for further information. 
     83For oriented ellipsoids the *theta*, *phi* and *psi* orientation parameters 
     84will appear when fitting 2D data, see the :ref:`elliptical-cylinder` model 
     85for further information. 
    8386 
    8487References 
     
    9497* **Last Modified by:** Richard Heenan (reparametrised model) **Date:** 2015 
    9598* **Last Reviewed by:** Richard Heenan **Date:** October 6, 2016 
    96  
    9799""" 
    98100 
     101import numpy as np 
    99102from numpy import inf, sin, cos, pi 
    100103 
     
    153156 
    154157def random(): 
    155     import numpy as np 
    156     V = 10**np.random.uniform(5, 12) 
     158    volume = 10**np.random.uniform(5, 12) 
    157159    outer_polar = 10**np.random.uniform(1.3, 4) 
    158     outer_equatorial = np.sqrt(V/outer_polar) # ignore 4/3 pi 
     160    outer_equatorial = np.sqrt(volume/outer_polar) # ignore 4/3 pi 
    159161    # Use a distribution with a preference for thin shell or thin core 
    160162    # Avoid core,shell radii < 1 
     
    180182# 11Jan2017 RKH sorted tests after redefinition of angles 
    181183tests = [ 
    182      # Accuracy tests based on content in test/utest_coreshellellipsoidXTmodel.py 
     184    # Accuracy tests based on content in test/utest_coreshellellipsoidXTmodel.py 
    183185    [{'radius_equat_core': 200.0, 
    184186      'x_core': 0.1, 
     
    206208     }, 0.01, 8688.53], 
    207209 
    208    # 2D tests 
    209    [{'background': 0.001, 
    210      'theta': 90.0, 
    211      'phi': 0.0, 
     210    # 2D tests 
     211    [{'background': 0.001, 
     212      'theta': 90.0, 
     213      'phi': 0.0, 
    212214     }, (0.4, 0.5), 0.00690673], 
    213215 
    214    [{'radius_equat_core': 20.0, 
     216    [{'radius_equat_core': 20.0, 
    215217      'x_core': 200.0, 
    216218      'thick_shell': 54.0, 
     
    224226      'phi': 0.0, 
    225227     }, (qx, qy), 0.01000025], 
    226     ] 
     228] 
  • sasmodels/models/core_shell_parallelepiped.py

    r688d315 r0e55afe  
    77"rim" can be different on each (pair) of faces. 
    88 
    9  
    109The form factor is normalized by the particle volume $V$ such that 
    1110 
     
    1615where $\langle \ldots \rangle$ is an average over all possible orientations 
    1716of the rectangular solid. 
    18  
    1917 
    2018The function calculated is the form factor of the rectangular solid below. 
     
    9694 
    9795    Definition of the angles for oriented core-shell parallelepipeds. 
    98     Note that rotation $\theta$, initially in the $xz$ plane, is carried out first, then 
    99     rotation $\phi$ about the $z$ axis, finally rotation $\Psi$ is now around the axis of the parallelepiped. 
    100     The neutron or X-ray beam is along the $z$ axis. 
     96    Note that rotation $\theta$, initially in the $xz$ plane, is carried 
     97    out first, then rotation $\phi$ about the $z$ axis, finally rotation 
     98    $\Psi$ is now around the axis of the cylinder. The neutron or X-ray 
     99    beam is along the $z$ axis. 
    101100 
    102101.. figure:: img/parallelepiped_angle_projection.png 
     
    184183 
    185184def random(): 
    186     import numpy as np 
    187185    outer = 10**np.random.uniform(1, 4.7, size=3) 
    188186    thick = np.random.beta(0.5, 0.5, size=3)*(outer-2) + 1 
     
    218216    qx, qy = 0.2 * cos(pi/6.), 0.2 * sin(pi/6.) 
    219217    tests = [[{}, 0.2, 0.533149288477], 
    220             [{}, [0.2], [0.533149288477]], 
    221             [{'theta':10.0, 'phi':20.0}, (qx, qy), 0.0853299803222], 
    222             [{'theta':10.0, 'phi':20.0}, [(qx, qy)], [0.0853299803222]], 
     218             [{}, [0.2], [0.533149288477]], 
     219             [{'theta':10.0, 'phi':20.0}, (qx, qy), 0.0853299803222], 
     220             [{'theta':10.0, 'phi':20.0}, [(qx, qy)], [0.0853299803222]], 
    223221            ] 
    224222    del qx, qy  # not necessary to delete, but cleaner 
  • sasmodels/models/core_shell_sphere.py

    r9f6823b r2d81cfe  
    5252""" 
    5353 
     54import numpy as np 
    5455from numpy import pi, inf 
    5556 
     
    100101 
    101102def random(): 
    102     import numpy as np 
    103103    outer_radius = 10**np.random.uniform(1.3, 4.3) 
    104104    # Use a distribution with a preference for thin shell or thin core 
  • sasmodels/models/cylinder.py

    reda8b30 r2d81cfe  
    6464 
    6565    Angles $\theta$ and $\phi$ orient the cylinder relative 
    66     to the beam line coordinates, where the beam is along the $z$ axis. Rotation $\theta$, initially  
     66    to the beam line coordinates, where the beam is along the $z$ axis. Rotation $\theta$, initially 
    6767    in the $xz$ plane, is carried out first, then rotation $\phi$ about the $z$ axis. Orientation distributions 
    6868    are described as rotations about two perpendicular axes $\delta_1$ and $\delta_2$ 
     
    133133              ["theta", "degrees", 60, [-360, 360], "orientation", 
    134134               "cylinder axis to beam angle"], 
    135               ["phi", "degrees",   60, [-360, 360], "orientation", 
     135              ["phi", "degrees", 60, [-360, 360], "orientation", 
    136136               "rotation about beam"], 
    137137             ] 
    138138 
    139 source = ["lib/polevl.c", "lib/sas_J1.c", "lib/gauss76.c",  "cylinder.c"] 
     139source = ["lib/polevl.c", "lib/sas_J1.c", "lib/gauss76.c", "cylinder.c"] 
    140140 
    141141def ER(radius, length): 
     
    147147 
    148148def random(): 
    149     import numpy as np 
    150     V = 10**np.random.uniform(5, 12) 
    151     length = 10**np.random.uniform(-2, 2)*V**0.333 
    152     radius = np.sqrt(V/length/np.pi) 
     149    volume = 10**np.random.uniform(5, 12) 
     150    length = 10**np.random.uniform(-2, 2)*volume**0.333 
     151    radius = np.sqrt(volume/length/np.pi) 
    153152    pars = dict( 
    154153        #scale=1, 
     
    172171qx, qy = 0.2 * np.cos(2.5), 0.2 * np.sin(2.5) 
    173172# After redefinition of angles, find new tests values.  Was 10 10 in old coords 
    174 tests = [[{}, 0.2, 0.042761386790780453], 
    175         [{}, [0.2], [0.042761386790780453]], 
    176 #  new coords 
    177         [{'theta':80.1534480601659, 'phi':10.1510817110481}, (qx, qy), 0.03514647218513852], 
    178         [{'theta':80.1534480601659, 'phi':10.1510817110481}, [(qx, qy)], [0.03514647218513852]], 
    179 # old coords   [{'theta':10.0, 'phi':10.0}, (qx, qy), 0.03514647218513852], 
    180 #              [{'theta':10.0, 'phi':10.0}, [(qx, qy)], [0.03514647218513852]], 
    181         ] 
     173tests = [ 
     174    [{}, 0.2, 0.042761386790780453], 
     175    [{}, [0.2], [0.042761386790780453]], 
     176    #  new coords 
     177    [{'theta':80.1534480601659, 'phi':10.1510817110481}, (qx, qy), 0.03514647218513852], 
     178    [{'theta':80.1534480601659, 'phi':10.1510817110481}, [(qx, qy)], [0.03514647218513852]], 
     179    # old coords 
     180    #[{'theta':10.0, 'phi':10.0}, (qx, qy), 0.03514647218513852], 
     181    #[{'theta':10.0, 'phi':10.0}, [(qx, qy)], [0.03514647218513852]], 
     182] 
    182183del qx, qy  # not necessary to delete, but cleaner 
    183184# ADDED by:  RKH  ON: 18Mar2016 renamed sld's etc 
  • sasmodels/models/dab.py

    r404ebbd r2d81cfe  
    3838 
    3939*2013/09/09 - Description reviewed by King, S and Parker, P.* 
    40  
    4140""" 
    4241 
     42import numpy as np 
    4343from numpy import inf 
    4444 
     
    6666 
    6767def random(): 
    68     import numpy as np 
    6968    pars = dict( 
    7069        scale=10**np.random.uniform(1, 4), 
  • sasmodels/models/ellipsoid.py

    reda8b30 r2d81cfe  
    5353    r = R_e \left[ 1 + u^2\left(R_p^2/R_e^2 - 1\right)\right]^{1/2} 
    5454 
    55 For 2d data from oriented ellipsoids the direction of the rotation axis of  
    56 the ellipsoid is defined using two angles $\theta$ and $\phi$ as for the  
     55For 2d data from oriented ellipsoids the direction of the rotation axis of 
     56the ellipsoid is defined using two angles $\theta$ and $\phi$ as for the 
    5757:ref:`cylinder orientation figure <cylinder-angle-definition>`. 
    5858For the ellipsoid, $\theta$ is the angle between the rotational axis 
    5959and the $z$ -axis in the $xz$ plane followed by a rotation by $\phi$ 
    60 in the $xy$ plane, for further details of the calculation and angular  
     60in the $xy$ plane, for further details of the calculation and angular 
    6161dispersions see :ref:`orientation` . 
    6262 
     
    123123from __future__ import division 
    124124 
     125import numpy as np 
    125126from numpy import inf, sin, cos, pi 
    126127 
     
    163164 
    164165def ER(radius_polar, radius_equatorial): 
    165     import numpy as np 
    166166    # see equation (26) in A.Isihara, J.Chem.Phys. 18(1950)1446-1449 
    167167    ee = np.empty_like(radius_polar) 
     
    185185 
    186186def random(): 
    187     import numpy as np 
    188     V = 10**np.random.uniform(5, 12) 
     187    volume = 10**np.random.uniform(5, 12) 
    189188    radius_polar = 10**np.random.uniform(1.3, 4) 
    190     radius_equatorial = np.sqrt(V/radius_polar) # ignore 4/3 pi 
     189    radius_equatorial = np.sqrt(volume/radius_polar) # ignore 4/3 pi 
    191190    pars = dict( 
    192191        #background=0, sld=0, sld_solvent=1, 
     
    208207qx = q*cos(pi/6.0) 
    209208qy = q*sin(pi/6.0) 
    210 tests = [[{}, 0.05, 54.8525847025], 
    211         [{'theta':80., 'phi':10.}, (qx, qy), 1.74134670026 ], 
    212         ] 
     209tests = [ 
     210    [{}, 0.05, 54.8525847025], 
     211    [{'theta':80., 'phi':10.}, (qx, qy), 1.74134670026], 
     212] 
    213213del qx, qy  # not necessary to delete, but cleaner 
  • sasmodels/models/elliptical_cylinder.py

    reda8b30 r2d81cfe  
    4343    P(q) = \text{scale}  <F^2> / V 
    4444 
    45 For 2d data the orientation of the particle is required, described using a different set  
    46 of angles as in the diagrams below, for further details of the calculation and angular  
     45For 2d data the orientation of the particle is required, described using a different set 
     46of angles as in the diagrams below, for further details of the calculation and angular 
    4747dispersions  see :ref:`orientation` . 
    4848 
     
    9595* **Last Modified by:** 
    9696* **Last Reviewed by:**  Richard Heenan - corrected equation in docs **Date:** December 21, 2016 
    97  
    9897""" 
    9998 
     99import numpy as np 
    100100from numpy import pi, inf, sqrt, sin, cos 
    101101 
     
    141141 
    142142def random(): 
    143     import numpy as np 
    144143    # V = pi * radius_major * radius_minor * length; 
    145     V = 10**np.random.uniform(3, 9) 
     144    volume = 10**np.random.uniform(3, 9) 
    146145    length = 10**np.random.uniform(1, 3) 
    147146    axis_ratio = 10**np.random.uniform(0, 2) 
    148     radius_minor = np.sqrt(V/length/axis_ratio) 
    149     Vf = 10**np.random.uniform(-4, -2) 
     147    radius_minor = np.sqrt(volume/length/axis_ratio) 
     148    volfrac = 10**np.random.uniform(-4, -2) 
    150149    pars = dict( 
    151150        #background=0, sld=0, sld_solvent=1, 
    152         scale=1e9*Vf/V, 
     151        scale=1e9*volfrac/volume, 
    153152        length=length, 
    154153        radius_minor=radius_minor, 
     
    170169      'sld_solvent':1.0, 'background':0.0}, 
    171170     0.001, 675.504402], 
    172 #    [{'theta':80., 'phi':10.}, (qx, qy), 7.88866563001 ], 
     171    #[{'theta':80., 'phi':10.}, (qx, qy), 7.88866563001 ], 
    173172] 
  • sasmodels/models/fcc_paracrystal.py

    r1f159bd r2d81cfe  
    9595""" 
    9696 
     97import numpy as np 
    9798from numpy import inf, pi 
    9899 
     
    124125 
    125126def random(): 
    126     import numpy as np 
    127127    # copied from bcc_paracrystal 
    128128    radius = 10**np.random.uniform(1.3, 4) 
  • sasmodels/models/flexible_cylinder.py

    r2573fa1 r2d81cfe  
    606022(15) 2006 6539-6548 
    6161""" 
     62 
     63import numpy as np 
    6264from numpy import inf 
    6365 
     
    8789 
    8890def random(): 
    89     import numpy as np 
    9091    length = 10**np.random.uniform(2, 6) 
    9192    radius = 10**np.random.uniform(1, 3) 
  • sasmodels/models/flexible_cylinder_elliptical.py

    r31df0c9 r2d81cfe  
    838322(15) 2006 6539-6548 
    8484""" 
     85 
     86import numpy as np 
    8587from numpy import inf 
    8688 
     
    113115 
    114116def random(): 
    115     import numpy as np 
    116117    length = 10**np.random.uniform(2, 6) 
    117118    radius = 10**np.random.uniform(1, 3) 
     
    164165     }, 1.0, 0.0016338264790] 
    165166    ] 
    166  
  • sasmodels/models/fractal.py

    r1511c37c r2d81cfe  
    5353* **Last Modified by:** Paul Butler **Date:** March 12, 2017 
    5454* **Last Reviewed by:** Paul Butler **Date:** March 12, 2017 
    55  
    5655""" 
    5756from __future__ import division 
    5857 
     58import numpy as np 
    5959from numpy import inf 
    6060 
     
    100100 
    101101def random(): 
    102     import numpy as np 
    103102    radius = 10**np.random.uniform(0.7, 4) 
    104103    #radius = 5 
  • sasmodels/models/fractal_core_shell.py

    rca04add r2d81cfe  
    5757* **Last Modified by:** Paul Butler and Paul Kienzle **on:** November 27, 2016 
    5858* **Last Reviewed by:** Paul Butler and Paul Kienzle **on:** November 27, 2016 
    59  
    6059""" 
    6160 
     61import numpy as np 
    6262from numpy import pi, inf 
    6363 
     
    9898 
    9999def random(): 
    100     import numpy as np 
    101100    outer_radius = 10**np.random.uniform(0.7, 4) 
    102101    # Use a distribution with a preference for thin shell or thin core 
  • sasmodels/models/fuzzy_sphere.py

    r31df0c9 r2d81cfe  
    5555""" 
    5656 
     57import numpy as np 
    5758from numpy import inf 
    5859 
     
    106107 
    107108def random(): 
    108     import numpy as np 
    109109    radius = 10**np.random.uniform(1, 4.7) 
    110110    fuzziness = 10**np.random.uniform(-2, -0.5)*radius  # 1% to 31% fuzziness 
  • sasmodels/models/gauss_lorentz_gel.py

    r48462b0 r2d81cfe  
    3434G Evmenenko, E Theunissen, K Mortensen, H Reynaers, *Polymer*, 
    353542 (2001) 2907-2913 
    36  
    3736""" 
    3837 
     38import numpy as np 
    3939from numpy import inf, exp 
    4040 
     
    8989 
    9090def random(): 
    91     import numpy as np 
    9291    gauss_scale = 10**np.random.uniform(1, 3) 
    9392    lorentz_scale = 10**np.random.uniform(1, 3) 
  • sasmodels/models/gaussian_peak.py

    r48462b0 r2d81cfe  
    2828""" 
    2929 
     30import numpy as np 
    3031from numpy import inf 
    3132 
     
    5253 
    5354def random(): 
    54     import numpy as np 
    5555    peak_pos = 10**np.random.uniform(-3, -1) 
    5656    sigma = 10**np.random.uniform(-1.3, -0.3)*peak_pos 
  • sasmodels/models/gel_fit.py

    r48462b0 r2d81cfe  
    4242Simon Mallam, Ferenc Horkay, Anne-Marie Hecht, Adrian R Rennie, Erik Geissler, 
    4343*Macromolecules* 1991, 24, 543-548 
    44  
    4544""" 
    4645 
     46import numpy as np 
    4747from numpy import inf 
    4848 
     
    7272 
    7373def random(): 
    74     import numpy as np 
    7574    guinier_scale = 10**np.random.uniform(1, 3) 
    7675    lorentz_scale = 10**np.random.uniform(1, 3) 
  • sasmodels/models/guinier.py

    r48462b0 r2d81cfe  
    2727""" 
    2828 
     29import numpy as np 
    2930from numpy import inf 
    3031 
     
    5051 
    5152def random(): 
    52     import numpy as np 
    5353    scale = 10**np.random.uniform(1, 4) 
    5454    # Note: compare.py has Rg cutoff of 1e-30 at q=1 for guinier, so use that 
  • sasmodels/models/guinier_porod.py

    r48462b0 r2d81cfe  
    6363 
    6464B Hammouda, *Analysis of the Beaucage model, J. Appl. Cryst.*, (2010), 43, 1474-1478 
    65  
    6665""" 
    6766 
     67import numpy as np 
    6868from numpy import inf, sqrt, exp, errstate 
    6969 
     
    115115 
    116116def random(): 
    117     import numpy as np 
    118117    rg = 10**np.random.uniform(1, 5) 
    119118    s = np.random.uniform(0, 3) 
  • sasmodels/models/hardsphere.py

    r8f04da4 r2d81cfe  
    4242""" 
    4343 
     44import numpy as np 
    4445from numpy import inf 
    4546 
     
    7778      // these are c compiler instructions, can also put normal code inside the "if else" structure 
    7879      #if FLOAT_SIZE > 4 
    79       // double precision    orig had 0.2, don't call the variable cutoff as PAK already has one called that! Must use UPPERCASE name please. 
    80       //  0.05 better, 0.1 OK 
     80      // double precision 
     81      // orig had 0.2, don't call the variable cutoff as PAK already has one called that! 
     82      // Must use UPPERCASE name please. 
     83      // 0.05 better, 0.1 OK 
    8184      #define CUTOFFHS 0.05 
    8285      #else 
     
    9093               return(HARDSPH); 
    9194      } 
    92       // removing use of pow(xxx,2) and rearranging the calcs of A, B & G cut ~40% off execution time ( 0.5 to 0.3 msec) 
     95      // removing use of pow(xxx,2) and rearranging the calcs 
     96      // of A, B & G cut ~40% off execution time ( 0.5 to 0.3 msec) 
    9397      X = 1.0/( 1.0 -volfraction); 
    9498      D= X*X; 
     
    110114      if(X < CUTOFFHS) { 
    111115      // RKH Feb 2016, use Taylor series expansion for small X 
    112       // else no obvious way to rearrange the equations to avoid needing a very high number of significant figures. 
    113       // Series expansion found using Mathematica software. Numerical test in .xls showed terms to X^2 are sufficient 
     116      // else no obvious way to rearrange the equations to avoid 
     117      // needing a very high number of significant figures. 
     118      // Series expansion found using Mathematica software. Numerical test 
     119      // in .xls showed terms to X^2 are sufficient 
    114120      // for 5 or 6 significant figures, but I put the X^4 one in anyway 
    115121            //FF = 8*A +6*B + 4*G - (0.8*A +2.0*B/3.0 +0.5*G)*X2 +(A/35. +B/40. +G/50.)*X4; 
     
    130136      SINCOS(X,S,C); 
    131137 
    132 // RKH Feb 2016, use version FISH code as is better than original sasview one at small Q in single precision, and more than twice as fast in double. 
     138// RKH Feb 2016, use version FISH code as is better than original sasview one 
     139// at small Q in single precision, and more than twice as fast in double. 
    133140      //FF=A*(S-X*C)/X + B*(2.*X*S -(X2-2.)*C -2.)/X2 + G*( (4.*X2*X -24.*X)*S -(X4 -12.*X2 +24.)*C +24. )/X4; 
    134141      // refactoring the polynomial here & above makes it slightly faster 
     
    154161 
    155162def random(): 
    156     import numpy as np 
    157163    pars = dict( 
    158164        scale=1, background=0, 
     
    167173demo = dict(radius_effective=200, volfraction=0.2, 
    168174            radius_effective_pd=0.1, radius_effective_pd_n=40) 
    169 # Q=0.001 is in the Taylor series, low Q part, so add Q=0.1, assuming double precision sasview is correct 
     175# Q=0.001 is in the Taylor series, low Q part, so add Q=0.1, 
     176# assuming double precision sasview is correct 
    170177tests = [ 
    171         [ {'scale': 1.0, 'background' : 0.0, 'radius_effective' : 50.0, 
    172            'volfraction' : 0.2, 'radius_effective_pd' : 0}, 
    173           [0.001,0.1], [0.209128,0.930587]], 
    174         ] 
    175 # ADDED by: RKH  ON: 16Mar2016  using equations from FISH as better than orig sasview, see notes above. Added Taylor expansions at small Q, 
     178    [{'scale': 1.0, 'background' : 0.0, 'radius_effective' : 50.0, 
     179      'volfraction' : 0.2, 'radius_effective_pd' : 0}, 
     180     [0.001, 0.1], [0.209128, 0.930587]], 
     181] 
     182# ADDED by: RKH  ON: 16Mar2016  using equations from FISH as better than 
     183# orig sasview, see notes above. Added Taylor expansions at small Q. 
  • sasmodels/models/hayter_msa.py

    r8f04da4 r2d81cfe  
    4141J P Hansen and J B Hayter, *Molecular Physics*, 46 (1982) 651-656 
    4242""" 
     43 
     44import numpy as np 
    4345from numpy import inf 
    4446 
     
    9193 
    9294def random(): 
    93     import numpy as np 
    9495    # TODO: too many failures for random hayter_msa parameters 
    9596    pars = dict( 
  • sasmodels/models/hollow_cylinder.py

    r8f04da4 r2d81cfe  
    3838for structure factor $S(q)$ when $P(q) \cdot S(q)$ is applied. 
    3939 
    40 In the parameters,the *radius* is $R_\text{core}$ while *thickness* is $R_\text{outer} - R_\text{core}$. 
     40In the parameters,the *radius* is $R_\text{core}$ while *thickness* 
     41is $R_\text{outer} - R_\text{core}$. 
    4142 
    4243To provide easy access to the orientation of the core-shell cylinder, we define 
     
    5758   (reparametrised to use thickness, not outer radius) 
    5859* **Last Reviewed by:** Richard Heenan **Date:** October 06, 2016 
    59  
    6060""" 
    6161 
     62import numpy as np 
    6263from numpy import pi, inf, sin, cos 
    6364 
     
    122123 
    123124def random(): 
    124     import numpy as np 
    125125    length = 10**np.random.uniform(1, 4.7) 
    126126    outer_radius = 10**np.random.uniform(1, 4.7) 
     
    153153    [{}, 'VR', 1.8], 
    154154    [{}, 0.001, 1756.76], 
    155     [{}, (qx, qy), 2.36885476192  ], 
    156         ] 
     155    [{}, (qx, qy), 2.36885476192], 
     156] 
    157157del qx, qy  # not necessary to delete, but cleaner 
  • sasmodels/models/hollow_rectangular_prism.py

    r393facf r0e55afe  
    100100 
    101101R Nayuk and K Huber, *Z. Phys. Chem.*, 226 (2012) 837-854 
    102  
    103102""" 
    104103 
     104import numpy as np 
    105105from numpy import pi, inf, sqrt 
    106106 
     
    173173 
    174174def random(): 
    175     import numpy as np 
    176175    a, b, c = 10**np.random.uniform(1, 4.7, size=3) 
    177176    # Thickness is limited to 1/2 the smallest dimension 
  • sasmodels/models/hollow_rectangular_prism_thin_walls.py

    r31df0c9 r2d81cfe  
    7474 
    7575R Nayuk and K Huber, *Z. Phys. Chem.*, 226 (2012) 837-854 
    76  
    7776""" 
    7877 
     78import numpy as np 
    7979from numpy import pi, inf, sqrt 
    8080 
     
    128128 
    129129def random(): 
    130     import numpy as np 
    131130    a, b, c = 10**np.random.uniform(1, 4.7, size=3) 
    132131    pars = dict( 
     
    149148         [{}, [0.2], [0.837719188592]], 
    150149        ] 
    151  
    152  
  • sasmodels/models/lamellar.py

    r1511c37c r2d81cfe  
    4343 
    4444also in J. Phys. Chem. B, 105, (2001) 11081-11088 
    45  
    46  
    4745""" 
    4846 
     47import numpy as np 
    4948from numpy import inf 
    5049 
     
    9089 
    9190def random(): 
    92     import numpy as np 
    9391    thickness = 10**np.random.uniform(1, 4) 
    9492    pars = dict( 
     
    104102            thickness=40, 
    105103            thickness_pd=0.2, thickness_pd_n=40) 
     104#  [(qx1, qy1), (qx2, qy2), ...], [I(qx1,qy1), I(qx2,qy2), ...]], 
    106105tests = [ 
    107         [ {'scale': 1.0, 'background': 0.0, 'thickness': 50.0, 
    108            'sld': 1.0, 'sld_solvent': 6.3, 'thickness_pd': 0.0}, 
    109           [0.001], [882289.54309]] 
    110         ] 
    111 # ADDED by: converted by PAK? (or RKH?)     ON: 16Mar2016 - RKH adding unit tests from sasview to early 2015 conversion 
    112 #  [(qx1, qy1), (qx2, qy2), ...], [I(qx1,qy1), I(qx2,qy2), ...]], 
     106    [{'scale': 1.0, 'background': 0.0, 'thickness': 50.0, 
     107      'sld': 1.0, 'sld_solvent': 6.3, 'thickness_pd': 0.0}, 
     108     [0.001], [882289.54309]] 
     109] 
     110# ADDED by: converted by PAK? (or RKH?) 
     111# ON: 16Mar2016 - RKH adding unit tests from sasview to early 2015 conversion 
  • sasmodels/models/lamellar_hg.py

    r1511c37c r2d81cfe  
    4848""" 
    4949 
     50import numpy as np 
    5051from numpy import inf 
    5152 
     
    99100 
    100101def random(): 
    101     import numpy as np 
    102102    thickness = 10**np.random.uniform(1, 4) 
    103103    length_head = thickness * np.random.uniform(0, 1) 
  • sasmodels/models/lamellar_hg_stack_caille.py

    r1511c37c r2d81cfe  
    7373also in J. Phys. Chem. B, 105, (2001) 11081-11088 
    7474""" 
     75 
     76import numpy as np 
    7577from numpy import inf 
    7678 
     
    124126 
    125127def random(): 
    126     import numpy as np 
    127128    total_thickness = 10**np.random.uniform(2, 4.7) 
    128129    Nlayers = np.random.randint(2, 200) 
  • sasmodels/models/lamellar_stack_caille.py

    r1511c37c r2d81cfe  
    6868also in J. Phys. Chem. B, 105, (2001) 11081-11088 
    6969""" 
     70 
     71import numpy as np 
    7072from numpy import inf 
    7173 
     
    99101 
    100102def random(): 
    101     import numpy as np 
    102103    total_thickness = 10**np.random.uniform(2, 4.7) 
    103104    Nlayers = np.random.randint(2, 200) 
  • sasmodels/models/lamellar_stack_paracrystal.py

    r8f04da4 r2d81cfe  
    9090M Bergstrom, J S Pedersen, P Schurtenberger, S U Egelhaaf, 
    9191*J. Phys. Chem. B*, 103 (1999) 9888-9897 
    92  
    9392""" 
    9493 
     94import numpy as np 
    9595from numpy import inf 
    9696 
     
    133133 
    134134def random(): 
    135     import numpy as np 
    136135    total_thickness = 10**np.random.uniform(2, 4.7) 
    137136    Nlayers = np.random.randint(2, 200) 
     
    158157# 
    159158tests = [ 
    160     [{'scale': 1.0, 'background': 0.0, 'thickness': 33.,'Nlayers': 20.0, 
     159    [{'scale': 1.0, 'background': 0.0, 'thickness': 33., 'Nlayers': 20.0, 
    161160      'd_spacing': 250., 'sigma_d': 0.2, 'sld': 1.0, 
    162       'sld_solvent': 6.34, 'thickness_pd': 0.0, 'thickness_pd_n': 40 }, 
     161      'sld_solvent': 6.34, 'thickness_pd': 0.0, 'thickness_pd_n': 40}, 
    163162     [0.001, 0.215268], [21829.3, 0.00487686]], 
    164163] 
    165 # ADDED by: RKH  ON: 18Mar2016  converted from sasview previously, now renaming everything & sorting the docs 
     164# ADDED by: RKH  ON: 18Mar2016  converted from sasview previously, 
     165# now renaming everything & sorting the docs 
  • sasmodels/models/line.py

    rc63a7c8 r2d81cfe  
    2222 
    2323None. 
     24""" 
    2425 
    25 """ 
     26import numpy as np 
    2627from numpy import inf 
    2728 
     
    7071 
    7172def random(): 
    72     import numpy as np 
    7373    scale = 10**np.random.uniform(0, 3) 
    7474    slope = np.random.uniform(-1, 1)*1e2 
  • sasmodels/models/linear_pearls.py

    r8f04da4 r2d81cfe  
    3131A V Dobrynin, M Rubinstein and S P Obukhov, *Macromol.*, 
    323229 (1996) 2974-2979 
    33  
    3433""" 
    3534 
     35import numpy as np 
    3636from numpy import inf 
    3737 
     
    6666 
    6767def random(): 
    68     import numpy as np 
    6968    radius = 10**np.random.uniform(1, 3) # 1 - 1000 
    7069    edge_sep = 10**np.random.uniform(0, 3)  # 1 - 1000 
  • sasmodels/models/lorentz.py

    r404ebbd r2d81cfe  
    2424""" 
    2525 
     26import numpy as np 
    2627from numpy import inf 
    2728 
     
    4950 
    5051def random(): 
    51     import numpy as np 
    5252    pars = dict( 
    5353        #background=0, 
  • sasmodels/models/mass_fractal.py

    r4553dae r2d81cfe  
    5151D Mildner and P Hall, *J. Phys. D: Appl. Phys.*, 
    525219 (1986) 1535-1545 Equation(9) 
    53  
    54  
    5553""" 
    5654 
     55import numpy as np 
    5756from numpy import inf 
    5857 
     
    8988 
    9089def random(): 
    91     import numpy as np 
    9290    radius = 10**np.random.uniform(0.7, 4) 
    9391    cutoff_length = 10**np.random.uniform(0.7, 2)*radius 
    9492    # TODO: fractal dimension should range from 1 to 6 
    9593    fractal_dim_mass = 2*np.random.beta(3, 4) + 1 
    96     Vf = 10**np.random.uniform(-4, -1) 
     94    #volfrac = 10**np.random.uniform(-4, -1) 
    9795    pars = dict( 
    9896        #background=0, 
    99         scale=1, #1e5*Vf/radius**(fractal_dim_mass), 
     97        scale=1, #1e5*volfrac/radius**(fractal_dim_mass), 
    10098        radius=radius, 
    10199        cutoff_length=cutoff_length, 
  • sasmodels/models/mass_surface_fractal.py

    rca04add r2d81cfe  
    4949A J Hurd, D W Schaefer, J E Martin, *Phys. Rev. A*, 
    505035 (1987) 2361-2364 Equation(2) 
    51  
    5251""" 
    5352 
     53import numpy as np 
    5454from numpy import inf 
    5555 
     
    8686 
    8787def random(): 
    88     import numpy as np 
    8988    fractal_dim = np.random.uniform(0, 6) 
    9089    surface_portion = np.random.uniform(0, 1) 
  • sasmodels/models/mono_gauss_coil.py

    rca04add r2d81cfe  
    5353""" 
    5454 
     55import numpy as np 
    5556from numpy import inf, exp, errstate 
    5657 
     
    8485 
    8586def random(): 
    86     import numpy as np 
    8787    rg = 10**np.random.uniform(0, 4) 
    8888    #rg = 1e3 
  • sasmodels/models/multilayer_vesicle.py

    r64eecf7 r2d81cfe  
    110110""" 
    111111 
     112import numpy as np 
    112113from numpy import inf 
    113114 
     
    151152 
    152153def random(): 
    153     import numpy as np 
    154154    volfraction = 10**np.random.uniform(-3, -0.5)  # scale from 0.1% to 30% 
    155155    radius = 10**np.random.uniform(0, 2.5) # core less than 300 A 
  • sasmodels/models/onion.py

    rca04add r2d81cfe  
    260260# 
    261261 
    262  
    263262from __future__ import division 
     263 
     264from math import fabs, exp, expm1 
    264265 
    265266import numpy as np 
    266267from numpy import inf, nan 
    267 from math import fabs, exp, expm1 
    268268 
    269269name = "onion"