jfjoch_viewer: Show angle as current image angle + wedge

This commit is contained in:
2025-12-08 12:30:56 +01:00
parent 47af6092fa
commit a38164188e
3 changed files with 18 additions and 7 deletions

View File

@@ -723,9 +723,14 @@ std::optional<GoniometerAxis> JFJochHDF5Reader::ReadAxis(HDF5Object *file, const
if (angle.size() < 2)
return {};
std::vector<double> end = file->ReadOptVector<double>(dname + "_end");
double start = angle[0];
double incr = angle[1] - angle[0];
HDF5DataSet dataset_end(*file, dname + "_end");
std::vector<double> angle_end;
if (dataset.ReadAttrStr("transformation_type") != "rotation")
return {};
@@ -735,8 +740,11 @@ std::optional<GoniometerAxis> 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<uint8_t> &tmp, const std::string &name) const {

View File

@@ -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);

View File

@@ -202,11 +202,12 @@ void JFJochViewerImageStatistics::loadImage(std::shared_ptr<const JFJochReaderIm
if (exp.GetGoniometer()) {
rotation_angle_label->setText("Image angle:");
rotation_angle->setText(QString("<b>%1°</b>")
.arg(TrimZeros(exp.GetGoniometer()->GetIncrement_deg(), 3)));
rotation_angle->setToolTip(QString("Start angle: <b>%1°</b><br/>This image: <b>%2°</b>")
.arg(TrimZeros(exp.GetGoniometer()->GetStart_deg(), 3))
rotation_angle->setText(QString("<b>%1° + %2°</b>")
.arg(TrimZeros(exp.GetGoniometer()->GetAngle_deg(image->ImageData().number), 3))
.arg(TrimZeros(exp.GetGoniometer()->GetWedge_deg(), 3)));
rotation_angle->setToolTip(QString("Start angle: <b>%1°</b><br/>Increment: <b>%2°</b>")
.arg(TrimZeros(exp.GetGoniometer()->GetStart_deg(), 3))
.arg(TrimZeros(exp.GetGoniometer()->GetIncrement_deg(), 3))
);
} else if (exp.GetGridScan()) {
rotation_angle_label->setText("Grid scan:");