From a38164188ec568b671b8acaa6e321970dca2e380 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Mon, 8 Dec 2025 12:30:56 +0100 Subject: [PATCH] jfjoch_viewer: Show angle as current image angle + wedge --- reader/JFJochHDF5Reader.cpp | 10 +++++++++- tests/JFJochReaderTest.cpp | 6 ++++-- viewer/widgets/JFJochViewerImageStatistics.cpp | 9 +++++---- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/reader/JFJochHDF5Reader.cpp b/reader/JFJochHDF5Reader.cpp index b2f56953..3f23db1b 100644 --- a/reader/JFJochHDF5Reader.cpp +++ b/reader/JFJochHDF5Reader.cpp @@ -723,9 +723,14 @@ std::optional JFJochHDF5Reader::ReadAxis(HDF5Object *file, const if (angle.size() < 2) return {}; + std::vector end = file->ReadOptVector(dname + "_end"); + double start = angle[0]; double incr = angle[1] - angle[0]; + HDF5DataSet dataset_end(*file, dname + "_end"); + std::vector angle_end; + if (dataset.ReadAttrStr("transformation_type") != "rotation") return {}; @@ -735,8 +740,11 @@ std::optional JFJochHDF5Reader::ReadAxis(HDF5Object *file, const dname + " Vector must have 3 elements"); Coord axis(axis_vec[0], axis_vec[1], axis_vec[2]); + GoniometerAxis g_axis(name, start, incr, axis, {}); + if (!end.empty()) + g_axis.ScreeningWedge(end[0] - angle[0]); - return GoniometerAxis(name, start, incr, axis, {}); + return g_axis; } CompressedImage JFJochHDF5Reader::ReadCalibration(std::vector &tmp, const std::string &name) const { diff --git a/tests/JFJochReaderTest.cpp b/tests/JFJochReaderTest.cpp index 11e3b124..0d25fd9f 100644 --- a/tests/JFJochReaderTest.cpp +++ b/tests/JFJochReaderTest.cpp @@ -241,7 +241,7 @@ TEST_CASE("JFJochReader_Goniometer", "[HDF5][Full]") { 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.Goniometer(GoniometerAxis("omega", 95, 0.1f, Coord(0,-1,0),{})); + x.Goniometer(GoniometerAxis("omega", 95, 0.1f, Coord(0,-1,0),{}).ScreeningWedge(0.01f)); RegisterHDF5Filter(); @@ -275,7 +275,9 @@ TEST_CASE("JFJochReader_Goniometer", "[HDF5][Full]") { REQUIRE(dataset->experiment.GetGoniometer().has_value()); CHECK(dataset->experiment.GetGoniometer()->GetStart_deg() == 95.0); - CHECK(fabsf(dataset->experiment.GetGoniometer()->GetIncrement_deg() - 0.1f) < 0.00001f); + CHECK(dataset->experiment.GetGoniometer()->GetIncrement_deg() == Catch::Approx(0.1f).margin(0.00001f)); + CHECK(dataset->experiment.GetGoniometer()->GetWedge_deg() == Catch::Approx(0.01f).margin(0.00001f)); + CHECK(dataset->experiment.GetGoniometer()->GetName() == "omega"); CHECK(dataset->experiment.GetGoniometer()->GetAxis().x == 0); CHECK(dataset->experiment.GetGoniometer()->GetAxis().y == -1); diff --git a/viewer/widgets/JFJochViewerImageStatistics.cpp b/viewer/widgets/JFJochViewerImageStatistics.cpp index 355579cd..00dbb27d 100644 --- a/viewer/widgets/JFJochViewerImageStatistics.cpp +++ b/viewer/widgets/JFJochViewerImageStatistics.cpp @@ -202,11 +202,12 @@ void JFJochViewerImageStatistics::loadImage(std::shared_ptrsetText("Image angle:"); - rotation_angle->setText(QString("%1°") - .arg(TrimZeros(exp.GetGoniometer()->GetIncrement_deg(), 3))); - rotation_angle->setToolTip(QString("Start angle: %1°
This image: %2°") - .arg(TrimZeros(exp.GetGoniometer()->GetStart_deg(), 3)) + rotation_angle->setText(QString("%1° + %2°") .arg(TrimZeros(exp.GetGoniometer()->GetAngle_deg(image->ImageData().number), 3)) + .arg(TrimZeros(exp.GetGoniometer()->GetWedge_deg(), 3))); + rotation_angle->setToolTip(QString("Start angle: %1°
Increment: %2°") + .arg(TrimZeros(exp.GetGoniometer()->GetStart_deg(), 3)) + .arg(TrimZeros(exp.GetGoniometer()->GetIncrement_deg(), 3)) ); } else if (exp.GetGridScan()) { rotation_angle_label->setText("Grid scan:");