Source code for ase.visualize
import os
import tempfile
from ase.io import write
import ase.parallel as parallel
[docs]def view(atoms, data=None, viewer='ase-gui', repeat=None, block=False):
# Ignore for parallel calculations:
if parallel.size != 1:
return
vwr = viewer.lower()
if vwr == 'ase-gui':
format = 'traj'
if repeat is None:
command = 'ase-gui'
else:
command = 'ase-gui --repeat=%d,%d,%d' % tuple(repeat)
repeat = None
elif vwr == 'vmd':
format = 'cube'
command = 'vmd'
elif vwr == 'rasmol':
format = 'pdb'
command = 'rasmol -pdb'
elif vwr == 'xmakemol':
format = 'xyz'
command = 'xmakemol -f'
elif vwr == 'gopenmol':
format = 'xyz'
command = 'rungOpenMol'
elif vwr == 'avogadro':
format = 'cube'
command = 'avogadro'
elif vwr == 'sage':
from ase.visualize.sage import view_sage_jmol
view_sage_jmol(atoms)
return
else:
raise RuntimeError('Unknown viewer: ' + viewer)
fd, filename = tempfile.mkstemp('.' + format, 'ase-')
if repeat is not None:
atoms = atoms.repeat()
if data is None:
write(filename, atoms, format=format)
else:
write(filename, atoms, format=format, data=data)
if block:
os.system('%s %s' % (command, filename))
os.remove(filename)
else:
if os.name in ['ce', 'nt']: # Win
# XXX: how to make it non-blocking?
os.system('%s %s' % (command, filename))
os.remove(filename)
else:
os.system('%s %s & ' % (command, filename))
os.system('(sleep 60; rm %s) &' % filename)