CTL  0.6.1
Computed Tomography Library
datamodels1d.h
Go to the documentation of this file.
1 #ifndef CTL_DATAMODELS1D_H
2 #define CTL_DATAMODELS1D_H
3 
4 #include "abstractdatamodel.h"
5 #include <cfloat>
6 
7 namespace CTL {
8 
24 {
26 
27  public: float valueAt(float position) const override;
28  public: float binIntegral(float position, float binWidth) const override;
29  public: AbstractIntegrableDataModel* clone() const override;
30 
31 public:
32  explicit SaturatedLinearModel(float lowerCap = 0.0f, float upperCap = FLT_MAX);
33 
34  QVariant parameter() const override;
35  void setParameter(const QVariant& parameter) override;
36 
37 private:
38  float _a = 0.0f;
39  float _b = FLT_MAX;
40 
41  void setParFromList(const QVariantList& list);
42  void setParFromMap(const QVariantMap& map);
43 };
44 
62 {
64 
65  public: float valueAt(float position) const override;
66  public: AbstractDataModel* clone() const override;
67 
68 public:
69  explicit SaturatedSplineModel(float lowerCap = 0.0f, float upperCap = FLT_MAX, float softening = 0.0f);
70  SaturatedSplineModel(float lowerCap, float upperCap, float softLower, float softUpper);
71 
72  QVariant parameter() const override;
73  void setParameter(const QVariant& parameter) override;
74 
75 private:
76  float _a = 0.0f;
77  float _b = FLT_MAX;
78  float _softA = 0.0f;
79  float _softB = 0.0f;
80 
81  void setParFromList(const QVariantList& list);
82  void setParFromMap(const QVariantMap& map);
83 
84  float spline1(float x) const;
85  float spline2(float x) const;
86 };
87 
88 
89 // ####################################
90 // Step functions & other simple models
91 // ####################################
92 
93 /*
94  * All step functions are implemented with left-closed and right-open intervals,
95  * i.e. they are piecewise constant on intervals of the form [a,b).
96  * This allows seamless compositions of these models.
97  */
98 
107 {
109 
110  public: float valueAt(float position) const override;
111  public: float binIntegral(float position, float binWidth) const override;
112  public: AbstractIntegrableDataModel* clone() const override;
113 
114 public:
115  enum StepDirection{ RightIsZero = 0, Downwards = 0, LeftIsZero = 1, Upwards = 1 };
116 
117  explicit StepFunctionModel(float threshold = 0.0f, float amplitude = 1.0f, StepDirection stepDirection = LeftIsZero);
118 
119  QVariant parameter() const override;
120  void setParameter(const QVariant& parameter) override;
121 
122 private:
123  float _threshold;
124  float _amplitude;
125  StepDirection _stepDirection;
126 };
127 
135 {
137 
138  public: float valueAt(float position) const override;
139  public: float binIntegral(float position, float binWidth) const override;
140  public: AbstractIntegrableDataModel* clone() const override;
141 
142 public:
143  explicit ConstantModel(float amplitude = 1.0f);
144 
145  QVariant parameter() const override;
146  void setParameter(const QVariant& parameter) override;
147 
148 private:
149  float _amplitude;
150 };
151 
160 {
162 
163  public: float valueAt(float position) const override;
164  public: AbstractDataModel* clone() const override;
165 
166 public:
167  explicit RectFunctionModel(float rectBegin = -0.5f, float rectEnd = 0.5f, float amplitude = 1.0f);
168 
169  QVariant parameter() const override;
170  void setParameter(const QVariant& parameter) override;
171 
172 private:
173  float _rectBegin;
174  float _rectEnd;
175  float _amplitude;
176 };
177 
185 {
187 
188  public: float valueAt(float position) const override;
189  public: float binIntegral(float position, float binWidth) const override;
190  public: AbstractIntegrableDataModel* clone() const override;
191 
192 public:
193  IdentityModel();
194 };
195 
203 {
205 
206  // AbstractDataModel2D interface
207  public: float valueAt(float position) const override;
208  public: float binIntegral(float position, float binWidth) const override;
209  public: AbstractIntegrableDataModel* clone() const override;
210 
211 public:
212  explicit GaussianModel1D(float amplitude = 1.0f, float mean = 0.0f, float std = 1.0f);
213 
214  // SerializationInterface interface
215  QVariant toVariant() const override;
216  QVariant parameter() const override;
217  void setParameter(const QVariant& parameter) override;
218 
219 private:
220  float _ampl = 1.0f;
221  float _mean = 0.0f;
222  float _std = 1.0f;
223 };
224 
225 // typedefs
228 
229 } // namespace CTL
230 
232 
248 
250 #endif // CTL_DATAMODELS1D_H
float valueAt(float position) const override
Returns the value from the model at position.
Definition: datamodels1d.cpp:44
void setParFromMap(const QVariantMap &map)
Definition: datamodels1d.cpp:161
float binIntegral(float position, float binWidth) const override
Returns the integral over model values in the interval [position - 0.5 * binWidth,...
Definition: datamodels1d.cpp:55
The SaturatedSplineModel is a data model to map values according to a dependency composed of a linear...
Definition: datamodels1d.h:61
float _a
lower saturation level
Definition: datamodels1d.h:38
void setParFromList(const QVariantList &list)
Definition: datamodels1d.cpp:146
QVariant parameter() const override
Definition: datamodels1d.cpp:96
AbstractIntegrableDataModel * clone() const override
Definition: datamodels1d.cpp:85
void setParameter(const QVariant &parameter) override
Definition: datamodels1d.cpp:132
The AbstractDataModel class is the base class for basic data models.
Definition: abstractdatamodel.h:55
The ConstantModel class represents a model that always returns a fixed value.
Definition: datamodels1d.h:134
float _b
upper saturation level
Definition: datamodels1d.h:39
The StepFunctionModel class represents a step (Heaviside) function.
Definition: datamodels1d.h:106
#define CTL_TYPE_ID(newIndex)
Definition: serializationinterface.h:189
The SaturatedLinearModel is a data model to map values according to a linear central segment that con...
Definition: datamodels1d.h:23
The AbstractIntegrableDataModel class is the base class for data models that provide a means to integ...
Definition: abstractdatamodel.h:110
QVariant toVariant() const override
Definition: abstractdatamodel.cpp:19
The IdentityModel class represents the identity function.
Definition: datamodels1d.h:184
The GaussianModel1D class represents a one-dimensional Gaussian curve.
Definition: datamodels1d.h:202
The RectFunctionModel class represents a rectangular (rect) function.
Definition: datamodels1d.h:159