# Uses DECTRIS Stream2 example import zmq import numpy as np import sys sys.path.insert(0, "/opt/dectris/albula/4.1/bin") sys.path.insert(0, "/opt/dectris/albula/4.1/python") import dectris.albula as albula from dectris.albula import DNoObject, DDrawingEllipse, DDrawingString, DDrawingLine import signal import cbor2 import time from dectris.compression import decompress from tifffile import imwrite TERMINATE = False def decode_multi_dim_array(tag, column_major): dimensions, contents = tag.value if isinstance(contents, list): array = np.empty((len(contents),), dtype=object) array[:] = contents elif isinstance(contents, (np.ndarray, np.generic)): array = contents else: raise cbor2.CBORDecodeValueError("expected array or typed array") return array.reshape(dimensions, order="F" if column_major else "C") def decode_typed_array(tag, dtype): if not isinstance(tag.value, bytes): raise cbor2.CBORDecodeValueError("expected byte string in typed array") return np.frombuffer(tag.value, dtype=dtype) def decode_dectris_compression(tag): algorithm, elem_size, encoded = tag.value return decompress(encoded, algorithm, elem_size=elem_size) tag_decoders = { 40: lambda tag: decode_multi_dim_array(tag, column_major=False), 64: lambda tag: decode_typed_array(tag, dtype="u1"), 65: lambda tag: decode_typed_array(tag, dtype=">u2"), 66: lambda tag: decode_typed_array(tag, dtype=">u4"), 67: lambda tag: decode_typed_array(tag, dtype=">u8"), 68: lambda tag: decode_typed_array(tag, dtype="u1"), 69: lambda tag: decode_typed_array(tag, dtype="= 60 * 60: albulaSubFrame.close() albulaSubFrame = albulaMain.openSubFrame() startTime = time.time() print("b") msg = cbor2.loads(msg, tag_hook=tag_hook) print(msg) #OPTIONAL_DATA.set_wavelength(12398/msg["incident_energy"]) #OPTIONAL_DATA.set_beam_center_x(msg['beam_center_x']) #OPTIONAL_DATA.set_beam_center_y(msg['beam_center_y']) #OPTIONAL_DATA.set_detector_distance(msg["detector_distance"]) dimage = albula.DImage(msg['data']['default']) dimage.setOptionalData(OPTIONAL_DATA) albulaSubFrame.loadImage(dimage) #albulaSubFrame.setTitle("JUNGFRAU PREVIEW Dataset: %s Image: %d" % (msg["unique_series_id"], msg['number'])) except: pass