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