Files
sf_daq_broker/tests/test_writer_format.py
T
2020-07-29 15:46:40 +02:00

97 lines
4.1 KiB
Python

import json
import unittest
import os
import h5py
from sf_databuffer_writer import config
from sf_databuffer_writer.writer import write_data_to_file
class TestWriter(unittest.TestCase):
TEST_OUTPUT_FILE = "ignore_output.h5"
def setUp(self):
self.data_folder = os.path.join(os.path.dirname(os.path.realpath(__file__)), "data/")
config.ERROR_IF_NO_DATA = False
def tearDown(self):
try:
os.remove(TestWriter.TEST_OUTPUT_FILE)
except:
pass
def test_write_data_to_file(self):
parameters = {"general/created": "test",
"general/user": "tester",
"general/process": "test_process",
"general/instrument": "mac",
"output_file": self.TEST_OUTPUT_FILE}
test_data_file = os.path.join(self.data_folder, "dispatching_layer_sample.json")
with open(test_data_file, 'r') as input_file:
json_data = json.load(input_file)
n_pulses = len(json_data[0]["data"])
write_data_to_file(parameters, json_data)
file = h5py.File(TestWriter.TEST_OUTPUT_FILE)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-MAX/pulse_id"]), n_pulses)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-MAX/global_date"]), n_pulses)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-MAX/is_data_present"]), n_pulses)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-MAX/data"]), n_pulses)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-MIN/pulse_id"]), n_pulses)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-MIN/global_date"]), n_pulses)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-MIN/is_data_present"]), n_pulses)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-MIN/data"]), n_pulses)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-CALIBRATED/pulse_id"]), n_pulses)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-CALIBRATED/global_date"]), n_pulses)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-CALIBRATED/is_data_present"]), n_pulses)
self.assertEqual(len(file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-CALIBRATED/data"]), n_pulses)
scalar_dataset = file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-MIN/data"]
self.assertEqual(scalar_dataset.shape, (n_pulses, 1))
self.assertEqual(str(scalar_dataset.dtype), "float32")
string_dataset = file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-MAX/global_date"]
self.assertEqual(string_dataset.shape, (n_pulses,))
self.assertTrue(isinstance(string_dataset[0], str))
array_dataset = file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-CALIBRATED/data"]
self.assertEqual(array_dataset.shape, (n_pulses, 1024))
self.assertEqual(str(array_dataset.dtype), "float32")
pulse_id_start = file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-CALIBRATED/pulse_id"][0]
pulse_id_stop = file["data/SAROP21-CVME-PBPS2:Lnk9Ch6-DATA-CALIBRATED/pulse_id"][-1]
# Pulse ids taken from the dispatching layer request above.
self.assertTrue(5721143344 <= pulse_id_start)
self.assertTrue(5721143416 >= pulse_id_stop)
def test_write_camera_data(self):
parameters = {"general/created": "test",
"general/user": "tester",
"general/process": "test_process",
"general/instrument": "mac",
"output_file": self.TEST_OUTPUT_FILE}
test_data_file = os.path.join(self.data_folder, "camera_image_sample.json")
with open(test_data_file, 'r') as input_file:
json_data = json.load(input_file)
n_pulses = len(json_data[0]["data"])
write_data_to_file(parameters, json_data)
file = h5py.File(TestWriter.TEST_OUTPUT_FILE)
self.assertEqual(len(file["data/SARES20-PROF142-M1:FPICTURE/data"]), n_pulses)
self.assertEqual(file["data/SARES20-PROF142-M1:FPICTURE/data"].shape, tuple([n_pulses] + [659, 494][::-1]))