Skip to content
Snippets Groups Projects
Commit fd8cc35e authored by Yurov, Dmitry's avatar Yurov, Dmitry
Browse files

First implementation of SpecularDataWidget

(copy of HistogramPlot for now)
parent d40edab6
No related branches found
No related tags found
No related merge requests found
...@@ -38,6 +38,7 @@ set(include_dirs ...@@ -38,6 +38,7 @@ set(include_dirs
${CMAKE_CURRENT_SOURCE_DIR}/Views/AccordionWidget ${CMAKE_CURRENT_SOURCE_DIR}/Views/AccordionWidget
${CMAKE_CURRENT_SOURCE_DIR}/Views/ImportDataWidgets ${CMAKE_CURRENT_SOURCE_DIR}/Views/ImportDataWidgets
${CMAKE_CURRENT_SOURCE_DIR}/Views/CommonWidgets ${CMAKE_CURRENT_SOURCE_DIR}/Views/CommonWidgets
${CMAKE_CURRENT_SOURCE_DIR}/Views/SpecularDataWidgets
) )
if(BORNAGAIN_OPENGL) if(BORNAGAIN_OPENGL)
......
// ************************************************************************** //
//
// BornAgain: simulate and fit scattering at grazing incidence
//
//! @file GUI/coregui/Views/SpecularDataWidgets/SpecularDataWidget.cpp
//! @brief Implements class SpecularDataWidget
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************** //
#include "ColorMapUtils.h"
#include "SpecularDataWidget.h"
#include "SpecularDataItem.h"
#include "plot_constants.h"
SpecularDataWidget::SpecularDataWidget(QWidget* parent)
: QWidget(parent), m_customPlot(new QCustomPlot)
{
QVBoxLayout* vlayout = new QVBoxLayout(this);
vlayout->setMargin(0);
vlayout->setSpacing(0);
vlayout->setContentsMargins(0, 0, 0, 0);
vlayout->addWidget(m_customPlot);
setLayout(vlayout);
setStyleSheet("background-color:white;");
initGraph();
m_customPlot->xAxis->setTickLabelFont(QFont(QFont().family(), Constants::plot_tick_label_size));
m_customPlot->yAxis->setTickLabelFont(QFont(QFont().family(), Constants::plot_tick_label_size));
ColorMapUtils::setLogz(m_customPlot->yAxis, true);
m_customPlot->xAxis->setLabel("iteration");
m_customPlot->yAxis->setLabel("chi2");
m_customPlot->xAxis->setLabelFont(QFont(QFont().family(), Constants::plot_axes_label_size));
m_customPlot->yAxis->setLabelFont(QFont(QFont().family(), Constants::plot_axes_label_size));
}
void SpecularDataWidget::setData(SpecularDataItem* data_item)
{
m_data_item = data_item;
initGraphFromItem();
}
void SpecularDataWidget::clearData()
{
m_customPlot->removeGraph(m_customPlot->graph());
initGraph();
m_customPlot->replot();
}
void SpecularDataWidget::initGraph()
{
m_customPlot->addGraph();
QPen pen(QColor(0, 0, 255, 200));
m_customPlot->graph()->setLineStyle(QCPGraph::lsLine);
m_customPlot->graph()->setPen(pen);
QFontMetrics fontMetric(font());
auto em = fontMetric.width('M'), fontAscent = fontMetric.ascent();
auto* axisRectangle = m_customPlot->axisRect();
axisRectangle->setAutoMargins(QCP::msTop | QCP::msBottom);
axisRectangle->setMargins(QMargins(em*4, fontAscent*2, em*2, fontAscent*2));
}
void SpecularDataWidget::initGraphFromItem()
{
const auto underlying_data = intensityData()->getOutputData();
for (size_t i = 0, size = underlying_data->getAllocatedSize(); i < size; ++i) {
double x = underlying_data->getAxisValue(i, 0);
double y = underlying_data->operator[](i);
m_customPlot->graph()->addData(x, y);
}
}
// ************************************************************************** //
//
// BornAgain: simulate and fit scattering at grazing incidence
//
//! @file GUI/coregui/Views/SpecularDataWidgets/SpecularDataWidget.h
//! @brief Defines class SpecularDataWidget
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2018
//! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
// ************************************************************************** //
#ifndef SPECULARDATAWIDGET_H
#define SPECULARDATAWIDGET_H
#include "WinDllMacros.h"
#include "qcustomplot.h"
#include <QWidget>
class SpecularDataItem;
class BA_CORE_API_ SpecularDataWidget : public QWidget
{
Q_OBJECT
public:
explicit SpecularDataWidget(QWidget* parent = nullptr);
public slots:
void setData(SpecularDataItem* data_item);
void clearData();
private:
void initGraph();
void initGraphFromItem();
SpecularDataItem* intensityData() {return m_data_item;}
QCustomPlot* m_customPlot;
SpecularDataItem* m_data_item;
};
#endif // SPECULARDATAWIDGET_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment