v1.0.0-rc.34

This commit is contained in:
2025-04-14 11:52:06 +02:00
parent 708b5fbc4b
commit b0607ab3ca
238 changed files with 4590 additions and 1329 deletions

View File

@@ -15,7 +15,7 @@ inline uint64_t convert_pulse_id(double pulse_id) {
}
ImageMetadata::ImageMetadata(const DiffractionExperiment &experiment)
: pulsed_source(experiment.IsPulsedSource()) {
: pulsed_source(experiment.IsPulsedSource()), geom(experiment.GetDetectorSetup().GetGeometry()) {
roi_map_name = experiment.ROI().GetROINameMap();
for (const auto &[x,y]: roi_map_name)
rois[x] = ROIMessage{.max_count = INT64_MIN};
@@ -24,6 +24,8 @@ ImageMetadata::ImageMetadata(const DiffractionExperiment &experiment)
void ImageMetadata::Process(const DeviceOutput *output) {
std::unique_lock ul(m);
auto moduleNum = output->module_statistics.module_number;
uint64_t module_pulse_id = convert_pulse_id(output->module_statistics.pulse_id);
if (!first_module_loaded) {
xfel_pulse_id = module_pulse_id;
@@ -46,17 +48,36 @@ void ImageMetadata::Process(const DeviceOutput *output) {
error_pixels += output->module_statistics.err_pixels;
strong_pixels += output->spot_finding_result.strong_pixel_count;
packets_collected += output->module_statistics.packet_count;
image_sum += output->module_statistics.pixel_sum;
if (output->module_statistics.max_value > max_value)
max_value = output->module_statistics.max_value;
if (output->module_statistics.load_calibration_destination < min_value)
min_value = output->module_statistics.load_calibration_destination;
if (output->module_statistics.min_value < min_value)
min_value = output->module_statistics.min_value;
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;
int64_t x_weighted = output->roi_counts[val].sum_x_weighted
* static_cast<int64_t>(geom.GetFastDirection(moduleNum).x)
+ output->roi_counts[val].sum_y_weighted
* static_cast<int64_t>(geom.GetSlowDirection(moduleNum).x)
+ geom.GetX0(moduleNum)
* output->roi_counts[val].sum;
int64_t y_weighted = output->roi_counts[val].sum_x_weighted
* static_cast<int64_t>(geom.GetFastDirection(moduleNum).y)
+ output->roi_counts[val].sum_y_weighted
* static_cast<int64_t>(geom.GetSlowDirection(moduleNum).y)
+ geom.GetY0(moduleNum)
* output->roi_counts[val].sum;
rois[key].x_weighted += x_weighted;
rois[key].y_weighted += y_weighted;
if (output->roi_counts[val].max_value > rois[key].max_count)
rois[key].max_count = output->roi_counts[val].max_value;
}