Changeset 3c56da87 in sasmodels for sasmodels/core.py
- Timestamp:
- Mar 5, 2015 12:55:38 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:
- 3a45c2c
- Parents:
- b89f519
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/core.py
r9890053 r3c56da87 12 12 try: 13 13 from .kernelcl import load_model as load_model_cl 14 except Exception,exc: 14 except: 15 # pylint: disable=invalid-name 15 16 load_model_cl = None 16 17 from .kerneldll import load_model as load_model_dll … … 31 32 Return a computation kernel from the model definition and the q input. 32 33 """ 33 input = model.make_input(q_vectors)34 return model( input)34 model_input = model.make_input(q_vectors) 35 return model(model_input) 35 36 36 def get_weights( kernel, pars, name):37 def get_weights(info, pars, name): 37 38 """ 38 39 Generate the distribution for parameter *name* given the parameter values … … 41 42 Searches for "name", "name_pd", "name_pd_type", "name_pd_n", "name_pd_sigma" 42 43 """ 43 relative = name in kernel.info['partype']['pd-rel']44 limits = kernel.info['limits']44 relative = name in info['partype']['pd-rel'] 45 limits = info['limits'] 45 46 disperser = pars.get(name+'_pd_type', 'gaussian') 46 value = pars.get(name, kernel.info['defaults'][name])47 value = pars.get(name, info['defaults'][name]) 47 48 npts = pars.get(name+'_pd_n', 0) 48 49 width = pars.get(name+'_pd', 0.0) 49 50 nsigma = pars.get(name+'_pd_nsigma', 3.0) 50 v ,w= weights.get_weights(51 value,weight = weights.get_weights( 51 52 disperser, npts, width, nsigma, 52 53 value, limits[name], relative) 53 return v ,w/np.sum(w)54 return value,weight/np.sum(weight) 54 55 55 56 def dispersion_mesh(pars): … … 61 62 parameter set in the vector. 62 63 """ 63 value s, weights= zip(*pars)64 if len(value s) > 1:65 value s = [v.flatten() for v in np.meshgrid(*values)]66 weight s = np.vstack([v.flatten() for v in np.meshgrid(*weights)])67 weight s = np.prod(weights, axis=0)68 return value s, weights64 value, weight = zip(*pars) 65 if len(value) > 1: 66 value = [v.flatten() for v in np.meshgrid(*value)] 67 weight = np.vstack([v.flatten() for v in np.meshgrid(*weight)]) 68 weight = np.prod(weight, axis=0) 69 return value, weight 69 70 70 71 def call_kernel(kernel, pars, cutoff=1e-5): 71 72 fixed_pars = [pars.get(name, kernel.info['defaults'][name]) 72 73 for name in kernel.fixed_pars] 73 pd_pars = [get_weights(kernel , pars, name) for name in kernel.pd_pars]74 pd_pars = [get_weights(kernel.info, pars, name) for name in kernel.pd_pars] 74 75 return kernel(fixed_pars, pd_pars, cutoff=cutoff) 75 76 76 def call_ER( kernel, pars):77 ER = kernel.info.get('ER', None)77 def call_ER(info, pars): 78 ER = info.get('ER', None) 78 79 if ER is None: 79 80 return 1.0 80 81 else: 81 vol_pars = [get_weights( kernel, pars, name)82 for name in kernel.info['partype']['volume']]83 value s, weights= dispersion_mesh(vol_pars)84 fv = ER(*values)82 vol_pars = [get_weights(info, pars, name) 83 for name in info['partype']['volume']] 84 value, weight = dispersion_mesh(vol_pars) 85 individual_radii = ER(*value) 85 86 #print values[0].shape, weights.shape, fv.shape 86 return np.sum(weight s*fv) / np.sum(weights)87 return np.sum(weight*individual_radii) / np.sum(weight) 87 88 88 def call_VR( kernel, pars):89 VR = kernel.info.get('VR', None)89 def call_VR(info, pars): 90 VR = info.get('VR', None) 90 91 if VR is None: 91 92 return 1.0 92 93 else: 93 vol_pars = [get_weights( kernel, pars, name)94 for name in kernel.info['partype']['volume']]95 value s, weights= dispersion_mesh(vol_pars)96 whole,part = VR(*value s)97 return np.sum(weight s*part)/np.sum(weights*whole)94 vol_pars = [get_weights(info, pars, name) 95 for name in info['partype']['volume']] 96 value, weight = dispersion_mesh(vol_pars) 97 whole,part = VR(*value) 98 return np.sum(weight*part)/np.sum(weight*whole) 98 99
Note: See TracChangeset
for help on using the changeset viewer.