Changeset 1b49bf8 in sasmodels for sasmodels/convert.py
- Timestamp:
- Oct 17, 2016 1:20:39 PM (8 years ago)
- Branches:
- master, core_shell_microgels, costrafo411, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- 8393c74
- Parents:
- 218cdbc
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/convert.py
r51241113 r1b49bf8 2 2 Convert models to and from sasview. 3 3 """ 4 from __future__ import print_function 5 6 from os.path import join as joinpath, abspath, dirname 4 from __future__ import print_function, division 5 7 6 import math 8 7 import warnings … … 17 16 'two_lorentzian', 18 17 "two_power_law", 19 'gel_fit',20 18 'gauss_lorentz_gel', 21 19 'be_polyelectrolyte', … … 215 213 if name in MODELS_WITHOUT_VOLFRACTION: 216 214 del oldpars['volfraction'] 217 if name == 'stacked_disks':218 _remove_pd(oldpars, 'n_stacking', name)219 elif name == 'pearl_necklace':220 _remove_pd(oldpars, 'num_pearls', name)221 _remove_pd(oldpars, 'thick_string', name)222 elif name == 'core_shell_parallelepiped':223 _remove_pd(oldpars, 'rimA', name)224 _remove_pd(oldpars, 'rimB', name)225 _remove_pd(oldpars, 'rimC', name)226 elif name == 'polymer_micelle':227 if 'ndensity' in oldpars:228 oldpars['ndensity'] *= 1e15229 elif name == 'spherical_sld':230 oldpars["CONTROL"] -= 1231 # remove polydispersity from shells232 for k in range(1, 11):233 _remove_pd(oldpars, 'thick_flat'+str(k), 'thickness')234 _remove_pd(oldpars, 'thick_inter'+str(k), 'interface')235 # remove extra shells236 for k in range(int(pars['n_shells']), 11):237 oldpars.pop('sld_flat'+str(k), 0)238 oldpars.pop('thick_flat'+str(k), 0)239 oldpars.pop('thick_inter'+str(k), 0)240 oldpars.pop('func_inter'+str(k), 0)241 oldpars.pop('nu_inter'+str(k), 0)242 215 elif name == 'core_multi_shell': 243 216 # kill extra shells … … 252 225 elif name == 'core_shell_parallelepiped': 253 226 _remove_pd(oldpars, 'rimA', name) 227 _remove_pd(oldpars, 'rimB', name) 228 _remove_pd(oldpars, 'rimC', name) 229 elif name == 'hollow_cylinder': 230 # now uses radius and thickness 231 oldpars['radius'] += oldpars['core_radius'] 254 232 elif name in ['mono_gauss_coil', 'poly_gauss_coil']: 255 233 del oldpars['i_zero'] 256 234 elif name == 'onion': 257 235 oldpars.pop('n_shells', None) 236 elif name == 'pearl_necklace': 237 _remove_pd(oldpars, 'num_pearls', name) 238 _remove_pd(oldpars, 'thick_string', name) 239 elif name == 'polymer_micelle': 240 if 'ndensity' in oldpars: 241 oldpars['ndensity'] *= 1e15 258 242 elif name == 'rpa': 259 243 # convert scattering lengths from femtometers to centimeters … … 272 256 for k in "Kab,Kac,Kad".split(','): 273 257 oldpars.pop(k, None) 258 elif name == 'spherical_sld': 259 oldpars["CONTROL"] -= 1 260 # remove polydispersity from shells 261 for k in range(1, 11): 262 _remove_pd(oldpars, 'thick_flat'+str(k), 'thickness') 263 _remove_pd(oldpars, 'thick_inter'+str(k), 'interface') 264 # remove extra shells 265 for k in range(int(pars['n_shells']), 11): 266 oldpars.pop('sld_flat'+str(k), 0) 267 oldpars.pop('thick_flat'+str(k), 0) 268 oldpars.pop('thick_inter'+str(k), 0) 269 oldpars.pop('func_inter'+str(k), 0) 270 oldpars.pop('nu_inter'+str(k), 0) 271 elif name == 'stacked_disks': 272 _remove_pd(oldpars, 'n_stacking', name) 273 elif name == 'teubner_strey': 274 # basically redoing the entire Teubner-Strey calculations here. 275 volfraction = oldpars.pop('volfraction_a') 276 xi = oldpars.pop('xi') 277 d = oldpars.pop('d') 278 sld_a = oldpars.pop('sld_a') 279 sld_b = oldpars.pop('sld_b') 280 drho = 1e6*(sld_a - sld_b) # conversion autoscaled these 281 k = 2.0*math.pi*xi/d 282 a2 = (1.0 + k**2)**2 283 c1 = 2.0 * xi**2 * (1.0 - k**2) 284 c2 = xi**4 285 prefactor = 8.0*math.pi*volfraction*(1.0-volfraction)*drho**2*c2/xi 286 scale = 1e-4*prefactor 287 oldpars['scale'] = a2/scale 288 oldpars['c1'] = c1/scale 289 oldpars['c2'] = c2/scale 274 290 275 291 #print("convert from",list(sorted(pars))) … … 315 331 if name in MODELS_WITHOUT_VOLFRACTION: 316 332 pars['volfraction'] = 1 317 if name == 'pearl_necklace': 318 pars['string_thickness_pd_n'] = 0 319 pars['number_of_pearls_pd_n'] = 0 333 if name == 'core_multi_shell': 334 pars['n'] = min(math.ceil(pars['n']), 4) 335 elif name == 'gel_fit': 336 pars['scale'] = 1 320 337 elif name == 'line': 321 338 pars['scale'] = 1 322 339 pars['background'] = 0 340 elif name == 'mono_gauss_coil': 341 pars['i_zero'] = 1 342 elif name == 'onion': 343 pars['n_shells'] = math.ceil(pars['n_shells']) 344 elif name == 'pearl_necklace': 345 pars['string_thickness_pd_n'] = 0 346 pars['number_of_pearls_pd_n'] = 0 347 elif name == 'poly_gauss_coil': 348 pars['i_zero'] = 1 323 349 elif name == 'rpa': 324 350 pars['case_num'] = int(pars['case_num']) 325 elif name == 'mono_gauss_coil':326 pars['i_zero'] = 1327 elif name == 'poly_gauss_coil':328 pars['i_zero'] = 1329 elif name == 'core_multi_shell':330 pars['n'] = min(math.ceil(pars['n']), 4)331 elif name == 'onion':332 pars['n_shells'] = math.ceil(pars['n_shells'])333 351 elif name == 'spherical_sld': 334 352 pars['n_shells'] = math.ceil(pars['n_shells']) … … 339 357 pars['thickness%d_pd_n'%k] = 0 340 358 pars['interface%d_pd_n'%k] = 0 341 359 elif name == 'teubner_strey': 360 pars['scale'] = 1 361
Note: See TracChangeset
for help on using the changeset viewer.