Enabled & functioning edrfile reader.
This commit is contained in:
@ -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):
|
||||
|
Reference in New Issue
Block a user