Changeset 60eab2a in sasmodels for sasmodels/modelinfo.py


Ignore:
Timestamp:
Mar 24, 2016 8:12:07 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:
380e8c9
Parents:
e69b36f
Message:

support autogenerated Iqxy in C models

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/modelinfo.py

    r69aa451 r60eab2a  
    3030        processed.append(parse_parameter(*p)) 
    3131    partable = ParameterTable(processed) 
    32     set_vector_length_from_reference(partable) 
    3332    return partable 
    34  
    35 def set_vector_length_from_reference(partable): 
    36     # Sort out the length of the vector parameters such as thickness[n] 
    37     for p in partable: 
    38         if p.length_control: 
    39            ref = partable[p.length_control] 
    40            low, high = ref.limits 
    41            if int(low) != low or int(high) != high or low<0 or high>20: 
    42                raise ValueError("expected limits on %s to be within [0, 20]"%ref.name) 
    43            p.length = low 
    4433 
    4534def parse_parameter(name, units='', default=None, 
     
    172161    def __init__(self, name, units='', default=None, limits=(-np.inf, np.inf), 
    173162                 type='', description=''): 
    174         self.id = name 
     163        self.id = name.split('[')[0].strip() 
    175164        self.name = name 
    176165        self.default = default 
     
    235224        self._name_table= dict((p.name, p) for p in parameters) 
    236225        self._categorize_parameters() 
     226 
     227        self._set_vector_lengths() 
     228        self._set_defaults() 
     229 
     230    def _set_vector_lengths(self): 
     231        # Sort out the length of the vector parameters such as thickness[n] 
     232        for p in self.parameters: 
     233            if p.length_control: 
     234                ref = self._name_table[p.length_control] 
     235                low, high = ref.limits 
     236                if int(low) != low or int(high) != high or low<0 or high>20: 
     237                    raise ValueError("expected limits on %s to be within [0, 20]"%ref.name) 
     238                p.length = low 
     239 
     240    def _set_defaults(self): 
     241        # Construct default values, including vector defaults 
     242        defaults = {} 
     243        for p in self.parameters: 
     244            if p.length == 1: 
     245                defaults[p.id] = p.default 
     246            else: 
     247                for k in range(p.length): 
     248                    defaults["%s[%d]"%(p.id, k)] = p.default 
     249        self.defaults = defaults 
    237250 
    238251    def __getitem__(self, k): 
     
    289302        par_type['1d'] = [p for p in pars if p.type not in ('orientation', 'magnetic')] 
    290303        par_type['2d'] = [p for p in pars if p.type != 'magnetic'] 
    291         par_type['magnetic'] = [p for p in pars] 
    292304        par_type['pd'] = [p for p in pars if p.polydisperse] 
    293305        par_type['pd_relative'] = [p for p in pars if p.relative_pd] 
     
    304316 
    305317    @property 
    306     def defaults(self): 
    307         return dict((p.name, p.default) for p in self.parameters) 
    308  
    309     @property 
    310318    def num_pd(self): 
    311319        """ 
     
    313321        shape dimensions and orientational distributions). 
    314322        """ 
    315         return len(self.type['pd']) 
     323        return sum(p.length for p in self.type['pd']) 
    316324 
    317325    @property 
Note: See TracChangeset for help on using the changeset viewer.