class AveragerSensor(Readable): def __init__(self, averager, index): self.averager =averager self.index =index def read(self): return self.averager.values[self.index] class Averager(ReadonlyRegisterBase, ReadonlyRegisterArray): def __init__(self, devices = [signal_tey, signal_i0, signal_trans], integration_time=None): ReadonlyRegisterBase.__init__(self, "Averager") 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() measures = [] measures = [] while True: for i in range (self.getSize()): self.samples[i].append(self.devices[i].read()) 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 AveragerSensor(self, index) def getSensors(self): ret = [] for i in range (self.getSize()): ret.append(AveragerSensor(self,i)) return ret averager = Averager() tscan ([averager,] + averager.getSensors(), 10, 3.0)