// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #include "ScanResultGenerator.h" ScanResultGenerator::ScanResultGenerator(const DiffractionExperiment &experiment) { grid_scan = experiment.GetGridScan(); goniometer_axis = experiment.GetGoniometer(); 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()) { if (grid_scan) { v[image_number].x = grid_scan->GetElementPosX_step(message.number); v[image_number].y = grid_scan->GetElementPosY_step(message.number); } else if (goniometer_axis) { v[image_number].angle_deg = goniometer_axis->GetAngle_deg(message.number); } 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.spot_count; v[image_number].indexing_solution = message.indexing_result; v[image_number].profile_radius = message.profile_radius; 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_ice = message.spot_count_ice_rings; v[image_number].spot_count_low_res = message.spot_count_low_res; v[image_number].spot_count_indexed = message.spot_count_indexed; 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; }