version 1.0.0-rc.26

This commit is contained in:
2024-11-26 16:04:38 +01:00
parent 9ab5206c12
commit b3e745a8dd
203 changed files with 2969 additions and 1509 deletions

View File

@@ -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;
}