Changeset cd3dba0 in sasmodels for sasmodels/compare_many.py


Ignore:
Timestamp:
Nov 23, 2015 5:14:54 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:
3a45c2c
Parents:
0e9048f
Message:

improve compare.py so that parameters can be constrained to valid values

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/compare_many.py

    re922c5d rcd3dba0  
    99from .compare import (MODELS, randomize_model, suppress_pd, eval_sasview, 
    1010                      eval_opencl, eval_ctypes, make_data, get_demo_pars, 
    11                       columnize) 
     11                      columnize, constrain_pars) 
    1212 
    1313def get_stats(target, value, index): 
     
    3636def compare_instance(name, data, index, N=1, mono=True, cutoff=1e-5): 
    3737    model_definition = core.load_model_definition(name) 
    38     pars = get_demo_pars(name) 
     38    pars = get_demo_pars(model_definition) 
    3939    header = '\n"Model","%s","Count","%d"'%(name, N) 
    4040    if not mono: header += ',"Cutoff",%g'%(cutoff,) 
    4141    print(header) 
    4242 
    43     # Stuff the failure flag into a mutable object so we can update it from 
    44     # within the nested function.  Note that the nested function uses "pars" 
    45     # which is dynamically scoped, not lexically scoped in this context.  That 
    46     # is, pars is replaced each time in the loop, so don't assume that it is 
    47     # the default values defined above. 
    4843    def trymodel(fn, *args, **kw): 
    4944        try: 
    50             result, _ = fn(model_definition, pars, data, *args, **kw) 
     45            result, _ = fn(model_definition, pars_i, data, *args, **kw) 
     46        except KeyboardInterrupt: 
     47            raise 
    5148        except: 
    52             result = np.NaN 
    53             traceback.print_exc() 
     49            print >>sys.stderr, traceback.format_exc() 
     50            print >>sys.stderr, "when comparing",name,"for seed",seed 
     51            if hasattr(data, 'qx_data'): 
     52                result = np.NaN*data.data 
     53            else: 
     54                result = np.NaN*data.x 
    5455        return result 
    5556 
    5657    num_good = 0 
    5758    first = True 
    58     for _ in range(N): 
    59         pars, seed = randomize_model(name, pars) 
    60         if mono: suppress_pd(pars) 
    61  
    62         # Force parameter constraints on a per-model basis. 
    63         if name in ('teubner_strey','broad_peak'): 
    64             pars['scale'] = 1.0 
    65         #if name == 'parallelepiped': 
    66         #    pars['a_side'],pars['b_side'],pars['c_side'] = \ 
    67         #        sorted([pars['a_side'],pars['b_side'],pars['c_side']]) 
    68  
     59    for k in range(N): 
     60        print >>sys.stderr, name, k 
     61        pars_i, seed = randomize_model(pars) 
     62        constrain_pars(model_definition, pars_i) 
     63        if mono: suppress_pd(pars_i) 
    6964 
    7065        good = True 
     
    9792            good = good and (stats[0] < 1e-14) 
    9893 
    99         columns += [v for _,v in sorted(pars.items())] 
     94        columns += [v for _,v in sorted(pars_i.items())] 
    10095        if first: 
    101             print_column_headers(pars, labels) 
     96            print_column_headers(pars_i, labels) 
    10297            first = False 
    10398        if good: 
Note: See TracChangeset for help on using the changeset viewer.