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()
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)
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
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)