jfjoch_viewer: Grid scan 2D image has also 1/d^2 for resolution estimation plot
All checks were successful
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Successful in 12m3s
Build Packages / build:rpm (rocky8_nocuda) (push) Successful in 12m57s
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Successful in 12m58s
Build Packages / Generate python client (push) Successful in 16s
Build Packages / build:rpm (rocky8_sls9) (push) Successful in 13m10s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204) (push) Successful in 13m14s
Build Packages / build:rpm (rocky8) (push) Successful in 13m24s
Build Packages / Build documentation (push) Successful in 33s
Build Packages / build:rpm (rocky9_nocuda) (push) Successful in 14m6s
Build Packages / build:rpm (rocky9) (push) Successful in 14m15s
Build Packages / build:rpm (ubuntu2404) (push) Successful in 6m58s
Build Packages / Unit tests (push) Successful in 50m2s

This commit is contained in:
2025-11-27 14:21:36 +01:00
parent 5d2d69f9e6
commit 60da4bb2f8
4 changed files with 40 additions and 14 deletions

View File

@@ -107,6 +107,7 @@ void JFJochViewerDatasetInfo::UpdatePlot() {
if (image)
image_number = image->ImageData().number;
bool one_over_d2 = false;
std::vector<float> data;
if (val == 0)
data = dataset->bkg_estimate;
@@ -122,15 +123,16 @@ void JFJochViewerDatasetInfo::UpdatePlot() {
data = dataset->indexing_result;
else if (val == 6)
data = dataset->profile_radius;
else if (val == 7)
else if (val == 7) {
data = dataset->resolution_estimate;
else if (val == 8)
one_over_d2 = true;
} else if (val == 8)
data = dataset->b_factor;
chart_view->loadValues(data, image_number, val == 7);
chart_view->loadValues(data, image_number, one_over_d2);
if (dataset->experiment.GetGridScan()) {
stack->setCurrentWidget(grid_scan_image);
grid_scan_image->loadData(data, dataset->experiment.GetGridScan().value());
grid_scan_image->loadData(data, dataset->experiment.GetGridScan().value(), one_over_d2);
grid_button->setEnabled(true);
grid_button->setChecked(true);
} else {

View File

@@ -242,14 +242,14 @@ void JFJochChartView::mouseMoveEvent(QMouseEvent *event) {
if (m_yOneOverD) {
if (std::isfinite(yv) && yv > 0.0) {
const double d = 1.0 / std::sqrt(yv);
text = QString("image = %1, d = %2 Å")
text = QString("image = %1 d = %2 Å")
.arg(idx)
.arg(d, 0, 'f', 2);
} else {
text = QString("image = %1, no resolution estimate").arg(idx);
}
} else {
text = QString("image = %1, value = %2")
text = QString("image = %1 value = %2")
.arg(idx)
.arg(yv, 0, 'g', 6);
}

View File

@@ -14,7 +14,7 @@ void JFJochGridScanImage::clear() {
CalcROI();
}
void JFJochGridScanImage::loadData(const std::vector<float> &data, const GridScanSettings &settings) {
void JFJochGridScanImage::loadData(const std::vector<float> &data, const GridScanSettings &settings, bool in_one_over_d2) {
if (data.empty()) {
clear();
return;
@@ -30,6 +30,13 @@ void JFJochGridScanImage::loadData(const std::vector<float> &data, const GridSca
image_index = settings.Rearrange(indices, -1);
one_over_d2 = in_one_over_d2;
if (one_over_d2) {
for (int i = 0; i < image_fp.size(); i++)
if (!std::isnan(image_fp[i]))
image_fp[i] = 1.0f / (image_fp[i] * image_fp[i]);
}
float minv = std::numeric_limits<float>::infinity();
float maxv = -std::numeric_limits<float>::infinity();
for (float v : image_fp) {
@@ -75,12 +82,28 @@ void JFJochGridScanImage::mouseHover(QMouseEvent *event) {
if (event->modifiers() & Qt::ShiftModifier)
emit imageSelected(image_id);
emit writeStatusBar(QString("Image %1 y %2 y %3 value %4")
.arg(image_id)
.arg(x)
.arg(y)
.arg(QString::number(image_fp[idx], 'f', 3)),
6000);
if (one_over_d2) {
if (std::isnan(image_fp[idx]))
emit writeStatusBar(QString("Image %1 x %2 y %3 no resolution estimation")
.arg(image_id)
.arg(x)
.arg(y),
6000);
else
emit writeStatusBar(QString("Image %1 x %2 y %3 d = %4 Å")
.arg(image_id)
.arg(x)
.arg(y)
.arg(QString::number(1 / std::sqrt(image_fp[idx]), 'f', 2)),
6000);
} else {
emit writeStatusBar(QString("Image %1 x %2 y %3 value %4")
.arg(image_id)
.arg(x)
.arg(y)
.arg(QString::number(image_fp[idx], 'f', 3)),
6000);
}
}
}

View File

@@ -16,6 +16,7 @@ class JFJochGridScanImage : public JFJochImage {
std::vector<int64_t> image_index;
int64_t current_image_W = -1;
int64_t current_image_H = -1;
bool one_over_d2 = false;
void mouseHover(QMouseEvent *event) override;
void mouseDoubleClickEvent(QMouseEvent *event) override;
@@ -27,7 +28,7 @@ signals:
public:
JFJochGridScanImage(QWidget *parent = nullptr);
public slots:
void loadData(const std::vector<float> &data, const GridScanSettings &settings);
void loadData(const std::vector<float> &data, const GridScanSettings &settings, bool one_over_d2);
void setImage(int64_t val);
void clear();
};