BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
axisitems.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // qt-mvvm: Model-view-view-model framework for large GUI applications
4 //
5 //! @file mvvm/model/mvvm/standarditems/axisitems.cpp
6 //! @brief Implements class CLASS?
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2020
11 //! @authors Gennady Pospelov et al, Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
17 
18 namespace {
19 const double default_axis_min = 0.0;
20 const double default_axis_max = 1.0;
21 } // namespace
22 
23 using namespace ModelView;
24 
26 
28 {
29  addProperty(P_MIN, default_axis_min)->setDisplayName("Min");
30  addProperty(P_MAX, default_axis_max)->setDisplayName("Max");
31 }
32 
33 // --- ViewportAxisItem ------------------------------------------------------
34 
36 {
37  addProperty<TextItem>(P_TITLE)->setDisplayName("Title");
39  addProperty(P_IS_LOG, false)->setDisplayName("log10");
40 }
41 
42 //! Returns pair of lower, upper axis range.
43 
44 std::pair<double, double> ViewportAxisItem::range() const
45 {
46  return std::make_pair(property<double>(P_MIN), property<double>(P_MAX));
47 }
48 
49 //! Sets lower, upper range of axis to given values.
50 
51 void ViewportAxisItem::set_range(double lower, double upper)
52 {
53  setProperty(P_MIN, lower);
54  setProperty(P_MAX, upper);
55 }
56 
58 {
59  return property<bool>(P_IS_LOG);
60 }
61 
62 // --- BinnedAxisItem ------------------------------------------------------
63 
65 
66 // --- FixedBinAxisItem ------------------------------------------------------
67 
69 {
70  addProperty(P_NBINS, 1)->setDisplayName("Nbins");
72 }
73 
74 void FixedBinAxisItem::setParameters(int nbins, double xmin, double xmax)
75 {
76  setProperty(P_NBINS, nbins);
77  setProperty(P_MIN, xmin);
78  setProperty(P_MAX, xmax);
79 }
80 
81 std::unique_ptr<FixedBinAxisItem> FixedBinAxisItem::create(int nbins, double xmin, double xmax)
82 {
83  auto result = std::make_unique<FixedBinAxisItem>();
84  result->setParameters(nbins, xmin, xmax);
85  return result;
86 }
87 
88 std::pair<double, double> FixedBinAxisItem::range() const
89 {
90  return std::make_pair(property<double>(P_MIN), property<double>(P_MAX));
91 }
92 
94 {
95  return property<int>(P_NBINS);
96 }
97 
98 std::vector<double> FixedBinAxisItem::binCenters() const
99 {
100  std::vector<double> result;
101  int nbins = property<int>(P_NBINS);
102  double start = property<double>(P_MIN);
103  double end = property<double>(P_MAX);
104  double step = (end - start) / nbins;
105 
106  result.resize(static_cast<size_t>(nbins), 0.0);
107  for (size_t i = 0; i < static_cast<size_t>(nbins); ++i)
108  result[i] = start + step * (i + 0.5);
109 
110  return result;
111 }
112 
113 // --- PointwiseAxisItem ------------------------------------------------------
114 
116 {
117  // vector of points matching default xmin, xmax
118  setData(std::vector<double>{default_axis_min, default_axis_max});
119  setEditable(false); // prevent editing in widgets, since there is no corresponding editor
120 }
121 
122 void PointwiseAxisItem::setParameters(const std::vector<double>& data)
123 {
124  setData(data);
125 }
126 
127 std::unique_ptr<PointwiseAxisItem> PointwiseAxisItem::create(const std::vector<double>& data)
128 {
129  auto result = std::make_unique<PointwiseAxisItem>();
130  result->setParameters(data);
131  return result;
132 }
133 
134 std::pair<double, double> PointwiseAxisItem::range() const
135 {
136  auto data = binCenters();
137  return binCenters().empty() ? std::make_pair(default_axis_min, default_axis_max)
138  : std::make_pair(data.front(), data.back());
139 }
140 
142 {
143  return binCenters().size();
144 }
145 
146 std::vector<double> PointwiseAxisItem::binCenters() const
147 {
148  return data<std::vector<double>>();
149 }
Defines class CLASS?
Base class for all axes items. Has min, max defined, but nothing else.
Definition: axisitems.h:29
static const std::string P_MAX
Definition: axisitems.h:32
BasicAxisItem(const std::string &model_type)
Definition: axisitems.cpp:25
static const std::string P_MIN
Definition: axisitems.h:31
Item to represent an axis with arbitrary binning.
Definition: axisitems.h:61
BinnedAxisItem(const std::string &model_type)
Definition: axisitems.cpp:64
Complex item holding mixed SessionItem types (single properties and other CompountItems).
Definition: compounditem.h:28
T * addProperty(const std::string &name)
Adds property item of given type.
Definition: compounditem.h:43
std::pair< double, double > range() const override
Definition: axisitems.cpp:88
FixedBinAxisItem(const std::string &model_type=Constants::FixedBinAxisItemType)
Definition: axisitems.cpp:68
static const std::string P_NBINS
Definition: axisitems.h:77
std::vector< double > binCenters() const override
Definition: axisitems.cpp:98
int size() const override
Definition: axisitems.cpp:93
static std::unique_ptr< FixedBinAxisItem > create(int nbins, double xmin, double xmax)
Definition: axisitems.cpp:81
void setParameters(int nbins, double xmin, double xmax)
Definition: axisitems.cpp:74
std::vector< double > binCenters() const override
Definition: axisitems.cpp:146
PointwiseAxisItem(const std::string &model_type=Constants::PointwiseAxisItemType)
Definition: axisitems.cpp:115
std::pair< double, double > range() const override
Definition: axisitems.cpp:134
void setParameters(const std::vector< double > &data)
Definition: axisitems.cpp:122
int size() const override
Definition: axisitems.cpp:141
static std::unique_ptr< PointwiseAxisItem > create(const std::vector< double > &data)
Definition: axisitems.cpp:127
SessionItem * setEditable(bool value)
Sets editable flag to given value (fluent interface).
bool setData(const T &value, int role=ItemDataRole::DATA, bool direct=false)
Sets data for a given role.
Definition: sessionitem.h:141
T data(int role=ItemDataRole::DATA) const
Returns data of given type T for given role.
Definition: sessionitem.h:148
virtual SessionItem * setDisplayName(const std::string &name)
Sets display name (fluent interface).
void setProperty(const std::string &tag, const T &value)
Sets value to property item.
Definition: sessionitem.h:190
void set_range(double lower, double upper)
Sets lower, upper range of axis to given values.
Definition: axisitems.cpp:51
static const std::string P_IS_LOG
Definition: axisitems.h:46
ViewportAxisItem(const std::string &model_type=Constants::ViewportAxisItemType)
Definition: axisitems.cpp:35
static const std::string P_TITLE
Definition: axisitems.h:45
std::pair< double, double > range() const
Returns pair of lower, upper axis range.
Definition: axisitems.cpp:44
materialitems.h Collection of materials to populate MaterialModel.
std::string model_type
Definition: types.h:23
Defines class CLASS?