from util.colorschemes import hex_to_rgb_float def set_atom_color(symbol, hexcolor): from ase.data import atomic_numbers from ase.data.colors import jmol_colors, cpk_colors float_color = hex_to_rgb_float(hexcolor) n = atomic_numbers[symbol] jmol_colors[n] = float_color cpk_colors[n] = float_color from scipy.spatial.distance import pdist, squareform import numpy as np def get_bondatoms(atoms): site_positions = [site.position for site in atoms] pair_distances = squareform(pdist(np.stack(site_positions))) vs = pair_distances bondatoms = [] for i in range(vs.shape[0]): for j in range(i): if vs[i, j] < 3: # up to 3 angstrom distance show a bond TODO bondatoms.append((i, j)) return bondatoms # returns to many # from ase.io.pov import get_bondpairs # bondatoms=get_bondpairs(lat, 5) TARGET_DPI = 300 # doc: https://github.com/WMD-group/ASE-Tutorials/blob/master/povray-tools/ase_povray.py def get_pov_settings(size, COLORSCHEME, bondatoms=None): white = hex_to_rgb_float(COLORSCHEME["bg0"]) other = hex_to_rgb_float(COLORSCHEME["fg-yellow"]) pixels = TARGET_DPI * size[0] pov_settings=dict( transparent=True, display=False, # camera_type='orthographic', camera_type='perspective', canvas_width=pixels, # point_lights : [], #[(18,20,40), 'White'],[(60,20,40),'White'], # [[loc1, color1], [loc2, color2],...] point_lights=[[(18,20,40), white],[(60,20,40),other]], # [[loc1, color1], [loc2, color2],...] background=(0, 0, 0, 1.,), bondlinewidth=0.07, bondatoms=bondatoms ) return pov_settings