Source code for ase2sprkkr.ase.visualise

from typing import Tuple, Union
from ase.io import write
from io import BytesIO
import sys
import subprocess


[docs] def view( atoms, repeat: Union[int, Tuple[int, int, int]] = None, scale_radii: float = 0.5, rotations: str = "", bonds=False, graph: str = "", terminal=False, blocking: bool = False, ): """Visualise atoms using ase viewer Parameters ---------- repeat Repeat the structure along axes [x,y,z]. If int is given, use the same number for all axis. scale_radii Relative size of atomic sites rotations Examples: "x90", "y90,z90". bonds Show bonds between atoms. graph terminal blocking Run the viewer in a subprocess to achieve nonblocking viewing. """ from ase.gui.images import Images if repeat is not None: if isinstance(repeat, int): repeat = [repeat] * 3 if not blocking: buf = BytesIO() write(buf, atoms, format="traj") args = [sys.executable, "-m", "ase", "gui", "-"] if repeat: args.append("--repeat={},{},{}".format(*repeat)) if bonds: args.append("-b") if scale_radii: args.append("--scale={}".format(scale_radii)) if rotations: args.append("--rotations={}".format(rotations)) if graph: args.append("--graph={}".format(graph)) if terminal: args.append("--terminal={}".format(terminal)) proc = subprocess.Popen(args, stdin=subprocess.PIPE) proc.stdin.write(buf.getvalue()) proc.stdin.close() return proc images = Images() images.initialize([atoms]) if repeat: images.repeat_images(repeat) if scale_radii: images.scale_radii(scale_radii) if terminal: if args.graph is not None: data = images.graph(args.graph) for line in data.T: for x in line: print(x, end=" ") print() else: import os from ase.gui.gui import GUI backend = os.environ.get("MPLBACKEND", "") if backend == "module://ipykernel.pylab.backend_inline": # Jupyter should not steal our windows del os.environ["MPLBACKEND"] gui = GUI(images, rotations, bonds, graph) gui.run()