103 lines
3.7 KiB
C++
103 lines
3.7 KiB
C++
// Copyright (2019-2023) Paul Scherrer Institute
|
|
|
|
#include <catch2/catch.hpp>
|
|
#include "../acquisition_device/MockAcquisitionDevice.h"
|
|
#include "../receiver/JFJochReceiverTest.h"
|
|
|
|
TEST_CASE("MockAcquisitionDevice") {
|
|
std::vector<uint16_t> module_data(RAW_MODULE_SIZE, 765);
|
|
|
|
DiffractionExperiment experiment(DetectorGeometry(8, 2));
|
|
experiment.DataStreams(2);
|
|
|
|
experiment.NumTriggers(1).ImagesPerTrigger(5);
|
|
MockAcquisitionDevice device(0, 128);
|
|
|
|
device.StartAction(experiment);
|
|
|
|
|
|
device.AddModule(1,0,module_data.data());
|
|
device.AddModule(1,1,module_data.data());
|
|
device.AddModule(4,0,module_data.data());
|
|
device.AddModule(5,1,module_data.data());
|
|
|
|
device.Terminate();
|
|
device.WaitForActionComplete();
|
|
|
|
REQUIRE(memcmp(device.GetDeviceOutput(0,0)->pixels, module_data.data(),
|
|
RAW_MODULE_SIZE * sizeof(uint16_t)) == 0);
|
|
REQUIRE(memcmp(device.GetDeviceOutput(0,1)->pixels, module_data.data(),
|
|
RAW_MODULE_SIZE * sizeof(uint16_t)) == 0);
|
|
REQUIRE(memcmp(device.GetDeviceOutput(3,0)->pixels, module_data.data(),
|
|
RAW_MODULE_SIZE * sizeof(uint16_t)) == 0);
|
|
REQUIRE(memcmp(device.GetDeviceOutput(4,1)->pixels, module_data.data(),
|
|
RAW_MODULE_SIZE * sizeof(uint16_t)) == 0);
|
|
}
|
|
|
|
TEST_CASE("JFJochReceiverTest_Raw_MockAcquisitionDevice", "[JFJochReceiver]") {
|
|
Logger logger("JFJochReceiverTest_Raw_MockAcquisitionDevice");
|
|
logger.Verbose(true);
|
|
|
|
std::mt19937 g1(1387);
|
|
std::uniform_int_distribution<uint16_t> dist(0, 65535);
|
|
|
|
DiffractionExperiment x(DetectorGeometry(4));
|
|
const uint16_t nthreads = 4;
|
|
|
|
std::vector<uint16_t> test_frame(RAW_MODULE_SIZE);
|
|
|
|
x.Mode(DetectorMode::Raw);
|
|
x.PedestalG0Frames(0).NumTriggers(1).UseInternalPacketGenerator(true)
|
|
.ImagesPerTrigger(100).DataFileCount(16).PhotonEnergy_keV(12.4).Compression(CompressionAlgorithm::NO_COMPRESSION);
|
|
|
|
AcquisitionDeviceGroup aq_devices;
|
|
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
|
|
for (auto &j: test_frame)
|
|
j = dist(g1);
|
|
|
|
auto test = std::make_unique<MockAcquisitionDevice>(i, 64);
|
|
test->EnableLogging(&logger);
|
|
test->SetCustomInternalGeneratorFrame(test_frame);
|
|
aq_devices.Add(std::move(test));
|
|
}
|
|
|
|
JFJochReceiverOutput output;
|
|
bool ret;
|
|
REQUIRE_NOTHROW(ret = JFJochReceiverTest(output, logger, aq_devices, x, nthreads, false));
|
|
REQUIRE(ret);
|
|
REQUIRE(output.efficiency == 1.0);
|
|
REQUIRE(output.images_sent == x.GetImageNum());
|
|
REQUIRE(output.compressed_ratio == 1.0);
|
|
REQUIRE(output.compressed_size == x.GetImageNum() * x.GetPixelDepth() * x.GetPixelsNum());
|
|
REQUIRE(output.max_image_number_sent == x.GetImageNum() - 1);
|
|
REQUIRE(!output.cancelled);
|
|
}
|
|
|
|
|
|
TEST_CASE("JFJochReceiverTest_Conversion_MockAcquisitionDevice", "[JFJochReceiver]") {
|
|
Logger logger("JFJochReceiverTest_Conversion");
|
|
|
|
DiffractionExperiment x(DetectorGeometry(8));
|
|
const uint16_t nthreads = 4;
|
|
|
|
x.Mode(DetectorMode::Conversion);
|
|
x.PedestalG0Frames(0).NumTriggers(1).UseInternalPacketGenerator(true).DataStreams(x.GetModulesNum())
|
|
.ImagesPerTrigger(32).DataFileCount(16).PhotonEnergy_keV(12.4).Compression(CompressionAlgorithm::BSHUF_ZSTD);
|
|
|
|
AcquisitionDeviceGroup aq_devices;
|
|
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
|
|
auto test = std::make_unique<MockAcquisitionDevice>(i, 64);
|
|
test->EnableLogging(&logger);
|
|
aq_devices.Add(std::move(test));
|
|
}
|
|
|
|
JFJochReceiverOutput output;
|
|
bool ret;
|
|
REQUIRE_NOTHROW(ret = JFJochReceiverTest(output, logger, aq_devices, x, nthreads, false));
|
|
REQUIRE(ret);
|
|
REQUIRE(output.efficiency == 1.0);
|
|
REQUIRE(output.images_sent == x.GetImageNum());
|
|
|
|
REQUIRE(!output.cancelled);
|
|
}
|