From f471e0925d6c40ae4f40ee2fd082b75f8b5743aa Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Wed, 19 Apr 2023 09:30:14 +0200 Subject: [PATCH] CBOR: Add summation to start message --- common/DiffractionExperiment.cpp | 1 + frame_serialize/JFJochFrameDeserializer.cpp | 2 ++ frame_serialize/JFJochFrameSerializer.cpp | 3 ++- frame_serialize/StartMessage.h | 1 + tests/CBORTest.cpp | 4 +++- writer/HDF5NXmx.cpp | 2 +- 6 files changed, 10 insertions(+), 3 deletions(-) diff --git a/common/DiffractionExperiment.cpp b/common/DiffractionExperiment.cpp index b1b241ce..6996be0b 100644 --- a/common/DiffractionExperiment.cpp +++ b/common/DiffractionExperiment.cpp @@ -1086,6 +1086,7 @@ void DiffractionExperiment::FillMessage(StartMessage &message) const { message.instrument_name = GetInstrumentName(); message.instrument_name_short = GetInstrumentNameShort(); + message.summation = GetSummation(); } DiffractionExperiment &DiffractionExperiment::ApplyPixelMaskInFPGA(bool input) { diff --git a/frame_serialize/JFJochFrameDeserializer.cpp b/frame_serialize/JFJochFrameDeserializer.cpp index 65b2093a..341f4ef0 100644 --- a/frame_serialize/JFJochFrameDeserializer.cpp +++ b/frame_serialize/JFJochFrameDeserializer.cpp @@ -455,6 +455,8 @@ void JFJochFrameDeserializer::ProcessStartMessageUserDataElement(CborValue &valu start_message.min_value = GetCBORInt(map_value); else if (key == "rad_int_bin_number") start_message.rad_int_bin_number = GetCBORInt(map_value); + else if (key == "summation") + start_message.summation = GetCBORUInt(map_value); else if (key == "storage_cell_number") start_message.storage_cell_number = GetCBORUInt(map_value); else if (key == "compression_algorithm") { diff --git a/frame_serialize/JFJochFrameSerializer.cpp b/frame_serialize/JFJochFrameSerializer.cpp index 5be3f65c..0754b38d 100644 --- a/frame_serialize/JFJochFrameSerializer.cpp +++ b/frame_serialize/JFJochFrameSerializer.cpp @@ -245,7 +245,7 @@ inline void CBOR_ENC_USER_DATA(CborEncoder &encoder, const StartMessage& message CborEncoder mapEncoder; cborErr(cbor_encode_text_stringz(&encoder, "user_data")); - cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 17)); + cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, 18)); CBOR_ENC(mapEncoder, "file_prefix", message.file_prefix); CBOR_ENC(mapEncoder, "sample_name", message.sample_name); @@ -277,6 +277,7 @@ inline void CBOR_ENC_USER_DATA(CborEncoder &encoder, const StartMessage& message CBOR_ENC(mapEncoder, "instrument_name", message.instrument_name); CBOR_ENC(mapEncoder, "instrument_name_short", message.instrument_name_short); CBOR_ENC(mapEncoder, "rad_int_bin_number", message.rad_int_bin_number); + CBOR_ENC(mapEncoder, "summation", message.summation); cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); } diff --git a/frame_serialize/StartMessage.h b/frame_serialize/StartMessage.h index f8129b08..a83dcb99 100644 --- a/frame_serialize/StartMessage.h +++ b/frame_serialize/StartMessage.h @@ -76,6 +76,7 @@ struct StartMessage { std::string instrument_name_short; uint64_t rad_int_bin_number; + uint64_t summation; }; #endif //JUNGFRAUJOCH_STARTMESSAGE_H diff --git a/tests/CBORTest.cpp b/tests/CBORTest.cpp index 4d16edc7..3b6f18f3 100644 --- a/tests/CBORTest.cpp +++ b/tests/CBORTest.cpp @@ -54,7 +54,8 @@ TEST_CASE("CBORSerialize_Start", "[CBOR]") { .source_name_short = "SLS", .instrument_name = "X06SA", .instrument_name_short = "PXIII", - .rad_int_bin_number = 35 + .rad_int_bin_number = 35, + .summation = 567 }; message.pixel_mask["sc0"] = std::vector(456*457, 15); @@ -108,6 +109,7 @@ TEST_CASE("CBORSerialize_Start", "[CBOR]") { CHECK(output_message.instrument_name == message.instrument_name); CHECK(output_message.instrument_name_short == message.instrument_name_short); CHECK(output_message.rad_int_bin_number == message.rad_int_bin_number); + CHECK(output_message.summation == message.summation); for (int i = 0; i < 3; i++) CHECK(output_message.detector_translation[i] == message.detector_translation[i]); diff --git a/writer/HDF5NXmx.cpp b/writer/HDF5NXmx.cpp index 8eef6f21..c7ad4a9d 100644 --- a/writer/HDF5NXmx.cpp +++ b/writer/HDF5NXmx.cpp @@ -74,7 +74,7 @@ void HDF5Metadata::Detector(HDF5File *hdf5_file, const StartMessage &start, cons SaveScalar(group, "pixel_mask_applied", false); SaveScalar(group, "acquisition_type", "triggered"); SaveScalar(group, "countrate_correction_applied", false); - + SaveScalar(group, "number_of_cycles", start.summation); // HDF5Group(group, "geometry").NXClass("NXgeometry"); // DIALS likes to have this soft link