root / ase / io / vnl.py @ 17
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) |