File: Data2DItem.h

package info (click to toggle)
bornagain 23.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 103,936 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 (103 lines) | stat: -rw-r--r-- 3,037 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//  ************************************************************************************************
//
//  BornAgain: simulate and fit reflection and scattering
//
//! @file      GUI/Model/Data/Data2DItem.h
//! @brief     Defines class Data2DItem.
//!
//! @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_MODEL_DATA_DATA2DITEM_H
#define BORNAGAIN_GUI_MODEL_DATA_DATA2DITEM_H

#include "GUI/Model/Data/DataItem.h"
#include <utility>

class AmplitudeAxisItem;
class LineItem;
class MasksQModel;
class MasksSet;

class Data2DItem : public DataItem {
    Q_OBJECT
public:
    static constexpr auto M_TYPE{"IntensityData"};

    Data2DItem();
    ~Data2DItem();

    void setDatafield(const Datafield& data) override;

    double xMin() const override;
    double xMax() const override;

    double yMin() const override;
    double yMax() const override;

    double zMin() const;
    double zMax() const;

    //... zoom ranges
    double lowerZ() const;
    double upperZ() const;
    void setZrange(double zmin, double zmax);
    void copyZRangeFromItem(DataItem* sourceItem);
    bool isZoomed() const;

    //... logarithmic Z scale
    bool isLog() const;
    void setLog(bool islog);

    //... enable/disable colormap interpolation
    bool isInterpolated() const { return m_is_interpolated; }
    void setInterpolated(bool interp);

    bool isValAxisLocked() const override;
    void setValAxisLocked(bool state) override;

    void updateDataRange();
    void computeDataRange();
    std::pair<double, double> dataRange() const;

    const AmplitudeAxisItem* zAxisItem() const { return m_z_axis.get(); }
    AmplitudeAxisItem* zAxisItem() { return m_z_axis.get(); }

    MasksSet* masksRW() { return m_masks.get(); }
    const MasksSet* masks() const { return m_masks.get(); }

    MasksSet* prjnsRW() { return m_prjns.get(); }
    const MasksSet* prjns() const { return m_prjns.get(); }

    size_t rank() const override { return 2; }
    size_t axdim(int i) const override;

    void resetView() override; //!< Sets axes viewport to original data.

    void setAxesRangeToData(); //!< Sets zoom range of x,y axes to axes of input data

    // write/read

    void writeTo(QXmlStreamWriter* w) const override;
    void readFrom(QXmlStreamReader* r) override;

signals:
    void interpolationChanged(bool isInterpol);
    void projectionCreated();
    void projectionPositionChanged(const LineItem* projection);
    void projectionGone(const LineItem* projection);

private:
    void updateAxesZoomLevel();

    bool m_is_interpolated;
    std::unique_ptr<AmplitudeAxisItem> m_z_axis;
    std::unique_ptr<MasksSet> m_masks;
    std::unique_ptr<MasksSet> m_prjns;
};

#endif // BORNAGAIN_GUI_MODEL_DATA_DATA2DITEM_H