File: FitParameterItem.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 (138 lines) | stat: -rw-r--r-- 4,388 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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//  ************************************************************************************************
//
//  BornAgain: simulate and fit reflection and scattering
//
//! @file      GUI/Model/Tune/FitParameterItem.h
//! @brief     Defines classes FitTypeItem FitDoubleItem FitEditableDoubleItem FitParameterItem.
//!
//! @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_TUNE_FITPARAMETERITEM_H
#define BORNAGAIN_GUI_MODEL_TUNE_FITPARAMETERITEM_H

#include "Base/Type/OwningVector.h"
#include "Fit/Param/AttLimits.h"
#include "GUI/Model/Descriptor/ComboProperty.h"

class FitParameterLinkItem;

//! Holds ComboProperty values, accessible from FitparameterModel.
class FitTypeItem : public QObject {
    Q_OBJECT
public:
    explicit FitTypeItem(const ComboProperty& type, QObject* parent = nullptr);

    const ComboProperty& type() const { return m_type; }
    void setType(const ComboProperty& c) { m_type = c; }

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

private:
    ComboProperty m_type;
};

//! Holds a floating-point variable, accessible from FitparameterModel.
class FitDoubleItem : public QObject {
    Q_OBJECT
public:
    explicit FitDoubleItem(double value, QObject* parent = nullptr);

    double value() const { return m_value; }
    void setDVal(double value) { m_value = value; }

    const RealLimits& limits() const { return m_limits; }
    void setLimits(const RealLimits& l) { m_limits = l; }

    int decimals() const { return m_decimals; }
    void setDecimals(int v) { m_decimals = v; }

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

private:
    double m_value;
    int m_decimals;      // no need to save/load
    RealLimits m_limits; // no need to save/load
};

//! Holds floating-point variables which can be enabled or disabled, accessible from
//! FitparameterModel
class FitEditableDoubleItem : public FitDoubleItem {
public:
    explicit FitEditableDoubleItem(double value, bool isEnabled, QObject* parent = nullptr);

    bool isEnabled() const { return m_is_enabled; }
    void setEnabled(bool b) { m_is_enabled = b; }

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

private:
    bool m_is_enabled;
};

//! Represents a fit parameter in GUI. Contains links to corresponding ParameterItems in a tuning
//! tree.
class FitParameterItem : public QObject {
    Q_OBJECT
public:
    explicit FitParameterItem(QObject* parent = nullptr);

    void initMinMaxValues(const RealLimits& limits);

    AttLimits attLimits() const;

    bool isValid() const;

    QString displayName() const { return m_display_name; }
    void setDisplayName(QString displayName);

    double startValue() const;
    void setStartValue(double start_value);
    QObject* startValueItem() const;

    double minimum() const;
    void setMinimum(double minimum);
    QObject* minimumItem() const;

    double maximum() const;
    void setMaximum(double maximum);
    QObject* maximumItem() const;

    FitParameterLinkItem* addLinkItem(const QString& title, const QString& link);
    void removeLink(const QString& link);

    QVector<FitParameterLinkItem*> linkItems() const;
    QStringList links() const;

    void setTypeCombo(const ComboProperty& type);
    QString currentType() const;
    QObject* typeItem() const;

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

private:
    void onTypeChange();
    void setLimitEnabled(FitEditableDoubleItem* propertyItem, bool enabled);
    bool isLimited() const;
    bool isFree() const;
    bool isLowerLimited() const;
    bool isUpperLimited() const;
    bool isFixed() const;

    QString m_display_name;
    std::unique_ptr<FitTypeItem> m_type_item;
    std::unique_ptr<FitDoubleItem> m_start_value_item;
    std::unique_ptr<FitEditableDoubleItem> m_min_item;
    std::unique_ptr<FitEditableDoubleItem> m_max_item;
    OwningVector<FitParameterLinkItem> m_links;
};

#endif // BORNAGAIN_GUI_MODEL_TUNE_FITPARAMETERITEM_H