Changeset ce896fd in sasmodels for sasmodels/modelinfo.py


Ignore:
Timestamp:
Mar 28, 2016 7:27:22 AM (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:
fb5914f, d1c4760
Parents:
5c028e3
Message:

improved handling of vector parameters; remove compile errors from onion.c

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/modelinfo.py

    rd19962c rce896fd  
    4545    if isinstance(limits, list) and all(isstr(k) for k in limits): 
    4646        choices = limits 
    47         limits = [1, len(choices)] 
     47        limits = [0, len(choices)-1] 
    4848    else: 
    49         choices = None 
     49        choices = [] 
    5050    # TODO: maybe allow limits of None for (-inf, inf) 
    5151    try: 
     
    115115    return parameter 
    116116 
     117 
     118def set_demo(model_info, demo): 
     119    """ 
     120    Assign demo parameters to model_info['demo'] 
     121 
     122    If demo is not defined, then use defaults. 
     123 
     124    If demo is defined, override defaults with value from demo. 
     125 
     126    If demo references vector fields, such as thickness[n], then support 
     127    different ways of assigning the demo values, including assigning a 
     128    specific value (e.g., thickness3=50.0), assigning a new value to all 
     129    (e.g., thickness=50.0) or assigning values using list notation. 
     130    """ 
     131    partable = model_info['parameters'] 
     132    if demo is None: 
     133        result = partable.defaults 
     134    else: 
     135        pars = dict((p.id, p) for p in partable.kernel_parameters) 
     136        result = partable.defaults.copy() 
     137        vectors = dict((name,value) for name,value in demo.items() 
     138                       if name in pars and pars[name].length > 1) 
     139        if vectors: 
     140            scalars = dict((name, value) for name, value in demo.items() 
     141                           if name not in pars or pars[name].length == 1) 
     142            for name, value in vectors.items(): 
     143                if np.isscalar(value): 
     144                    # support for the form 
     145                    #    demo(thickness=0, thickness2=50) 
     146                    for k in pars[name].length: 
     147                        key = name+str(k) 
     148                        if key not in scalars: 
     149                            scalars[key] = vectors 
     150                else: 
     151                    # supoprt for the form 
     152                    #    demo(thickness=[20,10,3]) 
     153                    for (k,v) in enumerate(value): 
     154                        scalars[name+str(k)] = v 
     155            result.update(scalars) 
     156        else: 
     157            result.update(demo) 
     158 
     159    model_info['demo'] = result 
     160 
    117161class Parameter(object): 
    118162    """ 
     
    171215        self.type = type 
    172216        self.description = description 
    173         self.choices = None 
    174217 
    175218        # Length and length_control will be filled in once the complete 
     
    182225        self.polydisperse = False 
    183226        self.relative_pd = False 
     227 
     228        # choices are also set externally. 
     229        self.choices = [] 
    184230 
    185231    def as_definition(self): 
Note: See TracChangeset for help on using the changeset viewer.