from startup import * from ijutils import * from ch.psi.pshell.imaging.Overlays import * import ch.psi.pshell.imaging.Pen as Pen import java.awt.Color as Color import random class BpmStats(DeviceBase): def __init__(self, name, prefix, read_interval = 0.1): DeviceBase.__init__(self, name) self.read_interval = read_interval self.prefix = prefix self.bpm_x = Channel(prefix + ":X1", type = 'd', alias = name + " x") self.bpm_y = Channel(prefix + ":Y1", type = 'd', alias = name + " y") self.com_x_samples, self.com_y_samples = [], [] class ComX(Readable): def read(self): if len(self.image_stats.com_x_samples)==0: return None return mean(self.image_stats.com_x_samples) self.com_x_mean = ComX(); self.com_x_mean.image_stats = self class ComY(Readable): def read(self): if len(self.image_stats.com_y_samples)==0: return None return mean(self.image_stats.com_y_samples) self.com_y_mean = ComY(); self.com_y_mean.image_stats = self class ComXVar(Readable): def read(self): if len(self.image_stats.com_x_samples)==0: return None return stdev(self.image_stats.com_x_samples) self.com_x_stdev = ComXVar(); self.com_x_stdev.image_stats = self class ComXVar(Readable): def read(self): if len(self.image_stats.com_y_samples)==0: return None return stdev(self.image_stats.com_y_samples) self.com_y_stdev = ComXVar(); self.com_y_stdev.image_stats = self set_device_alias(self.com_x_mean, name + " x mean") set_device_alias(self.com_y_mean, name + " y mean") set_device_alias(self.com_x_stdev, name + " x stdev") set_device_alias(self.com_y_stdev, name + " y stdev") self.num_images = 1 self.initialize() def doUpdate(self): self.com_x_samples, self.com_y_samples = [], [] for i in range(self.num_images): time.sleep(self.read_interval) cx = self.bpm_x.read() cy = self.bpm_y.read() print "centroid ",[cx,cy] self.com_x_samples.append(cx) self.com_y_samples.append(cy) def setNumberOfImages(self, value): self.num_images = value def enableBackground(self, value): pass def captureBackground(self, images): pass def doClose(self): pass def start(self): pass def stop(self): pass """ if __name__ == "__builtin__": add_device(BpmStats("bpm_com", "SINEG01-DBPM340"), True) bpm_com.setNumberOfImages(5) for i in range (10): bpm_com.update() print bpm_com.take(), bpm_com.com_x_mean.read(), bpm_com.com_y_mean.read() time.sleep(1) """