From e610ce75ef2a639b2a9817c29320e9b152e0ec83 Mon Sep 17 00:00:00 2001 From: leonarski_f Date: Sat, 7 Mar 2026 09:11:32 +0100 Subject: [PATCH] jfjoch_test: Add JFJochIntegrationTest_TCP_calibration to check calibration writing (and one extra test for TCP) --- tests/JFJochReceiverProcessingTest.cpp | 59 ++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/tests/JFJochReceiverProcessingTest.cpp b/tests/JFJochReceiverProcessingTest.cpp index a713c727..bc461505 100644 --- a/tests/JFJochReceiverProcessingTest.cpp +++ b/tests/JFJochReceiverProcessingTest.cpp @@ -1630,3 +1630,62 @@ TEST_CASE("JFJochIntegrationTest_TCP_lysozyme_spot_and_index", "[JFJochReceiver] REQUIRE(ack.has_value()); CHECK(ack == experiment.GetImageNum()); } + +TEST_CASE("JFJochIntegrationTest_TCP_calibration", "[JFJochReceiver]") { + Logger logger(Catch::getResultCapture().getCurrentTestName()); + + RegisterHDF5Filter(); + + const uint16_t nthreads = 4; + + DiffractionExperiment experiment(DetJF4M()); + experiment.ImagesPerTrigger(5).NumTriggers(1).UseInternalPacketGenerator(true).ImagesPerFile(2).SaveCalibration(true) + .FilePrefix("calib_integration_test").JungfrauConvPhotonCnt(true).SetFileWriterFormat(FileWriterFormat::NXmxVDS).OverwriteExistingFiles(true) + .DetectorDistance_mm(75).BeamY_pxl(1136).BeamX_pxl(1090).IncidentEnergy_keV(12.4) + .SetUnitCell(UnitCell{.a = 36.9, .b = 78.95, .c = 78.95, .alpha =90, .beta = 90, .gamma = 90}); + experiment.SampleTemperature_K(123.0).RingCurrent_mA(115); + + PixelMask pixel_mask(experiment); + JFCalibration calibration(experiment); + + for (int i = 0; i < experiment.GetModulesNum(); i++) { + std::vector pedestal_g0(RAW_MODULE_SIZE, i); + std::vector pedestal_g1(RAW_MODULE_SIZE); + std::vector pedestal_g2(RAW_MODULE_SIZE); + for (int j = 0; j < RAW_MODULE_SIZE; j++) { + pedestal_g1[j] = j % RAW_MODULE_COLS; + pedestal_g2[j] = i * (RAW_MODULE_LINES) + j / RAW_MODULE_COLS; // line number + } + calibration.Pedestal(1,0).LoadPedestal(pedestal_g1); + calibration.Pedestal(2,0).LoadPedestal(pedestal_g2); + calibration.Pedestal(0,0).LoadPedestal(pedestal_g0); + } + + // Setup acquisition device + AcquisitionDeviceGroup aq_devices; + std::unique_ptr test = std::make_unique(0, 64); + + aq_devices.Add(std::move(test)); + + TCPStreamPusher pusher("tcp://127.0.0.1:*", 1); + + TCPImagePuller puller(pusher.GetAddress()[0]); + StreamWriter writer(logger, puller); + auto writer_future = std::async(std::launch::async, &StreamWriter::Run, &writer); + + JFJochReceiverService service(aq_devices, logger, pusher); + service.NumThreads(nthreads); + service.Indexing(experiment.GetIndexingSettings()); + + service.Start(experiment, pixel_mask, &calibration); + auto receiver_out = service.Stop(); + + CHECK(receiver_out.efficiency == 1.0); + CHECK(receiver_out.status.images_sent == experiment.GetImageNum()); + CHECK(!receiver_out.status.cancelled); + + // No progress value at the end of measurement + REQUIRE(!service.GetProgress().has_value()); + + REQUIRE_NOTHROW(writer_future.get()); +} \ No newline at end of file