def convert_frames(self, event=None):
try:
start = int(self.first_frame.text())
end = int(self.last_frame.text())
num_proc = int(self.num_proc.text())
except ValueError:
sys.stderr.write('Integers only for frame range and number of processors\n')
return
self.indices = np.arange(start, end, dtype='i4')
clist = self.parent.classes.clist[start:end]
if self.class_chars.text() != '':
sel = np.array([clist==c for c in self.class_chars.text()]).any(axis=0)
self.indices = self.indices[sel]
if len(self.indices) == 0:
sys.stderr.write('No frames of class %s in frame range\n'%self.class_chars.text())
return
else:
sys.stderr.write('Converting %d frames with %d processors\n' % (len(self.indices), num_proc))
arr = self.get_and_convert(0)
converted = multiprocessing.Array(ctypes.c_double, arr.size*len(self.indices))
jobs = []
for i in range(num_proc):
p = multiprocessing.Process(target=self.convert_worker, args=(i, num_proc, self.indices, arr.size, converted))
jobs.append(p)
p.start()
for j in jobs:
j.join()
sys.stderr.write('\r%d/%d\n' % (len(self.indices), len(self.indices)))
self.parent.converted = np.frombuffer(converted.get_obj()).reshape(len(self.indices), -1)
if self.save_flag.isChecked():
sys.stderr.write('Saving angular correlations to %s\n'%self.save_fname.text())
np.save(self.save_fname.text(), self.parent.converted)
评论列表
文章目录