From 18252bdc50aca0eb15ab8ffb2e361f02b3f356e4 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Tue, 17 Nov 2020 10:51:46 +0100 Subject: [PATCH] Bug fix in image assembly code --- sf_daq_broker/detector/ram_buffer.py | 2 +- tests/test_ram_buffer.py | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/sf_daq_broker/detector/ram_buffer.py b/sf_daq_broker/detector/ram_buffer.py index 8d8ba3d..728935c 100644 --- a/sf_daq_broker/detector/ram_buffer.py +++ b/sf_daq_broker/detector/ram_buffer.py @@ -42,7 +42,7 @@ class RamBuffer(object): # Pulse_id slot offset + data buffer offset data_offset_start = pulse_id_offset + META_FRAME_BYTES * self.n_modules - data_offset_end = data_offset_start + DATA_FRAME_BYTES + data_offset_end = data_offset_start + DATA_FRAME_BYTES * self.n_modules meta_buffer = memoryview(self.raw_buffer)[meta_offset_start:meta_offset_end] data_buffer = memoryview(self.raw_buffer)[data_offset_start:data_offset_end] diff --git a/tests/test_ram_buffer.py b/tests/test_ram_buffer.py index 8accd3b..55cfdad 100644 --- a/tests/test_ram_buffer.py +++ b/tests/test_ram_buffer.py @@ -1,5 +1,7 @@ import unittest +import numpy + from sf_daq_broker.detector.buffer_reader import FrameMetadata, META_FRAME_BYTES from sf_daq_broker.detector.image_assembler import JF_N_PACKETS_PER_FRAME from sf_daq_broker.detector.ram_buffer import RamBuffer @@ -29,9 +31,14 @@ class TestRamBuffer(unittest.TestCase): metadata.daq_rec = pulse_id + 10000 metadata.n_recv_packets = JF_N_PACKETS_PER_FRAME + data = numpy.frombuffer(image_buffer, dtype="uint16") + data += module_id + for pulse_id in pulse_ids: image_meta, image_buffer = ram_buffer.get_image_buffers(pulse_id) + image = numpy.frombuffer(image_buffer, dtype="uint16").reshape(1024 * n_modules, 512) + for module_id in range(n_modules): metadata = FrameMetadata.from_buffer(image_meta, module_id * META_FRAME_BYTES) self.assertEqual(pulse_id, metadata.pulse_id) @@ -40,3 +47,13 @@ class TestRamBuffer(unittest.TestCase): self.assertEqual(pulse_id+10000, metadata.daq_rec) self.assertEqual(JF_N_PACKETS_PER_FRAME, metadata.n_recv_packets) + start_offset = module_id * 1024 + end_offset = start_offset + 1024 + + frame_data = image[start_offset:end_offset, :] + # We test only first and last line. Improves speed and we can still test modules boundary. + first_line = frame_data[0, :] + last_line = frame_data[-1, :] + + self.assertTrue(all((x == module_id for x in first_line))) + self.assertTrue(all((x == module_id for x in last_line)))