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