89 lines
2.9 KiB
C++
89 lines
2.9 KiB
C++
// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
#include <catch2/catch_all.hpp>
|
|
|
|
#include "../receiver/ImageMetadata.h"
|
|
|
|
TEST_CASE("ImageMetadata_ROI") {
|
|
DetectorGeometry geom(8,2,8,36, true);
|
|
DiffractionExperiment experiment(geom);
|
|
|
|
experiment.ROI().SetROI(ROIDefinition{.boxes = {ROIBox("roi1",1,5,2,8)}});
|
|
|
|
int64_t sum = 100;
|
|
|
|
ImageMetadata metadata(experiment);
|
|
DeviceOutput output{};
|
|
output.module_statistics.module_number = 5;
|
|
output.module_statistics.frame_number = 0;
|
|
output.roi_counts[0].sum = sum;
|
|
output.roi_counts[0].sum_x_weighted = 50 * sum;
|
|
output.roi_counts[0].sum_y_weighted = 23 * sum;
|
|
|
|
metadata.Process(&output);
|
|
|
|
DataMessage message;
|
|
|
|
REQUIRE_NOTHROW(metadata.Export(message, 123));
|
|
|
|
REQUIRE(message.roi.size() == 1);
|
|
REQUIRE(message.roi.contains("roi1"));
|
|
REQUIRE(message.roi["roi1"].sum == sum);
|
|
REQUIRE(message.roi["roi1"].x_weighted == sum * (geom.GetX0(5) + 50));
|
|
REQUIRE(message.roi["roi1"].y_weighted == sum * (geom.GetY0(5) - 23));
|
|
}
|
|
|
|
TEST_CASE("ImageMetadata_ROI_flipped_module") {
|
|
DetectorGeometry geom({DetectorModuleGeometry(45,1811,
|
|
DetectorModuleGeometry::Direction::Yneg,
|
|
DetectorModuleGeometry::Direction::Xpos)});
|
|
DiffractionExperiment experiment(geom);
|
|
|
|
experiment.ROI().SetROI(ROIDefinition{.boxes = {ROIBox("roi1",1,5,2,8)}});
|
|
|
|
int64_t sum = 100;
|
|
|
|
ImageMetadata metadata(experiment);
|
|
DeviceOutput output{};
|
|
output.module_statistics.module_number = 0;
|
|
output.module_statistics.frame_number = 0;
|
|
output.roi_counts[0].sum = sum;
|
|
output.roi_counts[0].sum_x_weighted = 50 * sum;
|
|
output.roi_counts[0].sum_y_weighted = 23 * sum;
|
|
|
|
metadata.Process(&output);
|
|
|
|
DataMessage message;
|
|
|
|
REQUIRE_NOTHROW(metadata.Export(message, 123));
|
|
|
|
REQUIRE(message.roi.size() == 1);
|
|
REQUIRE(message.roi.contains("roi1"));
|
|
REQUIRE(message.roi["roi1"].sum == sum);
|
|
REQUIRE(message.roi["roi1"].x_weighted == sum * (23 + 45) );
|
|
REQUIRE(message.roi["roi1"].y_weighted == sum * (1811 - 50));
|
|
}
|
|
|
|
TEST_CASE("ImageMetadata_PulseID_mismatch") {
|
|
DetectorGeometry geom(8,2,8,36, true);
|
|
DiffractionExperiment experiment(geom);
|
|
experiment.PulsedSource(true);
|
|
|
|
ImageMetadata metadata(experiment);
|
|
DeviceOutput output{};
|
|
output.module_statistics.module_number = 0;
|
|
output.module_statistics.frame_number = 0;
|
|
output.module_statistics.pulse_id = 123.0;
|
|
metadata.Process(&output);
|
|
|
|
output.module_statistics.module_number = 1;
|
|
output.module_statistics.frame_number = 0;
|
|
output.module_statistics.pulse_id = 124.0;
|
|
metadata.Process(&output);
|
|
|
|
DataMessage message;
|
|
|
|
REQUIRE_NOTHROW(metadata.Export(message, 123));
|
|
REQUIRE(message.xfel_pulse_id == UINT64_MAX);
|
|
} |