class AveragerSensor(Readable): def __init__(self, averager, index): self.averager =averager self.index =index def read(self): return self.averager.getSample[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) def getSize(self): return len(self.devices) def doRead(self): start = time.time() measures = [] while True: for i in range (self.getSize()): self.samples[i].append(self.devices[i].read()) if integration_time is None or (time.time() - start) >= integration_time: break sleep(0.1) ret = [] for i in range (self.getSize()): ret.append(getSample[i]) def getSample(self, index): return mean(self.samples[index]) def getSensor(self, index): return AveragerSensor(self, index) def getDevices(): ret = [] for i in range (self.getSize()): ret.apppend(AveragerSensor(this,i)) return ret averager = Averager() tscan ([averager,] + averager.devices, 10, 3.0)