diff --git a/frame_serialize/ImageMessage.h b/frame_serialize/ImageMessage.h index c0f1a586..52ba1e4a 100644 --- a/frame_serialize/ImageMessage.h +++ b/frame_serialize/ImageMessage.h @@ -31,6 +31,7 @@ struct DataMessage { uint64_t bunch_id; uint32_t jf_info; uint64_t timestamp; + uint32_t storage_cell; std::string series_unique_id; uint64_t series_id; diff --git a/frame_serialize/JFJochFrameDeserializer.cpp b/frame_serialize/JFJochFrameDeserializer.cpp index a7c98f10..ec9c43a0 100644 --- a/frame_serialize/JFJochFrameDeserializer.cpp +++ b/frame_serialize/JFJochFrameDeserializer.cpp @@ -348,6 +348,8 @@ void JFJochFrameDeserializer::ProcessImageMessageUserDataElement(CborValue &valu data_message.indexing_result = GetCBORUInt(map_value); else if (key == "jf_info") data_message.jf_info = GetCBORUInt(map_value) & UINT32_MAX; + else if (key == "storage_cell") + data_message.storage_cell = GetCBORUInt(map_value) & UINT32_MAX; else if (key == "bunch_id") data_message.bunch_id = GetCBORUInt(map_value); else if (key == "timestamp") diff --git a/frame_serialize/JFJochFrameSerializer.cpp b/frame_serialize/JFJochFrameSerializer.cpp index 451645b7..490d2806 100644 --- a/frame_serialize/JFJochFrameSerializer.cpp +++ b/frame_serialize/JFJochFrameSerializer.cpp @@ -412,7 +412,7 @@ void JFJochFrameSerializer::SerializeImage(const DataMessage& message) { CBOR_ENC(mapEncoder, "image_id", message.number); cborErr(cbor_encode_text_stringz(&mapEncoder, "user_data")); - cborErr(cbor_encoder_create_map(&mapEncoder, &userDataMapEncoder, 6)); + cborErr(cbor_encoder_create_map(&mapEncoder, &userDataMapEncoder, 7)); CBOR_ENC(userDataMapEncoder, "spots", message.spots); CBOR_ENC(userDataMapEncoder, "rad_int_profile", message.rad_int_profile); @@ -420,6 +420,7 @@ void JFJochFrameSerializer::SerializeImage(const DataMessage& message) { CBOR_ENC(userDataMapEncoder, "bunch_id", message.bunch_id); CBOR_ENC(userDataMapEncoder, "jf_info", (uint64_t) message.jf_info); CBOR_ENC(userDataMapEncoder, "timestamp", message.timestamp); + CBOR_ENC(userDataMapEncoder, "storage_cell", (uint64_t) message.storage_cell); cborErr(cbor_encoder_close_container(&mapEncoder, &userDataMapEncoder)); CBOR_ENC(mapEncoder, "data", message.image); diff --git a/receiver/JFJochReceiver.cpp b/receiver/JFJochReceiver.cpp index 95fdca4e..291d9fde 100644 --- a/receiver/JFJochReceiver.cpp +++ b/receiver/JFJochReceiver.cpp @@ -285,6 +285,7 @@ int64_t JFJochReceiver::MiniSummationThread(int d, int m, size_t image_number, b // the information is for first module/frame that was collected in full message.bunch_id = acquisition_device[d]->GetBunchID(frame_number, m); message.jf_info = acquisition_device[d]->GetJFInfo(frame_number, m); + message.storage_cell = (message.jf_info >> 8) & 0xF; message.timestamp = acquisition_device[d]->GetTimestamp(frame_number, m); } send_image = true; diff --git a/tests/CBORTest.cpp b/tests/CBORTest.cpp index 2d99eef8..d3bac67e 100644 --- a/tests/CBORTest.cpp +++ b/tests/CBORTest.cpp @@ -218,6 +218,7 @@ JFJochFrameSerializer serializer(buffer.data(), buffer.size()); .bunch_id = UINT64_MAX, .jf_info = UINT32_MAX, .timestamp = 1ul<<27 | 1ul <<35, + .storage_cell = 0xF, .series_unique_id = "bla2", .series_id = 4567678 }; @@ -245,6 +246,7 @@ JFJochFrameSerializer serializer(buffer.data(), buffer.size()); REQUIRE(image_array.bunch_id == message.bunch_id); REQUIRE(image_array.jf_info == message.jf_info); REQUIRE(image_array.timestamp == message.timestamp); + REQUIRE(image_array.storage_cell == message.storage_cell); } TEST_CASE("CBORSerialize_Image_2", "[CBOR]") { diff --git a/writer/HDF5DataFile.cpp b/writer/HDF5DataFile.cpp index 4de628a0..85d8255a 100644 --- a/writer/HDF5DataFile.cpp +++ b/writer/HDF5DataFile.cpp @@ -45,6 +45,7 @@ HDF5DataFile::~HDF5DataFile() { group_exp.SaveVector("bunch_id", bunch_id); group_exp.SaveVector("info", jf_info); group_exp.SaveVector("timestamp", timestamp); + group_exp.SaveVector("storage_cell", storage_cell); } rad_int_group.reset(); result_group.reset(); @@ -72,6 +73,7 @@ void HDF5DataFile::CreateFile() { bunch_id.resize(1); jf_info.resize(1); timestamp.resize(1); + storage_cell.resize(1); } void HDF5DataFile::Write(const DataMessage &msg, uint64_t image_number) { @@ -90,6 +92,7 @@ void HDF5DataFile::Write(const DataMessage &msg, uint64_t image_number) { bunch_id.resize(max_image_number + 1); jf_info.resize(max_image_number + 1); timestamp.resize(max_image_number + 1); + storage_cell.resize(max_image_number + 1); } nimages++; @@ -109,6 +112,7 @@ void HDF5DataFile::Write(const DataMessage &msg, uint64_t image_number) { bunch_id[image_number] = msg.bunch_id; jf_info[image_number] = msg.jf_info; timestamp[image_number] = msg.timestamp; + storage_cell[image_number] = msg.storage_cell; if (!msg.rad_int_profile.empty() && (msg.rad_int_profile.size() == rad_int_bin_to_q.size())) rad_int_group->SaveVector("img" + std::to_string(image_number), msg.rad_int_profile); diff --git a/writer/HDF5DataFile.h b/writer/HDF5DataFile.h index 56392cf7..fc8747e4 100644 --- a/writer/HDF5DataFile.h +++ b/writer/HDF5DataFile.h @@ -39,6 +39,7 @@ class HDF5DataFile { std::vector bunch_id; std::vector jf_info; std::vector timestamp; + std::vector storage_cell; std::vector rad_int_bin_to_q; std::vector rad_int_file_avg;