def Qmapq6q4(M,L,count=14,crystal=6,verbose=False,rcut=30): #Find nearest neighbors for all particles and convert to spherical ####### #neighbors[i][0]=index of neighbors #neighbors[i][1]=array[i][x,y,z] of distance between neighbors ######## neighbors=[] print 'getting neighbors' for i in range(M.shape[0]): N = nn.count_neighbors_index(M,i,L,count=count, rcut=rcut,vectors=True) if len(N[0]) != count: print 'lenght of N', len(N[0]) neighbors.append([N[0],xyz_to_spherical(N[1])]) #include itself neighbors[-1][0].append(i) if verbose: print 'neighbors',len(N[0]) #find qlm of each particle ####### #store as values m=-l-l in nparray #Qlm[i]=np.array(ql-m:ql+m) for particle i #Qlm[i]=qlm(i) ###### print 'generating qlm matrix' l=4 qlm_matrix=np.zeros((M.shape[0],2*l+1),dtype=complex) for i in range(M.shape[0]): for m in range(-l,l+1): qlm_matrix[i][m+l]=qlm(neighbors[i][1],l,m) Ql4=np.zeros((M.shape[0]),dtype=complex) print 'generating Ql_avg' for i in range(M.shape[0]): qlm_avg=np.zeros((2*l+1),dtype=complex) for m in range(-l,l+1): for k in neighbors[i][0]: qlm_avg[m+l] += qlm_matrix[k,m+l] qlm_avg[m+l]/=len(neighbors[i][0]) Ql4[i]=ql(qlm_avg,l) print 'Ql4_avg=',l,Ql4.sum()/Ql4.shape[0] Ql6=np.zeros((M.shape[0]),dtype=complex) l=6 qlm_matrix=np.zeros((M.shape[0],2*l+1),dtype=complex) for i in range(M.shape[0]): for m in range(-l,l+1): qlm_matrix[i][m+l]=qlm(neighbors[i][1],l,m) for i in range(M.shape[0]): qlm_avg=np.zeros((2*l+1),dtype=complex) for m in range(-l,l+1): for k in neighbors[i][0]: qlm_avg[m+l]+=qlm_matrix[k,m+l] qlm_avg[m+l]/=len(neighbors[i][0]) Ql6[i]=ql(qlm_avg,l) print 'Ql6_avg=',l,Ql6.sum()/Ql6.shape[0] return Ql4,Ql6
def steinhardt_order(M,L,l=6,rcut=17.5,count=14,verbose=False): print 'l',l #Find nearest neighbors for all particles and convert to spherical ####### #neighbors[i][0]=index of neighbors #neighbors[i][1]=array[i][x,y,z] of distance between neighbors ######## neighbors=[] for i in range(M.shape[0]): N = nn.count_neighbors_index(M,i,L,count=count,rcut=rcut,vectors=True) if i == 0: print i, N[1] neighbors.append([N[0],xyz_to_spherical(N[1])]) if verbose: print 'neighbors',len(N[0]) #find qlm of each particle ####### #store as values m=-l-l in nparray #Qlm[i]=np.array(ql-m:ql+m) for particle i #Qlm[i]=qlm(i) ###### Qlm=np.zeros((M.shape[0],2*l+1),dtype=complex) qi=np.zeros((1,2*l+1),dtype=complex) for i in range(M.shape[0]): for m in range(-l,l+1): qi[0][m+l]=qlm(neighbors[i][1],l,m) Qlm[i][:]=qi Ql=[] for i in range(M.shape[0]): Ql.append(ql(Qlm[i],l)) print sum(Ql)/len(Ql) return Ql
def Qmap(M,L,count=14,l=6,crystal=6,verbose=False,rcut=30): #Find nearest neighbors for all particles and convert to spherical ####### #neighbors[i][0]=index of neighbors #neighbors[i][1]=array[i][x,y,z] of distance between neighbors ######## neighbors=[] #otree = node(L,delta=(M.shape[0]/2)**0.333) #otree.add_particles(M) print 'getting neighbors' for i in range(M.shape[0]): #N = cn_tree_index(M,i,otree,L,count=count,rcut=rcut) N = nn.count_neighbors_index(M,i,L,count=count,rcut=rcut,vectors=True) neighbors.append([N[0],xyz_to_spherical(N[1])]) #include itself neighbors[-1][0].append(i) if verbose: print 'neighbors',len(N[0]) #find qlm of each particle ####### #store as values m=-l-l in nparray #Qlm[i]=np.array(ql-m:ql+m) for particle i #Qlm[i]=qlm(i) ###### print 'generating qlm matrix' qlm_matrix=np.zeros((M.shape[0],2*l+1),dtype=complex) for i in range(M.shape[0]): for m in range(-l,l+1): qlm_matrix[i][m+l]=qlm(neighbors[i][1],l,m) Ql=np.zeros((M.shape[0]),dtype=complex) print 'generating Ql_avg' for i in range(M.shape[0]): qlm_avg=np.zeros((2*l+1),dtype=complex) for m in range(-l,l+1): for k in neighbors[i][0]: qlm_avg[m+l]+=qlm_matrix[k,m+l] qlm_avg[m+l]/=len(neighbors[i][0]) Ql[i]=ql(qlm_avg,l) print 'Ql=',l,Ql.sum()/Ql.shape[0] return Ql