v1.0.0-rc.113 #19
@@ -55,8 +55,8 @@ Coord GoniometerAxis::GetPosition(int64_t image_number) const {
|
||||
return helical_step.value_or(Coord()) * static_cast<float>(image_number);
|
||||
}
|
||||
|
||||
float GoniometerAxis::GetAngle_deg(int64_t image_number) const {
|
||||
return start + increment * static_cast<float>(image_number);
|
||||
float GoniometerAxis::GetAngle_deg(float image_number) const {
|
||||
return start + increment * image_number;
|
||||
}
|
||||
|
||||
std::vector<double> GoniometerAxis::GetAxisVector() const {
|
||||
|
||||
@@ -30,7 +30,7 @@ public:
|
||||
[[nodiscard]] float GetIncrement_deg() const;
|
||||
[[nodiscard]] std::optional<float> GetScreeningWedge() const;
|
||||
[[nodiscard]] float GetWedge_deg() const;
|
||||
[[nodiscard]] float GetAngle_deg(int64_t image_number) const;
|
||||
[[nodiscard]] float GetAngle_deg(float image_number) const;
|
||||
|
||||
[[nodiscard]] Coord GetAxis() const;
|
||||
[[nodiscard]] std::optional<Coord> GetHelicalStep() const;
|
||||
|
||||
@@ -129,7 +129,7 @@ void JFJochViewerDatasetInfo::UpdatePlot() {
|
||||
} else if (val == 8)
|
||||
data = dataset->b_factor;
|
||||
|
||||
chart_view->loadValues(data, image_number, one_over_d2);
|
||||
chart_view->loadValues(data, image_number, one_over_d2, dataset->experiment.GetGoniometer());
|
||||
if (dataset->experiment.GetGridScan()) {
|
||||
stack->setCurrentWidget(grid_scan_image);
|
||||
grid_scan_image->loadData(data, dataset->experiment.GetGridScan().value(), one_over_d2);
|
||||
|
||||
@@ -72,7 +72,10 @@ void JFJochChartView::updateChart() {
|
||||
if (!std::isfinite(values[i])) continue;
|
||||
const double disp = values[i];
|
||||
if (!std::isfinite(disp)) continue;
|
||||
series->append(i, disp);
|
||||
if (goniometer_axis)
|
||||
series->append(goniometer_axis->GetAngle_deg(i), disp);
|
||||
else
|
||||
series->append(i, disp);
|
||||
if (disp < dispMin) dispMin = disp;
|
||||
if (disp > dispMax) dispMax = disp;
|
||||
}
|
||||
@@ -91,7 +94,11 @@ void JFJochChartView::updateChart() {
|
||||
const double mean = tmp / static_cast<double>(count);
|
||||
const double disp = mean;
|
||||
if (std::isfinite(disp)) {
|
||||
series->append((i + 0.5) * binning, disp);
|
||||
if (goniometer_axis) {
|
||||
series->append(goniometer_axis->GetAngle_deg((i + 0.5) * binning), disp);
|
||||
} else {
|
||||
series->append((i + 0.5) * binning, disp);
|
||||
}
|
||||
if (disp < dispMin) dispMin = disp;
|
||||
if (disp > dispMax) dispMax = disp;
|
||||
}
|
||||
@@ -99,12 +106,21 @@ void JFJochChartView::updateChart() {
|
||||
}
|
||||
}
|
||||
|
||||
if (curr_image < values.size() && curr_image >= 0 && std::isfinite(values[curr_image]))
|
||||
currentSeries->append(curr_image, values[curr_image]);
|
||||
if (curr_image < values.size() && curr_image >= 0 && std::isfinite(values[curr_image])) {
|
||||
if (goniometer_axis)
|
||||
currentSeries->append(goniometer_axis->GetAngle_deg(curr_image), values[curr_image]);
|
||||
else
|
||||
currentSeries->append(curr_image, values[curr_image]);
|
||||
}
|
||||
|
||||
chart()->addSeries(series);
|
||||
chart()->addSeries(currentSeries);
|
||||
chart()->createDefaultAxes();
|
||||
if (goniometer_axis) {
|
||||
chart()->axisX(series)->setTitleText("Rotation angle (deg.)");
|
||||
} else {
|
||||
chart()->axisX(series)->setTitleText("Image number");
|
||||
}
|
||||
|
||||
// Set Y-axis behavior according to options
|
||||
QValueAxis *axisY = qobject_cast<QValueAxis *>(chart()->axisY(series));
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <QMouseEvent>
|
||||
#include <QGraphicsLineItem>
|
||||
#include <QTimer>
|
||||
#include "../../common/GoniometerAxis.h"
|
||||
|
||||
class JFJochChartView : public QChartView {
|
||||
Q_OBJECT
|
||||
@@ -27,6 +28,8 @@ class JFJochChartView : public QChartView {
|
||||
bool m_minYZeroEnabled = true;
|
||||
bool m_yOneOverD = false;
|
||||
|
||||
|
||||
std::optional<GoniometerAxis> goniometer_axis;
|
||||
void updateChart();
|
||||
|
||||
signals:
|
||||
@@ -52,13 +55,15 @@ public slots:
|
||||
|
||||
public:
|
||||
template<class T>
|
||||
void loadValues(const std::vector<T> &input, int64_t image, bool one_over_d2) {
|
||||
void loadValues(const std::vector<T> &input, int64_t image, bool one_over_d2, const std::optional<GoniometerAxis> &goniometer = {}) {
|
||||
m_yOneOverD = one_over_d2;
|
||||
|
||||
values.resize(input.size());
|
||||
|
||||
goniometer_axis = goniometer;
|
||||
|
||||
for (int i = 0; i < input.size(); i++) {
|
||||
if (one_over_d2) {
|
||||
|
||||
float d = static_cast<float>(input[i]);
|
||||
if (!std::isfinite(d))
|
||||
values[i] = 0.0f;
|
||||
|
||||
Reference in New Issue
Block a user