Statistiques
| Révision :

root / ase / visualize / __init__.py @ 1

Historique | Voir | Annoter | Télécharger (1,54 ko)

1 1 tkerber
import os
2 1 tkerber
import tempfile
3 1 tkerber
4 1 tkerber
from ase.io import write
5 1 tkerber
import ase.parallel as parallel
6 1 tkerber
from ase.old import OldASEListOfAtomsWrapper
7 1 tkerber
8 1 tkerber
def view(atoms, data=None, viewer='ag', repeat=None, block=False):
9 1 tkerber
    # Ignore for parallel calculations:
10 1 tkerber
    if parallel.size != 1:
11 1 tkerber
        return
12 1 tkerber
13 1 tkerber
    if hasattr(atoms, 'GetUnitCell'):
14 1 tkerber
        # Convert old ASE ListOfAtoms to new style.
15 1 tkerber
        atoms = OldASEListOfAtomsWrapper(atoms).copy()
16 1 tkerber
17 1 tkerber
    vwr = viewer.lower()
18 1 tkerber
19 1 tkerber
    if vwr == 'ag':
20 1 tkerber
        format = 'traj'
21 1 tkerber
        if repeat is None:
22 1 tkerber
            command = 'ag'
23 1 tkerber
        else:
24 1 tkerber
            command = 'ag --repeat=%d,%d,%d' % tuple(repeat)
25 1 tkerber
            repeat = None
26 1 tkerber
    elif vwr == 'vmd':
27 1 tkerber
        format = 'cube'
28 1 tkerber
        command = 'vmd'
29 1 tkerber
    elif vwr == 'rasmol':
30 1 tkerber
        format = 'pdb'
31 1 tkerber
        command = 'rasmol -pdb'
32 1 tkerber
    elif vwr == 'xmakemol':
33 1 tkerber
        format = 'xyz'
34 1 tkerber
        command = 'xmakemol -f'
35 1 tkerber
    elif vwr == 'gopenmol':
36 1 tkerber
        format = 'xyz'
37 1 tkerber
        command = 'rungOpenMol'
38 1 tkerber
    elif vwr == 'avogadro':
39 1 tkerber
        format = 'cube'
40 1 tkerber
        command = 'avogadro'
41 1 tkerber
    else:
42 1 tkerber
        raise RuntimeError('Unknown viewer: ' + viewer)
43 1 tkerber
44 1 tkerber
    fd, filename = tempfile.mkstemp('.' + format, 'ase-')
45 1 tkerber
    fd = os.fdopen(fd, 'w')
46 1 tkerber
    if repeat is not None:
47 1 tkerber
        atoms = atoms.repeat()
48 1 tkerber
    if data is None:
49 1 tkerber
        write(fd, atoms, format=format)
50 1 tkerber
    else:
51 1 tkerber
        write(fd, atoms, format=format, data=data)
52 1 tkerber
    fd.close()
53 1 tkerber
    if block:
54 1 tkerber
        os.system('%s %s' % (command, filename))
55 1 tkerber
    else:
56 1 tkerber
        os.system('%s %s &' % (command, filename))
57 1 tkerber
    os.system('(sleep 60; rm %s) &' % filename)