6e0bb971ac
Build Packages / Unit tests (push) Successful in 1h13m11s
Build Packages / Generate python client (push) Successful in 33s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 14m1s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 15m12s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 14m34s
Build Packages / build:rpm (rocky8) (push) Successful in 15m43s
Build Packages / build:rpm (rocky9_sls9) (push) Successful in 16m35s
Build Packages / build:rpm (rocky9) (push) Successful in 16m19s
Build Packages / XDS test (durin plugin) (push) Successful in 12m11s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 14m1s
Build Packages / DIALS test (push) Successful in 16m59s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 13m32s
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 15m12s
Build Packages / XDS test (JFJoch plugin) (push) Successful in 11m33s
Build Packages / build:rpm (ubuntu2204) (push) Successful in 10m25s
Build Packages / Build documentation (push) Successful in 58s
Build Packages / XDS test (neggia plugin) (push) Successful in 10m33s
This is an UNSTABLE release. The release has significant modifications and bug fixes, if things go wrong, it is better to revert to 1.0.0-rc.132. jfjoch_broker: Avoid copying gain calibration together with DiffractionExperiment Reviewed-on: #53
197 lines
8.6 KiB
C++
197 lines
8.6 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 "../common/DetectorSetup.h"
|
|
#include "../common/NetworkAddressConvert.h"
|
|
|
|
TEST_CASE("DetectorSetup_MismatchInSize") {
|
|
REQUIRE_THROWS(
|
|
DetectorSetup(DetectorGeometryModular(8), DetectorType::JUNGFRAU, "JF", {"mx1", "mx2", "mx3", "mx4"}));
|
|
REQUIRE_THROWS(
|
|
DetectorSetup(DetectorGeometryModular(2), DetectorType::JUNGFRAU, "JF", {"mx1", "mx2", "mx3", "mx4"}));
|
|
REQUIRE_NOTHROW(
|
|
DetectorSetup(DetectorGeometryModular(4), DetectorType::JUNGFRAU, "JF", {"mx1", "mx2", "mx3", "mx4"}));
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_MismatchInSize_EIGER") {
|
|
REQUIRE_THROWS(DetectorSetup(DetectorGeometryModular(4), DetectorType::EIGER, "JF", {"mx1", "mx2", "mx3", "mx4"}));
|
|
REQUIRE_NOTHROW(DetectorSetup(DetectorGeometryModular(2), DetectorType::EIGER, "JF", {"mx1", "mx2", "mx3", "mx4"}));
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_MismatchInSize_DECTRIS") {
|
|
REQUIRE_NOTHROW(DetectorSetup(DetectorGeometryFixed(123, 112), DetectorType::DECTRIS, "JF", {"mx1"}));
|
|
REQUIRE_NOTHROW(DetectorSetup(DetectorGeometryFixed(123, 112), DetectorType::DECTRIS, "JF", {}));
|
|
REQUIRE_THROWS(DetectorSetup(DetectorGeometryFixed(123, 112), DetectorType::DECTRIS, "JF", {"mx1", "mx2"}));
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_MismatchInGeometry") {
|
|
REQUIRE_THROWS(DetectorSetup(DetectorGeometryFixed(123, 112), DetectorType::EIGER, "JF"));
|
|
REQUIRE_THROWS(DetectorSetup(DetectorGeometryFixed(123, 112), DetectorType::JUNGFRAU, "JF"));
|
|
REQUIRE_THROWS(DetectorSetup(DetectorGeometryModular(2), DetectorType::DECTRIS, "JF"));
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_ReadoutDepth") {
|
|
auto setup = DetDECTRIS(123,123, "zzz", "a");
|
|
REQUIRE_NOTHROW(setup.BitDepthReadout(16));
|
|
REQUIRE(setup.GetBitDepthReadout() == 16);
|
|
REQUIRE_NOTHROW(setup.BitDepthReadout(12));
|
|
REQUIRE(setup.GetBitDepthReadout() == 12);
|
|
REQUIRE_NOTHROW(setup.BitDepthReadout(32));
|
|
REQUIRE(setup.GetBitDepthReadout() == 32);
|
|
REQUIRE_NOTHROW(setup.BitDepthReadout(8));
|
|
REQUIRE(setup.GetBitDepthReadout() == 8);
|
|
REQUIRE_THROWS(setup.BitDepthReadout(0));
|
|
REQUIRE_THROWS(setup.BitDepthReadout(15));
|
|
REQUIRE_THROWS(setup.BitDepthReadout(-1));
|
|
|
|
auto setup2 = DetJF(1);
|
|
REQUIRE(setup2.GetBitDepthReadout() == 16);
|
|
REQUIRE_THROWS(setup2.BitDepthReadout(32));
|
|
|
|
auto setup3 = DetEIGER(1);
|
|
REQUIRE(!setup3.GetBitDepthReadout());
|
|
REQUIRE_THROWS(setup3.BitDepthReadout(32));
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_ImageDepth") {
|
|
auto setup = DetDECTRIS(123,123, "zzz", "a");
|
|
REQUIRE_NOTHROW(setup.BitDepthImage(16));
|
|
REQUIRE(setup.GetBitDepthImage() == 16);
|
|
REQUIRE_THROWS(setup.BitDepthImage(12));
|
|
REQUIRE_NOTHROW(setup.BitDepthImage(32));
|
|
REQUIRE(setup.GetBitDepthImage() == 32);
|
|
REQUIRE_NOTHROW(setup.BitDepthImage(8));
|
|
REQUIRE(setup.GetBitDepthImage() == 8);
|
|
REQUIRE_THROWS(setup.BitDepthImage(0));
|
|
REQUIRE_THROWS(setup.BitDepthImage(15));
|
|
REQUIRE_THROWS(setup.BitDepthImage(-1));
|
|
|
|
auto setup2 = DetJF(1);
|
|
REQUIRE(!setup2.GetBitDepthImage());
|
|
REQUIRE_THROWS(setup2.BitDepthImage(32));
|
|
|
|
auto setup3 = DetEIGER(1);
|
|
REQUIRE(!setup3.GetBitDepthImage());
|
|
REQUIRE_THROWS(setup3.BitDepthImage(32));
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_ProtoBuf") {
|
|
DetectorSetup setup = DetJF(DetectorGeometryModular(4), "JF", {"mx1","mx2","mx3","mx4"});
|
|
|
|
REQUIRE(setup.GetDescription() == "JF");
|
|
REQUIRE(setup.GetDetectorModuleHostname().size() == 4);
|
|
REQUIRE(setup.GetDetectorModuleHostname()[3] == "mx4");
|
|
REQUIRE(setup.GetPixelSize_mm() == Catch::Approx(0.075));
|
|
REQUIRE(setup.GetModulesNum() == 4);
|
|
REQUIRE(setup.GetGeometry().GetModulesNum() == 4);
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_ProtoBuf_FullSpeed") {
|
|
DetectorSetup setup = DetJF(DetectorGeometryModular(4), "JF", {"mx1","mx2","mx3","mx4"});
|
|
|
|
REQUIRE(setup.GetUDPInterfaceCount() == 2);
|
|
REQUIRE_NOTHROW(setup.UDPInterfaceCount(1));
|
|
REQUIRE_THROWS(setup.UDPInterfaceCount(0));
|
|
REQUIRE_THROWS(setup.UDPInterfaceCount(5));
|
|
REQUIRE_THROWS(setup.UDPInterfaceCount(-56));
|
|
|
|
REQUIRE(setup.GetUDPInterfaceCount() == 1);
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_IPv4Base_2Interfaces") {
|
|
DetectorSetup detector = DetJF(DetectorGeometryModular(2));
|
|
detector.UDPInterfaceCount(2);
|
|
REQUIRE_NOTHROW(detector.BaseIPv4Addr("64.1.124.1"));
|
|
|
|
REQUIRE(detector.GetSrcIPv4Addr(0) == IPv4AddressFromStr("64.1.124.1"));
|
|
REQUIRE(detector.GetSrcIPv4Addr(1) == IPv4AddressFromStr("64.1.124.2"));
|
|
REQUIRE(detector.GetSrcIPv4Addr(3) == IPv4AddressFromStr("64.1.124.4"));
|
|
|
|
REQUIRE_THROWS(detector.GetSrcIPv4Addr(4));
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_IPv4Base_1Interface") {
|
|
DetectorSetup detector = DetJF(DetectorGeometryModular(4));
|
|
detector.UDPInterfaceCount(1);
|
|
REQUIRE_NOTHROW(detector.BaseIPv4Addr("64.1.124.1"));
|
|
|
|
REQUIRE(detector.GetSrcIPv4Addr(0) == IPv4AddressFromStr("64.1.124.1"));
|
|
REQUIRE(detector.GetSrcIPv4Addr(1) == IPv4AddressFromStr("64.1.124.2"));
|
|
REQUIRE(detector.GetSrcIPv4Addr(3) == IPv4AddressFromStr("64.1.124.4"));
|
|
|
|
REQUIRE_THROWS(detector.GetSrcIPv4Addr(4));
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_LoadTrimFile") {
|
|
DetectorSetup setup(DetectorGeometryModular(4), DetectorType::EIGER, "E", {"mx1","mx2","mx3","mx4","mx5","mx6","mx7","mx8"});
|
|
REQUIRE_NOTHROW(setup.SetTrimFiles({"a", "b", "c", "d", "e", "f", "g", "h"}));
|
|
REQUIRE(setup.GetTrimFileDirectory().empty());
|
|
REQUIRE(setup.GetTrimFileNames().size() == 8);
|
|
|
|
REQUIRE_NOTHROW(setup.SetTrimFiles({"../../tests"})); // must be directory
|
|
REQUIRE(setup.GetTrimFileDirectory() == "../../tests");
|
|
REQUIRE(setup.GetTrimFileNames().empty());
|
|
|
|
REQUIRE_THROWS(setup.SetTrimFiles({"Ridiculous_file_name"}));
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_LoadGainFile") {
|
|
DetectorSetup setup(DetectorGeometryModular(4), DetectorType::JUNGFRAU, "JF", {"mx1","mx2","mx3","mx4"});
|
|
REQUIRE_THROWS(setup.LoadGain({}));
|
|
|
|
REQUIRE(setup.GetGainCalibration().empty());
|
|
|
|
REQUIRE_THROWS(setup.LoadGain({
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin"
|
|
}));
|
|
|
|
REQUIRE_THROWS(setup.LoadGain({
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin"
|
|
}));
|
|
|
|
REQUIRE_NOTHROW(setup.LoadGain({
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin"
|
|
}));
|
|
REQUIRE(setup.GetGainCalibration().size() == 4);
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_LoadGainFile_CopyConstructor") {
|
|
DetectorSetup setup(DetectorGeometryModular(4), DetectorType::JUNGFRAU, "JF", {"mx1","mx2","mx3","mx4"});
|
|
|
|
REQUIRE_NOTHROW(setup.LoadGain({
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin",
|
|
"../../tests/test_data/gainMaps_M049.bin"
|
|
}));
|
|
|
|
REQUIRE(setup.GetGainCalibration().size() == 4);
|
|
|
|
// Copy constructor works
|
|
DetectorSetup setup2(setup);
|
|
REQUIRE(setup2.GetGainCalibration().size() == 4);
|
|
REQUIRE(setup2.GetGainCalibration()[0].GetG0Mean() == setup.GetGainCalibration()[0].GetG0Mean());
|
|
REQUIRE(setup2.GetGainCalibration()[3].GetG1Mean() == setup.GetGainCalibration()[3].GetG1Mean());
|
|
|
|
}
|
|
|
|
TEST_CASE("DetectorSetup_MaxFrameTime") {
|
|
DetectorSetup s1(DetectorGeometryModular(8), DetectorType::JUNGFRAU);
|
|
s1.UDPInterfaceCount(1);
|
|
REQUIRE(s1.GetMinFrameTime() == MIN_FRAME_TIME_JUNGFRAU_HALF_SPEED);
|
|
s1.UDPInterfaceCount(2);
|
|
REQUIRE(s1.GetMinFrameTime() == MIN_FRAME_TIME_JUNGFRAU_FULL_SPEED);
|
|
|
|
DetectorSetup s2(DetectorGeometryModular(8), DetectorType::EIGER);
|
|
REQUIRE(s2.GetMinFrameTime() == MIN_FRAME_TIME_EIGER);
|
|
} |