Files
Jungfraujoch/tests/ImageMetadataTest.cpp
2025-05-05 19:32:22 +02:00

88 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") {
DetectorGeometryModular geom(8,2,8,36, true);
DiffractionExperiment experiment(DetJF(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") {
DetectorGeometryModular geom({DetectorModuleGeometry(45,1811,
DetectorModuleGeometry::Direction::Yneg,
DetectorModuleGeometry::Direction::Xpos)});
DiffractionExperiment experiment(DetJF(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") {
DiffractionExperiment experiment(DetJF4M());
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);
}