# coding: utf-8
""" This file implements a thin wrapper to the Voronoi code
written by Can Kocer, for use with matador queries and docs.
https://bitbucket.org/can_kocer/ajm_group_voronoi_code
Requires Can's code to be on your PYTHONPATH.
"""
from matador.export import doc2res
from os import remove
from os.path import isfile
[docs]def get_voronoi_substructure(doc):
""" Run Can's Voronoi analysis on a matador doc. """
try:
from Vornetclass import VoronoiNetwork
doc2res(doc, 'Vropple.res', hash_dupe=False, overwrite=True, info=False, sort_atoms=False)
vornet = VoronoiNetwork(filename='Vropple.res')
vornet.computeSubStrucs()
doc['voronoi_substruc'] = [vc.getSubStruc(use_area=False) for vc in vornet.VoronoiCells]
if isfile('Vropple.res'):
remove('Vropple.res')
return doc['voronoi_substruc']
except:
if isfile('Vropple.res'):
remove('Vropple.res')
return False
[docs]def get_voronoi_points(doc, debug=False):
""" Run Can's Voronoi analysis on a matador doc
and return nodes, face midpoints and edge midpoints.
"""
try:
from Vornetclass import VoronoiNetwork
doc2res(doc, 'Vropple.res', hash_dupe=False, overwrite=True, info=False, sort_atoms=False)
vornet = VoronoiNetwork(filename='Vropple.res')
if debug:
print(vornet.struc)
vornet.computeVorNet()
doc['voronoi_nodes'] = vornet.getNodeFracPos()
doc['voronoi_face_midpoints'] = vornet.getFracFaceMidpoints()
doc['voronoi_edge_midpoints'] = vornet.getFracEdgeMidpoints()
if isfile('Vropple.res'):
remove('Vropple.res')
return doc['voronoi_nodes']
except:
if isfile('Vropple.res'):
remove('Vropple.res')
return False
if __name__ == '__main__':
from matador.query import DBQuery
from matador.hull import QueryConvexHull
# test with LiAs
query = DBQuery(composition=['LiAs'], subcmd='hull')
hull = QueryConvexHull(query, no_plot=True, hull_cutoff=0)
hull_cursor = hull.hull_cursor
most_lithiated = hull_cursor[-2]
most_lithiated_substruc = get_voronoi_substructure(most_lithiated)
other_substruc = []
for doc in hull_cursor:
other_substruc.append(get_voronoi_substructure(doc))
print(other_substruc)
print(most_lithiated_substruc)