Changeset 4b4eee1 in sasmodels


Ignore:
Timestamp:
Dec 5, 2016 1:36:01 PM (7 years ago)
Author:
krzywon
Branches:
master, core_shell_microgels, costrafo411, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
298621b
Parents:
9eb5eca
Message:

Added versioning to convert.py for future model reparameterization.

Location:
sasmodels
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/conversion_table.py

    re1ea6b5 r4b4eee1  
    88""" 
    99 
    10 # TODO: May need to version this for future versions of sasview when 
    11 # TODO: models are reparameterized 
    12  
    1310CONVERSION_TABLE = { 
     11    "4.1.0" : {}, 
     12    "4.0.1" : { 
    1413    "adsorbed_layer": [ 
    1514        "Core2ndMomentModel", 
     
    845844        } 
    846845    ] 
     846    } 
    847847} 
  • sasmodels/convert.py

    re1ea6b5 r4b4eee1  
    9292 
    9393 
    94 def _get_translation_table(model_info): 
    95     _, translation = CONVERSION_TABLE.get(model_info.id, [None, {}]) 
     94def _get_translation_table(model_info, version='4.0.1'): 
     95    _, translation = CONVERSION_TABLE.get(version).get(model_info.id, [None, {}]) 
    9696    translation = translation.copy() 
    9797    for p in model_info.parameters.kernel_parameters: 
     
    145145    return newpars 
    146146 
    147 def _conversion_target(model_name): 
     147def _conversion_target(model_name, version='4.0.1'): 
    148148    """ 
    149149    Find the sasmodel name which translates into the sasview name. 
     
    153153    two variants in sasview. 
    154154    """ 
    155     for sasmodels_name, [sasview_name, _] in CONVERSION_TABLE.items(): 
     155    for sasmodels_name, [sasview_name, _] in CONVERSION_TABLE.get(version).items(): 
    156156        if sasview_name == model_name: 
    157157            return sasmodels_name 
     
    159159 
    160160 
    161 def _hand_convert(name, oldpars): 
    162     if name == 'core_shell_parallelepiped': 
     161def _hand_convert(name, oldpars, version='4.0.1'): 
     162    if name == 'core_shell_parallelepiped' and version == '4.0.1': 
    163163        # Make sure pd on rim parameters defaults to zero 
    164164        # ... probably not necessary. 
     
    166166        oldpars['rimB.width'] = 0.0 
    167167        oldpars['rimC.width'] = 0.0 
    168     elif name == 'core_shell_ellipsoid:1': 
     168    elif name == 'core_shell_ellipsoid:1' and version == '4.0.1': 
    169169        # Reverse translation (from new to old), from core_shell_ellipsoid.c 
    170170        #    equat_shell = equat_core + thick_shell 
     
    185185        oldpars['polar_core'] = polar_core / equat_core 
    186186        oldpars['polar_shell'] = (polar_shell-polar_core)/(equat_shell-equat_core) 
    187     elif name == 'hollow_cylinder': 
     187    elif name == 'hollow_cylinder' and version == '4.0.1': 
    188188        # now uses radius and thickness 
    189189        thickness = oldpars['radius'] - oldpars['core_radius'] 
     
    192192            pd = oldpars['radius.width']*oldpars['radius']/thickness 
    193193            oldpars['radius.width'] = pd 
    194     elif name == 'multilayer_vesicle': 
     194    elif name == 'multilayer_vesicle' and version == '4.0.1': 
    195195        if 'scale' in oldpars: 
    196196            oldpars['volfraction'] = oldpars['scale'] 
     
    206206        if 'scale.units' in oldpars: 
    207207            oldpars['volfraction.units'] = oldpars['scale.units'] 
    208     elif name == 'pearl_necklace': 
     208    elif name == 'pearl_necklace' and version == '4.0.1': 
    209209        pass 
    210210        #_remove_pd(oldpars, 'num_pearls', name) 
    211211        #_remove_pd(oldpars, 'thick_string', name) 
    212     elif name == 'polymer_micelle': 
     212    elif name == 'polymer_micelle' and version == '4.0.1': 
    213213        if 'ndensity' in oldpars: 
    214214            oldpars['ndensity'] /= 1e15 
     
    217217        if 'ndensity.upper' in oldpars: 
    218218            oldpars['ndensity.upper'] /= 1e15 
    219     elif name == 'rpa': 
     219    elif name == 'rpa' and version == '4.0.1': 
    220220        # convert scattering lengths from femtometers to centimeters 
    221221        for p in "L1", "L2", "L3", "L4": 
     
    226226            if p + ".upper" in oldpars: 
    227227                oldpars[p + ".upper"] /= 1e-13 
    228     elif name == 'spherical_sld': 
     228    elif name == 'spherical_sld' and version == '4.0.1': 
    229229        oldpars["CONTROL"] = 0 
    230230        i = 0 
     
    232232            oldpars["CONTROL"] += 1 
    233233            i += 1 
    234     elif name == 'teubner_strey': 
     234    elif name == 'teubner_strey' and version == '4.0.1': 
    235235        # basically undoing the entire Teubner-Strey calculations here. 
    236236        #    drho = (sld_a - sld_b) 
     
    280280    Convert model from old style parameter names to new style. 
    281281    """ 
    282     newname = _conversion_target(name) 
    283     if newname is None: 
    284         return name, pars 
    285     if ':' in newname:   # core_shell_ellipsoid:1 
    286         model_info = load_model_info(newname[:-2]) 
    287         # Know that the table exists and isn't multiplicity so grab it directly 
    288         # Can't use _get_translation_table since that will return the 'bare' 
    289         # version. 
    290         translation = CONVERSION_TABLE[newname][1] 
    291     else: 
    292         model_info = load_model_info(newname) 
    293         translation = _get_translation_table(model_info) 
    294     newpars = _hand_convert(newname, pars.copy()) 
    295     newpars = _convert_pars(newpars, translation) 
    296     if not model_info.structure_factor: 
    297         newpars = _rescale_sld(model_info, newpars, 1e6) 
    298     newpars.setdefault('scale', 1.0) 
    299     newpars.setdefault('background', 0.0) 
    300     if use_underscore: 
    301         newpars = _pd_to_underscores(newpars) 
     282    newpars = pars 
     283    for version, _ in sorted(CONVERSION_TABLE.iteritems()): 
     284        newname = _conversion_target(name, version) 
     285        if newname is None: 
     286            newname = name 
     287            continue 
     288        if ':' in newname:   # core_shell_ellipsoid:1 
     289            model_info = load_model_info(newname[:-2]) 
     290            # Know that the table exists and isn't multiplicity so grab it directly 
     291            # Can't use _get_translation_table since that will return the 'bare' 
     292            # version. 
     293            translation = CONVERSION_TABLE.get(version)[newname][1] 
     294        else: 
     295            model_info = load_model_info(newname) 
     296            translation = _get_translation_table(model_info, version) 
     297        newpars = _hand_convert(newname, newpars, version) 
     298        newpars = _convert_pars(newpars, translation) 
     299        if not model_info.structure_factor: 
     300            newpars = _rescale_sld(model_info, newpars, 1e6) 
     301        newpars.setdefault('scale', 1.0) 
     302        newpars.setdefault('background', 0.0) 
     303        if use_underscore: 
     304            newpars = _pd_to_underscores(newpars) 
     305        name = newname 
    302306    return newname, newpars 
    303307 
  • sasmodels/sasview_model.py

    r8977226 r4b4eee1  
    5757    import sas.models 
    5858    from sasmodels.conversion_table import CONVERSION_TABLE 
    59     for new_name, conversion in CONVERSION_TABLE.items(): 
     59    for new_name, conversion in CONVERSION_TABLE.get('4.0.1').items(): 
    6060        # CoreShellEllipsoidModel => core_shell_ellipsoid:1 
    6161        new_name = new_name.split(':')[0] 
Note: See TracChangeset for help on using the changeset viewer.