Changeset 303d8d6 in sasmodels for sasmodels/core.py
- Timestamp:
- Mar 21, 2016 2:49:21 AM (8 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:
- 4a72d1a, 3a45c2c
- Parents:
- 03cac08
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/core.py
rcf52f9c r303d8d6 173 173 return model(q_vectors) 174 174 175 def get_weights( model_info, pars, name):175 def get_weights(parameter, values): 176 176 """ 177 177 Generate the distribution for parameter *name* given the parameter values … … 181 181 from the *pars* dictionary for parameter value and parameter dispersion. 182 182 """ 183 relative = name in model_info['partype']['pd-rel'] 184 limits = model_info['limits'][name] 185 disperser = pars.get(name+'_pd_type', 'gaussian') 186 value = pars.get(name, model_info['defaults'][name]) 187 npts = pars.get(name+'_pd_n', 0) 188 width = pars.get(name+'_pd', 0.0) 189 nsigma = pars.get(name+'_pd_nsigma', 3.0) 183 value = values.get(parameter.name, parameter.default) 184 if parameter.type not in ('volume', 'orientation'): 185 return [value], [] 186 relative = parameter.type == 'volume' 187 limits = parameter.limits 188 disperser = values.get(parameter.name+'_pd_type', 'gaussian') 189 npts = values.get(parameter.name+'_pd_n', 0) 190 width = values.get(parameter.name+'_pd', 0.0) 191 nsigma = values.get(parameter.name+'_pd_nsigma', 3.0) 190 192 value, weight = weights.get_weights( 191 193 disperser, npts, width, nsigma, value, limits, relative) … … 206 208 return value, weight 207 209 208 def call_kernel(kernel, pars, cutoff=0, mono=False):210 def call_kernel(kernel, values, cutoff=0, mono=False): 209 211 """ 210 212 Call *kernel* returned from :func:`make_kernel` with parameters *pars*. … … 219 221 *mono* is True if polydispersity should be set to none on all parameters. 220 222 """ 221 fixed_pars = [pars.get(name, kernel.info['defaults'][name]) 222 for name in kernel.fixed_pars] 223 if mono: 224 pd_pars = [( np.array([pars[name]]), np.array([1.0]) ) 225 for name in kernel.pd_pars] 226 else: 227 pd_pars = [get_weights(kernel.info, pars, name) for name in kernel.pd_pars] 228 return kernel(fixed_pars, pd_pars, cutoff=cutoff) 223 if mono or True: 224 pars = np.array([values.get(p.name, p.default) 225 for p in kernel.info['parameters']]) 226 weights = np.array([1.0]) 227 details = kernel.info['mono_details'] 228 return kernel(pars, weights, details, cutoff) 229 else: 230 pairs = [get_weights(p, values) for p in kernel.info['parameters']] 231 weights, pars = [v for v in zip(*pairs)] 232 details = generate.poly_details(kernel.info, weights, pars) 233 weights, pars = [np.hstack(v) for v in (weights, pars)] 234 return kernel(pars, weights, details, cutoff) 229 235 230 236 def call_ER_VR(model_info, vol_pars): … … 249 255 250 256 251 def call_ER( info, pars):252 """ 253 Call the model ER function using * pars*.254 * info* is either *model.info* if you have a loaded model, or *kernel.info*255 if youhave a model kernel prepared for evaluation.256 """ 257 ER = info.get('ER', None)257 def call_ER(model_info, values): 258 """ 259 Call the model ER function using *values*. *model_info* is either 260 *model.info* if you have a loaded model, or *kernel.info* if you 261 have a model kernel prepared for evaluation. 262 """ 263 ER = model_info.get('ER', None) 258 264 if ER is None: 259 265 return 1.0 260 266 else: 261 vol_pars = [get_weights(info, pars, name) 262 for name in info['partype']['volume']] 267 vol_pars = [get_weights(parameter, values) 268 for parameter in model_info['parameters'] 269 if parameter.type == 'volume'] 263 270 value, weight = dispersion_mesh(vol_pars) 264 271 individual_radii = ER(*value) … … 266 273 return np.sum(weight*individual_radii) / np.sum(weight) 267 274 268 def call_VR( info, pars):275 def call_VR(model_info, values): 269 276 """ 270 277 Call the model VR function using *pars*. … … 272 279 if you have a model kernel prepared for evaluation. 273 280 """ 274 VR = info.get('VR', None)281 VR = model_info.get('VR', None) 275 282 if VR is None: 276 283 return 1.0 277 284 else: 278 vol_pars = [get_weights(info, pars, name) 279 for name in info['partype']['volume']] 285 vol_pars = [get_weights(parameter, values) 286 for parameter in model_info['parameters'] 287 if parameter.type == 'volume'] 280 288 value, weight = dispersion_mesh(vol_pars) 281 289 whole, part = VR(*value)
Note: See TracChangeset
for help on using the changeset viewer.