Changeset 256dfe1 in sasmodels for sasmodels/convert.py
- Timestamp:
- Jul 18, 2016 12:42:29 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:
- c5ac2b2
- Parents:
- 46ed760
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/convert.py
r7ae2b7f r256dfe1 2 2 Convert models to and from sasview. 3 3 """ 4 from __future__ import print_function 5 4 6 from os.path import join as joinpath, abspath, dirname 5 7 import warnings … … 28 30 ] 29 31 32 MODELS_WITHOUT_VOLFRACTION = [ 33 'fractal', 34 'vesicle', 35 'multilayer_vesicle', 36 'core_multi_shell', 37 ] 38 39 30 40 # Convert new style names for polydispersity info to old style names 31 41 PD_DOT = [ … … 103 113 # model name mapping 104 114 115 def _unscale(par, scale): 116 return [pk*scale for pk in par] if isinstance(par, list) else par*scale 117 105 118 def _unscale_sld(pars): 106 119 """ … … 109 122 new model definition end with sld. 110 123 """ 111 return dict((p, ( v*1e-6if p.startswith('sld') or p.endswith('sld')112 else v*1e15if 'ndensity' in p124 return dict((p, (_unscale(v,1e-6) if p.startswith('sld') or p.endswith('sld') 125 else _unscale(v,1e15) if 'ndensity' in p 113 126 else v)) 114 127 for p, v in pars.items()) … … 155 168 return oldname 156 169 157 def _get_ old_pars(model_info):170 def _get_translation_table(model_info): 158 171 _read_conversion_table() 159 oldname, oldpars = CONVERSION_TABLE.get(model_info.id, [None, {}]) 172 _, translation = CONVERSION_TABLE.get(model_info.id, [None, {}]) 173 translation = translation.copy() 174 for p in model_info.parameters.kernel_parameters: 175 if p.length > 1: 176 newid = p.id 177 oldid = translation.get(p.id, p.id) 178 del translation[newid] 179 for k in range(1, p.length+1): 180 translation[newid+str(k)] = oldid+str(k) 181 # Remove control parameter from the result 182 if model_info.control: 183 translation[model_info.control] = None 184 return translation 185 186 def _trim_vectors(model_info, pars, oldpars): 187 _read_conversion_table() 188 _, translation = CONVERSION_TABLE.get(model_info.id, [None, {}]) 189 for p in model_info.parameters.kernel_parameters: 190 if p.length_control is not None: 191 n = int(pars[p.length_control]) 192 oldname = translation.get(p.id, p.id) 193 for k in range(n+1, p.length+1): 194 for _, old in PD_DOT: 195 oldpars.pop(oldname+str(k)+old, None) 160 196 return oldpars 161 197 … … 174 210 raise NotImplementedError("cannot convert to sasview sum") 175 211 else: 176 oldpars = _get_old_pars(model_info) 177 oldpars = _revert_pars(_unscale_sld(pars), oldpars) 212 translation = _get_translation_table(model_info) 213 oldpars = _revert_pars(_unscale_sld(pars), translation) 214 oldpars = _trim_vectors(model_info, pars, oldpars) 178 215 179 216 … … 194 231 namelist = name.split('*') if '*' in name else [name] 195 232 for name in namelist: 233 if name in MODELS_WITHOUT_VOLFRACTION: 234 del oldpars['volfraction'] 196 235 if name == 'stacked_disks': 197 236 _remove_pd(oldpars, 'n_stacking', name) … … 211 250 elif name in ['mono_gauss_coil','poly_gauss_coil']: 212 251 del oldpars['i_zero'] 213 elif name == 'fractal':214 del oldpars['volfraction']215 elif name == 'vesicle':216 del oldpars['volfraction']217 elif name == 'multilayer_vesicle':218 del oldpars['volfraction']219 252 220 253 return oldpars … … 240 273 namelist = name.split('*') if '*' in name else [name] 241 274 for name in namelist: 275 if name in MODELS_WITHOUT_VOLFRACTION: 276 pars['volfraction'] = 1 242 277 if name == 'pearl_necklace': 243 278 pars['string_thickness_pd_n'] = 0 … … 252 287 elif name == 'poly_gauss_coil': 253 288 pars['i_zero'] = 1 254 elif name == 'fractal': 255 pars['volfraction'] = 1 256 elif name == 'vesicle': 257 pars['volfraction'] = 1 258 elif name == 'multilayer_vesicle': 259 pars['volfraction'] = 1 260 289
Note: See TracChangeset
for help on using the changeset viewer.