Changeset f734e7d in sasmodels for sasmodels/direct_model.py
- Timestamp:
- Feb 22, 2015 1:44:54 AM (9 years ago)
- 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:
- 6137124
- Parents:
- 711d8e2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/direct_model.py
r16bc3fc rf734e7d 3 3 import numpy as np 4 4 5 from . import models 6 from . import weights 7 8 try: 9 from .kernelcl import load_model 10 except ImportError,exc: 11 warnings.warn(str(exc)) 12 warnings.warn("using ctypes instead") 13 from .kerneldll import load_model 14 15 def load_model_definition(model_name): 16 __import__('sasmodels.models.'+model_name) 17 model_definition = getattr(models, model_name, None) 18 return model_definition 19 20 # load_model is imported above. It looks like the following 21 #def load_model(model_definition, dtype='single): 22 # if kerneldll: 23 # if source is newer than compiled: compile 24 # load dll 25 # return kernel 26 # elif kernelcl: 27 # compile source on context 28 # return kernel 29 30 31 def make_kernel(model, q_vectors): 32 """ 33 Return a computation kernel from the model definition and the q input. 34 """ 35 input = model.make_input(q_vectors) 36 return model(input) 37 38 def get_weights(kernel, pars, name): 39 """ 40 Generate the distribution for parameter *name* given the parameter values 41 in *pars*. 42 43 Searches for "name", "name_pd", "name_pd_type", "name_pd_n", "name_pd_sigma" 44 """ 45 relative = name in kernel.info['partype']['pd-rel'] 46 limits = kernel.info['limits'] 47 disperser = pars.get(name+'_pd_type', 'gaussian') 48 value = pars.get(name, kernel.info['defaults'][name]) 49 npts = pars.get(name+'_pd_n', 0) 50 width = pars.get(name+'_pd', 0.0) 51 nsigma = pars.get(name+'_pd_nsigma', 3.0) 52 v,w = weights.get_weights( 53 disperser, npts, width, nsigma, 54 value, limits[name], relative) 55 return v,w/np.sum(w) 56 57 def call_kernel(kernel, pars): 58 fixed_pars = [pars.get(name, kernel.info['defaults'][name]) 59 for name in kernel.fixed_pars] 60 pd_pars = [get_weights(kernel, pars, name) for name in kernel.pd_pars] 61 return kernel(fixed_pars, pd_pars) 5 from .core import load_model_definition, make_kernel, call_kernel 6 from .core import load_model_cl as load_model 7 if load_model is None: 8 warnings.warn("unable to load opencl; using ctypes instead") 9 from .core import load_model_dll as load_model 62 10 63 11 class DirectModel:
Note: See TracChangeset
for help on using the changeset viewer.