コード例 #1
0
ファイル: single_point.py プロジェクト: zimka/laboratory
def test_by_sin(npoints=100):
    s = lambda x, y, z: np.sin(2*np.pi*4*r(x,y,z))
    sizelat = 4
    l = sizelat/2
    r = lambda x, y, z: np.sqrt((x-l)**2 + (y-l)**2 + (z-l)**2)

    cube = cube_lattice(lattice_num=npoints, flambda=s, sizelat=sizelat)
    plt.imshow(cube[npoints/2, :,:])
    plt.colorbar()
    plt.show()
    cube -= np.average(cube)

    peakmax = 10.
    lenqs2, intens_mod = straight_intensity(cube, peakmax=peakmax, sizelat=sizelat)
    intens_mod /= lenqs2**2
    plt.plot(lenqs2, intens_mod,'--b')
    plt.plot(lenqs2, intens_mod,'bo')

    plt.title("ФП в точках, ячеек:{}".format(sizelat))
    plt.ylabel("I, a.u.")
    plt.xlabel("q, a.u.")
    plt.show()
    output(name="test3", pic_path=".", lenqs=lenqs2, intens_exp=intens_mod,
           intens_mod=intens_mod, error=0., xaxis=np.array([0.,9.]))

    from Fourier import fourier_base
    lenqs_f, intens_f = fourier_base(cube)
    lenqs_f /= sizelat
    plt.plot(lenqs_f, intens_f/np.max(intens_f),'-r')
    plt.title("Полное ФП, ячеек:{}".format(sizelat))

    plt.ylabel("I, a.u.")
    plt.xlabel("q, a.u.")
    plt.show()
コード例 #2
0
ファイル: single_point.py プロジェクト: zimka/laboratory
def test_single_scat(npoints=256):
    r = lambda x, y, z: np.sqrt(x**2 + y**2 + z**2)
    s = lambda x, y, z: np.sin(2*np.pi*r(x,y,z))

    sizelat = 10
    cube = cube_lattice(lattice_num=npoints, flambda=s, sizelat=sizelat)
    cube2 = np.zeros(cube.shape)
    cube2[cube>0.5] = 1.
    #cube = cube2
    cube -= np.average(cube)

    x, y, z = np.mgrid[:sizelat:npoints * 1j, :sizelat:npoints * 1j, :sizelat:npoints * 1j]

    qvec = np.array([1, 0, 0])
    qC = x*qvec[0] + y*qvec[1] + z*qvec[2]
    expqC = np.exp(2*np.pi*1j*qC)
    amplitude = np.abs((expqC*cube).sum()).astype(float)
    print(amplitude)
コード例 #3
0
ファイル: task_fourier.py プロジェクト: zimka/laboratory
def generate_bicontinous_cube(**kwargs):
    phi = kwargs.get("phi", [0.09, 0.18444])
    dens = kwargs.get("dens", [0.33, 0.186, 0.27])
    fname = kwargs.get("func", "g")
    if fname == "g":
        func = gyroid
    elif fname == "dd":
        func = double_diamond
    else:
        raise ValueError("Wrong func: {}".format(fname))

    signal_length = kwargs.get("signal_length", 4)
    npoints = kwargs.get("npoints", 128)

    thr = kwargs.get("thr", 0.05)

    if func == gyroid:
        phi_to_c = phi_to_const_gyr
    elif func == double_diamond:
        phi_to_c = phi_to_const_double_double_diam
    else:
        raise ValueError("Func is not a gyr or dd: {}".format(repr(func)))

    C = phi_to_c(np.array(phi))
    func = kwargs.get("func_full",func)

    func_1in = lambda x,y,z: func(x,y,z, const=C[0])
    cube1_in = cube_lattice(lattice_num=npoints, flambda=func_1in, sizelat=signal_length)

    func_1out = lambda x,y,z: func(x,y,z, const=C[1])
    cube1_out = cube_lattice(lattice_num=npoints, flambda=func_1out, sizelat=signal_length)

    func_2in = lambda x,y,z: -func(x,y,z, const=-C[0])
    cube2_in = cube_lattice(lattice_num=npoints, flambda=func_2in, sizelat=signal_length)

    func_2out = lambda x,y,z: -func(x,y,z, const=-C[1])
    cube2_out = cube_lattice(lattice_num=npoints, flambda=func_2out, sizelat=signal_length)

    #plt.imshow(cube2_out[len(cube2_out)/2])
    #plt.colorbar()
    #plt.show()

    postname = kwargs.get("post","mesh")
    if postname == "mesh":
        post = post_mesh
    elif postname == "surf":
        post = lambda c: post_surf(c, thr=thr)
    else:
        raise ValueError("Wring type of post {}".format(postname))

    cube_in = (post(cube1_in) + post(cube2_in))

    #plt.imshow(cube_in[len(cube_in)/2])
    #plt.colorbar()
    #plt.show()

    cube_out = (post(cube1_out) + post(cube2_out))
    #plt.imshow(cube1_out[len(cube_in)/2])
    #plt.show()

    cube = cube_out*(dens[1]-dens[2]) + cube_in*(dens[0]-dens[1]) + dens[2]

    return cube
