File: SpecularPlot.h

package info (click to toggle)
bornagain 23.0-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 103,948 kB
  • sloc: cpp: 423,131; python: 40,997; javascript: 11,167; awk: 630; sh: 318; ruby: 173; xml: 130; makefile: 51; ansic: 24
file content (89 lines) | stat: -rw-r--r-- 2,664 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//  ************************************************************************************************
//
//  BornAgain: simulate and fit reflection and scattering
//
//! @file      GUI/View/Plotter/SpecularPlot.h
//! @brief     Defines class SpecularPlot.
//!
//! @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 BORNAGAIN_GUI_VIEW_PLOTTER_SPECULARPLOT_H
#define BORNAGAIN_GUI_VIEW_PLOTTER_SPECULARPLOT_H

#include "GUI/View/Plotter/MousyPlot.h"
#include <QMap>

class Data1DItem;
class QCPErrorBars;
class QCPGraph;
class QCPRange;

//! The SpecularPlot class presents 1D intensity data from Data1DItem.

//! Provides minimal functionality for data plotting and axes interaction. Should be a component
//! for more complicated plotting widgets. Corresponds to ColorMap for 2D intensity data.

class SpecularPlot : public MousyPlot {
    Q_OBJECT
public:
    SpecularPlot();

    void setData1DItems(const QVector<Data1DItem*>& items);

    QString infoString(double x, double y) const override;

    Data1DItem* currentData1DItem() const;

private slots:
    void onDataDestroyed(QObject* destroyed_obj);

private:
    //! sets logarithmic scale
    void applyLogXstate();
    void applyLogYstate();

    QVector<Data1DItem*> data_items() const;

    //! Propagate xmin, xmax back to Data1DItem
    void onXaxisRangeChanged(QCPRange range) const;

    //! Propagate ymin, ymax back to Data1DItem
    void onYaxisRangeChanged(QCPRange range) const;

    void connectItems();

    //! Creates and initializes the color map
    void initPlot();

    void setConnected(bool isConnected);

    //! Connects/disconnects signals related to SpecularPlot's X,Y axes rectangle change.
    void setAxesRangeConnected(bool isConnected);

    //! Sets initial state of SpecularPlot for all items.
    void setPlot();

    //! Sets axes ranges and logarithmic scale on y-axis if necessary.
    void setAxes();

    //! Sets (xmin,xmax) and (ymin,ymax) of SpecularPlot from the first item.
    void setAxesRanges();

    //! Sets X,Y axes labels from the first item
    void setAxesLabels();

    //! Sets the data values to SpecularPlot.
    void setDataFromItem(Data1DItem* item);

    QVector<Data1DItem*> m_data_items;

    QMap<Data1DItem*, QCPGraph*> m_graph_map;
    QMap<Data1DItem*, QCPErrorBars*> m_errorbar_map;
};

#endif // BORNAGAIN_GUI_VIEW_PLOTTER_SPECULARPLOT_H