From 53d11fbc140c2a5835f549a22e690f1b88d997d1 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Wed, 19 Nov 2025 14:17:54 +0100 Subject: [PATCH] jfjoch_viewer: Fix reading grid scan geometry --- reader/JFJochHDF5Reader.cpp | 16 +++++++++------- tests/JFJochReaderTest.cpp | 20 +++++++++++++------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/reader/JFJochHDF5Reader.cpp b/reader/JFJochHDF5Reader.cpp index 79771c59..86e04b07 100644 --- a/reader/JFJochHDF5Reader.cpp +++ b/reader/JFJochHDF5Reader.cpp @@ -239,13 +239,15 @@ void JFJochHDF5Reader::ReadFile(const std::string& filename) { auto omega = ReadAxis(master_file.get(), "omega"); dataset->experiment.Goniometer(omega); } else if (master_file->Exists("/entry/sample/grid_scan")) { - dataset->experiment.GridScan(GridScanSettings( - master_file->GetInt("/entry/sample/grid_scan/n_fast"), - master_file->GetFloat("/entry/sample/grid_scan/step_x") * 1e6f, - master_file->GetFloat("/entry/sample/grid_scan/step_y") * 1e6f, - master_file->GetOptBool("/entry/sample/grid_scan/snake_scan").value_or(false), - master_file->GetOptBool("/entry/sample/grid_scan/vertical_scan").value_or(false) - )); + GridScanSettings grid( + master_file->GetInt("/entry/sample/grid_scan/n_fast"), + master_file->GetFloat("/entry/sample/grid_scan/step_x") * 1e6f, + master_file->GetFloat("/entry/sample/grid_scan/step_y") * 1e6f, + master_file->GetOptBool("/entry/sample/grid_scan/snake_scan").value_or(false), + master_file->GetOptBool("/entry/sample/grid_scan/vertical_scan").value_or(false) + ); + grid.ImageNum(number_of_images); + dataset->experiment.GridScan(grid); } } diff --git a/tests/JFJochReaderTest.cpp b/tests/JFJochReaderTest.cpp index ded0d293..779e827b 100644 --- a/tests/JFJochReaderTest.cpp +++ b/tests/JFJochReaderTest.cpp @@ -289,11 +289,15 @@ TEST_CASE("JFJochReader_Goniometer", "[HDF5][Full]") { TEST_CASE("JFJochReader_GridScan", "[HDF5][Full]") { DiffractionExperiment x(DetJF(1)); - x.FilePrefix("test_reader_grid_scan").ImagesPerTrigger(950).OverwriteExistingFiles(true); - x.BeamX_pxl(100).BeamY_pxl(200).DetectorDistance_mm(150) - .IncidentEnergy_keV(WVL_1A_IN_KEV).PixelSigned(false).BitDepthImage(16) - .FrameTime(std::chrono::microseconds(500), std::chrono::microseconds(10)); - x.GridScan(GridScanSettings(25, -7.5, 8.0, true, true)); + x.PixelSigned(false).BitDepthImage(16).OverwriteExistingFiles(true); + x.FrameTime(std::chrono::microseconds(500), std::chrono::microseconds(10)); + + DatasetSettings d; + d.FilePrefix("test_reader_grid_scan").ImagesPerTrigger(5); + d.BeamX_pxl(100).BeamY_pxl(200).DetectorDistance_mm(150) + .PhotonEnergy_keV(WVL_1A_IN_KEV) + .GridScan(GridScanSettings(3, -7.5, 8.0, true, true)); + x.ImportDatasetSettings(d); RegisterHDF5Filter(); @@ -307,7 +311,7 @@ TEST_CASE("JFJochReader_GridScan", "[HDF5][Full]") { DataMessage message{}; for (int i = 0; i < 5; i++) { message.image = CompressedImage(image, x.GetXPixelsNum(), x.GetYPixelsNum()); - message.number = 0; + message.number = i; REQUIRE_NOTHROW(file_set.WriteHDF5(message)); } @@ -329,7 +333,9 @@ TEST_CASE("JFJochReader_GridScan", "[HDF5][Full]") { CHECK(dataset->experiment.GetGridScan()->IsSnakeScan()); CHECK(dataset->experiment.GetGridScan()->IsVerticalScan()); - CHECK(dataset->experiment.GetGridScan()->GetNFast() == 25); + CHECK(dataset->experiment.GetGridScan()->GetNFast() == 3); + CHECK(dataset->experiment.GetGridScan()->GetNSlow() == 2); + CHECK(dataset->experiment.GetGridScan()->GetNElem() == 6); CHECK(dataset->experiment.GetGridScan()->GetGridStepX_um() == Catch::Approx(-7.5)); CHECK(dataset->experiment.GetGridScan()->GetGridStepY_um() == Catch::Approx(8.0)); }