Changeset b297ba9 in sasmodels for sasmodels/product.py
- Timestamp:
- Mar 20, 2019 7:03:50 PM (5 years ago)
- Branches:
- master, core_shell_microgels, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- 4e28511
- Parents:
- 0d362b7
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/product.py
rfd7291e rb297ba9 18 18 import numpy as np # type: ignore 19 19 20 from .modelinfo import ParameterTable, ModelInfo, Parameter,parse_parameter20 from .modelinfo import ParameterTable, ModelInfo, parse_parameter 21 21 from .kernel import KernelModel, Kernel 22 from .details import make_details , dispersion_mesh22 from .details import make_details 23 23 24 24 # pylint: disable=unused-import … … 28 28 pass 29 29 else: 30 from .modelinfo import ParameterSet 30 from .modelinfo import ParameterSet, Parameter 31 31 # pylint: enable=unused-import 32 32 … … 42 42 VOLFRAC_ID = "volfraction" 43 43 def make_extra_pars(p_info): 44 # type: (ModelInfo) -> List[Parameter] 45 """ 46 Create parameters for structure_factor_mode and radius_effective_mode. 47 """ 44 48 pars = [] 45 49 if p_info.have_Fq: 46 50 par = parse_parameter( 47 48 49 50 [["P*S","P*(1+beta*(S-1))"]],51 52 51 STRUCTURE_MODE_ID, 52 "", 53 0, 54 [["P*S", "P*(1+beta*(S-1))"]], 55 "", 56 "Structure factor calculation") 53 57 pars.append(par) 54 58 if p_info.effective_radius_type is not None: 55 59 par = parse_parameter( 56 57 58 59 60 61 60 RADIUS_MODE_ID, 61 "", 62 1, 63 [["unconstrained"] + p_info.effective_radius_type], 64 "", 65 "Effective radius calculation") 62 66 pars.append(par) 63 67 return pars … … 104 108 parameters.max_pd = p_pars.max_pd + s_pars.max_pd 105 109 def random(): 110 """Random set of model parameters for product model""" 106 111 combined_pars = p_info.random() 107 112 s_names = set(par.id for par in s_pars.kernel_parameters) … … 132 137 profile_pars = set(p.id for p in p_info.parameters.kernel_parameters) 133 138 def profile(**kwargs): 139 """Return SLD profile of the form factor as a function of radius.""" 134 140 # extract the profile args 135 141 kwargs = dict((k, v) for k, v in kwargs.items() if k in profile_pars) … … 173 179 effective_radius, # type: float 174 180 beta_mode, # type: bool 175 181 ): 176 182 # type: (...) -> OrderedDict[str, Union[np.ndarray, float]] 177 183 """ … … 199 205 200 206 class ProductModel(KernelModel): 207 """ 208 Model definition for product model. 209 """ 201 210 def __init__(self, model_info, P, S): 202 211 # type: (ModelInfo, KernelModel, KernelModel) -> None … … 229 238 s_kernel = self.S.make_kernel(q_vectors) 230 239 return ProductKernel(self.info, p_kernel, s_kernel) 240 make_kernel.__doc__ = KernelModel.make_kernel.__doc__ 231 241 232 242 def release(self): … … 240 250 241 251 class ProductKernel(Kernel): 252 """ 253 Instantiated kernel for product model. 254 """ 242 255 def __init__(self, model_info, p_kernel, s_kernel): 243 256 # type: (ModelInfo, Kernel, Kernel) -> None … … 248 261 self.results = [] # type: List[np.ndarray] 249 262 250 def __call__(self, call_details, values, cutoff, magnetic):263 def Iq(self, call_details, values, cutoff, magnetic): 251 264 # type: (CallDetails, np.ndarray, float, bool) -> np.ndarray 252 265 … … 263 276 beta_mode_offset = 2+p_npars+s_npars 264 277 beta_mode = (values[beta_mode_offset] > 0) if have_beta_mode else False 265 if beta_mode and self.p_kernel.dim == '2d':278 if beta_mode and self.p_kernel.dim == '2d': 266 279 raise NotImplementedError("beta not yet supported for 2D") 267 280 … … 327 340 # polydispersity distribution slot in the values array due to 328 341 # implementation details in kernel_iq.c. 329 #print("R_eff=%d:%g, volfrac=%g, volume ratio=%g"%(radius_type, effective_radius, volfrac, volume_ratio)) 342 #print("R_eff=%d:%g, volfrac=%g, volume ratio=%g" 343 # % (radius_type, effective_radius, volfrac, volume_ratio)) 330 344 if radius_type > 0: 331 345 # set the value to the model R_eff and set the weight to 1 … … 360 374 return final_result 361 375 376 Iq.__doc__ = Kernel.Iq.__doc__ 377 __call__ = Iq 378 362 379 def release(self): 363 380 # type: () -> None 381 """Free resources associated with the kernel.""" 364 382 self.p_kernel.release() 365 383 self.s_kernel.release()
Note: See TracChangeset
for help on using the changeset viewer.