Files
Jungfraujoch/common/ScanResultGenerator.cpp
2025-06-22 13:15:10 +02:00

48 lines
1.8 KiB
C++

// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
// SPDX-License-Identifier: GPL-3.0-only
#include "ScanResultGenerator.h"
ScanResultGenerator::ScanResultGenerator(const DiffractionExperiment &experiment) {
grid_scan = experiment.GetGridScan();
if (grid_scan)
v.resize(grid_scan->GetNElem());
else
v.resize(experiment.GetImageNum());
file_prefix = experiment.GetFilePrefix();
}
void ScanResultGenerator::Add(const DataMessage &message) {
std::unique_lock ul(m);
int64_t image_number = message.number;
if (grid_scan)
image_number = grid_scan->Rearrange(image_number);
if (image_number < v.size()) {
v[image_number].number = message.number;
v[image_number].pixel_sum = message.pixel_sum;
v[image_number].collection_efficiency = message.image_collection_efficiency.value_or(1.0);
v[image_number].bkg = message.bkg_estimate;
v[image_number].spot_count = message.spots.size();
v[image_number].indexing_solution = message.indexing_result;
v[image_number].mosaicity = message.mosaicity;
v[image_number].b_factor = message.b_factor;
v[image_number].uc = message.indexing_unit_cell;
v[image_number].xfel_pulse_id = message.xfel_pulse_id;
v[image_number].err_pixels = message.error_pixel_count;
v[image_number].max_viable_pixel = message.max_viable_pixel_value;
v[image_number].sat_pixels = message.saturated_pixel_count;
v[image_number].spot_count_low_res = message.spot_count_low_res;
v[image_number].res = message.resolution_estimate;
}
}
ScanResult ScanResultGenerator::GetResult() const {
std::unique_lock ul(m);
ScanResult ret;
ret.file_prefix = file_prefix;
ret.images = v;
return ret;
}