#/usr/bin/python import math def get_dist(x,y,z): return math.sqrt(math.pow(x,2)+math.pow(y,2)+math.pow(z,2)) class type_ion(object): atom=0 x=0.0 y=0.0 z=0.0 # Total geometry file name filein1='XMOL.DAT' # Membership geometry file name filein2='c60.xyz' # Membership file name fileout='mem1.mem' # Read global geometry file tot_list=[] fin1=open(filein1,'r') totatoms=int(fin1.readline()) line1=fin1.readline() found1=[0 for i in range(totatoms)] for i in range(totatoms): ion=type_ion() line1=fin1.readline() tokens=line1.split() ion.atom=int(tokens[0]) ion.x=float(tokens[1]) ion.y=float(tokens[2]) ion.z=float(tokens[3]) tot_list.append(ion) fin1.close() # Read membership geometry file mem_list=[] fin2=open(filein2,'r') mematoms=int(fin2.readline()) line2=fin2.readline() for i in range(mematoms): ion=type_ion() line2=fin2.readline() tokens=line2.split() ion.atom=int(tokens[0]) ion.x=float(tokens[1]) ion.y=float(tokens[2]) ion.z=float(tokens[3]) mem_list.append(ion) fin2.close() # Look for membership atoms in global geometry file totfound=0 for i in range(mematoms): for j in range(totatoms): if mem_list[i].atom==tot_list[j].atom: x=mem_list[i].x-tot_list[j].x y=mem_list[i].y-tot_list[j].y z=mem_list[i].z-tot_list[j].z dist=get_dist(x,y,z) if dist<1e-4: totfound=totfound+1 found1[j]=1 # Write membership file fout=open(fileout,'w') fout.write('{0}\n'.format(totfound)) for i in range(totatoms): if found1[i]==1: fout.write('{0}\n'.format(i+1)) fout.close()