Changeset 1b49bf8 in sasmodels for sasmodels/convert.py


Ignore:
Timestamp:
Oct 17, 2016 1:20:39 PM (8 years ago)
Author:
Paul Kienzle <pkienzle@…>
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
Message:

update conversion tables corresponding to the great parameter shift

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/convert.py

    r51241113 r1b49bf8  
    22Convert models to and from sasview. 
    33""" 
    4 from __future__ import print_function 
    5  
    6 from os.path import join as joinpath, abspath, dirname 
     4from __future__ import print_function, division 
     5 
    76import math 
    87import warnings 
     
    1716    'two_lorentzian', 
    1817    "two_power_law", 
    19     'gel_fit', 
    2018    'gauss_lorentz_gel', 
    2119    'be_polyelectrolyte', 
     
    215213        if name in MODELS_WITHOUT_VOLFRACTION: 
    216214            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'] *= 1e15 
    229         elif name == 'spherical_sld': 
    230             oldpars["CONTROL"] -= 1 
    231             # remove polydispersity from shells 
    232             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 shells 
    236             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) 
    242215        elif name == 'core_multi_shell': 
    243216            # kill extra shells 
     
    252225        elif name == 'core_shell_parallelepiped': 
    253226            _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'] 
    254232        elif name in ['mono_gauss_coil', 'poly_gauss_coil']: 
    255233            del oldpars['i_zero'] 
    256234        elif name == 'onion': 
    257235            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 
    258242        elif name == 'rpa': 
    259243            # convert scattering lengths from femtometers to centimeters 
     
    272256                for k in "Kab,Kac,Kad".split(','): 
    273257                    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 
    274290 
    275291    #print("convert from",list(sorted(pars))) 
     
    315331        if name in MODELS_WITHOUT_VOLFRACTION: 
    316332            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 
    320337        elif name == 'line': 
    321338            pars['scale'] = 1 
    322339            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 
    323349        elif name == 'rpa': 
    324350            pars['case_num'] = int(pars['case_num']) 
    325         elif name == 'mono_gauss_coil': 
    326             pars['i_zero'] = 1 
    327         elif name == 'poly_gauss_coil': 
    328             pars['i_zero'] = 1 
    329         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']) 
    333351        elif name == 'spherical_sld': 
    334352            pars['n_shells'] = math.ceil(pars['n_shells']) 
     
    339357                pars['thickness%d_pd_n'%k] = 0 
    340358                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.