Statistiques
| Révision :

root / ase / io / xyz.py @ 11

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

1 1 tkerber
from math import pi, cos, sin, sqrt, acos
2 1 tkerber
3 1 tkerber
from ase.atoms import Atoms
4 1 tkerber
from ase.parallel import paropen
5 1 tkerber
6 1 tkerber
7 1 tkerber
def read_xyz(fileobj, index=-1):
8 1 tkerber
    if isinstance(fileobj, str):
9 1 tkerber
        fileobj = open(fileobj)
10 1 tkerber
11 1 tkerber
    lines = fileobj.readlines()
12 1 tkerber
    L1 = lines[0].split()
13 1 tkerber
    if len(L1) == 1:
14 1 tkerber
        del lines[:2]
15 1 tkerber
        natoms = int(L1[0])
16 1 tkerber
    else:
17 1 tkerber
        natoms = len(lines)
18 1 tkerber
    images = []
19 1 tkerber
    while len(lines) >= natoms:
20 1 tkerber
        positions = []
21 1 tkerber
        symbols = []
22 1 tkerber
        for line in lines[:natoms]:
23 1 tkerber
            symbol, x, y, z = line.split()[:4]
24 1 tkerber
            symbols.append(symbol)
25 1 tkerber
            positions.append([float(x), float(y), float(z)])
26 1 tkerber
        images.append(Atoms(symbols=symbols, positions=positions))
27 1 tkerber
        del lines[:natoms + 2]
28 1 tkerber
    return images[index]
29 1 tkerber
30 1 tkerber
def write_xyz(fileobj, images):
31 1 tkerber
    if isinstance(fileobj, str):
32 1 tkerber
        fileobj = paropen(fileobj, 'w')
33 1 tkerber
34 1 tkerber
    if not isinstance(images, (list, tuple)):
35 1 tkerber
        images = [images]
36 1 tkerber
37 1 tkerber
    symbols = images[0].get_chemical_symbols()
38 1 tkerber
    natoms = len(symbols)
39 1 tkerber
    for atoms in images:
40 1 tkerber
        fileobj.write('%d\n\n' % natoms)
41 1 tkerber
        for s, (x, y, z) in zip(symbols, atoms.get_positions()):
42 1 tkerber
            fileobj.write('%-2s %22.15f %22.15f %22.15f\n' % (s, x, y, z))