Changes in / [d0876c9d:d1c4760] in sasmodels
- Location:
- sasmodels
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/core.py
rfb5914f rd19962c 241 241 else ([pars.get(p.name, p.default)], [])) 242 242 for p in parameters.call_parameters] 243 244 details, weights, values = build_details(kernel, vw_pairs) 245 return kernel(details, weights, values, cutoff) 246 247 def build_details(kernel, pairs): 248 values, weights = zip(*pairs) 243 values, weights = zip(*vw_pairs) 244 249 245 if max([len(w) for w in weights]) > 1: 250 246 details = generate.poly_details(kernel.info, weights) 251 247 else: 252 248 details = kernel.info['mono_details'] 249 253 250 weights, values = [np.hstack(v) for v in (weights, values)] 251 254 252 weights = weights.astype(dtype=kernel.dtype) 255 253 values = values.astype(dtype=kernel.dtype) 256 return details, weights, values 257 254 return kernel(details, weights, values, cutoff) 258 255 259 256 def call_ER_VR(model_info, vol_pars): -
sasmodels/modelinfo.py
rfb5914f rce896fd 432 432 if p.polydisperse and p.type != 'magnetic') 433 433 434 def user_parameters(self, pars ={}, is2d=True):434 def user_parameters(self, pars, is2d): 435 435 """ 436 436 Return the list of parameters for the given data type. … … 493 493 if table: 494 494 # look up length from incoming parameters 495 table_length = int(pars .get(p.length_control, p.length))495 table_length = int(pars[p.length_control]) 496 496 del dependent[p.length_control] # first entry seen 497 497 for k in range(1, table_length+1): -
sasmodels/sasview_model.py
rfb5914f rce896fd 21 21 22 22 from . import core 23 from . import weights23 from . import generate 24 24 25 25 def standard_models(): … … 52 52 """ 53 53 def __init__(self): 54 self._ model = None54 self._kernel = None 55 55 model_info = self._model_info 56 56 parameters = model_info['parameters'] … … 75 75 self.params = collections.OrderedDict() 76 76 self.dispersion = dict() 77 78 self.orientation_params = [] 79 self.magnetic_params = [] 80 self.fixed = [] 81 for p in parameters.user_parameters(): 77 partype = model_info['partype'] 78 79 for p in model_info['parameters']: 82 80 self.params[p.name] = p.default 83 81 self.details[p.name] = [p.units] + p.limits 84 if p.polydisperse: 85 self.dispersion[p.name] = { 86 'width': 0, 87 'npts': 35, 88 'nsigmas': 3, 89 'type': 'gaussian', 90 } 91 if p.type == 'orientation': 92 self.orientation_params.append(p.name) 93 self.orientation_params.append(p.name+".width") 94 self.fixed.append(p.name+".width") 95 if p.type == 'magnetic': 96 self.orientation_params.append(p.name) 97 self.magnetic_params.append(p.name) 98 self.fixed.append(p.name+".width") 99 82 83 for name in partype['pd-2d']: 84 self.dispersion[name] = { 85 'width': 0, 86 'npts': 35, 87 'nsigmas': 3, 88 'type': 'gaussian', 89 } 90 91 self.orientation_params = ( 92 partype['orientation'] 93 + [n + '.width' for n in partype['orientation']] 94 + partype['magnetic']) 95 self.magnetic_params = partype['magnetic'] 96 self.fixed = [n + '.width' for n in partype['pd-2d']] 100 97 self.non_fittable = [] 101 98 … … 116 113 def __get_state__(self): 117 114 state = self.__dict__.copy() 115 model_id = self._model_info['id'] 118 116 state.pop('_kernel') 119 117 # May need to reload model info on set state since it has pointers … … 124 122 def __set_state__(self, state): 125 123 self.__dict__ = state 126 self._ model = None124 self._kernel = None 127 125 128 126 def __str__(self): … … 213 211 def getDispParamList(self): 214 212 """ 215 Return a list of polydispersityparameters for the model213 Return a list of all available parameters for the model 216 214 """ 217 215 # TODO: fix test so that parameter order doesn't matter 218 ret = ['%s.%s' % (p.name.lower(), ext) 219 for p in self._model_info['parameters'].user_parameters() 220 for ext in ('npts', 'nsigmas', 'width') 221 if p.polydisperse] 216 ret = ['%s.%s' % (d.lower(), p) 217 for d in self._model_info['partype']['pd-2d'] 218 for p in ('npts', 'nsigmas', 'width')] 222 219 #print(ret) 223 220 return ret … … 292 289 # Check whether we have a list of ndarrays [qx,qy] 293 290 qx, qy = qdist 294 if not self._model_info['parameters'].has_2d: 291 partype = self._model_info['partype'] 292 if not partype['orientation'] and not partype['magnetic']: 295 293 return self.calculate_Iq(np.sqrt(qx ** 2 + qy ** 2)) 296 294 else: … … 314 312 to the card for each evaluation. 315 313 """ 316 if self._ model is None:317 self._ model = core.build_model(self._model_info, platform='dll')314 if self._kernel is None: 315 self._kernel = core.build_model(self._model_info) 318 316 q_vectors = [np.asarray(q) for q in args] 319 kernel = self._model.make_kernel(q_vectors) 320 pairs = [self._get_weights(p) 321 for p in self._model_info['parameters'].call_parameters] 322 details, weights, values = core.build_details(kernel, pairs) 323 return kernel(details, weights, values, cutoff=self.cutoff) 324 kernel.q_input.release() 325 kernel.release() 317 fn = self._kernel(q_vectors) 318 pars = [self.params[v] for v in fn.fixed_pars] 319 pd_pars = [self._get_weights(p) for p in fn.pd_pars] 320 result = fn(pars, pd_pars, self.cutoff) 321 fn.q_input.release() 322 fn.release() 326 323 return result 327 324 … … 396 393 def _get_weights(self, par): 397 394 """ 398 Return dispersion weights for parameter 399 """ 400 if par.polydisperse: 401 dis = self.dispersion[par.name] 402 value, weight = weights.get_weights( 403 dis['type'], dis['npts'], dis['width'], dis['nsigmas'], 404 self.params[par.name], par.limits, par.relative_pd) 405 return value, weight / np.sum(weight) 406 else: 407 return [self.params[par.name]], [] 408 409 def test_model(): 410 Cylinder = make_class('cylinder') 411 cylinder = Cylinder() 412 return cylinder.evalDistribution([0.1,0.1]) 413 414 if __name__ == "__main__": 415 print("cylinder(0.1,0.1)=%g"%test_model()) 395 Return dispersion weights 396 :param par parameter name 397 """ 398 from . import weights 399 400 relative = self._model_info['partype']['pd-rel'] 401 limits = self._model_info['limits'] 402 dis = self.dispersion[par] 403 value, weight = weights.get_weights( 404 dis['type'], dis['npts'], dis['width'], dis['nsigmas'], 405 self.params[par], limits[par], par in relative) 406 return value, weight / np.sum(weight) 407
Note: See TracChangeset
for help on using the changeset viewer.