86 lines
2.3 KiB
Python
Executable File
86 lines
2.3 KiB
Python
Executable File
###################################################################################################
|
|
# Calibrating array and matrix pseudo-devices
|
|
###################################################################################################
|
|
|
|
|
|
|
|
class Waveform(ReadonlyRegisterBase, ReadonlyRegisterArray):
|
|
def doRead(self):
|
|
time.sleep(0.001)
|
|
self.val = to_array(self.calc(), 'd')
|
|
return self.val
|
|
|
|
def getSize(self):
|
|
return len(self.take(-1)) #only reads if cache is None
|
|
|
|
class Image(ReadonlyRegisterBase, ReadonlyRegisterMatrix):
|
|
def doRead(self):
|
|
time.sleep(0.001)
|
|
self.val = to_array(self.calc(), 'd')
|
|
return self.val
|
|
|
|
def getWidth(self):
|
|
return len(self.take(-1)[0])
|
|
|
|
def getHeight(self):
|
|
return len(self.take(-1))
|
|
|
|
|
|
|
|
class SinusoidWaveform(Waveform):
|
|
def calc(self):
|
|
ret = []
|
|
x = random.random()
|
|
for i in range (20):
|
|
ret.append(math.sin(x))
|
|
x = x + 0.1
|
|
return ret
|
|
|
|
class SinusoidImage(Image):
|
|
def calc(self):
|
|
(width, height) = (200, 100)
|
|
ret = []
|
|
x = random.random();
|
|
base = []
|
|
for i in range (width):
|
|
base.append( math.sin(x))
|
|
x = x + 0.05
|
|
for i in range (height):
|
|
noise = (random.random() - 0.5)/5.0
|
|
ret.append([x+noise for x in base])
|
|
return ret
|
|
|
|
add_device(SinusoidWaveform("wf1"), True)
|
|
add_device(SinusoidImage("im1"), True)
|
|
|
|
|
|
class ArrayCalibrated(ReadonlyRegisterBase, ReadonlyRegisterArray, ReadableCalibratedArray):
|
|
def doRead(self):
|
|
return wf1.read()
|
|
|
|
def getSize(self):
|
|
return wf1.size
|
|
|
|
def getCalibration(self):
|
|
return ArrayCalibration(5,1000)
|
|
|
|
|
|
|
|
class MatrixCalibrated(ReadonlyRegisterBase, ReadonlyRegisterMatrix, ReadableCalibratedMatrix):
|
|
def doRead(self):
|
|
return im1.read()
|
|
|
|
def getWidth(self):
|
|
return im1.width
|
|
|
|
def getHeight(self):
|
|
return im1.height
|
|
|
|
def getCalibration(self):
|
|
return MatrixCalibration(2,4,100,200)
|
|
|
|
add_device(ArrayCalibrated()
|
|
, True)
|
|
add_device( MatrixCalibrated()
|
|
, True)
|
|
ArrayCalibrated.polling=100
|
|
MatrixCalibrated.polling=250
|
|
|
|
|