Example #1
0
def diamond_symmetry(con):
    N = 100
    pm = 4
    tr = 0.05
    sizelat = 1
    func = double_diamond
    cubezero = double_sign_lattice(lattice_num=N, func=func, con=con, sizelat=sizelat)
    print round(cubezero.sum()/N**3,3)

    cubezero /= cubezero.sum()
    qsvec, intens_zero = straight_intensity(cubezero, peakmax=pm, sizelat=sizelat)
    _, lenqs = generate_qvecs_lenqs_deprecated(peakmax=pm)

    plt.plot(lenqs, intens_zero, 'bo')
    plt.plot(lenqs, intens_zero, '--g')
    for num, x in enumerate(qsvec):
        if intens_zero[num]>tr:
            print x, round(lenqs[num],3)
    plt.title(con)
    plt.show()
    slice = cubezero[0, :, :]
    plt.imshow(slice)
    plt.colorbar()
    plt.show()
Example #2
0
def research_diamond():
    interp_func = double_diamond
    save_interpolate = False
    const_pnum = 100
    N = 50
    fit_degree = 6
    bounds_const = (0.7, 1.4)
    const_s = np.linspace(bounds_const[0], bounds_const[1], const_pnum)
    phi_s = np.zeros((len(const_s)))
    phi = lambda cube: float((cube>0).sum())/N**3

    """
    for num, con in enumerate(const_s):
        ff = lambda x,y,z: double_diamond(x,y,z, const=con)
        cube = cube_lattice(flambda=ff, lattice_num=N)
        ff = lambda x,y,z: -double_diamond(x,y,z, const=-con)
        cube2 = cube_lattice(flambda=ff, lattice_num=N)
        triangulate_and_show_cube(cube)
        triangulate_and_show_cube(cube2, color='r')
        cube *= cube2
        triangulate_and_show_cube(cube, color='g')
    """
    n = 61
    c = cube_lattice(lattice_num=n, flambda=interp_func)
    c = (c>0).astype(float)
    print c.sum()*2,n**3
    for num, con in enumerate(const_s):
        cube = double_sign_lattice(lattice_num=N, func=interp_func, con=con, warn=False)
        print con, cube.sum()/N**3
        if num%10==0:
            pass
            #triangulate_and_show_cube(cube)
        phi_s[num] = phi(cube)
    interp = np.polyfit(phi_s, const_s, fit_degree)

    def res_inter(x):
        res = 0
        N = len(interp)
        extents = range(N)
        for num in extents:
            res += interp[num]*x**(N-1-num)
        return res

    interp_const = res_inter(phi_s)
    interp = np.around(interp, decimals=3)
    plt.plot(phi_s, const_s, 'xr', label="data")
    plt.plot(phi_s, interp_const,'-g', label="interpolation")
    plt.xlabel("$\phi$")
    plt.ylabel("C(const)")
    name = "diamond half C="
    N = len(interp)
    extents = range(N)
    countsize = len(name)
    threshold = 40
    for num in extents:
        if num!=0:
            temp = "%+.2f"%(interp[num])
        else:
            temp = "%.2f"%(interp[num])
        if (N-1-num)!=0:
            temp+=("${\phi}^{%d}$" % (N-1-num))
        name += temp
        countsize += len(temp)
        if countsize>threshold:
            countsize = 0
            name +='\n'
    name += '\n'+'error:'+"%.3g"%(((interp_const-const_s)**2).sum()/(const_s**2).sum())

    phi_s_red = phi_s[phi_s<0.2]
    plt.plot(phi_s, phi_to_const_double_double_diam(phi_s), '--b', label="function")

    plt.title(name)
    plt.legend(loc=3)
    plt.tight_layout()
    cube_test = single_sign_lattice(lattice_num=N, func=_diamond, con=1.087)
    print (cube_test.sum())/N**3
    plt.show()
    if save_interpolate:
        f = open("inter_res.py", 'w')