def main(): modelfile = sys.argv[1] paramfile = sys.argv[2] m = Model(modelfile) m.generate_neighbors(3.45) cutoff = {} cutoff[(40,40)] = 3.6 cutoff[(13,29)] = 3.6 cutoff[(29,13)] = 3.6 cutoff[(40,13)] = 3.6 cutoff[(13,40)] = 3.6 cutoff[(29,40)] = 3.6 cutoff[(40,29)] = 3.6 cutoff[(13,13)] = 3.6 cutoff[(29,29)] = 3.6 cutoff[(41,41)] = 3.7 cutoff[(28,28)] = 3.7 cutoff[(41,28)] = 3.7 cutoff[(28,41)] = 3.7 cutoff[(46,46)] = 3.45 cutoff[(14,14)] = 3.45 cutoff[(46,14)] = 3.45 cutoff[(14,46)] = 3.45 m.generate_neighbors(cutoff) voronoi_3d(m,cutoff) vp_dict = load_param_file(paramfile) set_atom_vp_types(m,vp_dict) #vor_stats(m) # Prints what you probably want #index_stats(m) count = 0 for atom in m.atoms: #print(atom.vp.index[:4]) if(atom.vp.index[:4] == (0,1,10,2)): atoms = [a for a in atom.neighs]+[atom] for atom in atoms[1:]: #if( abs(atom.coord[0]-atoms[0].coord[0]) > 10 ): fix_atom(m, atoms[0], atom) vp = Model('0,1,10,2 vp',100,100,100,atoms) recenter_model(vp) vp.write('vp_data/vp{0}.xyz'.format(count)) convert(vp,'polyhedron','vp_data/vp{0}.txt'.format(count)) count += 1
def normalize_bond_distances(m): """ Rescales a cluster so that the average bond length is 1.0 """ center = find_center_atom(m) for atom in m.atoms: atom.coord = (atom.coord[0]-center.coord[0], atom.coord[1]-center.coord[1], atom.coord[2]-center.coord[2]) avg = 0. for atom in m.atoms: if atom.id != center.id: avg += m.dist(center, atom) avg /= (m.natoms-1) for atom in m.atoms: if atom.id != center.id: atom.coord = (atom.coord[0]/avg, atom.coord[1]/avg, atom.coord[2]/avg) recenter_model(m) return avg
def fix_cluster_pbcs(m): # First recenter to first octant recenter_model(m) meanx, meany, meanz = m.lx/4.0, m.ly/4.0, m.lz/4.0 for atom in m.atoms[1:]: atom.coord = (atom.coord[0]+meanx-m.atoms[0].coord[0], atom.coord[1]+meany-m.atoms[0].coord[1], atom.coord[2]+meanz-m.atoms[0].coord[2]) m.atoms[0].coord = (m.atoms[0].coord[0]+meanx-m.atoms[0].coord[0], m.atoms[0].coord[1]+meany-m.atoms[0].coord[1], m.atoms[0].coord[2]+meanz-m.atoms[0].coord[2]) # See if we need to fix fix = False for atom in m.atoms[1:]: if round(m.dist(m.atoms[0], atom)) != round(dist(m.atoms[0], atom)): fix = True break else: recenter_model(m) return m # If so, fix for atom in m.atoms: new = [] if round(m.dist(m.atoms[0], atom)) != round(dist(m.atoms[0], atom)): for c in atom.coord: if c < 0: new.append(c+m.lx) elif c > m.lx: new.append(c-m.lx) else: new.append(c) atom.coord = copy.copy(new) recenter_model(m) return m