Statistiques
| Révision :

root / ase / io / vnl.py @ 16

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

1 1 tkerber
import numpy as np
2 1 tkerber
3 1 tkerber
from ase.atoms import Atoms
4 1 tkerber
5 1 tkerber
6 1 tkerber
class VNL:
7 1 tkerber
    def __setstate__(self, data):
8 1 tkerber
        self.data = data
9 1 tkerber
10 1 tkerber
def ac(shape, typecode, data, endian):
11 1 tkerber
    x = np.fromstring(data, typecode)
12 1 tkerber
    try:
13 1 tkerber
        x.shape = shape
14 1 tkerber
    except ValueError:
15 1 tkerber
        x = x[::2].copy()
16 1 tkerber
        x.shape = shape
17 1 tkerber
18 1 tkerber
    if np.LittleEndian != endian:
19 1 tkerber
        return x.byteswap()
20 1 tkerber
    else:
21 1 tkerber
        return x
22 1 tkerber
23 1 tkerber
class VNLUnpickler(pickle.Unpickler):
24 1 tkerber
    def find_class(self, module, name):
25 1 tkerber
        if module == 'VNLATKStorage.Core.Sample':
26 1 tkerber
            return VNL
27 1 tkerber
        if name == 'array_constructor':
28 1 tkerber
            return ac
29 1 tkerber
        return pickle.Unpickler.find_class(self, module, name)
30 1 tkerber
31 1 tkerber
def read_vnl(filename):
32 1 tkerber
    from cStringIO import StringIO
33 1 tkerber
    vnl = VNLUnpickler(StringIO(ZipFile(filename).read('0_object'))).load()
34 1 tkerber
    conf = vnl.data['__properties__']['Atomic Configuration'].data
35 1 tkerber
    numbers = conf['_dataarray_']
36 1 tkerber
    positions = conf['_positions_'].data['_dataarray_']
37 1 tkerber
    return Atoms(numbers=numbers, positions=positions)