diff --git a/devices/image.properties b/devices/image.properties index eb33eaf..b430530 100644 --- a/devices/image.properties +++ b/devices/image.properties @@ -1,4 +1,4 @@ -#Fri Dec 16 17:37:36 CET 2022 +#Wed Dec 21 12:36:44 CET 2022 spatialCalOffsetY=NaN spatialCalOffsetX=NaN colormapLogarithmic=false diff --git a/script/devices/Array10.py b/script/devices/Array10.py index 1c694b3..4eea172 100644 --- a/script/devices/Array10.py +++ b/script/devices/Array10.py @@ -1,5 +1,9 @@ import org.zeromq.ZMQ as ZMQ import org.zeromq.ZMQ.Socket as Socket +import java.nio.ByteBuffer as ByteBuffer +import ch.psi.bsread.converter.MatlabByteConverter as Converter +import ch.psi.bsread.message.ChannelConfig as ChannelConfig +import ch.psi.bsread.message.Type as Type import json @@ -44,6 +48,7 @@ class Array10(DeviceBase, Readable, Cacheable, Readable.ReadableType): self.array_dev=None self.matrix_dev=None self.message_count=0 + self.converter=Converter() if modulo_array is not None: self.array_dev = Array10Array(self.name + "_array" ) @@ -87,18 +92,28 @@ class Array10(DeviceBase, Readable, Cacheable, Readable.ReadableType): self.context = ZMQ.context(1) self.socket = self.context.socket(self.mode) self.socket.connect(self.address) - print "Running ", self.mode, self.address + if self.mode == ZMQ.SUB: + self.socket.subscribe("") + self.getLogger().info("Running " + str(self.mode) + " " + str(self.address)) first = True while self.running: header = self.socket.recv(ZMQ.NOBLOCK) - if (header is not None): - if first: - print "Received!" - first=False + if (header is not None): try: self.header=json.loads(''.join(chr(i) for i in header)) - self.data = self.socket.recv() - if self.data is not None: + self.shape = self.header.get("shape", None) + self.dtype = self.header.get("type", "int8") + data = self.socket.recv() + if data is not None: + if self.dtype != "int8": + bb = ByteBuffer.wrap(data) + self.bb=bb + self.dtype = self.dtype.capitalize() + if self.dtype[0]=="U": + self.dtype =self.dtype[:1] + self.dtype[1:].capitalize() + cfg=ChannelConfig("",Type.valueOf(self.dtype),[len(data)],1,0) + data=self.converter.getValue(None,None,cfg,bb,None) + self.data=data self.setCache({"header":self.header, "data":self.data}, None) self.message_count=self.message_count+1 if self.array_dev is not None: @@ -106,9 +121,8 @@ class Array10(DeviceBase, Readable, Cacheable, Readable.ReadableType): self.array_dev.set(self.data) if self.matrix_dev is not None: if self.message_count % self.matrix_dev.modulo == 0: - shape = self.header.get("shape", None) - if shape: shape=(shape[1],shape[0]) #TODO: FIXME - self.matrix_dev.set(self.data, shape) + #if self.shape: self.shape=(self.shape[1],self.shape[0]) #TODO: FIXME + self.matrix_dev.set(self.data, self.shape) continue except Exception as e: print e diff --git a/script/local.py b/script/local.py index e3da0cd..85fbcae 100644 --- a/script/local.py +++ b/script/local.py @@ -16,7 +16,6 @@ DETECTOR_IMAGE_MODULO = 1 run("devices/Array10") add_device(Array10("eiger", DETECTOR_ADDRESS, modulo_array=1, modulo_matrix=DETECTOR_IMAGE_MODULO, mode=ZMQ.SUB), True) -add_device(eiger.array_dev, True) add_device(eiger.matrix_dev, True) add_device(RegisterMatrixSource("image", eiger.matrix_dev), True)