root / ase / visualize / __init__.py @ 7
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) |