version 1.0.0-rc.26
This commit is contained in:
@@ -44,7 +44,7 @@ inline void CBOR_ENC(CborEncoder &encoder, const char* key, int64_t value) {
|
||||
}
|
||||
|
||||
template <class T>
|
||||
inline void CBOR_ENC(CborEncoder &encoder, const char* key, const std::optional<T> &value) {
|
||||
void CBOR_ENC(CborEncoder &encoder, const char* key, const std::optional<T> &value) {
|
||||
if (value)
|
||||
CBOR_ENC(encoder, key, value.value());
|
||||
}
|
||||
@@ -267,7 +267,7 @@ inline void CBOR_ENC(CborEncoder &encoder, const char* key, const std::map<std::
|
||||
}
|
||||
|
||||
|
||||
inline void CBOR_ENC_UNIT_CELL(CborEncoder &encoder, const char* key, const UnitCell &val) {
|
||||
inline void CBOR_ENC(CborEncoder &encoder, const char* key, const UnitCell &val) {
|
||||
CborEncoder mapEncoder;
|
||||
|
||||
cborErr(cbor_encode_text_stringz(&encoder, key));
|
||||
@@ -348,6 +348,7 @@ void CBORStream2Serializer::SerializeSequenceStart(const StartMessage& message)
|
||||
CBOR_ENC(mapEncoder, "magic_number", user_data_magic_number);
|
||||
|
||||
CBOR_ENC(mapEncoder, "detector_distance", message.detector_distance);
|
||||
CBOR_ENC_AXIS(mapEncoder, "detector_translation", message.detector_translation);
|
||||
CBOR_ENC(mapEncoder, "beam_center_x", message.beam_center_x);
|
||||
CBOR_ENC(mapEncoder, "beam_center_y", message.beam_center_y);
|
||||
CBOR_ENC(mapEncoder, "countrate_correction_enabled", message.countrate_correction_enabled);
|
||||
@@ -375,7 +376,6 @@ void CBORStream2Serializer::SerializeSequenceStart(const StartMessage& message)
|
||||
CBOR_ENC(mapEncoder, "series_unique_id", message.run_name);
|
||||
CBOR_ENC(mapEncoder, "series_id", message.run_number);
|
||||
|
||||
CBOR_ENC_AXIS(mapEncoder, "detector_translation", message.detector_translation);
|
||||
CBOR_ENC_GONIOMETER_MAP(mapEncoder, "goniometer", message);
|
||||
|
||||
CBOR_ENC(mapEncoder, "jungfrau_conversion_enabled", message.jungfrau_conversion_enabled);
|
||||
@@ -401,9 +401,7 @@ void CBORStream2Serializer::SerializeSequenceStart(const StartMessage& message)
|
||||
break;
|
||||
}
|
||||
|
||||
if (message.unit_cell)
|
||||
CBOR_ENC_UNIT_CELL(mapEncoder, "unit_cell", message.unit_cell.value());
|
||||
|
||||
CBOR_ENC(mapEncoder, "unit_cell", message.unit_cell);
|
||||
CBOR_ENC(mapEncoder, "az_int_bin_number", message.az_int_bin_number);
|
||||
CBOR_ENC(mapEncoder, "az_int_bin_to_q", message.az_int_bin_to_q);
|
||||
CBOR_ENC(mapEncoder, "summation", message.summation);
|
||||
@@ -434,22 +432,15 @@ void CBORStream2Serializer::SerializeSequenceEnd(const EndMessage& message) {
|
||||
CBOR_ENC_ADU_HIST(mapEncoder, "adu_histogram", message.adu_histogram);
|
||||
CBOR_ENC(mapEncoder, "adu_histogram_bin_width", message.adu_histogram_bin_width);
|
||||
CBOR_ENC(mapEncoder, "max_receiver_delay", message.max_receiver_delay);
|
||||
CBOR_ENC(mapEncoder, "indexing_rate", message.indexing_rate);
|
||||
CBOR_ENC(mapEncoder, "bkg_estimate", message.bkg_estimate);
|
||||
|
||||
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
|
||||
|
||||
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer);
|
||||
}
|
||||
|
||||
void CBORStream2Serializer::SerializeImage(const DataMessage& message) {
|
||||
CborEncoder encoder, mapEncoder;
|
||||
cbor_encoder_init(&encoder, buffer, max_buffer_size, 0);
|
||||
|
||||
cborErr(cbor_encode_tag(&encoder, CborSignatureTag ));
|
||||
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength));
|
||||
|
||||
CBOR_ENC(mapEncoder, "type", "image");
|
||||
CBOR_ENC(mapEncoder, "magic_number", user_data_magic_number);
|
||||
CBOR_ENC(mapEncoder, "series_unique_id", message.run_name);
|
||||
CBOR_ENC(mapEncoder, "series_id", message.run_number);
|
||||
void CBORStream2Serializer::SerializeImageInternal(CborEncoder &mapEncoder, const DataMessage &message, bool metadata_only) {
|
||||
CBOR_ENC(mapEncoder, "image_id", message.number);
|
||||
|
||||
CBOR_ENC(mapEncoder, "original_image_id", message.original_number);
|
||||
@@ -458,13 +449,16 @@ void CBORStream2Serializer::SerializeImage(const DataMessage& message) {
|
||||
CBOR_ENC_RATIONAL(mapEncoder, "start_time", message.timestamp, message.timestamp_base);
|
||||
CBOR_ENC_RATIONAL(mapEncoder, "end_time", message.timestamp + message.exptime, message.timestamp_base);
|
||||
|
||||
CBOR_ENC(mapEncoder, "spots", message.spots);
|
||||
if (!metadata_only)
|
||||
CBOR_ENC(mapEncoder, "spots", message.spots);
|
||||
CBOR_ENC(mapEncoder, "spot_count", message.spots.size());
|
||||
CBOR_ENC(mapEncoder, "spot_count_in_rings", message.spot_count_in_rings);
|
||||
|
||||
CBOR_ENC(mapEncoder, "az_int_profile", message.az_int_profile);
|
||||
CBOR_ENC(mapEncoder, "indexing_result", message.indexing_result);
|
||||
if (!message.indexing_lattice.empty())
|
||||
CBOR_ENC(mapEncoder, "indexing_lattice", message.indexing_lattice);
|
||||
CBOR_ENC(mapEncoder, "indexing_unit_cell", message.indexing_unit_cell);
|
||||
CBOR_ENC(mapEncoder, "xfel_pulse_id", message.xfel_pulse_id);
|
||||
CBOR_ENC(mapEncoder, "xfel_event_code", message.xfel_event_code);
|
||||
CBOR_ENC(mapEncoder, "jf_info", message.jf_info);
|
||||
@@ -479,12 +473,59 @@ void CBORStream2Serializer::SerializeImage(const DataMessage& message) {
|
||||
CBOR_ENC(mapEncoder, "adu_histogram", message.adu_histogram);
|
||||
CBOR_ENC(mapEncoder, "roi_integrals", message.roi);
|
||||
CBOR_ENC(mapEncoder, "user_data", message.user_data.dump());
|
||||
CBOR_ENC(mapEncoder, "data", message.image);
|
||||
if (!metadata_only)
|
||||
CBOR_ENC(mapEncoder, "data", message.image);
|
||||
|
||||
}
|
||||
|
||||
void CBORStream2Serializer::SerializeImage(const DataMessage& message) {
|
||||
CborEncoder encoder, mapEncoder;
|
||||
cbor_encoder_init(&encoder, buffer, max_buffer_size, 0);
|
||||
|
||||
cborErr(cbor_encode_tag(&encoder, CborSignatureTag ));
|
||||
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength));
|
||||
|
||||
CBOR_ENC(mapEncoder, "type", "image");
|
||||
CBOR_ENC(mapEncoder, "magic_number", user_data_magic_number);
|
||||
CBOR_ENC(mapEncoder, "series_unique_id", message.run_name);
|
||||
CBOR_ENC(mapEncoder, "series_id", message.run_number);
|
||||
|
||||
SerializeImageInternal(mapEncoder, message, false);
|
||||
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
|
||||
|
||||
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer);
|
||||
}
|
||||
|
||||
void CBORStream2Serializer::SerializeMetadata(const MetadataMessage &messages) {
|
||||
if (messages.images.empty())
|
||||
throw JFJochException(JFJochExceptionCategory::CBORError,
|
||||
"Cannot serialize empty metadata packet");
|
||||
CborEncoder encoder, mapEncoder, arrayEncoder;
|
||||
cbor_encoder_init(&encoder, buffer, max_buffer_size, 0);
|
||||
|
||||
cborErr(cbor_encode_tag(&encoder, CborSignatureTag ));
|
||||
cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength));
|
||||
CBOR_ENC(mapEncoder, "type", "metadata");
|
||||
CBOR_ENC(mapEncoder, "magic_number", user_data_magic_number);
|
||||
CBOR_ENC(mapEncoder, "series_unique_id", messages.run_name);
|
||||
CBOR_ENC(mapEncoder, "series_id", messages.run_number);
|
||||
cborErr(cbor_encode_text_stringz(&mapEncoder, "images"));
|
||||
cborErr(cbor_encoder_create_array(&mapEncoder, &arrayEncoder, messages.images.size()));
|
||||
|
||||
for (const auto &image: messages.images) {
|
||||
CborEncoder localEncoder;
|
||||
|
||||
cborErr(cbor_encoder_create_map(&arrayEncoder, &localEncoder, CborIndefiniteLength));
|
||||
|
||||
SerializeImageInternal(localEncoder, image, true);
|
||||
cborErr(cbor_encoder_close_container(&arrayEncoder, &localEncoder));
|
||||
}
|
||||
|
||||
cborErr(cbor_encoder_close_container(&mapEncoder, &arrayEncoder));
|
||||
cborErr(cbor_encoder_close_container(&encoder, &mapEncoder));
|
||||
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer);
|
||||
}
|
||||
|
||||
void CBORStream2Serializer::SerializeCalibration(const CompressedImage &image) {
|
||||
CborEncoder encoder, mapEncoder;
|
||||
cbor_encoder_init(&encoder, buffer, max_buffer_size, 0);
|
||||
@@ -499,7 +540,7 @@ void CBORStream2Serializer::SerializeCalibration(const CompressedImage &image) {
|
||||
curr_size = cbor_encoder_get_buffer_size(&encoder, buffer);
|
||||
}
|
||||
|
||||
size_t CBORStream2Serializer::GetImageAppendOffset() {
|
||||
size_t CBORStream2Serializer::GetImageAppendOffset() const {
|
||||
return curr_size + sizeof(size_t) - 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user