Changeset 8bd7b77 in sasmodels


Ignore:
Timestamp:
Apr 7, 2016 2:00:23 PM (8 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
6e7ff6d
Parents:
4937980
Message:

respect parameter limits during compare random

Location:
sasmodels
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/compare.py

    r21b116f r8bd7b77  
    209209    Choose a parameter range based on parameter name and initial value. 
    210210    """ 
     211    # process the polydispersity options 
    211212    if p.endswith('_pd_n'): 
    212213        return [0, 100] 
     
    221222        else: 
    222223            return [-180, 180] 
     224    elif p.endswith('_pd'): 
     225        return [0, 1] 
    223226    elif 'sld' in p: 
    224227        return [-0.5, 10] 
    225     elif p.endswith('_pd'): 
    226         return [0, 1] 
    227228    elif p == 'background': 
    228229        return [0, 10] 
    229230    elif p == 'scale': 
    230231        return [0, 1e3] 
    231     elif p == 'case_num': 
    232         # RPA hack 
    233         return [0, 10] 
    234232    elif v < 0: 
    235         # Kxy parameters in rpa model can be negative 
    236233        return [2*v, -2*v] 
    237234    else: 
     
    239236 
    240237 
    241 def _randomize_one(p, v): 
     238def _randomize_one(model_info, p, v): 
    242239    """ 
    243240    Randomize a single parameter. 
     
    245242    if any(p.endswith(s) for s in ('_pd_n', '_pd_nsigma', '_pd_type')): 
    246243        return v 
     244 
     245    # Find the parameter definition 
     246    for par in model_info['parameters'].call_parameters: 
     247        if par.name == p: 
     248            break 
    247249    else: 
    248         return np.random.uniform(*parameter_range(p, v)) 
    249  
    250  
    251 def randomize_pars(pars, seed=None): 
     250        raise ValueError("unknown parameter %r"%p) 
     251 
     252    if len(par.limits) > 2:  # choice list 
     253        return np.random.randint(len(par.limits)) 
     254 
     255    limits = par.limits 
     256    if not np.isfinite(limits).all(): 
     257        low, high = parameter_range(p, v) 
     258        limits = (max(limits[0], low), min(limits[1], high)) 
     259 
     260    return np.random.uniform(*limits) 
     261 
     262 
     263def randomize_pars(model_info, pars, seed=None): 
    252264    """ 
    253265    Generate random values for all of the parameters. 
     
    260272    with push_seed(seed): 
    261273        # Note: the sort guarantees order `of calls to random number generator 
    262         pars = dict((p, _randomize_one(p, v)) 
     274        pars = dict((p, _randomize_one(model_info, p, v)) 
    263275                    for p, v in sorted(pars.items())) 
    264276    return pars 
     
    293305        # Make sure phi sums to 1.0 
    294306        if pars['case_num'] < 2: 
    295             pars['Phia'] = 0. 
    296             pars['Phib'] = 0. 
     307            pars['Phi1'] = 0. 
     308            pars['Phi2'] = 0. 
    297309        elif pars['case_num'] < 5: 
    298             pars['Phia'] = 0. 
    299         total = sum(pars['Phi'+c] for c in 'abcd') 
    300         for c in 'abcd': 
     310            pars['Phi1'] = 0. 
     311        total = sum(pars['Phi'+c] for c in '1234') 
     312        for c in '1234': 
    301313            pars['Phi'+c] /= total 
    302314 
     
    805817    #pars.update(set_pars)  # set value before random to control range 
    806818    if opts['seed'] > -1: 
    807         pars = randomize_pars(pars, seed=opts['seed']) 
     819        pars = randomize_pars(model_info, pars, seed=opts['seed']) 
    808820        print("Randomize using -random=%i"%opts['seed']) 
    809821    if opts['mono']: 
  • sasmodels/compare_many.py

    ree8f734 r8bd7b77  
    108108 
    109109    if is_2d: 
    110         if not model_info['has_2d']: 
     110        if not model_info['parameters'].has_2d: 
    111111            print(',"1-D only"') 
    112112            return 
  • sasmodels/convert.json

    rd2bb604 r8bd7b77  
    602602    "RPAModel",  
    603603    { 
     604      "N1": "Na", "N2": "Nb", "N3": "Nc", "N4": "Nd", 
     605      "L1": "La", "L2": "Lb", "L3": "Lc", "L4": "Ld", 
     606      "v1": "va", "v2": "vb", "v3": "vc", "v4": "vd", 
     607      "b1": "ba", "b2": "bb", "b3": "bc", "b4": "bd", 
     608      "Phi1": "Phia", "Phi2": "Phib", "Phi3": "Phic", "Phi4": "Phid", 
    604609      "case_num": "lcase_n" 
    605610    } 
  • sasmodels/convert.py

    rf247314 r8bd7b77  
    206206        elif name == 'rpa': 
    207207            # convert scattering lengths from femtometers to centimeters 
    208             for p in "La", "Lb", "Lc", "Ld": 
     208            for p in "L1", "L2", "L3", "L4": 
    209209                if p in oldpars: oldpars[p] *= 1e-13 
    210210        elif name == 'core_shell_parallelepiped': 
Note: See TracChangeset for help on using the changeset viewer.