diff --git a/script/Accumulator.py b/script/Accumulator.py new file mode 100644 index 0000000..addb7c3 --- /dev/null +++ b/script/Accumulator.py @@ -0,0 +1,51 @@ + +class AccumulatorSensor(Readable): + def __init__(self, averager, index): + self.averager =averager + self.index =index + + def read(self): + return self.averager.values[self.index] + +class Accumulator(ReadonlyRegisterBase, ReadonlyRegisterArray): + def __init__(self, devices, 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() + 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 AveragerSensor(self, index) + + def getSensors(self): + ret = [] + for i in range (self.getSize()): + ret.append(AveragerSensor(self,i)) + return ret + +#acc = Accumulator([signal_tey, signal_i0, signal_trans], integration_time = 0.5) +#tscan ([acc,] + acc.getSensors(), 10, 3.0) + \ No newline at end of file