def structure_factor(VW, L, n_frames=10, n_start=1, filters=0.05, dh=0.05,save='sf'): import MD.analysis.sfactor as sf #Find Structure Factor stmp,qx = sf.sfactor(VW[n_start:n_start+n_frames],L=L,l=20) S,Q,primitive_vectors = sf.sort_sfpeaks(stmp,qx) #Plot the graph xlabel = '$|\\vec{q}$ $|$' ylabel = '$S(\\vec{q}$ $)$ ' pyplot.plot(Q, S, linestyle='', marker='x', xlabel=xlabel, ylabel=ylabel, save=save) util.pickle_dump(Q,'Vsfx%i.pkl'%n_start) util.pickle_dump(S,'Vsfy%i.pkl'%n_start) #if len(QQ)>500: # bars,height = sf.sf_max(QQ,qpeaks=8) # db_x,db_y = sf.dbfactor(msdr=5) # pyplot.plot_bar(bars, height, xlabel=xlabel, ylabel=ylabel, # save=save) # pyplot.plot(db_x, db_y, linestyle='--', xlabel=xlabel, ylabel=ylabel, # save=save) # #return q, s, bars, height, db_x, db_y # return Q, S, primitive_vectors #filter out the noise Q, S, primitive_vectors = sf.sf_filter(Q, S, primitive_vectors, filters=filters, save = 'sf%i'%n_start) return Q, S, primitive_vectors
def self_intermediate_scattering(VW, L, x, n_start=1, filters=0.05, dh=0.05,save='sf',l=5,delta=5,calc=True): import MD.analysis.sfactor as sf #Find Structure Factor if calc: import time from MD.canalysis.int_scattering import int_scatter F = [] for i in range(delta): print i print "caculating Average" print VW.shape print "Structure Factor" A = VW[n_start+i] stmp,qx = sf.sfactor(np.array([A]),L=L[n_start],l=l) S,Q,primitive_vectors = sf.sort_sfpeaks(stmp,qx) S,Q,primitive_vectors = sf.sf_filter_max(S,Q,primitive_vectors,filters=0.5) index = S.index(max(S)) k = primitive_vectors[S.index(max(S))] #take the average over different starting configurations print "Calculating Int Scattering" start = time.clock() scat_c = int_scatter(VW[n_start+i:],np.array(L[0]),np.array(k), np.array(x[:-(n_start+i)])) end = time.clock() print 'cython runtime' print end-start F.append(scat_c) F_avg = np.zeros((len(F[-1]))) for i in F: for j in range(len(F[-1])): F_avg[j] += i[j] F_avg /= delta #reset the zero of x so that the plot starts at the correct time x = range(len(F[-1])) util.pickle_dump([x,F_avg],'si_scat.pkl') xlabel = 't' ylabel = 'F(q,t)' save = 'int_scatter' A = util.pickle_load('si_scat.pkl') x = A[0] F_avg = A[1] #Kohlraush-Williams-Watts function # A exp[-(t/tau_b)^beta] beta = 1.4 tau_a = 6 K = [] K_x = [] fid = open('self_scat.dat','w') for i in range(len(A[0])): fid.write('%i %.4f\n'%(A[0][i],A[1][i])) fid.close() for i in np.arange(1,len(x),0.1): K.append(F_avg[1] * math.exp(-(i/tau_a)**beta)) K_x.append(i)
def find_lattice(MD,VW,L,n_finish=1,n_start=0,delta=20,filters=0.2): # Identify the bcc lattice as a grid and find the recipricol lattice #Find Structure Factor #print VW.shape redo = True while redo == True: stmp,qx = sf.sfactor(VW[-10:-1],L=L,l=10) S,Q,primitive_vectors = sf.sort_sfpeaks(stmp,qx) print np.array(Q) Q, S, primitive_vectors = sf.sf_filter(Q, S, primitive_vectors, filters=filters, save = 'sffilter') a,b = MD.analysis.sfactor.recipricol(Q,primitive_vectors) #Find the best fit for the qlattice at a particular frame by looking #for the lowest value of the msdr x = np.arange(n_start,n_finish,delta) defects = np.zeros((len(x),15)) lowest=10000 for k in x: for i in range(10): crystal, c = make.make_bcc(a[0], a[1], a[2], VW[k][i], L[0]+5) msdr_x = msdr.msd_r(VW[k], crystal, L) if lowest > msdr_x: lowest = msdr_x index = i frame = k crystal, cword = make.make_bcc(a[0], a[1], a[2], VW[frame][index], L[0]+5) print np.array(b) print np.array(a) if raw_input('Do you want to retry?[no]/yes ') == 'yes': redo = True else: redo = False util.pickle_dump(cword,'cword.pkl') util.pickle_dump(crystal,'ccrystal.pkl') #filter out the comensurate crystal C = [] for i in crystal: #make sure there aren't two that are close due to pbc if rcut_neighbors_point(np.array(C),i,L,rcut=6) == 0: C.append(i) #write out the lattice fid = open('testlattice.xyz','w') fid.write(('%i\n')%(len(C))) fid.write('Atoms\n') for i in range(len(C)): fid.write(('%c %f %f %f\n')%('A',C[i][0],C[i][1], C[i][2])) fid.close() util.pickle_dump(C,'C.pkl') return crystal, C
def structure_factor(VW, L, n_frames=10, n_start=1, filters=0.05, dh=0.05,save='sf',l=10): import MD.analysis.sfactor as sf #Find Structure Factor A = Average(VW,L,n_start,n_frames) #A = VW[n_start] stmp,qx = sf.sfactor(np.array([A]),L=L[n_start],l=l) S,Q,primitive_vectors = sf.sort_sfpeaks(stmp,qx) fid = open('sftotal.txt','w') fid.write('S Q\n') for i in range(len(S)): fid.write('%.5f %.5f\n'%(S[i],Q[i])) fid.close() #Plot the graph xlabel = '$|\\vec{q}$ $|$' ylabel = '$S(\\vec{q}$ $)$ ' #sp4 = 0.634698 #sp12 = 0.530493 #sc 1.121997 #pyplot_eps.plot_sf(Q, S,0.552381, linestyle='', marker='x', #xlabel=xlabel, ylabel=ylabel, save=save,xlen=20) pyplot.plot_sf(Q, S,0.552381, linestyle='', marker='x', xlabel=xlabel, ylabel=ylabel, save=save,xlen=20) util.pickle_dump(Q,'Vsfx%i.pkl'%n_start) util.pickle_dump(S,'Vsfy%i.pkl'%n_start) print 'finished reconstruction' #if len(QQ)>500: # bars,height = sf.sf_max(QQ,qpeaks=8) # db_x,db_y = sf.dbfactor(msdr=5) # pyplot.plot_bar(bars, height, xlabel=xlabel, ylabel=ylabel, # save=save) # pyplot.plot(db_x, db_y, linestyle='--', xlabel=xlabel, ylabel=ylabel, # save=save) # #return q, s, bars, height, db_x, db_y # return Q, S, primitive_vectors #filter out the noise Q, S, primitive_vectors = sf.sf_filter(Q, S, primitive_vectors, filters=filters,save=save) import MD.analysis.reconstruct_lattice as rl import MD.unit.make_bcc as mb con = True while con: a1,a2,a3 = rl.reconstruct_lattice(Q,primitive_vectors,save+'recipricol.txt') print a1,a2,a3 mb.make_bcc(a1,a2,a3,A[0],L[n_start]) if raw_input('Reselect? (y)/N') == 'N': con = False return Q, S, primitive_vectors
def structure_factor(VW, L, n_frames=10, n_start=1, filters=0.05, dh=0.05,save='sf',l=10): import MD.analysis.sfactor as sf #Find Structure Factor #Average_position stmp,qx = sf.sfactor(np.array([VW]),L=L,l=l) S,Q,primitive_vectors = sf.sort_sfpeaks(stmp,qx) #Plot the graph xlabel = '$|\\vec{q}$ $|$' ylabel = '$S(\\vec{q}$ $)$ ' pyplot.plot(Q, S, linestyle='', marker='x', xlabel=xlabel, ylabel=ylabel, save=save) util.pickle_dump(Q,'Vsfx%i.pkl'%n_start) util.pickle_dump(S,'Vsfy%i.pkl'%n_start) print 'finished reconstruction' Q, S, primitive_vectors = sf.sf_filter(Q, S, primitive_vectors, filters=filters,save=save) print 'sorting peaks' return Q, S, primitive_vectors