Improve plotting
This commit is contained in:
@@ -1,13 +1,29 @@
|
||||
// Copyright (2019-2023) Paul Scherrer Institute
|
||||
|
||||
#include "ImageMetadata.h"
|
||||
#include <cmath>
|
||||
|
||||
inline uint64_t convert_pulse_id(double pulse_id) {
|
||||
if (!std::isfinite(pulse_id))
|
||||
return UINT64_MAX;
|
||||
double integer_part;
|
||||
double fractional_part = std::modf(pulse_id, &integer_part);
|
||||
if (fractional_part != 0.0)
|
||||
return UINT64_MAX;
|
||||
return static_cast<uint64_t>(integer_part);
|
||||
}
|
||||
|
||||
ImageMetadata::ImageMetadata(const DiffractionExperiment &experiment)
|
||||
: pulsed_source(experiment.IsPulsedSource()) {}
|
||||
: pulsed_source(experiment.IsPulsedSource()) {
|
||||
roi_map_name = experiment.ROI().GetROINameMap();
|
||||
for (const auto &[x,y]: roi_map_name)
|
||||
rois[x] = ROIMessage{.max_count = INT64_MIN};
|
||||
}
|
||||
|
||||
void ImageMetadata::Process(const DeviceOutput *output) {
|
||||
uint64_t module_pulse_id = convert_pulse_id(output->module_statistics.pulse_id);
|
||||
if (!first_module_loaded) {
|
||||
xfel_pulse_id = output->module_statistics.pulse_id;
|
||||
xfel_pulse_id = module_pulse_id;
|
||||
jf_info = output->module_statistics.debug;
|
||||
storage_cell = (jf_info >> 8) & 0xF;
|
||||
xfel_event_code = (jf_info >> 16) & UINT8_MAX;
|
||||
@@ -15,13 +31,23 @@ void ImageMetadata::Process(const DeviceOutput *output) {
|
||||
exptime = output->module_statistics.exptime;
|
||||
first_module_loaded = true;
|
||||
} else {
|
||||
if (pulsed_source && (output->module_statistics.pulse_id != xfel_pulse_id))
|
||||
if (pulsed_source && (module_pulse_id != xfel_pulse_id)) {
|
||||
metadata_consistent = false;
|
||||
xfel_pulse_id = UINT64_MAX; // mark clearly inconsistent frames
|
||||
}
|
||||
}
|
||||
saturated_pixels += output->module_statistics.saturated_pixels;
|
||||
error_pixels += output->module_statistics.err_pixels;
|
||||
strong_pixels += output->spot_finding_result.strong_pixel_count;
|
||||
packets_collected += output->module_statistics.packet_count;
|
||||
|
||||
for (const auto &[key, val]: roi_map_name) {
|
||||
rois[key].sum += output->roi_counts[val].sum;
|
||||
rois[key].sum_square += output->roi_counts[val].sum2;
|
||||
rois[key].pixels += output->roi_counts[val].good_pixels;
|
||||
if (output->roi_counts[val].max_value > rois[key].max_count)
|
||||
rois[key].max_count = output->roi_counts[val].max_value;
|
||||
}
|
||||
}
|
||||
|
||||
bool ImageMetadata::IsBunchIDConsistent() const {
|
||||
@@ -30,7 +56,7 @@ bool ImageMetadata::IsBunchIDConsistent() const {
|
||||
|
||||
void ImageMetadata::Export(DataMessage &message, uint64_t packets_expected_per_image) const {
|
||||
if (pulsed_source) {
|
||||
message.xfel_pulse_id = static_cast<uint64_t>(xfel_pulse_id);
|
||||
message.xfel_pulse_id = xfel_pulse_id;
|
||||
message.xfel_event_code = xfel_event_code;
|
||||
}
|
||||
message.jf_info = jf_info;
|
||||
@@ -47,4 +73,6 @@ void ImageMetadata::Export(DataMessage &message, uint64_t packets_expected_per_i
|
||||
/ static_cast<double>(packets_expected_per_image);
|
||||
else
|
||||
message.image_collection_efficiency = 0.0f;
|
||||
|
||||
message.roi = rois;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user