Changeset eb97b11 in sasmodels for sasmodels/models/spherical_sld.py


Ignore:
Timestamp:
Apr 18, 2016 8:22:12 AM (8 years ago)
Author:
wojciech
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:
4605bf10
Parents:
f2f67a6
Message:

Profile function clean-up

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/models/spherical_sld.py

    rd2bb604 reb97b11  
    170170# pylint: disable=bad-whitespace, line-too-long 
    171171#            ["name", "units", default, [lower, upper], "type", "description"], 
    172 parameters = [["n",                "",               1,      [0, 9],         "", "number of shells"], 
     172parameters = [["n_shells",                "",               1,      [0, 9],         "", "number of shells"], 
    173173              ["radius_core",      "Ang",            50.0,   [0, inf],       "", "intern layer thickness"], 
    174174              ["sld_core",         "1e-6/Ang^2",     2.07,   [-inf, inf],    "", "sld function flat"], 
     175              ["sld_solvent",      "1e-6/Ang^2",     1.0,    [-inf, inf],    "", "sld function solvent"], 
    175176              ["sld_flat[n]",      "1e-6/Ang^2",     4.06,   [-inf, inf],    "", "sld function flat"], 
    176177              ["thick_flat[n]",    "Ang",            100.0,  [0, inf],       "", "flat layer_thickness"], 
    177178              ["func_inter[n]",    "",               0,      [0, 4],         "", "Erf:0, RPower:1, LPower:2, RExp:3, LExp:4"], 
    178179              ["thick_inter[n]",   "Ang",            50.0,   [0, inf],       "", "intern layer thickness"], 
    179               ["inter_nu[n]",      "",               2.5,    [-inf, inf],    "", "steepness parameter"], 
     180              ["nu_inter[n]",      "",               2.5,    [-inf, inf],    "", "steepness parameter"], 
    180181              ["npts_inter",       "",               35,     [0, 35],        "", "number of points in each sublayer Must be odd number"], 
    181               ["sld_solvent",      "1e-6/Ang^2",     1.0,    [-inf, inf],    "", "sld function solvent"], 
    182182              ] 
    183183# pylint: enable=bad-whitespace, line-too-long 
    184 #source = ["lib/librefl.c",  "lib/sph_j1c.c", "spherical_sld.c"] 
    185  
    186 def Iq(q, *args, **kw): 
    187     return q 
    188  
    189 def Iqxy(qx, *args, **kw): 
    190     return qx 
     184source = ["lib/librefl.c",  "lib/sph_j1c.c", "spherical_sld.c"] 
     185 
     186#def Iq(q, *args, **kw): 
     187#    return q 
     188 
     189#def Iqxy(qx, *args, **kw): 
     190#    return qx 
     191 
     192def profile(n_shells, radius_core,  sld_core,  sld_solvent, sld_flat, 
     193            thick_flat, func_inter, thick_inter, nu_inter, npts_inter): 
     194    """ 
     195    Returns shape profile with x=radius, y=SLD. 
     196    """ 
     197 
     198    #total_radius = 1.25*(sum(thickness[:n_shells]) + core_radius + 1) 
     199    #dr = total_radius/400  # 400 points for a smooth plot 
     200 
     201    z = [] 
     202    beta = [] 
     203    z0 = 0 
     204    # two sld points for core 
     205    z.append(0) 
     206    beta.append(sld_core) 
     207    z.append(radius_core) 
     208    beta.append(sld_core) 
     209    z0 += radius_core 
     210 
     211    for i in range(1, n_shells+2): 
     212        dz = thick_inter[i-1]/npts_inter 
     213        # j=0 for interface, j=1 for flat layer 
     214        for j in range(0, 2): 
     215            # interation for sub-layers 
     216            for n_s in range(0, npts_inter+1): 
     217                if j == 1: 
     218                    if i == n_shells+1: 
     219                        break 
     220                    # shift half sub thickness for the first point 
     221                    z0 -= dz#/2.0 
     222                        z.append(z0) 
     223                        #z0 -= dz/2.0 
     224                        z0 += thick_flat[i] 
     225                        sld_i = sld_flat[i] 
     226                        beta.append(sld_flat[i]) 
     227                        dz = 0 
     228                    else: 
     229                        nu = nu_inter[i-1] 
     230                        # decide which sld is which, sld_r or sld_l 
     231                        if i == 1: 
     232                            sld_l = sld_core 
     233                        else: 
     234                            sld_l = sld_flat[i-1] 
     235                        if i == n_shells+1: 
     236                            sld_r = sld_solvent 
     237                        else: 
     238                            sld_r = sld_flat[i] 
     239                        # get function type 
     240                        func_idx = func_inter[i-1] 
     241                        # calculate the sld 
     242                        sld_i = intersldfunc(func_idx, npts_inter, n_s, nu, 
     243                                            sld_l, sld_r) 
     244                    # append to the list 
     245                    z.append(z0) 
     246                    beta.append(sld_i) 
     247                    z0 += dz 
     248                    if j == 1: 
     249                        break 
     250    # put sld of solvent 
     251    z.append(z0) 
     252    beta.append(sld_solvent) 
     253    z_ext = z0/5.0 
     254    z.append(z0+z_ext) 
     255    beta.append(sld_solvent) 
     256    # return sld profile (r, beta) 
     257     
     258    return np.asarray(z), np.asarray(beta)*1e-6 
     259 
     260def ER(core_radius, n, thickness): 
     261    return np.sum(thickness[:n[0]], axis=0) + core_radius 
     262 
     263def VR(core_radius, n, thickness): 
     264    return 1.0, 1.0 
    191265 
    192266 
Note: See TracChangeset for help on using the changeset viewer.