178 lines
7.8 KiB
C++
178 lines
7.8 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_MaxFrameTime") {
|
|
DetectorSetup s1(DetectorGeometryModular(8), DetectorType::JUNGFRAU);
|
|
s1.UDPInterfaceCount(1);
|
|
REQUIRE(s1.GetMinFrameTime() == std::chrono::microseconds(MIN_FRAME_TIME_JUNGFRAU_HALF_SPEED_IN_US));
|
|
s1.UDPInterfaceCount(2);
|
|
REQUIRE(s1.GetMinFrameTime() == std::chrono::microseconds(MIN_FRAME_TIME_JUNGFRAU_FULL_SPEED_IN_US));
|
|
|
|
DetectorSetup s2(DetectorGeometryModular(8), DetectorType::EIGER);
|
|
REQUIRE(s2.GetMinFrameTime() == std::chrono::microseconds(MIN_FRAME_TIME_EIGER_IN_US));
|
|
} |