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