* Enhancements for XFEL

* Enhancements for EIGER
* Writer is more flexible and capable of handling DECTRIS data
This commit is contained in:
2024-03-05 20:41:47 +01:00
parent 71d862b706
commit d315506633
165 changed files with 5440 additions and 2230 deletions

View File

@@ -20,7 +20,6 @@ TEST_CASE("JFJochReceiverTest_Raw", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
std::unique_ptr<HLSSimulatedDevice> test = std::make_unique<HLSSimulatedDevice>(i,64);
test->SetInternalGeneratorFrame();
aq_devices.Add(std::move(test));
}
@@ -51,7 +50,6 @@ TEST_CASE("JFJochReceiverTest_Conversion", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
std::unique_ptr<HLSSimulatedDevice> test = std::make_unique<HLSSimulatedDevice>(i,64);
test->SetInternalGeneratorFrame();
aq_devices.Add(std::move(test));
}
@@ -79,7 +77,6 @@ TEST_CASE("JFJochReceiverTest_Conversion_FixedGainG1", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
std::unique_ptr<HLSSimulatedDevice> test = std::make_unique<HLSSimulatedDevice>(i,64);
test->SetInternalGeneratorFrame();
aq_devices.Add(std::move(test));
}
@@ -105,17 +102,16 @@ TEST_CASE("JFJochReceiverTest_Conversion_FixedGainG1_onlyG1", "[JFJochReceiver]"
.ImagesPerTrigger(32).DataFileCount(16).PhotonEnergy_keV(12.4).Compression(CompressionAlgorithm::BSHUF_ZSTD)
.FixedGainG1(true);
std::vector<uint16_t> input(RAW_MODULE_SIZE, 0x4000 + 3000);
std::vector<uint16_t> input(RAW_MODULE_SIZE*2, 0x4000 + 3000);
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
std::unique_ptr<HLSSimulatedDevice> test = std::make_unique<HLSSimulatedDevice>(i,64);
test->SetInternalGeneratorFrameForAllModules(input);
aq_devices.Add(std::move(test));
}
JFJochReceiverOutput output;
bool ret;
REQUIRE_NOTHROW(ret = JFJochReceiverTest(output, logger, aq_devices, x, nthreads, false));
REQUIRE_NOTHROW(ret = JFJochReceiverTest(output, logger, aq_devices, x, input, nthreads, false));
REQUIRE(ret);
REQUIRE(output.efficiency == 1.0);
REQUIRE(output.status.images_sent == x.GetImageNum());
@@ -137,7 +133,6 @@ TEST_CASE("JFJochReceiverTest_Conversion_U16", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
std::unique_ptr<HLSSimulatedDevice> test = std::make_unique<HLSSimulatedDevice>(i,64);
test->SetInternalGeneratorFrame();
aq_devices.Add(std::move(test));
}
@@ -164,7 +159,6 @@ TEST_CASE("JFJochReceiverTest_Conversion_I32", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
std::unique_ptr<HLSSimulatedDevice> test = std::make_unique<HLSSimulatedDevice>(i,64);
test->SetInternalGeneratorFrame();
aq_devices.Add(std::move(test));
}
@@ -191,7 +185,6 @@ TEST_CASE("JFJochReceiverTest_Conversion_Summation2", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
std::unique_ptr<HLSSimulatedDevice> test = std::make_unique<HLSSimulatedDevice>(i,64);
test->SetInternalGeneratorFrame();
aq_devices.Add(std::move(test));
}
@@ -221,7 +214,6 @@ TEST_CASE("JFJochReceiverTest_Conversion_StorageCell", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
std::unique_ptr<HLSSimulatedDevice> test = std::make_unique<HLSSimulatedDevice>(i,64);
test->SetInternalGeneratorFrame();
aq_devices.Add(std::move(test));
}
@@ -263,8 +255,7 @@ TEST_CASE("JFJochReceiverTest_PedestalG1", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
std::unique_ptr<HLSSimulatedDevice> test = std::make_unique<HLSSimulatedDevice>(i,64);
test->SetInternalGeneratorFrame();
test->CreatePackets(x, 1, nframes, 0, pedestal_in.data(), false);
test->CreateJFPackets(x, 1, nframes, 0, pedestal_in.data());
test->CreateFinalPacket(x);
aq_devices.Add(std::move(test));
}
@@ -327,8 +318,8 @@ TEST_CASE("JFJochReceiverTest_PedestalG2_storage_cell", "[JFJochReceiver]") {
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
auto test = std::make_unique<HLSSimulatedDevice>(i, nframes * 2);
for (int j = 0; j < nframes; j++) {
test->CreatePackets(x, 2 * j + 1, 1, 0, pedestal_in2.data() + j * RAW_MODULE_SIZE, false);
test->CreatePackets(x, 2 * j + 2, 1, 0, pedestal_in.data() + j * RAW_MODULE_SIZE, false);
test->CreateJFPackets(x, 2 * j + 1, 1, 0, pedestal_in2.data() + j * RAW_MODULE_SIZE);
test->CreateJFPackets(x, 2 * j + 2, 1, 0, pedestal_in.data() + j * RAW_MODULE_SIZE);
}
test->CreateFinalPacket(x);
aq_devices.Add(std::move(test));
@@ -382,7 +373,7 @@ TEST_CASE("JFJochReceiverTest_PedestalG0", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
auto test = std::make_unique<HLSSimulatedDevice>(i,64);
test->CreatePackets(x, 1, nframes, 0, pedestal_in.data(), false);
test->CreateJFPackets(x, 1, nframes, 0, pedestal_in.data());
test->CreateFinalPacket(x);
aq_devices.Add(std::move(test));
}
@@ -429,10 +420,10 @@ TEST_CASE("JFJochReceiverTest_PedestalG0_StorageCell", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
auto test = std::make_unique<HLSSimulatedDevice>(0, 64);
for (int i = 0; i < nframes; i++) {
test->CreatePackets(x, i*4+1, 1, 0, pedestal_in_0.data(), false);
test->CreatePackets(x, i*4+2, 1, 0, pedestal_in_1.data(), false);
test->CreatePackets(x, i*4+3, 1, 0, pedestal_in_2.data(), false);
test->CreatePackets(x, i*4+4, 1, 0, pedestal_in_3.data(), false);
test->CreateJFPackets(x, i * 4 + 1, 1, 0, pedestal_in_0.data());
test->CreateJFPackets(x, i * 4 + 2, 1, 0, pedestal_in_1.data());
test->CreateJFPackets(x, i * 4 + 3, 1, 0, pedestal_in_2.data());
test->CreateJFPackets(x, i * 4 + 4, 1, 0, pedestal_in_3.data());
}
test->CreateFinalPacket(x);
aq_devices.Add(std::move(test));
@@ -502,16 +493,16 @@ TEST_CASE("JFJochReceiverTest_PacketLost_Raw", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
auto test = std::make_unique<HLSSimulatedDevice>(i, 64);
test->CreatePackets(x, 1, 1, 0, frame_in.data(), false);
test->CreatePackets(x, 1, 1, 1, frame_in.data(), false);
test->CreatePackets(x, 2, 1, 0, frame_in.data(), false);
test->CreatePackets(x, 2, 1, 1, frame_in.data(), false);
test->CreatePackets(x, 3, 1, 0, frame_in.data(), false);
test->CreatePackets(x, 3, 1, 1, frame_in.data(), false);
test->CreateJFPackets(x, 1, 1, 0, frame_in.data());
test->CreateJFPackets(x, 1, 1, 1, frame_in.data());
test->CreateJFPackets(x, 2, 1, 0, frame_in.data());
test->CreateJFPackets(x, 2, 1, 1, frame_in.data());
test->CreateJFPackets(x, 3, 1, 0, frame_in.data());
test->CreateJFPackets(x, 3, 1, 1, frame_in.data());
for (int j = 0; j < 127; j++)
test->CreatePacketJF(x, 4, j, 0, frame_in.data() + (i * 128 + j) * 4096, false);
test->CreatePackets(x, 4, 1, 1, frame_in.data(), false);
test->CreateJFPacket(x, 4, j, 0, frame_in.data() + (i * 128 + j) * 4096);
test->CreateJFPackets(x, 4, 1, 1, frame_in.data());
test->CreateFinalPacket(x);
aq_devices.Add(std::move(test));
@@ -557,12 +548,12 @@ TEST_CASE("JFJochReceiverTest_Cancel", "[JFJochReceiver]") {
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
auto test = std::make_unique<HLSSimulatedDevice>(i, 64);
test->CreatePackets(x, 1, 1, 0, frame_in.data(), false);
test->CreatePackets(x, 1, 1, 1, frame_in.data(), false);
test->CreatePackets(x, 2, 1, 0, frame_in.data(), false);
test->CreatePackets(x, 2, 1, 1, frame_in.data(), false);
test->CreatePackets(x, 3, 1, 0, frame_in.data(), false);
test->CreatePackets(x, 3, 1, 1, frame_in.data(), false);
test->CreateJFPackets(x, 1, 1, 0, frame_in.data());
test->CreateJFPackets(x, 1, 1, 1, frame_in.data());
test->CreateJFPackets(x, 2, 1, 0, frame_in.data());
test->CreateJFPackets(x, 2, 1, 1, frame_in.data());
test->CreateJFPackets(x, 3, 1, 0, frame_in.data());
test->CreateJFPackets(x, 3, 1, 1, frame_in.data());
aq_devices.Add(std::move(test));
}
Logger logger("JFJochReceiverTest_Cancelw");
@@ -572,4 +563,56 @@ TEST_CASE("JFJochReceiverTest_Cancel", "[JFJochReceiver]") {
TestImagePusher pusher(x.GetImageNum() - 1);
auto receiver_out = RunJFJochReceiverTest(aq_devices, pusher, x, logger, calib, nthreads, true);
REQUIRE(receiver_out.status.cancelled);
}
}
TEST_CASE("JFJochReceiverTest_EIGER", "[JFJochReceiver]") {
Logger logger("JFJochReceiverTest_EIGER");
DiffractionExperiment x(DetectorSetup(DetectorGeometry(2), DetectorType::EIGER));
const uint16_t nthreads = 4;
x.Mode(DetectorMode::Raw);
x.PedestalG0Frames(0).NumTriggers(1).UseInternalPacketGenerator(true)
.ImagesPerTrigger(32).DataFileCount(16).PhotonEnergy_keV(12.4).Compression(CompressionAlgorithm::BSHUF_ZSTD);
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
std::unique_ptr<HLSSimulatedDevice> test = std::make_unique<HLSSimulatedDevice>(i,64);
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.status.images_sent == x.GetImageNum());
REQUIRE(!output.status.cancelled);
}
TEST_CASE("JFJochReceiverTest_EIGER_conversion", "[JFJochReceiver]") {
Logger logger("JFJochReceiverTest_EIGER_conversion");
DiffractionExperiment x(DetectorSetup(DetectorGeometry(2), DetectorType::EIGER));
const uint16_t nthreads = 4;
x.Mode(DetectorMode::Conversion);
x.PedestalG0Frames(0).NumTriggers(1).UseInternalPacketGenerator(true)
.ImagesPerTrigger(32).DataFileCount(16).PhotonEnergy_keV(12.4).Compression(CompressionAlgorithm::BSHUF_ZSTD);
AcquisitionDeviceGroup aq_devices;
for (int i = 0; i < x.GetDataStreamsNum(); i++) {
std::unique_ptr<HLSSimulatedDevice> test = std::make_unique<HLSSimulatedDevice>(i,64);
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.status.images_sent == x.GetImageNum());
REQUIRE(!output.status.cancelled);
}