#Not using a simple Readable because cannot change name (Jython bug with default methods) class AccumulatorSensor(ReadonlyRegisterBase): def __init__(self, averager, index): ReadonlyRegisterBase.__init__(self, averager.devices[index].name) self.averager = averager self.index =index self.initialize() def doRead(self): if self.index == 0: self.averager.doRead() return self.averager.values[self.index] class Accumulator(ReadonlyRegisterBase, ReadonlyRegisterArray): def __init__(self, devices, integration_time=None): ReadonlyRegisterBase.__init__(self, "Accumulator") self.devices = devices self.integration_time = integration_time self.initialize() self.samples = [[],] * len(devices) self.values = [] def getSize(self): return len(self.devices) def doRead(self): start = time.time() self.samples = [] for i in range(self.getSize()): self.samples.append([]) values = [] while True: for i in range (self.getSize()): v = self.devices[i].read() self.samples[i].append(v) if self.integration_time is None or (time.time() - start) >= self.integration_time: break sleep(0.1) self.values = [] for i in range (self.getSize()): self.values.append(mean(self.samples[i])) return self.values def getSensor(self, index): return AccumulatorSensor(self, index) def getSensors(self): ret = [] for i in range (self.getSize()): ret.append(AccumulatorSensor(self,i)) return ret #acc = Accumulator([signal_tey, signal_i0, signal_trans], integration_time = 0.5) #tscan (acc.getSensors(), 10, 3.0)