Enabled & functioning edrfile reader.

This commit is contained in:
Niels Müller
2016-09-27 15:45:12 +02:00
parent db06925a0d
commit 9cf16bc602
5 changed files with 69 additions and 20 deletions

View File

@ -40,6 +40,7 @@ cdef extern from "gromacs/fileio/enxio.h":
gmx_bool do_enx(ener_file_t ef, t_enxframe *fr)
void free_enxframe(t_enxframe *ef)
cdef class EDRFile:
@ -52,22 +53,45 @@ cdef class EDRFile:
@property
def types(self):
types = []
for i in range(self.n_etypes):
types.append(
)
def read(self):
cdef t_enxframe *frame
cdef np.ndarray[float, ndim=2] energies = np.empty((1,self.n_etypes), np.float32)
types.append((self.etypes[i].name.decode(), self.etypes[i].unit.decode()))
return types
def read(self, steps=None):
cdef:
t_enxframe *frame
np.ndarray[float, ndim=2] energies
np.ndarray[float, ndim=1] times
if steps is None:
energies = np.empty((1,self.n_etypes), np.float32)
times = np.empty((1,), np.float32)
else:
energies = np.empty((steps,self.n_etypes), np.float32)
times = np.empty((steps,), np.float32)
snew(frame, 1)
while do_enx(self.efile, frame):
energies = np.resize(energies, (len(energies)+1, self.n_etypes))
for i in range(frame.nre):
energies[-1, i] = frame.ener[i].e
return energies
i = 0
while True:
cont = do_enx(self.efile, frame)
for j in range(frame.nre):
energies[i, j] = frame.ener[j].e
times[i] = frame.t
if cont:
i += 1
if len(energies) <= i:
energies = np.resize(energies, (len(energies)+1, self.n_etypes))
times = np.resize(times, (len(times)+1,))
else:
break
free_enxframe(frame)
sfree(frame)
return times, energies
def __init__(self, filename):