BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
FTDistributionItems.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // BornAgain: simulate and fit reflection and scattering
4 //
5 //! @file GUI/coregui/Models/FTDistributionItems.cpp
6 //! @brief Implements FTDistribution1DItem's classes
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2018
11 //! @authors Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
16 #include "Base/Const/Units.h"
17 
18 const QString FTDistribution1DItem::P_OMEGA = QString::fromStdString("Omega");
19 
21 
23 {
24  addProperty(P_OMEGA, 1.0)->setToolTip("Half-width of the distribution in nanometers");
25 }
26 
27 // --------------------------------------------------------------------------------------------- //
28 
30  : FTDistribution1DItem("FTDistribution1DCauchy")
31 {
32  setToolTip("One-dimensional Cauchy probability distribution");
34 }
35 
36 std::unique_ptr<IFTDistribution1D> FTDistribution1DCauchyItem::createFTDistribution() const
37 {
38  return std::make_unique<FTDistribution1DCauchy>(getItemValue(P_OMEGA).toDouble());
39 }
40 
41 // --------------------------------------------------------------------------------------------- //
42 
44  : FTDistribution1DItem("FTDistribution1DGauss")
45 {
46  setToolTip("One-dimensional Gauss probability distribution");
48 }
49 
50 std::unique_ptr<IFTDistribution1D> FTDistribution1DGaussItem::createFTDistribution() const
51 {
52  return std::make_unique<FTDistribution1DGauss>(getItemValue(P_OMEGA).toDouble());
53 }
54 
55 // --------------------------------------------------------------------------------------------- //
56 
58 {
59  setToolTip("One-dimensional Gate probability distribution");
61 }
62 
63 std::unique_ptr<IFTDistribution1D> FTDistribution1DGateItem::createFTDistribution() const
64 {
65  return std::make_unique<FTDistribution1DGate>(getItemValue(P_OMEGA).toDouble());
66 }
67 
68 // --------------------------------------------------------------------------------------------- //
69 
71  : FTDistribution1DItem("FTDistribution1DTriangle")
72 {
73  setToolTip("One-dimensional triangle probability distribution");
75 }
76 
77 std::unique_ptr<IFTDistribution1D> FTDistribution1DTriangleItem::createFTDistribution() const
78 {
79  return std::make_unique<FTDistribution1DTriangle>(getItemValue(P_OMEGA).toDouble());
80 }
81 
82 // --------------------------------------------------------------------------------------------- //
83 
85  : FTDistribution1DItem("FTDistribution1DCosine")
86 {
87  setToolTip("One-dimensional Cosine probability distribution");
89 }
90 
91 std::unique_ptr<IFTDistribution1D> FTDistribution1DCosineItem::createFTDistribution() const
92 {
93  return std::make_unique<FTDistribution1DCosine>(getItemValue(P_OMEGA).toDouble());
94 }
95 
96 // --------------------------------------------------------------------------------------------- //
97 
98 const QString FTDistribution1DVoigtItem::P_ETA = QString::fromStdString("Eta");
99 
101  : FTDistribution1DItem("FTDistribution1DVoigt")
102 {
103  setToolTip("One-dimensional pseudo-Voigt probability distribution");
105  addProperty(P_ETA, 0.5)
106  ->setLimits(RealLimits::limited(0.0, 1.0))
107  .setToolTip("Parameter [0,1] to balance between Cauchy (eta=0.0) and Gauss (eta=1.0)");
108 }
109 
110 std::unique_ptr<IFTDistribution1D> FTDistribution1DVoigtItem::createFTDistribution() const
111 {
112  return std::make_unique<FTDistribution1DVoigt>(getItemValue(P_OMEGA).toDouble(),
113  getItemValue(P_ETA).toDouble());
114 }
115 
116 // --------------------------------------------------------------------------------------------- //
117 
118 const QString FTDistribution2DItem::P_OMEGA_X = QString::fromStdString("OmegaX");
119 const QString FTDistribution2DItem::P_OMEGA_Y = QString::fromStdString("OmegaY");
120 const QString FTDistribution2DItem::P_GAMMA = QString::fromStdString("Gamma");
121 
123 
125 {
126  addProperty(P_OMEGA_X, 1.0)
127  ->setToolTip("Half-width of the distribution along its x-axis in nanometers");
128  addProperty(P_OMEGA_Y, 1.0)
129  ->setToolTip("Half-width of the distribution along its y-axis in nanometers");
130 }
131 
133 {
134  addProperty(P_GAMMA, 0.0)
135  ->setToolTip("Angle in direct space between "
136  "first lattice vector \nand x-axis of the distribution in degrees");
137 }
138 
140 {
143 }
144 
145 // --------------------------------------------------------------------------------------------- //
146 
148  : FTDistribution2DItem("FTDistribution2DCauchy")
149 {
150  setToolTip("Two-dimensional Cauchy probability distribution");
151  add_properties();
152 }
153 
154 std::unique_ptr<IFTDistribution2D> FTDistribution2DCauchyItem::createFTDistribution() const
155 {
156  return std::make_unique<FTDistribution2DCauchy>(
157  getItemValue(P_OMEGA_X).toDouble(), getItemValue(P_OMEGA_Y).toDouble(),
158  Units::deg2rad(getItemValue(P_GAMMA).toDouble()));
159 }
160 
161 // --------------------------------------------------------------------------------------------- //
162 
164  : FTDistribution2DItem("FTDistribution2DGauss")
165 {
166  setToolTip("Two-dimensional Gauss probability distribution");
167  add_properties();
168 }
169 
170 std::unique_ptr<IFTDistribution2D> FTDistribution2DGaussItem::createFTDistribution() const
171 {
172  return std::make_unique<FTDistribution2DGauss>(
173  getItemValue(P_OMEGA_X).toDouble(), getItemValue(P_OMEGA_Y).toDouble(),
174  Units::deg2rad(getItemValue(P_GAMMA).toDouble()));
175 }
176 
177 // --------------------------------------------------------------------------------------------- //
178 
180 {
181  setToolTip("Two-dimensional Gate probability distribution");
182  add_properties();
183 }
184 
185 std::unique_ptr<IFTDistribution2D> FTDistribution2DGateItem::createFTDistribution() const
186 {
187  return std::make_unique<FTDistribution2DGate>(getItemValue(P_OMEGA_X).toDouble(),
188  getItemValue(P_OMEGA_Y).toDouble(),
189  Units::deg2rad(getItemValue(P_GAMMA).toDouble()));
190 }
191 
192 // --------------------------------------------------------------------------------------------- //
193 
195 {
196  setToolTip("Two-dimensional Cone probability distribution");
197  add_properties();
198 }
199 
200 std::unique_ptr<IFTDistribution2D> FTDistribution2DConeItem::createFTDistribution() const
201 {
202  return std::make_unique<FTDistribution2DCone>(getItemValue(P_OMEGA_X).toDouble(),
203  getItemValue(P_OMEGA_Y).toDouble(),
204  Units::deg2rad(getItemValue(P_GAMMA).toDouble()));
205 }
206 
207 // --------------------------------------------------------------------------------------------- //
208 
209 const QString FTDistribution2DVoigtItem::P_ETA = QString::fromStdString("Eta");
210 
212  : FTDistribution2DItem("FTDistribution2DVoigt")
213 {
214  setToolTip("Two-dimensional pseudo-Voigt probability distribution");
215 
217  addProperty(P_ETA, 0.5)
218  ->setLimits(RealLimits::limited(0.0, 1.0))
219  .setToolTip("Parameter [0,1] to balance between Cauchy (eta=0.0) and Gauss (eta=1.0)");
221 }
222 
223 std::unique_ptr<IFTDistribution2D> FTDistribution2DVoigtItem::createFTDistribution() const
224 {
225  return std::make_unique<FTDistribution2DVoigt>(
226  getItemValue(P_OMEGA_X).toDouble(), getItemValue(P_OMEGA_Y).toDouble(),
227  getItemValue(P_ETA).toDouble(), Units::deg2rad(getItemValue(P_GAMMA).toDouble()));
228 }
Defines FTDistribution1DItem's classes.
Defines some unit conversion factors and other constants in namespace Units.
std::unique_ptr< IFTDistribution1D > createFTDistribution() const
std::unique_ptr< IFTDistribution1D > createFTDistribution() const
std::unique_ptr< IFTDistribution1D > createFTDistribution() const
std::unique_ptr< IFTDistribution1D > createFTDistribution() const
static const QString P_OMEGA
FTDistribution1DItem(const QString &name)
std::unique_ptr< IFTDistribution1D > createFTDistribution() const
std::unique_ptr< IFTDistribution1D > createFTDistribution() const
static const QString P_ETA
std::unique_ptr< IFTDistribution2D > createFTDistribution() const
std::unique_ptr< IFTDistribution2D > createFTDistribution() const
std::unique_ptr< IFTDistribution2D > createFTDistribution() const
std::unique_ptr< IFTDistribution2D > createFTDistribution() const
static const QString P_OMEGA_X
FTDistribution2DItem(const QString &name)
static const QString P_GAMMA
static const QString P_OMEGA_Y
std::unique_ptr< IFTDistribution2D > createFTDistribution() const
static const QString P_ETA
static RealLimits limited(double left_bound_value, double right_bound_value)
Creates an object bounded from the left and right.
Definition: RealLimits.cpp:125
SessionItem * addProperty(const QString &name, const QVariant &variant)
Add new property item and register new tag.
QVariant getItemValue(const QString &tag) const
Directly access value of item under given tag.
SessionItem & setToolTip(const QString &tooltip)
SessionItem & setLimits(const RealLimits &value)
QString const & name(EShape k)
Definition: particles.cpp:21
double deg2rad(double angle)
Definition: Units.h:59