コード例 #4
0
ファイル: task_fourier.py プロジェクト: zimka/laboratory
def _task_fourier(**kwargs):
    """fourier for cube with 3 phases"""
    """order is: h20, polar, alk"""
    phi = kwargs.get("phi", [0.09, 0.18444])
    dens = kwargs.get("dens", [0.33, 0.186, 0.27])
    attempt_name = kwargs.get("name", "gyrcomplmesh")
    convolve=kwargs.get("convolve", True)
    conv_len=kwargs.get("conv_len", 20)
    dwp = kwargs.get("dwp", 0.25)
    fname = kwargs.get("func", "g")
    if fname=="g":
        func = gyroid
    elif fname == "dd":
        func = double_diamond
    else:
        raise ValueError("Wrong func: {}".format(fname))

    signal_length = kwargs.get("length", 4)
    npoints = kwargs.get("npoints", 128)

    thr = kwargs.get("thr", 0.05)

    postname = kwargs.get("post","mesh")
    if postname == "mesh":
        post = post_mesh
    elif postname == "surf":
        post = lambda c: post_surf(c, thr=thr)
    else:
        raise ValueError("Wring type of post {}".format(postname))

    show3d = kwargs.get("show3d", False)
    base = "verbose/"

    """--------"""

    """preparations"""
    phi = np.array(phi)
    dens = np.array(dens)

    attempt_name = attempt_name + ":ph({}), d({}),L({}),N({})".format(phi, dens, signal_length, npoints)

    if func == gyroid:
        phi_to_c = phi_to_const_gyr
    elif func == double_diamond:
        phi_to_c = phi_to_const_double_double_diam
    else:
        raise ValueError("Func is not a gyr or dd: {}".format(repr(func)))

    catalog = base + attempt_name + ":" + str(date.today())
    try:
        mkdir(catalog)
    except FileExistsError:
        pass
    catalog += '/'

    C = phi_to_c(phi)

    func_1in = lambda x,y,z: func(x,y,z, const=C[0])
    cube1_in = cube_lattice(lattice_num=npoints, flambda=func_1in, sizelat=signal_length)

    func_1out = lambda x,y,z: func(x,y,z, const=C[1])
    cube1_out = cube_lattice(lattice_num=npoints, flambda=func_1out, sizelat=signal_length)

    func_2in = lambda x,y,z: -func(x,y,z, const=-C[0])
    cube2_in = cube_lattice(lattice_num=npoints, flambda=func_2in, sizelat=signal_length)

    func_2out = lambda x,y,z: -func(x,y,z, const=-C[1])
    cube2_out = cube_lattice(lattice_num=npoints, flambda=func_2out, sizelat=signal_length)
    #vmp.show_mol_surf(surf_datas=(cube1_in, cube2_in, cube1_out, cube2_out))
    #plot_slice(cube2_in, catalog, name="2in.png")
    #plot_slice(cube1_in, catalog, name="1in.png")

    #plot_slice(cube1_out, catalog, name="1out.png")
    #plot_slice(cube2_out, catalog, name="2out.png")

    """----"""
    if show3d:
        vmp.show_mol_surf(surf_datas=(cube1_in,cube2_in, cube1_out, cube2_out), setrange=int(npoints*0.4), screenshot=True,
                          quit=True, screenname=catalog + '3d.png')

    cube_in = (post(cube1_in) + post(cube2_in))
    cube_out = (post(cube1_out) + post(cube2_out))
    cube = cube_out*(dens[1]-dens[2]) + cube_in*(dens[0]-dens[1]) + dens[2]
    plot_slice(cube, catalog)
    cube -= np.average(cube)
    fourier_intens_from_cube(cube, signal_length=signal_length, attempt_name=attempt_name,
                             catalog=catalog, filname="data/peaks_{}.txt".format(fname), convolve=convolve, conv_len=conv_len, dwp=dwp)