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) |